@vibgrate/haile 2026.902.1
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 +43 -0
- package/README.md +65 -0
- package/dist/engine/haile.wasm +0 -0
- package/dist/index.d.ts +118 -0
- package/dist/index.js +10 -0
- package/package.json +35 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Vibgrate HAILE Architecture Kernel — Proprietary License
|
|
2
|
+
SPDX-License-Identifier: LicenseRef-Vibgrate-Proprietary
|
|
3
|
+
Copyright (c) 2026 Vibgrate. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This package ("@vibgrate/haile") distributes the Vibgrate HAILE architecture
|
|
6
|
+
kernel — deterministic callable classification (role distribution, multi-label
|
|
7
|
+
purposes, intent templates, confidence bands) — as a compiled artifact. It is
|
|
8
|
+
proprietary and confidential, and is licensed SEPARATELY from — and is NOT
|
|
9
|
+
covered by — the Apache-2.0 license that applies to @vibgrate/cli,
|
|
10
|
+
@vibgrate/core-open, or any other open component.
|
|
11
|
+
|
|
12
|
+
1. DEFINITIONS
|
|
13
|
+
"Distributed Artifact" means the compiled JavaScript/TypeScript module(s)
|
|
14
|
+
and any compiled WebAssembly module shipped in this package. The underlying
|
|
15
|
+
source, taxonomy, and kernel build tooling are NOT part of this package and
|
|
16
|
+
are not distributed.
|
|
17
|
+
|
|
18
|
+
2. GRANT (EXECUTION)
|
|
19
|
+
Subject to a valid Vibgrate license or subscription, Vibgrate grants you a
|
|
20
|
+
non-exclusive, non-transferable, revocable right to EXECUTE the Distributed
|
|
21
|
+
Artifact as an optional module of the Vibgrate CLI, on any machine you
|
|
22
|
+
control — including air-gapped and customer-premises environments. Analysis
|
|
23
|
+
runs locally; source never leaves the client.
|
|
24
|
+
|
|
25
|
+
3. RESTRICTIONS
|
|
26
|
+
You may NOT, in whole or in part: (a) copy, redistribute, sublicense, sell,
|
|
27
|
+
or publish the Distributed Artifact outside an authorized Vibgrate CLI
|
|
28
|
+
distribution; (b) reverse-engineer, decompile, disassemble, or otherwise
|
|
29
|
+
attempt to derive the source of, or the taxonomy and calibration within,
|
|
30
|
+
the Distributed Artifact, except to the extent this restriction is
|
|
31
|
+
unenforceable under applicable law; (c) create derivative works; (d) remove
|
|
32
|
+
or alter this notice.
|
|
33
|
+
|
|
34
|
+
4. NO OPEN-SOURCE GRANT
|
|
35
|
+
Nothing in this repository's Apache-2.0 license, NOTICE, or any other open
|
|
36
|
+
license extends to this package.
|
|
37
|
+
|
|
38
|
+
5. NO WARRANTY
|
|
39
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
40
|
+
IMPLIED. TO THE MAXIMUM EXTENT PERMITTED BY LAW, VIBGRATE DISCLAIMS ALL
|
|
41
|
+
LIABILITY ARISING FROM ITS USE.
|
|
42
|
+
|
|
43
|
+
For licensing inquiries: legal@vibgrate.com
|
package/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# @vibgrate/haile
|
|
2
|
+
|
|
3
|
+
The Vibgrate HAILE architecture kernel: deterministic classification of
|
|
4
|
+
callables (role distribution, multi-label purposes, intent, confidence band)
|
|
5
|
+
over a `vg-graph/1.x` document. Consumed by the Vibgrate CLI's optional HAILE
|
|
6
|
+
seam (`engine/haile/haile-provider.ts` and `engine/haile/sidecar.ts` in
|
|
7
|
+
`@vibgrate/cli`).
|
|
8
|
+
|
|
9
|
+
This package is a **binary-only, proprietary** distribution: it ships a
|
|
10
|
+
compiled loader plus the embedded WASM engine — **never the taxonomy or the
|
|
11
|
+
kernel source**. Classification runs entirely locally (incl. air-gapped);
|
|
12
|
+
source never leaves the machine.
|
|
13
|
+
|
|
14
|
+
> The kernel source is the Rust crate in `crate/` (this private monorepo only)
|
|
15
|
+
> and is **not** part of this package — only its compiled `.wasm` ships.
|
|
16
|
+
> `engine/README.md` documents the build, the drop slot, and the C ABI. A
|
|
17
|
+
> published tarball without `dist/engine/haile.wasm` is refused.
|
|
18
|
+
|
|
19
|
+
## API
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { createHaileProvider } from "@vibgrate/haile";
|
|
23
|
+
|
|
24
|
+
const kernel = createHaileProvider();
|
|
25
|
+
// null when dist/engine/haile.wasm is missing — never a dummy provider.
|
|
26
|
+
kernel?.version();
|
|
27
|
+
// "haile-fast/0.1.1" (or the version string the wasm exports)
|
|
28
|
+
kernel?.classify({
|
|
29
|
+
name: "CreateUser",
|
|
30
|
+
path: "src/controllers/UsersController.cs",
|
|
31
|
+
symbolKind: "method",
|
|
32
|
+
profile: "balanced",
|
|
33
|
+
});
|
|
34
|
+
// { primary, confidence, band, alternatives, purposes, intent, evidence }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The host CLI auto-provisions this module (silently, on every run; declinable)
|
|
38
|
+
and loads it through its generic provider seam (default module path or
|
|
39
|
+
`VIBGRATE_HAILE_PATH`), sanitises every result at its own trust boundary, and
|
|
40
|
+
omits architecture lines when the module is absent or `VIBGRATE_NO_KERNEL=1`
|
|
41
|
+
is set. It never falls back to a TypeScript lexicon.
|
|
42
|
+
|
|
43
|
+
## Sidecar CLI
|
|
44
|
+
|
|
45
|
+
The published `dist/index.js` is also the process the CLI launches:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
node index.js sidecar --stdin --out graph.haile.json --profile balanced < graph.json
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- stdin: a full `vg-graph/1.x` JSON document
|
|
52
|
+
- `--out`: destination classify file (`graph.haile.json`)
|
|
53
|
+
- `--profile`: `strict` \| `balanced` \| `exploratory`
|
|
54
|
+
- wire: `magic=vg.haile.v1`, `taxonomy=haile.taxonomy.v1`, `ir=haile.ir.v1`, snake_case
|
|
55
|
+
- missing wasm, bad args, or a write failure → exit code 1 (the CLI treats that as "do not write / do not use")
|
|
56
|
+
|
|
57
|
+
## Build (maintainers)
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
rustup target add wasm32-unknown-unknown # once
|
|
61
|
+
pnpm --filter @vibgrate/haile build # tsup + esbuild + cargo → dist/ (wasm vendored)
|
|
62
|
+
VG_HAILE_RELEASE=1 pnpm --filter @vibgrate/haile build # refuses without wasm
|
|
63
|
+
pnpm --filter @vibgrate/haile test # loader ↔ kernel contract (kernel cases need the wasm)
|
|
64
|
+
(cd crate && cargo test) # kernel unit tests, native
|
|
65
|
+
```
|
|
Binary file
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** Public loader types. Mirror the CLI seam in engine/haile/haile-provider.ts. */
|
|
2
|
+
type HaileProfile = "strict" | "balanced" | "exploratory";
|
|
3
|
+
interface HaileClassifyInput {
|
|
4
|
+
name: string;
|
|
5
|
+
path: string;
|
|
6
|
+
symbolKind?: string;
|
|
7
|
+
fileKind?: string;
|
|
8
|
+
calls?: readonly string[];
|
|
9
|
+
types?: readonly string[];
|
|
10
|
+
idents?: readonly string[];
|
|
11
|
+
profile?: HaileProfile;
|
|
12
|
+
}
|
|
13
|
+
interface HaileClassification {
|
|
14
|
+
primary: string;
|
|
15
|
+
confidence: number;
|
|
16
|
+
band: string;
|
|
17
|
+
alternatives: {
|
|
18
|
+
role: string;
|
|
19
|
+
confidence: number;
|
|
20
|
+
}[];
|
|
21
|
+
purposes: {
|
|
22
|
+
purpose: string;
|
|
23
|
+
confidence: number;
|
|
24
|
+
}[];
|
|
25
|
+
intent: {
|
|
26
|
+
text: string;
|
|
27
|
+
verbs: string[];
|
|
28
|
+
objects: string[];
|
|
29
|
+
};
|
|
30
|
+
evidence: {
|
|
31
|
+
kind: string;
|
|
32
|
+
signal: string;
|
|
33
|
+
weight: number;
|
|
34
|
+
}[];
|
|
35
|
+
}
|
|
36
|
+
interface HaileProvider {
|
|
37
|
+
version(): string;
|
|
38
|
+
classify(input: HaileClassifyInput): HaileClassification | null;
|
|
39
|
+
}
|
|
40
|
+
/** Wire constants for graph.haile.json. Frozen with the public CLI. */
|
|
41
|
+
declare const HAILE_MAGIC = "vg.haile.v1";
|
|
42
|
+
declare const HAILE_TAXONOMY = "haile.taxonomy.v1";
|
|
43
|
+
declare const HAILE_IR = "haile.ir.v1";
|
|
44
|
+
declare const HAILE_ENGINE_VERSION = "haile-fast/0.1.1";
|
|
45
|
+
declare const DEFAULT_PROFILE: HaileProfile;
|
|
46
|
+
declare const DEFAULT_SYMBOL_CAP = 8000;
|
|
47
|
+
|
|
48
|
+
interface WasmHaileKernel {
|
|
49
|
+
version(): string;
|
|
50
|
+
classifyJson(input: HaileClassifyInput): string;
|
|
51
|
+
}
|
|
52
|
+
/** Load the wasm engine if the artifact exists; null otherwise. Memoized. */
|
|
53
|
+
declare function loadWasmHaileKernel(): WasmHaileKernel | null;
|
|
54
|
+
/** Reset the memoized engine (tests only). */
|
|
55
|
+
declare function resetWasmHaileKernelCache(): void;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Factory consumed by the public CLI seam (loadHaileProvider).
|
|
59
|
+
*
|
|
60
|
+
* Returns null when the wasm engine is missing — never a dummy provider,
|
|
61
|
+
* never a TypeScript lexicon. The host then refuses to write classify output.
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
declare function createHaileProvider(kernel?: WasmHaileKernel | null): HaileProvider | null;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Map a vg-graph/1.x document onto HAILE callables.
|
|
68
|
+
*
|
|
69
|
+
* Structural only — same callable-kind set as the public CLI adapter.
|
|
70
|
+
* Does not classify, does not re-parse, contains no lexicon.
|
|
71
|
+
*/
|
|
72
|
+
interface GraphNodeLike {
|
|
73
|
+
id: string;
|
|
74
|
+
kind: string;
|
|
75
|
+
name: string;
|
|
76
|
+
qualifiedName?: string;
|
|
77
|
+
file: string;
|
|
78
|
+
lang?: string;
|
|
79
|
+
signature?: string;
|
|
80
|
+
}
|
|
81
|
+
interface GraphEdgeLike {
|
|
82
|
+
kind: string;
|
|
83
|
+
src: string;
|
|
84
|
+
dst: string;
|
|
85
|
+
}
|
|
86
|
+
interface HaileCallable {
|
|
87
|
+
node_id: string;
|
|
88
|
+
file_path: string;
|
|
89
|
+
name: string;
|
|
90
|
+
qualified_name: string;
|
|
91
|
+
symbol_kind: string;
|
|
92
|
+
language: string;
|
|
93
|
+
signature: string;
|
|
94
|
+
calls: string[];
|
|
95
|
+
parameters: Array<{
|
|
96
|
+
name: string;
|
|
97
|
+
type_name?: string;
|
|
98
|
+
}>;
|
|
99
|
+
return_type?: string;
|
|
100
|
+
file_layer?: string;
|
|
101
|
+
ast_role?: string;
|
|
102
|
+
}
|
|
103
|
+
declare function isCallableKind(kind: string): boolean;
|
|
104
|
+
declare function symbolKindOf(kind: string): string;
|
|
105
|
+
declare function adaptGraph(graph: {
|
|
106
|
+
nodes?: GraphNodeLike[];
|
|
107
|
+
edges?: GraphEdgeLike[];
|
|
108
|
+
}): HaileCallable[];
|
|
109
|
+
|
|
110
|
+
interface SidecarDeps {
|
|
111
|
+
/** Kernel provider; `undefined` loads the wasm engine, `null` forces the absent state. */
|
|
112
|
+
provider?: HaileProvider | null;
|
|
113
|
+
/** Source of the vg-graph JSON text (defaults to process.stdin). */
|
|
114
|
+
readInput?: () => Promise<string>;
|
|
115
|
+
}
|
|
116
|
+
declare function runSidecarCli(argv?: string[], deps?: SidecarDeps): Promise<number>;
|
|
117
|
+
|
|
118
|
+
export { DEFAULT_PROFILE, DEFAULT_SYMBOL_CAP, HAILE_ENGINE_VERSION, HAILE_IR, HAILE_MAGIC, HAILE_TAXONOMY, type HaileClassification, type HaileClassifyInput, type HaileProfile, type HaileProvider, type SidecarDeps, adaptGraph, createHaileProvider, isCallableKind, loadWasmHaileKernel, resetWasmHaileKernelCache, runSidecarCli, symbolKindOf };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{pathToFileURL as j}from"node:url";import*as u from"node:fs";import*as g from"node:path";var b="vg.haile.v1",_="haile.taxonomy.v1",h="haile.ir.v1",v="haile-fast/0.1.1",w="balanced",H=8e3,k=new Set(["function","method","route","test","component","job"]);function C(n){return k.has(n)}function P(n){switch(n){case"method":return"method";case"route":return"route";case"test":return"test";case"job":return"job";case"component":return"handler";default:return"function"}}function N(n){let r=n.indexOf("("),s=n.lastIndexOf(")");if(r<0||s<=r)return[];let i=n.slice(r+1,s).trim();return!i||i==="void"?[]:i.split(",").map(a=>a.trim()).filter(Boolean).slice(0,16).map(a=>{let e=a.replace(/\b(const|mut|ref|public|private|protected|readonly|final)\b/g,"").trim();if(e.includes(":")){let[l,c]=e.split(":").map(d=>d.trim());return{name:l||"arg",type_name:c||void 0}}let t=e.split(/\s+/);return t.length>=2?{name:t[t.length-1],type_name:t[0]}:{name:e}})}function R(n){let r=n.lastIndexOf("->");if(r>=0)return n.slice(r+2).replace(/[{;].*$/,"").trim()||void 0;let s=n.lastIndexOf(":"),i=n.lastIndexOf(")");if(s>i&&i>=0)return n.slice(s+1).replace(/[{;=>].*$/,"").trim()||void 0}function T(n,r,s){let i=[],a=new Set;for(let e of r){if(e.src!==n||e.kind!=="call"&&e.kind!=="references")continue;let t=s.get(e.dst);if(!(!t||a.has(t))&&(a.add(t),i.push(t),i.length>=24))break}return i}function x(n){let r=n.nodes??[],s=n.edges??[],i=new Map;for(let e of r)i.set(e.id,e.name);let a=[];for(let e of r){if(!C(e.kind))continue;let t=e.signature??"";a.push({node_id:e.id,file_path:e.file,name:e.name,qualified_name:e.qualifiedName||e.name,symbol_kind:P(e.kind),language:e.lang??"",signature:t,calls:T(e.id,s,i),parameters:N(t),return_type:R(t)})}return a.sort((e,t)=>e.node_id<t.node_id?-1:e.node_id>t.node_id?1:0),a}import*as m from"node:fs";import{fileURLToPath as F}from"node:url";var f;function G(){return[new URL("./engine/haile.wasm",import.meta.url),new URL("../engine/haile.wasm",import.meta.url),new URL("../crate/target/wasm32-unknown-unknown/release/vibgrate_haile_kernel.wasm",import.meta.url)].map(n=>F(n))}function A(){if(f!==void 0)return f;f=null;try{let n=G().find(t=>m.existsSync(t));if(!n)return f;let r=new WebAssembly.Module(m.readFileSync(n)),i=new WebAssembly.Instance(r,{}).exports;if(typeof i.vg_alloc!="function"||typeof i.vg_free!="function"||typeof i.vg_version!="function"||typeof i.vg_classify!="function"||!i.memory)return f;let a=t=>{let l=new TextEncoder().encode(t),c=i.vg_alloc(l.length);return new Uint8Array(i.memory.buffer,c,l.length).set(l),{ptr:c,len:l.length}},e=t=>{if(!t)return"";let l=new DataView(i.memory.buffer,t,4).getUint32(0,!0),c=new TextDecoder().decode(new Uint8Array(i.memory.buffer,t+4,l));return i.vg_free(t,4+l),c};return f={version:()=>{try{return e(i.vg_version())||"haile-fast/0.1.1"}catch{return"haile-fast/0.1.1"}},classifyJson:t=>{let l=JSON.stringify({name:t.name??"",path:t.path??"",symbolKind:t.symbolKind??"function",fileKind:t.fileKind??"source",calls:t.calls??[],types:t.types??[],idents:t.idents??[],profile:t.profile??"balanced"}),{ptr:c,len:d}=a(l);try{return e(i.vg_classify(c,d))}finally{i.vg_free(c,d)}}},f}catch{return f=null,f}}function M(){f=void 0}function S(n){return Array.isArray(n)?n.filter(r=>typeof r=="string"):[]}function U(n){if(!n)return null;try{let r=JSON.parse(n);if(!r||typeof r!="object")return null;let s=r.role&&typeof r.role=="object"?r.role:r,i=typeof s.primary=="string"?s.primary:"";if(!i)return null;let a=r.intent&&typeof r.intent=="object"?r.intent:{};return{primary:i,confidence:typeof s.confidence=="number"?s.confidence:0,band:typeof s.band=="string"?s.band:"abstain",alternatives:Array.isArray(s.alternatives)?s.alternatives.filter(e=>typeof e?.role=="string").map(e=>({role:e.role,confidence:typeof e.confidence=="number"?e.confidence:0})):[],purposes:Array.isArray(r.purposes)?r.purposes.filter(e=>typeof e?.purpose=="string").map(e=>({purpose:e.purpose,confidence:typeof e.confidence=="number"?e.confidence:0})):[],intent:{text:typeof a.text=="string"?a.text:"",verbs:S(a.verbs),objects:S(a.objects)},evidence:Array.isArray(r.evidence)?r.evidence.filter(e=>typeof e?.kind=="string"&&typeof e?.signal=="string").map(e=>({kind:e.kind,signal:e.signal,weight:typeof e.weight=="number"?e.weight:0})):[]}}catch{return null}}function I(n){let r=n===void 0?A():n;return r?{version:()=>r.version(),classify:s=>{try{return U(r.classifyJson(s))}catch{return null}}}:null}var D=new Set(["strict","balanced","exploratory"]);function O(n,r){let s=n.indexOf(r);if(!(s<0||s+1>=n.length))return n[s+1]}function W(){return new Promise((n,r)=>{let s=[];process.stdin.on("data",i=>s.push(Buffer.from(i))),process.stdin.on("end",()=>n(Buffer.concat(s).toString("utf8"))),process.stdin.on("error",r)})}async function L(n=process.argv.slice(2),r={}){if(n[0]!=="sidecar")return process.stderr.write(`usage: node index.js sidecar --stdin --out <file> --profile <strict|balanced|exploratory>
|
|
2
|
+
`),1;if(!n.includes("--stdin"))return process.stderr.write(`sidecar requires --stdin
|
|
3
|
+
`),1;let s=O(n,"--out");if(!s)return process.stderr.write(`sidecar requires --out <file>
|
|
4
|
+
`),1;let i=O(n,"--profile")??w;if(!D.has(i))return process.stderr.write(`invalid --profile ${i}
|
|
5
|
+
`),1;let a=i,e=r.provider===void 0?I():r.provider;if(!e)return process.stderr.write(`architecture kernel wasm missing \u2014 refusing to classify
|
|
6
|
+
`),1;let t;try{let o=(await(r.readInput??W)()).trim();if(!o)return process.stderr.write(`sidecar stdin was empty
|
|
7
|
+
`),1;t=JSON.parse(o)}catch{return process.stderr.write(`sidecar stdin was not valid JSON
|
|
8
|
+
`),1}let l=x({nodes:Array.isArray(t.nodes)?t.nodes:[],edges:Array.isArray(t.edges)?t.edges:[]}),c=e.version()||v,d=[],E=!1;for(let o of l){if(d.length>=8e3){E=!0;break}let p=e.classify({name:o.name,path:o.file_path,symbolKind:o.symbol_kind,fileKind:"source",calls:o.calls,types:[...o.parameters.map(y=>y.type_name).filter(y=>!!y),...o.return_type?[o.return_type]:[]],idents:[o.name,...o.calls].slice(0,24),profile:a});p&&d.push({node_id:o.node_id,file_path:o.file_path,name:o.name,qualified_name:o.qualified_name,symbol_kind:o.symbol_kind,role:{primary:p.primary,alternatives:p.alternatives,confidence:p.confidence,band:p.band},purposes:p.purposes,intent:p.intent,evidence:p.evidence})}let K={magic:b,taxonomy:_,ir:h,corpus_hash:t.provenance?.corpusHash??"",engine_version:c,profile:a,symbols:d,...E?{symbols_capped:!0}:{}};try{u.mkdirSync(g.dirname(g.resolve(s)),{recursive:!0});let o=`${s}.${process.pid}.tmp`;u.writeFileSync(o,`${JSON.stringify(K)}
|
|
9
|
+
`),u.renameSync(o,s)}catch{return process.stderr.write(`sidecar failed to write ${s}
|
|
10
|
+
`),1}return 0}function B(){let n=process.argv[1];if(!n)return!1;try{return import.meta.url===j(n).href}catch{return!1}}B()&&L().then(n=>{process.exit(n)});export{w as DEFAULT_PROFILE,H as DEFAULT_SYMBOL_CAP,v as HAILE_ENGINE_VERSION,h as HAILE_IR,b as HAILE_MAGIC,_ as HAILE_TAXONOMY,x as adaptGraph,I as createHaileProvider,C as isCallableKind,A as loadWasmHaileKernel,M as resetWasmHaileKernelCache,L as runSidecarCli,P as symbolKindOf};
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vibgrate/haile",
|
|
3
|
+
"version": "2026.902.1",
|
|
4
|
+
"description": "Vibgrate HAILE architecture kernel: deterministic callable classification (role, purposes, intent, band) over a vg-graph. Proprietary distribution — compiled WASM engine plus a minified loader; the taxonomy is not included.",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "node build.mjs",
|
|
22
|
+
"typecheck": "tsc --noEmit -p ./",
|
|
23
|
+
"test": "vitest run"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^26.2.0",
|
|
27
|
+
"esbuild": "^0.25.12",
|
|
28
|
+
"tsup": "^8.0.0",
|
|
29
|
+
"typescript": "^5.4.0",
|
|
30
|
+
"vitest": "^4.1.10"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=22.0.0"
|
|
34
|
+
}
|
|
35
|
+
}
|