@manifesto-ai/core 0.3.0 → 1.0.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.
Files changed (259) hide show
  1. package/README.md +129 -499
  2. package/dist/core/apply.d.ts +16 -0
  3. package/dist/core/apply.d.ts.map +1 -0
  4. package/dist/core/apply.js +52 -0
  5. package/dist/core/apply.js.map +1 -0
  6. package/dist/core/compute.d.ts +17 -0
  7. package/dist/core/compute.d.ts.map +1 -0
  8. package/dist/core/compute.js +197 -0
  9. package/dist/core/compute.js.map +1 -0
  10. package/dist/core/compute.test.d.ts +2 -0
  11. package/dist/core/compute.test.d.ts.map +1 -0
  12. package/dist/core/compute.test.js +400 -0
  13. package/dist/core/compute.test.js.map +1 -0
  14. package/dist/core/explain.d.ts +14 -0
  15. package/dist/core/explain.d.ts.map +1 -0
  16. package/dist/core/explain.js +74 -0
  17. package/dist/core/explain.js.map +1 -0
  18. package/dist/core/index.d.ts +5 -0
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/core/index.js +5 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/validate.d.ts +15 -0
  23. package/dist/core/validate.d.ts.map +1 -0
  24. package/dist/core/validate.js +143 -0
  25. package/dist/core/validate.js.map +1 -0
  26. package/dist/core/validate.test.d.ts +2 -0
  27. package/dist/core/validate.test.d.ts.map +1 -0
  28. package/dist/core/validate.test.js +450 -0
  29. package/dist/core/validate.test.js.map +1 -0
  30. package/dist/errors.d.ts +30 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +51 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/evaluator/computed.d.ts +14 -0
  35. package/dist/evaluator/computed.d.ts.map +1 -0
  36. package/dist/evaluator/computed.js +57 -0
  37. package/dist/evaluator/computed.js.map +1 -0
  38. package/dist/evaluator/context.d.ts +46 -0
  39. package/dist/evaluator/context.d.ts.map +1 -0
  40. package/dist/evaluator/context.js +35 -0
  41. package/dist/evaluator/context.js.map +1 -0
  42. package/dist/evaluator/dag.d.ts +30 -0
  43. package/dist/evaluator/dag.d.ts.map +1 -0
  44. package/dist/evaluator/dag.js +121 -0
  45. package/dist/evaluator/dag.js.map +1 -0
  46. package/dist/evaluator/expr.d.ts +11 -0
  47. package/dist/evaluator/expr.d.ts.map +1 -0
  48. package/dist/evaluator/expr.js +498 -0
  49. package/dist/evaluator/expr.js.map +1 -0
  50. package/dist/evaluator/expr.test.d.ts +2 -0
  51. package/dist/evaluator/expr.test.d.ts.map +1 -0
  52. package/dist/evaluator/expr.test.js +426 -0
  53. package/dist/evaluator/expr.test.js.map +1 -0
  54. package/dist/evaluator/flow.d.ts +35 -0
  55. package/dist/evaluator/flow.d.ts.map +1 -0
  56. package/dist/evaluator/flow.js +234 -0
  57. package/dist/evaluator/flow.js.map +1 -0
  58. package/dist/evaluator/flow.test.d.ts +2 -0
  59. package/dist/evaluator/flow.test.d.ts.map +1 -0
  60. package/dist/evaluator/flow.test.js +446 -0
  61. package/dist/evaluator/flow.test.js.map +1 -0
  62. package/dist/evaluator/index.d.ts +6 -0
  63. package/dist/evaluator/index.d.ts.map +1 -0
  64. package/dist/evaluator/index.js +6 -0
  65. package/dist/evaluator/index.js.map +1 -0
  66. package/dist/factories.d.ts +20 -0
  67. package/dist/factories.d.ts.map +1 -0
  68. package/dist/factories.js +43 -0
  69. package/dist/factories.js.map +1 -0
  70. package/dist/index.d.ts +46 -11
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +30 -45
  73. package/dist/index.js.map +1 -1
  74. package/dist/index.test.d.ts +2 -0
  75. package/dist/index.test.d.ts.map +1 -0
  76. package/dist/index.test.js +13 -0
  77. package/dist/index.test.js.map +1 -0
  78. package/dist/schema/action.d.ts +14 -0
  79. package/dist/schema/action.d.ts.map +1 -0
  80. package/dist/schema/action.js +30 -0
  81. package/dist/schema/action.js.map +1 -0
  82. package/dist/schema/common.d.ts +37 -0
  83. package/dist/schema/common.d.ts.map +1 -0
  84. package/dist/schema/common.js +20 -0
  85. package/dist/schema/common.js.map +1 -0
  86. package/dist/schema/computed.d.ts +23 -0
  87. package/dist/schema/computed.d.ts.map +1 -0
  88. package/dist/schema/computed.js +34 -0
  89. package/dist/schema/computed.js.map +1 -0
  90. package/dist/schema/domain.d.ts +46 -0
  91. package/dist/schema/domain.d.ts.map +1 -0
  92. package/dist/schema/domain.js +54 -0
  93. package/dist/schema/domain.js.map +1 -0
  94. package/dist/schema/expr.d.ts +260 -0
  95. package/dist/schema/expr.d.ts.map +1 -0
  96. package/dist/schema/expr.js +247 -0
  97. package/dist/schema/expr.js.map +1 -0
  98. package/dist/schema/field.d.ts +48 -0
  99. package/dist/schema/field.d.ts.map +1 -0
  100. package/dist/schema/field.js +31 -0
  101. package/dist/schema/field.js.map +1 -0
  102. package/dist/schema/flow.d.ts +103 -0
  103. package/dist/schema/flow.d.ts.map +1 -0
  104. package/dist/schema/flow.js +82 -0
  105. package/dist/schema/flow.js.map +1 -0
  106. package/dist/schema/index.d.ts +11 -2
  107. package/dist/schema/index.d.ts.map +1 -1
  108. package/dist/schema/index.js +22 -2
  109. package/dist/schema/index.js.map +1 -1
  110. package/dist/schema/patch.d.ts +59 -0
  111. package/dist/schema/patch.d.ts.map +1 -0
  112. package/dist/schema/patch.js +60 -0
  113. package/dist/schema/patch.js.map +1 -0
  114. package/dist/schema/result.d.ts +130 -0
  115. package/dist/schema/result.d.ts.map +1 -0
  116. package/dist/schema/result.js +90 -0
  117. package/dist/schema/result.js.map +1 -0
  118. package/dist/schema/snapshot.d.ts +151 -0
  119. package/dist/schema/snapshot.d.ts.map +1 -0
  120. package/dist/schema/snapshot.js +156 -0
  121. package/dist/schema/snapshot.js.map +1 -0
  122. package/dist/schema/trace.d.ts +87 -0
  123. package/dist/schema/trace.d.ts.map +1 -0
  124. package/dist/schema/trace.js +79 -0
  125. package/dist/schema/trace.js.map +1 -0
  126. package/dist/utils/canonical.d.ts +29 -0
  127. package/dist/utils/canonical.d.ts.map +1 -0
  128. package/dist/utils/canonical.js +56 -0
  129. package/dist/utils/canonical.js.map +1 -0
  130. package/dist/utils/canonical.test.d.ts +2 -0
  131. package/dist/utils/canonical.test.d.ts.map +1 -0
  132. package/dist/utils/canonical.test.js +153 -0
  133. package/dist/utils/canonical.test.js.map +1 -0
  134. package/dist/utils/hash.d.ts +20 -0
  135. package/dist/utils/hash.d.ts.map +1 -0
  136. package/dist/utils/hash.js +38 -0
  137. package/dist/utils/hash.js.map +1 -0
  138. package/dist/utils/hash.test.d.ts +2 -0
  139. package/dist/utils/hash.test.d.ts.map +1 -0
  140. package/dist/utils/hash.test.js +146 -0
  141. package/dist/utils/hash.test.js.map +1 -0
  142. package/dist/utils/index.d.ts +4 -0
  143. package/dist/utils/index.d.ts.map +1 -0
  144. package/dist/utils/index.js +4 -0
  145. package/dist/utils/index.js.map +1 -0
  146. package/dist/utils/path.d.ts +40 -0
  147. package/dist/utils/path.d.ts.map +1 -0
  148. package/dist/utils/path.js +132 -0
  149. package/dist/utils/path.js.map +1 -0
  150. package/dist/utils/path.test.d.ts +2 -0
  151. package/dist/utils/path.test.d.ts.map +1 -0
  152. package/dist/utils/path.test.js +191 -0
  153. package/dist/utils/path.test.js.map +1 -0
  154. package/package.json +25 -39
  155. package/LICENSE +0 -21
  156. package/dist/dag/graph.d.ts +0 -62
  157. package/dist/dag/graph.d.ts.map +0 -1
  158. package/dist/dag/graph.js +0 -244
  159. package/dist/dag/graph.js.map +0 -1
  160. package/dist/dag/index.d.ts +0 -4
  161. package/dist/dag/index.d.ts.map +0 -1
  162. package/dist/dag/index.js +0 -4
  163. package/dist/dag/index.js.map +0 -1
  164. package/dist/dag/propagation.d.ts +0 -58
  165. package/dist/dag/propagation.d.ts.map +0 -1
  166. package/dist/dag/propagation.js +0 -224
  167. package/dist/dag/propagation.js.map +0 -1
  168. package/dist/dag/topological.d.ts +0 -33
  169. package/dist/dag/topological.d.ts.map +0 -1
  170. package/dist/dag/topological.js +0 -173
  171. package/dist/dag/topological.js.map +0 -1
  172. package/dist/domain/define.d.ts +0 -82
  173. package/dist/domain/define.d.ts.map +0 -1
  174. package/dist/domain/define.js +0 -105
  175. package/dist/domain/define.js.map +0 -1
  176. package/dist/domain/index.d.ts +0 -4
  177. package/dist/domain/index.d.ts.map +0 -1
  178. package/dist/domain/index.js +0 -4
  179. package/dist/domain/index.js.map +0 -1
  180. package/dist/domain/types.d.ts +0 -203
  181. package/dist/domain/types.d.ts.map +0 -1
  182. package/dist/domain/types.js +0 -2
  183. package/dist/domain/types.js.map +0 -1
  184. package/dist/domain/validate.d.ts +0 -17
  185. package/dist/domain/validate.d.ts.map +0 -1
  186. package/dist/domain/validate.js +0 -204
  187. package/dist/domain/validate.js.map +0 -1
  188. package/dist/effect/index.d.ts +0 -4
  189. package/dist/effect/index.d.ts.map +0 -1
  190. package/dist/effect/index.js +0 -4
  191. package/dist/effect/index.js.map +0 -1
  192. package/dist/effect/result.d.ts +0 -100
  193. package/dist/effect/result.d.ts.map +0 -1
  194. package/dist/effect/result.js +0 -163
  195. package/dist/effect/result.js.map +0 -1
  196. package/dist/effect/runner.d.ts +0 -98
  197. package/dist/effect/runner.d.ts.map +0 -1
  198. package/dist/effect/runner.js +0 -321
  199. package/dist/effect/runner.js.map +0 -1
  200. package/dist/effect/types.d.ts +0 -169
  201. package/dist/effect/types.d.ts.map +0 -1
  202. package/dist/effect/types.js +0 -28
  203. package/dist/effect/types.js.map +0 -1
  204. package/dist/expression/analyzer.d.ts +0 -42
  205. package/dist/expression/analyzer.d.ts.map +0 -1
  206. package/dist/expression/analyzer.js +0 -166
  207. package/dist/expression/analyzer.js.map +0 -1
  208. package/dist/expression/evaluator.d.ts +0 -16
  209. package/dist/expression/evaluator.d.ts.map +0 -1
  210. package/dist/expression/evaluator.js +0 -382
  211. package/dist/expression/evaluator.js.map +0 -1
  212. package/dist/expression/index.d.ts +0 -5
  213. package/dist/expression/index.d.ts.map +0 -1
  214. package/dist/expression/index.js +0 -5
  215. package/dist/expression/index.js.map +0 -1
  216. package/dist/expression/parser.d.ts +0 -37
  217. package/dist/expression/parser.d.ts.map +0 -1
  218. package/dist/expression/parser.js +0 -201
  219. package/dist/expression/parser.js.map +0 -1
  220. package/dist/expression/types.d.ts +0 -123
  221. package/dist/expression/types.d.ts.map +0 -1
  222. package/dist/expression/types.js +0 -10
  223. package/dist/expression/types.js.map +0 -1
  224. package/dist/policy/field-policy.d.ts +0 -63
  225. package/dist/policy/field-policy.d.ts.map +0 -1
  226. package/dist/policy/field-policy.js +0 -138
  227. package/dist/policy/field-policy.js.map +0 -1
  228. package/dist/policy/index.d.ts +0 -3
  229. package/dist/policy/index.d.ts.map +0 -1
  230. package/dist/policy/index.js +0 -3
  231. package/dist/policy/index.js.map +0 -1
  232. package/dist/policy/precondition.d.ts +0 -58
  233. package/dist/policy/precondition.d.ts.map +0 -1
  234. package/dist/policy/precondition.js +0 -115
  235. package/dist/policy/precondition.js.map +0 -1
  236. package/dist/runtime/index.d.ts +0 -4
  237. package/dist/runtime/index.d.ts.map +0 -1
  238. package/dist/runtime/index.js +0 -4
  239. package/dist/runtime/index.js.map +0 -1
  240. package/dist/runtime/runtime.d.ts +0 -94
  241. package/dist/runtime/runtime.d.ts.map +0 -1
  242. package/dist/runtime/runtime.js +0 -294
  243. package/dist/runtime/runtime.js.map +0 -1
  244. package/dist/runtime/snapshot.d.ts +0 -39
  245. package/dist/runtime/snapshot.d.ts.map +0 -1
  246. package/dist/runtime/snapshot.js +0 -264
  247. package/dist/runtime/snapshot.js.map +0 -1
  248. package/dist/runtime/subscription.d.ts +0 -82
  249. package/dist/runtime/subscription.d.ts.map +0 -1
  250. package/dist/runtime/subscription.js +0 -222
  251. package/dist/runtime/subscription.js.map +0 -1
  252. package/dist/schema/integration.d.ts +0 -89
  253. package/dist/schema/integration.d.ts.map +0 -1
  254. package/dist/schema/integration.js +0 -171
  255. package/dist/schema/integration.js.map +0 -1
  256. package/dist/schema/validation.d.ts +0 -51
  257. package/dist/schema/validation.d.ts.map +0 -1
  258. package/dist/schema/validation.js +0 -212
  259. package/dist/schema/validation.js.map +0 -1
@@ -0,0 +1,446 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { evaluateFlow, createFlowState } from "./flow.js";
3
+ import { createContext } from "./context.js";
4
+ // Helper to create a minimal test context
5
+ function createTestContext(data = {}, input, actions = {}) {
6
+ const snapshot = {
7
+ data,
8
+ computed: {},
9
+ system: {
10
+ status: "idle",
11
+ lastError: null,
12
+ errors: [],
13
+ pendingRequirements: [],
14
+ currentAction: null,
15
+ },
16
+ input,
17
+ meta: {
18
+ version: 0,
19
+ timestamp: Date.now(),
20
+ schemaHash: "test-hash",
21
+ },
22
+ };
23
+ const schema = {
24
+ id: "test",
25
+ version: "1.0.0",
26
+ hash: "test-hash",
27
+ state: { fields: {} },
28
+ computed: { fields: {} },
29
+ actions,
30
+ };
31
+ return createContext(snapshot, schema, "testAction", "test");
32
+ }
33
+ function createTestFlowState(data = {}) {
34
+ const snapshot = {
35
+ data,
36
+ computed: {},
37
+ system: {
38
+ status: "idle",
39
+ lastError: null,
40
+ errors: [],
41
+ pendingRequirements: [],
42
+ currentAction: null,
43
+ },
44
+ input: undefined,
45
+ meta: {
46
+ version: 0,
47
+ timestamp: Date.now(),
48
+ schemaHash: "test-hash",
49
+ },
50
+ };
51
+ return createFlowState(snapshot);
52
+ }
53
+ describe("Flow Evaluator", () => {
54
+ describe("seq", () => {
55
+ it("should execute steps in order", async () => {
56
+ const flow = {
57
+ kind: "seq",
58
+ steps: [
59
+ { kind: "patch", op: "set", path: "a", value: { kind: "lit", value: 1 } },
60
+ { kind: "patch", op: "set", path: "b", value: { kind: "lit", value: 2 } },
61
+ ],
62
+ };
63
+ const ctx = createTestContext();
64
+ const state = createTestFlowState();
65
+ const result = await evaluateFlow(flow, ctx, state, "test");
66
+ expect(result.state.status).toBe("running");
67
+ expect(result.state.snapshot.data).toEqual({ a: 1, b: 2 });
68
+ expect(result.state.patches).toHaveLength(2);
69
+ });
70
+ it("should stop on halt", async () => {
71
+ const flow = {
72
+ kind: "seq",
73
+ steps: [
74
+ { kind: "patch", op: "set", path: "a", value: { kind: "lit", value: 1 } },
75
+ { kind: "halt", reason: "stopped" },
76
+ { kind: "patch", op: "set", path: "b", value: { kind: "lit", value: 2 } },
77
+ ],
78
+ };
79
+ const ctx = createTestContext();
80
+ const state = createTestFlowState();
81
+ const result = await evaluateFlow(flow, ctx, state, "test");
82
+ expect(result.state.status).toBe("halted");
83
+ expect(result.state.snapshot.data).toEqual({ a: 1 });
84
+ expect(result.state.patches).toHaveLength(1);
85
+ });
86
+ it("should stop on error", async () => {
87
+ const flow = {
88
+ kind: "seq",
89
+ steps: [
90
+ { kind: "patch", op: "set", path: "a", value: { kind: "lit", value: 1 } },
91
+ { kind: "fail", code: "TEST_ERROR" },
92
+ { kind: "patch", op: "set", path: "b", value: { kind: "lit", value: 2 } },
93
+ ],
94
+ };
95
+ const ctx = createTestContext();
96
+ const state = createTestFlowState();
97
+ const result = await evaluateFlow(flow, ctx, state, "test");
98
+ expect(result.state.status).toBe("error");
99
+ expect(result.state.snapshot.data).toEqual({ a: 1 });
100
+ expect(result.state.error).not.toBeNull();
101
+ });
102
+ it("should stop on effect", async () => {
103
+ const flow = {
104
+ kind: "seq",
105
+ steps: [
106
+ { kind: "patch", op: "set", path: "a", value: { kind: "lit", value: 1 } },
107
+ { kind: "effect", type: "http", params: { url: { kind: "lit", value: "http://example.com" } } },
108
+ { kind: "patch", op: "set", path: "b", value: { kind: "lit", value: 2 } },
109
+ ],
110
+ };
111
+ const ctx = createTestContext();
112
+ const state = createTestFlowState();
113
+ const result = await evaluateFlow(flow, ctx, state, "test");
114
+ expect(result.state.status).toBe("pending");
115
+ expect(result.state.snapshot.data).toEqual({ a: 1 });
116
+ expect(result.state.requirements).toHaveLength(1);
117
+ });
118
+ });
119
+ describe("if", () => {
120
+ it("should execute then branch when condition is true", async () => {
121
+ const flow = {
122
+ kind: "if",
123
+ cond: { kind: "lit", value: true },
124
+ then: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "then" } },
125
+ else: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "else" } },
126
+ };
127
+ const ctx = createTestContext();
128
+ const state = createTestFlowState();
129
+ const result = await evaluateFlow(flow, ctx, state, "test");
130
+ expect(result.state.snapshot.data).toEqual({ result: "then" });
131
+ });
132
+ it("should execute else branch when condition is false", async () => {
133
+ const flow = {
134
+ kind: "if",
135
+ cond: { kind: "lit", value: false },
136
+ then: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "then" } },
137
+ else: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "else" } },
138
+ };
139
+ const ctx = createTestContext();
140
+ const state = createTestFlowState();
141
+ const result = await evaluateFlow(flow, ctx, state, "test");
142
+ expect(result.state.snapshot.data).toEqual({ result: "else" });
143
+ });
144
+ it("should skip else when not provided and condition is false", async () => {
145
+ const flow = {
146
+ kind: "if",
147
+ cond: { kind: "lit", value: false },
148
+ then: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "then" } },
149
+ };
150
+ const ctx = createTestContext();
151
+ const state = createTestFlowState();
152
+ const result = await evaluateFlow(flow, ctx, state, "test");
153
+ expect(result.state.snapshot.data).toEqual({});
154
+ expect(result.state.status).toBe("running");
155
+ });
156
+ it("should evaluate condition from snapshot data", async () => {
157
+ const flow = {
158
+ kind: "if",
159
+ cond: { kind: "get", path: "enabled" },
160
+ then: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "enabled" } },
161
+ else: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "disabled" } },
162
+ };
163
+ const ctx = createTestContext({ enabled: true });
164
+ const state = createTestFlowState({ enabled: true });
165
+ const result = await evaluateFlow(flow, ctx, state, "test");
166
+ expect(result.state.snapshot.data).toEqual({ enabled: true, result: "enabled" });
167
+ });
168
+ });
169
+ describe("patch", () => {
170
+ it("should set a value", async () => {
171
+ const flow = {
172
+ kind: "patch",
173
+ op: "set",
174
+ path: "count",
175
+ value: { kind: "lit", value: 42 },
176
+ };
177
+ const ctx = createTestContext();
178
+ const state = createTestFlowState();
179
+ const result = await evaluateFlow(flow, ctx, state, "test");
180
+ expect(result.state.snapshot.data).toEqual({ count: 42 });
181
+ expect(result.state.patches).toEqual([{ op: "set", path: "count", value: 42 }]);
182
+ });
183
+ it("should set a nested value", async () => {
184
+ const flow = {
185
+ kind: "patch",
186
+ op: "set",
187
+ path: "user.name",
188
+ value: { kind: "lit", value: "Alice" },
189
+ };
190
+ const ctx = createTestContext();
191
+ const state = createTestFlowState();
192
+ const result = await evaluateFlow(flow, ctx, state, "test");
193
+ expect(result.state.snapshot.data).toEqual({ user: { name: "Alice" } });
194
+ });
195
+ it("should unset a value", async () => {
196
+ const flow = {
197
+ kind: "patch",
198
+ op: "unset",
199
+ path: "toRemove",
200
+ };
201
+ const ctx = createTestContext({ toRemove: "value", keep: "this" });
202
+ const state = createTestFlowState({ toRemove: "value", keep: "this" });
203
+ const result = await evaluateFlow(flow, ctx, state, "test");
204
+ expect(result.state.snapshot.data).toEqual({ keep: "this" });
205
+ });
206
+ it("should merge objects", async () => {
207
+ const flow = {
208
+ kind: "patch",
209
+ op: "merge",
210
+ path: "user",
211
+ value: { kind: "lit", value: { age: 30, city: "Seoul" } },
212
+ };
213
+ const ctx = createTestContext({ user: { name: "Alice" } });
214
+ const state = createTestFlowState({ user: { name: "Alice" } });
215
+ const result = await evaluateFlow(flow, ctx, state, "test");
216
+ expect(result.state.snapshot.data).toEqual({ user: { name: "Alice", age: 30, city: "Seoul" } });
217
+ });
218
+ it("should evaluate expression for value", async () => {
219
+ const flow = {
220
+ kind: "patch",
221
+ op: "set",
222
+ path: "doubled",
223
+ value: {
224
+ kind: "mul",
225
+ left: { kind: "get", path: "input.value" },
226
+ right: { kind: "lit", value: 2 },
227
+ },
228
+ };
229
+ const ctx = createTestContext({}, { value: 21 });
230
+ const state = createFlowState({
231
+ data: {},
232
+ computed: {},
233
+ system: {
234
+ status: "idle",
235
+ lastError: null,
236
+ errors: [],
237
+ pendingRequirements: [],
238
+ currentAction: null,
239
+ },
240
+ input: { value: 21 },
241
+ meta: { version: 0, timestamp: Date.now(), schemaHash: "test-hash" },
242
+ });
243
+ const result = await evaluateFlow(flow, ctx, state, "test");
244
+ expect(result.state.snapshot.data).toEqual({ doubled: 42 });
245
+ });
246
+ });
247
+ describe("effect", () => {
248
+ it("should create a requirement and set status to pending", async () => {
249
+ const flow = {
250
+ kind: "effect",
251
+ type: "http",
252
+ params: {
253
+ url: { kind: "lit", value: "https://api.example.com" },
254
+ method: { kind: "lit", value: "GET" },
255
+ },
256
+ };
257
+ const ctx = createTestContext();
258
+ const state = createTestFlowState();
259
+ const result = await evaluateFlow(flow, ctx, state, "test");
260
+ expect(result.state.status).toBe("pending");
261
+ expect(result.state.requirements).toHaveLength(1);
262
+ expect(result.state.requirements[0].type).toBe("http");
263
+ expect(result.state.requirements[0].params).toEqual({
264
+ url: "https://api.example.com",
265
+ method: "GET",
266
+ });
267
+ });
268
+ it("should generate deterministic requirement ID", async () => {
269
+ const flow = {
270
+ kind: "effect",
271
+ type: "http",
272
+ params: { url: { kind: "lit", value: "http://example.com" } },
273
+ };
274
+ const ctx = createTestContext();
275
+ const state = createTestFlowState();
276
+ const result1 = await evaluateFlow(flow, ctx, state, "test");
277
+ const result2 = await evaluateFlow(flow, ctx, state, "test");
278
+ expect(result1.state.requirements[0].id).toBe(result2.state.requirements[0].id);
279
+ });
280
+ });
281
+ describe("call", () => {
282
+ it("should call another flow", async () => {
283
+ const helperAction = {
284
+ flow: { kind: "patch", op: "set", path: "fromHelper", value: { kind: "lit", value: true } },
285
+ };
286
+ const flow = {
287
+ kind: "seq",
288
+ steps: [
289
+ { kind: "patch", op: "set", path: "before", value: { kind: "lit", value: true } },
290
+ { kind: "call", flow: "helper" },
291
+ { kind: "patch", op: "set", path: "after", value: { kind: "lit", value: true } },
292
+ ],
293
+ };
294
+ const ctx = createTestContext({}, undefined, { helper: helperAction });
295
+ const state = createTestFlowState();
296
+ const result = await evaluateFlow(flow, ctx, state, "test");
297
+ expect(result.state.snapshot.data).toEqual({
298
+ before: true,
299
+ fromHelper: true,
300
+ after: true,
301
+ });
302
+ });
303
+ it("should error on unknown flow", async () => {
304
+ const flow = {
305
+ kind: "call",
306
+ flow: "nonexistent",
307
+ };
308
+ const ctx = createTestContext();
309
+ const state = createTestFlowState();
310
+ const result = await evaluateFlow(flow, ctx, state, "test");
311
+ expect(result.state.status).toBe("error");
312
+ expect(result.state.error?.code).toBe("UNKNOWN_FLOW");
313
+ });
314
+ });
315
+ describe("halt", () => {
316
+ it("should stop execution with halted status", async () => {
317
+ const flow = {
318
+ kind: "halt",
319
+ reason: "Manual stop",
320
+ };
321
+ const ctx = createTestContext();
322
+ const state = createTestFlowState();
323
+ const result = await evaluateFlow(flow, ctx, state, "test");
324
+ expect(result.state.status).toBe("halted");
325
+ expect(result.trace.kind).toBe("halt");
326
+ });
327
+ });
328
+ describe("fail", () => {
329
+ it("should stop execution with error status", async () => {
330
+ const flow = {
331
+ kind: "fail",
332
+ code: "VALIDATION_FAILED",
333
+ message: { kind: "lit", value: "Invalid input" },
334
+ };
335
+ const ctx = createTestContext();
336
+ const state = createTestFlowState();
337
+ const result = await evaluateFlow(flow, ctx, state, "test");
338
+ expect(result.state.status).toBe("error");
339
+ expect(result.state.error?.code).toBe("VALIDATION_ERROR");
340
+ expect(result.state.error?.message).toBe("Invalid input");
341
+ });
342
+ it("should use code as message if no message provided", async () => {
343
+ const flow = {
344
+ kind: "fail",
345
+ code: "SIMPLE_ERROR",
346
+ };
347
+ const ctx = createTestContext();
348
+ const state = createTestFlowState();
349
+ const result = await evaluateFlow(flow, ctx, state, "test");
350
+ expect(result.state.error?.message).toBe("SIMPLE_ERROR");
351
+ });
352
+ });
353
+ describe("Trace Generation", () => {
354
+ it("should generate trace for seq", async () => {
355
+ const flow = {
356
+ kind: "seq",
357
+ steps: [
358
+ { kind: "patch", op: "set", path: "a", value: { kind: "lit", value: 1 } },
359
+ { kind: "patch", op: "set", path: "b", value: { kind: "lit", value: 2 } },
360
+ ],
361
+ };
362
+ const ctx = createTestContext();
363
+ const state = createTestFlowState();
364
+ const result = await evaluateFlow(flow, ctx, state, "test");
365
+ expect(result.trace.kind).toBe("flow");
366
+ expect(result.trace.children).toHaveLength(2);
367
+ expect(result.trace.children[0].kind).toBe("patch");
368
+ expect(result.trace.children[1].kind).toBe("patch");
369
+ });
370
+ it("should generate trace for if", async () => {
371
+ const flow = {
372
+ kind: "if",
373
+ cond: { kind: "lit", value: true },
374
+ then: { kind: "patch", op: "set", path: "x", value: { kind: "lit", value: 1 } },
375
+ };
376
+ const ctx = createTestContext();
377
+ const state = createTestFlowState();
378
+ const result = await evaluateFlow(flow, ctx, state, "test");
379
+ expect(result.trace.kind).toBe("branch");
380
+ expect(result.trace.inputs).toEqual({ cond: true });
381
+ expect(result.trace.children).toHaveLength(1);
382
+ });
383
+ });
384
+ describe("Complex Flows", () => {
385
+ it("should handle nested conditionals", async () => {
386
+ const flow = {
387
+ kind: "if",
388
+ cond: { kind: "gt", left: { kind: "get", path: "value" }, right: { kind: "lit", value: 10 } },
389
+ then: {
390
+ kind: "if",
391
+ cond: { kind: "gt", left: { kind: "get", path: "value" }, right: { kind: "lit", value: 20 } },
392
+ then: { kind: "patch", op: "set", path: "category", value: { kind: "lit", value: "high" } },
393
+ else: { kind: "patch", op: "set", path: "category", value: { kind: "lit", value: "medium" } },
394
+ },
395
+ else: { kind: "patch", op: "set", path: "category", value: { kind: "lit", value: "low" } },
396
+ };
397
+ const ctx1 = createTestContext({ value: 25 });
398
+ const state1 = createTestFlowState({ value: 25 });
399
+ const result1 = await evaluateFlow(flow, ctx1, state1, "test");
400
+ expect(result1.state.snapshot.data).toEqual({ value: 25, category: "high" });
401
+ const ctx2 = createTestContext({ value: 15 });
402
+ const state2 = createTestFlowState({ value: 15 });
403
+ const result2 = await evaluateFlow(flow, ctx2, state2, "test");
404
+ expect(result2.state.snapshot.data).toEqual({ value: 15, category: "medium" });
405
+ const ctx3 = createTestContext({ value: 5 });
406
+ const state3 = createTestFlowState({ value: 5 });
407
+ const result3 = await evaluateFlow(flow, ctx3, state3, "test");
408
+ expect(result3.state.snapshot.data).toEqual({ value: 5, category: "low" });
409
+ });
410
+ it("should handle loop-like pattern with filter/map", async () => {
411
+ // Process items and store count
412
+ const flow = {
413
+ kind: "seq",
414
+ steps: [
415
+ {
416
+ kind: "patch",
417
+ op: "set",
418
+ path: "activeItems",
419
+ value: {
420
+ kind: "filter",
421
+ array: { kind: "get", path: "items" },
422
+ predicate: { kind: "get", path: "$item.active" },
423
+ },
424
+ },
425
+ {
426
+ kind: "patch",
427
+ op: "set",
428
+ path: "activeCount",
429
+ value: {
430
+ kind: "len",
431
+ arg: { kind: "get", path: "activeItems" },
432
+ },
433
+ },
434
+ ],
435
+ };
436
+ const ctx = createTestContext({ items: [{ active: true }, { active: false }, { active: true }] });
437
+ const state = createTestFlowState({ items: [{ active: true }, { active: false }, { active: true }] });
438
+ const result = await evaluateFlow(flow, ctx, state, "test");
439
+ expect(result.state.snapshot.data).toMatchObject({
440
+ activeItems: [{ active: true }, { active: true }],
441
+ activeCount: 2,
442
+ });
443
+ });
444
+ });
445
+ });
446
+ //# sourceMappingURL=flow.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.test.js","sourceRoot":"","sources":["../../src/evaluator/flow.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from "./context.js";
2
+ export * from "./expr.js";
3
+ export * from "./flow.js";
4
+ export * from "./dag.js";
5
+ export * from "./computed.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evaluator/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./context.js";
2
+ export * from "./expr.js";
3
+ export * from "./flow.js";
4
+ export * from "./dag.js";
5
+ export * from "./computed.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evaluator/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Snapshot } from "./schema/snapshot.js";
2
+ import type { Intent } from "./schema/patch.js";
3
+ /**
4
+ * Create a new snapshot with initial data
5
+ *
6
+ * @param data - Initial domain data
7
+ * @param schemaHash - Hash of the schema this snapshot conforms to
8
+ * @returns New snapshot
9
+ */
10
+ export declare function createSnapshot<T>(data: T, schemaHash: string): Snapshot;
11
+ /**
12
+ * Create an intent
13
+ *
14
+ * @param type - Action type
15
+ * @param input - Action input (optional)
16
+ * @param intentId - Unique identifier for this processing attempt (optional, auto-generated if not provided)
17
+ * @returns Intent
18
+ */
19
+ export declare function createIntent(type: string, input?: unknown, intentId?: string): Intent;
20
+ //# sourceMappingURL=factories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../src/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,CAYvE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAMR"}
@@ -0,0 +1,43 @@
1
+ import { createInitialSystemState } from "./schema/snapshot.js";
2
+ /**
3
+ * Create a new snapshot with initial data
4
+ *
5
+ * @param data - Initial domain data
6
+ * @param schemaHash - Hash of the schema this snapshot conforms to
7
+ * @returns New snapshot
8
+ */
9
+ export function createSnapshot(data, schemaHash) {
10
+ return {
11
+ data,
12
+ computed: {},
13
+ system: createInitialSystemState(),
14
+ input: undefined,
15
+ meta: {
16
+ version: 0,
17
+ timestamp: Date.now(),
18
+ schemaHash,
19
+ },
20
+ };
21
+ }
22
+ /**
23
+ * Create an intent
24
+ *
25
+ * @param type - Action type
26
+ * @param input - Action input (optional)
27
+ * @param intentId - Unique identifier for this processing attempt (optional, auto-generated if not provided)
28
+ * @returns Intent
29
+ */
30
+ export function createIntent(type, input, intentId) {
31
+ return {
32
+ type,
33
+ input,
34
+ intentId: intentId ?? generateIntentId(),
35
+ };
36
+ }
37
+ /**
38
+ * Generate a unique intent ID
39
+ */
40
+ function generateIntentId() {
41
+ return `intent-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
42
+ }
43
+ //# sourceMappingURL=factories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../src/factories.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAI,IAAO,EAAE,UAAkB;IAC3D,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,wBAAwB,EAAE;QAClC,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,UAAU;SACX;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,KAAe,EACf,QAAiB;IAEjB,OAAO;QACL,IAAI;QACJ,KAAK;QACL,QAAQ,EAAE,QAAQ,IAAI,gBAAgB,EAAE;KACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB;IACvB,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,52 @@
1
1
  /**
2
2
  * @manifesto-ai/core
3
3
  *
4
- * AI Native Semantic Layer for SaaS Business Logic
4
+ * Manifesto Core - A Pure Semantic Calculator for Domain State
5
5
  *
6
- * Manifesto는 SaaS 비즈니스 로직을 의미론적 주소 공간(Semantic Path Space)으로 선언하여,
7
- * AI Agent가 UI를 이해하고 안전하게 조작할 수 있게 하는 AI Native Semantic Layer입니다.
6
+ * Core computes. Host executes. These concerns never mix.
8
7
  */
9
- export { type SemanticPath, type SemanticMeta, type ConditionRef, type FieldPolicy, type SourceDefinition, type DerivedDefinition, type AsyncDefinition, type ActionDefinition, type ActionSemanticMeta, type PathDefinitions, type DomainMeta, type ManifestoDomain, type ValidationIssue, type ValidationResult, defineDomain, defineSource, defineDerived, defineAsync, defineAction, fieldPolicy, condition, validateDomain, } from './domain/index.js';
10
- export { type Expression, type EvaluationContext, type LiteralExpr, type GetExpr, type ComparisonExpr, type LogicalExpr, type ArithmeticExpr, type ConditionalExpr, type StringFn, type ArrayFn, type NumberFn, type ObjectFn, type TypeFn, type DateFn, isValidExpression, isGetExpr, extractPaths, stringifyExpression, parseExpression, expressionToString, evaluate, type EvalResult, analyzeExpression, isPureExpression, isConstantExpression, areExpressionsEqual, optimizeExpression, substitutePathWithValue, type DependencyAnalysis, } from './expression/index.js';
11
- export { type Effect, type SetValueEffect, type SetStateEffect, type ApiCallEffect, type NavigateEffect, type DelayEffect, type SequenceEffect, type ParallelEffect, type ConditionalEffect, type CatchEffect, type EmitEventEffect, type EffectTag, isEffect, isEffectOfType, type Result, type EffectError, ok, err, effectError, isOk, isErr, unwrap, unwrapOr, unwrapErr, map, mapErr, flatMap, flatten, all, any, fromPromise, tryCatch, runEffect, setValue, setState, apiCall, navigate, delay, sequence, parallel, conditional, catchEffect, emitEvent, type EffectHandler, type EffectRunnerConfig, type EffectResult, } from './effect/index.js';
12
- export { type DependencyGraph, type DagNode, type SourceNode, type DerivedNode, type AsyncNode, buildDependencyGraph, getDirectDependencies, getDirectDependents, getAllDependencies, getAllDependents, hasCycle, findPath, topologicalSortWithCycleDetection, getLevelOrder, reverseTopologicalSort, partialTopologicalSort, getAffectedOrder, type TopologicalSortResult, propagate, propagateAsyncResult, analyzeImpact, createDebouncedPropagator, type PropagationResult, type SnapshotLike, } from './dag/index.js';
13
- export { type DomainSnapshot, createSnapshot, cloneSnapshot, getValueByPath, setValueByPath, diffSnapshots, type SnapshotListener, type PathListener, type EventListener, type DomainEvent, type Unsubscribe, SubscriptionManager, createBatchNotifier, type DomainRuntime, type PreconditionStatus, type ResolvedFieldPolicy, type ExplanationTree, type ValidationError, type CreateRuntimeOptions, createRuntime, } from './runtime/index.js';
14
- export { evaluatePrecondition, evaluateAllPreconditions, checkActionAvailability, extractPreconditionDependencies, analyzePreconditionRequirements, type PreconditionEvaluationResult, type ActionAvailability, evaluateFieldPolicy, policyToUIState, extractFieldPolicyDependencies, evaluateMultipleFieldPolicies, explainFieldPolicy, type FieldPolicyEvaluation, type ConditionEvaluationDetail, type FieldUIState, } from './policy/index.js';
15
- export { schemaToSource, CommonSchemas, SchemaUtils, getSchemaDefault, getSchemaMetadata, toJsonSchema, zodErrorToValidationResult, validateValue, validatePartial, validateDomainData, validateFields, validateAsync, mergeValidationResults, groupValidationByPath, filterBySeverity, getErrors, getWarnings, getSuggestions, } from './schema/index.js';
16
- export { z } from 'zod';
8
+ import type { DomainSchema } from "./schema/domain.js";
9
+ import type { Snapshot } from "./schema/snapshot.js";
10
+ import type { Intent, Patch } from "./schema/patch.js";
11
+ import type { SemanticPath } from "./schema/common.js";
12
+ import type { ComputeResult, ValidationResult, ExplainResult } from "./schema/result.js";
13
+ import { compute } from "./core/compute.js";
14
+ import { apply } from "./core/apply.js";
15
+ import { validate } from "./core/validate.js";
16
+ import { explain } from "./core/explain.js";
17
+ /**
18
+ * ManifestoCore interface
19
+ */
20
+ export interface ManifestoCore {
21
+ /**
22
+ * Compute the result of dispatching an intent.
23
+ *
24
+ * This is the ONLY entry point for computation.
25
+ * Each call is independent - there is no suspended context.
26
+ */
27
+ compute(schema: DomainSchema, snapshot: Snapshot, intent: Intent): Promise<ComputeResult>;
28
+ /**
29
+ * Apply patches to a snapshot.
30
+ * Returns new snapshot with recomputed values.
31
+ */
32
+ apply(schema: DomainSchema, snapshot: Snapshot, patches: readonly Patch[]): Snapshot;
33
+ /**
34
+ * Validate a schema.
35
+ */
36
+ validate(schema: unknown): ValidationResult;
37
+ /**
38
+ * Explain why a value is what it is.
39
+ */
40
+ explain(schema: DomainSchema, snapshot: Snapshot, path: SemanticPath): ExplainResult;
41
+ }
42
+ /**
43
+ * Create a ManifestoCore instance
44
+ */
45
+ export declare function createCore(): ManifestoCore;
46
+ export * from "./schema/index.js";
47
+ export * from "./utils/index.js";
48
+ export * from "./evaluator/index.js";
49
+ export * from "./errors.js";
50
+ export * from "./factories.js";
51
+ export { compute, apply, validate, explain };
17
52
  //# sourceMappingURL=index.d.ts.map