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,59 @@
1
+ /**
2
+ * Web Dashboard Server — Serves the Agent-Baba-D dashboard UI and data APIs.
3
+ *
4
+ * Uses only Node.js built-in modules (no Express, no WebSocket libraries):
5
+ * - Static files: HTML, CSS, JS from public/
6
+ * - REST API: cost, history, benchmark, memory, health data
7
+ * - SSE (Server-Sent Events): real-time updates
8
+ *
9
+ * Start with: buff dashboard
10
+ * Opens at: http://localhost:3030
11
+ */
12
+ import { createServer } from 'node:http';
13
+ /**
14
+ * A real-time DAG state that the orchestrator can push updates to.
15
+ * Reset before each new execution. Served via /api/dag and SSE events.
16
+ */
17
+ interface DAGNode {
18
+ id: string;
19
+ agentType: string;
20
+ status: 'pending' | 'running' | 'completed' | 'failed';
21
+ description: string;
22
+ summary?: string;
23
+ startedAt?: number;
24
+ completedAt?: number;
25
+ }
26
+ interface DAGEdge {
27
+ from: string;
28
+ to: string;
29
+ }
30
+ /**
31
+ * Called by the orchestrator to push a DAG update in real time.
32
+ * Clears the pipeline when a new execution starts.
33
+ */
34
+ export declare function pushDAGUpdate(update: {
35
+ pipelineId?: string;
36
+ pipelineDescription?: string;
37
+ nodes: Array<Omit<DAGNode, 'startedAt' | 'completedAt'>>;
38
+ edges: DAGEdge[];
39
+ }): void;
40
+ /** Update a single node's status (called by orchestrator as each agent finishes) */
41
+ export declare function updateDAGNode(nodeId: string, update: {
42
+ status: DAGNode['status'];
43
+ summary?: string;
44
+ }): void;
45
+ /** Reset the DAG state for a fresh execution */
46
+ export declare function resetDAG(): void;
47
+ /** Read DAG data: in-memory first, fall back to recent trajectories */
48
+ export declare function readDAGData(): Record<string, unknown>;
49
+ export declare function createDashboardServer(): {
50
+ server: ReturnType<typeof createServer>;
51
+ port: number;
52
+ host: string;
53
+ };
54
+ export declare const DASHBOARD_DEFAULTS: {
55
+ PORT: number;
56
+ HOST: string;
57
+ };
58
+ export {};
59
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web-dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAmC,MAAM,WAAW,CAAC;AA4C1E;;;GAGG;AACH,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC;IACzD,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB,GAAG,IAAI,CAcP;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU3G;AAED,gDAAgD;AAChD,wBAAgB,QAAQ,IAAI,IAAI,CAK/B;AAgBD,uEAAuE;AACvE,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsCrD;AAsTD,wBAAgB,qBAAqB,IAAI;IAAE,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAY/G;AAED,eAAO,MAAM,kBAAkB;;;CAAiB,CAAC"}
@@ -0,0 +1,418 @@
1
+ /**
2
+ * Web Dashboard Server — Serves the Agent-Baba-D dashboard UI and data APIs.
3
+ *
4
+ * Uses only Node.js built-in modules (no Express, no WebSocket libraries):
5
+ * - Static files: HTML, CSS, JS from public/
6
+ * - REST API: cost, history, benchmark, memory, health data
7
+ * - SSE (Server-Sent Events): real-time updates
8
+ *
9
+ * Start with: buff dashboard
10
+ * Opens at: http://localhost:3030
11
+ */
12
+ import { createServer } from 'node:http';
13
+ import { createReadStream, readFileSync, existsSync, statSync } from 'node:fs';
14
+ import { join, extname, dirname } from 'node:path';
15
+ import { fileURLToPath } from 'node:url';
16
+ import { homedir } from 'node:os';
17
+ // ─── Constants ──────────────────────────────────────────────────────────────
18
+ const PORT = parseInt(process.env.BUFF_DASHBOARD_PORT || '3030', 10);
19
+ const HOST = process.env.BUFF_DASHBOARD_HOST || '127.0.0.1';
20
+ const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ // Public files location: try the source directory first (dev via tsx),
22
+ // then the compiled output directory (production via node dist/)
23
+ const POSSIBLE_PUBLIC_DIRS = [
24
+ join(__dirname, 'public'), // tsx: src/web-dashboard/public/
25
+ join(__dirname, '..', '..', 'src', 'web-dashboard', 'public'), // node: dist/web-dashboard/server.js
26
+ ];
27
+ const PUBLIC_DIR = POSSIBLE_PUBLIC_DIRS.find((p) => existsSync(p)) || POSSIBLE_PUBLIC_DIRS[0];
28
+ const MEMORY_DIR = join(homedir(), '.buff', 'memory');
29
+ const MIME_TYPES = {
30
+ '.html': 'text/html; charset=utf-8',
31
+ '.css': 'text/css; charset=utf-8',
32
+ '.js': 'text/javascript; charset=utf-8',
33
+ '.json': 'application/json; charset=utf-8',
34
+ '.png': 'image/png',
35
+ '.svg': 'image/svg+xml',
36
+ '.ico': 'image/x-icon',
37
+ };
38
+ let sseClients = [];
39
+ let nextClientId = 1;
40
+ let activePipeline = null; // goal/description of current pipeline
41
+ let activeNodes = [];
42
+ let activeEdges = [];
43
+ /**
44
+ * Called by the orchestrator to push a DAG update in real time.
45
+ * Clears the pipeline when a new execution starts.
46
+ */
47
+ export function pushDAGUpdate(update) {
48
+ if (update.pipelineId) {
49
+ activePipeline = update.pipelineDescription || update.pipelineId;
50
+ // If this is a new pipeline, reset nodes/edges
51
+ if (update.nodes.length > 0) {
52
+ activeNodes = update.nodes.map((n) => ({
53
+ ...n,
54
+ startedAt: n.status === 'running' || n.status === 'completed' || n.status === 'failed' ? Date.now() : undefined,
55
+ completedAt: n.status === 'completed' || n.status === 'failed' ? Date.now() : undefined,
56
+ }));
57
+ activeEdges = update.edges;
58
+ }
59
+ }
60
+ broadcastDAG();
61
+ }
62
+ /** Update a single node's status (called by orchestrator as each agent finishes) */
63
+ export function updateDAGNode(nodeId, update) {
64
+ const node = activeNodes.find((n) => n.id === nodeId);
65
+ if (!node)
66
+ return;
67
+ node.status = update.status;
68
+ if (update.summary)
69
+ node.summary = update.summary;
70
+ if (update.status === 'running' && !node.startedAt)
71
+ node.startedAt = Date.now();
72
+ if (update.status === 'completed' || update.status === 'failed') {
73
+ if (!node.completedAt)
74
+ node.completedAt = Date.now();
75
+ }
76
+ broadcastDAG();
77
+ }
78
+ /** Reset the DAG state for a fresh execution */
79
+ export function resetDAG() {
80
+ activePipeline = null;
81
+ activeNodes = [];
82
+ activeEdges = [];
83
+ broadcastDAG();
84
+ }
85
+ /** Broadcast current DAG state to all SSE clients */
86
+ function broadcastDAG() {
87
+ const dagData = {
88
+ pipeline: activePipeline,
89
+ nodes: activeNodes,
90
+ edges: activeEdges,
91
+ timestamp: Date.now(),
92
+ };
93
+ const payload = `event: dag\ndata: ${JSON.stringify(dagData)}\n\n`;
94
+ for (const client of sseClients) {
95
+ try {
96
+ client.res.write(payload);
97
+ }
98
+ catch { /* client disconnected */ }
99
+ }
100
+ }
101
+ /** Read DAG data: in-memory first, fall back to recent trajectories */
102
+ export function readDAGData() {
103
+ // If there's an active in-memory pipeline, return it
104
+ if (activeNodes.length > 0) {
105
+ return {
106
+ pipeline: activePipeline,
107
+ nodes: activeNodes,
108
+ edges: activeEdges,
109
+ timestamp: Date.now(),
110
+ active: true,
111
+ };
112
+ }
113
+ // Otherwise, reconstruct from recent trajectory data
114
+ const trajectoriesFile = readJSON(join(MEMORY_DIR, 'trajectories.json'));
115
+ if (trajectoriesFile?.trajectories) {
116
+ const trajs = Object.values(trajectoriesFile.trajectories);
117
+ const recent = trajs.sort((a, b) => (b.timestamp || 0) - (a.timestamp || 0)).slice(0, 1);
118
+ if (recent.length > 0 && recent[0].plan) {
119
+ const plan = recent[0].plan;
120
+ return {
121
+ pipeline: recent[0].goal || 'Recent execution',
122
+ nodes: plan.map((step, i) => ({
123
+ id: `step-${i}`,
124
+ agentType: step.agentType,
125
+ status: 'completed',
126
+ description: step.description,
127
+ })),
128
+ edges: plan.slice(0, -1).map((_, i) => ({ from: `step-${i}`, to: `step-${i + 1}` })),
129
+ timestamp: recent[0].timestamp,
130
+ active: false,
131
+ };
132
+ }
133
+ }
134
+ // Fallback: return empty
135
+ return { pipeline: null, nodes: [], edges: [], timestamp: Date.now(), active: false };
136
+ }
137
+ // ─── Data Readers ───────────────────────────────────────────────────────────
138
+ function readJSON(filePath) {
139
+ try {
140
+ if (!existsSync(filePath))
141
+ return null;
142
+ const raw = readFileSync(filePath, 'utf-8');
143
+ return JSON.parse(raw);
144
+ }
145
+ catch {
146
+ return null;
147
+ }
148
+ }
149
+ function readCostData() {
150
+ const data = readJSON(join(MEMORY_DIR, 'cost-tracker.json'));
151
+ if (!data?.entries) {
152
+ return { totalRequests: 0, totalCost: 0, byProvider: {}, byModel: {} };
153
+ }
154
+ const entries = data.entries;
155
+ const totalCost = entries.reduce((s, e) => s + (typeof e.costUsd === 'number' ? e.costUsd : 0), 0);
156
+ const totalTokens = entries.reduce((s, e) => s + (typeof e.totalTokens === 'number' ? e.totalTokens : 0), 0);
157
+ const byProvider = {};
158
+ const byModel = {};
159
+ for (const e of entries) {
160
+ const cost = typeof e.costUsd === 'number' ? e.costUsd : 0;
161
+ if (e.provider)
162
+ byProvider[e.provider] = (byProvider[e.provider] || 0) + cost;
163
+ if (e.model)
164
+ byModel[e.model] = (byModel[e.model] || 0) + cost;
165
+ }
166
+ const recent = entries.slice(-50).reverse().map((e) => ({
167
+ provider: e.provider,
168
+ model: e.model,
169
+ costUsd: e.costUsd,
170
+ totalTokens: e.totalTokens,
171
+ timestamp: e.timestamp,
172
+ }));
173
+ return {
174
+ totalRequests: entries.length,
175
+ totalCost: Math.round(totalCost * 100000) / 100000,
176
+ totalTokens,
177
+ byProvider,
178
+ byModel,
179
+ recent,
180
+ };
181
+ }
182
+ function readHistoryData() {
183
+ const data = readJSON(join(MEMORY_DIR, 'history.json'));
184
+ if (!data?.sessions) {
185
+ return { total: 0, recent: [] };
186
+ }
187
+ const sessions = Object.values(data.sessions);
188
+ const recent = sessions
189
+ .sort((a, b) => (b.startedAt || 0) - (a.startedAt || 0))
190
+ .slice(0, 20)
191
+ .map((s) => ({
192
+ id: s.id,
193
+ summary: s.summary?.slice(0, 80) || '',
194
+ provider: s.provider,
195
+ model: s.model,
196
+ messageCount: s.messages?.length || 0,
197
+ tags: s.tags || [],
198
+ startedAt: s.startedAt,
199
+ }));
200
+ return { total: sessions.length, recent };
201
+ }
202
+ function readBenchmarkData() {
203
+ const data = readJSON(join(MEMORY_DIR, 'benchmarks.json'));
204
+ if (!data?.runs) {
205
+ return { totalRuns: 0, latest: null, runs: [] };
206
+ }
207
+ const runs = data.runs.slice(-10).reverse();
208
+ const latest = runs[0] || null;
209
+ return {
210
+ totalRuns: data.runs.length,
211
+ latest: latest ? {
212
+ provider: latest.provider,
213
+ model: latest.model,
214
+ summary: latest.summary,
215
+ startedAt: latest.startedAt,
216
+ } : null,
217
+ runs: runs.map((r) => ({
218
+ id: r.id,
219
+ provider: r.provider,
220
+ model: r.model,
221
+ startedAt: r.startedAt,
222
+ summary: r.summary,
223
+ })),
224
+ };
225
+ }
226
+ function readMemoryData() {
227
+ const data = readJSON(join(MEMORY_DIR, 'trajectories.json'));
228
+ if (!data?.trajectories) {
229
+ return { total: 0 };
230
+ }
231
+ const trajectories = Object.values(data.trajectories);
232
+ const avgScore = trajectories.length > 0
233
+ ? trajectories.reduce((s, t) => s + (t.score || 0), 0) / trajectories.length
234
+ : 0;
235
+ const byFingerprint = {};
236
+ for (const t of trajectories) {
237
+ const fp = t.projectFingerprint || 'unknown';
238
+ byFingerprint[fp] = (byFingerprint[fp] || 0) + 1;
239
+ }
240
+ return {
241
+ total: trajectories.length,
242
+ avgScore: Math.round(avgScore * 100) / 100,
243
+ byFingerprint,
244
+ };
245
+ }
246
+ function readHealthData() {
247
+ const patterns = readJSON(join(MEMORY_DIR, 'patterns.json'));
248
+ const feedback = readJSON(join(MEMORY_DIR, 'feedback.json'));
249
+ const vectors = readJSON(join(MEMORY_DIR, 'vectors.json'));
250
+ const agentStats = readJSON(join(MEMORY_DIR, 'agent-stats.json'));
251
+ return {
252
+ patterns: patterns?.patterns?.length || 0,
253
+ feedback: feedback?.entries?.length || 0,
254
+ vectors: vectors?.entries ? Object.keys(vectors.entries).length : 0,
255
+ agentStats: agentStats ? {
256
+ totalRuns: agentStats.totalRuns,
257
+ overallSuccessRate: agentStats.overallSuccessRate,
258
+ agents: agentStats.agents,
259
+ } : null,
260
+ memoryDir: MEMORY_DIR,
261
+ };
262
+ }
263
+ // ─── Request Handler ────────────────────────────────────────────────────────
264
+ function handleRequest(req, res) {
265
+ const url = new URL(req.url || '/', `http://${req.headers.host || HOST}`);
266
+ const pathname = url.pathname;
267
+ // CORS headers
268
+ res.setHeader('Access-Control-Allow-Origin', '*');
269
+ res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
270
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
271
+ if (req.method === 'OPTIONS') {
272
+ res.writeHead(204);
273
+ res.end();
274
+ return;
275
+ }
276
+ // ── API Routes ─────────────────────────────────────────────────
277
+ if (pathname === '/api/cost') {
278
+ res.writeHead(200, { 'Content-Type': 'application/json' });
279
+ res.end(JSON.stringify(readCostData()));
280
+ return;
281
+ }
282
+ if (pathname === '/api/history') {
283
+ res.writeHead(200, { 'Content-Type': 'application/json' });
284
+ res.end(JSON.stringify(readHistoryData()));
285
+ return;
286
+ }
287
+ if (pathname === '/api/benchmarks') {
288
+ res.writeHead(200, { 'Content-Type': 'application/json' });
289
+ res.end(JSON.stringify(readBenchmarkData()));
290
+ return;
291
+ }
292
+ if (pathname === '/api/memory') {
293
+ res.writeHead(200, { 'Content-Type': 'application/json' });
294
+ res.end(JSON.stringify(readMemoryData()));
295
+ return;
296
+ }
297
+ if (pathname === '/api/health') {
298
+ res.writeHead(200, { 'Content-Type': 'application/json' });
299
+ res.end(JSON.stringify(readHealthData()));
300
+ return;
301
+ }
302
+ if (pathname === '/api/dag') {
303
+ res.writeHead(200, { 'Content-Type': 'application/json' });
304
+ res.end(JSON.stringify(readDAGData()));
305
+ return;
306
+ }
307
+ if (pathname === '/api/all') {
308
+ res.writeHead(200, { 'Content-Type': 'application/json' });
309
+ res.end(JSON.stringify({
310
+ cost: readCostData(),
311
+ history: readHistoryData(),
312
+ benchmarks: readBenchmarkData(),
313
+ memory: readMemoryData(),
314
+ health: readHealthData(),
315
+ dag: readDAGData(),
316
+ serverTime: Date.now(),
317
+ }));
318
+ return;
319
+ }
320
+ // ── SSE Endpoint ───────────────────────────────────────────────
321
+ if (pathname === '/api/sse') {
322
+ res.writeHead(200, {
323
+ 'Content-Type': 'text/event-stream',
324
+ 'Cache-Control': 'no-cache',
325
+ 'Connection': 'keep-alive',
326
+ 'X-Accel-Buffering': 'no',
327
+ });
328
+ const allData = {
329
+ cost: readCostData(),
330
+ history: readHistoryData(),
331
+ benchmarks: readBenchmarkData(),
332
+ memory: readMemoryData(),
333
+ health: readHealthData(),
334
+ dag: readDAGData(),
335
+ serverTime: Date.now(),
336
+ };
337
+ res.write(`event: init\ndata: ${JSON.stringify(allData)}\n\n`);
338
+ const clientId = nextClientId++;
339
+ const client = { id: clientId, res };
340
+ sseClients.push(client);
341
+ const heartbeat = setInterval(() => {
342
+ try {
343
+ res.write(': heartbeat\n\n');
344
+ }
345
+ catch {
346
+ clearInterval(heartbeat);
347
+ }
348
+ }, 30000);
349
+ const refreshInterval = setInterval(() => {
350
+ try {
351
+ const data = {
352
+ cost: readCostData(),
353
+ history: readHistoryData(),
354
+ benchmarks: readBenchmarkData(),
355
+ memory: readMemoryData(),
356
+ health: readHealthData(),
357
+ dag: readDAGData(),
358
+ serverTime: Date.now(),
359
+ };
360
+ res.write(`event: refresh\ndata: ${JSON.stringify(data)}\n\n`);
361
+ }
362
+ catch {
363
+ clearInterval(refreshInterval);
364
+ }
365
+ }, 10000);
366
+ req.on('close', () => {
367
+ clearInterval(heartbeat);
368
+ clearInterval(refreshInterval);
369
+ sseClients = sseClients.filter((c) => c.id !== clientId);
370
+ });
371
+ return;
372
+ }
373
+ // ── Static Files / SPA Fallback ─────────────────────────────────
374
+ const filePath = pathname === '/' ? '/index.html' : pathname;
375
+ const normalizedPath = join(PUBLIC_DIR, filePath);
376
+ // Prevent directory traversal
377
+ if (!normalizedPath.startsWith(PUBLIC_DIR)) {
378
+ res.writeHead(403);
379
+ res.end('Forbidden');
380
+ return;
381
+ }
382
+ try {
383
+ if (existsSync(normalizedPath) && !statSync(normalizedPath).isDirectory()) {
384
+ const ext = extname(filePath);
385
+ const contentType = MIME_TYPES[ext] || 'application/octet-stream';
386
+ res.writeHead(200, { 'Content-Type': contentType });
387
+ createReadStream(normalizedPath).pipe(res);
388
+ return;
389
+ }
390
+ // SPA fallback: serve index.html for any unmatched path (React Router handles routing)
391
+ const indexPath = join(PUBLIC_DIR, 'index.html');
392
+ if (!existsSync(indexPath)) {
393
+ res.writeHead(404);
394
+ res.end('Not found');
395
+ return;
396
+ }
397
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
398
+ createReadStream(indexPath).pipe(res);
399
+ }
400
+ catch {
401
+ res.writeHead(404);
402
+ res.end('Not found');
403
+ }
404
+ }
405
+ // ─── Server ─────────────────────────────────────────────────────────────────
406
+ export function createDashboardServer() {
407
+ const server = createServer(handleRequest);
408
+ server.listen(PORT, HOST, () => {
409
+ console.log(`\n 🌐 Agent-Baba-D Dashboard`);
410
+ console.log(` ─────────────────────────`);
411
+ console.log(` Local: http://${HOST}:${PORT}`);
412
+ console.log(` Network: http://localhost:${PORT}`);
413
+ console.log(` Press Ctrl+C to stop\n`);
414
+ });
415
+ return { server, port: PORT, host: HOST };
416
+ }
417
+ export const DASHBOARD_DEFAULTS = { PORT, HOST };
418
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web-dashboard/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
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 { type WorkflowTemplate, type WorkflowDependency } from './templates.js';
21
+ /** A workflow template entry in the registry index */
22
+ export interface RegistryEntry {
23
+ /** Template identifier (unique in registry) */
24
+ id: string;
25
+ /** Human-readable name */
26
+ name: string;
27
+ /** Short description (max 200 chars) */
28
+ description: string;
29
+ /** Semantic version (e.g., "1.0.0") */
30
+ version: string;
31
+ /** Author name or GitHub handle */
32
+ author: string;
33
+ /** Number of agent steps */
34
+ stepCount: number;
35
+ /** Tags for search/filter (e.g., ["test", "release", "security"]) */
36
+ tags: string[];
37
+ /** When this template was last updated (ISO date string) */
38
+ updatedAt: string;
39
+ /** Number of installs (approximate) */
40
+ installCount?: number;
41
+ /** URL to the template file in the registry */
42
+ sourceUrl: string;
43
+ }
44
+ /**
45
+ * Fetch the registry index from GitHub (with TTL caching).
46
+ */
47
+ export declare function fetchRegistryIndex(): Promise<RegistryEntry[]>;
48
+ /**
49
+ * Search the registry for templates matching a query.
50
+ */
51
+ export declare function searchRegistry(query: string): Promise<RegistryEntry[]>;
52
+ /**
53
+ * Get a specific template entry from the registry by ID.
54
+ */
55
+ export declare function getRegistryEntry(id: string): Promise<RegistryEntry | null>;
56
+ /**
57
+ * Install a workflow template from the registry.
58
+ *
59
+ * Downloads the template JSON file from GitHub and saves it to
60
+ * ~/.buff/workflows/registry/<id>.json where the workflow system
61
+ * can auto-discover it.
62
+ *
63
+ * @param templateId The template ID to install
64
+ * @returns The installed WorkflowTemplate, or null if failed
65
+ */
66
+ export declare function installTemplate(templateId: string): Promise<WorkflowTemplate | null>;
67
+ /**
68
+ * Get all locally installed registry templates.
69
+ */
70
+ export declare function getInstalledTemplates(): WorkflowTemplate[];
71
+ /**
72
+ * Validation errors found during publish preparation.
73
+ */
74
+ export interface PublishValidation {
75
+ valid: boolean;
76
+ errors: string[];
77
+ warnings: string[];
78
+ }
79
+ /**
80
+ * Validate a local workflow template for publishing.
81
+ * Checks for required fields, valid steps, etc.
82
+ */
83
+ export declare function validateForPublish(templateId: string): PublishValidation;
84
+ /**
85
+ * Prepare a local template for publishing.
86
+ * Returns a JSON string that can be submitted as a PR to the registry.
87
+ */
88
+ export declare function prepareForPublish(templateId: string): string | null;
89
+ /**
90
+ * Get the URL for submitting a new template to the registry.
91
+ */
92
+ export declare function getPublishUrl(): string;
93
+ /**
94
+ * Compare two semantic version strings.
95
+ * Returns 1 if a > b, -1 if a < b, 0 if equal.
96
+ */
97
+ export declare function compareVersions(a: string, b: string): number;
98
+ /**
99
+ * Check if a version satisfies a semver constraint (e.g., ">=1.0.0", "^2.0.0").
100
+ */
101
+ export declare function versionSatisfies(version: string, constraint: string): boolean;
102
+ /**
103
+ * Check if an installed template has a newer version available in the registry.
104
+ */
105
+ export declare function checkForUpgrades(): Promise<Array<{
106
+ id: string;
107
+ currentVersion: string;
108
+ latestVersion: string;
109
+ }>>;
110
+ /**
111
+ * Resolve dependencies for a template.
112
+ * Returns any missing dependencies that need to be installed.
113
+ */
114
+ export declare function resolveDependencies(template: WorkflowTemplate): Promise<{
115
+ met: WorkflowDependency[];
116
+ missing: WorkflowDependency[];
117
+ }>;
118
+ /**
119
+ * Validate that all dependencies of a template are satisfied.
120
+ * Returns true if all dependencies are met or optional.
121
+ */
122
+ export declare function dependenciesMet(deps: WorkflowDependency[]): boolean;
123
+ /**
124
+ * Clear the registry index cache.
125
+ */
126
+ export declare function clearRegistryCache(): void;
127
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/workflow/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAGxB,MAAM,gBAAgB,CAAC;AAKxB,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AA0CD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAkCnE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAQ5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAGhF;AAID;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA2D1F;AAqBD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAiB1D;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAkExE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsCnE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CA2B7E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC,CAgBF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC;IAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;IAAC,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC,CAsCvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAEnE;AA8BD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}