@soleri/core 2.0.2 → 2.4.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 (226) hide show
  1. package/dist/brain/brain.d.ts +14 -50
  2. package/dist/brain/brain.d.ts.map +1 -1
  3. package/dist/brain/brain.js +207 -16
  4. package/dist/brain/brain.js.map +1 -1
  5. package/dist/brain/intelligence.d.ts +86 -0
  6. package/dist/brain/intelligence.d.ts.map +1 -0
  7. package/dist/brain/intelligence.js +771 -0
  8. package/dist/brain/intelligence.js.map +1 -0
  9. package/dist/brain/types.d.ts +197 -0
  10. package/dist/brain/types.d.ts.map +1 -0
  11. package/dist/brain/types.js +2 -0
  12. package/dist/brain/types.js.map +1 -0
  13. package/dist/cognee/client.d.ts +35 -0
  14. package/dist/cognee/client.d.ts.map +1 -0
  15. package/dist/cognee/client.js +291 -0
  16. package/dist/cognee/client.js.map +1 -0
  17. package/dist/cognee/types.d.ts +46 -0
  18. package/dist/cognee/types.d.ts.map +1 -0
  19. package/dist/cognee/types.js +3 -0
  20. package/dist/cognee/types.js.map +1 -0
  21. package/dist/control/identity-manager.d.ts +22 -0
  22. package/dist/control/identity-manager.d.ts.map +1 -0
  23. package/dist/control/identity-manager.js +233 -0
  24. package/dist/control/identity-manager.js.map +1 -0
  25. package/dist/control/intent-router.d.ts +32 -0
  26. package/dist/control/intent-router.d.ts.map +1 -0
  27. package/dist/control/intent-router.js +242 -0
  28. package/dist/control/intent-router.js.map +1 -0
  29. package/dist/control/types.d.ts +68 -0
  30. package/dist/control/types.d.ts.map +1 -0
  31. package/dist/control/types.js +9 -0
  32. package/dist/control/types.js.map +1 -0
  33. package/dist/curator/curator.d.ts +29 -0
  34. package/dist/curator/curator.d.ts.map +1 -1
  35. package/dist/curator/curator.js +142 -5
  36. package/dist/curator/curator.js.map +1 -1
  37. package/dist/facades/types.d.ts +1 -1
  38. package/dist/governance/governance.d.ts +42 -0
  39. package/dist/governance/governance.d.ts.map +1 -0
  40. package/dist/governance/governance.js +488 -0
  41. package/dist/governance/governance.js.map +1 -0
  42. package/dist/governance/index.d.ts +3 -0
  43. package/dist/governance/index.d.ts.map +1 -0
  44. package/dist/governance/index.js +2 -0
  45. package/dist/governance/index.js.map +1 -0
  46. package/dist/governance/types.d.ts +102 -0
  47. package/dist/governance/types.d.ts.map +1 -0
  48. package/dist/governance/types.js +3 -0
  49. package/dist/governance/types.js.map +1 -0
  50. package/dist/index.d.ts +35 -3
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +32 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/llm/llm-client.d.ts.map +1 -1
  55. package/dist/llm/llm-client.js +9 -2
  56. package/dist/llm/llm-client.js.map +1 -1
  57. package/dist/logging/logger.d.ts +37 -0
  58. package/dist/logging/logger.d.ts.map +1 -0
  59. package/dist/logging/logger.js +145 -0
  60. package/dist/logging/logger.js.map +1 -0
  61. package/dist/logging/types.d.ts +19 -0
  62. package/dist/logging/types.d.ts.map +1 -0
  63. package/dist/logging/types.js +2 -0
  64. package/dist/logging/types.js.map +1 -0
  65. package/dist/loop/loop-manager.d.ts +49 -0
  66. package/dist/loop/loop-manager.d.ts.map +1 -0
  67. package/dist/loop/loop-manager.js +105 -0
  68. package/dist/loop/loop-manager.js.map +1 -0
  69. package/dist/loop/types.d.ts +35 -0
  70. package/dist/loop/types.d.ts.map +1 -0
  71. package/dist/loop/types.js +8 -0
  72. package/dist/loop/types.js.map +1 -0
  73. package/dist/planning/gap-analysis.d.ts +29 -0
  74. package/dist/planning/gap-analysis.d.ts.map +1 -0
  75. package/dist/planning/gap-analysis.js +265 -0
  76. package/dist/planning/gap-analysis.js.map +1 -0
  77. package/dist/planning/gap-types.d.ts +29 -0
  78. package/dist/planning/gap-types.d.ts.map +1 -0
  79. package/dist/planning/gap-types.js +28 -0
  80. package/dist/planning/gap-types.js.map +1 -0
  81. package/dist/planning/planner.d.ts +150 -1
  82. package/dist/planning/planner.d.ts.map +1 -1
  83. package/dist/planning/planner.js +365 -2
  84. package/dist/planning/planner.js.map +1 -1
  85. package/dist/project/project-registry.d.ts +79 -0
  86. package/dist/project/project-registry.d.ts.map +1 -0
  87. package/dist/project/project-registry.js +276 -0
  88. package/dist/project/project-registry.js.map +1 -0
  89. package/dist/project/types.d.ts +28 -0
  90. package/dist/project/types.d.ts.map +1 -0
  91. package/dist/project/types.js +5 -0
  92. package/dist/project/types.js.map +1 -0
  93. package/dist/runtime/admin-extra-ops.d.ts +13 -0
  94. package/dist/runtime/admin-extra-ops.d.ts.map +1 -0
  95. package/dist/runtime/admin-extra-ops.js +284 -0
  96. package/dist/runtime/admin-extra-ops.js.map +1 -0
  97. package/dist/runtime/admin-ops.d.ts +15 -0
  98. package/dist/runtime/admin-ops.d.ts.map +1 -0
  99. package/dist/runtime/admin-ops.js +322 -0
  100. package/dist/runtime/admin-ops.js.map +1 -0
  101. package/dist/runtime/capture-ops.d.ts +15 -0
  102. package/dist/runtime/capture-ops.d.ts.map +1 -0
  103. package/dist/runtime/capture-ops.js +345 -0
  104. package/dist/runtime/capture-ops.js.map +1 -0
  105. package/dist/runtime/core-ops.d.ts +7 -3
  106. package/dist/runtime/core-ops.d.ts.map +1 -1
  107. package/dist/runtime/core-ops.js +646 -15
  108. package/dist/runtime/core-ops.js.map +1 -1
  109. package/dist/runtime/curator-extra-ops.d.ts +9 -0
  110. package/dist/runtime/curator-extra-ops.d.ts.map +1 -0
  111. package/dist/runtime/curator-extra-ops.js +59 -0
  112. package/dist/runtime/curator-extra-ops.js.map +1 -0
  113. package/dist/runtime/domain-ops.d.ts.map +1 -1
  114. package/dist/runtime/domain-ops.js +59 -13
  115. package/dist/runtime/domain-ops.js.map +1 -1
  116. package/dist/runtime/grading-ops.d.ts +14 -0
  117. package/dist/runtime/grading-ops.d.ts.map +1 -0
  118. package/dist/runtime/grading-ops.js +105 -0
  119. package/dist/runtime/grading-ops.js.map +1 -0
  120. package/dist/runtime/loop-ops.d.ts +13 -0
  121. package/dist/runtime/loop-ops.d.ts.map +1 -0
  122. package/dist/runtime/loop-ops.js +179 -0
  123. package/dist/runtime/loop-ops.js.map +1 -0
  124. package/dist/runtime/memory-cross-project-ops.d.ts +12 -0
  125. package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -0
  126. package/dist/runtime/memory-cross-project-ops.js +165 -0
  127. package/dist/runtime/memory-cross-project-ops.js.map +1 -0
  128. package/dist/runtime/memory-extra-ops.d.ts +13 -0
  129. package/dist/runtime/memory-extra-ops.d.ts.map +1 -0
  130. package/dist/runtime/memory-extra-ops.js +173 -0
  131. package/dist/runtime/memory-extra-ops.js.map +1 -0
  132. package/dist/runtime/orchestrate-ops.d.ts +17 -0
  133. package/dist/runtime/orchestrate-ops.d.ts.map +1 -0
  134. package/dist/runtime/orchestrate-ops.js +240 -0
  135. package/dist/runtime/orchestrate-ops.js.map +1 -0
  136. package/dist/runtime/planning-extra-ops.d.ts +17 -0
  137. package/dist/runtime/planning-extra-ops.d.ts.map +1 -0
  138. package/dist/runtime/planning-extra-ops.js +300 -0
  139. package/dist/runtime/planning-extra-ops.js.map +1 -0
  140. package/dist/runtime/project-ops.d.ts +15 -0
  141. package/dist/runtime/project-ops.d.ts.map +1 -0
  142. package/dist/runtime/project-ops.js +181 -0
  143. package/dist/runtime/project-ops.js.map +1 -0
  144. package/dist/runtime/runtime.d.ts.map +1 -1
  145. package/dist/runtime/runtime.js +48 -1
  146. package/dist/runtime/runtime.js.map +1 -1
  147. package/dist/runtime/types.d.ts +23 -0
  148. package/dist/runtime/types.d.ts.map +1 -1
  149. package/dist/runtime/vault-extra-ops.d.ts +9 -0
  150. package/dist/runtime/vault-extra-ops.d.ts.map +1 -0
  151. package/dist/runtime/vault-extra-ops.js +195 -0
  152. package/dist/runtime/vault-extra-ops.js.map +1 -0
  153. package/dist/telemetry/telemetry.d.ts +48 -0
  154. package/dist/telemetry/telemetry.d.ts.map +1 -0
  155. package/dist/telemetry/telemetry.js +87 -0
  156. package/dist/telemetry/telemetry.js.map +1 -0
  157. package/dist/vault/vault.d.ts +94 -0
  158. package/dist/vault/vault.d.ts.map +1 -1
  159. package/dist/vault/vault.js +340 -1
  160. package/dist/vault/vault.js.map +1 -1
  161. package/package.json +1 -1
  162. package/src/__tests__/admin-extra-ops.test.ts +420 -0
  163. package/src/__tests__/admin-ops.test.ts +271 -0
  164. package/src/__tests__/brain-intelligence.test.ts +828 -0
  165. package/src/__tests__/brain.test.ts +396 -27
  166. package/src/__tests__/capture-ops.test.ts +509 -0
  167. package/src/__tests__/cognee-client.test.ts +524 -0
  168. package/src/__tests__/core-ops.test.ts +341 -49
  169. package/src/__tests__/curator-extra-ops.test.ts +359 -0
  170. package/src/__tests__/curator.test.ts +126 -31
  171. package/src/__tests__/domain-ops.test.ts +111 -9
  172. package/src/__tests__/governance.test.ts +522 -0
  173. package/src/__tests__/grading-ops.test.ts +340 -0
  174. package/src/__tests__/identity-manager.test.ts +243 -0
  175. package/src/__tests__/intent-router.test.ts +222 -0
  176. package/src/__tests__/logger.test.ts +200 -0
  177. package/src/__tests__/loop-ops.test.ts +398 -0
  178. package/src/__tests__/memory-cross-project-ops.test.ts +246 -0
  179. package/src/__tests__/memory-extra-ops.test.ts +352 -0
  180. package/src/__tests__/orchestrate-ops.test.ts +284 -0
  181. package/src/__tests__/planner.test.ts +331 -0
  182. package/src/__tests__/planning-extra-ops.test.ts +548 -0
  183. package/src/__tests__/project-ops.test.ts +367 -0
  184. package/src/__tests__/runtime.test.ts +13 -11
  185. package/src/__tests__/vault-extra-ops.test.ts +407 -0
  186. package/src/brain/brain.ts +308 -72
  187. package/src/brain/intelligence.ts +1230 -0
  188. package/src/brain/types.ts +214 -0
  189. package/src/cognee/client.ts +352 -0
  190. package/src/cognee/types.ts +62 -0
  191. package/src/control/identity-manager.ts +354 -0
  192. package/src/control/intent-router.ts +326 -0
  193. package/src/control/types.ts +102 -0
  194. package/src/curator/curator.ts +265 -15
  195. package/src/governance/governance.ts +698 -0
  196. package/src/governance/index.ts +18 -0
  197. package/src/governance/types.ts +111 -0
  198. package/src/index.ts +128 -3
  199. package/src/llm/llm-client.ts +18 -24
  200. package/src/logging/logger.ts +154 -0
  201. package/src/logging/types.ts +21 -0
  202. package/src/loop/loop-manager.ts +130 -0
  203. package/src/loop/types.ts +44 -0
  204. package/src/planning/gap-analysis.ts +506 -0
  205. package/src/planning/gap-types.ts +58 -0
  206. package/src/planning/planner.ts +478 -2
  207. package/src/project/project-registry.ts +358 -0
  208. package/src/project/types.ts +31 -0
  209. package/src/runtime/admin-extra-ops.ts +307 -0
  210. package/src/runtime/admin-ops.ts +329 -0
  211. package/src/runtime/capture-ops.ts +385 -0
  212. package/src/runtime/core-ops.ts +747 -26
  213. package/src/runtime/curator-extra-ops.ts +71 -0
  214. package/src/runtime/domain-ops.ts +65 -13
  215. package/src/runtime/grading-ops.ts +121 -0
  216. package/src/runtime/loop-ops.ts +194 -0
  217. package/src/runtime/memory-cross-project-ops.ts +192 -0
  218. package/src/runtime/memory-extra-ops.ts +186 -0
  219. package/src/runtime/orchestrate-ops.ts +272 -0
  220. package/src/runtime/planning-extra-ops.ts +327 -0
  221. package/src/runtime/project-ops.ts +196 -0
  222. package/src/runtime/runtime.ts +54 -1
  223. package/src/runtime/types.ts +23 -0
  224. package/src/runtime/vault-extra-ops.ts +225 -0
  225. package/src/telemetry/telemetry.ts +118 -0
  226. package/src/vault/vault.ts +412 -1
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Orchestration operations — compose planning + brain + vault into high-level workflows.
3
+ *
4
+ * These ops are convenience wrappers that sequence multiple module calls:
5
+ * - orchestrate_plan: brain-informed plan creation
6
+ * - orchestrate_execute: start plan + brain session together
7
+ * - orchestrate_complete: finish plan + brain session + extract knowledge
8
+ * - orchestrate_status: combined status across all modules
9
+ * - orchestrate_quick_capture: one-call knowledge capture without full planning
10
+ */
11
+ import { z } from 'zod';
12
+ /**
13
+ * Create the 5 orchestration operations for an agent runtime.
14
+ */
15
+ export function createOrchestrateOps(runtime) {
16
+ const { planner, brainIntelligence, vault } = runtime;
17
+ return [
18
+ // ─── orchestrate_plan ─────────────────────────────────────────
19
+ {
20
+ name: 'orchestrate_plan',
21
+ description: 'Create a brain-informed plan with recommendations from pattern strengths. ' +
22
+ 'Fetches relevant brain recommendations for the domain/task, then creates a plan ' +
23
+ 'with those recommendations injected as decisions.',
24
+ auth: 'write',
25
+ schema: z.object({
26
+ objective: z.string().describe('What the plan aims to achieve'),
27
+ scope: z.string().describe('Boundaries of the work'),
28
+ domain: z.string().optional().describe('Domain for brain recommendations (e.g. "component", "styling")'),
29
+ tasks: z
30
+ .array(z.object({ title: z.string(), description: z.string() }))
31
+ .optional()
32
+ .describe('Optional pre-defined tasks'),
33
+ }),
34
+ handler: async (params) => {
35
+ const objective = params.objective;
36
+ const scope = params.scope;
37
+ const domain = params.domain;
38
+ const tasks = params.tasks ?? [];
39
+ // Get brain recommendations — graceful degradation if no data
40
+ let recommendations = [];
41
+ try {
42
+ const raw = brainIntelligence.recommend({
43
+ domain,
44
+ task: objective,
45
+ limit: 5,
46
+ });
47
+ recommendations = raw.map((r) => ({
48
+ pattern: r.pattern,
49
+ strength: r.strength,
50
+ }));
51
+ }
52
+ catch {
53
+ // Brain has no data yet — proceed without recommendations
54
+ }
55
+ // Build decisions from recommendations
56
+ const decisions = recommendations.map((r) => `Brain pattern: ${r.pattern} (strength: ${r.strength.toFixed(1)})`);
57
+ // Create plan with recommendations as context
58
+ const plan = planner.create({
59
+ objective,
60
+ scope,
61
+ decisions,
62
+ tasks,
63
+ });
64
+ return { plan, recommendations };
65
+ },
66
+ },
67
+ // ─── orchestrate_execute ──────────────────────────────────────
68
+ {
69
+ name: 'orchestrate_execute',
70
+ description: 'Start plan execution and open a brain session to track the work. ' +
71
+ 'The plan must be in "approved" status. Returns both the updated plan and session ID.',
72
+ auth: 'write',
73
+ schema: z.object({
74
+ planId: z.string().describe('ID of the approved plan to start executing'),
75
+ domain: z.string().optional().describe('Domain for brain session tracking'),
76
+ context: z.string().optional().describe('Additional context for the brain session'),
77
+ }),
78
+ handler: async (params) => {
79
+ const planId = params.planId;
80
+ const domain = params.domain;
81
+ const context = params.context;
82
+ // Start plan execution
83
+ const plan = planner.startExecution(planId);
84
+ // Start brain session linked to this plan
85
+ const session = brainIntelligence.lifecycle({
86
+ action: 'start',
87
+ domain,
88
+ context,
89
+ planId,
90
+ });
91
+ return { plan, session };
92
+ },
93
+ },
94
+ // ─── orchestrate_complete ─────────────────────────────────────
95
+ {
96
+ name: 'orchestrate_complete',
97
+ description: 'Complete plan execution, end brain session, and extract knowledge. ' +
98
+ 'Performs three steps: marks plan completed, ends the brain session with outcome, ' +
99
+ 'and runs knowledge extraction on the session.',
100
+ auth: 'write',
101
+ schema: z.object({
102
+ planId: z.string().describe('ID of the executing plan to complete'),
103
+ sessionId: z.string().describe('ID of the brain session to end'),
104
+ outcome: z
105
+ .enum(['completed', 'abandoned', 'partial'])
106
+ .optional()
107
+ .default('completed')
108
+ .describe('Plan outcome'),
109
+ toolsUsed: z.array(z.string()).optional().describe('Tools used during execution'),
110
+ filesModified: z.array(z.string()).optional().describe('Files modified during execution'),
111
+ }),
112
+ handler: async (params) => {
113
+ const planId = params.planId;
114
+ const sessionId = params.sessionId;
115
+ const outcome = params.outcome ?? 'completed';
116
+ const toolsUsed = params.toolsUsed ?? [];
117
+ const filesModified = params.filesModified ?? [];
118
+ // Complete the plan
119
+ const plan = planner.complete(planId);
120
+ // End brain session with outcome
121
+ const session = brainIntelligence.lifecycle({
122
+ action: 'end',
123
+ sessionId,
124
+ planId,
125
+ planOutcome: outcome,
126
+ toolsUsed,
127
+ filesModified,
128
+ });
129
+ // Extract knowledge from the session — graceful if nothing to extract
130
+ let extraction = null;
131
+ try {
132
+ extraction = brainIntelligence.extractKnowledge(sessionId);
133
+ }
134
+ catch {
135
+ // Session may not have enough signal for extraction — that's OK
136
+ }
137
+ return { plan, session, extraction };
138
+ },
139
+ },
140
+ // ─── orchestrate_status ───────────────────────────────────────
141
+ {
142
+ name: 'orchestrate_status',
143
+ description: 'Get combined orchestration status: active plans, brain session context, ' +
144
+ 'vault stats, and recent brain recommendations.',
145
+ auth: 'read',
146
+ schema: z.object({
147
+ domain: z.string().optional().describe('Filter recommendations by domain'),
148
+ sessionLimit: z.number().optional().describe('Number of recent sessions to include (default 5)'),
149
+ }),
150
+ handler: async (params) => {
151
+ const domain = params.domain;
152
+ const sessionLimit = params.sessionLimit ?? 5;
153
+ // Active plans
154
+ const activePlans = planner.getActive();
155
+ // Brain session context
156
+ const sessionContext = brainIntelligence.getSessionContext(sessionLimit);
157
+ // Vault stats
158
+ const vaultStats = vault.stats();
159
+ // Recent recommendations — graceful degradation
160
+ let recommendations = [];
161
+ try {
162
+ const raw = brainIntelligence.recommend({
163
+ domain,
164
+ limit: 5,
165
+ });
166
+ recommendations = raw.map((r) => ({
167
+ pattern: r.pattern,
168
+ strength: r.strength,
169
+ }));
170
+ }
171
+ catch {
172
+ // No recommendations available
173
+ }
174
+ // Brain intelligence stats
175
+ const brainStats = brainIntelligence.getStats();
176
+ return {
177
+ activePlans,
178
+ sessionContext,
179
+ vaultStats,
180
+ recommendations,
181
+ brainStats,
182
+ };
183
+ },
184
+ },
185
+ // ─── orchestrate_quick_capture ────────────────────────────────
186
+ {
187
+ name: 'orchestrate_quick_capture',
188
+ description: 'Capture knowledge from a completed task without full plan lifecycle. ' +
189
+ 'Creates a brain session, records the context, ends it, and extracts knowledge — all in one call.',
190
+ auth: 'write',
191
+ schema: z.object({
192
+ domain: z.string().describe('Knowledge domain (e.g. "component", "accessibility")'),
193
+ context: z.string().describe('What was done — summary of the task'),
194
+ toolsUsed: z.array(z.string()).optional().describe('Tools used during the task'),
195
+ filesModified: z.array(z.string()).optional().describe('Files modified during the task'),
196
+ outcome: z
197
+ .enum(['completed', 'abandoned', 'partial'])
198
+ .optional()
199
+ .default('completed')
200
+ .describe('Task outcome'),
201
+ }),
202
+ handler: async (params) => {
203
+ const domain = params.domain;
204
+ const context = params.context;
205
+ const toolsUsed = params.toolsUsed ?? [];
206
+ const filesModified = params.filesModified ?? [];
207
+ const outcome = params.outcome ?? 'completed';
208
+ // Start session
209
+ const startedSession = brainIntelligence.lifecycle({
210
+ action: 'start',
211
+ domain,
212
+ context,
213
+ toolsUsed,
214
+ filesModified,
215
+ });
216
+ // End session immediately with outcome
217
+ const endedSession = brainIntelligence.lifecycle({
218
+ action: 'end',
219
+ sessionId: startedSession.id,
220
+ toolsUsed,
221
+ filesModified,
222
+ planOutcome: outcome,
223
+ });
224
+ // Extract knowledge — graceful if nothing to extract
225
+ let extraction = null;
226
+ try {
227
+ extraction = brainIntelligence.extractKnowledge(startedSession.id);
228
+ }
229
+ catch {
230
+ // Not enough signal — that's fine
231
+ }
232
+ return {
233
+ session: endedSession,
234
+ extraction,
235
+ };
236
+ },
237
+ },
238
+ ];
239
+ }
240
+ //# sourceMappingURL=orchestrate-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrate-ops.js","sourceRoot":"","sources":["../../src/runtime/orchestrate-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Extended planning operations — 9 ops for advanced plan lifecycle management.
3
+ *
4
+ * These complement the 5 basic planning ops in core-ops.ts with:
5
+ * iteration, splitting, reconciliation, lifecycle completion,
6
+ * dispatch, review, archival, task listing, and statistics.
7
+ */
8
+ import type { OpDefinition } from '../facades/types.js';
9
+ import type { AgentRuntime } from './types.js';
10
+ /**
11
+ * Create 9 extended planning operations for an agent runtime.
12
+ *
13
+ * Groups: mutation (plan_iterate, plan_split, plan_reconcile, plan_complete_lifecycle,
14
+ * plan_review, plan_archive), query (plan_dispatch, plan_list_tasks, plan_stats).
15
+ */
16
+ export declare function createPlanningExtraOps(runtime: AgentRuntime): OpDefinition[];
17
+ //# sourceMappingURL=planning-extra-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-extra-ops.d.ts","sourceRoot":"","sources":["../../src/runtime/planning-extra-ops.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,CAmT5E"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Extended planning operations — 9 ops for advanced plan lifecycle management.
3
+ *
4
+ * These complement the 5 basic planning ops in core-ops.ts with:
5
+ * iteration, splitting, reconciliation, lifecycle completion,
6
+ * dispatch, review, archival, task listing, and statistics.
7
+ */
8
+ import { z } from 'zod';
9
+ /**
10
+ * Create 9 extended planning operations for an agent runtime.
11
+ *
12
+ * Groups: mutation (plan_iterate, plan_split, plan_reconcile, plan_complete_lifecycle,
13
+ * plan_review, plan_archive), query (plan_dispatch, plan_list_tasks, plan_stats).
14
+ */
15
+ export function createPlanningExtraOps(runtime) {
16
+ const { planner, vault } = runtime;
17
+ return [
18
+ // ─── Plan Iteration ───────────────────────────────────────────
19
+ {
20
+ name: 'plan_iterate',
21
+ description: 'Revise a draft plan — change objective, scope, decisions, or add/remove tasks. Only works on draft plans.',
22
+ auth: 'write',
23
+ schema: z.object({
24
+ planId: z.string().describe('ID of the draft plan to iterate on'),
25
+ objective: z.string().optional().describe('New objective (replaces existing)'),
26
+ scope: z.string().optional().describe('New scope (replaces existing)'),
27
+ decisions: z.array(z.string()).optional().describe('New decisions list (replaces existing)'),
28
+ addTasks: z
29
+ .array(z.object({ title: z.string(), description: z.string() }))
30
+ .optional()
31
+ .describe('Tasks to append'),
32
+ removeTasks: z
33
+ .array(z.string())
34
+ .optional()
35
+ .describe('Task IDs to remove'),
36
+ }),
37
+ handler: async (params) => {
38
+ try {
39
+ const plan = planner.iterate(params.planId, {
40
+ objective: params.objective,
41
+ scope: params.scope,
42
+ decisions: params.decisions,
43
+ addTasks: params.addTasks,
44
+ removeTasks: params.removeTasks,
45
+ });
46
+ return { iterated: true, plan };
47
+ }
48
+ catch (err) {
49
+ return { error: err.message };
50
+ }
51
+ },
52
+ },
53
+ // ─── Plan Split ───────────────────────────────────────────────
54
+ {
55
+ name: 'plan_split',
56
+ description: 'Split a plan into sub-tasks with dependency tracking. Replaces existing tasks with a new set. Works on draft or approved plans.',
57
+ auth: 'write',
58
+ schema: z.object({
59
+ planId: z.string().describe('Plan ID to split tasks for'),
60
+ tasks: z
61
+ .array(z.object({
62
+ title: z.string(),
63
+ description: z.string(),
64
+ dependsOn: z.array(z.string()).optional().describe('Task IDs this task depends on'),
65
+ }))
66
+ .describe('New task list with optional dependency references (task-1, task-2, etc.)'),
67
+ }),
68
+ handler: async (params) => {
69
+ try {
70
+ const plan = planner.splitTasks(params.planId, params.tasks);
71
+ return { split: true, taskCount: plan.tasks.length, plan };
72
+ }
73
+ catch (err) {
74
+ return { error: err.message };
75
+ }
76
+ },
77
+ },
78
+ // ─── Plan Reconcile ───────────────────────────────────────────
79
+ {
80
+ name: 'plan_reconcile',
81
+ description: 'Capture what actually happened vs what was planned. Produces a drift analysis with accuracy score. Works on executing or completed plans.',
82
+ auth: 'write',
83
+ schema: z.object({
84
+ planId: z.string().describe('Plan ID to reconcile'),
85
+ actualOutcome: z.string().describe('Description of what actually happened'),
86
+ driftItems: z
87
+ .array(z.object({
88
+ type: z.enum(['skipped', 'added', 'modified', 'reordered']),
89
+ description: z.string(),
90
+ impact: z.enum(['low', 'medium', 'high']),
91
+ rationale: z.string(),
92
+ }))
93
+ .optional()
94
+ .describe('Specific drift items — differences between plan and reality'),
95
+ }),
96
+ handler: async (params) => {
97
+ try {
98
+ const plan = planner.reconcile(params.planId, {
99
+ actualOutcome: params.actualOutcome,
100
+ driftItems: params.driftItems,
101
+ });
102
+ return {
103
+ reconciled: true,
104
+ accuracy: plan.reconciliation.accuracy,
105
+ driftCount: plan.reconciliation.driftItems.length,
106
+ plan,
107
+ };
108
+ }
109
+ catch (err) {
110
+ return { error: err.message };
111
+ }
112
+ },
113
+ },
114
+ // ─── Plan Complete Lifecycle ──────────────────────────────────
115
+ {
116
+ name: 'plan_complete_lifecycle',
117
+ description: 'Extract knowledge from a completed and reconciled plan. Captures patterns and anti-patterns into the vault based on drift analysis.',
118
+ auth: 'write',
119
+ schema: z.object({
120
+ planId: z.string().describe('Plan ID (must be completed with reconciliation data)'),
121
+ patterns: z
122
+ .array(z.string())
123
+ .optional()
124
+ .describe('Patterns discovered during execution'),
125
+ antiPatterns: z
126
+ .array(z.string())
127
+ .optional()
128
+ .describe('Anti-patterns discovered during execution'),
129
+ }),
130
+ handler: async (params) => {
131
+ try {
132
+ const plan = planner.get(params.planId);
133
+ if (!plan)
134
+ return { error: `Plan not found: ${params.planId}` };
135
+ if (plan.status !== 'completed')
136
+ return { error: `Plan must be completed — current status: '${plan.status}'` };
137
+ const patterns = params.patterns ?? [];
138
+ const antiPatterns = params.antiPatterns ?? [];
139
+ let captured = 0;
140
+ // Capture patterns into vault
141
+ for (const p of patterns) {
142
+ vault.add({
143
+ id: `plan-pattern-${plan.id}-${captured}`,
144
+ type: 'pattern',
145
+ domain: 'planning',
146
+ title: p,
147
+ severity: 'suggestion',
148
+ description: `Discovered during plan: ${plan.objective}`,
149
+ tags: ['plan-knowledge', plan.id],
150
+ });
151
+ captured++;
152
+ }
153
+ // Capture anti-patterns into vault
154
+ for (const ap of antiPatterns) {
155
+ vault.add({
156
+ id: `plan-antipattern-${plan.id}-${captured}`,
157
+ type: 'anti-pattern',
158
+ domain: 'planning',
159
+ title: ap,
160
+ severity: 'warning',
161
+ description: `Discovered during plan: ${plan.objective}`,
162
+ tags: ['plan-knowledge', plan.id],
163
+ });
164
+ captured++;
165
+ }
166
+ return {
167
+ completed: true,
168
+ knowledgeCaptured: captured,
169
+ patternsAdded: patterns.length,
170
+ antiPatternsAdded: antiPatterns.length,
171
+ reconciliation: plan.reconciliation ?? null,
172
+ };
173
+ }
174
+ catch (err) {
175
+ return { error: err.message };
176
+ }
177
+ },
178
+ },
179
+ // ─── Plan Dispatch ────────────────────────────────────────────
180
+ {
181
+ name: 'plan_dispatch',
182
+ description: 'Get task execution instructions for subagents. Returns the task, its unmet dependencies, and whether it is ready to execute.',
183
+ auth: 'read',
184
+ schema: z.object({
185
+ planId: z.string().describe('Plan ID'),
186
+ taskId: z.string().describe('Task ID to get dispatch instructions for'),
187
+ }),
188
+ handler: async (params) => {
189
+ try {
190
+ const dispatch = planner.getDispatch(params.planId, params.taskId);
191
+ return dispatch;
192
+ }
193
+ catch (err) {
194
+ return { error: err.message };
195
+ }
196
+ },
197
+ },
198
+ // ─── Plan Review ──────────────────────────────────────────────
199
+ {
200
+ name: 'plan_review',
201
+ description: 'Submit review evidence for a plan or specific task. Records reviewer, outcome, and comments.',
202
+ auth: 'write',
203
+ schema: z.object({
204
+ planId: z.string().describe('Plan ID to review'),
205
+ taskId: z.string().optional().describe('Specific task ID (omit to review the whole plan)'),
206
+ reviewer: z.string().describe('Name or ID of reviewer'),
207
+ outcome: z
208
+ .enum(['approved', 'rejected', 'needs_changes'])
209
+ .describe('Review outcome'),
210
+ comments: z.string().describe('Review comments'),
211
+ }),
212
+ handler: async (params) => {
213
+ try {
214
+ const plan = planner.addReview(params.planId, {
215
+ taskId: params.taskId,
216
+ reviewer: params.reviewer,
217
+ outcome: params.outcome,
218
+ comments: params.comments,
219
+ });
220
+ return {
221
+ reviewed: true,
222
+ totalReviews: plan.reviews?.length ?? 0,
223
+ plan: { id: plan.id, status: plan.status },
224
+ };
225
+ }
226
+ catch (err) {
227
+ return { error: err.message };
228
+ }
229
+ },
230
+ },
231
+ // ─── Plan Archive ─────────────────────────────────────────────
232
+ {
233
+ name: 'plan_archive',
234
+ description: 'Archive completed plans older than N days. Removes them from active store and returns the archived plans.',
235
+ auth: 'admin',
236
+ schema: z.object({
237
+ olderThanDays: z.number().describe('Archive plans completed more than this many days ago'),
238
+ }),
239
+ handler: async (params) => {
240
+ try {
241
+ const olderThanDays = params.olderThanDays ?? 30;
242
+ const archived = planner.archive(olderThanDays);
243
+ return { archived: archived.length, plans: archived.map((p) => ({ id: p.id, objective: p.objective })) };
244
+ }
245
+ catch (err) {
246
+ return { error: err.message };
247
+ }
248
+ },
249
+ },
250
+ // ─── Plan List Tasks ──────────────────────────────────────────
251
+ {
252
+ name: 'plan_list_tasks',
253
+ description: 'List all tasks for a plan with their current status. Optionally filter by status.',
254
+ auth: 'read',
255
+ schema: z.object({
256
+ planId: z.string().describe('Plan ID'),
257
+ status: z
258
+ .enum(['pending', 'in_progress', 'completed', 'skipped', 'failed'])
259
+ .optional()
260
+ .describe('Filter tasks by status'),
261
+ }),
262
+ handler: async (params) => {
263
+ try {
264
+ const plan = planner.get(params.planId);
265
+ if (!plan)
266
+ return { error: `Plan not found: ${params.planId}` };
267
+ const statusFilter = params.status;
268
+ const tasks = statusFilter
269
+ ? plan.tasks.filter((t) => t.status === statusFilter)
270
+ : plan.tasks;
271
+ return {
272
+ planId: plan.id,
273
+ planStatus: plan.status,
274
+ total: plan.tasks.length,
275
+ filtered: tasks.length,
276
+ tasks,
277
+ };
278
+ }
279
+ catch (err) {
280
+ return { error: err.message };
281
+ }
282
+ },
283
+ },
284
+ // ─── Plan Stats ───────────────────────────────────────────────
285
+ {
286
+ name: 'plan_stats',
287
+ description: 'Planning statistics — total plans, breakdown by status, average tasks per plan, task status distribution.',
288
+ auth: 'read',
289
+ handler: async () => {
290
+ try {
291
+ return planner.stats();
292
+ }
293
+ catch (err) {
294
+ return { error: err.message };
295
+ }
296
+ },
297
+ },
298
+ ];
299
+ }
300
+ //# sourceMappingURL=planning-extra-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-extra-ops.js","sourceRoot":"","sources":["../../src/runtime/planning-extra-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Project registry operations — 12 ops for managing projects, rules, and links.
3
+ *
4
+ * These ops expose the ProjectRegistry module as facade operations.
5
+ * All state is persisted in the Vault's SQLite database.
6
+ */
7
+ import type { OpDefinition } from '../facades/types.js';
8
+ import type { AgentRuntime } from './types.js';
9
+ /**
10
+ * Create the 12 project registry operations for an agent runtime.
11
+ *
12
+ * Groups: projects (3), rules (4), links (4), misc (1).
13
+ */
14
+ export declare function createProjectOps(runtime: AgentRuntime): OpDefinition[];
15
+ //# sourceMappingURL=project-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-ops.d.ts","sourceRoot":"","sources":["../../src/runtime/project-ops.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,CAmLtE"}