@itaila/archetype 0.3.30

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 (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +475 -0
  3. package/dist/audit/audit-persona.d.ts +163 -0
  4. package/dist/audit/audit-persona.d.ts.map +1 -0
  5. package/dist/audit/audit-persona.js +415 -0
  6. package/dist/audit/audit-persona.js.map +1 -0
  7. package/dist/audit/brain-reflection.d.ts +33 -0
  8. package/dist/audit/brain-reflection.d.ts.map +1 -0
  9. package/dist/audit/brain-reflection.js +148 -0
  10. package/dist/audit/brain-reflection.js.map +1 -0
  11. package/dist/audit/conversation-audit.d.ts +12 -0
  12. package/dist/audit/conversation-audit.d.ts.map +1 -0
  13. package/dist/audit/conversation-audit.js +76 -0
  14. package/dist/audit/conversation-audit.js.map +1 -0
  15. package/dist/audit/prompt-audit.d.ts +10 -0
  16. package/dist/audit/prompt-audit.d.ts.map +1 -0
  17. package/dist/audit/prompt-audit.js +153 -0
  18. package/dist/audit/prompt-audit.js.map +1 -0
  19. package/dist/audit/prompt-dump.d.ts +137 -0
  20. package/dist/audit/prompt-dump.d.ts.map +1 -0
  21. package/dist/audit/prompt-dump.js +269 -0
  22. package/dist/audit/prompt-dump.js.map +1 -0
  23. package/dist/audit/trace-integrity.d.ts +33 -0
  24. package/dist/audit/trace-integrity.d.ts.map +1 -0
  25. package/dist/audit/trace-integrity.js +109 -0
  26. package/dist/audit/trace-integrity.js.map +1 -0
  27. package/dist/audit/types.d.ts +92 -0
  28. package/dist/audit/types.d.ts.map +1 -0
  29. package/dist/audit/types.js +2 -0
  30. package/dist/audit/types.js.map +1 -0
  31. package/dist/audit/version.d.ts +14 -0
  32. package/dist/audit/version.d.ts.map +1 -0
  33. package/dist/audit/version.js +65 -0
  34. package/dist/audit/version.js.map +1 -0
  35. package/dist/brain.d.ts +7 -0
  36. package/dist/brain.d.ts.map +1 -0
  37. package/dist/brain.js +83 -0
  38. package/dist/brain.js.map +1 -0
  39. package/dist/builder/actions.d.ts +60 -0
  40. package/dist/builder/actions.d.ts.map +1 -0
  41. package/dist/builder/actions.js +257 -0
  42. package/dist/builder/actions.js.map +1 -0
  43. package/dist/builder/browser.d.ts +140 -0
  44. package/dist/builder/browser.d.ts.map +1 -0
  45. package/dist/builder/browser.js +232 -0
  46. package/dist/builder/browser.js.map +1 -0
  47. package/dist/builder/executor.d.ts +228 -0
  48. package/dist/builder/executor.d.ts.map +1 -0
  49. package/dist/builder/executor.js +1548 -0
  50. package/dist/builder/executor.js.map +1 -0
  51. package/dist/builder/index.d.ts +24 -0
  52. package/dist/builder/index.d.ts.map +1 -0
  53. package/dist/builder/index.js +24 -0
  54. package/dist/builder/index.js.map +1 -0
  55. package/dist/builder/node-test-discovery.d.ts +13 -0
  56. package/dist/builder/node-test-discovery.d.ts.map +1 -0
  57. package/dist/builder/node-test-discovery.js +45 -0
  58. package/dist/builder/node-test-discovery.js.map +1 -0
  59. package/dist/builder/sandbox.d.ts +172 -0
  60. package/dist/builder/sandbox.d.ts.map +1 -0
  61. package/dist/builder/sandbox.js +294 -0
  62. package/dist/builder/sandbox.js.map +1 -0
  63. package/dist/builder/workspace-files.d.ts +63 -0
  64. package/dist/builder/workspace-files.d.ts.map +1 -0
  65. package/dist/builder/workspace-files.js +190 -0
  66. package/dist/builder/workspace-files.js.map +1 -0
  67. package/dist/core/actions.d.ts +55 -0
  68. package/dist/core/actions.d.ts.map +1 -0
  69. package/dist/core/actions.js +311 -0
  70. package/dist/core/actions.js.map +1 -0
  71. package/dist/core/attachment-notes.d.ts +7 -0
  72. package/dist/core/attachment-notes.d.ts.map +1 -0
  73. package/dist/core/attachment-notes.js +38 -0
  74. package/dist/core/attachment-notes.js.map +1 -0
  75. package/dist/core/context.d.ts +10 -0
  76. package/dist/core/context.d.ts.map +1 -0
  77. package/dist/core/context.js +108 -0
  78. package/dist/core/context.js.map +1 -0
  79. package/dist/core/crud-prompt.d.ts +16 -0
  80. package/dist/core/crud-prompt.d.ts.map +1 -0
  81. package/dist/core/crud-prompt.js +268 -0
  82. package/dist/core/crud-prompt.js.map +1 -0
  83. package/dist/core/crud-schema.d.ts +12 -0
  84. package/dist/core/crud-schema.d.ts.map +1 -0
  85. package/dist/core/crud-schema.js +42 -0
  86. package/dist/core/crud-schema.js.map +1 -0
  87. package/dist/core/effective-config.d.ts +13 -0
  88. package/dist/core/effective-config.d.ts.map +1 -0
  89. package/dist/core/effective-config.js +33 -0
  90. package/dist/core/effective-config.js.map +1 -0
  91. package/dist/core/entities.d.ts +82 -0
  92. package/dist/core/entities.d.ts.map +1 -0
  93. package/dist/core/entities.js +116 -0
  94. package/dist/core/entities.js.map +1 -0
  95. package/dist/core/entity-helpers.d.ts +47 -0
  96. package/dist/core/entity-helpers.d.ts.map +1 -0
  97. package/dist/core/entity-helpers.js +122 -0
  98. package/dist/core/entity-helpers.js.map +1 -0
  99. package/dist/core/entity-registry.d.ts +47 -0
  100. package/dist/core/entity-registry.d.ts.map +1 -0
  101. package/dist/core/entity-registry.js +54 -0
  102. package/dist/core/entity-registry.js.map +1 -0
  103. package/dist/core/eq.d.ts +13 -0
  104. package/dist/core/eq.d.ts.map +1 -0
  105. package/dist/core/eq.js +41 -0
  106. package/dist/core/eq.js.map +1 -0
  107. package/dist/core/focus-context.d.ts +19 -0
  108. package/dist/core/focus-context.d.ts.map +1 -0
  109. package/dist/core/focus-context.js +46 -0
  110. package/dist/core/focus-context.js.map +1 -0
  111. package/dist/core/focus-mode-actions.d.ts +23 -0
  112. package/dist/core/focus-mode-actions.d.ts.map +1 -0
  113. package/dist/core/focus-mode-actions.js +74 -0
  114. package/dist/core/focus-mode-actions.js.map +1 -0
  115. package/dist/core/greeting.d.ts +10 -0
  116. package/dist/core/greeting.d.ts.map +1 -0
  117. package/dist/core/greeting.js +41 -0
  118. package/dist/core/greeting.js.map +1 -0
  119. package/dist/core/identity.d.ts +13 -0
  120. package/dist/core/identity.d.ts.map +1 -0
  121. package/dist/core/identity.js +54 -0
  122. package/dist/core/identity.js.map +1 -0
  123. package/dist/core/knowledge.d.ts +10 -0
  124. package/dist/core/knowledge.d.ts.map +1 -0
  125. package/dist/core/knowledge.js +40 -0
  126. package/dist/core/knowledge.js.map +1 -0
  127. package/dist/core/memory-actions.d.ts +38 -0
  128. package/dist/core/memory-actions.d.ts.map +1 -0
  129. package/dist/core/memory-actions.js +181 -0
  130. package/dist/core/memory-actions.js.map +1 -0
  131. package/dist/core/memory.d.ts +35 -0
  132. package/dist/core/memory.d.ts.map +1 -0
  133. package/dist/core/memory.js +168 -0
  134. package/dist/core/memory.js.map +1 -0
  135. package/dist/core/peer-actions.d.ts +15 -0
  136. package/dist/core/peer-actions.d.ts.map +1 -0
  137. package/dist/core/peer-actions.js +33 -0
  138. package/dist/core/peer-actions.js.map +1 -0
  139. package/dist/core/prompt-builder.d.ts +46 -0
  140. package/dist/core/prompt-builder.d.ts.map +1 -0
  141. package/dist/core/prompt-builder.js +543 -0
  142. package/dist/core/prompt-builder.js.map +1 -0
  143. package/dist/core/prompt-mode.d.ts +3 -0
  144. package/dist/core/prompt-mode.d.ts.map +1 -0
  145. package/dist/core/prompt-mode.js +6 -0
  146. package/dist/core/prompt-mode.js.map +1 -0
  147. package/dist/core/prompted-turn.d.ts +6 -0
  148. package/dist/core/prompted-turn.d.ts.map +1 -0
  149. package/dist/core/prompted-turn.js +48 -0
  150. package/dist/core/prompted-turn.js.map +1 -0
  151. package/dist/core/request-builder.d.ts +14 -0
  152. package/dist/core/request-builder.d.ts.map +1 -0
  153. package/dist/core/request-builder.js +64 -0
  154. package/dist/core/request-builder.js.map +1 -0
  155. package/dist/core/session-routing.d.ts +23 -0
  156. package/dist/core/session-routing.d.ts.map +1 -0
  157. package/dist/core/session-routing.js +59 -0
  158. package/dist/core/session-routing.js.map +1 -0
  159. package/dist/core/voice.d.ts +6 -0
  160. package/dist/core/voice.d.ts.map +1 -0
  161. package/dist/core/voice.js +30 -0
  162. package/dist/core/voice.js.map +1 -0
  163. package/dist/engine/chat.d.ts +45 -0
  164. package/dist/engine/chat.d.ts.map +1 -0
  165. package/dist/engine/chat.js +308 -0
  166. package/dist/engine/chat.js.map +1 -0
  167. package/dist/engine/continuity.d.ts +107 -0
  168. package/dist/engine/continuity.d.ts.map +1 -0
  169. package/dist/engine/continuity.js +320 -0
  170. package/dist/engine/continuity.js.map +1 -0
  171. package/dist/engine/crud.d.ts +62 -0
  172. package/dist/engine/crud.d.ts.map +1 -0
  173. package/dist/engine/crud.js +260 -0
  174. package/dist/engine/crud.js.map +1 -0
  175. package/dist/engine/side-effects.d.ts +93 -0
  176. package/dist/engine/side-effects.d.ts.map +1 -0
  177. package/dist/engine/side-effects.js +271 -0
  178. package/dist/engine/side-effects.js.map +1 -0
  179. package/dist/engine/staging.d.ts +29 -0
  180. package/dist/engine/staging.d.ts.map +1 -0
  181. package/dist/engine/staging.js +159 -0
  182. package/dist/engine/staging.js.map +1 -0
  183. package/dist/engine/working-set.d.ts +18 -0
  184. package/dist/engine/working-set.d.ts.map +1 -0
  185. package/dist/engine/working-set.js +246 -0
  186. package/dist/engine/working-set.js.map +1 -0
  187. package/dist/evals/action-contracts.d.ts +40 -0
  188. package/dist/evals/action-contracts.d.ts.map +1 -0
  189. package/dist/evals/action-contracts.js +208 -0
  190. package/dist/evals/action-contracts.js.map +1 -0
  191. package/dist/evals/brain-bloat.d.ts +39 -0
  192. package/dist/evals/brain-bloat.d.ts.map +1 -0
  193. package/dist/evals/brain-bloat.js +167 -0
  194. package/dist/evals/brain-bloat.js.map +1 -0
  195. package/dist/evals/brain-prescriptions.d.ts +30 -0
  196. package/dist/evals/brain-prescriptions.d.ts.map +1 -0
  197. package/dist/evals/brain-prescriptions.js +148 -0
  198. package/dist/evals/brain-prescriptions.js.map +1 -0
  199. package/dist/evals/cross-layer-duplicates.d.ts +49 -0
  200. package/dist/evals/cross-layer-duplicates.d.ts.map +1 -0
  201. package/dist/evals/cross-layer-duplicates.js +289 -0
  202. package/dist/evals/cross-layer-duplicates.js.map +1 -0
  203. package/dist/evals/entity-visibility.d.ts +28 -0
  204. package/dist/evals/entity-visibility.d.ts.map +1 -0
  205. package/dist/evals/entity-visibility.js +216 -0
  206. package/dist/evals/entity-visibility.js.map +1 -0
  207. package/dist/evals/index.d.ts +19 -0
  208. package/dist/evals/index.d.ts.map +1 -0
  209. package/dist/evals/index.js +11 -0
  210. package/dist/evals/index.js.map +1 -0
  211. package/dist/evals/judge.d.ts +22 -0
  212. package/dist/evals/judge.d.ts.map +1 -0
  213. package/dist/evals/judge.js +337 -0
  214. package/dist/evals/judge.js.map +1 -0
  215. package/dist/evals/operational-contract.d.ts +40 -0
  216. package/dist/evals/operational-contract.d.ts.map +1 -0
  217. package/dist/evals/operational-contract.js +115 -0
  218. package/dist/evals/operational-contract.js.map +1 -0
  219. package/dist/evals/prompt-content.d.ts +14 -0
  220. package/dist/evals/prompt-content.d.ts.map +1 -0
  221. package/dist/evals/prompt-content.js +104 -0
  222. package/dist/evals/prompt-content.js.map +1 -0
  223. package/dist/evals/runtime.d.ts +4 -0
  224. package/dist/evals/runtime.d.ts.map +1 -0
  225. package/dist/evals/runtime.js +197 -0
  226. package/dist/evals/runtime.js.map +1 -0
  227. package/dist/evals/sample-projects.d.ts +143 -0
  228. package/dist/evals/sample-projects.d.ts.map +1 -0
  229. package/dist/evals/sample-projects.js +644 -0
  230. package/dist/evals/sample-projects.js.map +1 -0
  231. package/dist/evals/types.d.ts +88 -0
  232. package/dist/evals/types.d.ts.map +1 -0
  233. package/dist/evals/types.js +2 -0
  234. package/dist/evals/types.js.map +1 -0
  235. package/dist/foundation/index.d.ts +158 -0
  236. package/dist/foundation/index.d.ts.map +1 -0
  237. package/dist/foundation/index.js +256 -0
  238. package/dist/foundation/index.js.map +1 -0
  239. package/dist/index.d.ts +223 -0
  240. package/dist/index.d.ts.map +1 -0
  241. package/dist/index.js +998 -0
  242. package/dist/index.js.map +1 -0
  243. package/dist/managed/autonomous-loop.d.ts +199 -0
  244. package/dist/managed/autonomous-loop.d.ts.map +1 -0
  245. package/dist/managed/autonomous-loop.js +451 -0
  246. package/dist/managed/autonomous-loop.js.map +1 -0
  247. package/dist/managed/conversation.d.ts +20 -0
  248. package/dist/managed/conversation.d.ts.map +1 -0
  249. package/dist/managed/conversation.js +40 -0
  250. package/dist/managed/conversation.js.map +1 -0
  251. package/dist/managed/knowledge.d.ts +7 -0
  252. package/dist/managed/knowledge.d.ts.map +1 -0
  253. package/dist/managed/knowledge.js +174 -0
  254. package/dist/managed/knowledge.js.map +1 -0
  255. package/dist/managed/memory-manager.d.ts +7 -0
  256. package/dist/managed/memory-manager.d.ts.map +1 -0
  257. package/dist/managed/memory-manager.js +18 -0
  258. package/dist/managed/memory-manager.js.map +1 -0
  259. package/dist/managed/memory-review.d.ts +45 -0
  260. package/dist/managed/memory-review.d.ts.map +1 -0
  261. package/dist/managed/memory-review.js +130 -0
  262. package/dist/managed/memory-review.js.map +1 -0
  263. package/dist/managed/storage.d.ts +2 -0
  264. package/dist/managed/storage.d.ts.map +1 -0
  265. package/dist/managed/storage.js +2 -0
  266. package/dist/managed/storage.js.map +1 -0
  267. package/dist/managed/work-history.d.ts +23 -0
  268. package/dist/managed/work-history.d.ts.map +1 -0
  269. package/dist/managed/work-history.js +31 -0
  270. package/dist/managed/work-history.js.map +1 -0
  271. package/dist/observability/index.d.ts +15 -0
  272. package/dist/observability/index.d.ts.map +1 -0
  273. package/dist/observability/index.js +15 -0
  274. package/dist/observability/index.js.map +1 -0
  275. package/dist/observability/render-run-markdown.d.ts +90 -0
  276. package/dist/observability/render-run-markdown.d.ts.map +1 -0
  277. package/dist/observability/render-run-markdown.js +231 -0
  278. package/dist/observability/render-run-markdown.js.map +1 -0
  279. package/dist/observability/turn-reporter.d.ts +20 -0
  280. package/dist/observability/turn-reporter.d.ts.map +1 -0
  281. package/dist/observability/turn-reporter.js +106 -0
  282. package/dist/observability/turn-reporter.js.map +1 -0
  283. package/dist/persona.d.ts +49 -0
  284. package/dist/persona.d.ts.map +1 -0
  285. package/dist/persona.js +287 -0
  286. package/dist/persona.js.map +1 -0
  287. package/dist/playbook/defaults.d.ts +25 -0
  288. package/dist/playbook/defaults.d.ts.map +1 -0
  289. package/dist/playbook/defaults.js +108 -0
  290. package/dist/playbook/defaults.js.map +1 -0
  291. package/dist/playbook/invariants.d.ts +244 -0
  292. package/dist/playbook/invariants.d.ts.map +1 -0
  293. package/dist/playbook/invariants.js +259 -0
  294. package/dist/playbook/invariants.js.map +1 -0
  295. package/dist/playbook/templates.d.ts +7 -0
  296. package/dist/playbook/templates.d.ts.map +1 -0
  297. package/dist/playbook/templates.js +437 -0
  298. package/dist/playbook/templates.js.map +1 -0
  299. package/dist/providers/gemini.d.ts +73 -0
  300. package/dist/providers/gemini.d.ts.map +1 -0
  301. package/dist/providers/gemini.js +536 -0
  302. package/dist/providers/gemini.js.map +1 -0
  303. package/dist/providers/types.d.ts +2 -0
  304. package/dist/providers/types.d.ts.map +1 -0
  305. package/dist/providers/types.js +2 -0
  306. package/dist/providers/types.js.map +1 -0
  307. package/dist/providers/zod-to-gemini.d.ts +8 -0
  308. package/dist/providers/zod-to-gemini.d.ts.map +1 -0
  309. package/dist/providers/zod-to-gemini.js +148 -0
  310. package/dist/providers/zod-to-gemini.js.map +1 -0
  311. package/dist/samples/pm-spec-agent.d.ts +22 -0
  312. package/dist/samples/pm-spec-agent.d.ts.map +1 -0
  313. package/dist/samples/pm-spec-agent.js +53 -0
  314. package/dist/samples/pm-spec-agent.js.map +1 -0
  315. package/dist/types.d.ts +920 -0
  316. package/dist/types.d.ts.map +1 -0
  317. package/dist/types.js +2 -0
  318. package/dist/types.js.map +1 -0
  319. package/package.json +68 -0
@@ -0,0 +1,260 @@
1
+ import { allowedOperations } from '../core/entity-helpers.js';
2
+ /**
3
+ * Validate raw CRUD actions against registered entity schemas.
4
+ * Returns valid + invalid lists.
5
+ */
6
+ export function validateCrudActions(raw, entities) {
7
+ const valid = [];
8
+ const invalid = [];
9
+ for (const rawAction of raw) {
10
+ // Parse stringified params (Gemini returns JSON string since the schema uses STRING type)
11
+ let action = rawAction;
12
+ if (typeof rawAction.params === 'string') {
13
+ try {
14
+ action = { ...rawAction, params: JSON.parse(rawAction.params) };
15
+ }
16
+ catch {
17
+ invalid.push({ action: rawAction, error: `Invalid JSON in params: ${String(rawAction.params).slice(0, 100)}` });
18
+ continue;
19
+ }
20
+ }
21
+ // Check entity exists
22
+ const entityConfig = entities[action.entity];
23
+ if (!entityConfig) {
24
+ invalid.push({ action, error: `Unknown entity "${action.entity}"` });
25
+ continue;
26
+ }
27
+ // Check the host app implements this operation for this entity
28
+ const allowed = allowedOperations(entityConfig);
29
+ if (!allowed.includes(action.operation)) {
30
+ invalid.push({ action, error: `Entity "${action.entity}" does not support ${action.operation} — supported: ${allowed.join(', ')}` });
31
+ continue;
32
+ }
33
+ // Check id for update/delete
34
+ if ((action.operation === 'update' || action.operation === 'delete') && !action.id) {
35
+ invalid.push({ action, error: `${action.operation} requires an id` });
36
+ continue;
37
+ }
38
+ // Validate params for create (full schema) and update (partial)
39
+ if (action.operation === 'create') {
40
+ const result = entityConfig.schema.safeParse(action.params ?? {});
41
+ if (!result.success) {
42
+ invalid.push({ action, error: result.error.message });
43
+ continue;
44
+ }
45
+ // Ensure every create has an ID (AI-generated temp or SDK fallback)
46
+ const id = action.id || crypto.randomUUID();
47
+ valid.push({ ...action, id, params: result.data });
48
+ }
49
+ else if (action.operation === 'update') {
50
+ // Partial validation — use .partial() if available
51
+ const schema = entityConfig.schema;
52
+ const partial = 'partial' in schema && typeof schema.partial === 'function'
53
+ ? schema.partial()
54
+ : schema;
55
+ const result = partial.safeParse(action.params ?? {});
56
+ if (!result.success) {
57
+ invalid.push({ action, error: result.error.message });
58
+ continue;
59
+ }
60
+ valid.push({ ...action, params: result.data });
61
+ }
62
+ else if (action.operation === 'delete') {
63
+ // delete — no params needed
64
+ valid.push(action);
65
+ }
66
+ else {
67
+ // Unknown operation — don't silently treat as delete.
68
+ invalid.push({
69
+ action,
70
+ error: `Unknown CRUD operation "${String(action.operation)}" — expected "create", "update", or "delete"`,
71
+ });
72
+ }
73
+ }
74
+ return { valid, invalid };
75
+ }
76
+ /**
77
+ * Generate an action annotation string for a CRUD action.
78
+ * Uses the entity's displayField to create human-readable annotations like:
79
+ * created thread: "Roadmap prioritization"
80
+ */
81
+ export function crudActionToAnnotation(action, entities) {
82
+ const config = entities[action.entity];
83
+ const label = config?.label ?? capitalize(action.entity);
84
+ const displayField = config?.displayField;
85
+ const displayValue = displayField && action.params?.[displayField]
86
+ ? String(action.params[displayField])
87
+ : null;
88
+ const title = displayValue ? `: "${displayValue}"` : '';
89
+ switch (action.operation) {
90
+ case 'create': return `created ${label.toLowerCase()}${title}`;
91
+ case 'update': return `updated ${label.toLowerCase()} ${action.id ?? ''}${title}`.trim();
92
+ case 'delete': return `deleted ${label.toLowerCase()} ${action.id ?? ''}`.trim();
93
+ }
94
+ }
95
+ function capitalize(s) {
96
+ return s.charAt(0).toUpperCase() + s.slice(1);
97
+ }
98
+ /**
99
+ * Separate CRUD actions from regular actions in a validated action list.
100
+ * Handles stringified params (Gemini quirk) and legacy top-level crudActions.
101
+ */
102
+ export function separateCrudActions(actions, legacyCrud) {
103
+ const crudActions = [];
104
+ const nonCrudActions = [];
105
+ for (const action of actions) {
106
+ if (action.name === 'crud') {
107
+ const p = action.params;
108
+ const innerParams = typeof p.params === 'string' ? p.params : (p.params ? JSON.stringify(p.params) : undefined);
109
+ crudActions.push({
110
+ operation: p.operation,
111
+ entity: p.entity,
112
+ id: p.id,
113
+ params: innerParams,
114
+ });
115
+ }
116
+ else {
117
+ nonCrudActions.push(action);
118
+ }
119
+ }
120
+ if (legacyCrud?.length) {
121
+ crudActions.push(...legacyCrud);
122
+ }
123
+ return { crudActions, nonCrudActions };
124
+ }
125
+ /**
126
+ * Validate CRUD actions against entity schemas and populate the trace.
127
+ * Returns the valid subset; invalid actions are logged to trace.errors.
128
+ */
129
+ export function validateAndTraceCrud(crudActions, entities, trace) {
130
+ if (crudActions.length === 0)
131
+ return undefined;
132
+ // If crud actions were emitted but no entities are declared, that's a
133
+ // config bug the AI can't recover from. Surface loudly — don't silently
134
+ // drop the actions (previous behavior was returning undefined, which
135
+ // hid the whole set from the trace).
136
+ if (!entities || Object.keys(entities).length === 0) {
137
+ for (const action of crudActions) {
138
+ const error = `No entities declared in persona config — cannot route ${action.operation} ${action.entity}`;
139
+ trace.crudActions.push({
140
+ operation: action.operation,
141
+ entity: action.entity,
142
+ id: action.id,
143
+ params: (action.params ?? {}),
144
+ status: 'invalid',
145
+ error,
146
+ });
147
+ trace.errors.push(`CRUD validation failed: ${error}`);
148
+ }
149
+ console.warn(`[archetype] ${crudActions.length} CRUD action(s) rejected — no entities declared in persona config`);
150
+ return undefined;
151
+ }
152
+ const validation = validateCrudActions(crudActions, entities);
153
+ for (const valid of validation.valid) {
154
+ trace.crudActions.push({ operation: valid.operation, entity: valid.entity, id: valid.id, params: valid.params ?? {}, status: 'valid' });
155
+ }
156
+ for (const inv of validation.invalid) {
157
+ trace.crudActions.push({ operation: inv.action.operation, entity: inv.action.entity, id: inv.action.id, params: inv.action.params ?? {}, status: 'invalid', error: inv.error });
158
+ trace.errors.push(`CRUD validation failed: ${inv.action.operation} ${inv.action.entity} — ${inv.error}`);
159
+ }
160
+ if (validation.invalid.length > 0) {
161
+ console.warn(`[archetype] ${validation.invalid.length} CRUD action(s) failed validation:`, validation.invalid.map(i => `${i.action.operation} ${i.action.entity}: ${i.error}`).join(' | '));
162
+ }
163
+ return validation.valid.length > 0 ? validation.valid : undefined;
164
+ }
165
+ /**
166
+ * Resolve temp IDs (prefixed with `_`) to real UUIDs.
167
+ * The AI generates `_w1`, `_ex1` etc. as cross-reference handles within a single response.
168
+ * This replaces them with permanent UUIDs before handlers see them.
169
+ *
170
+ * Resolves both `action.id` on creates and any string param values that match a temp ID.
171
+ */
172
+ export function resolveTempIds(actions) {
173
+ const map = new Map();
174
+ // First pass: generate real IDs for all creates with _ prefix
175
+ for (const action of actions) {
176
+ if (action.operation === 'create' && action.id?.startsWith('_')) {
177
+ map.set(action.id, crypto.randomUUID());
178
+ }
179
+ }
180
+ if (map.size === 0)
181
+ return actions;
182
+ // Second pass: resolve all references (action.id + param values)
183
+ return actions.map(action => {
184
+ const id = action.id && map.has(action.id) ? map.get(action.id) : action.id;
185
+ const params = action.params ? resolveParamRefs(action.params, map) : action.params;
186
+ return { ...action, id, params };
187
+ });
188
+ }
189
+ function resolveParamRefs(params, map) {
190
+ const resolved = {};
191
+ for (const [key, value] of Object.entries(params)) {
192
+ if (typeof value === 'string' && map.has(value)) {
193
+ resolved[key] = map.get(value);
194
+ }
195
+ else {
196
+ resolved[key] = value;
197
+ }
198
+ }
199
+ return resolved;
200
+ }
201
+ /**
202
+ * Execute validated CRUD actions through entity-keyed handlers.
203
+ * This is the commit gate — the app calls this when ready to persist.
204
+ *
205
+ * Actions should be pre-validated (validateCrudActions) and temp-ID-resolved
206
+ * (resolveTempIds) before calling commitCrud.
207
+ *
208
+ * If a trace is provided, populates trace.domainActions with timing and status.
209
+ */
210
+ export async function commitCrud(actions, handlers, options) {
211
+ const results = [];
212
+ for (const action of actions) {
213
+ const start = Date.now();
214
+ const label = `${action.operation}_${action.entity}`;
215
+ const entityHandler = handlers[action.entity];
216
+ if (!entityHandler) {
217
+ const result = { success: false, error: `No handler for entity: ${action.entity}` };
218
+ results.push(result);
219
+ if (options?.trace) {
220
+ options.trace.domainActions.push({ name: label, params: action.params ?? {}, status: 'failed', error: result.error, durationMs: Date.now() - start });
221
+ }
222
+ continue;
223
+ }
224
+ const opHandler = entityHandler[action.operation];
225
+ if (!opHandler) {
226
+ const result = { success: false, error: `No ${action.operation} handler for entity: ${action.entity}` };
227
+ results.push(result);
228
+ if (options?.trace) {
229
+ options.trace.domainActions.push({ name: label, params: action.params ?? {}, status: 'failed', error: result.error, durationMs: Date.now() - start });
230
+ }
231
+ continue;
232
+ }
233
+ try {
234
+ let result;
235
+ if (action.operation === 'delete') {
236
+ result = await opHandler(action.id);
237
+ }
238
+ else {
239
+ result = await opHandler(action.id, action.params ?? {});
240
+ }
241
+ results.push(result);
242
+ if (options?.trace) {
243
+ options.trace.domainActions.push({
244
+ name: label, params: action.params ?? {},
245
+ status: result.success ? 'executed' : 'failed',
246
+ error: result.error, durationMs: Date.now() - start,
247
+ });
248
+ }
249
+ }
250
+ catch (err) {
251
+ const error = err instanceof Error ? err.message : String(err);
252
+ results.push({ success: false, error });
253
+ if (options?.trace) {
254
+ options.trace.domainActions.push({ name: label, params: action.params ?? {}, status: 'failed', error, durationMs: Date.now() - start });
255
+ }
256
+ }
257
+ }
258
+ return results;
259
+ }
260
+ //# sourceMappingURL=crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.js","sourceRoot":"","sources":["../../src/engine/crud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import type { ParsedAction, ActionDefinition, ApprovalConfig } from '../types.js';
2
+ export interface SideEffectHandlerResult {
3
+ success: boolean;
4
+ /** Did the handler actually mutate state? Defaults to `success` when omitted. */
5
+ changed?: boolean;
6
+ error?: string;
7
+ }
8
+ export interface SideEffectHandler {
9
+ (params: Record<string, unknown>): Promise<SideEffectHandlerResult>;
10
+ }
11
+ export interface SideEffectResult {
12
+ action: ParsedAction;
13
+ status: 'executed' | 'proposed' | 'failed' | 'no_op';
14
+ success: boolean;
15
+ /** Whether the handler actually mutated state (only set when status is 'executed' or 'no_op'). */
16
+ changed?: boolean;
17
+ error?: string;
18
+ annotation?: string;
19
+ }
20
+ /** A proposed action that passed validation but wasn't executed (propose mode). */
21
+ export interface ProposedAction {
22
+ action: ParsedAction;
23
+ validatedParams: Record<string, unknown>;
24
+ annotation: string;
25
+ }
26
+ export interface ExecuteSideEffectsOptions {
27
+ /** Approval configuration. Defaults to yolo (execute immediately). */
28
+ approval?: ApprovalConfig;
29
+ }
30
+ /**
31
+ * Execute side effects for parsed actions.
32
+ * Validates action names, calls handlers, builds annotations.
33
+ *
34
+ * In 'yolo' mode (default): validates + executes immediately.
35
+ * In 'propose' mode: validates + returns proposals without executing.
36
+ *
37
+ * ActionConfidence interacts with mode:
38
+ * - 'low' always auto-executes (even in propose mode)
39
+ * - 'medium' follows the mode setting
40
+ * - 'high' always proposes (even in yolo mode)
41
+ */
42
+ export declare function executeSideEffects(actions: ParsedAction[], handlers: Record<string, SideEffectHandler>, actionDefs: Record<string, ActionDefinition>, options?: ExecuteSideEffectsOptions): Promise<SideEffectResult[]>;
43
+ /** Extended result type when propose mode generates proposals. */
44
+ export interface SideEffectResultWithProposals extends Array<SideEffectResult> {
45
+ __proposed?: ProposedAction[];
46
+ }
47
+ /**
48
+ * Extract proposed actions from a side-effects result.
49
+ */
50
+ export declare function getProposedActions(results: SideEffectResult[]): ProposedAction[];
51
+ /**
52
+ * Return annotations for actions that actually executed successfully.
53
+ * Proposed or failed actions are intentionally excluded from stored history.
54
+ */
55
+ export declare function getExecutedAnnotations(results: SideEffectResult[]): string[];
56
+ /**
57
+ * Build the assistant message that should be stored in history.
58
+ * Uses the shared continuity builder so future turns see factual outcomes,
59
+ * while raw action annotations remain debug/display-only and are stripped
60
+ * before the model sees history.
61
+ */
62
+ export declare function buildAssistantHistoryMessage(message: string, results: SideEffectResult[]): string;
63
+ /**
64
+ * Execute previously proposed actions after user confirmation.
65
+ * Takes the ProposedAction[] from `getProposedActions()` and runs the handlers.
66
+ */
67
+ export declare function confirmActions(proposed: ProposedAction[], handlers: Record<string, SideEffectHandler>): Promise<SideEffectResult[]>;
68
+ export type SideEffectOutcomeStatus = 'none' | 'succeeded' | 'partial' | 'failed' | 'no_op';
69
+ export interface SideEffectOutcome {
70
+ /** Aggregate status across all executed actions */
71
+ status: SideEffectOutcomeStatus;
72
+ /** Human-readable summary of what happened */
73
+ summary: string;
74
+ /** Action names that were attempted */
75
+ attemptedActions: string[];
76
+ /** Action names that actually mutated state */
77
+ appliedActions: string[];
78
+ /** Error messages from failed or partial actions */
79
+ errors: string[];
80
+ }
81
+ /**
82
+ * Summarize side-effect execution results into an aggregate outcome.
83
+ * Useful for communicating "what actually happened" to the user.
84
+ *
85
+ * Status logic:
86
+ * - 'none': no actions attempted (empty input or all proposed)
87
+ * - 'succeeded': all executed actions changed state
88
+ * - 'partial': some changed, some failed or didn't change
89
+ * - 'failed': nothing changed and there were errors
90
+ * - 'no_op': handlers ran successfully but nothing changed
91
+ */
92
+ export declare function summarizeSideEffects(results: SideEffectResult[]): SideEffectOutcome;
93
+ //# sourceMappingURL=side-effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"side-effects.d.ts","sourceRoot":"","sources":["../../src/engine/side-effects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpD,OAAO,EAAE,OAAO,CAAA;IAChB,kGAAkG;IAClG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAA;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC5C,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuG7B;AAED,kEAAkE;AAClE,MAAM,WAAW,6BAA8B,SAAQ,KAAK,CAAC,gBAAgB,CAAC;IAC5E,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;CAC9B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,CAEhF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,CAI5E;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,EAAE,GAC1B,MAAM,CAaR;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC1C,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmD7B;AAkBD,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3F,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,MAAM,EAAE,uBAAuB,CAAA;IAC/B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,+CAA+C;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,oDAAoD;IACpD,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAyCnF"}
@@ -0,0 +1,271 @@
1
+ import { buildAnnotations } from '../core/actions.js';
2
+ import { buildAssistantContinuityMessage } from './continuity.js';
3
+ /**
4
+ * Execute side effects for parsed actions.
5
+ * Validates action names, calls handlers, builds annotations.
6
+ *
7
+ * In 'yolo' mode (default): validates + executes immediately.
8
+ * In 'propose' mode: validates + returns proposals without executing.
9
+ *
10
+ * ActionConfidence interacts with mode:
11
+ * - 'low' always auto-executes (even in propose mode)
12
+ * - 'medium' follows the mode setting
13
+ * - 'high' always proposes (even in yolo mode)
14
+ */
15
+ export async function executeSideEffects(actions, handlers, actionDefs, options) {
16
+ const mode = options?.approval?.mode ?? 'yolo';
17
+ const results = [];
18
+ const proposed = [];
19
+ for (const action of actions) {
20
+ // Validate action exists
21
+ if (!(action.name in actionDefs)) {
22
+ results.push({
23
+ action,
24
+ status: 'failed',
25
+ success: false,
26
+ error: `Unknown action: ${action.name}`,
27
+ });
28
+ continue;
29
+ }
30
+ // Validate handler exists
31
+ const handler = handlers[action.name];
32
+ if (!handler) {
33
+ results.push({
34
+ action,
35
+ status: 'failed',
36
+ success: false,
37
+ error: `No handler registered for action: ${action.name}`,
38
+ });
39
+ continue;
40
+ }
41
+ // Validate params against Zod schema
42
+ const schema = actionDefs[action.name].schema;
43
+ const parseResult = schema.safeParse(action.params);
44
+ if (!parseResult.success) {
45
+ results.push({
46
+ action,
47
+ status: 'failed',
48
+ success: false,
49
+ error: `Invalid params for ${action.name}: ${parseResult.error.message}`,
50
+ });
51
+ continue;
52
+ }
53
+ // Determine whether to execute or propose
54
+ const shouldExecute = shouldAutoExecute(action.confidence, mode);
55
+ if (shouldExecute) {
56
+ // Execute handler immediately
57
+ try {
58
+ const result = await handler(parseResult.data);
59
+ const changed = result.changed ?? result.success;
60
+ const annotations = buildAnnotations([{ name: action.name, params: action.params }]);
61
+ if (result.success && !changed) {
62
+ results.push({
63
+ action,
64
+ status: 'no_op',
65
+ success: true,
66
+ changed: false,
67
+ error: result.error,
68
+ annotation: annotations[0],
69
+ });
70
+ }
71
+ else {
72
+ results.push({
73
+ action,
74
+ status: result.success ? 'executed' : 'failed',
75
+ success: result.success,
76
+ changed,
77
+ error: result.error,
78
+ annotation: annotations[0],
79
+ });
80
+ }
81
+ }
82
+ catch (err) {
83
+ results.push({
84
+ action,
85
+ status: 'failed',
86
+ success: false,
87
+ changed: false,
88
+ error: `Handler error for ${action.name}: ${err instanceof Error ? err.message : String(err)}`,
89
+ });
90
+ }
91
+ }
92
+ else {
93
+ // Propose without executing
94
+ const annotations = buildAnnotations([{ name: action.name, params: action.params }]);
95
+ proposed.push({
96
+ action,
97
+ validatedParams: parseResult.data,
98
+ annotation: annotations[0],
99
+ });
100
+ results.push({
101
+ action,
102
+ status: 'proposed',
103
+ success: true, // validation passed, just not executed yet
104
+ annotation: annotations[0],
105
+ });
106
+ }
107
+ }
108
+ // Attach proposed actions to the result for the app to render
109
+ if (proposed.length > 0) {
110
+ ;
111
+ results.__proposed = proposed;
112
+ }
113
+ return results;
114
+ }
115
+ /**
116
+ * Extract proposed actions from a side-effects result.
117
+ */
118
+ export function getProposedActions(results) {
119
+ return results.__proposed ?? [];
120
+ }
121
+ /**
122
+ * Return annotations for actions that actually executed successfully.
123
+ * Proposed or failed actions are intentionally excluded from stored history.
124
+ */
125
+ export function getExecutedAnnotations(results) {
126
+ return results
127
+ .filter(result => result.status === 'executed' && result.success && result.annotation)
128
+ .map(result => result.annotation);
129
+ }
130
+ /**
131
+ * Build the assistant message that should be stored in history.
132
+ * Uses the shared continuity builder so future turns see factual outcomes,
133
+ * while raw action annotations remain debug/display-only and are stripped
134
+ * before the model sees history.
135
+ */
136
+ export function buildAssistantHistoryMessage(message, results) {
137
+ const annotations = getExecutedAnnotations(results);
138
+ return buildAssistantContinuityMessage({
139
+ message,
140
+ actionAnnotations: annotations,
141
+ actionOutcomes: results.map(result => ({
142
+ action: result.action,
143
+ status: result.status,
144
+ success: result.success,
145
+ error: result.error,
146
+ annotation: result.annotation,
147
+ })),
148
+ });
149
+ }
150
+ /**
151
+ * Execute previously proposed actions after user confirmation.
152
+ * Takes the ProposedAction[] from `getProposedActions()` and runs the handlers.
153
+ */
154
+ export async function confirmActions(proposed, handlers) {
155
+ const results = [];
156
+ for (const { action, validatedParams } of proposed) {
157
+ const handler = handlers[action.name];
158
+ if (!handler) {
159
+ results.push({
160
+ action,
161
+ status: 'failed',
162
+ success: false,
163
+ error: `No handler registered for action: ${action.name}`,
164
+ });
165
+ continue;
166
+ }
167
+ try {
168
+ const result = await handler(validatedParams);
169
+ const changed = result.changed ?? result.success;
170
+ const annotations = buildAnnotations([{ name: action.name, params: action.params }]);
171
+ if (result.success && !changed) {
172
+ results.push({
173
+ action,
174
+ status: 'no_op',
175
+ success: true,
176
+ changed: false,
177
+ error: result.error,
178
+ annotation: annotations[0],
179
+ });
180
+ }
181
+ else {
182
+ results.push({
183
+ action,
184
+ status: result.success ? 'executed' : 'failed',
185
+ success: result.success,
186
+ changed,
187
+ error: result.error,
188
+ annotation: annotations[0],
189
+ });
190
+ }
191
+ }
192
+ catch (err) {
193
+ results.push({
194
+ action,
195
+ status: 'failed',
196
+ success: false,
197
+ changed: false,
198
+ error: `Handler error for ${action.name}: ${err instanceof Error ? err.message : String(err)}`,
199
+ });
200
+ }
201
+ }
202
+ return results;
203
+ }
204
+ /**
205
+ * Determine if an action should auto-execute based on confidence + approval mode.
206
+ *
207
+ * - 'low' always executes (memory saves, logging)
208
+ * - 'medium' follows mode ('yolo' = execute, 'propose' = propose)
209
+ * - 'high' always proposes (destructive operations)
210
+ */
211
+ function shouldAutoExecute(confidence, mode) {
212
+ if (confidence === 'low')
213
+ return true;
214
+ if (confidence === 'high')
215
+ return false;
216
+ // medium: follows mode
217
+ return mode === 'yolo';
218
+ }
219
+ /**
220
+ * Summarize side-effect execution results into an aggregate outcome.
221
+ * Useful for communicating "what actually happened" to the user.
222
+ *
223
+ * Status logic:
224
+ * - 'none': no actions attempted (empty input or all proposed)
225
+ * - 'succeeded': all executed actions changed state
226
+ * - 'partial': some changed, some failed or didn't change
227
+ * - 'failed': nothing changed and there were errors
228
+ * - 'no_op': handlers ran successfully but nothing changed
229
+ */
230
+ export function summarizeSideEffects(results) {
231
+ const executed = results.filter(r => r.status !== 'proposed');
232
+ if (executed.length === 0) {
233
+ return {
234
+ status: 'none',
235
+ summary: 'No actions executed.',
236
+ attemptedActions: [],
237
+ appliedActions: [],
238
+ errors: [],
239
+ };
240
+ }
241
+ const attemptedActions = executed.map(r => r.action.name);
242
+ const appliedActions = executed.filter(r => r.changed === true).map(r => r.action.name);
243
+ const errors = executed.filter(r => r.error).map(r => r.error);
244
+ const anyChanged = appliedActions.length > 0;
245
+ const anyFailed = executed.some(r => r.status === 'failed');
246
+ const anyNoOp = executed.some(r => r.status === 'no_op');
247
+ let status;
248
+ if (anyChanged && (anyFailed || anyNoOp)) {
249
+ status = 'partial';
250
+ }
251
+ else if (anyChanged) {
252
+ status = 'succeeded';
253
+ }
254
+ else if (anyFailed) {
255
+ status = 'failed';
256
+ }
257
+ else {
258
+ status = 'no_op';
259
+ }
260
+ const summary = status === 'succeeded'
261
+ ? `${appliedActions.length} action${appliedActions.length === 1 ? '' : 's'} applied.`
262
+ : status === 'partial'
263
+ ? `${appliedActions.length} of ${attemptedActions.length} actions applied.${errors.length > 0 ? ` Errors: ${errors.join('; ')}` : ''}`
264
+ : status === 'failed'
265
+ ? `No actions applied.${errors.length > 0 ? ` ${errors.join('; ')}` : ''}`
266
+ : status === 'no_op'
267
+ ? 'Actions ran but nothing changed.'
268
+ : 'No actions executed.';
269
+ return { status, summary, attemptedActions, appliedActions, errors };
270
+ }
271
+ //# sourceMappingURL=side-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"side-effects.js","sourceRoot":"","sources":["../../src/engine/side-effects.ts"],"names":[],"mappings":"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"}