agent-nuvira 1.14.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 (379) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +891 -0
  3. package/dist/agent-sdk/src/agent.d.ts +118 -0
  4. package/dist/agent-sdk/src/agent.d.ts.map +1 -0
  5. package/dist/agent-sdk/src/agent.js +88 -0
  6. package/dist/agent-sdk/src/agent.js.map +1 -0
  7. package/dist/agent-sdk/src/index.d.ts +33 -0
  8. package/dist/agent-sdk/src/index.d.ts.map +1 -0
  9. package/dist/agent-sdk/src/index.js +32 -0
  10. package/dist/agent-sdk/src/index.js.map +1 -0
  11. package/dist/agent-sdk/src/register.d.ts +70 -0
  12. package/dist/agent-sdk/src/register.d.ts.map +1 -0
  13. package/dist/agent-sdk/src/register.js +181 -0
  14. package/dist/agent-sdk/src/register.js.map +1 -0
  15. package/dist/agent-sdk/src/scaffold.d.ts +50 -0
  16. package/dist/agent-sdk/src/scaffold.d.ts.map +1 -0
  17. package/dist/agent-sdk/src/scaffold.js +291 -0
  18. package/dist/agent-sdk/src/scaffold.js.map +1 -0
  19. package/dist/agent-sdk/src/testing.d.ts +187 -0
  20. package/dist/agent-sdk/src/testing.d.ts.map +1 -0
  21. package/dist/agent-sdk/src/testing.js +243 -0
  22. package/dist/agent-sdk/src/testing.js.map +1 -0
  23. package/dist/agent-sdk/src/types.d.ts +202 -0
  24. package/dist/agent-sdk/src/types.d.ts.map +1 -0
  25. package/dist/agent-sdk/src/types.js +11 -0
  26. package/dist/agent-sdk/src/types.js.map +1 -0
  27. package/dist/agents/agent.d.ts +132 -0
  28. package/dist/agents/agent.d.ts.map +1 -0
  29. package/dist/agents/agent.js +19 -0
  30. package/dist/agents/agent.js.map +1 -0
  31. package/dist/agents/agents/context-gatherer.d.ts +42 -0
  32. package/dist/agents/agents/context-gatherer.d.ts.map +1 -0
  33. package/dist/agents/agents/context-gatherer.js +366 -0
  34. package/dist/agents/agents/context-gatherer.js.map +1 -0
  35. package/dist/agents/agents/debugger.d.ts +58 -0
  36. package/dist/agents/agents/debugger.d.ts.map +1 -0
  37. package/dist/agents/agents/debugger.js +257 -0
  38. package/dist/agents/agents/debugger.js.map +1 -0
  39. package/dist/agents/agents/git-agent.d.ts +34 -0
  40. package/dist/agents/agents/git-agent.d.ts.map +1 -0
  41. package/dist/agents/agents/git-agent.js +200 -0
  42. package/dist/agents/agents/git-agent.js.map +1 -0
  43. package/dist/agents/agents/github-release-agent.d.ts +65 -0
  44. package/dist/agents/agents/github-release-agent.d.ts.map +1 -0
  45. package/dist/agents/agents/github-release-agent.js +439 -0
  46. package/dist/agents/agents/github-release-agent.js.map +1 -0
  47. package/dist/agents/agents/package-agent.d.ts +33 -0
  48. package/dist/agents/agents/package-agent.d.ts.map +1 -0
  49. package/dist/agents/agents/package-agent.js +233 -0
  50. package/dist/agents/agents/package-agent.js.map +1 -0
  51. package/dist/agents/agents/planner.d.ts +26 -0
  52. package/dist/agents/agents/planner.d.ts.map +1 -0
  53. package/dist/agents/agents/planner.js +222 -0
  54. package/dist/agents/agents/planner.js.map +1 -0
  55. package/dist/agents/agents/reviewer.d.ts +34 -0
  56. package/dist/agents/agents/reviewer.d.ts.map +1 -0
  57. package/dist/agents/agents/reviewer.js +159 -0
  58. package/dist/agents/agents/reviewer.js.map +1 -0
  59. package/dist/agents/agents/runner.d.ts +73 -0
  60. package/dist/agents/agents/runner.d.ts.map +1 -0
  61. package/dist/agents/agents/runner.js +299 -0
  62. package/dist/agents/agents/runner.js.map +1 -0
  63. package/dist/agents/agents/security-agent.d.ts +33 -0
  64. package/dist/agents/agents/security-agent.d.ts.map +1 -0
  65. package/dist/agents/agents/security-agent.js +184 -0
  66. package/dist/agents/agents/security-agent.js.map +1 -0
  67. package/dist/agents/agents/tester.d.ts +96 -0
  68. package/dist/agents/agents/tester.d.ts.map +1 -0
  69. package/dist/agents/agents/tester.js +410 -0
  70. package/dist/agents/agents/tester.js.map +1 -0
  71. package/dist/agents/agents/writer.d.ts +51 -0
  72. package/dist/agents/agents/writer.d.ts.map +1 -0
  73. package/dist/agents/agents/writer.js +384 -0
  74. package/dist/agents/agents/writer.js.map +1 -0
  75. package/dist/agents/context-vault.d.ts +49 -0
  76. package/dist/agents/context-vault.d.ts.map +1 -0
  77. package/dist/agents/context-vault.js +134 -0
  78. package/dist/agents/context-vault.js.map +1 -0
  79. package/dist/agents/orchestrator.d.ts +97 -0
  80. package/dist/agents/orchestrator.d.ts.map +1 -0
  81. package/dist/agents/orchestrator.js +696 -0
  82. package/dist/agents/orchestrator.js.map +1 -0
  83. package/dist/agents/utils/file-tree.d.ts +28 -0
  84. package/dist/agents/utils/file-tree.d.ts.map +1 -0
  85. package/dist/agents/utils/file-tree.js +93 -0
  86. package/dist/agents/utils/file-tree.js.map +1 -0
  87. package/dist/cli/agent.d.ts +25 -0
  88. package/dist/cli/agent.d.ts.map +1 -0
  89. package/dist/cli/agent.js +374 -0
  90. package/dist/cli/agent.js.map +1 -0
  91. package/dist/cli/benchmark.d.ts +24 -0
  92. package/dist/cli/benchmark.d.ts.map +1 -0
  93. package/dist/cli/benchmark.js +235 -0
  94. package/dist/cli/benchmark.js.map +1 -0
  95. package/dist/cli/cache.d.ts +12 -0
  96. package/dist/cli/cache.d.ts.map +1 -0
  97. package/dist/cli/cache.js +58 -0
  98. package/dist/cli/cache.js.map +1 -0
  99. package/dist/cli/chat.d.ts +37 -0
  100. package/dist/cli/chat.d.ts.map +1 -0
  101. package/dist/cli/chat.js +393 -0
  102. package/dist/cli/chat.js.map +1 -0
  103. package/dist/cli/commands.d.ts +24 -0
  104. package/dist/cli/commands.d.ts.map +1 -0
  105. package/dist/cli/commands.js +18 -0
  106. package/dist/cli/commands.js.map +1 -0
  107. package/dist/cli/config.d.ts +19 -0
  108. package/dist/cli/config.d.ts.map +1 -0
  109. package/dist/cli/config.js +162 -0
  110. package/dist/cli/config.js.map +1 -0
  111. package/dist/cli/dashboard.d.ts +34 -0
  112. package/dist/cli/dashboard.d.ts.map +1 -0
  113. package/dist/cli/dashboard.js +126 -0
  114. package/dist/cli/dashboard.js.map +1 -0
  115. package/dist/cli/doctor.d.ts +68 -0
  116. package/dist/cli/doctor.d.ts.map +1 -0
  117. package/dist/cli/doctor.js +585 -0
  118. package/dist/cli/doctor.js.map +1 -0
  119. package/dist/cli/edit.d.ts +11 -0
  120. package/dist/cli/edit.d.ts.map +1 -0
  121. package/dist/cli/edit.js +86 -0
  122. package/dist/cli/edit.js.map +1 -0
  123. package/dist/cli/execute.d.ts +25 -0
  124. package/dist/cli/execute.d.ts.map +1 -0
  125. package/dist/cli/execute.js +186 -0
  126. package/dist/cli/execute.js.map +1 -0
  127. package/dist/cli/federation.d.ts +31 -0
  128. package/dist/cli/federation.d.ts.map +1 -0
  129. package/dist/cli/federation.js +387 -0
  130. package/dist/cli/federation.js.map +1 -0
  131. package/dist/cli/history.d.ts +22 -0
  132. package/dist/cli/history.d.ts.map +1 -0
  133. package/dist/cli/history.js +140 -0
  134. package/dist/cli/history.js.map +1 -0
  135. package/dist/cli/init.d.ts +49 -0
  136. package/dist/cli/init.d.ts.map +1 -0
  137. package/dist/cli/init.js +423 -0
  138. package/dist/cli/init.js.map +1 -0
  139. package/dist/cli/learn.d.ts +31 -0
  140. package/dist/cli/learn.d.ts.map +1 -0
  141. package/dist/cli/learn.js +320 -0
  142. package/dist/cli/learn.js.map +1 -0
  143. package/dist/cli/memory.d.ts +38 -0
  144. package/dist/cli/memory.d.ts.map +1 -0
  145. package/dist/cli/memory.js +295 -0
  146. package/dist/cli/memory.js.map +1 -0
  147. package/dist/cli/model-picker.d.ts +18 -0
  148. package/dist/cli/model-picker.d.ts.map +1 -0
  149. package/dist/cli/model-picker.js +225 -0
  150. package/dist/cli/model-picker.js.map +1 -0
  151. package/dist/cli/models.d.ts +11 -0
  152. package/dist/cli/models.d.ts.map +1 -0
  153. package/dist/cli/models.js +132 -0
  154. package/dist/cli/models.js.map +1 -0
  155. package/dist/cli/plan.d.ts +11 -0
  156. package/dist/cli/plan.d.ts.map +1 -0
  157. package/dist/cli/plan.js +94 -0
  158. package/dist/cli/plan.js.map +1 -0
  159. package/dist/cli/plugins.d.ts +15 -0
  160. package/dist/cli/plugins.d.ts.map +1 -0
  161. package/dist/cli/plugins.js +123 -0
  162. package/dist/cli/plugins.js.map +1 -0
  163. package/dist/cli/router.d.ts +20 -0
  164. package/dist/cli/router.d.ts.map +1 -0
  165. package/dist/cli/router.js +142 -0
  166. package/dist/cli/router.js.map +1 -0
  167. package/dist/cli/run.d.ts +22 -0
  168. package/dist/cli/run.d.ts.map +1 -0
  169. package/dist/cli/run.js +110 -0
  170. package/dist/cli/run.js.map +1 -0
  171. package/dist/cli/sandbox.d.ts +27 -0
  172. package/dist/cli/sandbox.d.ts.map +1 -0
  173. package/dist/cli/sandbox.js +264 -0
  174. package/dist/cli/sandbox.js.map +1 -0
  175. package/dist/cli/sdk.d.ts +27 -0
  176. package/dist/cli/sdk.d.ts.map +1 -0
  177. package/dist/cli/sdk.js +204 -0
  178. package/dist/cli/sdk.js.map +1 -0
  179. package/dist/cli/stats.d.ts +18 -0
  180. package/dist/cli/stats.d.ts.map +1 -0
  181. package/dist/cli/stats.js +78 -0
  182. package/dist/cli/stats.js.map +1 -0
  183. package/dist/cli/team.d.ts +42 -0
  184. package/dist/cli/team.d.ts.map +1 -0
  185. package/dist/cli/team.js +473 -0
  186. package/dist/cli/team.js.map +1 -0
  187. package/dist/cli/workflow.d.ts +27 -0
  188. package/dist/cli/workflow.d.ts.map +1 -0
  189. package/dist/cli/workflow.js +347 -0
  190. package/dist/cli/workflow.js.map +1 -0
  191. package/dist/config/manager.d.ts +37 -0
  192. package/dist/config/manager.d.ts.map +1 -0
  193. package/dist/config/manager.js +147 -0
  194. package/dist/config/manager.js.map +1 -0
  195. package/dist/config/types.d.ts +53 -0
  196. package/dist/config/types.d.ts.map +1 -0
  197. package/dist/config/types.js +2 -0
  198. package/dist/config/types.js.map +1 -0
  199. package/dist/context/cache.d.ts +27 -0
  200. package/dist/context/cache.d.ts.map +1 -0
  201. package/dist/context/cache.js +116 -0
  202. package/dist/context/cache.js.map +1 -0
  203. package/dist/context/history.d.ts +87 -0
  204. package/dist/context/history.d.ts.map +1 -0
  205. package/dist/context/history.js +249 -0
  206. package/dist/context/history.js.map +1 -0
  207. package/dist/context/parser.d.ts +61 -0
  208. package/dist/context/parser.d.ts.map +1 -0
  209. package/dist/context/parser.js +194 -0
  210. package/dist/context/parser.js.map +1 -0
  211. package/dist/federation/client.d.ts +49 -0
  212. package/dist/federation/client.d.ts.map +1 -0
  213. package/dist/federation/client.js +239 -0
  214. package/dist/federation/client.js.map +1 -0
  215. package/dist/federation/protocol.d.ts +155 -0
  216. package/dist/federation/protocol.d.ts.map +1 -0
  217. package/dist/federation/protocol.js +57 -0
  218. package/dist/federation/protocol.js.map +1 -0
  219. package/dist/federation/server.d.ts +25 -0
  220. package/dist/federation/server.d.ts.map +1 -0
  221. package/dist/federation/server.js +401 -0
  222. package/dist/federation/server.js.map +1 -0
  223. package/dist/index.d.ts +67 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +93 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/inference/factory.d.ts +20 -0
  228. package/dist/inference/factory.d.ts.map +1 -0
  229. package/dist/inference/factory.js +46 -0
  230. package/dist/inference/factory.js.map +1 -0
  231. package/dist/inference/gemini-adapter.d.ts +17 -0
  232. package/dist/inference/gemini-adapter.d.ts.map +1 -0
  233. package/dist/inference/gemini-adapter.js +176 -0
  234. package/dist/inference/gemini-adapter.js.map +1 -0
  235. package/dist/inference/groq-adapter.d.ts +17 -0
  236. package/dist/inference/groq-adapter.d.ts.map +1 -0
  237. package/dist/inference/groq-adapter.js +103 -0
  238. package/dist/inference/groq-adapter.js.map +1 -0
  239. package/dist/inference/interface.d.ts +49 -0
  240. package/dist/inference/interface.d.ts.map +1 -0
  241. package/dist/inference/interface.js +2 -0
  242. package/dist/inference/interface.js.map +1 -0
  243. package/dist/inference/local-adapter.d.ts +35 -0
  244. package/dist/inference/local-adapter.d.ts.map +1 -0
  245. package/dist/inference/local-adapter.js +311 -0
  246. package/dist/inference/local-adapter.js.map +1 -0
  247. package/dist/inference/model-catalog.d.ts +53 -0
  248. package/dist/inference/model-catalog.d.ts.map +1 -0
  249. package/dist/inference/model-catalog.js +306 -0
  250. package/dist/inference/model-catalog.js.map +1 -0
  251. package/dist/inference/nim-adapter.d.ts +17 -0
  252. package/dist/inference/nim-adapter.d.ts.map +1 -0
  253. package/dist/inference/nim-adapter.js +103 -0
  254. package/dist/inference/nim-adapter.js.map +1 -0
  255. package/dist/inference/openrouter-adapter.d.ts +17 -0
  256. package/dist/inference/openrouter-adapter.d.ts.map +1 -0
  257. package/dist/inference/openrouter-adapter.js +105 -0
  258. package/dist/inference/openrouter-adapter.js.map +1 -0
  259. package/dist/inference/sse.d.ts +20 -0
  260. package/dist/inference/sse.d.ts.map +1 -0
  261. package/dist/inference/sse.js +91 -0
  262. package/dist/inference/sse.js.map +1 -0
  263. package/dist/learning/agent-stats.d.ts +109 -0
  264. package/dist/learning/agent-stats.d.ts.map +1 -0
  265. package/dist/learning/agent-stats.js +240 -0
  266. package/dist/learning/agent-stats.js.map +1 -0
  267. package/dist/learning/benchmark.d.ts +161 -0
  268. package/dist/learning/benchmark.d.ts.map +1 -0
  269. package/dist/learning/benchmark.js +589 -0
  270. package/dist/learning/benchmark.js.map +1 -0
  271. package/dist/learning/cost-tracker.d.ts +101 -0
  272. package/dist/learning/cost-tracker.d.ts.map +1 -0
  273. package/dist/learning/cost-tracker.js +224 -0
  274. package/dist/learning/cost-tracker.js.map +1 -0
  275. package/dist/learning/feedback.d.ts +88 -0
  276. package/dist/learning/feedback.d.ts.map +1 -0
  277. package/dist/learning/feedback.js +169 -0
  278. package/dist/learning/feedback.js.map +1 -0
  279. package/dist/learning/hybrid-router.d.ts +201 -0
  280. package/dist/learning/hybrid-router.d.ts.map +1 -0
  281. package/dist/learning/hybrid-router.js +450 -0
  282. package/dist/learning/hybrid-router.js.map +1 -0
  283. package/dist/learning/model-compare.d.ts +76 -0
  284. package/dist/learning/model-compare.d.ts.map +1 -0
  285. package/dist/learning/model-compare.js +252 -0
  286. package/dist/learning/model-compare.js.map +1 -0
  287. package/dist/learning/model-router.d.ts +68 -0
  288. package/dist/learning/model-router.d.ts.map +1 -0
  289. package/dist/learning/model-router.js +140 -0
  290. package/dist/learning/model-router.js.map +1 -0
  291. package/dist/learning/pattern-extractor.d.ts +99 -0
  292. package/dist/learning/pattern-extractor.d.ts.map +1 -0
  293. package/dist/learning/pattern-extractor.js +310 -0
  294. package/dist/learning/pattern-extractor.js.map +1 -0
  295. package/dist/learning/scorer.d.ts +51 -0
  296. package/dist/learning/scorer.d.ts.map +1 -0
  297. package/dist/learning/scorer.js +64 -0
  298. package/dist/learning/scorer.js.map +1 -0
  299. package/dist/learning/self-improver.d.ts +48 -0
  300. package/dist/learning/self-improver.d.ts.map +1 -0
  301. package/dist/learning/self-improver.js +161 -0
  302. package/dist/learning/self-improver.js.map +1 -0
  303. package/dist/memory/embedder.d.ts +65 -0
  304. package/dist/memory/embedder.d.ts.map +1 -0
  305. package/dist/memory/embedder.js +424 -0
  306. package/dist/memory/embedder.js.map +1 -0
  307. package/dist/memory/memory-integration.d.ts +56 -0
  308. package/dist/memory/memory-integration.d.ts.map +1 -0
  309. package/dist/memory/memory-integration.js +95 -0
  310. package/dist/memory/memory-integration.js.map +1 -0
  311. package/dist/memory/trajectory-store.d.ts +149 -0
  312. package/dist/memory/trajectory-store.d.ts.map +1 -0
  313. package/dist/memory/trajectory-store.js +476 -0
  314. package/dist/memory/trajectory-store.js.map +1 -0
  315. package/dist/memory/vector-store.d.ts +78 -0
  316. package/dist/memory/vector-store.d.ts.map +1 -0
  317. package/dist/memory/vector-store.js +186 -0
  318. package/dist/memory/vector-store.js.map +1 -0
  319. package/dist/plugins/agent-plugin.d.ts +73 -0
  320. package/dist/plugins/agent-plugin.d.ts.map +1 -0
  321. package/dist/plugins/agent-plugin.js +199 -0
  322. package/dist/plugins/agent-plugin.js.map +1 -0
  323. package/dist/plugins/registry.d.ts +61 -0
  324. package/dist/plugins/registry.d.ts.map +1 -0
  325. package/dist/plugins/registry.js +67 -0
  326. package/dist/plugins/registry.js.map +1 -0
  327. package/dist/sandbox/images.d.ts +31 -0
  328. package/dist/sandbox/images.d.ts.map +1 -0
  329. package/dist/sandbox/images.js +129 -0
  330. package/dist/sandbox/images.js.map +1 -0
  331. package/dist/sandbox/manager.d.ts +134 -0
  332. package/dist/sandbox/manager.d.ts.map +1 -0
  333. package/dist/sandbox/manager.js +470 -0
  334. package/dist/sandbox/manager.js.map +1 -0
  335. package/dist/sandbox/types.d.ts +113 -0
  336. package/dist/sandbox/types.d.ts.map +1 -0
  337. package/dist/sandbox/types.js +107 -0
  338. package/dist/sandbox/types.js.map +1 -0
  339. package/dist/security/scanner.d.ts +53 -0
  340. package/dist/security/scanner.d.ts.map +1 -0
  341. package/dist/security/scanner.js +271 -0
  342. package/dist/security/scanner.js.map +1 -0
  343. package/dist/team/config.d.ts +50 -0
  344. package/dist/team/config.d.ts.map +1 -0
  345. package/dist/team/config.js +108 -0
  346. package/dist/team/config.js.map +1 -0
  347. package/dist/team/memory.d.ts +63 -0
  348. package/dist/team/memory.d.ts.map +1 -0
  349. package/dist/team/memory.js +282 -0
  350. package/dist/team/memory.js.map +1 -0
  351. package/dist/team/review.d.ts +123 -0
  352. package/dist/team/review.d.ts.map +1 -0
  353. package/dist/team/review.js +293 -0
  354. package/dist/team/review.js.map +1 -0
  355. package/dist/utils/env.d.ts +19 -0
  356. package/dist/utils/env.d.ts.map +1 -0
  357. package/dist/utils/env.js +250 -0
  358. package/dist/utils/env.js.map +1 -0
  359. package/dist/utils/logger.d.ts +11 -0
  360. package/dist/utils/logger.d.ts.map +1 -0
  361. package/dist/utils/logger.js +45 -0
  362. package/dist/utils/logger.js.map +1 -0
  363. package/dist/web-dashboard/server.d.ts +59 -0
  364. package/dist/web-dashboard/server.d.ts.map +1 -0
  365. package/dist/web-dashboard/server.js +418 -0
  366. package/dist/web-dashboard/server.js.map +1 -0
  367. package/dist/workflow/registry.d.ts +127 -0
  368. package/dist/workflow/registry.d.ts.map +1 -0
  369. package/dist/workflow/registry.js +482 -0
  370. package/dist/workflow/registry.js.map +1 -0
  371. package/dist/workflow/templates.d.ts +93 -0
  372. package/dist/workflow/templates.d.ts.map +1 -0
  373. package/dist/workflow/templates.js +481 -0
  374. package/dist/workflow/templates.js.map +1 -0
  375. package/package.json +78 -0
  376. package/src/web-dashboard/public/assets/index-B08nDkSB.css +1 -0
  377. package/src/web-dashboard/public/assets/index-BKL8YOFD.js +135 -0
  378. package/src/web-dashboard/public/assets/index-BKL8YOFD.js.map +1 -0
  379. package/src/web-dashboard/public/index.html +13 -0
@@ -0,0 +1,482 @@
1
+ /**
2
+ * Workflow Registry — GitHub-hosted marketplace for community workflow templates.
3
+ *
4
+ * The registry is a GitHub repo (agent-nuvira/workflows) that contains:
5
+ * index.json — Master index of all available templates
6
+ * templates/ — Directory of individual template files
7
+ * quick-fix.json
8
+ * security-audit.json
9
+ * ...
10
+ *
11
+ * Each template file is a JSON document matching the WorkflowTemplate interface
12
+ * extended with version, author, and source metadata.
13
+ *
14
+ * Commands:
15
+ * buff workflow search <query> — Search the GitHub registry
16
+ * buff workflow install <name> — Install a template from the registry
17
+ * buff workflow publish — Publish a local template to the registry
18
+ * buff workflow info <name> — Show template details from the registry
19
+ */
20
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'node:fs';
21
+ import { join } from 'node:path';
22
+ import { homedir } from 'node:os';
23
+ import { getWorkflowTemplate, isValidWorkflowTemplate, } from './templates.js';
24
+ import { logger } from '../utils/logger.js';
25
+ // ─── Constants ──────────────────────────────────────────────────────────────
26
+ /** GitHub raw content base URL for the workflow registry */
27
+ const REGISTRY_RAW_BASE = 'https://raw.githubusercontent.com/imdheerajKube/agent-nuvira/main';
28
+ /** GitHub API URL for the registry */
29
+ const REGISTRY_API_BASE = 'https://api.github.com/repos/imdheerajKube/agent-nuvira';
30
+ /** Local storage for installed registry templates */
31
+ const BUFF_DIR = join(homedir(), '.buff');
32
+ const INSTALLED_REGISTRY_DIR = join(BUFF_DIR, 'workflows', 'registry');
33
+ /** Cache file for the registry index */
34
+ const REGISTRY_CACHE_PATH = join(BUFF_DIR, 'workflows', 'registry-cache.json');
35
+ /** How long to cache the registry index (1 hour in ms) */
36
+ const REGISTRY_CACHE_TTL = 60 * 60 * 1000;
37
+ // ─── Helpers ────────────────────────────────────────────────────────────────
38
+ function ensureDirs() {
39
+ for (const dir of [INSTALLED_REGISTRY_DIR, join(BUFF_DIR, 'workflows')]) {
40
+ if (!existsSync(dir)) {
41
+ try {
42
+ mkdirSync(dir, { recursive: true });
43
+ }
44
+ catch { /* best-effort */ }
45
+ }
46
+ }
47
+ }
48
+ // ─── Registry Index ─────────────────────────────────────────────────────────
49
+ /**
50
+ * Fetch the registry index from GitHub (with TTL caching).
51
+ */
52
+ export async function fetchRegistryIndex() {
53
+ // Check cache first
54
+ const cached = readRegistryCache();
55
+ if (cached)
56
+ return cached;
57
+ try {
58
+ const response = await fetch(`${REGISTRY_RAW_BASE}/index.json`, {
59
+ headers: {
60
+ 'User-Agent': 'agent-nuvira/2.0',
61
+ 'Accept': 'application/json',
62
+ },
63
+ signal: AbortSignal.timeout(10000), // 10s timeout
64
+ });
65
+ if (!response.ok) {
66
+ logger.debug(`Registry index fetch failed (${response.status}), using cache`);
67
+ return cached || [];
68
+ }
69
+ const index = await response.json();
70
+ if (!index.templates || !Array.isArray(index.templates)) {
71
+ logger.debug('Invalid registry index format');
72
+ return cached || [];
73
+ }
74
+ // Update cache
75
+ writeRegistryCache(index.templates);
76
+ return index.templates;
77
+ }
78
+ catch (err) {
79
+ logger.debug(`Failed to fetch registry index: ${err}`);
80
+ return cached || [];
81
+ }
82
+ }
83
+ /**
84
+ * Search the registry for templates matching a query.
85
+ */
86
+ export async function searchRegistry(query) {
87
+ const templates = await fetchRegistryIndex();
88
+ const q = query.toLowerCase();
89
+ return templates.filter((t) => {
90
+ const searchable = `${t.id} ${t.name} ${t.description} ${t.tags.join(' ')}`.toLowerCase();
91
+ return searchable.includes(q);
92
+ });
93
+ }
94
+ /**
95
+ * Get a specific template entry from the registry by ID.
96
+ */
97
+ export async function getRegistryEntry(id) {
98
+ const templates = await fetchRegistryIndex();
99
+ return templates.find((t) => t.id === id) || null;
100
+ }
101
+ // ─── Install ────────────────────────────────────────────────────────────────
102
+ /**
103
+ * Install a workflow template from the registry.
104
+ *
105
+ * Downloads the template JSON file from GitHub and saves it to
106
+ * ~/.buff/workflows/registry/<id>.json where the workflow system
107
+ * can auto-discover it.
108
+ *
109
+ * @param templateId The template ID to install
110
+ * @returns The installed WorkflowTemplate, or null if failed
111
+ */
112
+ export async function installTemplate(templateId) {
113
+ // First check if it exists in the registry index
114
+ const entry = await getRegistryEntry(templateId);
115
+ if (!entry) {
116
+ logger.error(`Template '${templateId}' not found in the registry.`);
117
+ logger.info('Search available templates: buff workflow search <query>');
118
+ return null;
119
+ }
120
+ // Check if already installed
121
+ const localPath = join(INSTALLED_REGISTRY_DIR, `${templateId}.json`);
122
+ if (existsSync(localPath)) {
123
+ logger.info(`Template '${templateId}' is already installed.`);
124
+ logger.info('To reinstall, first remove it: rm ~/.buff/workflows/registry/<id>.json');
125
+ // Still return the existing one so it can be used
126
+ return readLocalTemplate(templateId);
127
+ }
128
+ // Download the template file
129
+ try {
130
+ const url = `${REGISTRY_RAW_BASE}/templates/${templateId}.json`;
131
+ const response = await fetch(url, {
132
+ headers: {
133
+ 'User-Agent': 'agent-nuvira/2.0',
134
+ 'Accept': 'application/json',
135
+ },
136
+ signal: AbortSignal.timeout(15000),
137
+ });
138
+ if (!response.ok) {
139
+ logger.error(`Failed to download template '${templateId}' (${response.status})`);
140
+ return null;
141
+ }
142
+ const template = await response.json();
143
+ // Validate the template
144
+ if (!isValidWorkflowTemplate(template)) {
145
+ logger.error(`Downloaded template '${templateId}' is not a valid workflow template.`);
146
+ return null;
147
+ }
148
+ // Save locally
149
+ ensureDirs();
150
+ const enriched = {
151
+ ...template,
152
+ _registryVersion: entry.version,
153
+ _registryAuthor: entry.author,
154
+ _installedAt: new Date().toISOString(),
155
+ };
156
+ writeFileSync(localPath, JSON.stringify(enriched, null, 2), 'utf-8');
157
+ logger.success(`Installed workflow template: ${template.name} v${entry.version}`);
158
+ return template;
159
+ }
160
+ catch (err) {
161
+ logger.error(`Failed to install template '${templateId}': ${err instanceof Error ? err.message : String(err)}`);
162
+ logger.info('Check your internet connection or try again later.');
163
+ return null;
164
+ }
165
+ }
166
+ /**
167
+ * Read an installed template from local storage.
168
+ */
169
+ function readLocalTemplate(templateId) {
170
+ const localPath = join(INSTALLED_REGISTRY_DIR, `${templateId}.json`);
171
+ try {
172
+ if (!existsSync(localPath))
173
+ return null;
174
+ const content = readFileSync(localPath, 'utf-8');
175
+ const template = JSON.parse(content);
176
+ // Strip internal metadata before returning
177
+ delete template._registryVersion;
178
+ delete template._registryAuthor;
179
+ delete template._installedAt;
180
+ return template;
181
+ }
182
+ catch {
183
+ return null;
184
+ }
185
+ }
186
+ /**
187
+ * Get all locally installed registry templates.
188
+ */
189
+ export function getInstalledTemplates() {
190
+ ensureDirs();
191
+ const templates = [];
192
+ try {
193
+ const files = readdirSync(INSTALLED_REGISTRY_DIR).filter((f) => f.endsWith('.json'));
194
+ for (const file of files) {
195
+ const template = readLocalTemplate(file.replace('.json', ''));
196
+ if (template) {
197
+ templates.push(template);
198
+ }
199
+ }
200
+ }
201
+ catch {
202
+ // Directory might not exist yet
203
+ }
204
+ return templates;
205
+ }
206
+ /**
207
+ * Validate a local workflow template for publishing.
208
+ * Checks for required fields, valid steps, etc.
209
+ */
210
+ export function validateForPublish(templateId) {
211
+ // Find the template in local workflows
212
+ const localPath = join(BUFF_DIR, 'workflows', `${templateId}.json`);
213
+ if (!existsSync(localPath)) {
214
+ // Also check .buff/workflows/registry/
215
+ const registryPath = join(INSTALLED_REGISTRY_DIR, `${templateId}.json`);
216
+ if (!existsSync(registryPath)) {
217
+ return {
218
+ valid: false,
219
+ errors: [`Template '${templateId}' not found in ~/.buff/workflows/ or ~/.buff/workflows/registry/`],
220
+ warnings: [],
221
+ };
222
+ }
223
+ }
224
+ try {
225
+ const filePath = existsSync(join(BUFF_DIR, 'workflows', `${templateId}.json`))
226
+ ? join(BUFF_DIR, 'workflows', `${templateId}.json`)
227
+ : join(INSTALLED_REGISTRY_DIR, `${templateId}.json`);
228
+ const content = readFileSync(filePath, 'utf-8');
229
+ const template = JSON.parse(content);
230
+ const errors = [];
231
+ const warnings = [];
232
+ // Required fields
233
+ if (!template.id || typeof template.id !== 'string')
234
+ errors.push('Missing or invalid: id (string)');
235
+ if (!template.name || typeof template.name !== 'string')
236
+ errors.push('Missing or invalid: name (string)');
237
+ if (!template.description || typeof template.description !== 'string')
238
+ errors.push('Missing or invalid: description (string)');
239
+ if (!Array.isArray(template.steps) || template.steps.length === 0)
240
+ errors.push('Missing or invalid: steps (non-empty array)');
241
+ // Validate steps
242
+ if (Array.isArray(template.steps)) {
243
+ for (let i = 0; i < template.steps.length; i++) {
244
+ const step = template.steps[i];
245
+ if (!step.agentType || typeof step.agentType !== 'string') {
246
+ errors.push(`steps[${i}]: missing or invalid agentType`);
247
+ }
248
+ if (!step.description || typeof step.description !== 'string') {
249
+ errors.push(`steps[${i}]: missing or invalid description`);
250
+ }
251
+ }
252
+ }
253
+ // ID format
254
+ if (template.id && typeof template.id === 'string' && !/^[a-z0-9-]+$/.test(template.id)) {
255
+ errors.push('Template ID must be lowercase alphanumeric with hyphens only');
256
+ }
257
+ // Warnings
258
+ if (!template.recommendedModels)
259
+ warnings.push('No recommendedModels defined — agents will use default provider');
260
+ if (!template.useMemory && template.useMemory !== false)
261
+ warnings.push('useMemory not set — defaulting to false');
262
+ if (template.description && typeof template.description === 'string' && template.description.length > 200) {
263
+ warnings.push('Description is longer than 200 characters — consider shortening');
264
+ }
265
+ return { valid: errors.length === 0, errors, warnings };
266
+ }
267
+ catch (err) {
268
+ return {
269
+ valid: false,
270
+ errors: [`Failed to read template: ${err instanceof Error ? err.message : String(err)}`],
271
+ warnings: [],
272
+ };
273
+ }
274
+ }
275
+ /**
276
+ * Prepare a local template for publishing.
277
+ * Returns a JSON string that can be submitted as a PR to the registry.
278
+ */
279
+ export function prepareForPublish(templateId) {
280
+ const validation = validateForPublish(templateId);
281
+ if (!validation.valid) {
282
+ logger.error('Validation failed. Fix these issues:');
283
+ for (const err of validation.errors) {
284
+ logger.error(` ${err}`);
285
+ }
286
+ return null;
287
+ }
288
+ // Find and read the template
289
+ const localPath = join(BUFF_DIR, 'workflows', `${templateId}.json`);
290
+ const filePath = existsSync(localPath)
291
+ ? localPath
292
+ : join(INSTALLED_REGISTRY_DIR, `${templateId}.json`);
293
+ try {
294
+ const content = readFileSync(filePath, 'utf-8');
295
+ const template = JSON.parse(content);
296
+ // Add/update metadata for publishing
297
+ const publishData = {
298
+ id: template.id,
299
+ name: template.name,
300
+ description: template.description,
301
+ version: template.version || '1.0.0',
302
+ author: template.author || 'anonymous',
303
+ steps: template.steps,
304
+ recommendedModels: template.recommendedModels || {},
305
+ useMemory: template.useMemory || false,
306
+ tags: template.tags || [],
307
+ };
308
+ return JSON.stringify(publishData, null, 2);
309
+ }
310
+ catch (err) {
311
+ logger.error(`Failed to prepare template for publish: ${err}`);
312
+ return null;
313
+ }
314
+ }
315
+ /**
316
+ * Get the URL for submitting a new template to the registry.
317
+ */
318
+ export function getPublishUrl() {
319
+ return 'https://github.com/imdheerajKube/agent-nuvira/issues/new?template=template-submission.md';
320
+ }
321
+ // ─── Version & Dependency Resolution ────────────────────────────────────────
322
+ /**
323
+ * Compare two semantic version strings.
324
+ * Returns 1 if a > b, -1 if a < b, 0 if equal.
325
+ */
326
+ export function compareVersions(a, b) {
327
+ const aParts = a.split('.').map(Number);
328
+ const bParts = b.split('.').map(Number);
329
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
330
+ const aVal = aParts[i] || 0;
331
+ const bVal = bParts[i] || 0;
332
+ if (aVal > bVal)
333
+ return 1;
334
+ if (aVal < bVal)
335
+ return -1;
336
+ }
337
+ return 0;
338
+ }
339
+ /**
340
+ * Check if a version satisfies a semver constraint (e.g., ">=1.0.0", "^2.0.0").
341
+ */
342
+ export function versionSatisfies(version, constraint) {
343
+ // Simple prefix-based constraint check
344
+ if (constraint.startsWith('>=')) {
345
+ return compareVersions(version, constraint.slice(2)) >= 0;
346
+ }
347
+ if (constraint.startsWith('<=')) {
348
+ return compareVersions(version, constraint.slice(2)) <= 0;
349
+ }
350
+ if (constraint.startsWith('^')) {
351
+ // ^1.2.3 means >=1.2.3 and <2.0.0
352
+ const target = constraint.slice(1).split('.').map(Number);
353
+ const current = version.split('.').map(Number);
354
+ if (compareVersions(version, constraint.slice(1)) < 0)
355
+ return false;
356
+ if (target[0] !== undefined && (current[0] || 0) > target[0])
357
+ return false;
358
+ return true;
359
+ }
360
+ if (constraint.startsWith('~')) {
361
+ // ~1.2.3 means >=1.2.3 and <1.3.0
362
+ const target = constraint.slice(1).split('.').map(Number);
363
+ const current = version.split('.').map(Number);
364
+ if (compareVersions(version, constraint.slice(1)) < 0)
365
+ return false;
366
+ if (target[0] !== undefined && (current[0] || 0) !== target[0])
367
+ return false;
368
+ if (target[1] !== undefined && (current[1] || 0) > target[1])
369
+ return false;
370
+ return true;
371
+ }
372
+ // Exact match or bare number
373
+ return compareVersions(version, constraint) === 0;
374
+ }
375
+ /**
376
+ * Check if an installed template has a newer version available in the registry.
377
+ */
378
+ export async function checkForUpgrades() {
379
+ const installed = getInstalledTemplates();
380
+ if (installed.length === 0)
381
+ return [];
382
+ const registry = await fetchRegistryIndex();
383
+ const upgrades = [];
384
+ for (const t of installed) {
385
+ if (!t.version || !t.id)
386
+ continue;
387
+ const entry = registry.find((e) => e.id === t.id);
388
+ if (entry && compareVersions(entry.version, t.version) > 0) {
389
+ upgrades.push({ id: t.id, currentVersion: t.version, latestVersion: entry.version });
390
+ }
391
+ }
392
+ return upgrades;
393
+ }
394
+ /**
395
+ * Resolve dependencies for a template.
396
+ * Returns any missing dependencies that need to be installed.
397
+ */
398
+ export async function resolveDependencies(template) {
399
+ const deps = template.dependencies || [];
400
+ const met = [];
401
+ const missing = [];
402
+ for (const dep of deps) {
403
+ switch (dep.type) {
404
+ case 'template': {
405
+ // Check if the dependency template exists (built-in or installed)
406
+ const builtin = getWorkflowTemplate(dep.name);
407
+ if (builtin) {
408
+ met.push(dep);
409
+ continue;
410
+ }
411
+ const localPath = join(INSTALLED_REGISTRY_DIR, `${dep.name}.json`);
412
+ if (existsSync(localPath)) {
413
+ met.push(dep);
414
+ continue;
415
+ }
416
+ // Check registry
417
+ const entry = await getRegistryEntry(dep.name);
418
+ if (entry) {
419
+ missing.push(dep);
420
+ }
421
+ else {
422
+ missing.push({ ...dep, description: `${dep.description || dep.name} (not found in registry)` });
423
+ }
424
+ break;
425
+ }
426
+ case 'npm':
427
+ case 'cli':
428
+ // For npm/cli dependencies, we can't easily verify during a template install
429
+ // Just record them as met-with-caveats
430
+ met.push(dep);
431
+ break;
432
+ }
433
+ }
434
+ return { met, missing };
435
+ }
436
+ /**
437
+ * Validate that all dependencies of a template are satisfied.
438
+ * Returns true if all dependencies are met or optional.
439
+ */
440
+ export function dependenciesMet(deps) {
441
+ return deps.every((d) => d.optional);
442
+ }
443
+ // ─── Registry Cache ─────────────────────────────────────────────────────────
444
+ function readRegistryCache() {
445
+ try {
446
+ if (!existsSync(REGISTRY_CACHE_PATH))
447
+ return null;
448
+ const raw = readFileSync(REGISTRY_CACHE_PATH, 'utf-8');
449
+ const cached = JSON.parse(raw);
450
+ // Check TTL
451
+ if (Date.now() - cached.timestamp > REGISTRY_CACHE_TTL)
452
+ return null;
453
+ return cached.templates;
454
+ }
455
+ catch {
456
+ return null;
457
+ }
458
+ }
459
+ function writeRegistryCache(templates) {
460
+ try {
461
+ ensureDirs();
462
+ const data = { timestamp: Date.now(), templates };
463
+ writeFileSync(REGISTRY_CACHE_PATH, JSON.stringify(data, null, 2), 'utf-8');
464
+ }
465
+ catch {
466
+ // Non-critical
467
+ }
468
+ }
469
+ /**
470
+ * Clear the registry index cache.
471
+ */
472
+ export function clearRegistryCache() {
473
+ try {
474
+ if (existsSync(REGISTRY_CACHE_PATH)) {
475
+ writeFileSync(REGISTRY_CACHE_PATH, JSON.stringify({ timestamp: 0, templates: [] }), 'utf-8');
476
+ }
477
+ }
478
+ catch {
479
+ // Non-critical
480
+ }
481
+ }
482
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/workflow/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Workflow Templates — Pre-built agent pipeline templates.
3
+ *
4
+ * Each template defines a sequence of agent steps for common tasks.
5
+ * The WorkflowEngine uses these to pre-fill the orchestrator's task plan,
6
+ * bypassing the PlannerAgent when a fixed workflow is desired.
7
+ *
8
+ * Built-in templates:
9
+ * - quick-fix: gather context → edit → run → review (small, fast changes)
10
+ * - feature-implement: plan → gather → write → test → review (new features)
11
+ * - create-and-run: write → run → review (create from scratch + execute)
12
+ * - publish-release: test → build → version → publish (release pipeline)
13
+ */
14
+ import type { TaskStep } from '../agents/agent.js';
15
+ import type { OrchestratorOptions } from '../agents/orchestrator.js';
16
+ export interface WorkflowTemplate {
17
+ /** Template identifier (used in CLI: `buff workflow run quick-fix`) */
18
+ id: string;
19
+ /** Human-readable name */
20
+ name: string;
21
+ /** Short description */
22
+ description: string;
23
+ /** Ordered agent steps that form the pipeline */
24
+ steps: WorkflowStep[];
25
+ /** Recommended model routing for this workflow */
26
+ recommendedModels?: Partial<Record<string, string>>;
27
+ /** Whether to use memory for this workflow type */
28
+ useMemory?: boolean;
29
+ /** Semantic version (for registry-published templates) */
30
+ version?: string;
31
+ /** Author name or GitHub handle (for registry-published templates) */
32
+ author?: string;
33
+ /** Tags for categorization (e.g., ['test', 'release', 'security']) */
34
+ tags?: string[];
35
+ /**
36
+ * Template and package dependencies required by this template.
37
+ * Used for version resolution and dependency checking during install.
38
+ */
39
+ dependencies?: WorkflowDependency[];
40
+ }
41
+ /**
42
+ * A dependency declaration for a workflow template.
43
+ * Can reference other templates, npm packages, or CLI tools.
44
+ */
45
+ export interface WorkflowDependency {
46
+ /** Type of dependency: 'template' | 'npm' | 'cli' */
47
+ type: 'template' | 'npm' | 'cli';
48
+ /** Name/identifier of the dependency */
49
+ name: string;
50
+ /** Semantic version constraint (e.g., ">=1.0.0", "^2.0.0") */
51
+ version?: string;
52
+ /** Whether this dependency is optional */
53
+ optional?: boolean;
54
+ /** Description of why this dependency is needed */
55
+ description?: string;
56
+ }
57
+ export interface WorkflowStep {
58
+ /** Agent type (must be registered in Orchestrator's createAgent) */
59
+ agentType: string;
60
+ /** Description of what this step does (becomes the task description) */
61
+ description: string;
62
+ /** IDs of steps this step depends on (index-based: ['step-0', 'step-1']) */
63
+ dependsOn: string[];
64
+ }
65
+ /**
66
+ * Get all available workflow templates.
67
+ */
68
+ export declare function getWorkflowTemplates(): WorkflowTemplate[];
69
+ /**
70
+ * Get a specific workflow template by ID.
71
+ */
72
+ export declare function getWorkflowTemplate(id: string): WorkflowTemplate | undefined;
73
+ /**
74
+ * Build a task plan from a workflow template, filling in the user's goal.
75
+ * Each step gets a stable ID (step-0, step-1, etc.) and the dependsOn
76
+ * references are translated from index-based to ID-based.
77
+ */
78
+ export declare function buildTaskPlanFromTemplate(template: WorkflowTemplate, goal: string): TaskStep[];
79
+ /**
80
+ * Build OrchestratorOptions from a workflow template.
81
+ * Merges the template's recommended models with user overrides.
82
+ */
83
+ /**
84
+ * Validate that an object is a valid WorkflowTemplate.
85
+ * Used by the workflow registry when installing templates.
86
+ */
87
+ export declare function isValidWorkflowTemplate(obj: unknown): obj is WorkflowTemplate;
88
+ /**
89
+ * Build OrchestratorOptions from a workflow template.
90
+ * Merges the template's recommended models with user overrides.
91
+ */
92
+ export declare function buildWorkflowOptions(template: WorkflowTemplate, userOptions?: Partial<OrchestratorOptions>): OrchestratorOptions;
93
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/workflow/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,IAAI,EAAE,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;IACjC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AA0ZD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,GACX,QAAQ,EAAE,CAQZ;AAED;;;GAGG;AACH;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAgB7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC7C,mBAAmB,CAUrB"}