@soleri/core 9.11.0 → 9.13.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 (234) hide show
  1. package/dist/adapters/types.d.ts +2 -0
  2. package/dist/adapters/types.d.ts.map +1 -1
  3. package/dist/brain/brain.d.ts +5 -1
  4. package/dist/brain/brain.d.ts.map +1 -1
  5. package/dist/brain/brain.js +97 -10
  6. package/dist/brain/brain.js.map +1 -1
  7. package/dist/dream/cron-manager.d.ts +10 -0
  8. package/dist/dream/cron-manager.d.ts.map +1 -0
  9. package/dist/dream/cron-manager.js +122 -0
  10. package/dist/dream/cron-manager.js.map +1 -0
  11. package/dist/dream/dream-engine.d.ts +34 -0
  12. package/dist/dream/dream-engine.d.ts.map +1 -0
  13. package/dist/dream/dream-engine.js +88 -0
  14. package/dist/dream/dream-engine.js.map +1 -0
  15. package/dist/dream/dream-ops.d.ts +8 -0
  16. package/dist/dream/dream-ops.d.ts.map +1 -0
  17. package/dist/dream/dream-ops.js +49 -0
  18. package/dist/dream/dream-ops.js.map +1 -0
  19. package/dist/dream/index.d.ts +7 -0
  20. package/dist/dream/index.d.ts.map +1 -0
  21. package/dist/dream/index.js +5 -0
  22. package/dist/dream/index.js.map +1 -0
  23. package/dist/dream/schema.d.ts +3 -0
  24. package/dist/dream/schema.d.ts.map +1 -0
  25. package/dist/dream/schema.js +16 -0
  26. package/dist/dream/schema.js.map +1 -0
  27. package/dist/embeddings/index.d.ts +5 -0
  28. package/dist/embeddings/index.d.ts.map +1 -0
  29. package/dist/embeddings/index.js +3 -0
  30. package/dist/embeddings/index.js.map +1 -0
  31. package/dist/embeddings/openai-provider.d.ts +31 -0
  32. package/dist/embeddings/openai-provider.d.ts.map +1 -0
  33. package/dist/embeddings/openai-provider.js +120 -0
  34. package/dist/embeddings/openai-provider.js.map +1 -0
  35. package/dist/embeddings/pipeline.d.ts +36 -0
  36. package/dist/embeddings/pipeline.d.ts.map +1 -0
  37. package/dist/embeddings/pipeline.js +78 -0
  38. package/dist/embeddings/pipeline.js.map +1 -0
  39. package/dist/embeddings/types.d.ts +62 -0
  40. package/dist/embeddings/types.d.ts.map +1 -0
  41. package/dist/embeddings/types.js +3 -0
  42. package/dist/embeddings/types.js.map +1 -0
  43. package/dist/engine/bin/soleri-engine.js +4 -1
  44. package/dist/engine/bin/soleri-engine.js.map +1 -1
  45. package/dist/engine/module-manifest.d.ts.map +1 -1
  46. package/dist/engine/module-manifest.js +20 -0
  47. package/dist/engine/module-manifest.js.map +1 -1
  48. package/dist/engine/register-engine.d.ts.map +1 -1
  49. package/dist/engine/register-engine.js +12 -0
  50. package/dist/engine/register-engine.js.map +1 -1
  51. package/dist/flows/chain-types.d.ts +8 -8
  52. package/dist/flows/dispatch-registry.d.ts +15 -1
  53. package/dist/flows/dispatch-registry.d.ts.map +1 -1
  54. package/dist/flows/dispatch-registry.js +28 -1
  55. package/dist/flows/dispatch-registry.js.map +1 -1
  56. package/dist/flows/executor.d.ts +20 -2
  57. package/dist/flows/executor.d.ts.map +1 -1
  58. package/dist/flows/executor.js +79 -1
  59. package/dist/flows/executor.js.map +1 -1
  60. package/dist/flows/index.d.ts +2 -1
  61. package/dist/flows/index.d.ts.map +1 -1
  62. package/dist/flows/index.js.map +1 -1
  63. package/dist/flows/types.d.ts +43 -21
  64. package/dist/flows/types.d.ts.map +1 -1
  65. package/dist/index.d.ts +6 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +4 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/persona/defaults.d.ts +8 -0
  70. package/dist/persona/defaults.d.ts.map +1 -1
  71. package/dist/persona/defaults.js +49 -0
  72. package/dist/persona/defaults.js.map +1 -1
  73. package/dist/plugins/types.d.ts +31 -31
  74. package/dist/runtime/admin-ops.d.ts.map +1 -1
  75. package/dist/runtime/admin-ops.js +15 -0
  76. package/dist/runtime/admin-ops.js.map +1 -1
  77. package/dist/runtime/admin-setup-ops.js +2 -2
  78. package/dist/runtime/admin-setup-ops.js.map +1 -1
  79. package/dist/runtime/embedding-ops.d.ts +12 -0
  80. package/dist/runtime/embedding-ops.d.ts.map +1 -0
  81. package/dist/runtime/embedding-ops.js +96 -0
  82. package/dist/runtime/embedding-ops.js.map +1 -0
  83. package/dist/runtime/facades/embedding-facade.d.ts +7 -0
  84. package/dist/runtime/facades/embedding-facade.d.ts.map +1 -0
  85. package/dist/runtime/facades/embedding-facade.js +8 -0
  86. package/dist/runtime/facades/embedding-facade.js.map +1 -0
  87. package/dist/runtime/facades/index.d.ts.map +1 -1
  88. package/dist/runtime/facades/index.js +12 -0
  89. package/dist/runtime/facades/index.js.map +1 -1
  90. package/dist/runtime/facades/orchestrate-facade.d.ts.map +1 -1
  91. package/dist/runtime/facades/orchestrate-facade.js +120 -0
  92. package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
  93. package/dist/runtime/feature-flags.d.ts.map +1 -1
  94. package/dist/runtime/feature-flags.js +4 -0
  95. package/dist/runtime/feature-flags.js.map +1 -1
  96. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  97. package/dist/runtime/orchestrate-ops.js +140 -9
  98. package/dist/runtime/orchestrate-ops.js.map +1 -1
  99. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  100. package/dist/runtime/planning-extra-ops.js +51 -0
  101. package/dist/runtime/planning-extra-ops.js.map +1 -1
  102. package/dist/runtime/preflight.d.ts +32 -0
  103. package/dist/runtime/preflight.d.ts.map +1 -0
  104. package/dist/runtime/preflight.js +29 -0
  105. package/dist/runtime/preflight.js.map +1 -0
  106. package/dist/runtime/runtime.d.ts.map +1 -1
  107. package/dist/runtime/runtime.js +33 -2
  108. package/dist/runtime/runtime.js.map +1 -1
  109. package/dist/runtime/types.d.ts +27 -0
  110. package/dist/runtime/types.d.ts.map +1 -1
  111. package/dist/skills/step-tracker.d.ts +39 -0
  112. package/dist/skills/step-tracker.d.ts.map +1 -0
  113. package/dist/skills/step-tracker.js +105 -0
  114. package/dist/skills/step-tracker.js.map +1 -0
  115. package/dist/skills/sync-skills.d.ts +3 -2
  116. package/dist/skills/sync-skills.d.ts.map +1 -1
  117. package/dist/skills/sync-skills.js +42 -8
  118. package/dist/skills/sync-skills.js.map +1 -1
  119. package/dist/subagent/dispatcher.d.ts +4 -3
  120. package/dist/subagent/dispatcher.d.ts.map +1 -1
  121. package/dist/subagent/dispatcher.js +57 -35
  122. package/dist/subagent/dispatcher.js.map +1 -1
  123. package/dist/subagent/index.d.ts +1 -0
  124. package/dist/subagent/index.d.ts.map +1 -1
  125. package/dist/subagent/index.js.map +1 -1
  126. package/dist/subagent/orphan-reaper.d.ts +51 -4
  127. package/dist/subagent/orphan-reaper.d.ts.map +1 -1
  128. package/dist/subagent/orphan-reaper.js +103 -3
  129. package/dist/subagent/orphan-reaper.js.map +1 -1
  130. package/dist/subagent/types.d.ts +7 -0
  131. package/dist/subagent/types.d.ts.map +1 -1
  132. package/dist/subagent/workspace-resolver.d.ts +2 -0
  133. package/dist/subagent/workspace-resolver.d.ts.map +1 -1
  134. package/dist/subagent/workspace-resolver.js +3 -1
  135. package/dist/subagent/workspace-resolver.js.map +1 -1
  136. package/dist/vault/vault-entries.d.ts +18 -0
  137. package/dist/vault/vault-entries.d.ts.map +1 -1
  138. package/dist/vault/vault-entries.js +73 -0
  139. package/dist/vault/vault-entries.js.map +1 -1
  140. package/dist/vault/vault-manager.d.ts.map +1 -1
  141. package/dist/vault/vault-manager.js +1 -0
  142. package/dist/vault/vault-manager.js.map +1 -1
  143. package/dist/vault/vault-schema.d.ts.map +1 -1
  144. package/dist/vault/vault-schema.js +14 -0
  145. package/dist/vault/vault-schema.js.map +1 -1
  146. package/dist/vault/vault.d.ts +1 -0
  147. package/dist/vault/vault.d.ts.map +1 -1
  148. package/dist/vault/vault.js.map +1 -1
  149. package/package.json +3 -5
  150. package/src/__tests__/cron-manager.test.ts +132 -0
  151. package/src/__tests__/deviation-detection.test.ts +234 -0
  152. package/src/__tests__/embeddings.test.ts +536 -0
  153. package/src/__tests__/preflight.test.ts +97 -0
  154. package/src/__tests__/step-persistence.test.ts +324 -0
  155. package/src/__tests__/step-tracker.test.ts +260 -0
  156. package/src/__tests__/subagent/dispatcher.test.ts +122 -4
  157. package/src/__tests__/subagent/orphan-reaper.test.ts +148 -12
  158. package/src/__tests__/subagent/process-lifecycle.test.ts +422 -0
  159. package/src/__tests__/subagent/workspace-resolver.test.ts +6 -1
  160. package/src/adapters/types.ts +2 -0
  161. package/src/brain/brain.ts +117 -9
  162. package/src/dream/cron-manager.ts +137 -0
  163. package/src/dream/dream-engine.ts +119 -0
  164. package/src/dream/dream-ops.ts +56 -0
  165. package/src/dream/dream.test.ts +182 -0
  166. package/src/dream/index.ts +6 -0
  167. package/src/dream/schema.ts +17 -0
  168. package/src/embeddings/openai-provider.ts +158 -0
  169. package/src/embeddings/pipeline.ts +126 -0
  170. package/src/embeddings/types.ts +67 -0
  171. package/src/engine/bin/soleri-engine.ts +4 -1
  172. package/src/engine/module-manifest.test.ts +4 -4
  173. package/src/engine/module-manifest.ts +20 -0
  174. package/src/engine/register-engine.ts +12 -0
  175. package/src/flows/dispatch-registry.ts +44 -1
  176. package/src/flows/executor.ts +93 -2
  177. package/src/flows/index.ts +2 -0
  178. package/src/flows/types.ts +39 -1
  179. package/src/index.ts +12 -0
  180. package/src/persona/defaults.test.ts +39 -1
  181. package/src/persona/defaults.ts +65 -0
  182. package/src/planning/goal-ancestry.test.ts +3 -5
  183. package/src/planning/planner.test.ts +2 -3
  184. package/src/runtime/admin-ops.test.ts +2 -2
  185. package/src/runtime/admin-ops.ts +17 -0
  186. package/src/runtime/admin-setup-ops.ts +2 -2
  187. package/src/runtime/embedding-ops.ts +116 -0
  188. package/src/runtime/facades/admin-facade.test.ts +31 -0
  189. package/src/runtime/facades/embedding-facade.ts +11 -0
  190. package/src/runtime/facades/index.ts +12 -0
  191. package/src/runtime/facades/orchestrate-facade.test.ts +16 -0
  192. package/src/runtime/facades/orchestrate-facade.ts +146 -0
  193. package/src/runtime/feature-flags.ts +4 -0
  194. package/src/runtime/orchestrate-ops.test.ts +131 -0
  195. package/src/runtime/orchestrate-ops.ts +158 -10
  196. package/src/runtime/planning-extra-ops.ts +77 -0
  197. package/src/runtime/preflight.ts +53 -0
  198. package/src/runtime/runtime.ts +41 -2
  199. package/src/runtime/types.ts +20 -0
  200. package/src/skills/__tests__/sync-skills.test.ts +132 -0
  201. package/src/skills/step-tracker.ts +162 -0
  202. package/src/skills/sync-skills.ts +54 -9
  203. package/src/subagent/dispatcher.ts +62 -39
  204. package/src/subagent/index.ts +1 -0
  205. package/src/subagent/orphan-reaper.test.ts +135 -0
  206. package/src/subagent/orphan-reaper.ts +130 -7
  207. package/src/subagent/types.ts +10 -0
  208. package/src/subagent/workspace-resolver.ts +3 -1
  209. package/src/vault/vault-entries.ts +112 -0
  210. package/src/vault/vault-manager.ts +1 -0
  211. package/src/vault/vault-scaling.test.ts +3 -2
  212. package/src/vault/vault-schema.ts +15 -0
  213. package/src/vault/vault.ts +1 -0
  214. package/vitest.config.ts +2 -1
  215. package/dist/brain/strength-scorer.d.ts +0 -31
  216. package/dist/brain/strength-scorer.d.ts.map +0 -1
  217. package/dist/brain/strength-scorer.js +0 -264
  218. package/dist/brain/strength-scorer.js.map +0 -1
  219. package/dist/engine/index.d.ts +0 -21
  220. package/dist/engine/index.d.ts.map +0 -1
  221. package/dist/engine/index.js +0 -18
  222. package/dist/engine/index.js.map +0 -1
  223. package/dist/hooks/index.d.ts +0 -2
  224. package/dist/hooks/index.d.ts.map +0 -1
  225. package/dist/hooks/index.js +0 -2
  226. package/dist/hooks/index.js.map +0 -1
  227. package/dist/persona/index.d.ts +0 -5
  228. package/dist/persona/index.d.ts.map +0 -1
  229. package/dist/persona/index.js +0 -4
  230. package/dist/persona/index.js.map +0 -1
  231. package/dist/vault/vault-interfaces.d.ts +0 -153
  232. package/dist/vault/vault-interfaces.d.ts.map +0 -1
  233. package/dist/vault/vault-interfaces.js +0 -2
  234. package/dist/vault/vault-interfaces.js.map +0 -1
@@ -0,0 +1,234 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { createDispatcher } from '../flows/dispatch-registry.js';
3
+ import type { ActivePlanRef } from '../flows/dispatch-registry.js';
4
+ import type { FacadeConfig } from '../facades/types.js';
5
+ import { applyWorkflowOverride } from '../runtime/orchestrate-ops.js';
6
+ import type { OrchestrationPlan } from '../flows/types.js';
7
+ import type { WorkflowOverride } from '../workflows/workflow-loader.js';
8
+
9
+ // ---------------------------------------------------------------------------
10
+ // Helpers
11
+ // ---------------------------------------------------------------------------
12
+
13
+ function makeFacade(agentId: string, facadeName: string, opNames: string[]): FacadeConfig {
14
+ return {
15
+ name: `${agentId}_${facadeName}`,
16
+ description: `Test facade: ${facadeName}`,
17
+ ops: opNames.map((name) => ({
18
+ name,
19
+ description: `op ${name}`,
20
+ auth: 'read' as const,
21
+ handler: async () => ({ ok: true }),
22
+ })),
23
+ };
24
+ }
25
+
26
+ function makePlan(steps: OrchestrationPlan['steps']): OrchestrationPlan {
27
+ return {
28
+ planId: 'test-plan',
29
+ intent: 'BUILD',
30
+ flowId: 'test-flow',
31
+ steps,
32
+ skipped: [],
33
+ epilogue: [],
34
+ warnings: [],
35
+ summary: 'Test plan',
36
+ estimatedTools: 0,
37
+ context: {
38
+ intent: 'BUILD',
39
+ probes: {
40
+ vault: true,
41
+ brain: true,
42
+ designSystem: false,
43
+ sessionStore: false,
44
+ projectRules: false,
45
+ active: true,
46
+ },
47
+ entities: { components: [], actions: [] },
48
+ projectPath: '/tmp/test',
49
+ },
50
+ };
51
+ }
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // Tests
55
+ // ---------------------------------------------------------------------------
56
+
57
+ describe('deviation-detection', () => {
58
+ const agentId = 'test';
59
+
60
+ describe('createDispatcher with activePlan — allowed tool produces no deviation', () => {
61
+ it('does not record a deviation when the tool is in allowedTools', async () => {
62
+ const facades = [makeFacade(agentId, 'vault', ['search'])];
63
+ const activePlan: ActivePlanRef = {
64
+ steps: [{ id: 'step-1', allowedTools: ['test_vault_search'], status: 'running' }],
65
+ deviations: [],
66
+ };
67
+
68
+ const dispatch = createDispatcher(agentId, facades, activePlan);
69
+ await dispatch('test_vault_search', {});
70
+
71
+ expect(activePlan.deviations).toHaveLength(0);
72
+ });
73
+
74
+ it('does not record a deviation when the op name is in allowedTools', async () => {
75
+ const facades = [makeFacade(agentId, 'vault', ['search'])];
76
+ const activePlan: ActivePlanRef = {
77
+ steps: [{ id: 'step-1', allowedTools: ['search'], status: 'running' }],
78
+ deviations: [],
79
+ };
80
+
81
+ const dispatch = createDispatcher(agentId, facades, activePlan);
82
+ await dispatch('test_vault_search', {});
83
+
84
+ expect(activePlan.deviations).toHaveLength(0);
85
+ });
86
+ });
87
+
88
+ describe('createDispatcher with activePlan — disallowed tool adds deviation', () => {
89
+ it('records a deviation when the tool is not in allowedTools', async () => {
90
+ const facades = [
91
+ makeFacade(agentId, 'vault', ['search']),
92
+ makeFacade(agentId, 'brain', ['recommend']),
93
+ ];
94
+ const activePlan: ActivePlanRef = {
95
+ steps: [{ id: 'step-1', allowedTools: ['test_brain_recommend'], status: 'running' }],
96
+ };
97
+
98
+ const dispatch = createDispatcher(agentId, facades, activePlan);
99
+ await dispatch('test_vault_search', {});
100
+
101
+ expect(activePlan.deviations).toHaveLength(1);
102
+ expect(activePlan.deviations![0]).toMatchObject({
103
+ stepId: 'step-1',
104
+ expectedTools: ['test_brain_recommend'],
105
+ actualTool: 'test_vault_search',
106
+ });
107
+ expect(activePlan.deviations![0].timestamp).toBeTruthy();
108
+ });
109
+ });
110
+
111
+ describe('createDispatcher without activePlan — backward compatibility', () => {
112
+ it('dispatches normally without deviation tracking', async () => {
113
+ const facades = [makeFacade(agentId, 'vault', ['search'])];
114
+
115
+ const dispatch = createDispatcher(agentId, facades);
116
+ const result = await dispatch('test_vault_search', {});
117
+
118
+ expect(result.status).toBe('ok');
119
+ });
120
+ });
121
+
122
+ describe('applyWorkflowOverride sets allowedTools on steps with tools', () => {
123
+ it('populates allowedTools from the merged tool set', () => {
124
+ const plan = makePlan([
125
+ {
126
+ id: 'build-1',
127
+ name: 'Build step',
128
+ tools: ['tool_a'],
129
+ parallel: false,
130
+ requires: [],
131
+ status: 'pending',
132
+ },
133
+ {
134
+ id: 'verify-1',
135
+ name: 'Verify step',
136
+ tools: [],
137
+ parallel: false,
138
+ requires: [],
139
+ status: 'pending',
140
+ },
141
+ ]);
142
+
143
+ const override: WorkflowOverride = {
144
+ name: 'test-workflow',
145
+ gates: [],
146
+ tools: ['tool_b'],
147
+ };
148
+
149
+ applyWorkflowOverride(plan, override);
150
+
151
+ // Step with tools should have allowedTools
152
+ expect(plan.steps[0].allowedTools).toEqual(expect.arrayContaining(['tool_a', 'tool_b']));
153
+ expect(plan.steps[0].allowedTools).toHaveLength(2);
154
+
155
+ // Step that started empty but got tools merged in should also have allowedTools
156
+ expect(plan.steps[1].allowedTools).toEqual(['tool_b']);
157
+ });
158
+
159
+ it('does not set allowedTools on steps that remain tool-less', () => {
160
+ const plan = makePlan([
161
+ {
162
+ id: 'empty-1',
163
+ name: 'Empty step',
164
+ tools: [],
165
+ parallel: false,
166
+ requires: [],
167
+ status: 'pending',
168
+ },
169
+ ]);
170
+
171
+ const override: WorkflowOverride = {
172
+ name: 'test-workflow',
173
+ gates: [],
174
+ tools: [],
175
+ };
176
+
177
+ applyWorkflowOverride(plan, override);
178
+
179
+ expect(plan.steps[0].allowedTools).toBeUndefined();
180
+ });
181
+ });
182
+
183
+ describe('deviations summary groups correctly by step', () => {
184
+ it('groups multiple deviations by stepId', () => {
185
+ const deviations = [
186
+ {
187
+ stepId: 'step-1',
188
+ expectedTools: ['tool_a'],
189
+ actualTool: 'tool_x',
190
+ timestamp: '2026-01-01T00:00:00.000Z',
191
+ },
192
+ {
193
+ stepId: 'step-1',
194
+ expectedTools: ['tool_a'],
195
+ actualTool: 'tool_y',
196
+ timestamp: '2026-01-01T00:00:01.000Z',
197
+ },
198
+ {
199
+ stepId: 'step-2',
200
+ expectedTools: ['tool_b'],
201
+ actualTool: 'tool_x',
202
+ timestamp: '2026-01-01T00:00:02.000Z',
203
+ },
204
+ ];
205
+
206
+ // Replicate the grouping logic from plan_reconcile
207
+ const byStep = Object.entries(
208
+ deviations.reduce(
209
+ (acc, d) => {
210
+ (acc[d.stepId] = acc[d.stepId] || []).push(d);
211
+ return acc;
212
+ },
213
+ {} as Record<string, typeof deviations>,
214
+ ),
215
+ ).map(([stepId, devs]) => ({
216
+ stepId,
217
+ deviationCount: devs.length,
218
+ unexpectedTools: [...new Set(devs.map((d) => d.actualTool))],
219
+ }));
220
+
221
+ expect(byStep).toHaveLength(2);
222
+ expect(byStep[0]).toEqual({
223
+ stepId: 'step-1',
224
+ deviationCount: 2,
225
+ unexpectedTools: ['tool_x', 'tool_y'],
226
+ });
227
+ expect(byStep[1]).toEqual({
228
+ stepId: 'step-2',
229
+ deviationCount: 1,
230
+ unexpectedTools: ['tool_x'],
231
+ });
232
+ });
233
+ });
234
+ });