@bluefly/openstandardagents 0.4.0 → 0.4.1

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 (517) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/DEMO.md +212 -0
  3. package/README.md +75 -15
  4. package/dist/adapters/drupal/generator.d.ts +149 -0
  5. package/dist/adapters/drupal/generator.d.ts.map +1 -0
  6. package/dist/adapters/drupal/generator.js +1760 -0
  7. package/dist/adapters/drupal/generator.js.map +1 -0
  8. package/dist/adapters/drupal/index.d.ts +2 -0
  9. package/dist/adapters/drupal/index.d.ts.map +1 -1
  10. package/dist/adapters/drupal/index.js +3 -0
  11. package/dist/adapters/drupal/index.js.map +1 -1
  12. package/dist/adapters/npm/adapter.js +2 -2
  13. package/dist/adapters/npm/converter.js +3 -3
  14. package/dist/cli/banner.d.ts +21 -0
  15. package/dist/cli/banner.d.ts.map +1 -0
  16. package/dist/cli/banner.js +128 -0
  17. package/dist/cli/banner.js.map +1 -0
  18. package/dist/cli/commands/dev.command.d.ts +20 -0
  19. package/dist/cli/commands/dev.command.d.ts.map +1 -0
  20. package/dist/cli/commands/dev.command.js +78 -0
  21. package/dist/cli/commands/dev.command.js.map +1 -0
  22. package/dist/cli/commands/estimate.command.d.ts +12 -0
  23. package/dist/cli/commands/estimate.command.d.ts.map +1 -0
  24. package/dist/cli/commands/estimate.command.js +226 -0
  25. package/dist/cli/commands/estimate.command.js.map +1 -0
  26. package/dist/cli/commands/export-enhanced.command.d.ts +7 -0
  27. package/dist/cli/commands/export-enhanced.command.d.ts.map +1 -0
  28. package/dist/cli/commands/{export-v2.command.js → export-enhanced.command.js} +3 -3
  29. package/dist/cli/commands/export-enhanced.command.js.map +1 -0
  30. package/dist/cli/commands/export.command.d.ts.map +1 -1
  31. package/dist/cli/commands/export.command.js +82 -4
  32. package/dist/cli/commands/export.command.js.map +1 -1
  33. package/dist/cli/commands/init.command.d.ts.map +1 -1
  34. package/dist/cli/commands/init.command.js +2 -0
  35. package/dist/cli/commands/init.command.js.map +1 -1
  36. package/dist/cli/commands/test.command.d.ts +1 -0
  37. package/dist/cli/commands/test.command.d.ts.map +1 -1
  38. package/dist/cli/commands/test.command.js +172 -105
  39. package/dist/cli/commands/test.command.js.map +1 -1
  40. package/dist/cli/commands/types/wizard-config.types.d.ts +59 -0
  41. package/dist/cli/commands/types/wizard-config.types.d.ts.map +1 -0
  42. package/dist/cli/commands/types/wizard-config.types.js +34 -0
  43. package/dist/cli/commands/types/wizard-config.types.js.map +1 -0
  44. package/dist/cli/commands/upgrade.command.d.ts +9 -0
  45. package/dist/cli/commands/upgrade.command.d.ts.map +1 -0
  46. package/dist/cli/commands/upgrade.command.js +167 -0
  47. package/dist/cli/commands/upgrade.command.js.map +1 -0
  48. package/dist/cli/commands/wizard-api-first.command.d.ts +18 -0
  49. package/dist/cli/commands/wizard-api-first.command.d.ts.map +1 -0
  50. package/dist/cli/commands/wizard-api-first.command.js +854 -0
  51. package/dist/cli/commands/wizard-api-first.command.js.map +1 -0
  52. package/dist/cli/commands/wizard-interactive.command.d.ts +25 -0
  53. package/dist/cli/commands/wizard-interactive.command.d.ts.map +1 -0
  54. package/dist/cli/commands/wizard-interactive.command.js +1875 -0
  55. package/dist/cli/commands/wizard-interactive.command.js.map +1 -0
  56. package/dist/cli/commands/workspace.command.js +1 -1
  57. package/dist/cli/commands/workspace.command.js.map +1 -1
  58. package/dist/cli/index.js +9 -0
  59. package/dist/cli/index.js.map +1 -1
  60. package/dist/cli/schema-driven/index.d.ts +27 -0
  61. package/dist/cli/schema-driven/index.d.ts.map +1 -0
  62. package/dist/cli/schema-driven/index.js +34 -0
  63. package/dist/cli/schema-driven/index.js.map +1 -0
  64. package/dist/cli/schema-driven/schema-loader.d.ts +115 -0
  65. package/dist/cli/schema-driven/schema-loader.d.ts.map +1 -0
  66. package/dist/cli/schema-driven/schema-loader.js +270 -0
  67. package/dist/cli/schema-driven/schema-loader.js.map +1 -0
  68. package/dist/cli/schema-driven/ui-generator.d.ts +88 -0
  69. package/dist/cli/schema-driven/ui-generator.d.ts.map +1 -0
  70. package/dist/cli/schema-driven/ui-generator.js +326 -0
  71. package/dist/cli/schema-driven/ui-generator.js.map +1 -0
  72. package/dist/cli/wizard/interactive-wizard.d.ts +26 -0
  73. package/dist/cli/wizard/interactive-wizard.d.ts.map +1 -0
  74. package/dist/cli/wizard/interactive-wizard.js +296 -0
  75. package/dist/cli/wizard/interactive-wizard.js.map +1 -0
  76. package/dist/cli/wizard/template-catalog.d.ts +32 -0
  77. package/dist/cli/wizard/template-catalog.d.ts.map +1 -0
  78. package/dist/cli/wizard/template-catalog.js +99 -0
  79. package/dist/cli/wizard/template-catalog.js.map +1 -0
  80. package/dist/cli/wizard/use-cases.d.ts +37 -0
  81. package/dist/cli/wizard/use-cases.d.ts.map +1 -0
  82. package/dist/cli/wizard/use-cases.js +157 -0
  83. package/dist/cli/wizard/use-cases.js.map +1 -0
  84. package/dist/di-container.d.ts.map +1 -1
  85. package/dist/di-container.js +2 -0
  86. package/dist/di-container.js.map +1 -1
  87. package/dist/package.json +19 -9
  88. package/dist/runtime/agent-runner.d.ts +46 -0
  89. package/dist/runtime/agent-runner.d.ts.map +1 -0
  90. package/dist/runtime/agent-runner.js +346 -0
  91. package/dist/runtime/agent-runner.js.map +1 -0
  92. package/dist/sdks/kagent/crd-generator.d.ts +4 -0
  93. package/dist/sdks/kagent/crd-generator.d.ts.map +1 -1
  94. package/dist/sdks/kagent/crd-generator.js +83 -2
  95. package/dist/sdks/kagent/crd-generator.js.map +1 -1
  96. package/dist/sdks/kagent/k8s-resources-generator.d.ts +73 -0
  97. package/dist/sdks/kagent/k8s-resources-generator.d.ts.map +1 -0
  98. package/dist/sdks/kagent/k8s-resources-generator.js +286 -0
  99. package/dist/sdks/kagent/k8s-resources-generator.js.map +1 -0
  100. package/dist/sdks/kagent/types.d.ts +79 -0
  101. package/dist/sdks/kagent/types.d.ts.map +1 -1
  102. package/dist/sdks/shared/validation.d.ts +2 -2
  103. package/dist/services/cost-estimation/optimization-patterns.d.ts +23 -0
  104. package/dist/services/cost-estimation/optimization-patterns.d.ts.map +1 -0
  105. package/dist/services/cost-estimation/optimization-patterns.js +147 -0
  106. package/dist/services/cost-estimation/optimization-patterns.js.map +1 -0
  107. package/dist/services/cost-estimation/pricing.d.ts +29 -0
  108. package/dist/services/cost-estimation/pricing.d.ts.map +1 -0
  109. package/dist/services/cost-estimation/pricing.js +225 -0
  110. package/dist/services/cost-estimation/pricing.js.map +1 -0
  111. package/dist/services/cost-estimation/scenario-estimator.d.ts +59 -0
  112. package/dist/services/cost-estimation/scenario-estimator.d.ts.map +1 -0
  113. package/dist/services/cost-estimation/scenario-estimator.js +145 -0
  114. package/dist/services/cost-estimation/scenario-estimator.js.map +1 -0
  115. package/dist/services/cost-estimation/token-counter.service.d.ts +51 -0
  116. package/dist/services/cost-estimation/token-counter.service.d.ts.map +1 -0
  117. package/dist/services/cost-estimation/token-counter.service.js +125 -0
  118. package/dist/services/cost-estimation/token-counter.service.js.map +1 -0
  119. package/dist/services/dev-server/dev-server.service.d.ts +121 -0
  120. package/dist/services/dev-server/dev-server.service.d.ts.map +1 -0
  121. package/dist/services/dev-server/dev-server.service.js +290 -0
  122. package/dist/services/dev-server/dev-server.service.js.map +1 -0
  123. package/dist/services/dev-server/file-watcher.d.ts +101 -0
  124. package/dist/services/dev-server/file-watcher.d.ts.map +1 -0
  125. package/dist/services/dev-server/file-watcher.js +190 -0
  126. package/dist/services/dev-server/file-watcher.js.map +1 -0
  127. package/dist/services/dev-server/live-validator.d.ts +157 -0
  128. package/dist/services/dev-server/live-validator.d.ts.map +1 -0
  129. package/dist/services/dev-server/live-validator.js +301 -0
  130. package/dist/services/dev-server/live-validator.js.map +1 -0
  131. package/dist/services/dev-server/websocket-server.d.ts +137 -0
  132. package/dist/services/dev-server/websocket-server.d.ts.map +1 -0
  133. package/dist/services/dev-server/websocket-server.js +229 -0
  134. package/dist/services/dev-server/websocket-server.js.map +1 -0
  135. package/dist/services/export/anthropic/anthropic-exporter.d.ts +70 -0
  136. package/dist/services/export/anthropic/anthropic-exporter.d.ts.map +1 -0
  137. package/dist/services/export/anthropic/anthropic-exporter.js +576 -0
  138. package/dist/services/export/anthropic/anthropic-exporter.js.map +1 -0
  139. package/dist/services/export/anthropic/api-generator.d.ts +39 -0
  140. package/dist/services/export/anthropic/api-generator.d.ts.map +1 -0
  141. package/dist/services/export/anthropic/api-generator.js +395 -0
  142. package/dist/services/export/anthropic/api-generator.js.map +1 -0
  143. package/dist/services/export/anthropic/index.d.ts +18 -0
  144. package/dist/services/export/anthropic/index.d.ts.map +1 -0
  145. package/dist/services/export/anthropic/index.js +16 -0
  146. package/dist/services/export/anthropic/index.js.map +1 -0
  147. package/dist/services/export/anthropic/tools-generator.d.ts +35 -0
  148. package/dist/services/export/anthropic/tools-generator.d.ts.map +1 -0
  149. package/dist/services/export/anthropic/tools-generator.js +260 -0
  150. package/dist/services/export/anthropic/tools-generator.js.map +1 -0
  151. package/dist/services/export/langchain/api-generator.d.ts +17 -0
  152. package/dist/services/export/langchain/api-generator.d.ts.map +1 -0
  153. package/dist/services/export/langchain/api-generator.js +375 -0
  154. package/dist/services/export/langchain/api-generator.js.map +1 -0
  155. package/dist/services/export/langchain/callbacks-generator.d.ts +63 -0
  156. package/dist/services/export/langchain/callbacks-generator.d.ts.map +1 -0
  157. package/dist/services/export/langchain/callbacks-generator.js +408 -0
  158. package/dist/services/export/langchain/callbacks-generator.js.map +1 -0
  159. package/dist/services/export/langchain/error-handling-generator.d.ts +76 -0
  160. package/dist/services/export/langchain/error-handling-generator.d.ts.map +1 -0
  161. package/dist/services/export/langchain/error-handling-generator.js +522 -0
  162. package/dist/services/export/langchain/error-handling-generator.js.map +1 -0
  163. package/dist/services/export/langchain/index.d.ts +17 -0
  164. package/dist/services/export/langchain/index.d.ts.map +1 -0
  165. package/dist/services/export/langchain/index.js +13 -0
  166. package/dist/services/export/langchain/index.js.map +1 -0
  167. package/dist/services/export/langchain/langchain-exporter.d.ts +174 -0
  168. package/dist/services/export/langchain/langchain-exporter.d.ts.map +1 -0
  169. package/dist/services/export/langchain/langchain-exporter.js +953 -0
  170. package/dist/services/export/langchain/langchain-exporter.js.map +1 -0
  171. package/dist/services/export/langchain/langgraph-generator.d.ts +86 -0
  172. package/dist/services/export/langchain/langgraph-generator.d.ts.map +1 -0
  173. package/dist/services/export/langchain/langgraph-generator.js +473 -0
  174. package/dist/services/export/langchain/langgraph-generator.js.map +1 -0
  175. package/dist/services/export/langchain/langserve-generator.d.ts +95 -0
  176. package/dist/services/export/langchain/langserve-generator.d.ts.map +1 -0
  177. package/dist/services/export/langchain/langserve-generator.js +807 -0
  178. package/dist/services/export/langchain/langserve-generator.js.map +1 -0
  179. package/dist/services/export/langchain/memory-generator.d.ts +71 -0
  180. package/dist/services/export/langchain/memory-generator.d.ts.map +1 -0
  181. package/dist/services/export/langchain/memory-generator.js +1182 -0
  182. package/dist/services/export/langchain/memory-generator.js.map +1 -0
  183. package/dist/services/export/langchain/openapi-generator.d.ts +20 -0
  184. package/dist/services/export/langchain/openapi-generator.d.ts.map +1 -0
  185. package/dist/services/export/langchain/openapi-generator.js +364 -0
  186. package/dist/services/export/langchain/openapi-generator.js.map +1 -0
  187. package/dist/services/export/langchain/plan-execute-generator.d.ts +60 -0
  188. package/dist/services/export/langchain/plan-execute-generator.d.ts.map +1 -0
  189. package/dist/services/export/langchain/plan-execute-generator.js +679 -0
  190. package/dist/services/export/langchain/plan-execute-generator.js.map +1 -0
  191. package/dist/services/export/langchain/streaming-generator.d.ts +66 -0
  192. package/dist/services/export/langchain/streaming-generator.d.ts.map +1 -0
  193. package/dist/services/export/langchain/streaming-generator.js +749 -0
  194. package/dist/services/export/langchain/streaming-generator.js.map +1 -0
  195. package/dist/services/export/langchain/tools-generator.d.ts +67 -0
  196. package/dist/services/export/langchain/tools-generator.d.ts.map +1 -0
  197. package/dist/services/export/langchain/tools-generator.js +543 -0
  198. package/dist/services/export/langchain/tools-generator.js.map +1 -0
  199. package/dist/services/export/npm/express-generator.d.ts +23 -0
  200. package/dist/services/export/npm/express-generator.d.ts.map +1 -0
  201. package/dist/services/export/npm/express-generator.js +296 -0
  202. package/dist/services/export/npm/express-generator.js.map +1 -0
  203. package/dist/services/export/npm/index.d.ts +13 -0
  204. package/dist/services/export/npm/index.d.ts.map +1 -0
  205. package/dist/services/export/npm/index.js +11 -0
  206. package/dist/services/export/npm/index.js.map +1 -0
  207. package/dist/services/export/npm/npm-exporter.d.ts +142 -0
  208. package/dist/services/export/npm/npm-exporter.d.ts.map +1 -0
  209. package/dist/services/export/npm/npm-exporter.js +480 -0
  210. package/dist/services/export/npm/npm-exporter.js.map +1 -0
  211. package/dist/services/export/npm/openapi-generator.d.ts +19 -0
  212. package/dist/services/export/npm/openapi-generator.d.ts.map +1 -0
  213. package/dist/services/export/npm/openapi-generator.js +428 -0
  214. package/dist/services/export/npm/openapi-generator.js.map +1 -0
  215. package/dist/services/export/npm/package-json-generator.d.ts +31 -0
  216. package/dist/services/export/npm/package-json-generator.d.ts.map +1 -0
  217. package/dist/services/export/npm/package-json-generator.js +153 -0
  218. package/dist/services/export/npm/package-json-generator.js.map +1 -0
  219. package/dist/services/export/npm/typescript-generator.d.ts +69 -0
  220. package/dist/services/export/npm/typescript-generator.d.ts.map +1 -0
  221. package/dist/services/export/npm/typescript-generator.js +437 -0
  222. package/dist/services/export/npm/typescript-generator.js.map +1 -0
  223. package/dist/services/export/testing/index.d.ts +8 -0
  224. package/dist/services/export/testing/index.d.ts.map +1 -0
  225. package/dist/services/export/testing/index.js +7 -0
  226. package/dist/services/export/testing/index.js.map +1 -0
  227. package/dist/services/export/testing/test-generator.d.ts +178 -0
  228. package/dist/services/export/testing/test-generator.d.ts.map +1 -0
  229. package/dist/services/export/testing/test-generator.js +2542 -0
  230. package/dist/services/export/testing/test-generator.js.map +1 -0
  231. package/dist/services/test-runner/mock-llm.service.d.ts +77 -0
  232. package/dist/services/test-runner/mock-llm.service.d.ts.map +1 -0
  233. package/dist/services/test-runner/mock-llm.service.js +173 -0
  234. package/dist/services/test-runner/mock-llm.service.js.map +1 -0
  235. package/dist/services/test-runner/scenarios.d.ts +36 -0
  236. package/dist/services/test-runner/scenarios.d.ts.map +1 -0
  237. package/dist/services/test-runner/scenarios.js +196 -0
  238. package/dist/services/test-runner/scenarios.js.map +1 -0
  239. package/dist/services/test-runner/test-runner.service.d.ts +19 -1
  240. package/dist/services/test-runner/test-runner.service.d.ts.map +1 -1
  241. package/dist/services/test-runner/test-runner.service.js +72 -6
  242. package/dist/services/test-runner/test-runner.service.js.map +1 -1
  243. package/dist/services/validation/best-practices-validator.d.ts +84 -0
  244. package/dist/services/validation/best-practices-validator.d.ts.map +1 -0
  245. package/dist/services/validation/best-practices-validator.js +499 -0
  246. package/dist/services/validation/best-practices-validator.js.map +1 -0
  247. package/dist/services/validation/cost-estimator.d.ts +69 -0
  248. package/dist/services/validation/cost-estimator.d.ts.map +1 -0
  249. package/dist/services/validation/cost-estimator.js +221 -0
  250. package/dist/services/validation/cost-estimator.js.map +1 -0
  251. package/dist/services/validation/enhanced-validator.d.ts +78 -0
  252. package/dist/services/validation/enhanced-validator.d.ts.map +1 -0
  253. package/dist/services/validation/enhanced-validator.js +212 -0
  254. package/dist/services/validation/enhanced-validator.js.map +1 -0
  255. package/dist/services/validation/index.d.ts +13 -0
  256. package/dist/services/validation/index.d.ts.map +1 -0
  257. package/dist/services/validation/index.js +9 -0
  258. package/dist/services/validation/index.js.map +1 -0
  259. package/dist/services/validation/security-validator.d.ts +81 -0
  260. package/dist/services/validation/security-validator.d.ts.map +1 -0
  261. package/dist/services/validation/security-validator.js +328 -0
  262. package/dist/services/validation/security-validator.js.map +1 -0
  263. package/dist/services/wizard/prompts.d.ts +71 -0
  264. package/dist/services/wizard/prompts.d.ts.map +1 -0
  265. package/dist/services/wizard/prompts.js +322 -0
  266. package/dist/services/wizard/prompts.js.map +1 -0
  267. package/dist/services/wizard/wizard.service.d.ts +60 -0
  268. package/dist/services/wizard/wizard.service.d.ts.map +1 -0
  269. package/dist/services/wizard/wizard.service.js +261 -0
  270. package/dist/services/wizard/wizard.service.js.map +1 -0
  271. package/dist/types/personality.zod.d.ts +23 -23
  272. package/dist/utils/version.d.ts +1 -1
  273. package/dist/utils/version.js +1 -1
  274. package/dist/version-management/core/version-manager.test.js.map +1 -1
  275. package/dist/version.d.ts +62 -0
  276. package/dist/version.d.ts.map +1 -0
  277. package/dist/version.js +73 -0
  278. package/dist/version.js.map +1 -0
  279. package/examples/a2a/agent-handoff.ossa.yaml +1 -1
  280. package/examples/a2a/service-discovery.ossa.yaml +1 -1
  281. package/examples/adapters/drupal-eca-mapping.yaml +1 -1
  282. package/examples/adapters/drupal-eca-task.yaml +1 -1
  283. package/examples/adapters/drupal-flowdrop-mapping.yaml +1 -1
  284. package/examples/adapters/drupal-maestro-mapping.yaml +1 -1
  285. package/examples/adapters/mistral-agent.yaml +1 -1
  286. package/examples/adapters/symfony-messenger-task.yaml +1 -1
  287. package/examples/adapters/symfony-messenger-workflow.yaml +1 -1
  288. package/examples/adk-integration/code-review-workflow.yml +1 -1
  289. package/examples/adk-integration/customer-support.yml +1 -1
  290. package/examples/adk-integration/data-pipeline.yml +1 -1
  291. package/examples/advanced/reasoning-agent.yaml +1 -1
  292. package/examples/advanced/workflows/hybrid-model-strategy.yaml +1 -1
  293. package/examples/agent-manifests/critics/critic-agent.yaml +1 -1
  294. package/examples/agent-manifests/governors/governor-agent.yaml +1 -1
  295. package/examples/agent-manifests/integrators/integrator-agent.yaml +1 -1
  296. package/examples/agent-manifests/judges/judge-agent.yaml +1 -1
  297. package/examples/agent-manifests/monitors/monitor-agent.yaml +1 -1
  298. package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +1 -1
  299. package/examples/agent-manifests/sample-compliant-agent.yaml +1 -1
  300. package/examples/agent-manifests/workers/worker-agent.yaml +1 -1
  301. package/examples/agents/01-customer-support-bot/.env.example +32 -0
  302. package/examples/agents/01-customer-support-bot/Dockerfile +30 -0
  303. package/examples/agents/01-customer-support-bot/README.md +295 -0
  304. package/examples/agents/01-customer-support-bot/agent.ossa.yaml +172 -0
  305. package/examples/agents/01-customer-support-bot/docker-compose.yml +55 -0
  306. package/examples/agents/01-customer-support-bot/openapi.yaml +238 -0
  307. package/examples/agents/01-customer-support-bot/package.json +48 -0
  308. package/examples/agents/02-code-review-agent/README.md +72 -0
  309. package/examples/agents/02-code-review-agent/agent.ossa.yaml +239 -0
  310. package/examples/agents/02-code-review-agent/docker-compose.yml +22 -0
  311. package/examples/agents/02-code-review-agent/openapi.yaml +150 -0
  312. package/examples/agents/03-data-analysis-agent/README.md +51 -0
  313. package/examples/agents/03-data-analysis-agent/agent.ossa.yaml +97 -0
  314. package/examples/agents/03-data-analysis-agent/openapi.yaml +74 -0
  315. package/examples/agents/04-content-moderator/README.md +55 -0
  316. package/examples/agents/04-content-moderator/agent.ossa.yaml +131 -0
  317. package/examples/agents/04-content-moderator/openapi.yaml +50 -0
  318. package/examples/agents/05-sales-assistant/README.md +37 -0
  319. package/examples/agents/05-sales-assistant/agent.ossa.yaml +146 -0
  320. package/examples/agents/05-sales-assistant/openapi.yaml +59 -0
  321. package/examples/agents/06-devops-agent/README.md +39 -0
  322. package/examples/agents/06-devops-agent/agent.ossa.yaml +141 -0
  323. package/examples/agents/06-devops-agent/openapi.yaml +51 -0
  324. package/examples/agents/07-research-assistant/README.md +31 -0
  325. package/examples/agents/07-research-assistant/agent.ossa.yaml +119 -0
  326. package/examples/agents/07-research-assistant/openapi.yaml +56 -0
  327. package/examples/agents/08-email-triage-agent/README.md +33 -0
  328. package/examples/agents/08-email-triage-agent/agent.ossa.yaml +133 -0
  329. package/examples/agents/08-email-triage-agent/openapi.yaml +41 -0
  330. package/examples/agents/09-security-scanner/README.md +49 -0
  331. package/examples/agents/09-security-scanner/agent.ossa.yaml +174 -0
  332. package/examples/agents/09-security-scanner/openapi.yaml +46 -0
  333. package/examples/agents/10-meeting-assistant/README.md +53 -0
  334. package/examples/agents/10-meeting-assistant/agent.ossa.yaml +211 -0
  335. package/examples/agents/10-meeting-assistant/docker-compose.yml +27 -0
  336. package/examples/agents/10-meeting-assistant/openapi.yaml +131 -0
  337. package/examples/agents/COMPLETION_REPORT.txt +272 -0
  338. package/examples/agents/INDEX.md +296 -0
  339. package/examples/agents/README.md +452 -0
  340. package/examples/agents/SUMMARY.md +362 -0
  341. package/examples/agents/TEST_RESULTS.md +458 -0
  342. package/examples/agents/architecture-healer-enterprise.yaml +1 -1
  343. package/examples/agents/dependency-healer-npm.yaml +1 -1
  344. package/examples/agents/spec-healer-openapi.yaml +1 -1
  345. package/examples/agents/wiki-healer-production.yaml +1 -1
  346. package/examples/agents-md/code-agent.ossa.json +1 -1
  347. package/examples/agents-md/monorepo-agent.ossa.yaml +1 -1
  348. package/examples/anthropic/claude-assistant.ossa.json +1 -1
  349. package/examples/autogen/multi-agent.ossa.json +1 -1
  350. package/examples/autonomous-evolution/self-evolving-agent.ossa.yaml +1 -1
  351. package/examples/build-once-use-everywhere/agent.ossa.yaml +1 -1
  352. package/examples/claude-code/code-reviewer.ossa.yaml +1 -1
  353. package/examples/claude-code/ossa-validator.ossa.yaml +1 -1
  354. package/examples/common_npm/agent-router.ossa.yaml +2 -2
  355. package/examples/contracts/data-consumer.ossa.yaml +1 -1
  356. package/examples/contracts/data-producer-v2.ossa.yaml +1 -1
  357. package/examples/contracts/data-producer.ossa.yaml +1 -1
  358. package/examples/crewai/research-team.ossa.json +1 -1
  359. package/examples/cursor/code-review-agent.ossa.json +1 -1
  360. package/examples/drupal/QUICKSTART.md +439 -0
  361. package/examples/drupal/ai_agents_ossa-module/.agents/example-agent/agent.ossa.yaml +1 -1
  362. package/examples/drupal/content-moderator.ossa.yaml +107 -0
  363. package/examples/drupal/gitlab-ml-recommender.ossa.yaml +2 -2
  364. package/examples/economics/marketplace-agent.ossa.json +1 -1
  365. package/examples/export/langchain/production-agent-with-memory/README.md +373 -0
  366. package/examples/export/langchain/production-agent-with-memory/agent.ossa.yaml +97 -0
  367. package/examples/export/langchain/production-agent-with-streaming/README.md +617 -0
  368. package/examples/export/langchain/production-agent-with-streaming/agent.ossa.yaml +100 -0
  369. package/examples/export/langchain/production-agent-with-streaming/client-example.py +263 -0
  370. package/examples/export/langchain/production-agent-with-tools/README.md +296 -0
  371. package/examples/export/langchain/production-agent-with-tools/agent.ossa.yaml +216 -0
  372. package/examples/export/langchain-export-example.ts +246 -0
  373. package/examples/export/langserve-export-example.ts +246 -0
  374. package/examples/export/test-generation-example.ts +457 -0
  375. package/examples/extensions/agents-md-advanced.yml +1 -1
  376. package/examples/extensions/agents-md-basic.yml +1 -1
  377. package/examples/extensions/agents-md-sync.yml +1 -1
  378. package/examples/extensions/agents-md-v1.yml +1 -1
  379. package/examples/extensions/drupal-v1.yml +1 -1
  380. package/examples/extensions/encryption-multi-provider.yaml +4 -4
  381. package/examples/extensions/kagent-v1.yml +1 -1
  382. package/examples/extensions/knowledge-sources.yaml +1 -1
  383. package/examples/extensions/mcp-full-featured.yaml +1 -1
  384. package/examples/genetics/breeding-agent.ossa.json +1 -1
  385. package/examples/getting-started/01-minimal-agent.ossa.yaml +1 -1
  386. package/examples/getting-started/02-agent-with-tools.ossa.yaml +1 -1
  387. package/examples/getting-started/03-agent-with-safety.ossa.yaml +1 -1
  388. package/examples/getting-started/04-agent-with-messaging.ossa.yaml +1 -1
  389. package/examples/getting-started/05-workflow-composition.ossa.yaml +1 -1
  390. package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
  391. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +1 -1
  392. package/examples/kagent/compliance-validator.ossa.yaml +1 -1
  393. package/examples/kagent/cost-optimizer.ossa.yaml +1 -1
  394. package/examples/kagent/documentation-agent.ossa.yaml +1 -1
  395. package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +2 -2
  396. package/examples/kagent/k8s-troubleshooter.ossa.yaml +1 -1
  397. package/examples/kagent/security-scanner.ossa.yaml +1 -1
  398. package/examples/langchain/chain-agent.ossa.json +1 -1
  399. package/examples/langflow/workflow-agent.ossa.json +1 -1
  400. package/examples/langgraph/state-machine-agent.ossa.json +1 -1
  401. package/examples/lifecycle/mentoring-agent.ossa.json +1 -1
  402. package/examples/llamaindex/rag-agent.ossa.json +1 -1
  403. package/examples/mcp/database-mcp.ossa.yaml +1 -1
  404. package/examples/mcp/filesystem-mcp.ossa.yaml +1 -1
  405. package/examples/messaging/dependency-healer.ossa.yaml +1 -1
  406. package/examples/messaging/incident-responder.ossa.yaml +1 -1
  407. package/examples/messaging/routing-rules.ossa.yaml +1 -1
  408. package/examples/messaging/security-scanner.ossa.yaml +1 -1
  409. package/examples/migration-guides/from-langchain-to-ossa.yaml +4 -4
  410. package/examples/migrations/langchain/01-python-react-agent-after.ossa.yaml +1 -1
  411. package/examples/migrations/langchain/02-typescript-conversational-after.ossa.yaml +1 -1
  412. package/examples/migrations/langchain/03-sequential-chain-after.ossa.yaml +1 -1
  413. package/examples/migrations/langchain/04-config-based-after.ossa.yaml +1 -1
  414. package/examples/migrations/swarm-to-ossa/after-handoffs.ossa.yaml +6 -6
  415. package/examples/migrations/swarm-to-ossa/after-triage-agent.ossa.yaml +3 -3
  416. package/examples/multi-agent/conditional-router.ossa.yaml +1 -1
  417. package/examples/multi-agent/parallel-execution.ossa.yaml +1 -1
  418. package/examples/multi-agent/sequential-pipeline.ossa.yaml +1 -1
  419. package/examples/multi-agent-research-workflow.ossa.yaml +133 -0
  420. package/examples/multi-platform/single-manifest/agent.ossa.yaml +1 -1
  421. package/examples/npm-export-example.ts +150 -0
  422. package/examples/observability/activity-stream-full.yaml +1 -1
  423. package/examples/openai/basic-agent.ossa.yaml +1 -1
  424. package/examples/openai/multi-tool-agent.ossa.json +1 -1
  425. package/examples/openai/swarm-agent.ossa.json +1 -1
  426. package/examples/ossa-templates/01-code-assistant.ossa.yaml +1 -1
  427. package/examples/ossa-templates/02-security-scanner.ossa.yaml +1 -1
  428. package/examples/ossa-templates/03-ci-pipeline.ossa.yaml +1 -1
  429. package/examples/ossa-templates/04-code-reviewer.ossa.yaml +1 -1
  430. package/examples/ossa-templates/05-doc-generator.ossa.yaml +1 -1
  431. package/examples/ossa-templates/06-compliance-validator.ossa.yaml +1 -1
  432. package/examples/ossa-templates/07-workflow-orchestrator.ossa.yaml +1 -1
  433. package/examples/ossa-templates/08-content-writer.ossa.yaml +1 -1
  434. package/examples/ossa-templates/09-test-generator.ossa.yaml +1 -1
  435. package/examples/ossa-templates/10-data-transformer.ossa.yaml +1 -1
  436. package/examples/ossa-templates/11-react-performance-expert.ossa.yaml +1 -1
  437. package/examples/ossa-templates/12-typescript-type-safety-expert.ossa.yaml +1 -1
  438. package/examples/ossa-templates/13-accessibility-champion.ossa.yaml +1 -1
  439. package/examples/ossa-templates/14-security-hardening-agent.ossa.yaml +1 -1
  440. package/examples/production/document-analyzer-openai.yml +1 -1
  441. package/examples/production-ready/01-customer-support-bot/.env.example +32 -0
  442. package/examples/production-ready/01-customer-support-bot/Dockerfile +30 -0
  443. package/examples/production-ready/01-customer-support-bot/README.md +295 -0
  444. package/examples/production-ready/01-customer-support-bot/agent.ossa.yaml +172 -0
  445. package/examples/production-ready/01-customer-support-bot/docker-compose.yml +55 -0
  446. package/examples/production-ready/01-customer-support-bot/openapi.yaml +238 -0
  447. package/examples/production-ready/01-customer-support-bot/package.json +48 -0
  448. package/examples/production-ready/02-code-review-agent/README.md +72 -0
  449. package/examples/production-ready/02-code-review-agent/agent.ossa.yaml +239 -0
  450. package/examples/production-ready/02-code-review-agent/docker-compose.yml +22 -0
  451. package/examples/production-ready/02-code-review-agent/openapi.yaml +150 -0
  452. package/examples/production-ready/03-data-analysis-agent/README.md +51 -0
  453. package/examples/production-ready/03-data-analysis-agent/agent.ossa.yaml +97 -0
  454. package/examples/production-ready/03-data-analysis-agent/openapi.yaml +74 -0
  455. package/examples/production-ready/04-content-moderator/README.md +55 -0
  456. package/examples/production-ready/04-content-moderator/agent.ossa.yaml +131 -0
  457. package/examples/production-ready/04-content-moderator/openapi.yaml +50 -0
  458. package/examples/production-ready/05-sales-assistant/README.md +37 -0
  459. package/examples/production-ready/05-sales-assistant/agent.ossa.yaml +146 -0
  460. package/examples/production-ready/05-sales-assistant/openapi.yaml +59 -0
  461. package/examples/production-ready/06-devops-agent/README.md +39 -0
  462. package/examples/production-ready/06-devops-agent/agent.ossa.yaml +141 -0
  463. package/examples/production-ready/06-devops-agent/openapi.yaml +51 -0
  464. package/examples/production-ready/07-research-assistant/README.md +31 -0
  465. package/examples/production-ready/07-research-assistant/agent.ossa.yaml +119 -0
  466. package/examples/production-ready/07-research-assistant/openapi.yaml +56 -0
  467. package/examples/production-ready/08-email-triage-agent/README.md +33 -0
  468. package/examples/production-ready/08-email-triage-agent/agent.ossa.yaml +133 -0
  469. package/examples/production-ready/08-email-triage-agent/openapi.yaml +41 -0
  470. package/examples/production-ready/09-security-scanner/README.md +49 -0
  471. package/examples/production-ready/09-security-scanner/agent.ossa.yaml +174 -0
  472. package/examples/production-ready/09-security-scanner/openapi.yaml +46 -0
  473. package/examples/production-ready/10-meeting-assistant/README.md +53 -0
  474. package/examples/production-ready/10-meeting-assistant/agent.ossa.yaml +211 -0
  475. package/examples/production-ready/10-meeting-assistant/docker-compose.yml +27 -0
  476. package/examples/production-ready/10-meeting-assistant/openapi.yaml +131 -0
  477. package/examples/production-ready/COMPLETION_REPORT.txt +272 -0
  478. package/examples/production-ready/INDEX.md +296 -0
  479. package/examples/production-ready/README.md +452 -0
  480. package/examples/production-ready/SUMMARY.md +362 -0
  481. package/examples/production-ready/TEST_RESULTS.md +458 -0
  482. package/examples/quickstart/support-agent.ossa.yaml +1 -1
  483. package/examples/real-world/gitlab-cicd-optimizer.ossa.yaml +1 -1
  484. package/examples/real-world/rag-documentation-assistant.ossa.yaml +1 -1
  485. package/examples/registry/agents/code-reviewer/agent.yaml +1 -1
  486. package/examples/registry/agents/security-scanner/agent.yaml +1 -1
  487. package/examples/runtime-adapters/bedrock-claude-example.ossa.yaml +1 -1
  488. package/examples/schema/reusable-components.yaml +1 -1
  489. package/examples/showcase/ci-pipeline.ossa.yaml +1 -1
  490. package/examples/showcase/code-assistant.ossa.yaml +1 -1
  491. package/examples/showcase/code-reviewer.ossa.yaml +1 -1
  492. package/examples/showcase/compliance-validator.ossa.yaml +1 -1
  493. package/examples/showcase/content-writer.ossa.yaml +1 -1
  494. package/examples/showcase/data-transformer.ossa.yaml +1 -1
  495. package/examples/showcase/doc-generator.ossa.yaml +1 -1
  496. package/examples/showcase/security-scanner.ossa.yaml +1 -1
  497. package/examples/showcase/test-generator.ossa.yaml +1 -1
  498. package/examples/showcase/workflow-orchestrator.ossa.yaml +1 -1
  499. package/examples/skills-example.ossa.yaml +140 -0
  500. package/examples/swarm/pso-optimizer.ossa.json +1 -1
  501. package/examples/tasks/batch-email-sender.yaml +1 -1
  502. package/examples/tasks/data-transform.yaml +1 -1
  503. package/examples/tasks/publish-content.yaml +1 -1
  504. package/examples/templates/ossa-compliance.yaml +1 -1
  505. package/examples/unified/security-scanner.ossa.yaml +1 -1
  506. package/examples/v0.3.6-features/genetics-breeding-advanced.ossa.yaml +1 -1
  507. package/examples/v0.3.6-features/genetics-breeding-simple.ossa.yaml +1 -1
  508. package/examples/v0.3.6-features/genetics-fitness-scoring.ossa.yaml +1 -1
  509. package/examples/vercel/edge-agent.ossa.json +1 -1
  510. package/examples/workflows/batch-email-campaign.yaml +1 -1
  511. package/examples/workflows/content-review-publish.yaml +1 -1
  512. package/examples/workflows/simple-etl.yaml +1 -1
  513. package/openapi/cli/openapi.yaml +221 -5
  514. package/package.json +17 -7
  515. package/dist/cli/commands/export-v2.command.d.ts +0 -7
  516. package/dist/cli/commands/export-v2.command.d.ts.map +0 -1
  517. package/dist/cli/commands/export-v2.command.js.map +0 -1
@@ -0,0 +1,679 @@
1
+ /**
2
+ * LangChain Plan-and-Execute Agent Generator (v0.4.1)
3
+ *
4
+ * Generates production-ready Plan-and-Execute agent architecture.
5
+ * Alternative to ReAct agents - separates planning and execution phases.
6
+ *
7
+ * Architecture:
8
+ * - Planner: Creates step-by-step execution plan
9
+ * - Executor: Executes each plan step with tools
10
+ * - Replanner: Adjusts plan based on execution results
11
+ *
12
+ * SOLID: Single Responsibility - Plan-Execute agent generation only
13
+ * DRY: Reusable templates for planner and executor
14
+ */
15
+ export class PlanExecuteGenerator {
16
+ /**
17
+ * Generate planner_agent.py - Creates execution plans
18
+ */
19
+ generatePlanner(manifest, config = {}) {
20
+ const agentName = manifest.metadata?.name || 'agent';
21
+ const systemPrompt = manifest.spec?.role || '';
22
+ const maxPlanningIterations = config.maxPlanningIterations || 3;
23
+ const planningPrompt = config.planningPrompt || this.getDefaultPlanningPrompt();
24
+ return `"""
25
+ Planner Agent - Plan Generation
26
+ Generated from OSSA manifest
27
+
28
+ This agent creates step-by-step execution plans for complex tasks.
29
+ """
30
+
31
+ from typing import Any, Dict, List, Optional
32
+ from langchain.prompts import ChatPromptTemplate
33
+ from langchain_openai import ChatOpenAI
34
+ from langchain_anthropic import ChatAnthropic
35
+ from pydantic import BaseModel, Field
36
+ import logging
37
+ import os
38
+
39
+ logger = logging.getLogger(__name__)
40
+
41
+
42
+ class Step(BaseModel):
43
+ """Individual step in execution plan"""
44
+ id: int = Field(..., description="Step number")
45
+ description: str = Field(..., description="What to do in this step")
46
+ tool: Optional[str] = Field(None, description="Tool to use (if applicable)")
47
+ dependencies: List[int] = Field(default_factory=list, description="Step IDs this depends on")
48
+ expected_output: str = Field(..., description="Expected result from this step")
49
+
50
+
51
+ class Plan(BaseModel):
52
+ """Complete execution plan"""
53
+ goal: str = Field(..., description="Overall goal to achieve")
54
+ steps: List[Step] = Field(..., description="Ordered list of steps")
55
+ reasoning: str = Field(..., description="Why this plan will achieve the goal")
56
+
57
+
58
+ class PlannerAgent:
59
+ """Agent responsible for creating execution plans"""
60
+
61
+ def __init__(self):
62
+ self.llm = self._create_llm()
63
+ self.max_iterations = ${maxPlanningIterations}
64
+ self.prompt = ChatPromptTemplate.from_messages([
65
+ ("system", """${systemPrompt.replace(/"/g, '\\"').replace(/\n/g, '\\n')}
66
+
67
+ ${planningPrompt}"""),
68
+ ("human", "{input}"),
69
+ ])
70
+
71
+ def _create_llm(self):
72
+ """Initialize LLM for planning"""
73
+ provider = os.getenv("LLM_PROVIDER", "openai")
74
+ model = os.getenv("LLM_MODEL", "gpt-4")
75
+
76
+ if provider == "anthropic":
77
+ return ChatAnthropic(
78
+ model=model,
79
+ temperature=0.0, # Deterministic planning
80
+ api_key=os.getenv("ANTHROPIC_API_KEY"),
81
+ )
82
+ else:
83
+ return ChatOpenAI(
84
+ model=model,
85
+ temperature=0.0, # Deterministic planning
86
+ api_key=os.getenv("OPENAI_API_KEY"),
87
+ )
88
+
89
+ def create_plan(self, goal: str, available_tools: List[str], context: Optional[Dict[str, Any]] = None) -> Plan:
90
+ """
91
+ Create execution plan for given goal
92
+
93
+ Args:
94
+ goal: The objective to achieve
95
+ available_tools: List of tool names available for execution
96
+ context: Optional context information
97
+
98
+ Returns:
99
+ Structured execution plan
100
+ """
101
+ try:
102
+ logger.info(f"Creating plan for goal: {goal}")
103
+
104
+ # Prepare context
105
+ tools_str = ", ".join(available_tools) if available_tools else "No tools available"
106
+ context_str = f"\\n\\nContext: {context}" if context else ""
107
+
108
+ # Create planning prompt
109
+ planning_input = f"""Goal: {goal}
110
+
111
+ Available Tools: {tools_str}{context_str}
112
+
113
+ Create a detailed step-by-step plan to achieve this goal. Each step should:
114
+ 1. Be concrete and actionable
115
+ 2. Specify which tool to use (if applicable)
116
+ 3. State dependencies on previous steps
117
+ 4. Define expected output
118
+
119
+ Format your response as:
120
+ {{
121
+ "goal": "...",
122
+ "reasoning": "...",
123
+ "steps": [
124
+ {{
125
+ "id": 1,
126
+ "description": "...",
127
+ "tool": "tool_name or null",
128
+ "dependencies": [],
129
+ "expected_output": "..."
130
+ }},
131
+ ...
132
+ ]
133
+ }}"""
134
+
135
+ # Generate plan
136
+ chain = self.prompt | self.llm
137
+ response = chain.invoke({"input": planning_input})
138
+
139
+ # Parse response into Plan object
140
+ import json
141
+ try:
142
+ plan_dict = json.loads(response.content)
143
+ plan = Plan(**plan_dict)
144
+ except json.JSONDecodeError:
145
+ # Fallback: create simple plan
146
+ logger.warning("Failed to parse structured plan, creating simple plan")
147
+ plan = Plan(
148
+ goal=goal,
149
+ reasoning="Generated fallback plan due to parsing error",
150
+ steps=[
151
+ Step(
152
+ id=1,
153
+ description=f"Execute goal: {goal}",
154
+ tool=available_tools[0] if available_tools else None,
155
+ dependencies=[],
156
+ expected_output=f"Result of {goal}"
157
+ )
158
+ ]
159
+ )
160
+
161
+ logger.info(f"Created plan with {len(plan.steps)} steps")
162
+ return plan
163
+
164
+ except Exception as e:
165
+ logger.error(f"Error creating plan: {str(e)}", exc_info=True)
166
+ # Return fallback plan
167
+ return Plan(
168
+ goal=goal,
169
+ reasoning=f"Error in planning: {str(e)}",
170
+ steps=[
171
+ Step(
172
+ id=1,
173
+ description=f"Execute goal: {goal}",
174
+ tool=None,
175
+ dependencies=[],
176
+ expected_output="Error occurred during planning"
177
+ )
178
+ ]
179
+ )
180
+
181
+ def replan(
182
+ self,
183
+ original_plan: Plan,
184
+ completed_steps: List[int],
185
+ failed_step: int,
186
+ error: str,
187
+ available_tools: List[str]
188
+ ) -> Plan:
189
+ """
190
+ Create new plan after execution failure
191
+
192
+ Args:
193
+ original_plan: The original execution plan
194
+ completed_steps: Steps that completed successfully
195
+ failed_step: Step ID that failed
196
+ error: Error message from failed step
197
+ available_tools: Available tools
198
+
199
+ Returns:
200
+ Updated execution plan
201
+ """
202
+ try:
203
+ logger.info(f"Replanning after failure at step {failed_step}")
204
+
205
+ tools_str = ", ".join(available_tools)
206
+ completed_str = ", ".join(map(str, completed_steps))
207
+
208
+ replan_input = f"""Original Goal: {original_plan.goal}
209
+
210
+ Completed Steps: {completed_str}
211
+ Failed Step: {failed_step}
212
+ Error: {error}
213
+
214
+ Available Tools: {tools_str}
215
+
216
+ The execution failed. Create a new plan that:
217
+ 1. Accounts for already completed steps
218
+ 2. Fixes the issue that caused the failure
219
+ 3. Still achieves the original goal
220
+
221
+ Use the same JSON format as before."""
222
+
223
+ chain = self.prompt | self.llm
224
+ response = chain.invoke({"input": replan_input})
225
+
226
+ # Parse response
227
+ import json
228
+ try:
229
+ plan_dict = json.loads(response.content)
230
+ new_plan = Plan(**plan_dict)
231
+ logger.info(f"Created recovery plan with {len(new_plan.steps)} steps")
232
+ return new_plan
233
+ except json.JSONDecodeError:
234
+ logger.warning("Failed to parse recovery plan, returning original")
235
+ return original_plan
236
+
237
+ except Exception as e:
238
+ logger.error(f"Error in replanning: {str(e)}", exc_info=True)
239
+ return original_plan
240
+
241
+
242
+ def create_planner() -> PlannerAgent:
243
+ """Create planner agent instance"""
244
+ return PlannerAgent()
245
+ `;
246
+ }
247
+ /**
248
+ * Generate executor_agent.py - Executes plan steps
249
+ */
250
+ generateExecutor(manifest, config = {}) {
251
+ const agentName = manifest.metadata?.name || 'agent';
252
+ const systemPrompt = manifest.spec?.role || '';
253
+ const executionPrompt = config.executionPrompt || this.getDefaultExecutionPrompt();
254
+ return `"""
255
+ Executor Agent - Plan Execution
256
+ Generated from OSSA manifest
257
+
258
+ This agent executes individual steps from the plan using available tools.
259
+ """
260
+
261
+ from typing import Any, Dict, List, Optional
262
+ from langchain.agents import AgentExecutor, create_openai_tools_agent
263
+ from langchain_openai import ChatOpenAI
264
+ from langchain_anthropic import ChatAnthropic
265
+ from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
266
+ from pydantic import BaseModel, Field
267
+ import logging
268
+ import os
269
+
270
+ logger = logging.getLogger(__name__)
271
+
272
+
273
+ class StepResult(BaseModel):
274
+ """Result from executing a single step"""
275
+ step_id: int = Field(..., description="Step ID that was executed")
276
+ success: bool = Field(..., description="Whether step succeeded")
277
+ output: Any = Field(..., description="Output from step execution")
278
+ error: Optional[str] = Field(None, description="Error message if failed")
279
+ tool_used: Optional[str] = Field(None, description="Tool that was used")
280
+
281
+
282
+ class ExecutorAgent:
283
+ """Agent responsible for executing plan steps"""
284
+
285
+ def __init__(self, tools: List):
286
+ self.tools = tools
287
+ self.llm = self._create_llm()
288
+ self.agent_executor = self._create_executor()
289
+
290
+ def _create_llm(self):
291
+ """Initialize LLM for execution"""
292
+ provider = os.getenv("LLM_PROVIDER", "openai")
293
+ model = os.getenv("LLM_MODEL", "gpt-4")
294
+ temperature = float(os.getenv("LLM_TEMPERATURE", "0.2"))
295
+
296
+ if provider == "anthropic":
297
+ return ChatAnthropic(
298
+ model=model,
299
+ temperature=temperature,
300
+ api_key=os.getenv("ANTHROPIC_API_KEY"),
301
+ )
302
+ else:
303
+ return ChatOpenAI(
304
+ model=model,
305
+ temperature=temperature,
306
+ api_key=os.getenv("OPENAI_API_KEY"),
307
+ )
308
+
309
+ def _create_executor(self) -> AgentExecutor:
310
+ """Create agent executor with tools"""
311
+ prompt = ChatPromptTemplate.from_messages([
312
+ ("system", """${systemPrompt.replace(/"/g, '\\"').replace(/\n/g, '\\n')}
313
+
314
+ ${executionPrompt}"""),
315
+ MessagesPlaceholder(variable_name="chat_history"),
316
+ ("human", "{input}"),
317
+ MessagesPlaceholder(variable_name="agent_scratchpad"),
318
+ ])
319
+
320
+ agent = create_openai_tools_agent(self.llm, self.tools, prompt)
321
+
322
+ return AgentExecutor(
323
+ agent=agent,
324
+ tools=self.tools,
325
+ verbose=True,
326
+ handle_parsing_errors=True,
327
+ max_iterations=5,
328
+ )
329
+
330
+ def execute_step(
331
+ self,
332
+ step_id: int,
333
+ step_description: str,
334
+ tool_name: Optional[str],
335
+ context: Dict[str, Any]
336
+ ) -> StepResult:
337
+ """
338
+ Execute a single step from the plan
339
+
340
+ Args:
341
+ step_id: Step identifier
342
+ step_description: What to do in this step
343
+ tool_name: Tool to use (if specified)
344
+ context: Context from previous steps
345
+
346
+ Returns:
347
+ Result of step execution
348
+ """
349
+ try:
350
+ logger.info(f"Executing step {step_id}: {step_description}")
351
+
352
+ # Build execution prompt
353
+ context_str = "\\n".join([f"{k}: {v}" for k, v in context.items()])
354
+ tool_hint = f"\\nUse the '{tool_name}' tool." if tool_name else ""
355
+
356
+ execution_input = f"""Execute this step:
357
+ {step_description}{tool_hint}
358
+
359
+ Context from previous steps:
360
+ {context_str}
361
+
362
+ Provide the result of this step."""
363
+
364
+ # Execute
365
+ response = self.agent_executor.invoke({
366
+ "input": execution_input,
367
+ "chat_history": []
368
+ })
369
+
370
+ result = StepResult(
371
+ step_id=step_id,
372
+ success=True,
373
+ output=response.get("output", "No output"),
374
+ tool_used=tool_name
375
+ )
376
+
377
+ logger.info(f"Step {step_id} completed successfully")
378
+ return result
379
+
380
+ except Exception as e:
381
+ logger.error(f"Error executing step {step_id}: {str(e)}", exc_info=True)
382
+ return StepResult(
383
+ step_id=step_id,
384
+ success=False,
385
+ output=None,
386
+ error=str(e),
387
+ tool_used=tool_name
388
+ )
389
+
390
+
391
+ def create_executor(tools: List) -> ExecutorAgent:
392
+ """Create executor agent instance"""
393
+ return ExecutorAgent(tools)
394
+ `;
395
+ }
396
+ /**
397
+ * Generate plan_execute.py - Main coordinator
398
+ */
399
+ generatePlanExecute(manifest, config = {}) {
400
+ const agentName = manifest.metadata?.name || 'agent';
401
+ const maxExecutionSteps = config.maxExecutionSteps || 10;
402
+ const enableReplanning = config.enableReplanning !== false;
403
+ return `"""
404
+ Plan-and-Execute Agent (${agentName})
405
+ Generated from OSSA manifest
406
+
407
+ This agent uses a two-phase approach:
408
+ 1. Planning: Create step-by-step execution plan
409
+ 2. Execution: Execute each step with tools
410
+
411
+ Supports replanning after failures for robust execution.
412
+ """
413
+
414
+ from typing import Any, Dict, List, Optional
415
+ from planner_agent import create_planner, Plan, Step
416
+ from executor_agent import create_executor, StepResult
417
+ from tools import get_tools
418
+ from memory import get_memory
419
+ from callbacks import get_callbacks, get_cost_tracker, print_cost_summary
420
+ from error_handling import safe_agent_invoke, get_error_stats
421
+ import logging
422
+ import os
423
+
424
+ logger = logging.getLogger(__name__)
425
+
426
+
427
+ class PlanExecuteAgent:
428
+ """Plan-and-Execute agent coordinator"""
429
+
430
+ def __init__(self):
431
+ self.tools = get_tools()
432
+ self.planner = create_planner()
433
+ self.executor = create_executor(self.tools)
434
+ self.memory = get_memory()
435
+ self.callbacks = get_callbacks()
436
+ self.max_execution_steps = ${maxExecutionSteps}
437
+ self.enable_replanning = ${enableReplanning ? 'True' : 'False'}
438
+
439
+ def run(self, goal: str, context: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
440
+ """
441
+ Execute goal using plan-and-execute architecture
442
+
443
+ Args:
444
+ goal: The objective to achieve
445
+ context: Optional context information
446
+
447
+ Returns:
448
+ Execution results with plan and step outputs
449
+ """
450
+ try:
451
+ logger.info(f"Starting plan-and-execute for goal: {goal}")
452
+
453
+ # Phase 1: Planning
454
+ tool_names = [tool.name for tool in self.tools]
455
+ plan = self.planner.create_plan(goal, tool_names, context)
456
+
457
+ logger.info(f"Created plan with {len(plan.steps)} steps")
458
+ logger.debug(f"Plan reasoning: {plan.reasoning}")
459
+
460
+ # Phase 2: Execution
461
+ results = self._execute_plan(plan)
462
+
463
+ # Prepare response
464
+ success = all(r.success for r in results)
465
+ final_output = self._synthesize_output(plan, results)
466
+
467
+ # Add cost tracking
468
+ cost_tracker = get_cost_tracker()
469
+ cost_summary = cost_tracker.get_summary()
470
+
471
+ response = {
472
+ "success": success,
473
+ "goal": goal,
474
+ "plan": {
475
+ "reasoning": plan.reasoning,
476
+ "steps": [
477
+ {
478
+ "id": step.id,
479
+ "description": step.description,
480
+ "tool": step.tool,
481
+ }
482
+ for step in plan.steps
483
+ ],
484
+ },
485
+ "execution": [
486
+ {
487
+ "step_id": r.step_id,
488
+ "success": r.success,
489
+ "output": r.output,
490
+ "error": r.error,
491
+ "tool_used": r.tool_used,
492
+ }
493
+ for r in results
494
+ ],
495
+ "output": final_output,
496
+ "cost": cost_summary,
497
+ }
498
+
499
+ logger.info(f"Plan-and-execute completed: {success}")
500
+ return response
501
+
502
+ except Exception as e:
503
+ logger.error(f"Error in plan-and-execute: {str(e)}", exc_info=True)
504
+ return {
505
+ "success": False,
506
+ "goal": goal,
507
+ "error": str(e),
508
+ "error_type": type(e).__name__,
509
+ }
510
+
511
+ def _execute_plan(self, plan: Plan) -> List[StepResult]:
512
+ """
513
+ Execute all steps in plan
514
+
515
+ Args:
516
+ plan: Execution plan
517
+
518
+ Returns:
519
+ List of step results
520
+ """
521
+ results: List[StepResult] = []
522
+ context: Dict[str, Any] = {}
523
+ completed_steps: List[int] = []
524
+
525
+ for step in plan.steps[:self.max_execution_steps]:
526
+ # Check dependencies
527
+ if not self._dependencies_met(step, completed_steps):
528
+ logger.warning(f"Step {step.id} dependencies not met, skipping")
529
+ results.append(StepResult(
530
+ step_id=step.id,
531
+ success=False,
532
+ output=None,
533
+ error="Dependencies not met"
534
+ ))
535
+ continue
536
+
537
+ # Execute step
538
+ result = self.executor.execute_step(
539
+ step_id=step.id,
540
+ step_description=step.description,
541
+ tool_name=step.tool,
542
+ context=context
543
+ )
544
+
545
+ results.append(result)
546
+
547
+ if result.success:
548
+ # Update context with result
549
+ context[f"step_{step.id}"] = result.output
550
+ completed_steps.append(step.id)
551
+ else:
552
+ # Handle failure
553
+ if self.enable_replanning:
554
+ logger.info(f"Replanning due to failure at step {step.id}")
555
+ new_plan = self.planner.replan(
556
+ original_plan=plan,
557
+ completed_steps=completed_steps,
558
+ failed_step=step.id,
559
+ error=result.error or "Unknown error",
560
+ available_tools=[tool.name for tool in self.tools]
561
+ )
562
+ # Continue with new plan
563
+ remaining_results = self._execute_plan(new_plan)
564
+ results.extend(remaining_results)
565
+ break
566
+ else:
567
+ logger.warning(f"Step {step.id} failed, continuing without replanning")
568
+
569
+ return results
570
+
571
+ def _dependencies_met(self, step: Step, completed_steps: List[int]) -> bool:
572
+ """Check if step dependencies are satisfied"""
573
+ return all(dep in completed_steps for dep in step.dependencies)
574
+
575
+ def _synthesize_output(self, plan: Plan, results: List[StepResult]) -> str:
576
+ """
577
+ Synthesize final output from all step results
578
+
579
+ Args:
580
+ plan: Original plan
581
+ results: Step execution results
582
+
583
+ Returns:
584
+ Human-readable summary
585
+ """
586
+ successful_steps = [r for r in results if r.success]
587
+ failed_steps = [r for r in results if not r.success]
588
+
589
+ if not successful_steps:
590
+ return f"Failed to complete goal: {plan.goal}. All steps failed."
591
+
592
+ if failed_steps:
593
+ summary = f"Partially completed goal: {plan.goal}\\n\\n"
594
+ summary += f"Completed {len(successful_steps)}/{len(results)} steps.\\n\\n"
595
+ else:
596
+ summary = f"Successfully completed goal: {plan.goal}\\n\\n"
597
+
598
+ summary += "Results:\\n"
599
+ for result in successful_steps:
600
+ summary += f"- Step {result.step_id}: {result.output}\\n"
601
+
602
+ if failed_steps:
603
+ summary += "\\nFailed steps:\\n"
604
+ for result in failed_steps:
605
+ summary += f"- Step {result.step_id}: {result.error}\\n"
606
+
607
+ return summary
608
+
609
+
610
+ # Create global agent instance
611
+ agent = PlanExecuteAgent()
612
+
613
+
614
+ def run(goal: str, context: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
615
+ """
616
+ Run plan-and-execute agent
617
+
618
+ Args:
619
+ goal: The objective to achieve
620
+ context: Optional context information
621
+
622
+ Returns:
623
+ Execution results
624
+ """
625
+ return agent.run(goal, context)
626
+
627
+
628
+ if __name__ == "__main__":
629
+ # Example usage
630
+ print(f"Starting ${agentName} (Plan-and-Execute)...")
631
+
632
+ response = run("Research and write a blog post about AI trends in 2024")
633
+ print(f"Success: {response['success']}")
634
+ print(f"Output: {response['output']}")
635
+
636
+ if 'plan' in response:
637
+ print(f"\\nPlan:")
638
+ for step in response['plan']['steps']:
639
+ print(f" {step['id']}. {step['description']}")
640
+ `;
641
+ }
642
+ /**
643
+ * Get default planning prompt
644
+ */
645
+ getDefaultPlanningPrompt() {
646
+ return `You are an expert planner. Your role is to break down complex goals into step-by-step execution plans.
647
+
648
+ For each step:
649
+ - Be specific and actionable
650
+ - Identify which tool to use (if applicable)
651
+ - Note dependencies on previous steps
652
+ - State expected output
653
+
654
+ Create plans that are:
655
+ - Logical and sequential
656
+ - Achievable with available tools
657
+ - Robust to failures (include verification steps)
658
+ - Efficient (minimize unnecessary steps)`;
659
+ }
660
+ /**
661
+ * Get default execution prompt
662
+ */
663
+ getDefaultExecutionPrompt() {
664
+ return `You are a precise executor. Your role is to execute individual steps from a plan.
665
+
666
+ For each step:
667
+ - Follow the instructions exactly
668
+ - Use the specified tool if indicated
669
+ - Use context from previous steps
670
+ - Provide clear output
671
+
672
+ Execute steps:
673
+ - Carefully and accurately
674
+ - With proper error handling
675
+ - Using available context
676
+ - Producing useful output for subsequent steps`;
677
+ }
678
+ }
679
+ //# sourceMappingURL=plan-execute-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-execute-generator.js","sourceRoot":"","sources":["../../../../src/services/export/langchain/plan-execute-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+BH,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,eAAe,CAAC,QAAmB,EAAE,SAA4B,EAAE;QACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC;QACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC/C,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,IAAI,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAuCqB,qBAAqB;;4BAEzB,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;;EAEjF,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkLf,CAAC;IACA,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAmB,EAAE,SAA4B,EAAE;QAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC;QACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEnF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA0DiB,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;;EAEjF,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgFhB,CAAC;IACA,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,QAAmB,EAAE,SAA4B,EAAE;QACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC;QACrD,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACzD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,KAAK,KAAK,CAAC;QAE3D,OAAO;0BACe,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAgCE,iBAAiB;mCACnB,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAiM/C,SAAS;;;;;;;;;;CAU/B,CAAC;IACA,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,OAAO;;;;;;;;;;;;yCAY8B,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,yBAAyB;QAC/B,OAAO;;;;;;;;;;;;+CAYoC,CAAC;IAC9C,CAAC;CACF"}