@octo-cyber/ai 0.5.5 → 0.5.7

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 (426) hide show
  1. package/dist/BranchDecisionEngine.d.ts +73 -0
  2. package/dist/BranchDecisionEngine.d.ts.map +1 -0
  3. package/dist/BranchDecisionEngine.js +195 -0
  4. package/dist/BranchDecisionEngine.js.map +1 -0
  5. package/dist/agent/coding-tools.d.ts +7 -0
  6. package/dist/agent/coding-tools.d.ts.map +1 -0
  7. package/dist/agent/coding-tools.js +181 -0
  8. package/dist/agent/coding-tools.js.map +1 -0
  9. package/dist/ai.module.d.ts +14 -2
  10. package/dist/ai.module.d.ts.map +1 -1
  11. package/dist/ai.module.js +61 -14
  12. package/dist/ai.module.js.map +1 -1
  13. package/dist/cli/adapters/antigravity.adapter.d.ts +2 -0
  14. package/dist/cli/adapters/antigravity.adapter.d.ts.map +1 -1
  15. package/dist/cli/adapters/antigravity.adapter.js +78 -0
  16. package/dist/cli/adapters/antigravity.adapter.js.map +1 -1
  17. package/dist/cli/adapters/claude-cli.adapter.d.ts.map +1 -1
  18. package/dist/cli/adapters/claude-cli.adapter.js +2 -0
  19. package/dist/cli/adapters/claude-cli.adapter.js.map +1 -1
  20. package/dist/cli/adapters/cli-proxy-api.adapter.d.ts +32 -0
  21. package/dist/cli/adapters/cli-proxy-api.adapter.d.ts.map +1 -0
  22. package/dist/cli/adapters/cli-proxy-api.adapter.js +239 -0
  23. package/dist/cli/adapters/cli-proxy-api.adapter.js.map +1 -0
  24. package/dist/cli/cli-executor.service.d.ts +2 -0
  25. package/dist/cli/cli-executor.service.d.ts.map +1 -1
  26. package/dist/cli/cli-executor.service.js +21 -1
  27. package/dist/cli/cli-executor.service.js.map +1 -1
  28. package/dist/cli/cli-registry.service.d.ts.map +1 -1
  29. package/dist/cli/cli-registry.service.js +3 -1
  30. package/dist/cli/cli-registry.service.js.map +1 -1
  31. package/dist/cli/controllers/ai-cli.controller.d.ts +4 -0
  32. package/dist/cli/controllers/ai-cli.controller.d.ts.map +1 -1
  33. package/dist/cli/controllers/ai-cli.controller.js +33 -4
  34. package/dist/cli/controllers/ai-cli.controller.js.map +1 -1
  35. package/dist/cli/index.d.ts +1 -1
  36. package/dist/cli/index.d.ts.map +1 -1
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/cli/types.d.ts +23 -1
  39. package/dist/cli/types.d.ts.map +1 -1
  40. package/dist/cli/workspace.service.d.ts +11 -3
  41. package/dist/cli/workspace.service.d.ts.map +1 -1
  42. package/dist/cli/workspace.service.js +61 -6
  43. package/dist/cli/workspace.service.js.map +1 -1
  44. package/dist/index.d.ts +5 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +22 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/session/claude-code-session-manager.service.d.ts +28 -0
  49. package/dist/session/claude-code-session-manager.service.d.ts.map +1 -0
  50. package/dist/session/claude-code-session-manager.service.js +177 -0
  51. package/dist/session/claude-code-session-manager.service.js.map +1 -0
  52. package/dist/shared/IClaudeCodeSessionManager.d.ts +151 -0
  53. package/dist/shared/IClaudeCodeSessionManager.d.ts.map +1 -0
  54. package/dist/shared/IClaudeCodeSessionManager.js +6 -0
  55. package/dist/shared/IClaudeCodeSessionManager.js.map +1 -0
  56. package/dist/skill/controllers/skill-market.controller.d.ts +18 -0
  57. package/dist/skill/controllers/skill-market.controller.d.ts.map +1 -0
  58. package/dist/skill/controllers/skill-market.controller.js +128 -0
  59. package/dist/skill/controllers/skill-market.controller.js.map +1 -0
  60. package/dist/skill/controllers/skill.controller.d.ts +4 -0
  61. package/dist/skill/controllers/skill.controller.d.ts.map +1 -1
  62. package/dist/skill/controllers/skill.controller.js +31 -0
  63. package/dist/skill/controllers/skill.controller.js.map +1 -1
  64. package/dist/skill/index.d.ts +3 -1
  65. package/dist/skill/index.d.ts.map +1 -1
  66. package/dist/skill/index.js +5 -1
  67. package/dist/skill/index.js.map +1 -1
  68. package/dist/skill/services/skill-installer.service.d.ts +27 -0
  69. package/dist/skill/services/skill-installer.service.d.ts.map +1 -1
  70. package/dist/skill/services/skill-installer.service.js +108 -0
  71. package/dist/skill/services/skill-installer.service.js.map +1 -1
  72. package/dist/skill/services/skill-market.service.d.ts +60 -0
  73. package/dist/skill/services/skill-market.service.d.ts.map +1 -0
  74. package/dist/skill/services/skill-market.service.js +244 -0
  75. package/dist/skill/services/skill-market.service.js.map +1 -0
  76. package/dist/skill/services/skill-registry.service.js +4 -4
  77. package/dist/skill/services/skill-registry.service.js.map +1 -1
  78. package/dist/skill/types.d.ts +32 -1
  79. package/dist/skill/types.d.ts.map +1 -1
  80. package/dist/src/BranchDecisionEngine.d.ts +73 -0
  81. package/dist/src/BranchDecisionEngine.d.ts.map +1 -0
  82. package/dist/src/BranchDecisionEngine.js +195 -0
  83. package/dist/src/BranchDecisionEngine.js.map +1 -0
  84. package/dist/src/agent/agent-approval.controller.d.ts +20 -0
  85. package/dist/src/agent/agent-approval.controller.d.ts.map +1 -0
  86. package/dist/src/agent/agent-approval.controller.js +101 -0
  87. package/dist/src/agent/agent-approval.controller.js.map +1 -0
  88. package/dist/src/agent/agent-approval.entity.d.ts +15 -0
  89. package/dist/src/agent/agent-approval.entity.d.ts.map +1 -0
  90. package/dist/src/agent/agent-approval.entity.js +63 -0
  91. package/dist/src/agent/agent-approval.entity.js.map +1 -0
  92. package/dist/src/agent/agent-approval.service.d.ts +35 -0
  93. package/dist/src/agent/agent-approval.service.d.ts.map +1 -0
  94. package/dist/src/agent/agent-approval.service.js +109 -0
  95. package/dist/src/agent/agent-approval.service.js.map +1 -0
  96. package/dist/src/agent/agent-gateway.controller.d.ts +30 -0
  97. package/dist/src/agent/agent-gateway.controller.d.ts.map +1 -0
  98. package/dist/src/agent/agent-gateway.controller.js +112 -0
  99. package/dist/src/agent/agent-gateway.controller.js.map +1 -0
  100. package/dist/src/agent/agent-gateway.service.d.ts +33 -0
  101. package/dist/src/agent/agent-gateway.service.d.ts.map +1 -0
  102. package/dist/src/agent/agent-gateway.service.js +84 -0
  103. package/dist/src/agent/agent-gateway.service.js.map +1 -0
  104. package/dist/src/agent/agent-registry.service.d.ts +30 -0
  105. package/dist/src/agent/agent-registry.service.d.ts.map +1 -0
  106. package/dist/src/agent/agent-registry.service.js +45 -0
  107. package/dist/src/agent/agent-registry.service.js.map +1 -0
  108. package/dist/src/agent/agent-run-persistence.service.d.ts +82 -0
  109. package/dist/src/agent/agent-run-persistence.service.d.ts.map +1 -0
  110. package/dist/src/agent/agent-run-persistence.service.js +171 -0
  111. package/dist/src/agent/agent-run-persistence.service.js.map +1 -0
  112. package/dist/src/agent/agent-run-step.entity.d.ts +23 -0
  113. package/dist/src/agent/agent-run-step.entity.d.ts.map +1 -0
  114. package/dist/src/agent/agent-run-step.entity.js +76 -0
  115. package/dist/src/agent/agent-run-step.entity.js.map +1 -0
  116. package/dist/src/agent/agent-run.controller.d.ts +42 -0
  117. package/dist/src/agent/agent-run.controller.d.ts.map +1 -0
  118. package/dist/src/agent/agent-run.controller.js +195 -0
  119. package/dist/src/agent/agent-run.controller.js.map +1 -0
  120. package/dist/src/agent/agent-run.entity.d.ts +35 -0
  121. package/dist/src/agent/agent-run.entity.d.ts.map +1 -0
  122. package/dist/src/agent/agent-run.entity.js +98 -0
  123. package/dist/src/agent/agent-run.entity.js.map +1 -0
  124. package/dist/src/agent/agent-run.service.d.ts +48 -0
  125. package/dist/src/agent/agent-run.service.d.ts.map +1 -0
  126. package/dist/src/agent/agent-run.service.js +155 -0
  127. package/dist/src/agent/agent-run.service.js.map +1 -0
  128. package/dist/src/agent/agent-session.controller.d.ts +20 -0
  129. package/dist/src/agent/agent-session.controller.d.ts.map +1 -0
  130. package/dist/src/agent/agent-session.controller.js +97 -0
  131. package/dist/src/agent/agent-session.controller.js.map +1 -0
  132. package/dist/src/agent/agent-session.entity.d.ts +13 -0
  133. package/dist/src/agent/agent-session.entity.d.ts.map +1 -0
  134. package/dist/src/agent/agent-session.entity.js +57 -0
  135. package/dist/src/agent/agent-session.entity.js.map +1 -0
  136. package/dist/src/agent/agent-session.service.d.ts +38 -0
  137. package/dist/src/agent/agent-session.service.d.ts.map +1 -0
  138. package/dist/src/agent/agent-session.service.js +112 -0
  139. package/dist/src/agent/agent-session.service.js.map +1 -0
  140. package/dist/src/agent/coding-tools.d.ts +7 -0
  141. package/dist/src/agent/coding-tools.d.ts.map +1 -0
  142. package/dist/src/agent/coding-tools.js +181 -0
  143. package/dist/src/agent/coding-tools.js.map +1 -0
  144. package/dist/src/agent/computer-use-tools.d.ts +15 -0
  145. package/dist/src/agent/computer-use-tools.d.ts.map +1 -0
  146. package/dist/src/agent/computer-use-tools.js +256 -0
  147. package/dist/src/agent/computer-use-tools.js.map +1 -0
  148. package/dist/src/agent/external-agent.controller.d.ts +41 -0
  149. package/dist/src/agent/external-agent.controller.d.ts.map +1 -0
  150. package/dist/src/agent/external-agent.controller.js +129 -0
  151. package/dist/src/agent/external-agent.controller.js.map +1 -0
  152. package/dist/src/agent/external-agent.entity.d.ts +22 -0
  153. package/dist/src/agent/external-agent.entity.d.ts.map +1 -0
  154. package/dist/src/agent/external-agent.entity.js +75 -0
  155. package/dist/src/agent/external-agent.entity.js.map +1 -0
  156. package/dist/src/agent/external-agent.service.d.ts +60 -0
  157. package/dist/src/agent/external-agent.service.d.ts.map +1 -0
  158. package/dist/src/agent/external-agent.service.js +143 -0
  159. package/dist/src/agent/external-agent.service.js.map +1 -0
  160. package/dist/src/ai.module.d.ts +22 -0
  161. package/dist/src/ai.module.d.ts.map +1 -0
  162. package/dist/src/ai.module.js +178 -0
  163. package/dist/src/ai.module.js.map +1 -0
  164. package/dist/src/cli/adapters/antigravity.adapter.d.ts +31 -0
  165. package/dist/src/cli/adapters/antigravity.adapter.d.ts.map +1 -0
  166. package/dist/src/cli/adapters/antigravity.adapter.js +248 -0
  167. package/dist/src/cli/adapters/antigravity.adapter.js.map +1 -0
  168. package/dist/src/cli/adapters/claude-cli.adapter.d.ts +23 -0
  169. package/dist/src/cli/adapters/claude-cli.adapter.d.ts.map +1 -0
  170. package/dist/src/cli/adapters/claude-cli.adapter.js +81 -0
  171. package/dist/src/cli/adapters/claude-cli.adapter.js.map +1 -0
  172. package/dist/src/cli/adapters/cli-proxy-api.adapter.d.ts +32 -0
  173. package/dist/src/cli/adapters/cli-proxy-api.adapter.d.ts.map +1 -0
  174. package/dist/src/cli/adapters/cli-proxy-api.adapter.js +239 -0
  175. package/dist/src/cli/adapters/cli-proxy-api.adapter.js.map +1 -0
  176. package/dist/src/cli/adapters/codex-cli.adapter.d.ts +22 -0
  177. package/dist/src/cli/adapters/codex-cli.adapter.d.ts.map +1 -0
  178. package/dist/src/cli/adapters/codex-cli.adapter.js +76 -0
  179. package/dist/src/cli/adapters/codex-cli.adapter.js.map +1 -0
  180. package/dist/src/cli/adapters/detect-cli.d.ts +11 -0
  181. package/dist/src/cli/adapters/detect-cli.d.ts.map +1 -0
  182. package/dist/src/cli/adapters/detect-cli.js +40 -0
  183. package/dist/src/cli/adapters/detect-cli.js.map +1 -0
  184. package/dist/src/cli/adapters/gemini-cli.adapter.d.ts +21 -0
  185. package/dist/src/cli/adapters/gemini-cli.adapter.d.ts.map +1 -0
  186. package/dist/src/cli/adapters/gemini-cli.adapter.js +72 -0
  187. package/dist/src/cli/adapters/gemini-cli.adapter.js.map +1 -0
  188. package/dist/src/cli/adapters/index.d.ts +4 -0
  189. package/dist/src/cli/adapters/index.d.ts.map +1 -0
  190. package/dist/src/cli/adapters/index.js +10 -0
  191. package/dist/src/cli/adapters/index.js.map +1 -0
  192. package/dist/src/cli/cli-executor.service.d.ts +25 -0
  193. package/dist/src/cli/cli-executor.service.d.ts.map +1 -0
  194. package/dist/src/cli/cli-executor.service.js +170 -0
  195. package/dist/src/cli/cli-executor.service.js.map +1 -0
  196. package/dist/src/cli/cli-registry.service.d.ts +38 -0
  197. package/dist/src/cli/cli-registry.service.d.ts.map +1 -0
  198. package/dist/src/cli/cli-registry.service.js +114 -0
  199. package/dist/src/cli/cli-registry.service.js.map +1 -0
  200. package/dist/src/cli/controllers/ai-cli.controller.d.ts +40 -0
  201. package/dist/src/cli/controllers/ai-cli.controller.d.ts.map +1 -0
  202. package/dist/src/cli/controllers/ai-cli.controller.js +208 -0
  203. package/dist/src/cli/controllers/ai-cli.controller.js.map +1 -0
  204. package/dist/src/cli/index.d.ts +8 -0
  205. package/dist/src/cli/index.d.ts.map +1 -0
  206. package/dist/src/cli/index.js +17 -0
  207. package/dist/src/cli/index.js.map +1 -0
  208. package/dist/src/cli/types.d.ts +153 -0
  209. package/dist/src/cli/types.d.ts.map +1 -0
  210. package/dist/src/cli/types.js +9 -0
  211. package/dist/src/cli/types.js.map +1 -0
  212. package/dist/src/cli/workspace.service.d.ts +42 -0
  213. package/dist/src/cli/workspace.service.d.ts.map +1 -0
  214. package/dist/src/cli/workspace.service.js +249 -0
  215. package/dist/src/cli/workspace.service.js.map +1 -0
  216. package/dist/src/computer-use/computer-use.controller.d.ts +23 -0
  217. package/dist/src/computer-use/computer-use.controller.d.ts.map +1 -0
  218. package/dist/src/computer-use/computer-use.controller.js +87 -0
  219. package/dist/src/computer-use/computer-use.controller.js.map +1 -0
  220. package/dist/src/index.d.ts +12 -0
  221. package/dist/src/index.d.ts.map +1 -0
  222. package/dist/src/index.js +51 -0
  223. package/dist/src/index.js.map +1 -0
  224. package/dist/src/orchestrator/orchestrator-plan.entity.d.ts +31 -0
  225. package/dist/src/orchestrator/orchestrator-plan.entity.d.ts.map +1 -0
  226. package/dist/src/orchestrator/orchestrator-plan.entity.js +69 -0
  227. package/dist/src/orchestrator/orchestrator-plan.entity.js.map +1 -0
  228. package/dist/src/orchestrator/orchestrator-plan.service.d.ts +27 -0
  229. package/dist/src/orchestrator/orchestrator-plan.service.d.ts.map +1 -0
  230. package/dist/src/orchestrator/orchestrator-plan.service.js +201 -0
  231. package/dist/src/orchestrator/orchestrator-plan.service.js.map +1 -0
  232. package/dist/src/orchestrator/orchestrator.controller.d.ts +29 -0
  233. package/dist/src/orchestrator/orchestrator.controller.d.ts.map +1 -0
  234. package/dist/src/orchestrator/orchestrator.controller.js +144 -0
  235. package/dist/src/orchestrator/orchestrator.controller.js.map +1 -0
  236. package/dist/src/orchestrator/workflow-feedback.entity.d.ts +12 -0
  237. package/dist/src/orchestrator/workflow-feedback.entity.d.ts.map +1 -0
  238. package/dist/src/orchestrator/workflow-feedback.entity.js +49 -0
  239. package/dist/src/orchestrator/workflow-feedback.entity.js.map +1 -0
  240. package/dist/src/orchestrator/workflow-feedback.service.d.ts +14 -0
  241. package/dist/src/orchestrator/workflow-feedback.service.d.ts.map +1 -0
  242. package/dist/src/orchestrator/workflow-feedback.service.js +51 -0
  243. package/dist/src/orchestrator/workflow-feedback.service.js.map +1 -0
  244. package/dist/src/session/claude-code-session-manager.service.d.ts +28 -0
  245. package/dist/src/session/claude-code-session-manager.service.d.ts.map +1 -0
  246. package/dist/src/session/claude-code-session-manager.service.js +177 -0
  247. package/dist/src/session/claude-code-session-manager.service.js.map +1 -0
  248. package/dist/src/skill/controllers/skill-market.controller.d.ts +18 -0
  249. package/dist/src/skill/controllers/skill-market.controller.d.ts.map +1 -0
  250. package/dist/src/skill/controllers/skill-market.controller.js +128 -0
  251. package/dist/src/skill/controllers/skill-market.controller.js.map +1 -0
  252. package/dist/src/skill/controllers/skill.controller.d.ts +37 -0
  253. package/dist/src/skill/controllers/skill.controller.d.ts.map +1 -0
  254. package/dist/src/skill/controllers/skill.controller.js +295 -0
  255. package/dist/src/skill/controllers/skill.controller.js.map +1 -0
  256. package/dist/src/skill/entities/octo-skill.entity.d.ts +22 -0
  257. package/dist/src/skill/entities/octo-skill.entity.d.ts.map +1 -0
  258. package/dist/src/skill/entities/octo-skill.entity.js +91 -0
  259. package/dist/src/skill/entities/octo-skill.entity.js.map +1 -0
  260. package/dist/src/skill/index.d.ts +9 -0
  261. package/dist/src/skill/index.d.ts.map +1 -0
  262. package/dist/src/skill/index.js +21 -0
  263. package/dist/src/skill/index.js.map +1 -0
  264. package/dist/src/skill/services/skill-generator.service.d.ts +47 -0
  265. package/dist/src/skill/services/skill-generator.service.d.ts.map +1 -0
  266. package/dist/src/skill/services/skill-generator.service.js +232 -0
  267. package/dist/src/skill/services/skill-generator.service.js.map +1 -0
  268. package/dist/src/skill/services/skill-installer.service.d.ts +65 -0
  269. package/dist/src/skill/services/skill-installer.service.d.ts.map +1 -0
  270. package/dist/src/skill/services/skill-installer.service.js +258 -0
  271. package/dist/src/skill/services/skill-installer.service.js.map +1 -0
  272. package/dist/src/skill/services/skill-market-helpers.d.ts +25 -0
  273. package/dist/src/skill/services/skill-market-helpers.d.ts.map +1 -0
  274. package/dist/src/skill/services/skill-market-helpers.js +22 -0
  275. package/dist/src/skill/services/skill-market-helpers.js.map +1 -0
  276. package/dist/src/skill/services/skill-market-utils.d.ts +25 -0
  277. package/dist/src/skill/services/skill-market-utils.d.ts.map +1 -0
  278. package/dist/src/skill/services/skill-market-utils.js +22 -0
  279. package/dist/src/skill/services/skill-market-utils.js.map +1 -0
  280. package/dist/src/skill/services/skill-market.service.d.ts +60 -0
  281. package/dist/src/skill/services/skill-market.service.d.ts.map +1 -0
  282. package/dist/src/skill/services/skill-market.service.js +228 -0
  283. package/dist/src/skill/services/skill-market.service.js.map +1 -0
  284. package/dist/src/skill/services/skill-registry.service.d.ts +61 -0
  285. package/dist/src/skill/services/skill-registry.service.d.ts.map +1 -0
  286. package/dist/src/skill/services/skill-registry.service.js +159 -0
  287. package/dist/src/skill/services/skill-registry.service.js.map +1 -0
  288. package/dist/src/skill/types.d.ts +76 -0
  289. package/dist/src/skill/types.d.ts.map +1 -0
  290. package/dist/src/skill/types.js +6 -0
  291. package/dist/src/skill/types.js.map +1 -0
  292. package/dist/src/workflow-design/DocumentExtractorAgent.d.ts +47 -0
  293. package/dist/src/workflow-design/DocumentExtractorAgent.d.ts.map +1 -0
  294. package/dist/src/workflow-design/DocumentExtractorAgent.js +118 -0
  295. package/dist/src/workflow-design/DocumentExtractorAgent.js.map +1 -0
  296. package/dist/src/workflow-design/N8nNodeKnowledgeBase.d.ts +26 -0
  297. package/dist/src/workflow-design/N8nNodeKnowledgeBase.d.ts.map +1 -0
  298. package/dist/src/workflow-design/N8nNodeKnowledgeBase.js +362 -0
  299. package/dist/src/workflow-design/N8nNodeKnowledgeBase.js.map +1 -0
  300. package/dist/src/workflow-design/OctoAgentClient.d.ts +42 -0
  301. package/dist/src/workflow-design/OctoAgentClient.d.ts.map +1 -0
  302. package/dist/src/workflow-design/OctoAgentClient.js +191 -0
  303. package/dist/src/workflow-design/OctoAgentClient.js.map +1 -0
  304. package/dist/src/workflow-design/WorkflowAssembler.d.ts +10 -0
  305. package/dist/src/workflow-design/WorkflowAssembler.d.ts.map +1 -0
  306. package/dist/src/workflow-design/WorkflowAssembler.js +81 -0
  307. package/dist/src/workflow-design/WorkflowAssembler.js.map +1 -0
  308. package/dist/src/workflow-design/WorkflowDesignOrchestrator.d.ts +45 -0
  309. package/dist/src/workflow-design/WorkflowDesignOrchestrator.d.ts.map +1 -0
  310. package/dist/src/workflow-design/WorkflowDesignOrchestrator.js +265 -0
  311. package/dist/src/workflow-design/WorkflowDesignOrchestrator.js.map +1 -0
  312. package/dist/src/workflow-design/agents/ActionChainAgent.d.ts +9 -0
  313. package/dist/src/workflow-design/agents/ActionChainAgent.d.ts.map +1 -0
  314. package/dist/src/workflow-design/agents/ActionChainAgent.js +79 -0
  315. package/dist/src/workflow-design/agents/ActionChainAgent.js.map +1 -0
  316. package/dist/src/workflow-design/agents/CodeScriptAgent.d.ts +15 -0
  317. package/dist/src/workflow-design/agents/CodeScriptAgent.d.ts.map +1 -0
  318. package/dist/src/workflow-design/agents/CodeScriptAgent.js +96 -0
  319. package/dist/src/workflow-design/agents/CodeScriptAgent.js.map +1 -0
  320. package/dist/src/workflow-design/agents/LogicFlowAgent.d.ts +9 -0
  321. package/dist/src/workflow-design/agents/LogicFlowAgent.d.ts.map +1 -0
  322. package/dist/src/workflow-design/agents/LogicFlowAgent.js +78 -0
  323. package/dist/src/workflow-design/agents/LogicFlowAgent.js.map +1 -0
  324. package/dist/src/workflow-design/agents/TriggerAnalystAgent.d.ts +9 -0
  325. package/dist/src/workflow-design/agents/TriggerAnalystAgent.d.ts.map +1 -0
  326. package/dist/src/workflow-design/agents/TriggerAnalystAgent.js +65 -0
  327. package/dist/src/workflow-design/agents/TriggerAnalystAgent.js.map +1 -0
  328. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.d.ts +9 -0
  329. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.d.ts.map +1 -0
  330. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.js +117 -0
  331. package/dist/src/workflow-design/agents/WorkflowValidatorAgent.js.map +1 -0
  332. package/dist/src/workflow-design/index.d.ts +12 -0
  333. package/dist/src/workflow-design/index.d.ts.map +1 -0
  334. package/dist/src/workflow-design/index.js +23 -0
  335. package/dist/src/workflow-design/index.js.map +1 -0
  336. package/dist/src/workflow-design/n8n-node-templates-data.d.ts +4 -0
  337. package/dist/src/workflow-design/n8n-node-templates-data.d.ts.map +1 -0
  338. package/dist/src/workflow-design/n8n-node-templates-data.js +290 -0
  339. package/dist/src/workflow-design/n8n-node-templates-data.js.map +1 -0
  340. package/dist/src/workflow-design/types.d.ts +155 -0
  341. package/dist/src/workflow-design/types.d.ts.map +1 -0
  342. package/dist/src/workflow-design/types.js +6 -0
  343. package/dist/src/workflow-design/types.js.map +1 -0
  344. package/dist/workflow-design/DocumentExtractorAgent.d.ts +47 -0
  345. package/dist/workflow-design/DocumentExtractorAgent.d.ts.map +1 -0
  346. package/dist/workflow-design/DocumentExtractorAgent.js +118 -0
  347. package/dist/workflow-design/DocumentExtractorAgent.js.map +1 -0
  348. package/dist/workflow-design/N8nNodeKnowledgeBase.d.ts +26 -0
  349. package/dist/workflow-design/N8nNodeKnowledgeBase.d.ts.map +1 -0
  350. package/dist/workflow-design/N8nNodeKnowledgeBase.js +320 -0
  351. package/dist/workflow-design/N8nNodeKnowledgeBase.js.map +1 -0
  352. package/dist/workflow-design/OctoAgentClient.d.ts +42 -0
  353. package/dist/workflow-design/OctoAgentClient.d.ts.map +1 -0
  354. package/dist/workflow-design/OctoAgentClient.js +166 -0
  355. package/dist/workflow-design/OctoAgentClient.js.map +1 -0
  356. package/dist/workflow-design/WorkflowDesignOrchestrator.d.ts +45 -0
  357. package/dist/workflow-design/WorkflowDesignOrchestrator.d.ts.map +1 -0
  358. package/dist/workflow-design/WorkflowDesignOrchestrator.js +265 -0
  359. package/dist/workflow-design/WorkflowDesignOrchestrator.js.map +1 -0
  360. package/dist/workflow-design/agents/ActionChainAgent.d.ts +9 -0
  361. package/dist/workflow-design/agents/ActionChainAgent.d.ts.map +1 -0
  362. package/dist/workflow-design/agents/ActionChainAgent.js +79 -0
  363. package/dist/workflow-design/agents/ActionChainAgent.js.map +1 -0
  364. package/dist/workflow-design/agents/CodeScriptAgent.d.ts +15 -0
  365. package/dist/workflow-design/agents/CodeScriptAgent.d.ts.map +1 -0
  366. package/dist/workflow-design/agents/CodeScriptAgent.js +96 -0
  367. package/dist/workflow-design/agents/CodeScriptAgent.js.map +1 -0
  368. package/dist/workflow-design/agents/LogicFlowAgent.d.ts +9 -0
  369. package/dist/workflow-design/agents/LogicFlowAgent.d.ts.map +1 -0
  370. package/dist/workflow-design/agents/LogicFlowAgent.js +78 -0
  371. package/dist/workflow-design/agents/LogicFlowAgent.js.map +1 -0
  372. package/dist/workflow-design/agents/TriggerAnalystAgent.d.ts +9 -0
  373. package/dist/workflow-design/agents/TriggerAnalystAgent.d.ts.map +1 -0
  374. package/dist/workflow-design/agents/TriggerAnalystAgent.js +65 -0
  375. package/dist/workflow-design/agents/TriggerAnalystAgent.js.map +1 -0
  376. package/dist/workflow-design/agents/WorkflowValidatorAgent.d.ts +9 -0
  377. package/dist/workflow-design/agents/WorkflowValidatorAgent.d.ts.map +1 -0
  378. package/dist/workflow-design/agents/WorkflowValidatorAgent.js +117 -0
  379. package/dist/workflow-design/agents/WorkflowValidatorAgent.js.map +1 -0
  380. package/dist/workflow-design/index.d.ts +12 -0
  381. package/dist/workflow-design/index.d.ts.map +1 -0
  382. package/dist/workflow-design/index.js +23 -0
  383. package/dist/workflow-design/index.js.map +1 -0
  384. package/dist/workflow-design/types.d.ts +155 -0
  385. package/dist/workflow-design/types.d.ts.map +1 -0
  386. package/dist/workflow-design/types.js +6 -0
  387. package/dist/workflow-design/types.js.map +1 -0
  388. package/package.json +21 -14
  389. package/web/components/CreateWorkspaceDialog.tsx +157 -0
  390. package/web/components/DirBrowser.tsx +85 -0
  391. package/web/components/GithubTokenDialog.tsx +152 -0
  392. package/web/components/LocalPathSection.tsx +91 -0
  393. package/web/components/MarketInstallDialog.tsx +196 -0
  394. package/web/components/MarketSkillCard.tsx +74 -0
  395. package/web/components/RepoList.tsx +97 -0
  396. package/web/components/SearchResultsGrid.tsx +55 -0
  397. package/web/components/SkillCard.tsx +4 -1
  398. package/web/components/ToolCard.tsx +88 -0
  399. package/web/components/WorkspaceCard.tsx +146 -0
  400. package/web/components/WorkspaceItem.tsx +65 -0
  401. package/web/components/WorkspaceSelect.tsx +94 -0
  402. package/web/dist/module.iife.js +254 -0
  403. package/web/dynamic-entry.tsx +94 -0
  404. package/web/index.ts +18 -1
  405. package/web/manifest.ts +7 -0
  406. package/web/messages/en-US.json +231 -7
  407. package/web/messages/zh-CN.json +234 -7
  408. package/web/pages/AgentMarketPage.tsx +318 -0
  409. package/web/pages/AgentRunsPage.tsx +162 -0
  410. package/web/pages/AgentsPage.tsx +239 -0
  411. package/web/pages/AiCliToolsPage.tsx +17 -128
  412. package/web/pages/ApprovalsPage.tsx +260 -0
  413. package/web/pages/OrchestratorPage.tsx +384 -0
  414. package/web/pages/SessionsPage.tsx +248 -0
  415. package/web/pages/SkillMarketPage.tsx +25 -0
  416. package/web/pages/WorkspaceSection.tsx +13 -113
  417. package/web/pages/WorkspacesPage.tsx +29 -254
  418. package/web/services/agent-approval.service.ts +35 -0
  419. package/web/services/agent-gateway.service.ts +41 -0
  420. package/web/services/agent-run.service.ts +48 -0
  421. package/web/services/agent-session.service.ts +30 -0
  422. package/web/services/ai-cli-service.ts +33 -0
  423. package/web/services/external-agent.service.ts +38 -0
  424. package/web/services/orchestrator.service.ts +52 -0
  425. package/web/services/skill-market-service.ts +88 -0
  426. package/web/services/skill-service.ts +12 -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
  }