Edict

io.github.Sowiedu由 GitHub 账号 Sowiedu 发布v1.9.2更新于 Oct 24, 2026

AI-agent programming language. JSON AST in, WASM out. Typed, effect-tracked, Z3-verified.

已验证STDIO仅桌面开发者工具AI 与机器学习

概览

AI 生成的概览

Edict 的本地 MCP 服务器:面向 AI 代理的编程语言,助手以 JSON AST 编写程序,并进行校验、类型检查、验证与编译

可以做什么
通过 schema、示例、错误目录和解释工具及资源,了解 AST 格式、查看示例程序与编译器版本信息。对程序执行结构校验、名称解析、类型与效应检查、Z3 合约验证,并进行 lint 与按节点修补。将检查通过的 AST 编译为 WebAssembly 并在沙箱虚拟机中运行,支持执行追踪、调试与确定性重放。把片段组合为模块,依据已验证合约生成测试,并打包或导入可移植技能包。将程序部署到边缘运行时,并通过 HTTP 调用已部署的服务或技能。
适用场景
当你希望助手无需自由文本语法即可编写、验证并执行小程序,并能依据结构化编译错误自行修复时使用。适合在运行前需要类型、效应与合约保证的代理生成代码。
运行要求
需要本地运行时:通过 npx 以 stdio 运行 npm 包 edict-lang,或使用已发布的容器镜像。npm 方式需要 Node.js,容器方式无需本地 Node.js。未声明需要账号、API 密钥或环境变量。
安装前请注意
程序会被实际执行,且通过适配器可访问文件系统、HTTP、加密和环境变量等宿主能力,运行前应确认程序声明的能力。部署与调用工具会把程序和请求发送到边缘运行时及远程服务。技能导入与调用会运行第三方包。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Edict,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Edict

[CI] [License: MIT] [Node.js] [MCP]

[图片]

A programming language designed for AI agents. No parser. No syntax. Agents produce AST directly as JSON.

Edict is a statically-typed, effect-tracked programming language where the canonical program format is a JSON AST. It's purpose-built so AI agents can write, verify, and execute programs through a structured pipeline — no text parsing, no human-readable syntax, no ambiguity.

Agent (LLM)  │  produces JSON AST via MCP tool call  ↓Schema Validator ─── invalid? → StructuredError → Agent retries  ↓Name Resolver ────── undefined? → StructuredError + candidates → Agent retries  ↓Type Checker ─────── mismatch? → StructuredError + expected type → Agent retries  ↓Effect Checker ───── violation? → StructuredError + propagation chain → Agent retries  ↓Contract Verifier ── unproven? → StructuredError + counterexample → Agent retries  (Z3/SMT)            ↓                  Code Generator (pure-JS WASM encoder) → WASM → Execute

Features

  • JSON AST — Programs are JSON objects, not text files. No lexer, no parser.
  • Structured errors — Every error is a typed JSON object with enough context for an agent to self-repair.
  • Type system — Int, Float, String, Bool, Array<T>, Option<T>, Result<T,E>, records, enums, refinement types.
  • Effect tracking — Functions declare pure, reads, writes, io, fails. The compiler verifies consistency.
  • Contract verification — Pre/post conditions verified at compile time by Z3 (via SMT). Failing contracts return concrete counterexamples.
  • WASM compilation — Verified programs compile to WebAssembly via a pure-JS encoder and run in Node.js.
  • MCP interface — All tools exposed via Model Context Protocol for direct agent integration.
  • Schema migration — ASTs from older schema versions are auto-migrated. No breakage when the language evolves.

Execution Model

Edict compiles to WebAssembly and runs in a sandboxed VM. This is a deliberate security decision — not a limitation:

  • No ambient authority — compiled WASM cannot access the filesystem, network, or OS unless the host explicitly provides those capabilities via the pluggable EdictHostAdapter interface
  • Compile-time capability declaration — the effect system (io, reads, writes, fails) lets the host inspect what a program requires before running it
  • Runtime enforcement — RunLimits controls execution timeout, memory ceiling, and filesystem sandboxing
  • Defense-in-depth — agent-generated code that runs immediately needs stronger isolation than human-reviewed code. The effect system + WASM sandbox + host adapter pattern provides exactly that

Host capabilities available through adapters: filesystem (sandboxed), HTTP, crypto (SHA-256, MD5, HMAC), environment variables, CLI arguments. New capabilities are added by extending EdictHostAdapter.

Quick Start

For AI Agents (MCP)

The fastest way to use Edict is through the MCP server — it exposes the entire compiler pipeline as tool calls:

bash
npx edict-lang          # start MCP server (stdio transport, no install needed)

Or install locally:

bash
npm install edict-langnpx edict-lang          # start MCP server

Two calls to get started: edict_schema (learn the AST format) → edict_check (submit a program). See MCP Tools for the full tool list.

For Development

bash
npm installnpm test          # 2675 tests across 136 filesnpm run mcp       # start MCP server (stdio transport)

Docker

Run the Edict MCP server in a container — no local Node.js required:

bash
# stdio transport (default — for local MCP clients)docker run -i ghcr.io/sowiedu/edict
# HTTP transport (for remote/networked MCP clients)docker run -p 3000:3000 -e EDICT_TRANSPORT=http ghcr.io/sowiedu/edict

Supported platforms: linux/amd64, linux/arm64.

Browser

Run the Edict compiler entirely in the browser — no server required:

BundleSizePhasesUse case
edict-lang/browser318 KB1–3 (validate, resolve, typecheck, effects, lint, patch)Lightweight checking
edict-lang/browser-full~14 MB1–5 (+ WASM codegen, Z3 contracts, WASM execution)Full compile & run
javascript
import { compileBrowser, runBrowserDirect } from 'edict-lang/browser-full';
const result = compileBrowser(astJson);if (result.ok) {    const run = await runBrowserDirect(result.wasm);    console.log(run.output);  // "Hello, World!"}

Note: ESM modules require HTTP serving. Use npx serve . or any static server — file:// won't work.

See examples/browser/index.html for a working example.

QuickJS (Sandboxed Environments)

The Edict compiler also runs inside QuickJS WASM — useful for sandboxed runtimes, edge workers, or embedding in other WASM applications:

BundleSizePhasesSlowdown vs Node.js
dist/edict-quickjs-check.js373 KB1–3 (validate, resolve, typecheck, effects)~3.7x
dist/edict-quickjs-full.js932 KB1–5 (check + WASM compile)~3.7x
typescript
import { EdictQuickJS } from "edict-lang/quickjs";
const edict = await EdictQuickJS.createFull();  // phases 1-5const result = edict.compile(ast);if (result.ok) {    console.log(result.wasm);  // Uint8Array of valid WASM}edict.dispose();

Note: quickjs-emscripten is an optional peer dependency — install it alongside edict-lang to use EdictQuickJS. For fs-free environments, pass bundleSource directly instead of loading from disk.

See docs/quickjs-feasibility-report.md for full benchmarks and recommendations.

MCP Tools

ToolDescription
edict_schemaReturns the full AST JSON Schema — the spec for how to write programs
edict_versionReturns compiler version and capability info
edict_examplesReturns 41 example programs as JSON ASTs (includes schema snippet)
edict_validateValidates AST structure (field names, types, node kinds)
edict_checkFull pipeline: validate → resolve names → type check → effect check → verify contracts
edict_compileCompiles a checked AST to WASM (returns base64-encoded binary)
edict_runExecutes a compiled WASM binary, returns output and exit code
edict_patchApplies targeted AST patches by nodeId and re-checks
edict_errorsReturns machine-readable catalog of all error types
edict_lintRuns non-blocking quality analysis and returns warnings
edict_debugExecution tracing and crash diagnostics
edict_composeCombines composable program fragments into a module
edict_explainExplains AST nodes, errors, or compiler behavior
edict_exportPackages a program as a UASF portable skill
edict_import_skillImports and executes a UASF skill package
edict_generate_testsGenerates tests from Z3-verified contracts
edict_replayRecords and replays deterministic execution traces
edict_deployCompiles and deploys an Edict program to edge runtimes (Cloudflare Workers)
edict_invokeInvokes a deployed Edict WASM service via HTTP
edict_invoke_skillInvokes a UASF skill package directly
edict_packagePackages a compiled program as a deployable skill bundle
edict_supportReturns diagnostics and environment info for troubleshooting

MCP Resources

URIDescription
edict://schemaThe full AST JSON Schema
edict://schema/minimalMinimal schema variant for token-efficient bootstrap
edict://examplesAll example programs
edict://errorsMachine-readable error catalog
edict://schema/patchJSON Schema for the AST patch protocol
edict://guideAgent bootstrap guide for MCP-first onboarding
edict://supportDiagnostics and environment info

Example Program

A "Hello, World!" in Edict's JSON AST:

json
{  "kind": "module",  "id": "mod-hello-001",  "name": "hello",  "imports": [],  "definitions": [    {      "kind": "fn",      "id": "fn-main-001",      "name": "main",      "params": [],      "effects": ["io"],      "returnType": { "kind": "basic", "name": "Int" },      "contracts": [],      "body": [        {          "kind": "call",          "id": "call-print-001",          "fn": { "kind": "ident", "id": "ident-print-001", "name": "print" },          "args": [            { "kind": "literal", "id": "lit-msg-001", "value": "Hello, World!" }          ]        },        { "kind": "literal", "id": "lit-ret-001", "value": 0 }      ]    }  ]}

The Agent Loop

The core design: an agent submits an AST → the compiler validates it → if wrong, returns a StructuredError with enough context for the agent to self-repair → the agent fixes it → resubmits.

typescript
// 1. Agent reads the schema to learn the AST formatconst schema = edict_schema();
// 2. Agent writes a program (may contain errors)const program = agentWritesProgram(schema);
// 3. Compile — returns structured errors or WASMconst result = edict_compile(program);
if (!result.ok) {  // 4. Agent reads errors and fixes the program  //    Errors include: nodeId, expected type, candidates, counterexamples  const fixed = agentFixesProgram(program, result.errors);  // 5. Resubmit  return edict_compile(fixed);}
// 6. Run the WASMconst output = edict_run(result.wasm);

Architecture

src/├── ast/           # TypeScript interfaces for every AST node├── validator/     # Schema validation (structural correctness)├── resolver/      # Name resolution (scope-aware, with Levenshtein suggestions)├── checker/       # Type checking (bidirectional, with unit types)├── effects/       # Effect checking (call-graph propagation)├── contracts/     # Contract verification (Z3/SMT integration)├── codegen/       # WASM code generation (pure-JS encoder)│   ├── codegen.ts       # IR → WASM module orchestration│   ├── compile-ir-expr.ts  # IR expression compilation│   ├── compile-ir-*.ts  # Specialized IR compilers (calls, data, match, scalars)│   ├── runner.ts        # WASM execution (Node.js WebAssembly API)│   ├── host-adapter.ts  # EdictHostAdapter interface + platform adapters│   ├── closures.ts      # Closure capture and compilation│   ├── hof-generators.ts # Higher-order function WASM generators│   ├── wasm-encoder.ts  # Pure-JS WASM binary encoder (replaced binaryen)│   ├── wasm-interpreter.ts # Pure-JS WASM interpreter (no WebAssembly API needed)│   ├── recording-adapter.ts # Execution recording for replay│   ├── replay-adapter.ts  # Deterministic replay from recorded traces│   └── string-table.ts  # String interning for WASM memory├── ir/            # Mid-level IR (lowering, optimization)├── builtins/      # Builtin registry and domain-specific builtins├── compact/       # Compact AST format (token-efficient for agents)├── compose/       # Composable program fragments├── deploy/        # Edge deployment scaffolding (Cloudflare Workers)├── incremental/   # Incremental checking (dependency graph + diff)├── lint/          # Non-blocking quality warnings├── patch/         # Surgical AST patching by nodeId├── migration/     # Schema version migration (auto-upgrade older ASTs)├── skills/        # Skill packaging and invocation├── mcp/           # MCP server (tools + resources + prompts)└── errors/        # Structured error types
tests/             # 2675 tests across 136 filesexamples/          # 41 example programs (⭐→⭐⭐⭐ difficulty in README)schema/            # Auto-generated JSON Schema

Type System

TypeExample
BasicInt, Int64, Float, String, Bool
ArrayArray<Int>
OptionOption<String>
ResultResult<String, String>
RecordPoint { x: Float, y: Float }
EnumShape = Circle { radius: Float } | Rectangle { w: Float, h: Float }
Refinement{ i: Int | i > 0 } — predicates verified by Z3
Function(Int, Int) -> Int

Effect System

Functions declare their effects. The compiler enforces:

  • A pure function cannot call an io function
  • Effects propagate through the call graph
  • Missing effects are detected and reported

Effects: pure, reads, writes, io, fails

Contract Verification

Pre/post conditions are verified at compile time using Z3:

json
{  "kind": "post",  "id": "post-001",  "condition": {    "kind": "binop", "id": "binop-001", "op": ">",    "left": { "kind": "ident", "id": "ident-result-001", "name": "result" },    "right": { "kind": "ident", "id": "ident-x-001", "name": "x" }  }}

Z3 either proves unsat (contract holds ✅) or returns sat with a concrete counterexample the agent can reason about.

Contributing

We welcome contributions from agents and humans alike. See CONTRIBUTING.md for setup instructions, coding standards, and the PR workflow.

Looking for a place to start? Check issues labeled good first issue.

Roadmap

See ROADMAP.md for the full development plan, FEATURE_SPEC.md for the language specification, and Crystallized Intelligence for how agents store and reuse verified WASM skills.

Support

Edict is free and open source under the MIT license. If your agents find it valuable, consider sponsoring its development.

License

MIT

来源:README.md,提交 5b021ed

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.9.2最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分