@manifesto-ai/compiler 3.1.1 → 3.3.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.
@@ -6,7 +6,7 @@ import type { SourceLocation } from "./source-location.js";
6
6
  /**
7
7
  * All token kinds in MEL
8
8
  */
9
- export type TokenKind = "DOMAIN" | "STATE" | "COMPUTED" | "ACTION" | "EFFECT" | "WHEN" | "ONCE" | "PATCH" | "UNSET" | "MERGE" | "TRUE" | "FALSE" | "NULL" | "AS" | "AVAILABLE" | "FAIL" | "STOP" | "WITH" | "TYPE" | "IMPORT" | "FROM" | "EXPORT" | "PLUS" | "MINUS" | "STAR" | "SLASH" | "PERCENT" | "EQ_EQ" | "BANG_EQ" | "LT" | "LT_EQ" | "GT" | "GT_EQ" | "AMP_AMP" | "PIPE_PIPE" | "BANG" | "QUESTION_QUESTION" | "QUESTION" | "COLON" | "EQ" | "LPAREN" | "RPAREN" | "LBRACE" | "RBRACE" | "LBRACKET" | "RBRACKET" | "COMMA" | "SEMICOLON" | "DOT" | "PIPE" | "NUMBER" | "STRING" | "IDENTIFIER" | "SYSTEM_IDENT" | "ITEM" | "EOF" | "ERROR";
9
+ export type TokenKind = "DOMAIN" | "STATE" | "COMPUTED" | "ACTION" | "EFFECT" | "WHEN" | "ONCE" | "PATCH" | "UNSET" | "MERGE" | "TRUE" | "FALSE" | "NULL" | "AS" | "AVAILABLE" | "DISPATCHABLE" | "FAIL" | "STOP" | "WITH" | "TYPE" | "IMPORT" | "FROM" | "EXPORT" | "PLUS" | "MINUS" | "STAR" | "SLASH" | "PERCENT" | "EQ_EQ" | "BANG_EQ" | "LT" | "LT_EQ" | "GT" | "GT_EQ" | "AMP_AMP" | "PIPE_PIPE" | "BANG" | "QUESTION_QUESTION" | "QUESTION" | "COLON" | "EQ" | "LPAREN" | "RPAREN" | "LBRACE" | "RBRACE" | "LBRACKET" | "RBRACKET" | "COMMA" | "SEMICOLON" | "DOT" | "PIPE" | "NUMBER" | "STRING" | "IDENTIFIER" | "SYSTEM_IDENT" | "ITEM" | "EOF" | "ERROR";
10
10
  /**
11
11
  * A token produced by the lexer
12
12
  */
@@ -85,6 +85,10 @@ export declare const DEFAULT_SCHEMA_CONTEXT: ExprLoweringContext;
85
85
  * Default expression lowering context for action mode.
86
86
  */
87
87
  export declare const DEFAULT_ACTION_CONTEXT: ExprLoweringContext;
88
+ /**
89
+ * Context for dispatchable expressions (bound-input only).
90
+ */
91
+ export declare const DEFAULT_DISPATCHABLE_CONTEXT: ExprLoweringContext;
88
92
  /**
89
93
  * Context for effect.args (allows $item).
90
94
  */
@@ -6,7 +6,7 @@
6
6
  * @see SPEC v0.4.0 §17
7
7
  */
8
8
  export type { AllowedSysPrefix, ExprLoweringContext, PatchLoweringContext, } from "./context.js";
9
- export { DEFAULT_SCHEMA_CONTEXT, DEFAULT_ACTION_CONTEXT, EFFECT_ARGS_CONTEXT, DEFAULT_PATCH_CONTEXT, } from "./context.js";
9
+ export { DEFAULT_SCHEMA_CONTEXT, DEFAULT_ACTION_CONTEXT, DEFAULT_DISPATCHABLE_CONTEXT, EFFECT_ARGS_CONTEXT, DEFAULT_PATCH_CONTEXT, } from "./context.js";
10
10
  export type { LoweringErrorCode } from "./errors.js";
11
11
  export { LoweringError, invalidKindForContext, unknownCallFn, invalidSysPath, unsupportedBase, invalidShape, unknownNodeKind, } from "./errors.js";
12
12
  export type { MelPrimitive, MelPathSegment, MelPathNode, MelSystemPath, MelObjField, MelExprNode, } from "./lower-expr.js";
@@ -1,47 +1,2 @@
1
- import {
2
- compileMelToModuleCode
3
- } from "./chunk-LI5HNMZV.js";
4
- import "./chunk-7TT6Y5ZC.js";
5
-
6
- // src/node-loader.ts
7
- import { readFile } from "fs/promises";
8
- import { fileURLToPath } from "url";
9
- function stripSearchAndHash(value) {
10
- const [withoutSearch] = value.split("?", 1);
11
- const [withoutHash] = withoutSearch.split("#", 1);
12
- return withoutHash;
13
- }
14
- function isMelReference(value) {
15
- return stripSearchAndHash(value).endsWith(".mel");
16
- }
17
- function toSourceId(urlOrPath) {
18
- try {
19
- return fileURLToPath(urlOrPath);
20
- } catch {
21
- return urlOrPath;
22
- }
23
- }
24
- var resolve = async (specifier, context, nextResolve) => {
25
- if (!isMelReference(specifier)) {
26
- return nextResolve(specifier, context);
27
- }
28
- const resolved = await nextResolve(specifier, context);
29
- return { ...resolved, shortCircuit: true };
30
- };
31
- var load = async (url, context, nextLoad) => {
32
- if (!isMelReference(url)) {
33
- return nextLoad(url, context);
34
- }
35
- const melSource = await readFile(new URL(url), "utf8");
36
- const source = compileMelToModuleCode(melSource, toSourceId(url));
37
- return {
38
- format: "module",
39
- source,
40
- shortCircuit: true
41
- };
42
- };
43
- export {
44
- load,
45
- resolve
46
- };
1
+ import{b as n}from"./chunk-F7ORNXSB.js";import"./chunk-3KVBHKIL.js";import{readFile as i}from"fs/promises";import{fileURLToPath as c}from"url";function u(o){let[t]=o.split("?",1),[r]=t.split("#",1);return r}function s(o){return u(o).endsWith(".mel")}function a(o){try{return c(o)}catch{return o}}var h=async(o,t,r)=>s(o)?{...await r(o,t),shortCircuit:!0}:r(o,t),p=async(o,t,r)=>{if(!s(o))return r(o,t);let e=await i(new URL(o),"utf8");return{format:"module",source:n(e,a(o)),shortCircuit:!0}};export{p as load,h as resolve};
47
2
  //# sourceMappingURL=node-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/node-loader.ts"],"sourcesContent":["/**\n * Node ESM Loader Hooks for MEL files.\n *\n * Usage: node --loader @manifesto-ai/compiler/node-loader app.ts\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport type { LoadHook, ResolveHook } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport { compileMelToModuleCode } from \"./mel-module.js\";\n\nfunction stripSearchAndHash(value: string): string {\n const [withoutSearch] = value.split(\"?\", 1);\n const [withoutHash] = withoutSearch.split(\"#\", 1);\n return withoutHash;\n}\n\nfunction isMelReference(value: string): boolean {\n return stripSearchAndHash(value).endsWith(\".mel\");\n}\n\nfunction toSourceId(urlOrPath: string): string {\n try {\n return fileURLToPath(urlOrPath);\n } catch {\n return urlOrPath;\n }\n}\n\n/**\n * Node loader resolve hook.\n */\nexport const resolve: ResolveHook = async (specifier, context, nextResolve) => {\n if (!isMelReference(specifier)) {\n return nextResolve(specifier, context);\n }\n\n const resolved = await nextResolve(specifier, context);\n return { ...resolved, shortCircuit: true };\n};\n\n/**\n * Node loader load hook.\n */\nexport const load: LoadHook = async (url, context, nextLoad) => {\n if (!isMelReference(url)) {\n return nextLoad(url, context);\n }\n\n const melSource = await readFile(new URL(url), \"utf8\");\n const source = compileMelToModuleCode(melSource, toSourceId(url));\n\n return {\n format: \"module\",\n source,\n shortCircuit: true,\n };\n};\n"],"mappings":";;;;;;AAMA,SAAS,gBAAgB;AAEzB,SAAS,qBAAqB;AAG9B,SAAS,mBAAmB,OAAuB;AACjD,QAAM,CAAC,aAAa,IAAI,MAAM,MAAM,KAAK,CAAC;AAC1C,QAAM,CAAC,WAAW,IAAI,cAAc,MAAM,KAAK,CAAC;AAChD,SAAO;AACT;AAEA,SAAS,eAAe,OAAwB;AAC9C,SAAO,mBAAmB,KAAK,EAAE,SAAS,MAAM;AAClD;AAEA,SAAS,WAAW,WAA2B;AAC7C,MAAI;AACF,WAAO,cAAc,SAAS;AAAA,EAChC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,IAAM,UAAuB,OAAO,WAAW,SAAS,gBAAgB;AAC7E,MAAI,CAAC,eAAe,SAAS,GAAG;AAC9B,WAAO,YAAY,WAAW,OAAO;AAAA,EACvC;AAEA,QAAM,WAAW,MAAM,YAAY,WAAW,OAAO;AACrD,SAAO,EAAE,GAAG,UAAU,cAAc,KAAK;AAC3C;AAKO,IAAM,OAAiB,OAAO,KAAK,SAAS,aAAa;AAC9D,MAAI,CAAC,eAAe,GAAG,GAAG;AACxB,WAAO,SAAS,KAAK,OAAO;AAAA,EAC9B;AAEA,QAAM,YAAY,MAAM,SAAS,IAAI,IAAI,GAAG,GAAG,MAAM;AACrD,QAAM,SAAS,uBAAuB,WAAW,WAAW,GAAG,CAAC;AAEhE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,cAAc;AAAA,EAChB;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/node-loader.ts"],"sourcesContent":["/**\n * Node ESM Loader Hooks for MEL files.\n *\n * Usage: node --loader @manifesto-ai/compiler/node-loader app.ts\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport type { LoadHook, ResolveHook } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport { compileMelToModuleCode } from \"./mel-module.js\";\n\nfunction stripSearchAndHash(value: string): string {\n const [withoutSearch] = value.split(\"?\", 1);\n const [withoutHash] = withoutSearch.split(\"#\", 1);\n return withoutHash;\n}\n\nfunction isMelReference(value: string): boolean {\n return stripSearchAndHash(value).endsWith(\".mel\");\n}\n\nfunction toSourceId(urlOrPath: string): string {\n try {\n return fileURLToPath(urlOrPath);\n } catch {\n return urlOrPath;\n }\n}\n\n/**\n * Node loader resolve hook.\n */\nexport const resolve: ResolveHook = async (specifier, context, nextResolve) => {\n if (!isMelReference(specifier)) {\n return nextResolve(specifier, context);\n }\n\n const resolved = await nextResolve(specifier, context);\n return { ...resolved, shortCircuit: true };\n};\n\n/**\n * Node loader load hook.\n */\nexport const load: LoadHook = async (url, context, nextLoad) => {\n if (!isMelReference(url)) {\n return nextLoad(url, context);\n }\n\n const melSource = await readFile(new URL(url), \"utf8\");\n const source = compileMelToModuleCode(melSource, toSourceId(url));\n\n return {\n format: \"module\",\n source,\n shortCircuit: true,\n };\n};\n"],"mappings":"oEAMA,OAAS,YAAAA,MAAgB,cAEzB,OAAS,iBAAAC,MAAqB,MAG9B,SAASC,EAAmBC,EAAuB,CACjD,GAAM,CAACC,CAAa,EAAID,EAAM,MAAM,IAAK,CAAC,EACpC,CAACE,CAAW,EAAID,EAAc,MAAM,IAAK,CAAC,EAChD,OAAOC,CACT,CAEA,SAASC,EAAeH,EAAwB,CAC9C,OAAOD,EAAmBC,CAAK,EAAE,SAAS,MAAM,CAClD,CAEA,SAASI,EAAWC,EAA2B,CAC7C,GAAI,CACF,OAAOC,EAAcD,CAAS,CAChC,MAAQ,CACN,OAAOA,CACT,CACF,CAKO,IAAME,EAAuB,MAAOC,EAAWC,EAASC,IACxDP,EAAeK,CAAS,EAKtB,CAAE,GADQ,MAAME,EAAYF,EAAWC,CAAO,EAC/B,aAAc,EAAK,EAJhCC,EAAYF,EAAWC,CAAO,EAU5BE,EAAiB,MAAOC,EAAKH,EAASI,IAAa,CAC9D,GAAI,CAACV,EAAeS,CAAG,EACrB,OAAOC,EAASD,EAAKH,CAAO,EAG9B,IAAMK,EAAY,MAAMC,EAAS,IAAI,IAAIH,CAAG,EAAG,MAAM,EAGrD,MAAO,CACL,OAAQ,SACR,OAJaI,EAAuBF,EAAWV,EAAWQ,CAAG,CAAC,EAK9D,aAAc,EAChB,CACF","names":["readFile","fileURLToPath","stripSearchAndHash","value","withoutSearch","withoutHash","isMelReference","toSourceId","urlOrPath","fileURLToPath","resolve","specifier","context","nextResolve","load","url","nextLoad","melSource","readFile","compileMelToModuleCode"]}
@@ -81,6 +81,8 @@ export interface ActionNode extends ASTNode {
81
81
  params: ParamNode[];
82
82
  /** v0.3.2: Optional availability condition */
83
83
  available?: ExprNode;
84
+ /** v0.9.0: Optional dispatchability condition */
85
+ dispatchable?: ExprNode;
84
86
  body: GuardedStmtNode[];
85
87
  }
86
88
  /**
package/dist/rollup.js CHANGED
@@ -1,14 +1,2 @@
1
- import {
2
- unpluginMel
3
- } from "./chunk-INVHMPXW.js";
4
- import "./chunk-LI5HNMZV.js";
5
- import "./chunk-7TT6Y5ZC.js";
6
-
7
- // src/rollup.ts
8
- var melPlugin = unpluginMel.rollup;
9
- var rollup_default = melPlugin;
10
- export {
11
- rollup_default as default,
12
- melPlugin
13
- };
1
+ import{a as e}from"./chunk-PHMJ5ODH.js";import"./chunk-F7ORNXSB.js";import"./chunk-3KVBHKIL.js";var l=e.rollup,t=l;export{t as default,l as melPlugin};
14
2
  //# sourceMappingURL=rollup.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rollup.ts"],"sourcesContent":["/**\n * Rollup plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rollup;\nexport default melPlugin;\n"],"mappings":";;;;;;;AAYO,IAAM,YAAY,YAAY;AACrC,IAAO,iBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/rollup.ts"],"sourcesContent":["/**\n * Rollup plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rollup;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,OAC9BC,EAAQF","names":["melPlugin","unpluginMel","rollup_default"]}
package/dist/rspack.js CHANGED
@@ -1,14 +1,2 @@
1
- import {
2
- unpluginMel
3
- } from "./chunk-INVHMPXW.js";
4
- import "./chunk-LI5HNMZV.js";
5
- import "./chunk-7TT6Y5ZC.js";
6
-
7
- // src/rspack.ts
8
- var melPlugin = unpluginMel.rspack;
9
- var rspack_default = melPlugin;
10
- export {
11
- rspack_default as default,
12
- melPlugin
13
- };
1
+ import{a as e}from"./chunk-PHMJ5ODH.js";import"./chunk-F7ORNXSB.js";import"./chunk-3KVBHKIL.js";var t=e.rspack,o=t;export{o as default,t as melPlugin};
14
2
  //# sourceMappingURL=rspack.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rspack.ts"],"sourcesContent":["/**\n * Rspack plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rspack;\nexport default melPlugin;\n"],"mappings":";;;;;;;AAYO,IAAM,YAAY,YAAY;AACrC,IAAO,iBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/rspack.ts"],"sourcesContent":["/**\n * Rspack plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rspack;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,OAC9BC,EAAQF","names":["melPlugin","unpluginMel","rspack_default"]}
@@ -0,0 +1,19 @@
1
+ import type { DomainSchema } from "./generator/ir.js";
2
+ export type SchemaGraphNodeKind = "state" | "computed" | "action";
3
+ export type SchemaGraphNodeId = `state:${string}` | `computed:${string}` | `action:${string}`;
4
+ export type SchemaGraphNode = {
5
+ readonly id: SchemaGraphNodeId;
6
+ readonly kind: SchemaGraphNodeKind;
7
+ readonly name: string;
8
+ };
9
+ export type SchemaGraphEdgeRelation = "feeds" | "mutates" | "unlocks";
10
+ export type SchemaGraphEdge = {
11
+ readonly from: SchemaGraphNodeId;
12
+ readonly to: SchemaGraphNodeId;
13
+ readonly relation: SchemaGraphEdgeRelation;
14
+ };
15
+ export type SchemaGraph = {
16
+ readonly nodes: readonly SchemaGraphNode[];
17
+ readonly edges: readonly SchemaGraphEdge[];
18
+ };
19
+ export declare function extractSchemaGraph(schema: DomainSchema): SchemaGraph;
package/dist/vite.js CHANGED
@@ -1,14 +1,2 @@
1
- import {
2
- unpluginMel
3
- } from "./chunk-INVHMPXW.js";
4
- import "./chunk-LI5HNMZV.js";
5
- import "./chunk-7TT6Y5ZC.js";
6
-
7
- // src/vite.ts
8
- var melPlugin = unpluginMel.vite;
9
- var vite_default = melPlugin;
10
- export {
11
- vite_default as default,
12
- melPlugin
13
- };
1
+ import{a as e}from"./chunk-PHMJ5ODH.js";import"./chunk-F7ORNXSB.js";import"./chunk-3KVBHKIL.js";var t=e.vite,o=t;export{o as default,t as melPlugin};
14
2
  //# sourceMappingURL=vite.js.map
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vite.ts"],"sourcesContent":["/**\n * Vite plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.vite;\nexport default melPlugin;\n"],"mappings":";;;;;;;AAYO,IAAM,YAAY,YAAY;AACrC,IAAO,eAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/vite.ts"],"sourcesContent":["/**\n * Vite plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.vite;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,KAC9BC,EAAQF","names":["melPlugin","unpluginMel","vite_default"]}
package/dist/webpack.js CHANGED
@@ -1,14 +1,2 @@
1
- import {
2
- unpluginMel
3
- } from "./chunk-INVHMPXW.js";
4
- import "./chunk-LI5HNMZV.js";
5
- import "./chunk-7TT6Y5ZC.js";
6
-
7
- // src/webpack.ts
8
- var melPlugin = unpluginMel.webpack;
9
- var webpack_default = melPlugin;
10
- export {
11
- webpack_default as default,
12
- melPlugin
13
- };
1
+ import{a as e}from"./chunk-PHMJ5ODH.js";import"./chunk-F7ORNXSB.js";import"./chunk-3KVBHKIL.js";var t=e.webpack,o=t;export{o as default,t as melPlugin};
14
2
  //# sourceMappingURL=webpack.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/webpack.ts"],"sourcesContent":["/**\n * Webpack plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.webpack;\nexport default melPlugin;\n"],"mappings":";;;;;;;AAYO,IAAM,YAAY,YAAY;AACrC,IAAO,kBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/webpack.ts"],"sourcesContent":["/**\n * Webpack plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.webpack;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,QAC9BC,EAAQF","names":["melPlugin","unpluginMel","webpack_default"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manifesto-ai/compiler",
3
- "version": "3.1.1",
3
+ "version": "3.3.0",
4
4
  "description": "Manifesto Compiler - MEL (Manifesto Expression Language) to DomainSchema compiler",
5
5
  "author": "eggplantiny <eggplantiny@gmail.com>",
6
6
  "license": "MIT",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  "peerDependencies": {
63
63
  "@anthropic-ai/sdk": "^0.26.0",
64
- "@manifesto-ai/core": "^2.9.0",
64
+ "@manifesto-ai/core": "^2.11.0",
65
65
  "openai": "^4.0.0",
66
66
  "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
67
67
  "zod": "^4.3.6"
@@ -78,11 +78,6 @@
78
78
  }
79
79
  },
80
80
  "dependencies": {
81
- "ink": "^6.8.0",
82
- "ink-select-input": "^6.2.0",
83
- "ink-spinner": "^5.0.0",
84
- "meow": "^14.1.0",
85
- "react": "^19.2.4",
86
81
  "unplugin": "^3.0.0"
87
82
  },
88
83
  "devDependencies": {
@@ -90,14 +85,19 @@
90
85
  "@types/node": "^25.5.0",
91
86
  "@types/react": "^19.2.14",
92
87
  "dotenv": "^17.3.1",
88
+ "ink": "^6.8.0",
89
+ "ink-select-input": "^6.2.0",
90
+ "ink-spinner": "^5.0.0",
91
+ "meow": "^14.1.0",
93
92
  "openai": "^6.33.0",
93
+ "react": "^19.2.4",
94
94
  "tsx": "^4.21.0",
95
95
  "typescript": "^5.9.3",
96
96
  "vite": "^8.0.3",
97
97
  "vitest": "^4.1.2",
98
98
  "webpack": "^5.105.4",
99
99
  "zod": "^4.3.6",
100
- "@manifesto-ai/core": "2.9.0"
100
+ "@manifesto-ai/core": "2.11.0"
101
101
  },
102
102
  "files": [
103
103
  "dist"