@octo-cyber/ai 0.5.4 → 0.5.6

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 (329) hide show
  1. package/dist/shared/IClaudeCodeSessionManager.d.ts +151 -0
  2. package/dist/shared/IClaudeCodeSessionManager.d.ts.map +1 -0
  3. package/dist/shared/IClaudeCodeSessionManager.js +6 -0
  4. package/dist/shared/IClaudeCodeSessionManager.js.map +1 -0
  5. package/dist/src/BranchDecisionEngine.d.ts +73 -0
  6. package/dist/src/BranchDecisionEngine.d.ts.map +1 -0
  7. package/dist/src/BranchDecisionEngine.js +195 -0
  8. package/dist/src/BranchDecisionEngine.js.map +1 -0
  9. package/dist/src/agent/agent-approval.controller.d.ts +20 -0
  10. package/dist/src/agent/agent-approval.controller.d.ts.map +1 -0
  11. package/dist/src/agent/agent-approval.controller.js +101 -0
  12. package/dist/src/agent/agent-approval.controller.js.map +1 -0
  13. package/dist/src/agent/agent-approval.entity.d.ts +15 -0
  14. package/dist/src/agent/agent-approval.entity.d.ts.map +1 -0
  15. package/dist/src/agent/agent-approval.entity.js +63 -0
  16. package/dist/src/agent/agent-approval.entity.js.map +1 -0
  17. package/dist/src/agent/agent-approval.service.d.ts +35 -0
  18. package/dist/src/agent/agent-approval.service.d.ts.map +1 -0
  19. package/dist/src/agent/agent-approval.service.js +109 -0
  20. package/dist/src/agent/agent-approval.service.js.map +1 -0
  21. package/dist/src/agent/agent-gateway.controller.d.ts +30 -0
  22. package/dist/src/agent/agent-gateway.controller.d.ts.map +1 -0
  23. package/dist/src/agent/agent-gateway.controller.js +112 -0
  24. package/dist/src/agent/agent-gateway.controller.js.map +1 -0
  25. package/dist/src/agent/agent-gateway.service.d.ts +33 -0
  26. package/dist/src/agent/agent-gateway.service.d.ts.map +1 -0
  27. package/dist/src/agent/agent-gateway.service.js +84 -0
  28. package/dist/src/agent/agent-gateway.service.js.map +1 -0
  29. package/dist/src/agent/agent-registry.service.d.ts +30 -0
  30. package/dist/src/agent/agent-registry.service.d.ts.map +1 -0
  31. package/dist/src/agent/agent-registry.service.js +45 -0
  32. package/dist/src/agent/agent-registry.service.js.map +1 -0
  33. package/dist/src/agent/agent-run.controller.d.ts +42 -0
  34. package/dist/src/agent/agent-run.controller.d.ts.map +1 -0
  35. package/dist/src/agent/agent-run.controller.js +195 -0
  36. package/dist/src/agent/agent-run.controller.js.map +1 -0
  37. package/dist/src/agent/agent-run.entity.d.ts +35 -0
  38. package/dist/src/agent/agent-run.entity.d.ts.map +1 -0
  39. package/dist/src/agent/agent-run.entity.js +98 -0
  40. package/dist/src/agent/agent-run.entity.js.map +1 -0
  41. package/dist/src/agent/agent-run.service.d.ts +48 -0
  42. package/dist/src/agent/agent-run.service.d.ts.map +1 -0
  43. package/dist/src/agent/agent-run.service.js +155 -0
  44. package/dist/src/agent/agent-run.service.js.map +1 -0
  45. package/dist/src/agent/agent-session.controller.d.ts +20 -0
  46. package/dist/src/agent/agent-session.controller.d.ts.map +1 -0
  47. package/dist/src/agent/agent-session.controller.js +97 -0
  48. package/dist/src/agent/agent-session.controller.js.map +1 -0
  49. package/dist/src/agent/agent-session.entity.d.ts +13 -0
  50. package/dist/src/agent/agent-session.entity.d.ts.map +1 -0
  51. package/dist/src/agent/agent-session.entity.js +57 -0
  52. package/dist/src/agent/agent-session.entity.js.map +1 -0
  53. package/dist/src/agent/agent-session.service.d.ts +38 -0
  54. package/dist/src/agent/agent-session.service.d.ts.map +1 -0
  55. package/dist/src/agent/agent-session.service.js +112 -0
  56. package/dist/src/agent/agent-session.service.js.map +1 -0
  57. package/dist/src/agent/coding-tools.d.ts +7 -0
  58. package/dist/src/agent/coding-tools.d.ts.map +1 -0
  59. package/dist/src/agent/coding-tools.js +181 -0
  60. package/dist/src/agent/coding-tools.js.map +1 -0
  61. package/dist/src/agent/computer-use-tools.d.ts +15 -0
  62. package/dist/src/agent/computer-use-tools.d.ts.map +1 -0
  63. package/dist/src/agent/computer-use-tools.js +256 -0
  64. package/dist/src/agent/computer-use-tools.js.map +1 -0
  65. package/dist/src/agent/external-agent.controller.d.ts +41 -0
  66. package/dist/src/agent/external-agent.controller.d.ts.map +1 -0
  67. package/dist/src/agent/external-agent.controller.js +129 -0
  68. package/dist/src/agent/external-agent.controller.js.map +1 -0
  69. package/dist/src/agent/external-agent.entity.d.ts +22 -0
  70. package/dist/src/agent/external-agent.entity.d.ts.map +1 -0
  71. package/dist/src/agent/external-agent.entity.js +75 -0
  72. package/dist/src/agent/external-agent.entity.js.map +1 -0
  73. package/dist/src/agent/external-agent.service.d.ts +60 -0
  74. package/dist/src/agent/external-agent.service.d.ts.map +1 -0
  75. package/dist/src/agent/external-agent.service.js +143 -0
  76. package/dist/src/agent/external-agent.service.js.map +1 -0
  77. package/dist/src/ai.module.d.ts +22 -0
  78. package/dist/src/ai.module.d.ts.map +1 -0
  79. package/dist/src/ai.module.js +178 -0
  80. package/dist/src/ai.module.js.map +1 -0
  81. package/dist/{cli → src/cli}/adapters/antigravity.adapter.d.ts +2 -0
  82. package/dist/src/cli/adapters/antigravity.adapter.d.ts.map +1 -0
  83. package/dist/{cli → src/cli}/adapters/antigravity.adapter.js +78 -0
  84. package/dist/src/cli/adapters/antigravity.adapter.js.map +1 -0
  85. package/dist/src/cli/adapters/claude-cli.adapter.d.ts.map +1 -0
  86. package/dist/{cli → src/cli}/adapters/claude-cli.adapter.js +2 -0
  87. package/dist/src/cli/adapters/claude-cli.adapter.js.map +1 -0
  88. package/dist/src/cli/adapters/cli-proxy-api.adapter.d.ts +32 -0
  89. package/dist/src/cli/adapters/cli-proxy-api.adapter.d.ts.map +1 -0
  90. package/dist/src/cli/adapters/cli-proxy-api.adapter.js +239 -0
  91. package/dist/src/cli/adapters/cli-proxy-api.adapter.js.map +1 -0
  92. package/dist/src/cli/adapters/codex-cli.adapter.d.ts.map +1 -0
  93. package/dist/src/cli/adapters/codex-cli.adapter.js.map +1 -0
  94. package/dist/src/cli/adapters/detect-cli.d.ts.map +1 -0
  95. package/dist/src/cli/adapters/detect-cli.js.map +1 -0
  96. package/dist/src/cli/adapters/gemini-cli.adapter.d.ts.map +1 -0
  97. package/dist/src/cli/adapters/gemini-cli.adapter.js.map +1 -0
  98. package/dist/src/cli/adapters/index.d.ts.map +1 -0
  99. package/dist/src/cli/adapters/index.js.map +1 -0
  100. package/dist/{cli → src/cli}/cli-executor.service.d.ts +2 -0
  101. package/dist/src/cli/cli-executor.service.d.ts.map +1 -0
  102. package/dist/{cli → src/cli}/cli-executor.service.js +21 -1
  103. package/dist/src/cli/cli-executor.service.js.map +1 -0
  104. package/dist/src/cli/cli-registry.service.d.ts.map +1 -0
  105. package/dist/{cli → src/cli}/cli-registry.service.js +3 -1
  106. package/dist/src/cli/cli-registry.service.js.map +1 -0
  107. package/dist/{cli → src/cli}/controllers/ai-cli.controller.d.ts +4 -0
  108. package/dist/src/cli/controllers/ai-cli.controller.d.ts.map +1 -0
  109. package/dist/{cli → src/cli}/controllers/ai-cli.controller.js +33 -4
  110. package/dist/src/cli/controllers/ai-cli.controller.js.map +1 -0
  111. package/dist/{cli → src/cli}/index.d.ts +1 -1
  112. package/dist/src/cli/index.d.ts.map +1 -0
  113. package/dist/src/cli/index.js.map +1 -0
  114. package/dist/{cli → src/cli}/types.d.ts +23 -1
  115. package/dist/src/cli/types.d.ts.map +1 -0
  116. package/dist/{skill → src/cli}/types.js.map +1 -1
  117. package/dist/{cli → src/cli}/workspace.service.d.ts +11 -3
  118. package/dist/src/cli/workspace.service.d.ts.map +1 -0
  119. package/dist/{cli → src/cli}/workspace.service.js +61 -6
  120. package/dist/src/cli/workspace.service.js.map +1 -0
  121. package/dist/src/computer-use/computer-use.controller.d.ts +23 -0
  122. package/dist/src/computer-use/computer-use.controller.d.ts.map +1 -0
  123. package/dist/src/computer-use/computer-use.controller.js +87 -0
  124. package/dist/src/computer-use/computer-use.controller.js.map +1 -0
  125. package/dist/src/index.d.ts +12 -0
  126. package/dist/src/index.d.ts.map +1 -0
  127. package/dist/src/index.js +51 -0
  128. package/dist/src/index.js.map +1 -0
  129. package/dist/src/orchestrator/orchestrator-plan.entity.d.ts +31 -0
  130. package/dist/src/orchestrator/orchestrator-plan.entity.d.ts.map +1 -0
  131. package/dist/src/orchestrator/orchestrator-plan.entity.js +69 -0
  132. package/dist/src/orchestrator/orchestrator-plan.entity.js.map +1 -0
  133. package/dist/src/orchestrator/orchestrator-plan.service.d.ts +27 -0
  134. package/dist/src/orchestrator/orchestrator-plan.service.d.ts.map +1 -0
  135. package/dist/src/orchestrator/orchestrator-plan.service.js +201 -0
  136. package/dist/src/orchestrator/orchestrator-plan.service.js.map +1 -0
  137. package/dist/src/orchestrator/orchestrator.controller.d.ts +29 -0
  138. package/dist/src/orchestrator/orchestrator.controller.d.ts.map +1 -0
  139. package/dist/src/orchestrator/orchestrator.controller.js +144 -0
  140. package/dist/src/orchestrator/orchestrator.controller.js.map +1 -0
  141. package/dist/src/orchestrator/workflow-feedback.entity.d.ts +12 -0
  142. package/dist/src/orchestrator/workflow-feedback.entity.d.ts.map +1 -0
  143. package/dist/src/orchestrator/workflow-feedback.entity.js +49 -0
  144. package/dist/src/orchestrator/workflow-feedback.entity.js.map +1 -0
  145. package/dist/src/orchestrator/workflow-feedback.service.d.ts +14 -0
  146. package/dist/src/orchestrator/workflow-feedback.service.d.ts.map +1 -0
  147. package/dist/src/orchestrator/workflow-feedback.service.js +51 -0
  148. package/dist/src/orchestrator/workflow-feedback.service.js.map +1 -0
  149. package/dist/src/session/claude-code-session-manager.service.d.ts +28 -0
  150. package/dist/src/session/claude-code-session-manager.service.d.ts.map +1 -0
  151. package/dist/src/session/claude-code-session-manager.service.js +177 -0
  152. package/dist/src/session/claude-code-session-manager.service.js.map +1 -0
  153. package/dist/src/skill/controllers/skill-market.controller.d.ts +18 -0
  154. package/dist/src/skill/controllers/skill-market.controller.d.ts.map +1 -0
  155. package/dist/src/skill/controllers/skill-market.controller.js +128 -0
  156. package/dist/src/skill/controllers/skill-market.controller.js.map +1 -0
  157. package/dist/{skill → src/skill}/controllers/skill.controller.d.ts +4 -0
  158. package/dist/src/skill/controllers/skill.controller.d.ts.map +1 -0
  159. package/dist/{skill → src/skill}/controllers/skill.controller.js +31 -0
  160. package/dist/src/skill/controllers/skill.controller.js.map +1 -0
  161. package/dist/src/skill/entities/octo-skill.entity.d.ts.map +1 -0
  162. package/dist/src/skill/entities/octo-skill.entity.js.map +1 -0
  163. package/dist/{skill → src/skill}/index.d.ts +3 -1
  164. package/dist/src/skill/index.d.ts.map +1 -0
  165. package/dist/{skill → src/skill}/index.js +5 -1
  166. package/dist/src/skill/index.js.map +1 -0
  167. package/dist/src/skill/services/skill-generator.service.d.ts.map +1 -0
  168. package/dist/src/skill/services/skill-generator.service.js.map +1 -0
  169. package/dist/{skill → src/skill}/services/skill-installer.service.d.ts +27 -0
  170. package/dist/src/skill/services/skill-installer.service.d.ts.map +1 -0
  171. package/dist/{skill → src/skill}/services/skill-installer.service.js +108 -0
  172. package/dist/src/skill/services/skill-installer.service.js.map +1 -0
  173. package/dist/src/skill/services/skill-market-helpers.d.ts +25 -0
  174. package/dist/src/skill/services/skill-market-helpers.d.ts.map +1 -0
  175. package/dist/src/skill/services/skill-market-helpers.js +22 -0
  176. package/dist/src/skill/services/skill-market-helpers.js.map +1 -0
  177. package/dist/src/skill/services/skill-market.service.d.ts +60 -0
  178. package/dist/src/skill/services/skill-market.service.d.ts.map +1 -0
  179. package/dist/src/skill/services/skill-market.service.js +228 -0
  180. package/dist/src/skill/services/skill-market.service.js.map +1 -0
  181. package/dist/{skill → src/skill}/services/skill-registry.service.d.ts +1 -0
  182. package/dist/src/skill/services/skill-registry.service.d.ts.map +1 -0
  183. package/dist/{skill → src/skill}/services/skill-registry.service.js +18 -6
  184. package/dist/src/skill/services/skill-registry.service.js.map +1 -0
  185. package/dist/{skill → src/skill}/types.d.ts +32 -1
  186. package/dist/src/skill/types.d.ts.map +1 -0
  187. package/dist/{cli → src/skill}/types.js.map +1 -1
  188. package/dist/src/workflow-design/DocumentExtractorAgent.d.ts +47 -0
  189. package/dist/src/workflow-design/DocumentExtractorAgent.d.ts.map +1 -0
  190. package/dist/src/workflow-design/DocumentExtractorAgent.js +118 -0
  191. package/dist/src/workflow-design/DocumentExtractorAgent.js.map +1 -0
  192. package/dist/src/workflow-design/N8nNodeKnowledgeBase.d.ts +26 -0
  193. package/dist/src/workflow-design/N8nNodeKnowledgeBase.d.ts.map +1 -0
  194. package/dist/src/workflow-design/N8nNodeKnowledgeBase.js +362 -0
  195. package/dist/src/workflow-design/N8nNodeKnowledgeBase.js.map +1 -0
  196. package/dist/src/workflow-design/OctoAgentClient.d.ts +42 -0
  197. package/dist/src/workflow-design/OctoAgentClient.d.ts.map +1 -0
  198. package/dist/src/workflow-design/OctoAgentClient.js +191 -0
  199. package/dist/src/workflow-design/OctoAgentClient.js.map +1 -0
  200. package/dist/src/workflow-design/WorkflowDesignOrchestrator.d.ts +45 -0
  201. package/dist/src/workflow-design/WorkflowDesignOrchestrator.d.ts.map +1 -0
  202. package/dist/src/workflow-design/WorkflowDesignOrchestrator.js +265 -0
  203. package/dist/src/workflow-design/WorkflowDesignOrchestrator.js.map +1 -0
  204. package/dist/src/workflow-design/agents/ActionChainAgent.d.ts +9 -0
  205. package/dist/src/workflow-design/agents/ActionChainAgent.d.ts.map +1 -0
  206. package/dist/src/workflow-design/agents/ActionChainAgent.js +79 -0
  207. package/dist/src/workflow-design/agents/ActionChainAgent.js.map +1 -0
  208. package/dist/src/workflow-design/agents/CodeScriptAgent.d.ts +15 -0
  209. package/dist/src/workflow-design/agents/CodeScriptAgent.d.ts.map +1 -0
  210. package/dist/src/workflow-design/agents/CodeScriptAgent.js +96 -0
  211. package/dist/src/workflow-design/agents/CodeScriptAgent.js.map +1 -0
  212. package/dist/src/workflow-design/agents/LogicFlowAgent.d.ts +9 -0
  213. package/dist/src/workflow-design/agents/LogicFlowAgent.d.ts.map +1 -0
  214. package/dist/src/workflow-design/agents/LogicFlowAgent.js +78 -0
  215. package/dist/src/workflow-design/agents/LogicFlowAgent.js.map +1 -0
  216. package/dist/src/workflow-design/agents/TriggerAnalystAgent.d.ts +9 -0
  217. package/dist/src/workflow-design/agents/TriggerAnalystAgent.d.ts.map +1 -0
  218. package/dist/src/workflow-design/agents/TriggerAnalystAgent.js +65 -0
  219. package/dist/src/workflow-design/agents/TriggerAnalystAgent.js.map +1 -0
  220. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.d.ts +9 -0
  221. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.d.ts.map +1 -0
  222. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.js +117 -0
  223. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.js.map +1 -0
  224. package/dist/src/workflow-design/index.d.ts +12 -0
  225. package/dist/src/workflow-design/index.d.ts.map +1 -0
  226. package/dist/src/workflow-design/index.js +23 -0
  227. package/dist/src/workflow-design/index.js.map +1 -0
  228. package/dist/src/workflow-design/types.d.ts +155 -0
  229. package/dist/src/workflow-design/types.d.ts.map +1 -0
  230. package/dist/src/workflow-design/types.js +6 -0
  231. package/dist/src/workflow-design/types.js.map +1 -0
  232. package/package.json +21 -15
  233. package/web/components/CreateWorkspaceDialog.tsx +157 -0
  234. package/web/components/DirBrowser.tsx +85 -0
  235. package/web/components/GithubTokenDialog.tsx +152 -0
  236. package/web/components/LocalPathSection.tsx +91 -0
  237. package/web/components/MarketInstallDialog.tsx +196 -0
  238. package/web/components/MarketSkillCard.tsx +74 -0
  239. package/web/components/RepoList.tsx +97 -0
  240. package/web/components/SearchResultsGrid.tsx +55 -0
  241. package/web/components/SkillCard.tsx +4 -1
  242. package/web/components/ToolCard.tsx +88 -0
  243. package/web/components/WorkspaceCard.tsx +146 -0
  244. package/web/components/WorkspaceItem.tsx +65 -0
  245. package/web/components/WorkspaceSelect.tsx +94 -0
  246. package/web/index.ts +18 -1
  247. package/web/manifest.ts +7 -0
  248. package/web/messages/en-US.json +231 -7
  249. package/web/messages/zh-CN.json +234 -7
  250. package/web/pages/AgentMarketPage.tsx +318 -0
  251. package/web/pages/AgentRunsPage.tsx +162 -0
  252. package/web/pages/AgentsPage.tsx +239 -0
  253. package/web/pages/AiCliToolsPage.tsx +17 -128
  254. package/web/pages/ApprovalsPage.tsx +260 -0
  255. package/web/pages/OrchestratorPage.tsx +384 -0
  256. package/web/pages/SessionsPage.tsx +248 -0
  257. package/web/pages/SkillMarketPage.tsx +25 -0
  258. package/web/pages/WorkspaceSection.tsx +13 -113
  259. package/web/pages/WorkspacesPage.tsx +29 -254
  260. package/web/services/agent-approval.service.ts +35 -0
  261. package/web/services/agent-gateway.service.ts +41 -0
  262. package/web/services/agent-run.service.ts +48 -0
  263. package/web/services/agent-session.service.ts +30 -0
  264. package/web/services/ai-cli-service.ts +33 -0
  265. package/web/services/external-agent.service.ts +38 -0
  266. package/web/services/orchestrator.service.ts +52 -0
  267. package/web/services/skill-market-service.ts +88 -0
  268. package/web/services/skill-service.ts +12 -0
  269. package/dist/ai.module.d.ts +0 -4
  270. package/dist/ai.module.d.ts.map +0 -1
  271. package/dist/ai.module.js +0 -59
  272. package/dist/ai.module.js.map +0 -1
  273. package/dist/cli/adapters/antigravity.adapter.d.ts.map +0 -1
  274. package/dist/cli/adapters/antigravity.adapter.js.map +0 -1
  275. package/dist/cli/adapters/claude-cli.adapter.d.ts.map +0 -1
  276. package/dist/cli/adapters/claude-cli.adapter.js.map +0 -1
  277. package/dist/cli/adapters/codex-cli.adapter.d.ts.map +0 -1
  278. package/dist/cli/adapters/codex-cli.adapter.js.map +0 -1
  279. package/dist/cli/adapters/detect-cli.d.ts.map +0 -1
  280. package/dist/cli/adapters/detect-cli.js.map +0 -1
  281. package/dist/cli/adapters/gemini-cli.adapter.d.ts.map +0 -1
  282. package/dist/cli/adapters/gemini-cli.adapter.js.map +0 -1
  283. package/dist/cli/adapters/index.d.ts.map +0 -1
  284. package/dist/cli/adapters/index.js.map +0 -1
  285. package/dist/cli/cli-executor.service.d.ts.map +0 -1
  286. package/dist/cli/cli-executor.service.js.map +0 -1
  287. package/dist/cli/cli-registry.service.d.ts.map +0 -1
  288. package/dist/cli/cli-registry.service.js.map +0 -1
  289. package/dist/cli/controllers/ai-cli.controller.d.ts.map +0 -1
  290. package/dist/cli/controllers/ai-cli.controller.js.map +0 -1
  291. package/dist/cli/index.d.ts.map +0 -1
  292. package/dist/cli/index.js.map +0 -1
  293. package/dist/cli/types.d.ts.map +0 -1
  294. package/dist/cli/workspace.service.d.ts.map +0 -1
  295. package/dist/cli/workspace.service.js.map +0 -1
  296. package/dist/index.d.ts +0 -5
  297. package/dist/index.d.ts.map +0 -1
  298. package/dist/index.js +0 -23
  299. package/dist/index.js.map +0 -1
  300. package/dist/skill/controllers/skill.controller.d.ts.map +0 -1
  301. package/dist/skill/controllers/skill.controller.js.map +0 -1
  302. package/dist/skill/entities/octo-skill.entity.d.ts.map +0 -1
  303. package/dist/skill/entities/octo-skill.entity.js.map +0 -1
  304. package/dist/skill/index.d.ts.map +0 -1
  305. package/dist/skill/index.js.map +0 -1
  306. package/dist/skill/services/skill-generator.service.d.ts.map +0 -1
  307. package/dist/skill/services/skill-generator.service.js.map +0 -1
  308. package/dist/skill/services/skill-installer.service.d.ts.map +0 -1
  309. package/dist/skill/services/skill-installer.service.js.map +0 -1
  310. package/dist/skill/services/skill-registry.service.d.ts.map +0 -1
  311. package/dist/skill/services/skill-registry.service.js.map +0 -1
  312. package/dist/skill/types.d.ts.map +0 -1
  313. /package/dist/{cli → src/cli}/adapters/claude-cli.adapter.d.ts +0 -0
  314. /package/dist/{cli → src/cli}/adapters/codex-cli.adapter.d.ts +0 -0
  315. /package/dist/{cli → src/cli}/adapters/codex-cli.adapter.js +0 -0
  316. /package/dist/{cli → src/cli}/adapters/detect-cli.d.ts +0 -0
  317. /package/dist/{cli → src/cli}/adapters/detect-cli.js +0 -0
  318. /package/dist/{cli → src/cli}/adapters/gemini-cli.adapter.d.ts +0 -0
  319. /package/dist/{cli → src/cli}/adapters/gemini-cli.adapter.js +0 -0
  320. /package/dist/{cli → src/cli}/adapters/index.d.ts +0 -0
  321. /package/dist/{cli → src/cli}/adapters/index.js +0 -0
  322. /package/dist/{cli → src/cli}/cli-registry.service.d.ts +0 -0
  323. /package/dist/{cli → src/cli}/index.js +0 -0
  324. /package/dist/{cli → src/cli}/types.js +0 -0
  325. /package/dist/{skill → src/skill}/entities/octo-skill.entity.d.ts +0 -0
  326. /package/dist/{skill → src/skill}/entities/octo-skill.entity.js +0 -0
  327. /package/dist/{skill → src/skill}/services/skill-generator.service.d.ts +0 -0
  328. /package/dist/{skill → src/skill}/services/skill-generator.service.js +0 -0
  329. /package/dist/{skill → src/skill}/types.js +0 -0
@@ -3,134 +3,20 @@
3
3
  import { useState, useEffect, useCallback } from 'react'
4
4
  import { useTranslations } from 'next-intl'
5
5
  import { toast } from 'sonner'
6
- import {
7
- RefreshCw,
8
- Trash2,
9
- Plus,
10
- FolderOpen,
11
- Github,
12
- Loader2,
13
- GitPullRequest,
14
- } from 'lucide-react'
6
+ import { RefreshCw, Plus, Loader2 } from 'lucide-react'
15
7
 
16
8
  import { PageHeader } from '@octo-cyber/ui/components/shared/page-header'
17
9
  import { ConfirmDialog } from '@octo-cyber/ui/components/shared/confirm-dialog'
18
10
  import { Button } from '@octo-cyber/ui/components/ui/button'
19
- import { Badge } from '@octo-cyber/ui/components/ui/badge'
20
- import { Input } from '@octo-cyber/ui/components/ui/input'
21
- import { Label } from '@octo-cyber/ui/components/ui/label'
22
- import {
23
- Card,
24
- CardContent,
25
- CardHeader,
26
- CardTitle,
27
- } from '@octo-cyber/ui/components/ui/card'
28
- import {
29
- Dialog,
30
- DialogContent,
31
- DialogHeader,
32
- DialogTitle,
33
- DialogDescription,
34
- DialogFooter,
35
- } from '@octo-cyber/ui/components/ui/dialog'
36
- import {
37
- Tabs,
38
- TabsList,
39
- TabsTrigger,
40
- } from '@octo-cyber/ui/components/ui/tabs'
41
11
  import { aiCliService } from '../services/ai-cli-service'
42
12
  import type { WorkspaceInfo } from '../services/ai-cli-service'
13
+ import { skillService } from '../services/skill-service'
14
+ import { WorkspaceCard } from '../components/WorkspaceCard'
15
+ import { CreateWorkspaceDialog } from '../components/CreateWorkspaceDialog'
43
16
 
44
- function formatDate(dateStr: string): string {
45
- try {
46
- return new Date(dateStr).toLocaleString()
47
- } catch {
48
- return dateStr
49
- }
50
- }
51
-
52
- function WorkspaceCard({
53
- ws,
54
- onDelete,
55
- onPull,
56
- isPulling,
57
- }: {
58
- ws: WorkspaceInfo
59
- onDelete: (ws: WorkspaceInfo) => void
60
- onPull: (id: string) => void
61
- isPulling: boolean
62
- }) {
63
- const t = useTranslations('aiCli.workspaces')
64
- const tc = useTranslations('common')
65
-
66
- return (
67
- <Card>
68
- <CardHeader className="pb-2">
69
- <div className="flex items-center justify-between">
70
- <div className="flex items-center gap-2">
71
- {ws.type === 'github' ? (
72
- <Github className="h-4 w-4 text-muted-foreground" />
73
- ) : (
74
- <FolderOpen className="h-4 w-4 text-muted-foreground" />
75
- )}
76
- <CardTitle className="text-sm">
77
- {ws.name || ws.id.slice(0, 8)}
78
- </CardTitle>
79
- </div>
80
- <Badge variant={ws.type === 'github' ? 'default' : 'secondary'}>
81
- {t(`type.${ws.type}`)}
82
- </Badge>
83
- </div>
84
- </CardHeader>
85
- <CardContent className="space-y-2">
86
- <p className="text-xs text-muted-foreground truncate" title={ws.path}>
87
- {ws.path}
88
- </p>
89
- {ws.type === 'github' && ws.repoUrl && (
90
- <p className="text-xs text-muted-foreground truncate" title={ws.repoUrl}>
91
- {ws.repoUrl}
92
- </p>
93
- )}
94
- {ws.type === 'github' && ws.branch && (
95
- <p className="text-xs text-muted-foreground">
96
- {t('branch', { branch: ws.branch })}
97
- </p>
98
- )}
99
- <div className="flex items-center justify-between text-xs text-muted-foreground">
100
- <span>{formatDate(ws.createdAt)}</span>
101
- </div>
102
- <div className="flex justify-end gap-2 pt-1">
103
- {ws.type === 'github' && (
104
- <Button
105
- variant="outline"
106
- size="sm"
107
- onClick={() => onPull(ws.id)}
108
- disabled={isPulling}
109
- >
110
- {isPulling ? (
111
- <Loader2 className="mr-1 h-3 w-3 animate-spin" />
112
- ) : (
113
- <GitPullRequest className="mr-1 h-3 w-3" />
114
- )}
115
- {isPulling ? t('pulling') : t('actions.pull')}
116
- </Button>
117
- )}
118
- <Button
119
- variant="ghost"
120
- size="sm"
121
- className="text-destructive hover:text-destructive"
122
- onClick={() => onDelete(ws)}
123
- >
124
- <Trash2 className="mr-1 h-3 w-3" />
125
- {tc('delete')}
126
- </Button>
127
- </div>
128
- </CardContent>
129
- </Card>
130
- )
131
- }
17
+ type InstalledSkillsMap = Record<string, Array<{ name: string; skillDir: string }>>
132
18
 
133
- type WorkspaceType = 'local' | 'github'
19
+ const EMPTY_SKILLS_MAP: InstalledSkillsMap = {}
134
20
 
135
21
  export default function WorkspacesPage() {
136
22
  const t = useTranslations('aiCli.workspaces')
@@ -138,23 +24,27 @@ export default function WorkspacesPage() {
138
24
 
139
25
  const [workspaces, setWorkspaces] = useState<WorkspaceInfo[]>([])
140
26
  const [loading, setLoading] = useState(true)
27
+ const [wsSkillsMap, setWsSkillsMap] = useState<Record<string, InstalledSkillsMap>>({})
141
28
  const [createDialogOpen, setCreateDialogOpen] = useState(false)
142
- const [isCreating, setIsCreating] = useState(false)
143
29
  const [deleteTarget, setDeleteTarget] = useState<WorkspaceInfo | null>(null)
144
30
  const [pullingId, setPullingId] = useState<string | null>(null)
145
31
 
146
- // Create form state
147
- const [createType, setCreateType] = useState<WorkspaceType>('local')
148
- const [createName, setCreateName] = useState('')
149
- const [createLocalPath, setCreateLocalPath] = useState('')
150
- const [createRepoUrl, setCreateRepoUrl] = useState('')
151
- const [createBranch, setCreateBranch] = useState('')
152
-
153
32
  const loadWorkspaces = useCallback(async () => {
154
33
  setLoading(true)
155
34
  try {
156
35
  const data = await aiCliService.getWorkspaces()
157
36
  setWorkspaces(data)
37
+ const skillsEntries = await Promise.all(
38
+ data.map(async (ws) => {
39
+ try {
40
+ const skills = await skillService.listWorkspaceInstalled(ws.path)
41
+ return [ws.id, skills] as const
42
+ } catch {
43
+ return [ws.id, {} as InstalledSkillsMap] as const
44
+ }
45
+ }),
46
+ )
47
+ setWsSkillsMap(Object.fromEntries(skillsEntries))
158
48
  } catch {
159
49
  toast.error(t('toast.loadFailed'))
160
50
  } finally {
@@ -166,45 +56,6 @@ export default function WorkspacesPage() {
166
56
  loadWorkspaces()
167
57
  }, [loadWorkspaces])
168
58
 
169
- const resetCreateForm = () => {
170
- setCreateType('local')
171
- setCreateName('')
172
- setCreateLocalPath('')
173
- setCreateRepoUrl('')
174
- setCreateBranch('')
175
- }
176
-
177
- const handleCreate = async () => {
178
- if (!createName.trim()) return
179
- setIsCreating(true)
180
- try {
181
- if (createType === 'local') {
182
- if (!createLocalPath.trim()) return
183
- await aiCliService.createWorkspace({
184
- type: 'local',
185
- name: createName.trim(),
186
- localPath: createLocalPath.trim(),
187
- })
188
- } else {
189
- if (!createRepoUrl.trim() || !createBranch.trim()) return
190
- await aiCliService.createWorkspace({
191
- type: 'github',
192
- name: createName.trim(),
193
- repoUrl: createRepoUrl.trim(),
194
- branch: createBranch.trim(),
195
- })
196
- }
197
- setCreateDialogOpen(false)
198
- resetCreateForm()
199
- await loadWorkspaces()
200
- toast.success(t('toast.created'))
201
- } catch {
202
- toast.error(t('toast.createFailed'))
203
- } finally {
204
- setIsCreating(false)
205
- }
206
- }
207
-
208
59
  const handleDelete = async () => {
209
60
  if (!deleteTarget) return
210
61
  try {
@@ -229,11 +80,10 @@ export default function WorkspacesPage() {
229
80
  }
230
81
  }
231
82
 
232
- const isCreateValid =
233
- createName.trim() !== '' &&
234
- (createType === 'local'
235
- ? createLocalPath.trim() !== ''
236
- : createRepoUrl.trim() !== '' && createBranch.trim() !== '')
83
+ const handleCreated = async () => {
84
+ await loadWorkspaces()
85
+ toast.success(t('toast.created'))
86
+ }
237
87
 
238
88
  const localCount = workspaces.filter((w) => w.type === 'local').length
239
89
  const githubCount = workspaces.filter((w) => w.type === 'github').length
@@ -253,10 +103,7 @@ export default function WorkspacesPage() {
253
103
  <Button
254
104
  variant="outline"
255
105
  size="sm"
256
- onClick={() => {
257
- resetCreateForm()
258
- setCreateDialogOpen(true)
259
- }}
106
+ onClick={() => setCreateDialogOpen(true)}
260
107
  >
261
108
  <Plus className="mr-1 h-4 w-4" />
262
109
  {t('actions.create')}
@@ -297,6 +144,7 @@ export default function WorkspacesPage() {
297
144
  onDelete={setDeleteTarget}
298
145
  onPull={handlePull}
299
146
  isPulling={pullingId === ws.id}
147
+ wsSkills={wsSkillsMap[ws.id] || EMPTY_SKILLS_MAP}
300
148
  />
301
149
  ))}
302
150
  </div>
@@ -304,85 +152,12 @@ export default function WorkspacesPage() {
304
152
  </>
305
153
  )}
306
154
 
307
- {/* Create Dialog */}
308
- <Dialog open={createDialogOpen} onOpenChange={setCreateDialogOpen}>
309
- <DialogContent className="sm:max-w-md">
310
- <DialogHeader>
311
- <DialogTitle>{t('createDialog.title')}</DialogTitle>
312
- <DialogDescription>{t('createDialog.description')}</DialogDescription>
313
- </DialogHeader>
314
- <div className="space-y-4">
315
- <Tabs
316
- value={createType}
317
- onValueChange={(v) => setCreateType(v as WorkspaceType)}
318
- >
319
- <TabsList className="grid w-full grid-cols-2">
320
- <TabsTrigger value="local">
321
- <FolderOpen className="mr-1 h-3 w-3" />
322
- {t('createDialog.typeLocal')}
323
- </TabsTrigger>
324
- <TabsTrigger value="github">
325
- <Github className="mr-1 h-3 w-3" />
326
- {t('createDialog.typeGithub')}
327
- </TabsTrigger>
328
- </TabsList>
329
- </Tabs>
330
-
331
- <div className="space-y-2">
332
- <Label>{t('createDialog.nameLabel')}</Label>
333
- <Input
334
- placeholder={t('createDialog.namePlaceholder')}
335
- value={createName}
336
- onChange={(e) => setCreateName(e.target.value)}
337
- />
338
- </div>
339
-
340
- {createType === 'local' ? (
341
- <div className="space-y-2">
342
- <Label>{t('createDialog.localPathLabel')}</Label>
343
- <Input
344
- placeholder={t('createDialog.localPathPlaceholder')}
345
- value={createLocalPath}
346
- onChange={(e) => setCreateLocalPath(e.target.value)}
347
- />
348
- </div>
349
- ) : (
350
- <>
351
- <div className="space-y-2">
352
- <Label>{t('createDialog.repoUrlLabel')}</Label>
353
- <Input
354
- placeholder={t('createDialog.repoUrlPlaceholder')}
355
- value={createRepoUrl}
356
- onChange={(e) => setCreateRepoUrl(e.target.value)}
357
- />
358
- </div>
359
- <div className="space-y-2">
360
- <Label>{t('createDialog.branchLabel')}</Label>
361
- <Input
362
- placeholder={t('createDialog.branchPlaceholder')}
363
- value={createBranch}
364
- onChange={(e) => setCreateBranch(e.target.value)}
365
- />
366
- </div>
367
- </>
368
- )}
369
- </div>
370
- <DialogFooter>
371
- <Button variant="outline" onClick={() => setCreateDialogOpen(false)}>
372
- {tc('cancel')}
373
- </Button>
374
- <Button
375
- onClick={handleCreate}
376
- disabled={isCreating || !isCreateValid}
377
- >
378
- {isCreating && <Loader2 className="mr-1 h-3 w-3 animate-spin" />}
379
- {tc('create')}
380
- </Button>
381
- </DialogFooter>
382
- </DialogContent>
383
- </Dialog>
155
+ <CreateWorkspaceDialog
156
+ open={createDialogOpen}
157
+ onOpenChange={setCreateDialogOpen}
158
+ onCreated={handleCreated}
159
+ />
384
160
 
385
- {/* Delete Confirm */}
386
161
  <ConfirmDialog
387
162
  open={!!deleteTarget}
388
163
  onOpenChange={(open) => { if (!open) setDeleteTarget(null) }}
@@ -0,0 +1,35 @@
1
+ import { api } from '@octo-cyber/ui/services/api-client'
2
+ import type { ApiResponse } from '@octo-cyber/ui/types/common'
3
+
4
+ export type ApprovalStatus = 'pending' | 'approved' | 'rejected'
5
+
6
+ export interface AgentApproval {
7
+ id: string
8
+ runId: string
9
+ question: string
10
+ context: string | null
11
+ status: ApprovalStatus
12
+ response: string | null
13
+ respondedAt: string | null
14
+ createdAt: string
15
+ }
16
+
17
+ export const agentApprovalService = {
18
+ async listPending(): Promise<AgentApproval[]> {
19
+ const res = await api.get<ApiResponse<AgentApproval[]>>('/api/v1/ai/agent/approval/pending')
20
+ return res.data
21
+ },
22
+
23
+ async getApproval(id: string): Promise<AgentApproval> {
24
+ const res = await api.get<ApiResponse<AgentApproval>>(`/api/v1/ai/agent/approval/${id}`)
25
+ return res.data
26
+ },
27
+
28
+ async approve(id: string, response?: string): Promise<void> {
29
+ await api.post<ApiResponse<null>>(`/api/v1/ai/agent/approval/${id}/approve`, { response })
30
+ },
31
+
32
+ async reject(id: string, response?: string): Promise<void> {
33
+ await api.post<ApiResponse<null>>(`/api/v1/ai/agent/approval/${id}/reject`, { response })
34
+ },
35
+ }
@@ -0,0 +1,41 @@
1
+ import { api } from '@octo-cyber/ui/services/api-client'
2
+ import type { ApiResponse } from '@octo-cyber/ui/types/common'
3
+
4
+ export interface AgentCapability {
5
+ type: string
6
+ name: string
7
+ description: string
8
+ isAvailable: boolean
9
+ metadata?: Record<string, unknown>
10
+ }
11
+
12
+ export interface ExecuteResult {
13
+ runId?: string
14
+ output?: string
15
+ status: string
16
+ }
17
+
18
+ interface ExecuteAgentOpts {
19
+ agentType: string
20
+ prompt: string
21
+ async?: boolean
22
+ maxRounds?: number
23
+ timeoutMs?: number
24
+ }
25
+
26
+ export const agentGatewayService = {
27
+ async listAgents(): Promise<AgentCapability[]> {
28
+ const res = await api.get<ApiResponse<AgentCapability[]>>('/api/v1/agents')
29
+ return res.data
30
+ },
31
+
32
+ async getAgent(type: string): Promise<AgentCapability> {
33
+ const res = await api.get<ApiResponse<AgentCapability>>(`/api/v1/agents/${type}`)
34
+ return res.data
35
+ },
36
+
37
+ async executeAgent(opts: ExecuteAgentOpts): Promise<ExecuteResult> {
38
+ const res = await api.post<ApiResponse<ExecuteResult>>('/api/v1/agents/execute', opts)
39
+ return res.data
40
+ },
41
+ }
@@ -0,0 +1,48 @@
1
+ import { api } from '@octo-cyber/ui/services/api-client'
2
+ import type { ApiResponse } from '@octo-cyber/ui/types/common'
3
+
4
+ export type AgentRunStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled'
5
+
6
+ export interface AgentRunRecord {
7
+ id: string
8
+ agentType: string
9
+ prompt: string
10
+ status: AgentRunStatus
11
+ output?: string
12
+ error?: string
13
+ rounds?: number
14
+ startedAt?: string
15
+ endedAt?: string
16
+ durationMs?: number
17
+ createdAt: string
18
+ }
19
+
20
+ export interface AgentRunEvent {
21
+ type: 'status' | 'output' | 'error' | 'done'
22
+ data: string
23
+ }
24
+
25
+ export const agentRunService = {
26
+ async listRuns(): Promise<AgentRunRecord[]> {
27
+ const res = await api.get<ApiResponse<AgentRunRecord[]>>('/api/v1/ai/agent/run')
28
+ return res.data
29
+ },
30
+
31
+ async getRun(id: string): Promise<AgentRunRecord> {
32
+ const res = await api.get<ApiResponse<AgentRunRecord>>(`/api/v1/ai/agent/run/${id}`)
33
+ return res.data
34
+ },
35
+
36
+ async cancelRun(id: string): Promise<void> {
37
+ await api.post<ApiResponse<null>>(`/api/v1/ai/agent/run/${id}/cancel`)
38
+ },
39
+
40
+ getEventsUrl(id: string): string {
41
+ const base = typeof window !== 'undefined' &&
42
+ (window.location.origin === 'http://tauri.localhost' ||
43
+ window.location.origin === 'tauri://localhost')
44
+ ? 'http://127.0.0.1:9988'
45
+ : ''
46
+ return `${base}/api/v1/ai/agent/run/${id}/events`
47
+ },
48
+ }
@@ -0,0 +1,30 @@
1
+ import { api } from '@octo-cyber/ui/services/api-client'
2
+ import type { ApiResponse } from '@octo-cyber/ui/types/common'
3
+
4
+ export type SessionStatus = 'active' | 'closed'
5
+
6
+ export interface AgentSession {
7
+ id: string
8
+ name: string | null
9
+ context: Record<string, unknown>
10
+ runIds: string[]
11
+ status: SessionStatus
12
+ createdAt: string
13
+ updatedAt: string
14
+ }
15
+
16
+ export const agentSessionService = {
17
+ async listSessions(): Promise<AgentSession[]> {
18
+ const res = await api.get<ApiResponse<AgentSession[]>>('/api/v1/ai/agent/session')
19
+ return res.data
20
+ },
21
+
22
+ async createSession(name?: string): Promise<AgentSession> {
23
+ const res = await api.post<ApiResponse<AgentSession>>('/api/v1/ai/agent/session', { name })
24
+ return res.data
25
+ },
26
+
27
+ async closeSession(id: string): Promise<void> {
28
+ await api.post<ApiResponse<null>>(`/api/v1/ai/agent/session/${id}/close`)
29
+ },
30
+ }
@@ -5,6 +5,8 @@ export interface CliToolInfo {
5
5
  name: string
6
6
  displayName: string
7
7
  available: boolean
8
+ /** cli = spawns a local process; api = calls an HTTP API */
9
+ toolType: 'cli' | 'api'
8
10
  version?: string
9
11
  path?: string
10
12
  models?: string[]
@@ -24,6 +26,7 @@ function mapToolInfo(raw: Record<string, unknown>): CliToolInfo {
24
26
  name: raw.name as string,
25
27
  displayName: raw.displayName as string,
26
28
  available: (raw.isAvailable ?? raw.available) as boolean,
29
+ toolType: (raw.toolType as 'cli' | 'api') ?? 'cli',
27
30
  version: raw.version as string | undefined,
28
31
  path: (raw.executablePath ?? raw.path) as string | undefined,
29
32
  models: raw.models as string[] | undefined,
@@ -51,6 +54,7 @@ export interface WorkspaceInfo {
51
54
  id: string
52
55
  type: 'local' | 'github'
53
56
  name: string
57
+ description?: string
54
58
  path: string
55
59
  createdAt: string
56
60
  localPath?: string
@@ -61,11 +65,24 @@ export interface WorkspaceInfo {
61
65
  export interface CreateWorkspaceRequest {
62
66
  type: 'local' | 'github'
63
67
  name: string
68
+ description?: string
64
69
  localPath?: string
65
70
  repoUrl?: string
66
71
  branch?: string
67
72
  }
68
73
 
74
+ export interface DetectedGitInfo {
75
+ isGitRepo: boolean
76
+ remoteUrl?: string
77
+ branch?: string
78
+ }
79
+
80
+ export interface DirEntry {
81
+ name: string
82
+ path: string
83
+ isDirectory: boolean
84
+ }
85
+
69
86
  export const aiCliService = {
70
87
  async getTools(): Promise<CliToolInfo[]> {
71
88
  const res = await api.get<ApiResponse<Record<string, unknown>[]>>('/api/v1/ai-cli/tools')
@@ -126,4 +143,20 @@ export const aiCliService = {
126
143
  `/api/v1/ai-cli/workspaces/${id}/delete`,
127
144
  )
128
145
  },
146
+
147
+ async browseDir(dirPath: string): Promise<DirEntry[]> {
148
+ const res = await api.get<ApiResponse<DirEntry[]>>(
149
+ '/api/v1/ai-cli/browse-dir',
150
+ { params: { path: dirPath } },
151
+ )
152
+ return res.data
153
+ },
154
+
155
+ async detectGit(dirPath: string): Promise<DetectedGitInfo> {
156
+ const res = await api.post<ApiResponse<DetectedGitInfo>>(
157
+ '/api/v1/ai-cli/detect-git',
158
+ { path: dirPath },
159
+ )
160
+ return res.data
161
+ },
129
162
  }
@@ -0,0 +1,38 @@
1
+ import { api } from '@octo-cyber/ui/services/api-client'
2
+ import type { ApiResponse } from '@octo-cyber/ui/types/common'
3
+
4
+ export interface ExternalAgent {
5
+ id: string
6
+ agentId: string
7
+ name: string
8
+ description: string | null
9
+ endpoint: string
10
+ status: 'online' | 'offline'
11
+ lastHeartbeatAt: string | null
12
+ capabilities: string[] | null
13
+ createdAt: string
14
+ }
15
+
16
+ export interface RegisterAgentDto {
17
+ agentId: string
18
+ name: string
19
+ description?: string
20
+ endpoint: string
21
+ capabilities?: string[]
22
+ }
23
+
24
+ export const externalAgentService = {
25
+ async listAgents(): Promise<ExternalAgent[]> {
26
+ const res = await api.get<ApiResponse<ExternalAgent[]>>('/api/v1/agents/external')
27
+ return res.data
28
+ },
29
+
30
+ async registerAgent(dto: RegisterAgentDto): Promise<ExternalAgent> {
31
+ const res = await api.post<ApiResponse<ExternalAgent>>('/api/v1/agents/external/register', dto)
32
+ return res.data
33
+ },
34
+
35
+ async unregisterAgent(agentId: string): Promise<void> {
36
+ await api.post<ApiResponse<null>>('/api/v1/agents/external/unregister', { agentId })
37
+ },
38
+ }
@@ -0,0 +1,52 @@
1
+ import { api } from '@octo-cyber/ui/services/api-client'
2
+ import type { ApiResponse } from '@octo-cyber/ui/types/common'
3
+
4
+ export type OrchestratorStepStatus = 'pending' | 'running' | 'completed' | 'failed'
5
+ export type OrchestratorPlanStatus = 'draft' | 'running' | 'completed' | 'failed'
6
+
7
+ export interface OrchestratorStep {
8
+ stepId: string
9
+ agentType: string
10
+ prompt: string
11
+ dependsOn?: string[]
12
+ status: OrchestratorStepStatus
13
+ runId?: string
14
+ output?: string
15
+ }
16
+
17
+ export interface OrchestratorPlan {
18
+ id: string
19
+ goal: string
20
+ plan: OrchestratorStep[]
21
+ status: OrchestratorPlanStatus
22
+ result: string | null
23
+ stepsTotal: number
24
+ stepsDone: number
25
+ createdAt: string
26
+ }
27
+
28
+ export const orchestratorService = {
29
+ async createPlan(goal: string): Promise<OrchestratorPlan> {
30
+ const res = await api.post<ApiResponse<OrchestratorPlan>>('/api/v1/ai/orchestrator/plan', { goal })
31
+ return res.data
32
+ },
33
+
34
+ async executePlan(id: string): Promise<OrchestratorPlan> {
35
+ const res = await api.post<ApiResponse<OrchestratorPlan>>(`/api/v1/ai/orchestrator/plan/${id}/run`, {})
36
+ return res.data
37
+ },
38
+
39
+ async listPlans(): Promise<OrchestratorPlan[]> {
40
+ const res = await api.get<ApiResponse<OrchestratorPlan[]>>('/api/v1/ai/orchestrator/plan')
41
+ return res.data
42
+ },
43
+
44
+ async getPlan(id: string): Promise<OrchestratorPlan> {
45
+ const res = await api.get<ApiResponse<OrchestratorPlan>>(`/api/v1/ai/orchestrator/plan/${id}`)
46
+ return res.data
47
+ },
48
+
49
+ async submitFeedback(id: string, rating: number, comment?: string): Promise<void> {
50
+ await api.post<ApiResponse<null>>(`/api/v1/ai/orchestrator/plan/${id}/feedback`, { rating, comment })
51
+ },
52
+ }