@vectorx/agent-simulator 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/lib/app.d.ts +43 -0
  2. package/lib/app.d.ts.map +1 -0
  3. package/lib/app.js +96 -0
  4. package/lib/app.js.map +1 -0
  5. package/lib/config/api.config.d.ts +2 -0
  6. package/lib/config/api.config.d.ts.map +1 -0
  7. package/lib/config/api.config.js +13 -0
  8. package/lib/config/api.config.js.map +1 -0
  9. package/lib/config/app.config.d.ts +22 -0
  10. package/lib/config/app.config.d.ts.map +1 -0
  11. package/lib/config/app.config.js +18 -0
  12. package/lib/config/app.config.js.map +1 -0
  13. package/lib/config/upload.config.d.ts +6 -0
  14. package/lib/config/upload.config.d.ts.map +1 -0
  15. package/lib/config/upload.config.js +10 -0
  16. package/lib/config/upload.config.js.map +1 -0
  17. package/lib/container/container.d.ts +6 -0
  18. package/lib/container/container.d.ts.map +1 -0
  19. package/lib/container/container.js +34 -0
  20. package/lib/container/container.js.map +1 -0
  21. package/lib/container/identifiers.d.ts +14 -0
  22. package/lib/container/identifiers.d.ts.map +1 -0
  23. package/lib/container/identifiers.js +20 -0
  24. package/lib/container/identifiers.js.map +1 -0
  25. package/lib/container/index.d.ts +4 -0
  26. package/lib/container/index.d.ts.map +1 -0
  27. package/lib/container/index.js +20 -0
  28. package/lib/container/index.js.map +1 -0
  29. package/lib/container/types.d.ts +41 -0
  30. package/lib/container/types.d.ts.map +1 -0
  31. package/lib/{types.js → container/types.js} +1 -0
  32. package/lib/container/types.js.map +1 -0
  33. package/lib/controllers/agent.controller.d.ts +15 -0
  34. package/lib/controllers/agent.controller.d.ts.map +1 -0
  35. package/lib/controllers/agent.controller.js +59 -0
  36. package/lib/controllers/agent.controller.js.map +1 -0
  37. package/lib/controllers/auth.controller.d.ts +23 -0
  38. package/lib/controllers/auth.controller.d.ts.map +1 -0
  39. package/lib/controllers/auth.controller.js +132 -0
  40. package/lib/controllers/auth.controller.js.map +1 -0
  41. package/lib/controllers/simulator.controller.d.ts +11 -0
  42. package/lib/controllers/simulator.controller.d.ts.map +1 -0
  43. package/lib/controllers/simulator.controller.js +44 -0
  44. package/lib/controllers/simulator.controller.js.map +1 -0
  45. package/lib/controllers/upload.controller.d.ts +8 -0
  46. package/lib/controllers/upload.controller.d.ts.map +1 -0
  47. package/lib/controllers/upload.controller.js +44 -0
  48. package/lib/controllers/upload.controller.js.map +1 -0
  49. package/lib/index.d.ts +7 -0
  50. package/lib/index.d.ts.map +1 -0
  51. package/lib/index.js +15 -2
  52. package/lib/index.js.map +1 -0
  53. package/lib/middleware/cors.middleware.d.ts +7 -0
  54. package/lib/middleware/cors.middleware.d.ts.map +1 -0
  55. package/lib/middleware/cors.middleware.js +14 -0
  56. package/lib/middleware/cors.middleware.js.map +1 -0
  57. package/lib/middleware/error.middleware.d.ts +8 -0
  58. package/lib/middleware/error.middleware.d.ts.map +1 -0
  59. package/lib/middleware/error.middleware.js +33 -0
  60. package/lib/middleware/error.middleware.js.map +1 -0
  61. package/lib/middleware/proxy.middleware.d.ts +3 -0
  62. package/lib/middleware/proxy.middleware.d.ts.map +1 -0
  63. package/lib/middleware/proxy.middleware.js +21 -0
  64. package/lib/middleware/proxy.middleware.js.map +1 -0
  65. package/lib/routes/agent.d.ts +3 -0
  66. package/lib/routes/agent.d.ts.map +1 -0
  67. package/lib/routes/agent.js +16 -0
  68. package/lib/routes/agent.js.map +1 -0
  69. package/lib/routes/auth.d.ts +3 -0
  70. package/lib/routes/auth.d.ts.map +1 -0
  71. package/lib/routes/auth.js +20 -0
  72. package/lib/routes/auth.js.map +1 -0
  73. package/lib/routes/index.d.ts +3 -0
  74. package/lib/routes/index.d.ts.map +1 -0
  75. package/lib/routes/index.js +19 -0
  76. package/lib/routes/index.js.map +1 -0
  77. package/lib/routes/simulator.d.ts +3 -0
  78. package/lib/routes/simulator.d.ts.map +1 -0
  79. package/lib/routes/simulator.js +14 -0
  80. package/lib/routes/simulator.js.map +1 -0
  81. package/lib/routes/upload.d.ts +3 -0
  82. package/lib/routes/upload.d.ts.map +1 -0
  83. package/lib/routes/upload.js +13 -0
  84. package/lib/routes/upload.js.map +1 -0
  85. package/{types/webview-ui/services/agent-service.d.ts → lib/services/agent.service.d.ts} +15 -3
  86. package/lib/services/agent.service.d.ts.map +1 -0
  87. package/lib/services/agent.service.js +116 -0
  88. package/lib/services/agent.service.js.map +1 -0
  89. package/lib/services/auth.service.d.ts +55 -0
  90. package/lib/services/auth.service.d.ts.map +1 -0
  91. package/lib/services/auth.service.js +124 -0
  92. package/lib/services/auth.service.js.map +1 -0
  93. package/lib/services/simulator.service.d.ts +23 -0
  94. package/lib/services/simulator.service.d.ts.map +1 -0
  95. package/lib/services/simulator.service.js +49 -0
  96. package/lib/services/simulator.service.js.map +1 -0
  97. package/lib/services/upload.service.d.ts +32 -0
  98. package/lib/services/upload.service.d.ts.map +1 -0
  99. package/lib/services/upload.service.js +61 -0
  100. package/lib/services/upload.service.js.map +1 -0
  101. package/lib/simulator.d.ts +27 -0
  102. package/lib/simulator.d.ts.map +1 -0
  103. package/lib/simulator.js +42 -187
  104. package/lib/simulator.js.map +1 -0
  105. package/lib/utils/logger.d.ts +8 -0
  106. package/lib/utils/logger.d.ts.map +1 -0
  107. package/lib/utils/logger.js +28 -0
  108. package/lib/utils/logger.js.map +1 -0
  109. package/lib/utils/request.d.ts +11 -0
  110. package/lib/utils/request.d.ts.map +1 -0
  111. package/lib/utils/request.js +36 -0
  112. package/lib/utils/request.js.map +1 -0
  113. package/lib/utils/url-parser.d.ts +14 -0
  114. package/lib/utils/url-parser.d.ts.map +1 -0
  115. package/lib/utils/url-parser.js +25 -0
  116. package/lib/utils/url-parser.js.map +1 -0
  117. package/lib/utils.d.ts +6 -0
  118. package/lib/utils.d.ts.map +1 -0
  119. package/lib/utils.js +5 -0
  120. package/lib/utils.js.map +1 -0
  121. package/{types → lib}/webview-ui/Agent.d.ts +2 -0
  122. package/lib/webview-ui/Agent.d.ts.map +1 -0
  123. package/lib/webview-ui/Agent.js +8 -0
  124. package/lib/webview-ui/Agent.js.map +1 -0
  125. package/lib/webview-ui/App.d.ts +3 -0
  126. package/lib/webview-ui/App.d.ts.map +1 -0
  127. package/lib/webview-ui/App.js +362 -181
  128. package/lib/webview-ui/App.js.map +1 -0
  129. package/{types → lib}/webview-ui/ErrorBoundary.d.ts +2 -1
  130. package/lib/webview-ui/ErrorBoundary.d.ts.map +1 -0
  131. package/lib/webview-ui/ErrorBoundary.js +15 -18
  132. package/lib/webview-ui/ErrorBoundary.js.map +1 -0
  133. package/lib/webview-ui/components/AsyncTaskBlock.d.ts +13 -0
  134. package/lib/webview-ui/components/AsyncTaskBlock.d.ts.map +1 -0
  135. package/lib/webview-ui/components/AsyncTaskBlock.js +179 -0
  136. package/lib/webview-ui/components/AsyncTaskBlock.js.map +1 -0
  137. package/lib/webview-ui/components/AuthIndicator.d.ts +3 -0
  138. package/lib/webview-ui/components/AuthIndicator.d.ts.map +1 -0
  139. package/lib/webview-ui/components/AuthIndicator.js +17 -0
  140. package/lib/webview-ui/components/AuthIndicator.js.map +1 -0
  141. package/lib/webview-ui/components/ErrorCard.d.ts +11 -0
  142. package/lib/webview-ui/components/ErrorCard.d.ts.map +1 -0
  143. package/lib/webview-ui/components/ErrorCard.js +50 -0
  144. package/lib/webview-ui/components/ErrorCard.js.map +1 -0
  145. package/{types → lib}/webview-ui/components/KnowledgeBaseSearchBlock.d.ts +1 -0
  146. package/lib/webview-ui/components/KnowledgeBaseSearchBlock.d.ts.map +1 -0
  147. package/lib/webview-ui/components/KnowledgeBaseSearchBlock.js +7 -24
  148. package/lib/webview-ui/components/KnowledgeBaseSearchBlock.js.map +1 -0
  149. package/{types → lib}/webview-ui/components/KnowledgeBaseSearchResult.d.ts +1 -0
  150. package/lib/webview-ui/components/KnowledgeBaseSearchResult.d.ts.map +1 -0
  151. package/lib/webview-ui/components/KnowledgeBaseSearchResult.js +3 -9
  152. package/lib/webview-ui/components/KnowledgeBaseSearchResult.js.map +1 -0
  153. package/{types → lib}/webview-ui/components/MarkdownRenderer.d.ts +1 -0
  154. package/lib/webview-ui/components/MarkdownRenderer.d.ts.map +1 -0
  155. package/lib/webview-ui/components/MarkdownRenderer.js +6 -5
  156. package/lib/webview-ui/components/MarkdownRenderer.js.map +1 -0
  157. package/{types → lib}/webview-ui/components/MessageRenderer.d.ts +1 -0
  158. package/lib/webview-ui/components/MessageRenderer.d.ts.map +1 -0
  159. package/lib/webview-ui/components/MessageRenderer.js +22 -25
  160. package/lib/webview-ui/components/MessageRenderer.js.map +1 -0
  161. package/lib/webview-ui/components/MultimodalFileRenderer.d.ts +20 -0
  162. package/lib/webview-ui/components/MultimodalFileRenderer.d.ts.map +1 -0
  163. package/lib/webview-ui/components/MultimodalFileRenderer.js +143 -0
  164. package/lib/webview-ui/components/MultimodalFileRenderer.js.map +1 -0
  165. package/{types → lib}/webview-ui/components/ThinkingBlock.d.ts +1 -0
  166. package/lib/webview-ui/components/ThinkingBlock.d.ts.map +1 -0
  167. package/lib/webview-ui/components/ThinkingBlock.js +11 -41
  168. package/lib/webview-ui/components/ThinkingBlock.js.map +1 -0
  169. package/{types → lib}/webview-ui/components/ToolUseBlock.d.ts +1 -0
  170. package/lib/webview-ui/components/ToolUseBlock.d.ts.map +1 -0
  171. package/lib/webview-ui/components/ToolUseBlock.js +5 -11
  172. package/lib/webview-ui/components/ToolUseBlock.js.map +1 -0
  173. package/{types → lib}/webview-ui/components/ToolUseBlockHeader.d.ts +1 -0
  174. package/lib/webview-ui/components/ToolUseBlockHeader.d.ts.map +1 -0
  175. package/lib/webview-ui/components/ToolUseBlockHeader.js +4 -21
  176. package/lib/webview-ui/components/ToolUseBlockHeader.js.map +1 -0
  177. package/lib/webview-ui/components/UploadPreview.d.ts +6 -0
  178. package/lib/webview-ui/components/UploadPreview.d.ts.map +1 -0
  179. package/lib/webview-ui/components/UploadPreview.js +12 -0
  180. package/lib/webview-ui/components/UploadPreview.js.map +1 -0
  181. package/lib/webview-ui/components/WelcomeModule.d.ts +10 -0
  182. package/lib/webview-ui/components/WelcomeModule.d.ts.map +1 -0
  183. package/lib/webview-ui/components/WelcomeModule.js +161 -0
  184. package/lib/webview-ui/components/WelcomeModule.js.map +1 -0
  185. package/{types → lib}/webview-ui/components/index.d.ts +7 -0
  186. package/lib/webview-ui/components/index.d.ts.map +1 -0
  187. package/lib/webview-ui/components/index.js +7 -0
  188. package/lib/webview-ui/components/index.js.map +1 -0
  189. package/lib/webview-ui/config/cos-config.d.ts +41 -0
  190. package/lib/webview-ui/config/cos-config.d.ts.map +1 -0
  191. package/lib/webview-ui/config/cos-config.js +83 -0
  192. package/lib/webview-ui/config/cos-config.js.map +1 -0
  193. package/lib/webview-ui/config/http-config.d.ts +8 -0
  194. package/lib/webview-ui/config/http-config.d.ts.map +1 -0
  195. package/lib/webview-ui/config/http-config.js +36 -0
  196. package/lib/webview-ui/config/http-config.js.map +1 -0
  197. package/{types → lib}/webview-ui/constants.d.ts +1 -0
  198. package/lib/webview-ui/constants.d.ts.map +1 -0
  199. package/lib/webview-ui/constants.js +1 -0
  200. package/lib/webview-ui/constants.js.map +1 -0
  201. package/lib/webview-ui/contexts/AgentContext.d.ts +13 -0
  202. package/lib/webview-ui/contexts/AgentContext.d.ts.map +1 -0
  203. package/lib/webview-ui/contexts/AgentContext.js +19 -0
  204. package/lib/webview-ui/contexts/AgentContext.js.map +1 -0
  205. package/lib/webview-ui/contexts/AuthContext.d.ts +17 -0
  206. package/lib/webview-ui/contexts/AuthContext.d.ts.map +1 -0
  207. package/lib/webview-ui/contexts/AuthContext.js +79 -0
  208. package/lib/webview-ui/contexts/AuthContext.js.map +1 -0
  209. package/{types → lib}/webview-ui/contexts/ThemeContext.d.ts +1 -0
  210. package/lib/webview-ui/contexts/ThemeContext.d.ts.map +1 -0
  211. package/lib/webview-ui/contexts/ThemeContext.js +6 -35
  212. package/lib/webview-ui/contexts/ThemeContext.js.map +1 -0
  213. package/{types → lib}/webview-ui/hooks/useAgentStatus.d.ts +5 -0
  214. package/lib/webview-ui/hooks/useAgentStatus.d.ts.map +1 -0
  215. package/lib/webview-ui/hooks/useAgentStatus.js +39 -19
  216. package/lib/webview-ui/hooks/useAgentStatus.js.map +1 -0
  217. package/lib/webview-ui/hooks/useUploader.d.ts +19 -0
  218. package/lib/webview-ui/hooks/useUploader.d.ts.map +1 -0
  219. package/lib/webview-ui/hooks/useUploader.js +132 -0
  220. package/lib/webview-ui/hooks/useUploader.js.map +1 -0
  221. package/lib/webview-ui/hooks/useUserAvatar.d.ts +28 -0
  222. package/lib/webview-ui/hooks/useUserAvatar.d.ts.map +1 -0
  223. package/lib/webview-ui/hooks/useUserAvatar.js +74 -0
  224. package/lib/webview-ui/hooks/useUserAvatar.js.map +1 -0
  225. package/{types → lib}/webview-ui/index.d.ts +1 -0
  226. package/lib/webview-ui/index.d.ts.map +1 -0
  227. package/lib/webview-ui/index.js +4 -3
  228. package/lib/webview-ui/index.js.map +1 -0
  229. package/lib/webview-ui/services/agent-service.d.ts +106 -0
  230. package/lib/webview-ui/services/agent-service.d.ts.map +1 -0
  231. package/lib/webview-ui/services/agent-service.js +52 -25
  232. package/lib/webview-ui/services/agent-service.js.map +1 -0
  233. package/lib/webview-ui/services/index.d.ts +3 -0
  234. package/lib/webview-ui/services/index.d.ts.map +1 -0
  235. package/lib/webview-ui/services/index.js +19 -0
  236. package/lib/webview-ui/services/index.js.map +1 -0
  237. package/{types → lib}/webview-ui/services/logger-service.d.ts +18 -1
  238. package/lib/webview-ui/services/logger-service.d.ts.map +1 -0
  239. package/lib/webview-ui/services/logger-service.js +45 -27
  240. package/lib/webview-ui/services/logger-service.js.map +1 -0
  241. package/{types → lib}/webview-ui/styles/copilot.d.ts +1 -0
  242. package/lib/webview-ui/styles/copilot.d.ts.map +1 -0
  243. package/lib/webview-ui/styles/copilot.js +1 -0
  244. package/lib/webview-ui/styles/copilot.js.map +1 -0
  245. package/{types → lib}/webview-ui/styles/workarea.d.ts +1 -0
  246. package/lib/webview-ui/styles/workarea.d.ts.map +1 -0
  247. package/lib/webview-ui/styles/workarea.js +1 -0
  248. package/lib/webview-ui/styles/workarea.js.map +1 -0
  249. package/{types → lib}/webview-ui/types.d.ts +15 -1
  250. package/lib/webview-ui/types.d.ts.map +1 -0
  251. package/lib/webview-ui/types.js +1 -0
  252. package/lib/webview-ui/types.js.map +1 -0
  253. package/lib/webview-ui/utils/cos.d.ts +65 -0
  254. package/lib/webview-ui/utils/cos.d.ts.map +1 -0
  255. package/lib/webview-ui/utils/cos.js +113 -0
  256. package/lib/webview-ui/utils/cos.js.map +1 -0
  257. package/lib/webview-ui/utils/http-client.d.ts +44 -0
  258. package/lib/webview-ui/utils/http-client.d.ts.map +1 -0
  259. package/lib/webview-ui/utils/http-client.js +101 -0
  260. package/lib/webview-ui/utils/http-client.js.map +1 -0
  261. package/lib/webview-ui/utils/stream-text-handler.d.ts +4 -0
  262. package/lib/webview-ui/utils/stream-text-handler.d.ts.map +1 -0
  263. package/lib/webview-ui/utils/stream-text-handler.js +42 -0
  264. package/lib/webview-ui/utils/stream-text-handler.js.map +1 -0
  265. package/lib/webview-ui/utils/upload.d.ts +8 -0
  266. package/lib/webview-ui/utils/upload.d.ts.map +1 -0
  267. package/lib/webview-ui/utils/upload.js +22 -0
  268. package/lib/webview-ui/utils/upload.js.map +1 -0
  269. package/{types → lib}/webview-ui/widgets/BubbleComponents.d.ts +1 -5
  270. package/lib/webview-ui/widgets/BubbleComponents.d.ts.map +1 -0
  271. package/lib/webview-ui/widgets/BubbleComponents.js +17 -69
  272. package/lib/webview-ui/widgets/BubbleComponents.js.map +1 -0
  273. package/lib/webview-ui/widgets/ChatInput.d.ts +24 -0
  274. package/lib/webview-ui/widgets/ChatInput.d.ts.map +1 -0
  275. package/lib/webview-ui/widgets/ChatInput.js +113 -0
  276. package/lib/webview-ui/widgets/ChatInput.js.map +1 -0
  277. package/{types → lib}/webview-ui/widgets/LogPanel.d.ts +1 -0
  278. package/lib/webview-ui/widgets/LogPanel.d.ts.map +1 -0
  279. package/lib/webview-ui/widgets/LogPanel.js +37 -44
  280. package/lib/webview-ui/widgets/LogPanel.js.map +1 -0
  281. package/{types → lib}/webview-ui/widgets/SystemLogs.d.ts +7 -0
  282. package/lib/webview-ui/widgets/SystemLogs.d.ts.map +1 -0
  283. package/lib/webview-ui/widgets/SystemLogs.js +243 -187
  284. package/lib/webview-ui/widgets/SystemLogs.js.map +1 -0
  285. package/{types → lib}/webview-ui/widgets/ToolBar.d.ts +5 -0
  286. package/lib/webview-ui/widgets/ToolBar.d.ts.map +1 -0
  287. package/lib/webview-ui/widgets/ToolBar.js +49 -68
  288. package/lib/webview-ui/widgets/ToolBar.js.map +1 -0
  289. package/{types → lib}/webview-ui/widgets/index.d.ts +4 -2
  290. package/lib/webview-ui/widgets/index.d.ts.map +1 -0
  291. package/lib/webview-ui/widgets/index.js +4 -2
  292. package/lib/webview-ui/widgets/index.js.map +1 -0
  293. package/package.json +13 -4
  294. package/public/assets/main.js +141 -118
  295. package/public/assets/style.css +1 -1
  296. package/lib/webview-ui/types/index.js +0 -2
  297. package/types/index.d.ts +0 -3
  298. package/types/simulator.d.ts +0 -15
  299. package/types/types.d.ts +0 -6
  300. package/types/utils.d.ts +0 -1
  301. package/types/webview-ui/App.d.ts +0 -3
  302. package/types/webview-ui/types/index.d.ts +0 -20
@@ -1,21 +1,9 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  exports.SystemLogs = exports.AgentType = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
16
5
  const antd_1 = require("antd");
17
- const react_1 = __importDefault(require("react"));
18
- const react_2 = require("react");
6
+ const react_1 = require("react");
19
7
  const logger_service_1 = require("../services/logger-service");
20
8
  var AgentType;
21
9
  (function (AgentType) {
@@ -26,19 +14,36 @@ var AgentType;
26
14
  AgentType["AI_SDK_CREATE_RECORD_PAIR"] = "AI_SDK_CREATE_RECORD_PAIR";
27
15
  AgentType["AI_SDK_GET_HISTORY_MESSAGES"] = "AI_SDK_GET_HISTORY_MESSAGES";
28
16
  AgentType["AI_SDK_GET_CONVERSATIONS"] = "AI_SDK_GET_CONVERSATIONS";
17
+ AgentType["Ai_SDK_POST_KNOWLEDGE_BASE"] = "Ai_SDK_POST_KNOWLEDGE_BASE";
18
+ AgentType["AI_SDK_QUERY_TASKS"] = "AI_SDK_QUERY_TASKS";
29
19
  AgentType["SERVER_REQUEST_START"] = "SERVER_REQUEST_START";
30
20
  AgentType["SERVER_REQUEST_END"] = "SERVER_REQUEST_END";
31
21
  })(AgentType || (exports.AgentType = AgentType = {}));
32
- const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType = logger_service_1.LogType.ACCESS, }) => {
22
+ /**
23
+ * 系统日志组件
24
+ * 显示系统运行状态和相关信息
25
+ */
26
+ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType = logger_service_1.LogType.ACCESS, // 默认 system
27
+ }) => {
33
28
  const { token } = antd_1.theme.useToken();
34
- const [logs, setLogs] = (0, react_2.useState)([]);
35
- const [expandedLogs, setExpandedLogs] = (0, react_2.useState)(new Set());
36
- const loggerService = (0, react_2.useMemo)(() => new logger_service_1.LoggerService({ baseUrl }), [baseUrl]);
29
+ const [logs, setLogs] = (0, react_1.useState)([]);
30
+ const [expandedLogs, setExpandedLogs] = (0, react_1.useState)(new Set());
31
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
32
+ const [hasMore, setHasMore] = (0, react_1.useState)(true);
33
+ const [isLoadingMore, setIsLoadingMore] = (0, react_1.useState)(false);
34
+ const [pageNum, setPageNum] = (0, react_1.useState)(1); // 使用页码
35
+ const [pageSize] = (0, react_1.useState)(50); // 每页50条
36
+ const lastLoadTimeRef = (0, react_1.useRef)(0); // 上次加载时间,用于节流
37
+ const loadThrottleMs = 1000; // 节流间隔1秒
38
+ const loggerService = (0, react_1.useMemo)(() => new logger_service_1.LoggerService({ baseUrl }), [baseUrl]);
39
+ // 关键词高亮
37
40
  const highlightKeywords = (text) => {
38
41
  const keywords = [
39
42
  "getHistoryMessages",
40
43
  "createRecordPair",
41
44
  "getConversations",
45
+ "queryTasks",
46
+ "knowledgeBaseRetrieve",
42
47
  "AI_SDK_REQUEST_START",
43
48
  "AI_SDK_REQUEST_SUCCESS",
44
49
  "AI_SDK_REQUEST_ERROR",
@@ -46,6 +51,8 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
46
51
  "AI_SDK_CREATE_RECORD_PAIR",
47
52
  "AI_SDK_GET_HISTORY_MESSAGES",
48
53
  "AI_SDK_GET_CONVERSATIONS",
54
+ "Ai_SDK_POST_KNOWLEDGE_BASE",
55
+ "AI_SDK_QUERY_TASKS",
49
56
  "SERVER_REQUEST_START",
50
57
  "SERVER_REQUEST_END",
51
58
  ];
@@ -53,143 +60,104 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
53
60
  const parts = text.split(regex);
54
61
  return parts.map((part, index) => {
55
62
  if (keywords.some((keyword) => keyword.toLowerCase() === part.toLowerCase())) {
56
- return (react_1.default.createElement("span", { key: index, style: {
63
+ return ((0, jsx_runtime_1.jsx)("span", { style: {
57
64
  fontWeight: "bold",
58
65
  color: "#ffa940",
59
66
  background: "rgba(255, 169, 64, 0.1)",
60
67
  padding: "0 2px",
61
68
  borderRadius: "2px",
62
- } }, part));
69
+ }, children: part }, index));
63
70
  }
64
- return react_1.default.createElement("span", { key: index }, part);
71
+ return (0, jsx_runtime_1.jsx)("span", { children: part }, index);
65
72
  });
66
73
  };
74
+ // 根据状态码获取样式
67
75
  const getStatusStyle = (status) => {
68
76
  if (status >= 500) {
69
- return { color: "#ff4d4f", fontWeight: "bold" };
77
+ return { color: "#ff4d4f", fontWeight: "bold" }; // 红色
70
78
  }
71
79
  else if (status >= 400) {
72
- return { color: "#faad14", fontWeight: "bold" };
80
+ return { color: "#faad14", fontWeight: "bold" }; // 黄色
73
81
  }
74
82
  else if (status >= 300) {
75
- return { color: "#1890ff" };
83
+ return { color: "#1890ff" }; // 蓝色
76
84
  }
77
85
  else if (status >= 200) {
78
- return { color: "#52c41a", fontWeight: "bold" };
86
+ return { color: "#52c41a", fontWeight: "bold" }; // 绿色
79
87
  }
80
88
  return {};
81
89
  };
90
+ // 格式化日志条目基本信息
82
91
  const formatLogEntry = (entry) => {
83
- var _a;
84
- const timestamp = new Date(entry["@timestamp"]).toLocaleTimeString();
92
+ const date = new Date(entry["@timestamp"]);
93
+ const dateStr = date.toLocaleDateString("zh-CN"); // 添加日期
94
+ const timeStr = date.toLocaleTimeString("zh-CN"); // 时间
85
95
  const level = entry.level.toUpperCase();
86
96
  try {
87
97
  const detail = JSON.parse(entry.message);
88
- let logMessage = `[${timestamp}] [${level}] ${(detail === null || detail === void 0 ? void 0 : detail.url) || (detail === null || detail === void 0 ? void 0 : detail.eventId) || "unknown"}`;
98
+ let logMessage = `[${dateStr} ${timeStr}] [${level}] ${detail?.url || detail?.eventId || "unknown"}`;
89
99
  if (entry.source === "remote") {
90
100
  if (detail.type === "FRAMEWORK_EVENT") {
91
101
  const scene = detail.scene || "unknown";
92
- const statusSpan = detail.status ? (react_1.default.createElement("span", { style: getStatusStyle(detail.status) },
93
- " (",
94
- detail.status,
95
- ")")) : null;
96
- logMessage = (react_1.default.createElement(react_2.Fragment, null,
97
- `[${timestamp}] [${(_a = detail.eventId) === null || _a === void 0 ? void 0 : _a.slice(-8)}] [${level}] ${scene}`,
98
- statusSpan));
102
+ const statusSpan = detail.status ? ((0, jsx_runtime_1.jsxs)("span", { style: getStatusStyle(detail.status), children: [" (", detail.status, ")"] })) : null;
103
+ logMessage = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [`[${dateStr} ${timeStr}] [${detail.eventId?.slice(-8)}] [${level}] ${scene}`, statusSpan] }));
99
104
  }
100
105
  else if (detail.type === "HTTP_ACCESS") {
101
106
  const scene = detail.scene || "unknown";
102
107
  const method = detail.method || "unknown";
103
108
  const url = detail.url || "unknown";
104
- const statusSpan = detail.status ? (react_1.default.createElement("span", { style: getStatusStyle(detail.status) },
105
- " (",
106
- detail.status,
107
- ")")) : null;
109
+ const statusSpan = detail.status ? ((0, jsx_runtime_1.jsxs)("span", { style: getStatusStyle(detail.status), children: [" (", detail.status, ")"] })) : null;
108
110
  const durationText = detail.duration ? ` - ${detail.duration}` : "";
109
- logMessage = (react_1.default.createElement(react_2.Fragment, null,
110
- `[${timestamp}] ${detail.eventId ? `[${detail.eventId.slice(-8)}]` : ""} [${level}] ${scene} ${method} ${url}`,
111
- statusSpan,
112
- durationText));
111
+ logMessage = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [`[${dateStr} ${timeStr}] ${detail.eventId ? `[${detail.eventId.slice(-8)}]` : ""} [${level}] ${scene} ${method} ${url}`, statusSpan, durationText] }));
113
112
  }
114
113
  }
115
114
  else {
116
- logMessage = `[${timestamp}] ${detail.eventId ? `[${detail.eventId.slice(-8)}]` : ""} [${level}] ${(detail === null || detail === void 0 ? void 0 : detail.msg) || "unknown"}`;
115
+ logMessage = `[${dateStr} ${timeStr}] ${detail.eventId ? `[${detail.eventId.slice(-8)}]` : ""} [${level}] ${detail?.msg || "unknown"}`;
117
116
  }
118
117
  return typeof logMessage === "string" ? highlightKeywords(logMessage) : logMessage;
119
118
  }
120
- catch (_b) {
121
- return `[${timestamp}] [${level}] ${entry.message}`;
119
+ catch {
120
+ return `[${dateStr} ${timeStr}] [${level}] ${entry.message}`;
122
121
  }
123
122
  };
123
+ // 格式化详细信息
124
124
  const formatDetailedInfo = (entry) => {
125
125
  try {
126
126
  const detail = JSON.parse(entry.message);
127
127
  const details = [];
128
128
  if (detail.type === "FRAMEWORK_EVENT" || detail.type === "HTTP_ACCESS") {
129
129
  if (detail.scene)
130
- details.push(react_1.default.createElement("div", { key: "scene" },
131
- react_1.default.createElement("strong", null, "Scene:"),
132
- " ",
133
- detail.scene));
130
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Scene:" }), " ", detail.scene] }, "scene"));
134
131
  if (detail.method)
135
- details.push(react_1.default.createElement("div", { key: "method" },
136
- react_1.default.createElement("strong", null, "Method:"),
137
- " ",
138
- detail.method));
132
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Method:" }), " ", detail.method] }, "method"));
139
133
  if (detail.url)
140
- details.push(react_1.default.createElement("div", { key: "url" },
141
- react_1.default.createElement("strong", null, "URL:"),
142
- " ",
143
- detail.url));
134
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "URL:" }), " ", detail.url] }, "url"));
144
135
  if (detail.modelName)
145
- details.push(react_1.default.createElement("div", { key: "model" },
146
- react_1.default.createElement("strong", null, "Model:"),
147
- " ",
148
- detail.modelName));
136
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Model:" }), " ", detail.modelName] }, "model"));
149
137
  if (detail.status)
150
- details.push(react_1.default.createElement("div", { key: "status" },
151
- react_1.default.createElement("strong", null, "Status:"),
152
- " ",
153
- react_1.default.createElement("span", { style: getStatusStyle(detail.status) }, detail.status)));
138
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Status:" }), " ", (0, jsx_runtime_1.jsx)("span", { style: getStatusStyle(detail.status), children: detail.status })] }, "status"));
154
139
  if (detail.duration)
155
- details.push(react_1.default.createElement("div", { key: "duration" },
156
- react_1.default.createElement("strong", null, "Duration:"),
157
- " ",
158
- detail.duration));
140
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Duration:" }), " ", detail.duration] }, "duration"));
159
141
  if (detail.ip)
160
- details.push(react_1.default.createElement("div", { key: "ip" },
161
- react_1.default.createElement("strong", null, "IP:"),
162
- " ",
163
- detail.ip));
142
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "IP:" }), " ", detail.ip] }, "ip"));
164
143
  }
165
144
  if (detail.error)
166
- details.push(react_1.default.createElement("div", { key: "error" },
167
- react_1.default.createElement("strong", null, "Error:"),
168
- " ",
169
- react_1.default.createElement("span", { style: { color: "#ff4d4f" } }, detail.error)));
145
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Error:" }), " ", (0, jsx_runtime_1.jsx)("span", { style: { color: "#ff4d4f" }, children: detail.error })] }, "error"));
170
146
  if (detail.stack)
171
- details.push(react_1.default.createElement("div", { key: "stack" },
172
- react_1.default.createElement("strong", null, "Stack Trace:"),
173
- react_1.default.createElement("pre", { style: { margin: 0, whiteSpace: "pre-wrap" } }, detail.stack)));
147
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Stack Trace:" }), (0, jsx_runtime_1.jsx)("pre", { style: { margin: 0, whiteSpace: "pre-wrap" }, children: detail.stack })] }, "stack"));
174
148
  if (detail.headers)
175
- details.push(react_1.default.createElement("div", { key: "headers" },
176
- react_1.default.createElement("strong", null, "Headers:"),
177
- react_1.default.createElement("pre", { style: { margin: 0 } }, JSON.stringify(detail.headers, null, 2))));
149
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Headers:" }), (0, jsx_runtime_1.jsx)("pre", { style: { margin: 0 }, children: JSON.stringify(detail.headers, null, 2) })] }, "headers"));
178
150
  if (detail.data)
179
- details.push(react_1.default.createElement("div", { key: "data" },
180
- react_1.default.createElement("strong", null, "Data:"),
181
- react_1.default.createElement("pre", { style: { margin: 0 } }, JSON.stringify(detail.data, null, 2))));
151
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Data:" }), (0, jsx_runtime_1.jsx)("pre", { style: { margin: 0 }, children: JSON.stringify(detail.data, null, 2) })] }, "data"));
182
152
  if (detail.eventId)
183
- details.push(react_1.default.createElement("div", { key: "eventId" },
184
- react_1.default.createElement("strong", null, "Event ID:"),
185
- " ",
186
- detail.eventId));
153
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Event ID:" }), " ", detail.eventId] }, "eventId"));
187
154
  return details;
188
155
  }
189
- catch (_a) {
156
+ catch {
190
157
  return [entry.message];
191
158
  }
192
159
  };
160
+ // 判断是否有详细信息可展示
193
161
  const hasDetailedInfo = (entry) => {
194
162
  const detail = JSON.parse(entry.message);
195
163
  return !!((detail.headers && Object.keys(detail.headers).length > 0) ||
@@ -198,6 +166,7 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
198
166
  detail.stack ||
199
167
  (detail.eventId && detail.eventId !== "unknown"));
200
168
  };
169
+ // 切换展开状态
201
170
  const toggleExpanded = (index) => {
202
171
  const newExpanded = new Set(expandedLogs);
203
172
  if (newExpanded.has(index)) {
@@ -208,6 +177,7 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
208
177
  }
209
178
  setExpandedLogs(newExpanded);
210
179
  };
180
+ // 获取日志样式
211
181
  const getLogStyle = (entry) => {
212
182
  const baseStyle = {
213
183
  margin: "2px 0",
@@ -215,38 +185,89 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
215
185
  };
216
186
  switch (entry.level) {
217
187
  case "error":
218
- return Object.assign(Object.assign({}, baseStyle), { color: "#ff4d4f", fontWeight: "bold" });
188
+ return {
189
+ ...baseStyle,
190
+ color: "#ff4d4f",
191
+ fontWeight: "bold",
192
+ };
219
193
  case "warn":
220
- return Object.assign(Object.assign({}, baseStyle), { color: "#faad14", fontWeight: "bold" });
194
+ return {
195
+ ...baseStyle,
196
+ color: "#faad14",
197
+ fontWeight: "bold",
198
+ };
221
199
  case "info":
222
- return Object.assign(Object.assign({}, baseStyle), { color: "#1890ff" });
200
+ return {
201
+ ...baseStyle,
202
+ color: "#1890ff",
203
+ };
223
204
  case "debug":
224
- return Object.assign(Object.assign({}, baseStyle), { color: "#8c8c8c" });
205
+ return {
206
+ ...baseStyle,
207
+ color: "#8c8c8c",
208
+ };
225
209
  default:
226
- return Object.assign(Object.assign({}, baseStyle), { color: "#8c8c8c" });
210
+ return {
211
+ ...baseStyle,
212
+ color: "#8c8c8c",
213
+ };
227
214
  }
228
215
  };
229
- const fetchLogs = () => __awaiter(void 0, void 0, void 0, function* () {
216
+ // 获取日志的函数
217
+ const fetchLogs = (0, react_1.useCallback)(async (isLoadMore = false) => {
230
218
  if (debugStatus !== "normal") {
231
219
  return;
232
220
  }
221
+ // 防止并发请求
222
+ if (isLoadMore) {
223
+ if (isLoadingMore || isLoading)
224
+ return;
225
+ setIsLoadingMore(true);
226
+ }
227
+ else {
228
+ if (isLoading)
229
+ return;
230
+ setIsLoading(true);
231
+ }
233
232
  try {
234
- const response = yield loggerService.getLogs(logType);
235
- if (response.success && response.data.length > 0) {
236
- setLogs((prevLogs) => {
237
- const localLogs = prevLogs.filter((log) => log.source === "local");
238
- const prevRemoteLogs = prevLogs.filter((log) => log.source === "remote");
239
- const newRemoteLogs = response.data.map((log) => (Object.assign(Object.assign({}, log), { source: "remote" })));
240
- const allRemoteLogs = [...prevRemoteLogs, ...newRemoteLogs];
241
- const uniqueRemoteLogs = allRemoteLogs.reduce((acc, current) => {
242
- const existingLog = acc.find((log) => log.id === current.id);
243
- if (!existingLog) {
244
- acc.push(current);
245
- }
246
- return acc;
247
- }, []);
248
- return [...localLogs, ...uniqueRemoteLogs];
249
- });
233
+ const currentPage = isLoadMore ? pageNum + 1 : 1;
234
+ const response = await loggerService.getLogsPaginated({
235
+ type: logType,
236
+ pageSize: pageSize,
237
+ pageNum: currentPage,
238
+ });
239
+ if (response.success) {
240
+ // @ts-ignore
241
+ const newRemoteLogs = response.data.map((log) => ({ ...log, source: "remote" }));
242
+ if (isLoadMore) {
243
+ // 加载更多:追加日志
244
+ setLogs((prevLogs) => [...prevLogs, ...newRemoteLogs]);
245
+ setPageNum(currentPage);
246
+ }
247
+ else {
248
+ // 初始加载或轮询刷新:合并日志
249
+ setLogs((prevLogs) => {
250
+ const localLogs = prevLogs.filter((l) => l.source === "local");
251
+ const existingRemoteLogs = prevLogs.filter((l) => l.source === "remote");
252
+ // 合并新旧日志并去重
253
+ const allRemoteLogs = [...newRemoteLogs, ...existingRemoteLogs];
254
+ const uniqueRemoteLogs = allRemoteLogs.reduce((acc, current) => {
255
+ if (!acc.find((item) => item.id === current.id)) {
256
+ acc.push(current);
257
+ }
258
+ return acc;
259
+ }, []);
260
+ // 重新按时间排序
261
+ uniqueRemoteLogs.sort((a, b) => new Date(b["@timestamp"]).getTime() - new Date(a["@timestamp"]).getTime());
262
+ return [...localLogs, ...uniqueRemoteLogs];
263
+ });
264
+ }
265
+ if (response.pagination) {
266
+ setHasMore(response.pagination.hasMore);
267
+ }
268
+ else {
269
+ setHasMore(false);
270
+ }
250
271
  }
251
272
  }
252
273
  catch (error) {
@@ -260,8 +281,22 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
260
281
  };
261
282
  setLogs((prevLogs) => [...prevLogs, errorLog]);
262
283
  }
263
- });
264
- (0, react_2.useEffect)(() => {
284
+ finally {
285
+ if (isLoadMore) {
286
+ setIsLoadingMore(false);
287
+ }
288
+ else {
289
+ setIsLoading(false);
290
+ }
291
+ }
292
+ }, [debugStatus, logType, pageSize, pageNum, loggerService, isLoading, isLoadingMore]);
293
+ (0, react_1.useEffect)(() => {
294
+ // 重置状态
295
+ setHasMore(true);
296
+ setIsLoading(false);
297
+ setIsLoadingMore(false);
298
+ setPageNum(1);
299
+ // 初始系统信息
265
300
  const initialLogs = [
266
301
  logType === logger_service_1.LogType.USERCODE
267
302
  ? {
@@ -294,18 +329,22 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
294
329
  },
295
330
  ];
296
331
  setLogs(initialLogs);
332
+ // 立即获取一次日志
297
333
  fetchLogs();
298
- const intervalId = setInterval(fetchLogs, 5000);
334
+ // 5 秒刷新一次最新日志(不使用游标,获取最新的)
335
+ const intervalId = setInterval(() => fetchLogs(false), 5000);
299
336
  return () => {
300
337
  clearInterval(intervalId);
301
338
  };
302
- }, [baseUrl, agentName, loggerService, debugStatus]);
303
- (0, react_2.useEffect)(() => {
339
+ }, [baseUrl, agentName, loggerService, debugStatus, logType]);
340
+ // 监听面板打开状态,打开时立即获取日志
341
+ (0, react_1.useEffect)(() => {
304
342
  if (isOpen) {
305
343
  fetchLogs();
306
344
  }
307
345
  }, [isOpen]);
308
- (0, react_2.useEffect)(() => {
346
+ // 当调试状态变化时,添加状态日志
347
+ (0, react_1.useEffect)(() => {
309
348
  const statusLog = {
310
349
  "@timestamp": new Date().toISOString(),
311
350
  level: debugStatus === "normal" ? "system" : "warn",
@@ -315,38 +354,21 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
315
354
  };
316
355
  setLogs((prevLogs) => [...prevLogs, statusLog]);
317
356
  }, [debugStatus]);
357
+ // 格式化 user log 详细信息
318
358
  const formatUserLogDetailedInfo = (entry) => {
319
359
  try {
320
360
  const detail = JSON.parse(entry.message);
321
361
  const details = [];
322
362
  if (detail.eventId)
323
- details.push(react_1.default.createElement("div", { key: "eventId" },
324
- react_1.default.createElement("strong", null, "Event ID:"),
325
- " ",
326
- detail.eventId));
363
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Event ID:" }), " ", detail.eventId] }, "eventId"));
327
364
  if (detail.requestId)
328
- details.push(react_1.default.createElement("div", { key: "requestId" },
329
- react_1.default.createElement("strong", null, "Request ID:"),
330
- " ",
331
- detail.requestId));
365
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Request ID:" }), " ", detail.requestId] }, "requestId"));
332
366
  if (detail.scene)
333
- details.push(react_1.default.createElement("div", { key: "scene" },
334
- react_1.default.createElement("strong", null, "Scene:"),
335
- " ",
336
- detail.scene));
367
+ details.push((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Scene:" }), " ", detail.scene] }, "scene"));
337
368
  if (Array.isArray(detail.logs)) {
338
- details.push(react_1.default.createElement("div", { key: "logs-title" },
339
- react_1.default.createElement("strong", null, "Logs:")));
369
+ details.push((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("strong", { children: "Logs:" }) }, "logs-title"));
340
370
  detail.logs.forEach((log, idx) => {
341
- var _a;
342
- details.push(react_1.default.createElement("div", { key: `log-${idx}`, style: { marginLeft: "10px" } },
343
- react_1.default.createElement("div", null, `[${((_a = log.level) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || "LOG"}] ${log["@timestamp"] || ""}`),
344
- log.caller && react_1.default.createElement("div", null,
345
- "\u00A0\u00A0Caller: ",
346
- log.caller),
347
- log.content && react_1.default.createElement("div", null,
348
- "\u00A0\u00A0Content: ",
349
- log.content)));
371
+ details.push((0, jsx_runtime_1.jsxs)("div", { style: { marginLeft: "10px" }, children: [(0, jsx_runtime_1.jsx)("div", { children: `[${log.level?.toUpperCase() || "LOG"}] ${log["@timestamp"] || ""}` }), log.caller && (0, jsx_runtime_1.jsxs)("div", { children: ["\u00A0\u00A0Caller: ", log.caller] }), log.content && (0, jsx_runtime_1.jsxs)("div", { children: ["\u00A0\u00A0Content: ", log.content] })] }, `log-${idx}`));
350
372
  });
351
373
  }
352
374
  return details;
@@ -355,50 +377,84 @@ const SystemLogs = ({ baseUrl, agentName, debugStatus, isOpen = false, logType =
355
377
  return [entry.message];
356
378
  }
357
379
  };
358
- return (react_1.default.createElement("div", { className: "system-logs", style: { height: "100%", backgroundColor: token.colorBgElevated } },
359
- react_1.default.createElement("div", { className: "logs-content", style: { height: "100%", margin: 0 } },
360
- debugStatus !== "normal" && (react_1.default.createElement("div", { style: {
361
- background: "rgba(250, 173, 20, 0.1)",
362
- color: "#faad14",
363
- padding: "8px 16px",
364
- borderBottom: "1px solid #333",
365
- fontSize: "13px",
366
- } }, "\u26A0\uFE0F \u8C03\u8BD5\u72B6\u6001\u5F02\u5E38\uFF0C\u65E5\u5FD7\u83B7\u53D6\u5DF2\u6682\u505C")),
367
- react_1.default.createElement("div", { style: {
368
- color: "#d4d4d4",
369
- fontSize: 15,
370
- margin: 0,
371
- padding: 16,
372
- height: debugStatus !== "normal" ? "calc(100% - 40px)" : "100%",
373
- boxSizing: "border-box",
374
- fontFamily: "Menlo, Monaco, Consolas, monospace",
375
- overflow: "auto",
376
- } }, logs.map((entry, index) => {
377
- const isExpanded = expandedLogs.has(index);
378
- const hasDetails = hasDetailedInfo(entry);
379
- return (react_1.default.createElement("div", { key: index, style: { marginBottom: "4px" } },
380
- react_1.default.createElement("div", { style: Object.assign(Object.assign({}, getLogStyle(entry)), { display: "flex", alignItems: "center", cursor: hasDetails ? "pointer" : "default" }), onClick: () => hasDetails && toggleExpanded(index) },
381
- hasDetails && (react_1.default.createElement("span", { style: {
382
- marginRight: "6px",
380
+ // 带节流的加载更多函数
381
+ const loadMoreWithThrottle = (0, react_1.useCallback)(() => {
382
+ const now = Date.now();
383
+ if (now - lastLoadTimeRef.current < loadThrottleMs) {
384
+ return; // 节流:距离上次请求不足1秒,忽略
385
+ }
386
+ if (hasMore && !isLoadingMore && !isLoading) {
387
+ lastLoadTimeRef.current = now;
388
+ fetchLogs(true);
389
+ }
390
+ }, [hasMore, isLoadingMore, isLoading, loadThrottleMs, fetchLogs]);
391
+ // 滚动检测处理函数
392
+ const handleScroll = (0, react_1.useCallback)((e) => {
393
+ const { scrollTop, scrollHeight, clientHeight } = e.currentTarget;
394
+ // 检查是否滚动到底部(留一些余量)
395
+ if (scrollHeight - scrollTop <= clientHeight + 50) {
396
+ loadMoreWithThrottle();
397
+ }
398
+ }, [loadMoreWithThrottle]);
399
+ return ((0, jsx_runtime_1.jsx)("div", { className: "system-logs", style: { height: "100%", backgroundColor: token.colorBgElevated }, children: (0, jsx_runtime_1.jsxs)("div", { className: "logs-content", style: { height: "100%", margin: 0 }, children: [debugStatus !== "normal" && ((0, jsx_runtime_1.jsx)("div", { style: {
400
+ background: "rgba(250, 173, 20, 0.1)",
401
+ color: "#faad14",
402
+ padding: "8px 16px",
403
+ borderBottom: "1px solid #333",
404
+ fontSize: "13px",
405
+ }, children: "\u26A0\uFE0F \u8C03\u8BD5\u72B6\u6001\u5F02\u5E38\uFF0C\u65E5\u5FD7\u83B7\u53D6\u5DF2\u6682\u505C" })), (0, jsx_runtime_1.jsxs)("div", { style: {
406
+ color: "#d4d4d4",
407
+ fontSize: 15,
408
+ margin: 0,
409
+ padding: 16,
410
+ height: debugStatus !== "normal" ? "calc(100% - 40px)" : "100%",
411
+ boxSizing: "border-box",
412
+ fontFamily: "Menlo, Monaco, Consolas, monospace",
413
+ overflow: "auto",
414
+ }, onScroll: handleScroll, children: [logs.map((entry, index) => {
415
+ const isExpanded = expandedLogs.has(index);
416
+ const hasDetails = hasDetailedInfo(entry);
417
+ return ((0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: "4px" }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
418
+ ...getLogStyle(entry),
419
+ display: "flex",
420
+ alignItems: "center",
421
+ cursor: hasDetails ? "pointer" : "default",
422
+ }, onClick: () => hasDetails && toggleExpanded(index), children: [(0, jsx_runtime_1.jsx)("span", { style: {
423
+ color: "#8c8c8c",
424
+ marginRight: "10px",
425
+ userSelect: "none",
426
+ }, children: String(index + 1).padStart(String(logs.length).length, "0") }), hasDetails && ((0, jsx_runtime_1.jsx)("span", { style: {
427
+ marginRight: "6px",
428
+ color: "#8c8c8c",
429
+ fontSize: "12px",
430
+ transform: isExpanded ? "rotate(90deg)" : "rotate(0deg)",
431
+ transition: "transform 0.2s ease",
432
+ userSelect: "none",
433
+ }, children: "\u25B6" })), (0, jsx_runtime_1.jsx)("div", { style: { flex: 1 }, children: formatLogEntry(entry) })] }), hasDetails && isExpanded && ((0, jsx_runtime_1.jsx)("div", { style: {
434
+ marginLeft: hasDetails ? "18px" : "0",
435
+ marginTop: "4px",
436
+ padding: "8px 12px",
437
+ background: "rgba(255, 255, 255, 0.05)",
438
+ borderLeft: "3px solid #1890ff",
439
+ borderRadius: "0 4px 4px 0",
440
+ fontSize: "13px",
441
+ color: "#a3a3a3",
442
+ whiteSpace: "pre-wrap",
443
+ wordBreak: "break-all",
444
+ }, children: logType === logger_service_1.LogType.USERCODE ? formatUserLogDetailedInfo(entry) : formatDetailedInfo(entry) }))] }, index));
445
+ }), isLoadingMore && ((0, jsx_runtime_1.jsx)("div", { style: {
446
+ textAlign: "center",
447
+ padding: "16px",
448
+ color: "#8c8c8c",
449
+ fontSize: "13px",
450
+ }, children: "\u6B63\u5728\u52A0\u8F7D\u66F4\u591A\u65E5\u5FD7..." })), !hasMore && logs.filter((log) => log.source === "remote").length > 0 && ((0, jsx_runtime_1.jsxs)("div", { style: {
451
+ textAlign: "center",
452
+ padding: "16px",
383
453
  color: "#8c8c8c",
384
- fontSize: "12px",
385
- transform: isExpanded ? "rotate(90deg)" : "rotate(0deg)",
386
- transition: "transform 0.2s ease",
387
- userSelect: "none",
388
- } }, "\u25B6")),
389
- react_1.default.createElement("div", { style: { flex: 1 } }, formatLogEntry(entry))),
390
- hasDetails && isExpanded && (react_1.default.createElement("div", { style: {
391
- marginLeft: hasDetails ? "18px" : "0",
392
- marginTop: "4px",
393
- padding: "8px 12px",
394
- background: "rgba(255, 255, 255, 0.05)",
395
- borderLeft: "3px solid #1890ff",
396
- borderRadius: "0 4px 4px 0",
397
- fontSize: "13px",
398
- color: "#a3a3a3",
399
- whiteSpace: "pre-wrap",
400
- wordBreak: "break-all",
401
- } }, logType === logger_service_1.LogType.USERCODE ? formatUserLogDetailedInfo(entry) : formatDetailedInfo(entry)))));
402
- })))));
454
+ fontSize: "13px",
455
+ borderTop: "1px dashed #333",
456
+ marginTop: "8px",
457
+ }, children: ["\u5DF2\u52A0\u8F7D\u5168\u90E8\u65E5\u5FD7 (", logs.filter((log) => log.source === "remote").length, " \u6761)"] }))] })] }) }));
403
458
  };
404
459
  exports.SystemLogs = SystemLogs;
460
+ //# sourceMappingURL=SystemLogs.js.map