edict-lang 0.1.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/LICENSE +21 -0
- package/README.md +202 -0
- package/dist/ast/nodes.d.ts +248 -0
- package/dist/ast/nodes.d.ts.map +1 -0
- package/dist/ast/nodes.js +95 -0
- package/dist/ast/nodes.js.map +1 -0
- package/dist/ast/types.d.ts +78 -0
- package/dist/ast/types.d.ts.map +1 -0
- package/dist/ast/types.js +7 -0
- package/dist/ast/types.js.map +1 -0
- package/dist/check.d.ts +19 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +49 -0
- package/dist/check.js.map +1 -0
- package/dist/checker/check.d.ts +7 -0
- package/dist/checker/check.d.ts.map +1 -0
- package/dist/checker/check.js +548 -0
- package/dist/checker/check.js.map +1 -0
- package/dist/checker/type-env.d.ts +24 -0
- package/dist/checker/type-env.d.ts.map +1 -0
- package/dist/checker/type-env.js +67 -0
- package/dist/checker/type-env.js.map +1 -0
- package/dist/checker/types-equal.d.ts +18 -0
- package/dist/checker/types-equal.d.ts.map +1 -0
- package/dist/checker/types-equal.js +79 -0
- package/dist/checker/types-equal.js.map +1 -0
- package/dist/codegen/builtins.d.ts +27 -0
- package/dist/codegen/builtins.d.ts.map +1 -0
- package/dist/codegen/builtins.js +54 -0
- package/dist/codegen/builtins.js.map +1 -0
- package/dist/codegen/codegen.d.ts +32 -0
- package/dist/codegen/codegen.d.ts.map +1 -0
- package/dist/codegen/codegen.js +1192 -0
- package/dist/codegen/codegen.js.map +1 -0
- package/dist/codegen/runner.d.ts +16 -0
- package/dist/codegen/runner.d.ts.map +1 -0
- package/dist/codegen/runner.js +82 -0
- package/dist/codegen/runner.js.map +1 -0
- package/dist/codegen/string-table.d.ts +35 -0
- package/dist/codegen/string-table.d.ts.map +1 -0
- package/dist/codegen/string-table.js +62 -0
- package/dist/codegen/string-table.js.map +1 -0
- package/dist/compile.d.ts +18 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +40 -0
- package/dist/compile.js.map +1 -0
- package/dist/contracts/translate.d.ts +39 -0
- package/dist/contracts/translate.d.ts.map +1 -0
- package/dist/contracts/translate.js +372 -0
- package/dist/contracts/translate.js.map +1 -0
- package/dist/contracts/verify.d.ts +8 -0
- package/dist/contracts/verify.d.ts.map +1 -0
- package/dist/contracts/verify.js +400 -0
- package/dist/contracts/verify.js.map +1 -0
- package/dist/contracts/z3-context.d.ts +14 -0
- package/dist/contracts/z3-context.d.ts.map +1 -0
- package/dist/contracts/z3-context.js +24 -0
- package/dist/contracts/z3-context.js.map +1 -0
- package/dist/effects/call-graph.d.ts +21 -0
- package/dist/effects/call-graph.d.ts.map +1 -0
- package/dist/effects/call-graph.js +135 -0
- package/dist/effects/call-graph.js.map +1 -0
- package/dist/effects/effect-check.d.ts +13 -0
- package/dist/effects/effect-check.d.ts.map +1 -0
- package/dist/effects/effect-check.js +48 -0
- package/dist/effects/effect-check.js.map +1 -0
- package/dist/errors/structured-errors.d.ts +193 -0
- package/dist/errors/structured-errors.d.ts.map +1 -0
- package/dist/errors/structured-errors.js +96 -0
- package/dist/errors/structured-errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/create-server.d.ts +3 -0
- package/dist/mcp/create-server.d.ts.map +1 -0
- package/dist/mcp/create-server.js +157 -0
- package/dist/mcp/create-server.js.map +1 -0
- package/dist/mcp/handlers.d.ts +44 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +112 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +129 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/resolver/levenshtein.d.ts +12 -0
- package/dist/resolver/levenshtein.d.ts.map +1 -0
- package/dist/resolver/levenshtein.js +54 -0
- package/dist/resolver/levenshtein.js.map +1 -0
- package/dist/resolver/resolve.d.ts +7 -0
- package/dist/resolver/resolve.d.ts.map +1 -0
- package/dist/resolver/resolve.js +393 -0
- package/dist/resolver/resolve.js.map +1 -0
- package/dist/resolver/scope.d.ts +34 -0
- package/dist/resolver/scope.d.ts.map +1 -0
- package/dist/resolver/scope.js +51 -0
- package/dist/resolver/scope.js.map +1 -0
- package/dist/validator/id-tracker.d.ts +14 -0
- package/dist/validator/id-tracker.d.ts.map +1 -0
- package/dist/validator/id-tracker.js +28 -0
- package/dist/validator/id-tracker.js.map +1 -0
- package/dist/validator/node-validators.d.ts +6 -0
- package/dist/validator/node-validators.d.ts.map +1 -0
- package/dist/validator/node-validators.js +808 -0
- package/dist/validator/node-validators.js.map +1 -0
- package/dist/validator/validate.d.ts +17 -0
- package/dist/validator/validate.d.ts.map +1 -0
- package/dist/validator/validate.js +27 -0
- package/dist/validator/validate.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Effect Checker
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Single-pass analysis: verify that each function's declared effects cover
|
|
5
|
+
// the effects of the functions it calls.
|
|
6
|
+
import { effectViolation, effectInPure } from "../errors/structured-errors.js";
|
|
7
|
+
import { buildCallGraph } from "./call-graph.js";
|
|
8
|
+
/**
|
|
9
|
+
* Check effect consistency across all functions in the module.
|
|
10
|
+
*
|
|
11
|
+
* For each function, iterates its call edges (skipping imports):
|
|
12
|
+
* - If caller is `pure`: any callee with non-pure effects → `effect_in_pure` error
|
|
13
|
+
* - If caller is not `pure`: missing caller effects → `effect_violation` error
|
|
14
|
+
*
|
|
15
|
+
* Returns an empty array if all effects are consistent.
|
|
16
|
+
*/
|
|
17
|
+
export function effectCheck(module) {
|
|
18
|
+
const { graph, functionDefs, importedNames } = buildCallGraph(module);
|
|
19
|
+
const errors = [];
|
|
20
|
+
for (const [fnName, fn] of functionDefs) {
|
|
21
|
+
const edges = graph.get(fnName) ?? [];
|
|
22
|
+
const callerEffects = new Set(fn.effects);
|
|
23
|
+
const isPure = callerEffects.has("pure");
|
|
24
|
+
for (const edge of edges) {
|
|
25
|
+
// Skip imported functions — effect-opaque
|
|
26
|
+
if (importedNames.has(edge.calleeName))
|
|
27
|
+
continue;
|
|
28
|
+
// Skip unknown callees (e.g., parameters used as functions)
|
|
29
|
+
const callee = functionDefs.get(edge.calleeName);
|
|
30
|
+
if (!callee)
|
|
31
|
+
continue;
|
|
32
|
+
const calleeNonPure = callee.effects.filter(e => e !== "pure");
|
|
33
|
+
if (calleeNonPure.length === 0)
|
|
34
|
+
continue;
|
|
35
|
+
if (isPure) {
|
|
36
|
+
errors.push(effectInPure(fn.id, fnName, edge.callSiteNodeId, edge.calleeName, calleeNonPure));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const missing = calleeNonPure.filter(e => !callerEffects.has(e));
|
|
40
|
+
if (missing.length > 0) {
|
|
41
|
+
errors.push(effectViolation(fn.id, fnName, missing, edge.callSiteNodeId, edge.calleeName));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return errors;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=effect-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-check.js","sourceRoot":"","sources":["../../src/effects/effect-check.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAChF,2EAA2E;AAC3E,yCAAyC;AAIzC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC3C,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,0CAA0C;YAC1C,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,SAAS;YAEjD,4DAA4D;YAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;YAC/D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEzC,IAAI,MAAM,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,YAAY,CACpB,EAAE,CAAC,EAAE,EACL,MAAM,EACN,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,UAAU,EACf,aAAa,CAChB,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,CAAC,IAAI,CAAC,eAAe,CACvB,EAAE,CAAC,EAAE,EACL,MAAM,EACN,OAAO,EACP,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,UAAU,CAClB,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import type { Effect } from "../ast/nodes.js";
|
|
2
|
+
import type { TypeExpr } from "../ast/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Union of all compiler errors (Phase 1–4).
|
|
5
|
+
*/
|
|
6
|
+
export type StructuredError = DuplicateIdError | UnknownNodeKindError | MissingFieldError | InvalidFieldTypeError | InvalidEffectError | InvalidOperatorError | InvalidBasicTypeName | ConflictingEffectsError | UndefinedReferenceError | DuplicateDefinitionError | UnknownRecordError | UnknownEnumError | UnknownVariantError | TypeMismatchError | ArityMismatchError | NotAFunctionError | UnknownFieldError | MissingRecordFieldsError | EffectViolationError | EffectInPureError | ContractFailureError | VerificationTimeoutError | UndecidablePredicateError | PreconditionNotMetError;
|
|
7
|
+
export interface DuplicateIdError {
|
|
8
|
+
error: "duplicate_id";
|
|
9
|
+
nodeId: string;
|
|
10
|
+
firstPath: string;
|
|
11
|
+
secondPath: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UnknownNodeKindError {
|
|
14
|
+
error: "unknown_node_kind";
|
|
15
|
+
path: string;
|
|
16
|
+
received: string;
|
|
17
|
+
validKinds: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
export interface MissingFieldError {
|
|
20
|
+
error: "missing_field";
|
|
21
|
+
path: string;
|
|
22
|
+
nodeId: string | null;
|
|
23
|
+
field: string;
|
|
24
|
+
expectedFormat: string;
|
|
25
|
+
}
|
|
26
|
+
export interface InvalidFieldTypeError {
|
|
27
|
+
error: "invalid_field_type";
|
|
28
|
+
path: string;
|
|
29
|
+
nodeId: string | null;
|
|
30
|
+
field: string;
|
|
31
|
+
expectedFormat: string;
|
|
32
|
+
actualFormat: string;
|
|
33
|
+
}
|
|
34
|
+
export interface InvalidEffectError {
|
|
35
|
+
error: "invalid_effect";
|
|
36
|
+
path: string;
|
|
37
|
+
nodeId: string | null;
|
|
38
|
+
received: string;
|
|
39
|
+
validEffects: readonly string[];
|
|
40
|
+
}
|
|
41
|
+
export interface InvalidOperatorError {
|
|
42
|
+
error: "invalid_operator";
|
|
43
|
+
path: string;
|
|
44
|
+
nodeId: string | null;
|
|
45
|
+
received: string;
|
|
46
|
+
validOperators: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
export interface InvalidBasicTypeName {
|
|
49
|
+
error: "invalid_basic_type_name";
|
|
50
|
+
path: string;
|
|
51
|
+
nodeId: string | null;
|
|
52
|
+
received: string;
|
|
53
|
+
validNames: readonly string[];
|
|
54
|
+
}
|
|
55
|
+
export interface ConflictingEffectsError {
|
|
56
|
+
error: "conflicting_effects";
|
|
57
|
+
path: string;
|
|
58
|
+
nodeId: string | null;
|
|
59
|
+
effectsFound: string[];
|
|
60
|
+
}
|
|
61
|
+
export interface UndefinedReferenceError {
|
|
62
|
+
error: "undefined_reference";
|
|
63
|
+
nodeId: string | null;
|
|
64
|
+
name: string;
|
|
65
|
+
candidates: string[];
|
|
66
|
+
}
|
|
67
|
+
export interface DuplicateDefinitionError {
|
|
68
|
+
error: "duplicate_definition";
|
|
69
|
+
nodeId: string | null;
|
|
70
|
+
name: string;
|
|
71
|
+
firstNodeId: string | null;
|
|
72
|
+
}
|
|
73
|
+
export interface UnknownRecordError {
|
|
74
|
+
error: "unknown_record";
|
|
75
|
+
nodeId: string | null;
|
|
76
|
+
name: string;
|
|
77
|
+
candidates: string[];
|
|
78
|
+
}
|
|
79
|
+
export interface UnknownEnumError {
|
|
80
|
+
error: "unknown_enum";
|
|
81
|
+
nodeId: string | null;
|
|
82
|
+
name: string;
|
|
83
|
+
candidates: string[];
|
|
84
|
+
}
|
|
85
|
+
export interface UnknownVariantError {
|
|
86
|
+
error: "unknown_variant";
|
|
87
|
+
nodeId: string | null;
|
|
88
|
+
enumName: string;
|
|
89
|
+
variantName: string;
|
|
90
|
+
availableVariants: string[];
|
|
91
|
+
}
|
|
92
|
+
export interface TypeMismatchError {
|
|
93
|
+
error: "type_mismatch";
|
|
94
|
+
nodeId: string | null;
|
|
95
|
+
expected: TypeExpr;
|
|
96
|
+
actual: TypeExpr;
|
|
97
|
+
}
|
|
98
|
+
export interface ArityMismatchError {
|
|
99
|
+
error: "arity_mismatch";
|
|
100
|
+
nodeId: string | null;
|
|
101
|
+
expected: number;
|
|
102
|
+
actual: number;
|
|
103
|
+
}
|
|
104
|
+
export interface NotAFunctionError {
|
|
105
|
+
error: "not_a_function";
|
|
106
|
+
nodeId: string | null;
|
|
107
|
+
actualType: TypeExpr;
|
|
108
|
+
}
|
|
109
|
+
export interface UnknownFieldError {
|
|
110
|
+
error: "unknown_field";
|
|
111
|
+
nodeId: string | null;
|
|
112
|
+
recordName: string;
|
|
113
|
+
fieldName: string;
|
|
114
|
+
availableFields: string[];
|
|
115
|
+
}
|
|
116
|
+
export interface MissingRecordFieldsError {
|
|
117
|
+
error: "missing_record_fields";
|
|
118
|
+
nodeId: string | null;
|
|
119
|
+
recordName: string;
|
|
120
|
+
missingFields: string[];
|
|
121
|
+
}
|
|
122
|
+
export declare function duplicateId(nodeId: string, firstPath: string, secondPath: string): DuplicateIdError;
|
|
123
|
+
export declare function unknownNodeKind(path: string, received: string, validKinds: readonly string[]): UnknownNodeKindError;
|
|
124
|
+
export declare function missingField(path: string, nodeId: string | null, field: string, expectedFormat: string): MissingFieldError;
|
|
125
|
+
export declare function invalidFieldType(path: string, nodeId: string | null, field: string, expectedFormat: string, actualFormat: string): InvalidFieldTypeError;
|
|
126
|
+
export declare function invalidEffect(path: string, nodeId: string | null, received: string, validEffects: readonly string[]): InvalidEffectError;
|
|
127
|
+
export declare function invalidOperator(path: string, nodeId: string | null, received: string, validOperators: readonly string[]): InvalidOperatorError;
|
|
128
|
+
export declare function invalidBasicTypeName(path: string, nodeId: string | null, received: string, validNames: readonly string[]): InvalidBasicTypeName;
|
|
129
|
+
export declare function conflictingEffects(path: string, nodeId: string | null, effectsFound: string[]): ConflictingEffectsError;
|
|
130
|
+
export declare function undefinedReference(nodeId: string | null, name: string, candidates: string[]): UndefinedReferenceError;
|
|
131
|
+
export declare function duplicateDefinition(nodeId: string | null, name: string, firstNodeId: string | null): DuplicateDefinitionError;
|
|
132
|
+
export declare function unknownRecord(nodeId: string | null, name: string, candidates: string[]): UnknownRecordError;
|
|
133
|
+
export declare function unknownEnum(nodeId: string | null, name: string, candidates: string[]): UnknownEnumError;
|
|
134
|
+
export declare function unknownVariant(nodeId: string | null, enumName: string, variantName: string, availableVariants: string[]): UnknownVariantError;
|
|
135
|
+
export declare function typeMismatch(nodeId: string | null, expected: TypeExpr, actual: TypeExpr): TypeMismatchError;
|
|
136
|
+
export declare function arityMismatch(nodeId: string | null, expected: number, actual: number): ArityMismatchError;
|
|
137
|
+
export declare function notAFunction(nodeId: string | null, actualType: TypeExpr): NotAFunctionError;
|
|
138
|
+
export declare function unknownField(nodeId: string | null, recordName: string, fieldName: string, availableFields: string[]): UnknownFieldError;
|
|
139
|
+
export declare function missingRecordFields(nodeId: string | null, recordName: string, missingFields: string[]): MissingRecordFieldsError;
|
|
140
|
+
export interface EffectViolationError {
|
|
141
|
+
error: "effect_violation";
|
|
142
|
+
nodeId: string | null;
|
|
143
|
+
functionName: string;
|
|
144
|
+
missingEffects: Effect[];
|
|
145
|
+
callSiteNodeId: string | null;
|
|
146
|
+
calleeName: string;
|
|
147
|
+
}
|
|
148
|
+
export interface EffectInPureError {
|
|
149
|
+
error: "effect_in_pure";
|
|
150
|
+
nodeId: string | null;
|
|
151
|
+
functionName: string;
|
|
152
|
+
callSiteNodeId: string | null;
|
|
153
|
+
calleeName: string;
|
|
154
|
+
calleeEffects: Effect[];
|
|
155
|
+
}
|
|
156
|
+
export declare function effectViolation(nodeId: string | null, functionName: string, missingEffects: Effect[], callSiteNodeId: string | null, calleeName: string): EffectViolationError;
|
|
157
|
+
export declare function effectInPure(nodeId: string | null, functionName: string, callSiteNodeId: string | null, calleeName: string, calleeEffects: Effect[]): EffectInPureError;
|
|
158
|
+
export interface ContractFailureError {
|
|
159
|
+
error: "contract_failure";
|
|
160
|
+
nodeId: string;
|
|
161
|
+
contractId: string;
|
|
162
|
+
functionName: string;
|
|
163
|
+
contractKind: "pre" | "post";
|
|
164
|
+
counterexample: Record<string, unknown>;
|
|
165
|
+
}
|
|
166
|
+
export interface VerificationTimeoutError {
|
|
167
|
+
error: "verification_timeout";
|
|
168
|
+
nodeId: string;
|
|
169
|
+
contractId: string;
|
|
170
|
+
functionName: string;
|
|
171
|
+
timeoutMs: number;
|
|
172
|
+
}
|
|
173
|
+
export interface UndecidablePredicateError {
|
|
174
|
+
error: "undecidable_predicate";
|
|
175
|
+
nodeId: string;
|
|
176
|
+
contractId: string;
|
|
177
|
+
functionName: string;
|
|
178
|
+
unsupportedNodeKind: string;
|
|
179
|
+
}
|
|
180
|
+
export interface PreconditionNotMetError {
|
|
181
|
+
error: "precondition_not_met";
|
|
182
|
+
nodeId: string;
|
|
183
|
+
callSiteId: string;
|
|
184
|
+
callerName: string;
|
|
185
|
+
calleeName: string;
|
|
186
|
+
contractId: string;
|
|
187
|
+
counterexample: Record<string, unknown>;
|
|
188
|
+
}
|
|
189
|
+
export declare function contractFailure(nodeId: string, contractId: string, functionName: string, contractKind: "pre" | "post", counterexample: Record<string, unknown>): ContractFailureError;
|
|
190
|
+
export declare function verificationTimeout(nodeId: string, contractId: string, functionName: string, timeoutMs: number): VerificationTimeoutError;
|
|
191
|
+
export declare function undecidablePredicate(nodeId: string, contractId: string, functionName: string, unsupportedNodeKind: string): UndecidablePredicateError;
|
|
192
|
+
export declare function preconditionNotMet(nodeId: string, callSiteId: string, callerName: string, calleeName: string, contractId: string, counterexample: Record<string, unknown>): PreconditionNotMetError;
|
|
193
|
+
//# sourceMappingURL=structured-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-errors.d.ts","sourceRoot":"","sources":["../../src/errors/structured-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Edict Structured Errors
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Every compiler error is a structured JSON object with enough context
|
|
5
|
+
// for an agent to self-repair. No human-readable strings.
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// Phase 1 error constructors
|
|
8
|
+
// =============================================================================
|
|
9
|
+
export function duplicateId(nodeId, firstPath, secondPath) {
|
|
10
|
+
return { error: "duplicate_id", nodeId, firstPath, secondPath };
|
|
11
|
+
}
|
|
12
|
+
export function unknownNodeKind(path, received, validKinds) {
|
|
13
|
+
return { error: "unknown_node_kind", path, received, validKinds };
|
|
14
|
+
}
|
|
15
|
+
export function missingField(path, nodeId, field, expectedFormat) {
|
|
16
|
+
return { error: "missing_field", path, nodeId, field, expectedFormat };
|
|
17
|
+
}
|
|
18
|
+
export function invalidFieldType(path, nodeId, field, expectedFormat, actualFormat) {
|
|
19
|
+
return { error: "invalid_field_type", path, nodeId, field, expectedFormat, actualFormat };
|
|
20
|
+
}
|
|
21
|
+
export function invalidEffect(path, nodeId, received, validEffects) {
|
|
22
|
+
return { error: "invalid_effect", path, nodeId, received, validEffects };
|
|
23
|
+
}
|
|
24
|
+
export function invalidOperator(path, nodeId, received, validOperators) {
|
|
25
|
+
return {
|
|
26
|
+
error: "invalid_operator",
|
|
27
|
+
path,
|
|
28
|
+
nodeId,
|
|
29
|
+
received,
|
|
30
|
+
validOperators,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function invalidBasicTypeName(path, nodeId, received, validNames) {
|
|
34
|
+
return { error: "invalid_basic_type_name", path, nodeId, received, validNames };
|
|
35
|
+
}
|
|
36
|
+
export function conflictingEffects(path, nodeId, effectsFound) {
|
|
37
|
+
return { error: "conflicting_effects", path, nodeId, effectsFound };
|
|
38
|
+
}
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// Phase 2 error constructors
|
|
41
|
+
// =============================================================================
|
|
42
|
+
export function undefinedReference(nodeId, name, candidates) {
|
|
43
|
+
return { error: "undefined_reference", nodeId, name, candidates };
|
|
44
|
+
}
|
|
45
|
+
export function duplicateDefinition(nodeId, name, firstNodeId) {
|
|
46
|
+
return { error: "duplicate_definition", nodeId, name, firstNodeId };
|
|
47
|
+
}
|
|
48
|
+
export function unknownRecord(nodeId, name, candidates) {
|
|
49
|
+
return { error: "unknown_record", nodeId, name, candidates };
|
|
50
|
+
}
|
|
51
|
+
export function unknownEnum(nodeId, name, candidates) {
|
|
52
|
+
return { error: "unknown_enum", nodeId, name, candidates };
|
|
53
|
+
}
|
|
54
|
+
export function unknownVariant(nodeId, enumName, variantName, availableVariants) {
|
|
55
|
+
return { error: "unknown_variant", nodeId, enumName, variantName, availableVariants };
|
|
56
|
+
}
|
|
57
|
+
export function typeMismatch(nodeId, expected, actual) {
|
|
58
|
+
return { error: "type_mismatch", nodeId, expected, actual };
|
|
59
|
+
}
|
|
60
|
+
export function arityMismatch(nodeId, expected, actual) {
|
|
61
|
+
return { error: "arity_mismatch", nodeId, expected, actual };
|
|
62
|
+
}
|
|
63
|
+
export function notAFunction(nodeId, actualType) {
|
|
64
|
+
return { error: "not_a_function", nodeId, actualType };
|
|
65
|
+
}
|
|
66
|
+
export function unknownField(nodeId, recordName, fieldName, availableFields) {
|
|
67
|
+
return { error: "unknown_field", nodeId, recordName, fieldName, availableFields };
|
|
68
|
+
}
|
|
69
|
+
export function missingRecordFields(nodeId, recordName, missingFields) {
|
|
70
|
+
return { error: "missing_record_fields", nodeId, recordName, missingFields };
|
|
71
|
+
}
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Phase 3 error constructors
|
|
74
|
+
// =============================================================================
|
|
75
|
+
export function effectViolation(nodeId, functionName, missingEffects, callSiteNodeId, calleeName) {
|
|
76
|
+
return { error: "effect_violation", nodeId, functionName, missingEffects, callSiteNodeId, calleeName };
|
|
77
|
+
}
|
|
78
|
+
export function effectInPure(nodeId, functionName, callSiteNodeId, calleeName, calleeEffects) {
|
|
79
|
+
return { error: "effect_in_pure", nodeId, functionName, callSiteNodeId, calleeName, calleeEffects };
|
|
80
|
+
}
|
|
81
|
+
// =============================================================================
|
|
82
|
+
// Phase 4 error constructors
|
|
83
|
+
// =============================================================================
|
|
84
|
+
export function contractFailure(nodeId, contractId, functionName, contractKind, counterexample) {
|
|
85
|
+
return { error: "contract_failure", nodeId, contractId, functionName, contractKind, counterexample };
|
|
86
|
+
}
|
|
87
|
+
export function verificationTimeout(nodeId, contractId, functionName, timeoutMs) {
|
|
88
|
+
return { error: "verification_timeout", nodeId, contractId, functionName, timeoutMs };
|
|
89
|
+
}
|
|
90
|
+
export function undecidablePredicate(nodeId, contractId, functionName, unsupportedNodeKind) {
|
|
91
|
+
return { error: "undecidable_predicate", nodeId, contractId, functionName, unsupportedNodeKind };
|
|
92
|
+
}
|
|
93
|
+
export function preconditionNotMet(nodeId, callSiteId, callerName, calleeName, contractId, counterexample) {
|
|
94
|
+
return { error: "precondition_not_met", nodeId, callSiteId, callerName, calleeName, contractId, counterexample };
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=structured-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-errors.js","sourceRoot":"","sources":["../../src/errors/structured-errors.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export { validate } from "./validator/validate.js";
|
|
2
|
+
export type { ValidationResult, ValidationSuccess, ValidationFailure, } from "./validator/validate.js";
|
|
3
|
+
export { resolve } from "./resolver/resolve.js";
|
|
4
|
+
export { Scope } from "./resolver/scope.js";
|
|
5
|
+
export type { SymbolKind, SymbolInfo } from "./resolver/scope.js";
|
|
6
|
+
export { levenshteinDistance, findCandidates } from "./resolver/levenshtein.js";
|
|
7
|
+
export { typeCheck } from "./checker/check.js";
|
|
8
|
+
export { TypeEnv } from "./checker/type-env.js";
|
|
9
|
+
export { typesEqual, isUnknown, resolveType } from "./checker/types-equal.js";
|
|
10
|
+
export { effectCheck } from "./effects/effect-check.js";
|
|
11
|
+
export { buildCallGraph, collectCalls } from "./effects/call-graph.js";
|
|
12
|
+
export type { CallEdge, CallGraph } from "./effects/call-graph.js";
|
|
13
|
+
export { contractVerify } from "./contracts/verify.js";
|
|
14
|
+
export { getZ3, resetZ3 } from "./contracts/z3-context.js";
|
|
15
|
+
export { translateExpr, translateExprList, createParamVariables } from "./contracts/translate.js";
|
|
16
|
+
export type { TranslationContext, TranslationError } from "./contracts/translate.js";
|
|
17
|
+
export { check } from "./check.js";
|
|
18
|
+
export type { CheckResult } from "./check.js";
|
|
19
|
+
export type { EdictModule, Import, Definition, FunctionDef, TypeDef, RecordDef, EnumDef, ConstDef, RecordField, EnumVariant, Param, Contract, Effect, Expression, Literal, Identifier, BinaryOp, BinaryOperator, UnaryOp, UnaryOperator, Call, IfExpr, LetExpr, MatchExpr, MatchArm, Pattern, LiteralPattern, WildcardPattern, BindingPattern, ConstructorPattern, ArrayExpr, TupleExpr, RecordExpr, EnumConstructor, FieldAccess, LambdaExpr, BlockExpr, FieldInit, } from "./ast/nodes.js";
|
|
20
|
+
export type { TypeExpr, BasicType, ArrayType, OptionType, ResultType, UnitType, RefinedType, FunctionType, NamedType, TupleType, } from "./ast/types.js";
|
|
21
|
+
export type { StructuredError, DuplicateIdError, UnknownNodeKindError, MissingFieldError, InvalidFieldTypeError, InvalidEffectError, InvalidOperatorError, InvalidBasicTypeName, ConflictingEffectsError, UndefinedReferenceError, DuplicateDefinitionError, UnknownRecordError, UnknownEnumError, UnknownVariantError, TypeMismatchError, ArityMismatchError, NotAFunctionError, UnknownFieldError, MissingRecordFieldsError, EffectViolationError, EffectInPureError, ContractFailureError, VerificationTimeoutError, UndecidablePredicateError, PreconditionNotMetError, } from "./errors/structured-errors.js";
|
|
22
|
+
export { duplicateId, unknownNodeKind, missingField, invalidFieldType, invalidEffect, invalidOperator, invalidBasicTypeName, conflictingEffects, } from "./errors/structured-errors.js";
|
|
23
|
+
export { undefinedReference, duplicateDefinition, unknownRecord, unknownEnum, unknownVariant, typeMismatch, arityMismatch, notAFunction, unknownField, missingRecordFields, } from "./errors/structured-errors.js";
|
|
24
|
+
export { effectViolation, effectInPure, } from "./errors/structured-errors.js";
|
|
25
|
+
export { contractFailure, verificationTimeout, undecidablePredicate, preconditionNotMet, } from "./errors/structured-errors.js";
|
|
26
|
+
export { compile } from "./codegen/codegen.js";
|
|
27
|
+
export type { CompileResult, CompileSuccess, CompileFailure, } from "./codegen/codegen.js";
|
|
28
|
+
export { run } from "./codegen/runner.js";
|
|
29
|
+
export type { RunResult } from "./codegen/runner.js";
|
|
30
|
+
export { compileAndRun } from "./compile.js";
|
|
31
|
+
export type { CompileAndRunResult, CompileAndRunSuccess, CompileAndRunFailure, } from "./compile.js";
|
|
32
|
+
export { StringTable } from "./codegen/string-table.js";
|
|
33
|
+
export { BUILTIN_FUNCTIONS, isBuiltin, getBuiltin } from "./codegen/builtins.js";
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Edict Public API
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Phase 1 — Validation
|
|
5
|
+
export { validate } from "./validator/validate.js";
|
|
6
|
+
// Phase 2 — Name Resolution
|
|
7
|
+
export { resolve } from "./resolver/resolve.js";
|
|
8
|
+
export { Scope } from "./resolver/scope.js";
|
|
9
|
+
export { levenshteinDistance, findCandidates } from "./resolver/levenshtein.js";
|
|
10
|
+
// Phase 2 — Type Checking
|
|
11
|
+
export { typeCheck } from "./checker/check.js";
|
|
12
|
+
export { TypeEnv } from "./checker/type-env.js";
|
|
13
|
+
export { typesEqual, isUnknown, resolveType } from "./checker/types-equal.js";
|
|
14
|
+
// Phase 3 — Effect Checking
|
|
15
|
+
export { effectCheck } from "./effects/effect-check.js";
|
|
16
|
+
export { buildCallGraph, collectCalls } from "./effects/call-graph.js";
|
|
17
|
+
// Phase 4 — Contract Verification
|
|
18
|
+
export { contractVerify } from "./contracts/verify.js";
|
|
19
|
+
export { getZ3, resetZ3 } from "./contracts/z3-context.js";
|
|
20
|
+
export { translateExpr, translateExprList, createParamVariables } from "./contracts/translate.js";
|
|
21
|
+
// Pipeline
|
|
22
|
+
export { check } from "./check.js";
|
|
23
|
+
// Error constructors — Phase 1
|
|
24
|
+
export { duplicateId, unknownNodeKind, missingField, invalidFieldType, invalidEffect, invalidOperator, invalidBasicTypeName, conflictingEffects, } from "./errors/structured-errors.js";
|
|
25
|
+
// Error constructors — Phase 2
|
|
26
|
+
export { undefinedReference, duplicateDefinition, unknownRecord, unknownEnum, unknownVariant, typeMismatch, arityMismatch, notAFunction, unknownField, missingRecordFields, } from "./errors/structured-errors.js";
|
|
27
|
+
// Error constructors — Phase 3
|
|
28
|
+
export { effectViolation, effectInPure, } from "./errors/structured-errors.js";
|
|
29
|
+
// Error constructors — Phase 4
|
|
30
|
+
export { contractFailure, verificationTimeout, undecidablePredicate, preconditionNotMet, } from "./errors/structured-errors.js";
|
|
31
|
+
// Phase 5 — Code generation
|
|
32
|
+
export { compile } from "./codegen/codegen.js";
|
|
33
|
+
export { run } from "./codegen/runner.js";
|
|
34
|
+
export { compileAndRun } from "./compile.js";
|
|
35
|
+
export { StringTable } from "./codegen/string-table.js";
|
|
36
|
+
export { BUILTIN_FUNCTIONS, isBuiltin, getBuiltin } from "./codegen/builtins.js";
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,uBAAuB;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAOnD,4BAA4B;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhF,0BAA0B;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE9E,4BAA4B;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvE,kCAAkC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGlG,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA2FnC,+BAA+B;AAC/B,OAAO,EACH,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACrB,MAAM,+BAA+B,CAAC;AAEvC,+BAA+B;AAC/B,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,+BAA+B;AAC/B,OAAO,EACH,eAAe,EACf,YAAY,GACf,MAAM,+BAA+B,CAAC;AAEvC,+BAA+B;AAC/B,OAAO,EACH,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACrB,MAAM,+BAA+B,CAAC;AAEvC,4BAA4B;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/mcp/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,wBAAgB,iBAAiB,IAAI,SAAS,CA+L7C"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { handleSchema, handleExamples, handleValidate, handleCheck, handleCompile, handleRun, handleVersion, } from "./handlers.js";
|
|
4
|
+
// =============================================================================
|
|
5
|
+
// Server setup
|
|
6
|
+
// =============================================================================
|
|
7
|
+
export function createEdictServer() {
|
|
8
|
+
const server = new McpServer({
|
|
9
|
+
name: "edict-compiler",
|
|
10
|
+
version: "0.1.0",
|
|
11
|
+
});
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Tools
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// edict_schema — Return the JSON Schema for EdictModule
|
|
16
|
+
server.tool("edict_schema", {}, async () => {
|
|
17
|
+
const result = handleSchema();
|
|
18
|
+
return {
|
|
19
|
+
content: [{ type: "text", text: JSON.stringify(result.schema) }],
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
// edict_version — Return capability info
|
|
23
|
+
server.tool("edict_version", {}, async () => {
|
|
24
|
+
const result = handleVersion();
|
|
25
|
+
return {
|
|
26
|
+
content: [
|
|
27
|
+
{
|
|
28
|
+
type: "text",
|
|
29
|
+
text: JSON.stringify(result, null, 2),
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
// edict_examples — Return all example programs
|
|
35
|
+
server.tool("edict_examples", {}, async () => {
|
|
36
|
+
const result = handleExamples();
|
|
37
|
+
return {
|
|
38
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
// edict_validate — Validate an AST against the JSON schema
|
|
42
|
+
server.tool("edict_validate", "Validate an Edict AST against the compiler's JSON schema without typing or compiling. Use this as a first pass.", {
|
|
43
|
+
ast: z.any().describe("The Edict JSON AST to validate"),
|
|
44
|
+
}, async ({ ast }) => {
|
|
45
|
+
const result = handleValidate(ast);
|
|
46
|
+
if (result.ok) {
|
|
47
|
+
return { content: [{ type: "text", text: "AST is schema-valid." }] };
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return {
|
|
51
|
+
content: [
|
|
52
|
+
{ type: "text", text: JSON.stringify({ errors: result.errors }, null, 2) },
|
|
53
|
+
],
|
|
54
|
+
isError: true,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
// edict_check — Type check, effect check, and verify contracts
|
|
59
|
+
server.tool("edict_check", "Run the full semantic checker (name resolution, type checking, effect checking, contract verification) on an AST.", {
|
|
60
|
+
ast: z.any().describe("The Edict JSON AST to check"),
|
|
61
|
+
}, async ({ ast }) => {
|
|
62
|
+
const result = await handleCheck(ast);
|
|
63
|
+
if (result.ok) {
|
|
64
|
+
return { content: [{ type: "text", text: "AST passed all semantic checks." }] };
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{ type: "text", text: JSON.stringify({ errors: result.errors }, null, 2) },
|
|
70
|
+
],
|
|
71
|
+
isError: true,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// edict_compile — Compile a checked AST to a base64 encoded WASM module
|
|
76
|
+
server.tool("edict_compile", "Compile a semantically valid Edict AST into a WebAssembly module. Returns the WASM binary encoded as a base64 string.", {
|
|
77
|
+
ast: z.any().describe("The Edict JSON AST to compile"),
|
|
78
|
+
}, async ({ ast }) => {
|
|
79
|
+
const result = await handleCompile(ast);
|
|
80
|
+
if (result.ok && result.wasm) {
|
|
81
|
+
return {
|
|
82
|
+
content: [
|
|
83
|
+
{
|
|
84
|
+
type: "text",
|
|
85
|
+
text: JSON.stringify({
|
|
86
|
+
message: "Compilation successful.",
|
|
87
|
+
wasm: result.wasm,
|
|
88
|
+
binarySize: result.wasm.length, // rough estimate
|
|
89
|
+
}, null, 2),
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return {
|
|
96
|
+
content: [
|
|
97
|
+
{ type: "text", text: JSON.stringify({ errors: result.errors }, null, 2) },
|
|
98
|
+
],
|
|
99
|
+
isError: true,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
// edict_run — Run a base64 encoded WASM module and return its output
|
|
104
|
+
server.tool("edict_run", "Execute a compiled WebAssembly module (provided as base64) using the Edict runtime host. Returns standard output and exit code.", {
|
|
105
|
+
wasmBase64: z.string().describe("The base64 encoded WebAssembly module to execute"),
|
|
106
|
+
}, async ({ wasmBase64 }) => {
|
|
107
|
+
try {
|
|
108
|
+
const result = await handleRun(wasmBase64);
|
|
109
|
+
return {
|
|
110
|
+
content: [
|
|
111
|
+
{
|
|
112
|
+
type: "text",
|
|
113
|
+
text: JSON.stringify(result, null, 2),
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return {
|
|
120
|
+
content: [{ type: "text", text: String(err) }],
|
|
121
|
+
isError: true,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
// =============================================================================
|
|
126
|
+
// Resources
|
|
127
|
+
// =============================================================================
|
|
128
|
+
server.resource("schema", "edict://schema", {
|
|
129
|
+
description: "The full JSON Schema defining valid Edict AST programs",
|
|
130
|
+
mimeType: "application/json",
|
|
131
|
+
}, async () => {
|
|
132
|
+
const result = handleSchema();
|
|
133
|
+
return {
|
|
134
|
+
contents: [
|
|
135
|
+
{
|
|
136
|
+
uri: "edict://schema",
|
|
137
|
+
mimeType: "application/json",
|
|
138
|
+
text: JSON.stringify(result.schema, null, 2),
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
server.resource("examples", "edict://examples", { description: "10 example Edict programs as JSON ASTs", mimeType: "application/json" }, async () => {
|
|
144
|
+
const result = handleExamples();
|
|
145
|
+
return {
|
|
146
|
+
contents: [
|
|
147
|
+
{
|
|
148
|
+
uri: "edict://examples",
|
|
149
|
+
mimeType: "application/json",
|
|
150
|
+
text: JSON.stringify(result, null, 2),
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
return server;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=create-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/mcp/create-server.ts"],"names":[],"mappings":"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"}
|