@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
@@ -0,0 +1,162 @@
1
+ 'use client'
2
+
3
+ import { useState, useEffect, useCallback } from 'react'
4
+ import { useRouter } from 'next/navigation'
5
+ import { useTranslations } from 'next-intl'
6
+ import { toast } from 'sonner'
7
+ import { RefreshCw, Loader2 } from 'lucide-react'
8
+
9
+ import { PageHeader } from '@octo-cyber/ui/components/shared/page-header'
10
+ import { Button } from '@octo-cyber/ui/components/ui/button'
11
+ import { Badge } from '@octo-cyber/ui/components/ui/badge'
12
+ import {
13
+ Table,
14
+ TableBody,
15
+ TableCell,
16
+ TableHead,
17
+ TableHeader,
18
+ TableRow,
19
+ } from '@octo-cyber/ui/components/ui/table'
20
+
21
+ import { agentRunService } from '../services/agent-run.service'
22
+ import type { AgentRunRecord, AgentRunStatus } from '../services/agent-run.service'
23
+
24
+ type BadgeVariant = 'secondary' | 'default' | 'destructive' | 'outline'
25
+
26
+ const STATUS_VARIANT: Record<AgentRunStatus, BadgeVariant> = {
27
+ pending: 'secondary',
28
+ running: 'default',
29
+ completed: 'default',
30
+ failed: 'destructive',
31
+ cancelled: 'outline',
32
+ }
33
+
34
+ const STATUS_CLASS: Record<AgentRunStatus, string> = {
35
+ pending: '',
36
+ running: 'bg-blue-500 hover:bg-blue-500/80 text-white border-transparent',
37
+ completed: 'bg-green-500 hover:bg-green-500/80 text-white border-transparent',
38
+ failed: '',
39
+ cancelled: 'text-muted-foreground',
40
+ }
41
+
42
+ function StatusBadge({ status, label }: { status: AgentRunStatus; label: string }) {
43
+ return (
44
+ <Badge
45
+ variant={STATUS_VARIANT[status]}
46
+ className={STATUS_CLASS[status]}
47
+ >
48
+ {label}
49
+ </Badge>
50
+ )
51
+ }
52
+
53
+ function formatDuration(ms?: number): string {
54
+ if (ms === undefined || ms === null) return '—'
55
+ if (ms < 1000) return `${ms}ms`
56
+ const seconds = (ms / 1000).toFixed(1)
57
+ return `${seconds}s`
58
+ }
59
+
60
+ function formatDate(dateStr?: string): string {
61
+ if (!dateStr) return '—'
62
+ return new Date(dateStr).toLocaleString()
63
+ }
64
+
65
+ function truncatePrompt(prompt: string, maxLen = 80): string {
66
+ if (prompt.length <= maxLen) return prompt
67
+ return `${prompt.slice(0, maxLen)}...`
68
+ }
69
+
70
+ export default function AgentRunsPage() {
71
+ const t = useTranslations('agentRuns')
72
+ const tc = useTranslations('common')
73
+ const router = useRouter()
74
+
75
+ const [runs, setRuns] = useState<AgentRunRecord[]>([])
76
+ const [loading, setLoading] = useState(true)
77
+
78
+ const loadRuns = useCallback(async () => {
79
+ setLoading(true)
80
+ try {
81
+ const data = await agentRunService.listRuns()
82
+ setRuns(data)
83
+ } catch {
84
+ toast.error(t('toast.loadFailed'))
85
+ } finally {
86
+ setLoading(false)
87
+ }
88
+ }, [t])
89
+
90
+ useEffect(() => {
91
+ loadRuns()
92
+ }, [loadRuns])
93
+
94
+ const handleRowClick = (id: string) => {
95
+ router.push(`/ai-tools/agent-runs/${id}`)
96
+ }
97
+
98
+ return (
99
+ <div className="space-y-6">
100
+ <PageHeader title={t('title')} description={t('description')}>
101
+ <Button variant="outline" onClick={loadRuns} disabled={loading}>
102
+ {loading ? (
103
+ <Loader2 className="mr-2 h-4 w-4 animate-spin" />
104
+ ) : (
105
+ <RefreshCw className="mr-2 h-4 w-4" />
106
+ )}
107
+ {tc('refresh')}
108
+ </Button>
109
+ </PageHeader>
110
+
111
+ <div className="rounded-lg border dark:border-zinc-800">
112
+ <Table>
113
+ <TableHeader>
114
+ <TableRow>
115
+ <TableHead>{t('columns.status')}</TableHead>
116
+ <TableHead>{t('columns.agentType')}</TableHead>
117
+ <TableHead className="w-[40%]">{t('columns.prompt')}</TableHead>
118
+ <TableHead>{t('columns.createdAt')}</TableHead>
119
+ <TableHead>{t('columns.duration')}</TableHead>
120
+ </TableRow>
121
+ </TableHeader>
122
+ <TableBody>
123
+ {loading ? (
124
+ <TableRow>
125
+ <TableCell colSpan={5} className="h-32 text-center text-muted-foreground">
126
+ {tc('loading')}
127
+ </TableCell>
128
+ </TableRow>
129
+ ) : runs.length === 0 ? (
130
+ <TableRow>
131
+ <TableCell colSpan={5} className="h-32 text-center text-muted-foreground">
132
+ {tc('noData')}
133
+ </TableCell>
134
+ </TableRow>
135
+ ) : (
136
+ runs.map((run) => (
137
+ <TableRow
138
+ key={run.id}
139
+ className="cursor-pointer hover:bg-muted/50 dark:hover:bg-zinc-800/50"
140
+ onClick={() => handleRowClick(run.id)}
141
+ >
142
+ <TableCell>
143
+ <StatusBadge
144
+ status={run.status}
145
+ label={t(`status.${run.status}`)}
146
+ />
147
+ </TableCell>
148
+ <TableCell className="font-mono text-sm">{run.agentType}</TableCell>
149
+ <TableCell className="text-sm text-muted-foreground">
150
+ {truncatePrompt(run.prompt)}
151
+ </TableCell>
152
+ <TableCell className="text-sm">{formatDate(run.createdAt)}</TableCell>
153
+ <TableCell className="text-sm">{formatDuration(run.durationMs)}</TableCell>
154
+ </TableRow>
155
+ ))
156
+ )}
157
+ </TableBody>
158
+ </Table>
159
+ </div>
160
+ </div>
161
+ )
162
+ }
@@ -0,0 +1,239 @@
1
+ 'use client'
2
+
3
+ import { useState, useEffect, useCallback } from 'react'
4
+ import { useRouter } from 'next/navigation'
5
+ import { useTranslations } from 'next-intl'
6
+ import { toast } from 'sonner'
7
+ import { RefreshCw, Loader2, Play } from 'lucide-react'
8
+
9
+ import { PageHeader } from '@octo-cyber/ui/components/shared/page-header'
10
+ import { Button } from '@octo-cyber/ui/components/ui/button'
11
+ import { Badge } from '@octo-cyber/ui/components/ui/badge'
12
+ import {
13
+ Card,
14
+ CardContent,
15
+ CardDescription,
16
+ CardFooter,
17
+ CardHeader,
18
+ CardTitle,
19
+ } from '@octo-cyber/ui/components/ui/card'
20
+ import {
21
+ Dialog,
22
+ DialogContent,
23
+ DialogDescription,
24
+ DialogFooter,
25
+ DialogHeader,
26
+ DialogTitle,
27
+ } from '@octo-cyber/ui/components/ui/dialog'
28
+ import { Textarea } from '@octo-cyber/ui/components/ui/textarea'
29
+ import { Label } from '@octo-cyber/ui/components/ui/label'
30
+
31
+ import { agentGatewayService } from '../services/agent-gateway.service'
32
+ import type { AgentCapability } from '../services/agent-gateway.service'
33
+
34
+ function AgentCard({
35
+ agent,
36
+ onTest,
37
+ tAvailable,
38
+ tUnavailable,
39
+ tTestAgent,
40
+ }: {
41
+ agent: AgentCapability
42
+ onTest: (agent: AgentCapability) => void
43
+ tAvailable: string
44
+ tUnavailable: string
45
+ tTestAgent: string
46
+ }) {
47
+ return (
48
+ <Card className="flex flex-col bg-card dark:bg-zinc-900 border dark:border-zinc-800">
49
+ <CardHeader className="pb-2">
50
+ <div className="flex items-start justify-between gap-2">
51
+ <CardTitle className="text-base leading-tight">{agent.name}</CardTitle>
52
+ <Badge
53
+ variant="outline"
54
+ className="shrink-0 font-mono text-xs"
55
+ >
56
+ {agent.type}
57
+ </Badge>
58
+ </div>
59
+ <div className="mt-1">
60
+ <Badge
61
+ variant={agent.isAvailable ? 'default' : 'secondary'}
62
+ className={
63
+ agent.isAvailable
64
+ ? 'bg-green-500 hover:bg-green-500/80 text-white border-transparent text-xs'
65
+ : 'text-muted-foreground text-xs'
66
+ }
67
+ >
68
+ {agent.isAvailable ? tAvailable : tUnavailable}
69
+ </Badge>
70
+ </div>
71
+ </CardHeader>
72
+ <CardContent className="flex-1 pb-2">
73
+ <CardDescription className="text-sm leading-relaxed line-clamp-3">
74
+ {agent.description}
75
+ </CardDescription>
76
+ </CardContent>
77
+ <CardFooter className="pt-2">
78
+ <Button
79
+ size="sm"
80
+ variant="outline"
81
+ disabled={!agent.isAvailable}
82
+ onClick={() => onTest(agent)}
83
+ className="w-full"
84
+ >
85
+ <Play className="mr-2 h-3.5 w-3.5" />
86
+ {tTestAgent}
87
+ </Button>
88
+ </CardFooter>
89
+ </Card>
90
+ )
91
+ }
92
+
93
+ interface TestDialogState {
94
+ open: boolean
95
+ agent: AgentCapability | null
96
+ prompt: string
97
+ running: boolean
98
+ }
99
+
100
+ export default function AgentsPage() {
101
+ const t = useTranslations('aiTools.agentGateway')
102
+ const tc = useTranslations('common')
103
+ const router = useRouter()
104
+
105
+ const [agents, setAgents] = useState<AgentCapability[]>([])
106
+ const [loading, setLoading] = useState(true)
107
+ const [dialog, setDialog] = useState<TestDialogState>({
108
+ open: false,
109
+ agent: null,
110
+ prompt: '',
111
+ running: false,
112
+ })
113
+
114
+ const loadAgents = useCallback(async () => {
115
+ setLoading(true)
116
+ try {
117
+ const data = await agentGatewayService.listAgents()
118
+ setAgents(data)
119
+ } catch {
120
+ toast.error(t('loadError'))
121
+ } finally {
122
+ setLoading(false)
123
+ }
124
+ }, [t])
125
+
126
+ useEffect(() => {
127
+ loadAgents()
128
+ }, [loadAgents])
129
+
130
+ const openTestDialog = (agent: AgentCapability) => {
131
+ setDialog({ open: true, agent, prompt: '', running: false })
132
+ }
133
+
134
+ const closeDialog = () => {
135
+ if (dialog.running) return
136
+ setDialog((prev) => ({ ...prev, open: false, agent: null, prompt: '' }))
137
+ }
138
+
139
+ const handleRun = async () => {
140
+ if (!dialog.agent || !dialog.prompt.trim()) return
141
+ setDialog((prev) => ({ ...prev, running: true }))
142
+ try {
143
+ const result = await agentGatewayService.executeAgent({
144
+ agentType: dialog.agent.type,
145
+ prompt: dialog.prompt.trim(),
146
+ async: true,
147
+ })
148
+ setDialog((prev) => ({ ...prev, running: false, open: false }))
149
+ if (result.runId) {
150
+ toast.success(`${t('runId')}: ${result.runId}`, {
151
+ action: {
152
+ label: t('viewRun'),
153
+ onClick: () => router.push(`/ai-tools/agent-runs/${result.runId}`),
154
+ },
155
+ duration: 8000,
156
+ })
157
+ }
158
+ } catch {
159
+ setDialog((prev) => ({ ...prev, running: false }))
160
+ toast.error(tc('operationFailed'))
161
+ }
162
+ }
163
+
164
+ return (
165
+ <div className="space-y-6">
166
+ <PageHeader title={t('title')} description={t('description')}>
167
+ <Button variant="outline" onClick={loadAgents} disabled={loading}>
168
+ {loading ? (
169
+ <Loader2 className="mr-2 h-4 w-4 animate-spin" />
170
+ ) : (
171
+ <RefreshCw className="mr-2 h-4 w-4" />
172
+ )}
173
+ {tc('refresh')}
174
+ </Button>
175
+ </PageHeader>
176
+
177
+ {!loading && agents.length === 0 ? (
178
+ <div className="flex h-48 items-center justify-center rounded-lg border border-dashed dark:border-zinc-700 text-muted-foreground">
179
+ {t('noAgents')}
180
+ </div>
181
+ ) : (
182
+ <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
183
+ {agents.map((agent) => (
184
+ <AgentCard
185
+ key={agent.type}
186
+ agent={agent}
187
+ onTest={openTestDialog}
188
+ tAvailable={t('available')}
189
+ tUnavailable={t('unavailable')}
190
+ tTestAgent={t('testAgent')}
191
+ />
192
+ ))}
193
+ </div>
194
+ )}
195
+
196
+ <Dialog open={dialog.open} onOpenChange={(open) => { if (!open) closeDialog() }}>
197
+ <DialogContent className="sm:max-w-lg dark:bg-zinc-900 dark:border-zinc-700">
198
+ <DialogHeader>
199
+ <DialogTitle>{dialog.agent?.name}</DialogTitle>
200
+ <DialogDescription>{t('testAgent')}</DialogDescription>
201
+ </DialogHeader>
202
+ <div className="space-y-2 py-2">
203
+ <Label htmlFor="agent-prompt">{t('prompt')}</Label>
204
+ <Textarea
205
+ id="agent-prompt"
206
+ placeholder={t('promptPlaceholder')}
207
+ value={dialog.prompt}
208
+ onChange={(e) => setDialog((prev) => ({ ...prev, prompt: e.target.value }))}
209
+ rows={5}
210
+ disabled={dialog.running}
211
+ className="resize-none dark:bg-zinc-800 dark:border-zinc-700"
212
+ />
213
+ </div>
214
+ <DialogFooter>
215
+ <Button variant="outline" onClick={closeDialog} disabled={dialog.running}>
216
+ {tc('cancel')}
217
+ </Button>
218
+ <Button
219
+ onClick={handleRun}
220
+ disabled={dialog.running || !dialog.prompt.trim()}
221
+ >
222
+ {dialog.running ? (
223
+ <>
224
+ <Loader2 className="mr-2 h-4 w-4 animate-spin" />
225
+ {t('running')}
226
+ </>
227
+ ) : (
228
+ <>
229
+ <Play className="mr-2 h-4 w-4" />
230
+ {t('run')}
231
+ </>
232
+ )}
233
+ </Button>
234
+ </DialogFooter>
235
+ </DialogContent>
236
+ </Dialog>
237
+ </div>
238
+ )
239
+ }
@@ -3,111 +3,17 @@
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
- Play,
9
- CheckCircle2,
10
- XCircle,
11
- Loader2,
12
- Terminal,
13
- } from 'lucide-react'
6
+ import { RefreshCw, Loader2 } from 'lucide-react'
14
7
 
15
8
  import { PageHeader } from '@octo-cyber/ui/components/shared/page-header'
16
9
  import { Button } from '@octo-cyber/ui/components/ui/button'
17
- import { Badge } from '@octo-cyber/ui/components/ui/badge'
18
- import {
19
- Card,
20
- CardContent,
21
- CardDescription,
22
- CardHeader,
23
- CardTitle,
24
- } from '@octo-cyber/ui/components/ui/card'
25
10
  import { aiCliService } from '../services/ai-cli-service'
26
11
  import type { CliToolInfo } from '../services/ai-cli-service'
12
+ import { skillService } from '../services/skill-service'
27
13
  import CliTestDialog from '../components/CliTestDialog'
14
+ import { ToolCard } from '../components/ToolCard'
28
15
 
29
- function ToolStatusIcon({ isAvailable }: { isAvailable: boolean }) {
30
- if (isAvailable) {
31
- return <CheckCircle2 className="h-5 w-5 text-green-500" />
32
- }
33
- return <XCircle className="h-5 w-5 text-muted-foreground" />
34
- }
35
-
36
- function ToolCard({
37
- tool,
38
- onTest,
39
- onHealthCheck,
40
- isChecking,
41
- }: {
42
- tool: CliToolInfo
43
- onTest: (tool: CliToolInfo) => void
44
- onHealthCheck: (toolName: string) => void
45
- isChecking: boolean
46
- }) {
47
- const t = useTranslations('aiCli')
48
-
49
- return (
50
- <Card>
51
- <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
52
- <div className="flex items-center gap-3">
53
- <Terminal className="h-5 w-5 text-muted-foreground" />
54
- <div>
55
- <CardTitle className="text-base">{tool.displayName}</CardTitle>
56
- <CardDescription className="text-xs">{tool.name}</CardDescription>
57
- </div>
58
- </div>
59
- <ToolStatusIcon isAvailable={tool.available} />
60
- </CardHeader>
61
- <CardContent>
62
- <div className="space-y-3">
63
- <div className="flex items-center gap-2 text-sm">
64
- <Badge variant={tool.available ? 'default' : 'secondary'}>
65
- {tool.available ? t('status.available') : t('status.unavailable')}
66
- </Badge>
67
- {tool.version && (
68
- <span className="text-muted-foreground">v{tool.version}</span>
69
- )}
70
- {tool.models && tool.models.length > 0 && (
71
- <span className="text-muted-foreground text-xs">
72
- {t('modelCount', { count: tool.models.length })}
73
- </span>
74
- )}
75
- </div>
76
- {tool.path && (
77
- <p className="text-xs text-muted-foreground truncate" title={tool.path}>
78
- {tool.path}
79
- </p>
80
- )}
81
- <div className="flex gap-2 pt-1">
82
- <Button
83
- variant="outline"
84
- size="sm"
85
- onClick={() => onHealthCheck(tool.name)}
86
- disabled={isChecking}
87
- >
88
- {isChecking ? (
89
- <Loader2 className="mr-1 h-3 w-3 animate-spin" />
90
- ) : (
91
- <RefreshCw className="mr-1 h-3 w-3" />
92
- )}
93
- {t('actions.healthCheck')}
94
- </Button>
95
- {tool.available && (
96
- <Button
97
- variant="outline"
98
- size="sm"
99
- onClick={() => onTest(tool)}
100
- >
101
- <Play className="mr-1 h-3 w-3" />
102
- {t('actions.testRun')}
103
- </Button>
104
- )}
105
- </div>
106
- </div>
107
- </CardContent>
108
- </Card>
109
- )
110
- }
16
+ type InstalledSkillsMap = Record<string, Array<{ name: string; skillDir: string }>>
111
17
 
112
18
  export default function AiCliToolsPage() {
113
19
  const t = useTranslations('aiCli')
@@ -118,12 +24,17 @@ export default function AiCliToolsPage() {
118
24
  const [checkingTool, setCheckingTool] = useState<string | null>(null)
119
25
  const [testDialogOpen, setTestDialogOpen] = useState(false)
120
26
  const [testToolInfo, setTestToolInfo] = useState<CliToolInfo | null>(null)
27
+ const [installedSkills, setInstalledSkills] = useState<InstalledSkillsMap>({})
121
28
 
122
29
  const loadTools = useCallback(async () => {
123
30
  setLoading(true)
124
31
  try {
125
- const data = await aiCliService.getTools()
32
+ const [data, installed] = await Promise.all([
33
+ aiCliService.getTools(),
34
+ skillService.listInstalled().catch(() => ({} as InstalledSkillsMap)),
35
+ ])
126
36
  setTools(data)
37
+ setInstalledSkills(installed)
127
38
  } catch {
128
39
  toast.error(t('toast.loadFailed'))
129
40
  } finally {
@@ -131,9 +42,7 @@ export default function AiCliToolsPage() {
131
42
  }
132
43
  }, [t])
133
44
 
134
- useEffect(() => {
135
- loadTools()
136
- }, [loadTools])
45
+ useEffect(() => { loadTools() }, [loadTools])
137
46
 
138
47
  const handleHealthCheck = async (toolName: string) => {
139
48
  setCheckingTool(toolName)
@@ -147,9 +56,7 @@ export default function AiCliToolsPage() {
147
56
  ),
148
57
  )
149
58
  toast.success(
150
- info.available
151
- ? t('toast.healthOk', { name: toolName })
152
- : t('toast.healthUnavailable', { name: toolName }),
59
+ info.available ? t('toast.healthOk', { name: toolName }) : t('toast.healthUnavailable', { name: toolName }),
153
60
  )
154
61
  } catch {
155
62
  toast.error(t('toast.healthFailed', { name: toolName }))
@@ -158,22 +65,14 @@ export default function AiCliToolsPage() {
158
65
  }
159
66
  }
160
67
 
161
- const openTestDialog = (tool: CliToolInfo) => {
162
- setTestToolInfo(tool)
163
- setTestDialogOpen(true)
164
- }
165
-
68
+ const openTestDialog = (tool: CliToolInfo) => { setTestToolInfo(tool); setTestDialogOpen(true) }
166
69
  const availableCount = tools.filter((t) => t.available).length
167
70
 
168
71
  return (
169
72
  <div className="space-y-6">
170
73
  <PageHeader title={t('title')} description={t('description')}>
171
74
  <Button variant="outline" onClick={loadTools} disabled={loading}>
172
- {loading ? (
173
- <Loader2 className="mr-2 h-4 w-4 animate-spin" />
174
- ) : (
175
- <RefreshCw className="mr-2 h-4 w-4" />
176
- )}
75
+ {loading ? <Loader2 className="mr-2 h-4 w-4 animate-spin" /> : <RefreshCw className="mr-2 h-4 w-4" />}
177
76
  {tc('refresh')}
178
77
  </Button>
179
78
  </PageHeader>
@@ -185,14 +84,8 @@ export default function AiCliToolsPage() {
185
84
  ) : (
186
85
  <>
187
86
  <div className="flex items-center gap-2 text-sm text-muted-foreground">
188
- <span>
189
- {t('summary', {
190
- available: availableCount,
191
- total: tools.length,
192
- })}
193
- </span>
87
+ <span>{t('summary', { available: availableCount, total: tools.length })}</span>
194
88
  </div>
195
-
196
89
  <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
197
90
  {tools.map((tool) => (
198
91
  <ToolCard
@@ -201,10 +94,10 @@ export default function AiCliToolsPage() {
201
94
  onTest={openTestDialog}
202
95
  onHealthCheck={handleHealthCheck}
203
96
  isChecking={checkingTool === tool.name}
97
+ installedSkills={installedSkills[tool.name] || []}
204
98
  />
205
99
  ))}
206
100
  </div>
207
-
208
101
  {tools.length === 0 && (
209
102
  <div className="flex items-center justify-center h-32">
210
103
  <p className="text-muted-foreground">{t('noTools')}</p>
@@ -213,11 +106,7 @@ export default function AiCliToolsPage() {
213
106
  </>
214
107
  )}
215
108
 
216
- <CliTestDialog
217
- open={testDialogOpen}
218
- onOpenChange={setTestDialogOpen}
219
- tool={testToolInfo}
220
- />
109
+ <CliTestDialog open={testDialogOpen} onOpenChange={setTestDialogOpen} tool={testToolInfo} />
221
110
  </div>
222
111
  )
223
112
  }