@soleri/core 2.1.0 → 2.5.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 (377) hide show
  1. package/dist/brain/brain.d.ts +10 -1
  2. package/dist/brain/brain.d.ts.map +1 -1
  3. package/dist/brain/brain.js +116 -13
  4. package/dist/brain/brain.js.map +1 -1
  5. package/dist/brain/intelligence.d.ts +36 -1
  6. package/dist/brain/intelligence.d.ts.map +1 -1
  7. package/dist/brain/intelligence.js +119 -14
  8. package/dist/brain/intelligence.js.map +1 -1
  9. package/dist/brain/types.d.ts +34 -2
  10. package/dist/brain/types.d.ts.map +1 -1
  11. package/dist/cognee/client.d.ts +3 -0
  12. package/dist/cognee/client.d.ts.map +1 -1
  13. package/dist/cognee/client.js +17 -0
  14. package/dist/cognee/client.js.map +1 -1
  15. package/dist/cognee/sync-manager.d.ts +94 -0
  16. package/dist/cognee/sync-manager.d.ts.map +1 -0
  17. package/dist/cognee/sync-manager.js +293 -0
  18. package/dist/cognee/sync-manager.js.map +1 -0
  19. package/dist/control/identity-manager.d.ts +22 -0
  20. package/dist/control/identity-manager.d.ts.map +1 -0
  21. package/dist/control/identity-manager.js +233 -0
  22. package/dist/control/identity-manager.js.map +1 -0
  23. package/dist/control/intent-router.d.ts +32 -0
  24. package/dist/control/intent-router.d.ts.map +1 -0
  25. package/dist/control/intent-router.js +242 -0
  26. package/dist/control/intent-router.js.map +1 -0
  27. package/dist/control/types.d.ts +68 -0
  28. package/dist/control/types.d.ts.map +1 -0
  29. package/dist/control/types.js +9 -0
  30. package/dist/control/types.js.map +1 -0
  31. package/dist/curator/curator.d.ts +37 -1
  32. package/dist/curator/curator.d.ts.map +1 -1
  33. package/dist/curator/curator.js +199 -1
  34. package/dist/curator/curator.js.map +1 -1
  35. package/dist/errors/classify.d.ts +13 -0
  36. package/dist/errors/classify.d.ts.map +1 -0
  37. package/dist/errors/classify.js +97 -0
  38. package/dist/errors/classify.js.map +1 -0
  39. package/dist/errors/index.d.ts +6 -0
  40. package/dist/errors/index.d.ts.map +1 -0
  41. package/dist/errors/index.js +4 -0
  42. package/dist/errors/index.js.map +1 -0
  43. package/dist/errors/retry.d.ts +40 -0
  44. package/dist/errors/retry.d.ts.map +1 -0
  45. package/dist/errors/retry.js +97 -0
  46. package/dist/errors/retry.js.map +1 -0
  47. package/dist/errors/types.d.ts +48 -0
  48. package/dist/errors/types.d.ts.map +1 -0
  49. package/dist/errors/types.js +59 -0
  50. package/dist/errors/types.js.map +1 -0
  51. package/dist/facades/types.d.ts +1 -1
  52. package/dist/governance/governance.d.ts +42 -0
  53. package/dist/governance/governance.d.ts.map +1 -0
  54. package/dist/governance/governance.js +488 -0
  55. package/dist/governance/governance.js.map +1 -0
  56. package/dist/governance/index.d.ts +3 -0
  57. package/dist/governance/index.d.ts.map +1 -0
  58. package/dist/governance/index.js +2 -0
  59. package/dist/governance/index.js.map +1 -0
  60. package/dist/governance/types.d.ts +102 -0
  61. package/dist/governance/types.d.ts.map +1 -0
  62. package/dist/governance/types.js +3 -0
  63. package/dist/governance/types.js.map +1 -0
  64. package/dist/index.d.ts +52 -3
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +47 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/intake/content-classifier.d.ts +14 -0
  69. package/dist/intake/content-classifier.d.ts.map +1 -0
  70. package/dist/intake/content-classifier.js +125 -0
  71. package/dist/intake/content-classifier.js.map +1 -0
  72. package/dist/intake/dedup-gate.d.ts +17 -0
  73. package/dist/intake/dedup-gate.d.ts.map +1 -0
  74. package/dist/intake/dedup-gate.js +66 -0
  75. package/dist/intake/dedup-gate.js.map +1 -0
  76. package/dist/intake/intake-pipeline.d.ts +63 -0
  77. package/dist/intake/intake-pipeline.d.ts.map +1 -0
  78. package/dist/intake/intake-pipeline.js +373 -0
  79. package/dist/intake/intake-pipeline.js.map +1 -0
  80. package/dist/intake/types.d.ts +65 -0
  81. package/dist/intake/types.d.ts.map +1 -0
  82. package/dist/intake/types.js +3 -0
  83. package/dist/intake/types.js.map +1 -0
  84. package/dist/intelligence/loader.js +1 -1
  85. package/dist/intelligence/loader.js.map +1 -1
  86. package/dist/intelligence/types.d.ts +3 -1
  87. package/dist/intelligence/types.d.ts.map +1 -1
  88. package/dist/logging/logger.d.ts +37 -0
  89. package/dist/logging/logger.d.ts.map +1 -0
  90. package/dist/logging/logger.js +145 -0
  91. package/dist/logging/logger.js.map +1 -0
  92. package/dist/logging/types.d.ts +19 -0
  93. package/dist/logging/types.d.ts.map +1 -0
  94. package/dist/logging/types.js +2 -0
  95. package/dist/logging/types.js.map +1 -0
  96. package/dist/loop/loop-manager.d.ts +100 -0
  97. package/dist/loop/loop-manager.d.ts.map +1 -0
  98. package/dist/loop/loop-manager.js +379 -0
  99. package/dist/loop/loop-manager.js.map +1 -0
  100. package/dist/loop/types.d.ts +103 -0
  101. package/dist/loop/types.d.ts.map +1 -0
  102. package/dist/loop/types.js +11 -0
  103. package/dist/loop/types.js.map +1 -0
  104. package/dist/persistence/index.d.ts +3 -0
  105. package/dist/persistence/index.d.ts.map +1 -0
  106. package/dist/persistence/index.js +2 -0
  107. package/dist/persistence/index.js.map +1 -0
  108. package/dist/persistence/sqlite-provider.d.ts +25 -0
  109. package/dist/persistence/sqlite-provider.d.ts.map +1 -0
  110. package/dist/persistence/sqlite-provider.js +59 -0
  111. package/dist/persistence/sqlite-provider.js.map +1 -0
  112. package/dist/persistence/types.d.ts +36 -0
  113. package/dist/persistence/types.d.ts.map +1 -0
  114. package/dist/persistence/types.js +8 -0
  115. package/dist/persistence/types.js.map +1 -0
  116. package/dist/planning/gap-analysis.d.ts +72 -0
  117. package/dist/planning/gap-analysis.d.ts.map +1 -0
  118. package/dist/planning/gap-analysis.js +442 -0
  119. package/dist/planning/gap-analysis.js.map +1 -0
  120. package/dist/planning/gap-types.d.ts +29 -0
  121. package/dist/planning/gap-types.d.ts.map +1 -0
  122. package/dist/planning/gap-types.js +28 -0
  123. package/dist/planning/gap-types.js.map +1 -0
  124. package/dist/planning/planner.d.ts +421 -4
  125. package/dist/planning/planner.d.ts.map +1 -1
  126. package/dist/planning/planner.js +949 -21
  127. package/dist/planning/planner.js.map +1 -1
  128. package/dist/playbooks/generic/brainstorming.d.ts +9 -0
  129. package/dist/playbooks/generic/brainstorming.d.ts.map +1 -0
  130. package/dist/playbooks/generic/brainstorming.js +105 -0
  131. package/dist/playbooks/generic/brainstorming.js.map +1 -0
  132. package/dist/playbooks/generic/code-review.d.ts +11 -0
  133. package/dist/playbooks/generic/code-review.d.ts.map +1 -0
  134. package/dist/playbooks/generic/code-review.js +176 -0
  135. package/dist/playbooks/generic/code-review.js.map +1 -0
  136. package/dist/playbooks/generic/subagent-execution.d.ts +9 -0
  137. package/dist/playbooks/generic/subagent-execution.d.ts.map +1 -0
  138. package/dist/playbooks/generic/subagent-execution.js +68 -0
  139. package/dist/playbooks/generic/subagent-execution.js.map +1 -0
  140. package/dist/playbooks/generic/systematic-debugging.d.ts +9 -0
  141. package/dist/playbooks/generic/systematic-debugging.d.ts.map +1 -0
  142. package/dist/playbooks/generic/systematic-debugging.js +87 -0
  143. package/dist/playbooks/generic/systematic-debugging.js.map +1 -0
  144. package/dist/playbooks/generic/tdd.d.ts +9 -0
  145. package/dist/playbooks/generic/tdd.d.ts.map +1 -0
  146. package/dist/playbooks/generic/tdd.js +70 -0
  147. package/dist/playbooks/generic/tdd.js.map +1 -0
  148. package/dist/playbooks/generic/verification.d.ts +9 -0
  149. package/dist/playbooks/generic/verification.d.ts.map +1 -0
  150. package/dist/playbooks/generic/verification.js +74 -0
  151. package/dist/playbooks/generic/verification.js.map +1 -0
  152. package/dist/playbooks/index.d.ts +4 -0
  153. package/dist/playbooks/index.d.ts.map +1 -0
  154. package/dist/playbooks/index.js +5 -0
  155. package/dist/playbooks/index.js.map +1 -0
  156. package/dist/playbooks/playbook-registry.d.ts +42 -0
  157. package/dist/playbooks/playbook-registry.d.ts.map +1 -0
  158. package/dist/playbooks/playbook-registry.js +227 -0
  159. package/dist/playbooks/playbook-registry.js.map +1 -0
  160. package/dist/playbooks/playbook-seeder.d.ts +47 -0
  161. package/dist/playbooks/playbook-seeder.d.ts.map +1 -0
  162. package/dist/playbooks/playbook-seeder.js +104 -0
  163. package/dist/playbooks/playbook-seeder.js.map +1 -0
  164. package/dist/playbooks/playbook-types.d.ts +132 -0
  165. package/dist/playbooks/playbook-types.d.ts.map +1 -0
  166. package/dist/playbooks/playbook-types.js +12 -0
  167. package/dist/playbooks/playbook-types.js.map +1 -0
  168. package/dist/project/project-registry.d.ts +79 -0
  169. package/dist/project/project-registry.d.ts.map +1 -0
  170. package/dist/project/project-registry.js +274 -0
  171. package/dist/project/project-registry.js.map +1 -0
  172. package/dist/project/types.d.ts +28 -0
  173. package/dist/project/types.d.ts.map +1 -0
  174. package/dist/project/types.js +5 -0
  175. package/dist/project/types.js.map +1 -0
  176. package/dist/prompts/index.d.ts +4 -0
  177. package/dist/prompts/index.d.ts.map +1 -0
  178. package/dist/prompts/index.js +3 -0
  179. package/dist/prompts/index.js.map +1 -0
  180. package/dist/prompts/parser.d.ts +17 -0
  181. package/dist/prompts/parser.d.ts.map +1 -0
  182. package/dist/prompts/parser.js +47 -0
  183. package/dist/prompts/parser.js.map +1 -0
  184. package/dist/prompts/template-manager.d.ts +25 -0
  185. package/dist/prompts/template-manager.d.ts.map +1 -0
  186. package/dist/prompts/template-manager.js +71 -0
  187. package/dist/prompts/template-manager.js.map +1 -0
  188. package/dist/prompts/types.d.ts +26 -0
  189. package/dist/prompts/types.d.ts.map +1 -0
  190. package/dist/prompts/types.js +5 -0
  191. package/dist/prompts/types.js.map +1 -0
  192. package/dist/runtime/admin-extra-ops.d.ts +15 -0
  193. package/dist/runtime/admin-extra-ops.d.ts.map +1 -0
  194. package/dist/runtime/admin-extra-ops.js +595 -0
  195. package/dist/runtime/admin-extra-ops.js.map +1 -0
  196. package/dist/runtime/admin-ops.d.ts +15 -0
  197. package/dist/runtime/admin-ops.d.ts.map +1 -0
  198. package/dist/runtime/admin-ops.js +329 -0
  199. package/dist/runtime/admin-ops.js.map +1 -0
  200. package/dist/runtime/capture-ops.d.ts +15 -0
  201. package/dist/runtime/capture-ops.d.ts.map +1 -0
  202. package/dist/runtime/capture-ops.js +363 -0
  203. package/dist/runtime/capture-ops.js.map +1 -0
  204. package/dist/runtime/cognee-sync-ops.d.ts +12 -0
  205. package/dist/runtime/cognee-sync-ops.d.ts.map +1 -0
  206. package/dist/runtime/cognee-sync-ops.js +55 -0
  207. package/dist/runtime/cognee-sync-ops.js.map +1 -0
  208. package/dist/runtime/core-ops.d.ts +9 -3
  209. package/dist/runtime/core-ops.d.ts.map +1 -1
  210. package/dist/runtime/core-ops.js +693 -10
  211. package/dist/runtime/core-ops.js.map +1 -1
  212. package/dist/runtime/curator-extra-ops.d.ts +9 -0
  213. package/dist/runtime/curator-extra-ops.d.ts.map +1 -0
  214. package/dist/runtime/curator-extra-ops.js +71 -0
  215. package/dist/runtime/curator-extra-ops.js.map +1 -0
  216. package/dist/runtime/domain-ops.d.ts.map +1 -1
  217. package/dist/runtime/domain-ops.js +61 -15
  218. package/dist/runtime/domain-ops.js.map +1 -1
  219. package/dist/runtime/grading-ops.d.ts +14 -0
  220. package/dist/runtime/grading-ops.d.ts.map +1 -0
  221. package/dist/runtime/grading-ops.js +105 -0
  222. package/dist/runtime/grading-ops.js.map +1 -0
  223. package/dist/runtime/intake-ops.d.ts +14 -0
  224. package/dist/runtime/intake-ops.d.ts.map +1 -0
  225. package/dist/runtime/intake-ops.js +110 -0
  226. package/dist/runtime/intake-ops.js.map +1 -0
  227. package/dist/runtime/loop-ops.d.ts +14 -0
  228. package/dist/runtime/loop-ops.d.ts.map +1 -0
  229. package/dist/runtime/loop-ops.js +251 -0
  230. package/dist/runtime/loop-ops.js.map +1 -0
  231. package/dist/runtime/memory-cross-project-ops.d.ts +12 -0
  232. package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -0
  233. package/dist/runtime/memory-cross-project-ops.js +165 -0
  234. package/dist/runtime/memory-cross-project-ops.js.map +1 -0
  235. package/dist/runtime/memory-extra-ops.d.ts +13 -0
  236. package/dist/runtime/memory-extra-ops.d.ts.map +1 -0
  237. package/dist/runtime/memory-extra-ops.js +173 -0
  238. package/dist/runtime/memory-extra-ops.js.map +1 -0
  239. package/dist/runtime/orchestrate-ops.d.ts +17 -0
  240. package/dist/runtime/orchestrate-ops.d.ts.map +1 -0
  241. package/dist/runtime/orchestrate-ops.js +246 -0
  242. package/dist/runtime/orchestrate-ops.js.map +1 -0
  243. package/dist/runtime/planning-extra-ops.d.ts +25 -0
  244. package/dist/runtime/planning-extra-ops.d.ts.map +1 -0
  245. package/dist/runtime/planning-extra-ops.js +663 -0
  246. package/dist/runtime/planning-extra-ops.js.map +1 -0
  247. package/dist/runtime/playbook-ops.d.ts +14 -0
  248. package/dist/runtime/playbook-ops.d.ts.map +1 -0
  249. package/dist/runtime/playbook-ops.js +141 -0
  250. package/dist/runtime/playbook-ops.js.map +1 -0
  251. package/dist/runtime/project-ops.d.ts +15 -0
  252. package/dist/runtime/project-ops.d.ts.map +1 -0
  253. package/dist/runtime/project-ops.js +186 -0
  254. package/dist/runtime/project-ops.js.map +1 -0
  255. package/dist/runtime/runtime.d.ts.map +1 -1
  256. package/dist/runtime/runtime.js +65 -3
  257. package/dist/runtime/runtime.js.map +1 -1
  258. package/dist/runtime/types.d.ts +29 -0
  259. package/dist/runtime/types.d.ts.map +1 -1
  260. package/dist/runtime/vault-extra-ops.d.ts +10 -0
  261. package/dist/runtime/vault-extra-ops.d.ts.map +1 -0
  262. package/dist/runtime/vault-extra-ops.js +536 -0
  263. package/dist/runtime/vault-extra-ops.js.map +1 -0
  264. package/dist/telemetry/telemetry.d.ts +48 -0
  265. package/dist/telemetry/telemetry.d.ts.map +1 -0
  266. package/dist/telemetry/telemetry.js +87 -0
  267. package/dist/telemetry/telemetry.js.map +1 -0
  268. package/dist/vault/playbook.d.ts +34 -0
  269. package/dist/vault/playbook.d.ts.map +1 -0
  270. package/dist/vault/playbook.js +60 -0
  271. package/dist/vault/playbook.js.map +1 -0
  272. package/dist/vault/vault.d.ts +97 -4
  273. package/dist/vault/vault.d.ts.map +1 -1
  274. package/dist/vault/vault.js +424 -65
  275. package/dist/vault/vault.js.map +1 -1
  276. package/package.json +7 -3
  277. package/src/__tests__/admin-extra-ops.test.ts +467 -0
  278. package/src/__tests__/admin-ops.test.ts +271 -0
  279. package/src/__tests__/brain-intelligence.test.ts +205 -0
  280. package/src/__tests__/brain.test.ts +134 -3
  281. package/src/__tests__/capture-ops.test.ts +509 -0
  282. package/src/__tests__/cognee-integration.test.ts +80 -0
  283. package/src/__tests__/cognee-sync-manager.test.ts +103 -0
  284. package/src/__tests__/core-ops.test.ts +292 -2
  285. package/src/__tests__/curator-extra-ops.test.ts +381 -0
  286. package/src/__tests__/domain-ops.test.ts +66 -0
  287. package/src/__tests__/errors.test.ts +388 -0
  288. package/src/__tests__/governance.test.ts +522 -0
  289. package/src/__tests__/grading-ops.test.ts +361 -0
  290. package/src/__tests__/identity-manager.test.ts +243 -0
  291. package/src/__tests__/intake-pipeline.test.ts +162 -0
  292. package/src/__tests__/intent-router.test.ts +222 -0
  293. package/src/__tests__/logger.test.ts +200 -0
  294. package/src/__tests__/loop-ops.test.ts +469 -0
  295. package/src/__tests__/memory-cross-project-ops.test.ts +248 -0
  296. package/src/__tests__/memory-extra-ops.test.ts +352 -0
  297. package/src/__tests__/orchestrate-ops.test.ts +289 -0
  298. package/src/__tests__/persistence.test.ts +225 -0
  299. package/src/__tests__/planner.test.ts +416 -7
  300. package/src/__tests__/planning-extra-ops.test.ts +706 -0
  301. package/src/__tests__/playbook-registry.test.ts +326 -0
  302. package/src/__tests__/playbook-seeder.test.ts +163 -0
  303. package/src/__tests__/playbook.test.ts +389 -0
  304. package/src/__tests__/project-ops.test.ts +381 -0
  305. package/src/__tests__/template-manager.test.ts +222 -0
  306. package/src/__tests__/vault-extra-ops.test.ts +482 -0
  307. package/src/brain/brain.ts +185 -16
  308. package/src/brain/intelligence.ts +179 -10
  309. package/src/brain/types.ts +40 -2
  310. package/src/cognee/client.ts +18 -0
  311. package/src/cognee/sync-manager.ts +389 -0
  312. package/src/control/identity-manager.ts +354 -0
  313. package/src/control/intent-router.ts +326 -0
  314. package/src/control/types.ts +102 -0
  315. package/src/curator/curator.ts +295 -1
  316. package/src/errors/classify.ts +102 -0
  317. package/src/errors/index.ts +5 -0
  318. package/src/errors/retry.ts +132 -0
  319. package/src/errors/types.ts +81 -0
  320. package/src/governance/governance.ts +698 -0
  321. package/src/governance/index.ts +18 -0
  322. package/src/governance/types.ts +111 -0
  323. package/src/index.ts +213 -2
  324. package/src/intake/content-classifier.ts +146 -0
  325. package/src/intake/dedup-gate.ts +92 -0
  326. package/src/intake/intake-pipeline.ts +503 -0
  327. package/src/intake/types.ts +69 -0
  328. package/src/intelligence/loader.ts +1 -1
  329. package/src/intelligence/types.ts +3 -1
  330. package/src/logging/logger.ts +154 -0
  331. package/src/logging/types.ts +21 -0
  332. package/src/loop/loop-manager.ts +448 -0
  333. package/src/loop/types.ts +115 -0
  334. package/src/persistence/index.ts +7 -0
  335. package/src/persistence/sqlite-provider.ts +62 -0
  336. package/src/persistence/types.ts +44 -0
  337. package/src/planning/gap-analysis.ts +775 -0
  338. package/src/planning/gap-types.ts +61 -0
  339. package/src/planning/planner.ts +1273 -24
  340. package/src/playbooks/generic/brainstorming.ts +110 -0
  341. package/src/playbooks/generic/code-review.ts +181 -0
  342. package/src/playbooks/generic/subagent-execution.ts +74 -0
  343. package/src/playbooks/generic/systematic-debugging.ts +92 -0
  344. package/src/playbooks/generic/tdd.ts +75 -0
  345. package/src/playbooks/generic/verification.ts +79 -0
  346. package/src/playbooks/index.ts +27 -0
  347. package/src/playbooks/playbook-registry.ts +284 -0
  348. package/src/playbooks/playbook-seeder.ts +119 -0
  349. package/src/playbooks/playbook-types.ts +162 -0
  350. package/src/project/project-registry.ts +370 -0
  351. package/src/project/types.ts +31 -0
  352. package/src/prompts/index.ts +3 -0
  353. package/src/prompts/parser.ts +59 -0
  354. package/src/prompts/template-manager.ts +77 -0
  355. package/src/prompts/types.ts +28 -0
  356. package/src/runtime/admin-extra-ops.ts +652 -0
  357. package/src/runtime/admin-ops.ts +340 -0
  358. package/src/runtime/capture-ops.ts +404 -0
  359. package/src/runtime/cognee-sync-ops.ts +63 -0
  360. package/src/runtime/core-ops.ts +787 -9
  361. package/src/runtime/curator-extra-ops.ts +85 -0
  362. package/src/runtime/domain-ops.ts +67 -15
  363. package/src/runtime/grading-ops.ts +130 -0
  364. package/src/runtime/intake-ops.ts +126 -0
  365. package/src/runtime/loop-ops.ts +277 -0
  366. package/src/runtime/memory-cross-project-ops.ts +191 -0
  367. package/src/runtime/memory-extra-ops.ts +186 -0
  368. package/src/runtime/orchestrate-ops.ts +278 -0
  369. package/src/runtime/planning-extra-ops.ts +718 -0
  370. package/src/runtime/playbook-ops.ts +169 -0
  371. package/src/runtime/project-ops.ts +202 -0
  372. package/src/runtime/runtime.ts +77 -3
  373. package/src/runtime/types.ts +29 -0
  374. package/src/runtime/vault-extra-ops.ts +606 -0
  375. package/src/telemetry/telemetry.ts +118 -0
  376. package/src/vault/playbook.ts +87 -0
  377. package/src/vault/vault.ts +575 -98
@@ -0,0 +1,663 @@
1
+ /**
2
+ * Extended planning operations — 22 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, statistics,
7
+ * evidence submission, verification, validation, auto-reconciliation,
8
+ * review prompt generation, brainstorming, execution metrics,
9
+ * deliverable submission, and deliverable verification.
10
+ */
11
+ import { z } from 'zod';
12
+ import { matchPlaybooks } from '../playbooks/index.js';
13
+ import { entryToPlaybookDefinition } from '../playbooks/index.js';
14
+ /**
15
+ * Create 22 extended planning operations for an agent runtime.
16
+ *
17
+ * Groups:
18
+ * mutation: plan_iterate, plan_split, plan_reconcile, plan_complete_lifecycle,
19
+ * plan_review, plan_archive, plan_submit_evidence, plan_auto_reconcile,
20
+ * plan_review_outcome, plan_record_task_metrics, plan_submit_deliverable
21
+ * query: plan_dispatch, plan_list_tasks, plan_stats, plan_verify_task,
22
+ * plan_verify_plan, plan_validate, plan_review_spec, plan_review_quality,
23
+ * plan_brainstorm, plan_execution_metrics, plan_verify_deliverables
24
+ */
25
+ export function createPlanningExtraOps(runtime) {
26
+ const { planner, vault } = runtime;
27
+ return [
28
+ // ─── Plan Iteration ───────────────────────────────────────────
29
+ {
30
+ name: 'plan_iterate',
31
+ description: 'Revise a draft plan — change objective, scope, decisions, or add/remove tasks. Only works on draft plans.',
32
+ auth: 'write',
33
+ schema: z.object({
34
+ planId: z.string().describe('ID of the draft plan to iterate on'),
35
+ objective: z.string().optional().describe('New objective (replaces existing)'),
36
+ scope: z.string().optional().describe('New scope (replaces existing)'),
37
+ decisions: z
38
+ .array(z.string())
39
+ .optional()
40
+ .describe('New decisions list (replaces existing)'),
41
+ addTasks: z
42
+ .array(z.object({ title: z.string(), description: z.string() }))
43
+ .optional()
44
+ .describe('Tasks to append'),
45
+ removeTasks: z.array(z.string()).optional().describe('Task IDs to remove'),
46
+ }),
47
+ handler: async (params) => {
48
+ try {
49
+ const plan = planner.iterate(params.planId, {
50
+ objective: params.objective,
51
+ scope: params.scope,
52
+ decisions: params.decisions,
53
+ addTasks: params.addTasks,
54
+ removeTasks: params.removeTasks,
55
+ });
56
+ return { iterated: true, plan };
57
+ }
58
+ catch (err) {
59
+ return { error: err.message };
60
+ }
61
+ },
62
+ },
63
+ // ─── Plan Split ───────────────────────────────────────────────
64
+ {
65
+ name: 'plan_split',
66
+ description: 'Split a plan into sub-tasks with dependency tracking. Replaces existing tasks with a new set. Works on draft or approved plans.',
67
+ auth: 'write',
68
+ schema: z.object({
69
+ planId: z.string().describe('Plan ID to split tasks for'),
70
+ tasks: z
71
+ .array(z.object({
72
+ title: z.string(),
73
+ description: z.string(),
74
+ dependsOn: z.array(z.string()).optional().describe('Task IDs this task depends on'),
75
+ }))
76
+ .describe('New task list with optional dependency references (task-1, task-2, etc.)'),
77
+ }),
78
+ handler: async (params) => {
79
+ try {
80
+ const plan = planner.splitTasks(params.planId, params.tasks);
81
+ return { split: true, taskCount: plan.tasks.length, plan };
82
+ }
83
+ catch (err) {
84
+ return { error: err.message };
85
+ }
86
+ },
87
+ },
88
+ // ─── Plan Reconcile ───────────────────────────────────────────
89
+ {
90
+ name: 'plan_reconcile',
91
+ description: 'Capture what actually happened vs what was planned. Produces a drift analysis with accuracy score. Works on executing or completed plans.',
92
+ auth: 'write',
93
+ schema: z.object({
94
+ planId: z.string().describe('Plan ID to reconcile'),
95
+ actualOutcome: z.string().describe('Description of what actually happened'),
96
+ driftItems: z
97
+ .array(z.object({
98
+ type: z.enum(['skipped', 'added', 'modified', 'reordered']),
99
+ description: z.string(),
100
+ impact: z.enum(['low', 'medium', 'high']),
101
+ rationale: z.string(),
102
+ }))
103
+ .optional()
104
+ .describe('Specific drift items — differences between plan and reality'),
105
+ }),
106
+ handler: async (params) => {
107
+ try {
108
+ const plan = planner.reconcile(params.planId, {
109
+ actualOutcome: params.actualOutcome,
110
+ driftItems: params.driftItems,
111
+ });
112
+ return {
113
+ reconciled: true,
114
+ accuracy: plan.reconciliation.accuracy,
115
+ driftCount: plan.reconciliation.driftItems.length,
116
+ plan,
117
+ };
118
+ }
119
+ catch (err) {
120
+ return { error: err.message };
121
+ }
122
+ },
123
+ },
124
+ // ─── Plan Complete Lifecycle ──────────────────────────────────
125
+ {
126
+ name: 'plan_complete_lifecycle',
127
+ description: 'Extract knowledge from a completed and reconciled plan. Captures patterns and anti-patterns into the vault based on drift analysis.',
128
+ auth: 'write',
129
+ schema: z.object({
130
+ planId: z.string().describe('Plan ID (must be completed with reconciliation data)'),
131
+ patterns: z.array(z.string()).optional().describe('Patterns discovered during execution'),
132
+ antiPatterns: z
133
+ .array(z.string())
134
+ .optional()
135
+ .describe('Anti-patterns discovered during execution'),
136
+ }),
137
+ handler: async (params) => {
138
+ try {
139
+ const plan = planner.get(params.planId);
140
+ if (!plan)
141
+ return { error: `Plan not found: ${params.planId}` };
142
+ if (plan.status !== 'completed')
143
+ return { error: `Plan must be completed — current status: '${plan.status}'` };
144
+ const patterns = params.patterns ?? [];
145
+ const antiPatterns = params.antiPatterns ?? [];
146
+ let captured = 0;
147
+ // Capture patterns into vault
148
+ for (const p of patterns) {
149
+ vault.add({
150
+ id: `plan-pattern-${plan.id}-${captured}`,
151
+ type: 'pattern',
152
+ domain: 'planning',
153
+ title: p,
154
+ severity: 'suggestion',
155
+ description: `Discovered during plan: ${plan.objective}`,
156
+ tags: ['plan-knowledge', plan.id],
157
+ });
158
+ captured++;
159
+ }
160
+ // Capture anti-patterns into vault
161
+ for (const ap of antiPatterns) {
162
+ vault.add({
163
+ id: `plan-antipattern-${plan.id}-${captured}`,
164
+ type: 'anti-pattern',
165
+ domain: 'planning',
166
+ title: ap,
167
+ severity: 'warning',
168
+ description: `Discovered during plan: ${plan.objective}`,
169
+ tags: ['plan-knowledge', plan.id],
170
+ });
171
+ captured++;
172
+ }
173
+ return {
174
+ completed: true,
175
+ knowledgeCaptured: captured,
176
+ patternsAdded: patterns.length,
177
+ antiPatternsAdded: antiPatterns.length,
178
+ reconciliation: plan.reconciliation ?? null,
179
+ };
180
+ }
181
+ catch (err) {
182
+ return { error: err.message };
183
+ }
184
+ },
185
+ },
186
+ // ─── Plan Dispatch ────────────────────────────────────────────
187
+ {
188
+ name: 'plan_dispatch',
189
+ description: 'Get task execution instructions for subagents. Returns the task, its unmet dependencies, and whether it is ready to execute.',
190
+ auth: 'read',
191
+ schema: z.object({
192
+ planId: z.string().describe('Plan ID'),
193
+ taskId: z.string().describe('Task ID to get dispatch instructions for'),
194
+ }),
195
+ handler: async (params) => {
196
+ try {
197
+ const dispatch = planner.getDispatch(params.planId, params.taskId);
198
+ return dispatch;
199
+ }
200
+ catch (err) {
201
+ return { error: err.message };
202
+ }
203
+ },
204
+ },
205
+ // ─── Plan Review ──────────────────────────────────────────────
206
+ {
207
+ name: 'plan_review',
208
+ description: 'Submit review evidence for a plan or specific task. Records reviewer, outcome, and comments.',
209
+ auth: 'write',
210
+ schema: z.object({
211
+ planId: z.string().describe('Plan ID to review'),
212
+ taskId: z.string().optional().describe('Specific task ID (omit to review the whole plan)'),
213
+ reviewer: z.string().describe('Name or ID of reviewer'),
214
+ outcome: z.enum(['approved', 'rejected', 'needs_changes']).describe('Review outcome'),
215
+ comments: z.string().describe('Review comments'),
216
+ }),
217
+ handler: async (params) => {
218
+ try {
219
+ const plan = planner.addReview(params.planId, {
220
+ taskId: params.taskId,
221
+ reviewer: params.reviewer,
222
+ outcome: params.outcome,
223
+ comments: params.comments,
224
+ });
225
+ return {
226
+ reviewed: true,
227
+ totalReviews: plan.reviews?.length ?? 0,
228
+ plan: { id: plan.id, status: plan.status },
229
+ };
230
+ }
231
+ catch (err) {
232
+ return { error: err.message };
233
+ }
234
+ },
235
+ },
236
+ // ─── Plan Archive ─────────────────────────────────────────────
237
+ {
238
+ name: 'plan_archive',
239
+ description: 'Archive completed plans older than N days. Removes them from active store and returns the archived plans.',
240
+ auth: 'admin',
241
+ schema: z.object({
242
+ olderThanDays: z.number().describe('Archive plans completed more than this many days ago'),
243
+ }),
244
+ handler: async (params) => {
245
+ try {
246
+ const olderThanDays = params.olderThanDays ?? 30;
247
+ const archived = planner.archive(olderThanDays);
248
+ return {
249
+ archived: archived.length,
250
+ plans: archived.map((p) => ({ id: p.id, objective: p.objective })),
251
+ };
252
+ }
253
+ catch (err) {
254
+ return { error: err.message };
255
+ }
256
+ },
257
+ },
258
+ // ─── Plan List Tasks ──────────────────────────────────────────
259
+ {
260
+ name: 'plan_list_tasks',
261
+ description: 'List all tasks for a plan with their current status. Optionally filter by status.',
262
+ auth: 'read',
263
+ schema: z.object({
264
+ planId: z.string().describe('Plan ID'),
265
+ status: z
266
+ .enum(['pending', 'in_progress', 'completed', 'skipped', 'failed'])
267
+ .optional()
268
+ .describe('Filter tasks by status'),
269
+ }),
270
+ handler: async (params) => {
271
+ try {
272
+ const plan = planner.get(params.planId);
273
+ if (!plan)
274
+ return { error: `Plan not found: ${params.planId}` };
275
+ const statusFilter = params.status;
276
+ const tasks = statusFilter
277
+ ? plan.tasks.filter((t) => t.status === statusFilter)
278
+ : plan.tasks;
279
+ return {
280
+ planId: plan.id,
281
+ planStatus: plan.status,
282
+ total: plan.tasks.length,
283
+ filtered: tasks.length,
284
+ tasks,
285
+ };
286
+ }
287
+ catch (err) {
288
+ return { error: err.message };
289
+ }
290
+ },
291
+ },
292
+ // ─── Plan Stats ───────────────────────────────────────────────
293
+ {
294
+ name: 'plan_stats',
295
+ description: 'Planning statistics — total plans, breakdown by status, average tasks per plan, task status distribution.',
296
+ auth: 'read',
297
+ handler: async () => {
298
+ try {
299
+ return planner.stats();
300
+ }
301
+ catch (err) {
302
+ return { error: err.message };
303
+ }
304
+ },
305
+ },
306
+ // ─── Evidence Submission (#148) ──────────────────────────────
307
+ {
308
+ name: 'plan_submit_evidence',
309
+ description: 'Submit command output evidence for a task acceptance criterion. Makes playbook verification gates enforceable.',
310
+ auth: 'write',
311
+ schema: z.object({
312
+ planId: z.string().describe('Plan ID'),
313
+ taskId: z.string().describe('Task ID to submit evidence for'),
314
+ criterion: z.string().describe('Which acceptance criterion this evidence satisfies'),
315
+ content: z
316
+ .string()
317
+ .describe('Evidence content — command output, URL, file path, or description'),
318
+ type: z.enum(['command_output', 'url', 'file', 'description']).describe('Evidence type'),
319
+ }),
320
+ handler: async (params) => {
321
+ try {
322
+ const task = planner.submitEvidence(params.planId, params.taskId, {
323
+ criterion: params.criterion,
324
+ content: params.content,
325
+ type: params.type,
326
+ });
327
+ return {
328
+ submitted: true,
329
+ taskId: task.id,
330
+ evidenceCount: task.evidence?.length ?? 0,
331
+ };
332
+ }
333
+ catch (err) {
334
+ return { error: err.message };
335
+ }
336
+ },
337
+ },
338
+ // ─── Verify Task (#148) ─────────────────────────────────────
339
+ {
340
+ name: 'plan_verify_task',
341
+ description: 'Check task evidence submitted + reviews passed → mark verified. Returns verification status with details.',
342
+ auth: 'read',
343
+ schema: z.object({
344
+ planId: z.string().describe('Plan ID'),
345
+ taskId: z.string().describe('Task ID to verify'),
346
+ }),
347
+ handler: async (params) => {
348
+ try {
349
+ return planner.verifyTask(params.planId, params.taskId);
350
+ }
351
+ catch (err) {
352
+ return { error: err.message };
353
+ }
354
+ },
355
+ },
356
+ // ─── Verify Plan (#148) ─────────────────────────────────────
357
+ {
358
+ name: 'plan_verify_plan',
359
+ description: 'Check all tasks verified → plan is ready for reconciliation. Returns validation status with per-task issues.',
360
+ auth: 'read',
361
+ schema: z.object({
362
+ planId: z.string().describe('Plan ID to verify'),
363
+ }),
364
+ handler: async (params) => {
365
+ try {
366
+ return planner.verifyPlan(params.planId);
367
+ }
368
+ catch (err) {
369
+ return { error: err.message };
370
+ }
371
+ },
372
+ },
373
+ // ─── Review Spec (#149) ─────────────────────────────────────
374
+ {
375
+ name: 'plan_review_spec',
376
+ description: 'Generate a spec compliance review prompt for a task. Stage 1 of the two-stage subagent review model.',
377
+ auth: 'read',
378
+ schema: z.object({
379
+ planId: z.string().describe('Plan ID'),
380
+ taskId: z.string().describe('Task ID to generate review prompt for'),
381
+ }),
382
+ handler: async (params) => {
383
+ try {
384
+ return planner.generateReviewSpec(params.planId, params.taskId);
385
+ }
386
+ catch (err) {
387
+ return { error: err.message };
388
+ }
389
+ },
390
+ },
391
+ // ─── Review Quality (#149) ──────────────────────────────────
392
+ {
393
+ name: 'plan_review_quality',
394
+ description: 'Generate a code quality review prompt for a task. Stage 2 of the two-stage subagent review model.',
395
+ auth: 'read',
396
+ schema: z.object({
397
+ planId: z.string().describe('Plan ID'),
398
+ taskId: z.string().describe('Task ID to generate review prompt for'),
399
+ }),
400
+ handler: async (params) => {
401
+ try {
402
+ return planner.generateReviewQuality(params.planId, params.taskId);
403
+ }
404
+ catch (err) {
405
+ return { error: err.message };
406
+ }
407
+ },
408
+ },
409
+ // ─── Review Outcome (#149) ──────────────────────────────────
410
+ {
411
+ name: 'plan_review_outcome',
412
+ description: 'Record a subagent review pass/fail result with feedback. Works alongside plan_review for structured review tracking.',
413
+ auth: 'write',
414
+ schema: z.object({
415
+ planId: z.string().describe('Plan ID'),
416
+ taskId: z.string().describe('Task ID being reviewed'),
417
+ reviewType: z
418
+ .enum(['spec', 'quality'])
419
+ .describe('Type of review — spec compliance or code quality'),
420
+ reviewer: z.string().describe('Reviewer identifier (subagent name)'),
421
+ outcome: z.enum(['approved', 'rejected', 'needs_changes']).describe('Review outcome'),
422
+ comments: z.string().describe('Review comments and feedback'),
423
+ }),
424
+ handler: async (params) => {
425
+ try {
426
+ const plan = planner.addReview(params.planId, {
427
+ taskId: params.taskId,
428
+ reviewer: `${params.reviewType}-review:${params.reviewer}`,
429
+ outcome: params.outcome,
430
+ comments: params.comments,
431
+ });
432
+ return {
433
+ recorded: true,
434
+ totalReviews: plan.reviews?.length ?? 0,
435
+ taskId: params.taskId,
436
+ reviewType: params.reviewType,
437
+ outcome: params.outcome,
438
+ };
439
+ }
440
+ catch (err) {
441
+ return { error: err.message };
442
+ }
443
+ },
444
+ },
445
+ // ─── Brainstorm (#150) ──────────────────────────────────────
446
+ {
447
+ name: 'plan_brainstorm',
448
+ description: 'Match a playbook for the given intent/text and return its brainstorm sections. ' +
449
+ 'Enforces the brainstorming gate — design must be explored before plan creation.',
450
+ auth: 'read',
451
+ schema: z.object({
452
+ intent: z
453
+ .enum(['BUILD', 'FIX', 'REVIEW', 'PLAN', 'IMPROVE', 'DELIVER'])
454
+ .optional()
455
+ .describe('Detected intent (optional, improves matching)'),
456
+ text: z.string().describe('Task description text to match against playbooks'),
457
+ }),
458
+ handler: async (params) => {
459
+ try {
460
+ // Load vault playbooks for matching
461
+ const vaultEntries = vault.list({ type: 'playbook' });
462
+ const vaultPlaybooks = vaultEntries
463
+ .map((e) => entryToPlaybookDefinition(e))
464
+ .filter((p) => p !== null);
465
+ const intent = params.intent;
466
+ const result = matchPlaybooks(intent, params.text, vaultPlaybooks);
467
+ if (!result.playbook) {
468
+ return { matched: false, sections: [], playbook: null };
469
+ }
470
+ // Gather brainstorm sections from matched playbooks
471
+ const sections = [
472
+ ...(result.playbook.generic?.brainstormSections ?? []),
473
+ ...(result.playbook.domain?.brainstormSections ?? []),
474
+ ];
475
+ return {
476
+ matched: true,
477
+ label: result.playbook.label,
478
+ genericMatch: result.genericMatch ?? null,
479
+ domainMatch: result.domainMatch ?? null,
480
+ sections,
481
+ gates: result.playbook.mergedGates,
482
+ toolInjections: result.playbook.mergedTools,
483
+ };
484
+ }
485
+ catch (err) {
486
+ return { error: err.message };
487
+ }
488
+ },
489
+ },
490
+ // ─── Auto-Reconcile (#151) ──────────────────────────────────
491
+ {
492
+ name: 'plan_auto_reconcile',
493
+ description: 'Automated fast-path reconciliation. Checks task completion status, generates drift report automatically. ' +
494
+ 'Returns null if drift is too significant (>2 non-completed tasks).',
495
+ auth: 'write',
496
+ schema: z.object({
497
+ planId: z.string().describe('Plan ID to auto-reconcile'),
498
+ }),
499
+ handler: async (params) => {
500
+ try {
501
+ const result = planner.autoReconcile(params.planId);
502
+ if (!result) {
503
+ return {
504
+ autoReconciled: false,
505
+ reason: 'Drift too significant for auto-reconciliation — use manual plan_reconcile',
506
+ };
507
+ }
508
+ return {
509
+ autoReconciled: true,
510
+ accuracy: result.reconciliation.accuracy,
511
+ driftCount: result.reconciliation.driftItems.length,
512
+ plan: result,
513
+ };
514
+ }
515
+ catch (err) {
516
+ return { error: err.message };
517
+ }
518
+ },
519
+ },
520
+ // ─── Validate Plan (#152) ───────────────────────────────────
521
+ {
522
+ name: 'plan_validate',
523
+ description: 'Post-execution validation — checks all tasks final, evidence exists for verification tasks, ' +
524
+ 'no tasks stuck in_progress. Run before reconciliation.',
525
+ auth: 'read',
526
+ schema: z.object({
527
+ planId: z.string().describe('Plan ID to validate'),
528
+ }),
529
+ handler: async (params) => {
530
+ try {
531
+ return planner.verifyPlan(params.planId);
532
+ }
533
+ catch (err) {
534
+ return { error: err.message };
535
+ }
536
+ },
537
+ },
538
+ // ─── Execution Metrics (#80) ─────────────────────────────────
539
+ {
540
+ name: 'plan_execution_metrics',
541
+ description: 'Per-task timing and aggregate execution summary for a plan. Shows duration, status counts, and average task time.',
542
+ auth: 'read',
543
+ schema: z.object({
544
+ planId: z.string().describe('Plan ID to get metrics for'),
545
+ }),
546
+ handler: async (params) => {
547
+ try {
548
+ const plan = planner.get(params.planId);
549
+ if (!plan)
550
+ return { error: `Plan not found: ${params.planId}` };
551
+ const taskMetrics = plan.tasks.map((t) => ({
552
+ id: t.id,
553
+ title: t.title,
554
+ status: t.status,
555
+ startedAt: t.startedAt ?? null,
556
+ completedAt: t.completedAt ?? null,
557
+ metrics: t.metrics ?? null,
558
+ }));
559
+ return {
560
+ planId: plan.id,
561
+ status: plan.status,
562
+ executionSummary: plan.executionSummary ?? null,
563
+ taskMetrics,
564
+ };
565
+ }
566
+ catch (err) {
567
+ return { error: err.message };
568
+ }
569
+ },
570
+ },
571
+ // ─── Record Task Metrics (#80) ──────────────────────────────
572
+ {
573
+ name: 'plan_record_task_metrics',
574
+ description: 'Record execution metrics for a task — tool calls, model tier, estimated cost. Merges with existing metrics.',
575
+ auth: 'write',
576
+ schema: z.object({
577
+ planId: z.string().describe('Plan ID'),
578
+ taskId: z.string().describe('Task ID to record metrics for'),
579
+ toolCalls: z.number().optional().describe('Number of tool calls made'),
580
+ modelTier: z.string().optional().describe('Model tier used (e.g., "opus", "sonnet")'),
581
+ estimatedCostUsd: z.number().optional().describe('Estimated cost in USD'),
582
+ iterations: z.number().optional().describe('Number of iterations taken'),
583
+ }),
584
+ handler: async (params) => {
585
+ try {
586
+ const plan = planner.get(params.planId);
587
+ if (!plan)
588
+ return { error: `Plan not found: ${params.planId}` };
589
+ const task = plan.tasks.find((t) => t.id === params.taskId);
590
+ if (!task)
591
+ return { error: `Task not found: ${params.taskId}` };
592
+ if (!task.metrics)
593
+ task.metrics = {};
594
+ if (params.toolCalls !== undefined)
595
+ task.metrics.toolCalls = params.toolCalls;
596
+ if (params.modelTier !== undefined)
597
+ task.metrics.modelTier = params.modelTier;
598
+ if (params.estimatedCostUsd !== undefined)
599
+ task.metrics.estimatedCostUsd = params.estimatedCostUsd;
600
+ if (params.iterations !== undefined)
601
+ task.metrics.iterations = params.iterations;
602
+ task.updatedAt = Date.now();
603
+ plan.updatedAt = Date.now();
604
+ return {
605
+ recorded: true,
606
+ taskId: task.id,
607
+ metrics: task.metrics,
608
+ };
609
+ }
610
+ catch (err) {
611
+ return { error: err.message };
612
+ }
613
+ },
614
+ },
615
+ // ─── Submit Deliverable (#83) ───────────────────────────────
616
+ {
617
+ name: 'plan_submit_deliverable',
618
+ description: 'Record a deliverable on a task. Auto-computes SHA-256 hash for file deliverables.',
619
+ auth: 'write',
620
+ schema: z.object({
621
+ planId: z.string().describe('Plan ID'),
622
+ taskId: z.string().describe('Task ID to attach deliverable to'),
623
+ type: z.enum(['file', 'vault_entry', 'url']).describe('Deliverable type'),
624
+ path: z.string().describe('File path, vault entry ID, or URL'),
625
+ }),
626
+ handler: async (params) => {
627
+ try {
628
+ const task = planner.submitDeliverable(params.planId, params.taskId, {
629
+ type: params.type,
630
+ path: params.path,
631
+ });
632
+ return {
633
+ submitted: true,
634
+ taskId: task.id,
635
+ deliverableCount: task.deliverables?.length ?? 0,
636
+ };
637
+ }
638
+ catch (err) {
639
+ return { error: err.message };
640
+ }
641
+ },
642
+ },
643
+ // ─── Verify Deliverables (#83) ──────────────────────────────
644
+ {
645
+ name: 'plan_verify_deliverables',
646
+ description: 'Verify all deliverables for a task — checks file existence + SHA-256 hash match, vault entry existence. Returns stale count.',
647
+ auth: 'read',
648
+ schema: z.object({
649
+ planId: z.string().describe('Plan ID'),
650
+ taskId: z.string().describe('Task ID to verify deliverables for'),
651
+ }),
652
+ handler: async (params) => {
653
+ try {
654
+ return planner.verifyDeliverables(params.planId, params.taskId, vault);
655
+ }
656
+ catch (err) {
657
+ return { error: err.message };
658
+ }
659
+ },
660
+ },
661
+ ];
662
+ }
663
+ //# sourceMappingURL=planning-extra-ops.js.map