mirror of
https://github.com/gorules/zen.git
synced 2026-10-04 08:02:28 +00:00
* feat: implement slots instead of natural language Replace the natural-language projection (`nl`) with engine-owned slot completion: for a cursor position the engine classifies the slot being edited (operand, operator, literal, member access, ...) and returns typed options, literal facts and the expected type, for policies and graphs. - zen-expression: new `slot` module (classification, literals, operators) and a lenient lexer mode for incomplete input; `nl` removed - Intellisense: typed diagnostic codes with arguments, richer inspect for hover, dedicated parser error variants (messages unchanged) - Engine: `Workspace::cursor_scope`, `slot`, `facts`; `rename_from` and `references_from`; editor spans in UTF-16 units; renames reach imported policies, `$nodes` reads, child graphs and output column heads; no `$root` completion in policies - Node bindings: `slot`, `facts`, `cursorScope`, `slotBatch` replace `nl`, `nlTokenize`, `nlEncodeString`, `nlTokenizeBatch` No change to expression evaluation: the VM, compiler, functions and the default lexer path are untouched, and parser error messages keep their text. * fix: harden slot classification, scopes and graph expectations - restore master execution order; slot scopes hide writes of the edited block and its dependents instead of relying on block ranking - token-start editing gated by slot state; operator, list and operand spans no longer splice into neighbouring tokens - interval-aware bracket pairing for half-open and reversed intervals - lenient lexer recovers from unknown characters (slots only) - graph expected type follows switch and pass-through nodes and merges compatible output schemas - sibling inference caps distinct values and analyses lazily - deterministic overload return type display * fix: order policy blocks by entity reads through closures and relationships - record reads for `#.field` in closures so entity fields read through lists become dependencies - link reads through derived lists (filter/map results) to the entity fields they carry and order the list after those fields - evaluate entity blocks on single relationships, and demand entity paths for plain reads through relationships - slot scopes keep the top-level variable when hiding written fields
72 lines
2.3 KiB
JavaScript
72 lines
2.3 KiB
JavaScript
import {
|
|
createOnMessage as __wasmCreateOnMessageForFsProxy,
|
|
getDefaultContext as __emnapiGetDefaultContext,
|
|
instantiateNapiModule as __emnapiInstantiateNapiModule,
|
|
WASI as __WASI,
|
|
} from '@napi-rs/wasm-runtime'
|
|
|
|
|
|
|
|
const __wasi = new __WASI({
|
|
version: 'preview1',
|
|
})
|
|
|
|
const __wasmUrl = new URL('./zen-engine.wasm32-wasi.wasm', import.meta.url).href
|
|
const __emnapiContext = __emnapiGetDefaultContext()
|
|
|
|
|
|
const __sharedMemory = new WebAssembly.Memory({
|
|
initial: 1024,
|
|
maximum: 16384,
|
|
shared: true,
|
|
})
|
|
|
|
const __wasmFile = await fetch(__wasmUrl).then((res) => res.arrayBuffer())
|
|
|
|
const {
|
|
instance: __napiInstance,
|
|
module: __wasiModule,
|
|
napiModule: __napiModule,
|
|
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
|
context: __emnapiContext,
|
|
asyncWorkPoolSize: 4,
|
|
wasi: __wasi,
|
|
onCreateWorker() {
|
|
const worker = new Worker(new URL('./wasi-worker-browser.mjs', import.meta.url), {
|
|
type: 'module',
|
|
})
|
|
|
|
return worker
|
|
},
|
|
overwriteImports(importObject) {
|
|
importObject.env = {
|
|
...importObject.env,
|
|
...importObject.napi,
|
|
...importObject.emnapi,
|
|
memory: __sharedMemory,
|
|
}
|
|
return importObject
|
|
},
|
|
beforeInit({ instance }) {
|
|
for (const name of Object.keys(instance.exports)) {
|
|
if (name.startsWith('__napi_register__')) {
|
|
instance.exports[name]()
|
|
}
|
|
}
|
|
},
|
|
})
|
|
export default __napiModule.exports
|
|
export const Workspace = __napiModule.exports.Workspace
|
|
export const ZenDecision = __napiModule.exports.ZenDecision
|
|
export const ZenDecisionContent = __napiModule.exports.ZenDecisionContent
|
|
export const ZenEngine = __napiModule.exports.ZenEngine
|
|
export const ZenEngineHandlerRequest = __napiModule.exports.ZenEngineHandlerRequest
|
|
export const evaluateExpression = __napiModule.exports.evaluateExpression
|
|
export const evaluateExpressionSync = __napiModule.exports.evaluateExpressionSync
|
|
export const evaluateUnaryExpression = __napiModule.exports.evaluateUnaryExpression
|
|
export const evaluateUnaryExpressionSync = __napiModule.exports.evaluateUnaryExpressionSync
|
|
export const overrideConfig = __napiModule.exports.overrideConfig
|
|
export const renderTemplate = __napiModule.exports.renderTemplate
|
|
export const renderTemplateSync = __napiModule.exports.renderTemplateSync
|
|
export const slotBatch = __napiModule.exports.slotBatch
|