@cicctencent/agent-server 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +235 -0
  2. package/dist/cjs/agent/agent-server.d.ts +6 -0
  3. package/dist/cjs/agent/agent-server.d.ts.map +1 -0
  4. package/dist/cjs/agent/agent-server.js +412 -0
  5. package/dist/cjs/agent/agent-server.js.map +1 -0
  6. package/dist/cjs/connectors/index.d.ts +13 -0
  7. package/dist/cjs/connectors/index.d.ts.map +1 -0
  8. package/dist/cjs/connectors/index.js +37 -0
  9. package/dist/cjs/connectors/index.js.map +1 -0
  10. package/dist/cjs/index.d.ts +56 -0
  11. package/dist/cjs/index.d.ts.map +1 -0
  12. package/dist/cjs/index.js +169 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/kb/doc-parser.d.ts +24 -0
  15. package/dist/cjs/kb/doc-parser.d.ts.map +1 -0
  16. package/dist/cjs/kb/doc-parser.js +137 -0
  17. package/dist/cjs/kb/doc-parser.js.map +1 -0
  18. package/dist/cjs/kb/embedding-vector-index.d.ts +30 -0
  19. package/dist/cjs/kb/embedding-vector-index.d.ts.map +1 -0
  20. package/dist/cjs/kb/embedding-vector-index.js +75 -0
  21. package/dist/cjs/kb/embedding-vector-index.js.map +1 -0
  22. package/dist/cjs/kb/file-knowledge-base.d.ts +25 -0
  23. package/dist/cjs/kb/file-knowledge-base.d.ts.map +1 -0
  24. package/dist/cjs/kb/file-knowledge-base.js +200 -0
  25. package/dist/cjs/kb/file-knowledge-base.js.map +1 -0
  26. package/dist/cjs/mcp/api-bridge-client.d.ts +36 -0
  27. package/dist/cjs/mcp/api-bridge-client.d.ts.map +1 -0
  28. package/dist/cjs/mcp/api-bridge-client.js +143 -0
  29. package/dist/cjs/mcp/api-bridge-client.js.map +1 -0
  30. package/dist/cjs/mcp/api-bridge-types.d.ts +91 -0
  31. package/dist/cjs/mcp/api-bridge-types.d.ts.map +1 -0
  32. package/dist/cjs/mcp/api-bridge-types.js +8 -0
  33. package/dist/cjs/mcp/api-bridge-types.js.map +1 -0
  34. package/dist/cjs/mcp/body-template.d.ts +16 -0
  35. package/dist/cjs/mcp/body-template.d.ts.map +1 -0
  36. package/dist/cjs/mcp/body-template.js +62 -0
  37. package/dist/cjs/mcp/body-template.js.map +1 -0
  38. package/dist/cjs/mcp/openapi-importer.d.ts +24 -0
  39. package/dist/cjs/mcp/openapi-importer.d.ts.map +1 -0
  40. package/dist/cjs/mcp/openapi-importer.js +183 -0
  41. package/dist/cjs/mcp/openapi-importer.js.map +1 -0
  42. package/dist/cjs/mcp/template-builder.d.ts +53 -0
  43. package/dist/cjs/mcp/template-builder.d.ts.map +1 -0
  44. package/dist/cjs/mcp/template-builder.js +177 -0
  45. package/dist/cjs/mcp/template-builder.js.map +1 -0
  46. package/dist/cjs/model/automation.d.ts +34 -0
  47. package/dist/cjs/model/automation.d.ts.map +1 -0
  48. package/dist/cjs/model/automation.js +6 -0
  49. package/dist/cjs/model/automation.js.map +1 -0
  50. package/dist/cjs/package.json +3 -0
  51. package/dist/cjs/prompt/prompt-builder.d.ts +14 -0
  52. package/dist/cjs/prompt/prompt-builder.d.ts.map +1 -0
  53. package/dist/cjs/prompt/prompt-builder.js +113 -0
  54. package/dist/cjs/prompt/prompt-builder.js.map +1 -0
  55. package/dist/cjs/sandbox/local-sandbox.d.ts +70 -0
  56. package/dist/cjs/sandbox/local-sandbox.d.ts.map +1 -0
  57. package/dist/cjs/sandbox/local-sandbox.js +442 -0
  58. package/dist/cjs/sandbox/local-sandbox.js.map +1 -0
  59. package/dist/cjs/sandbox/process-code-sandbox.d.ts +25 -0
  60. package/dist/cjs/sandbox/process-code-sandbox.d.ts.map +1 -0
  61. package/dist/cjs/sandbox/process-code-sandbox.js +113 -0
  62. package/dist/cjs/sandbox/process-code-sandbox.js.map +1 -0
  63. package/dist/cjs/sandbox/sandbox-manager.d.ts +47 -0
  64. package/dist/cjs/sandbox/sandbox-manager.d.ts.map +1 -0
  65. package/dist/cjs/sandbox/sandbox-manager.js +126 -0
  66. package/dist/cjs/sandbox/sandbox-manager.js.map +1 -0
  67. package/dist/cjs/service/agent-profile.service.d.ts +27 -0
  68. package/dist/cjs/service/agent-profile.service.d.ts.map +1 -0
  69. package/dist/cjs/service/agent-profile.service.js +143 -0
  70. package/dist/cjs/service/agent-profile.service.js.map +1 -0
  71. package/dist/cjs/service/artifact.service.d.ts +33 -0
  72. package/dist/cjs/service/artifact.service.d.ts.map +1 -0
  73. package/dist/cjs/service/artifact.service.js +214 -0
  74. package/dist/cjs/service/artifact.service.js.map +1 -0
  75. package/dist/cjs/service/audit.service.d.ts +30 -0
  76. package/dist/cjs/service/audit.service.d.ts.map +1 -0
  77. package/dist/cjs/service/audit.service.js +169 -0
  78. package/dist/cjs/service/audit.service.js.map +1 -0
  79. package/dist/cjs/service/chat.service.d.ts +90 -0
  80. package/dist/cjs/service/chat.service.d.ts.map +1 -0
  81. package/dist/cjs/service/chat.service.js +433 -0
  82. package/dist/cjs/service/chat.service.js.map +1 -0
  83. package/dist/cjs/service/engine-pool.d.ts +6 -0
  84. package/dist/cjs/service/engine-pool.d.ts.map +1 -0
  85. package/dist/cjs/service/engine-pool.js +24 -0
  86. package/dist/cjs/service/engine-pool.js.map +1 -0
  87. package/dist/cjs/service/memory.service.d.ts +45 -0
  88. package/dist/cjs/service/memory.service.d.ts.map +1 -0
  89. package/dist/cjs/service/memory.service.js +193 -0
  90. package/dist/cjs/service/memory.service.js.map +1 -0
  91. package/dist/cjs/service/observability.service.d.ts +3 -0
  92. package/dist/cjs/service/observability.service.d.ts.map +1 -0
  93. package/dist/cjs/service/observability.service.js +10 -0
  94. package/dist/cjs/service/observability.service.js.map +1 -0
  95. package/dist/cjs/service/permission.service.d.ts +5 -0
  96. package/dist/cjs/service/permission.service.d.ts.map +1 -0
  97. package/dist/cjs/service/permission.service.js +40 -0
  98. package/dist/cjs/service/permission.service.js.map +1 -0
  99. package/dist/cjs/service/run-registry.d.ts +7 -0
  100. package/dist/cjs/service/run-registry.d.ts.map +1 -0
  101. package/dist/cjs/service/run-registry.js +44 -0
  102. package/dist/cjs/service/run-registry.js.map +1 -0
  103. package/dist/cjs/service/safety-audit.middleware.d.ts +3 -0
  104. package/dist/cjs/service/safety-audit.middleware.d.ts.map +1 -0
  105. package/dist/cjs/service/safety-audit.middleware.js +115 -0
  106. package/dist/cjs/service/safety-audit.middleware.js.map +1 -0
  107. package/dist/cjs/service/security-policy.service.d.ts +18 -0
  108. package/dist/cjs/service/security-policy.service.d.ts.map +1 -0
  109. package/dist/cjs/service/security-policy.service.js +46 -0
  110. package/dist/cjs/service/security-policy.service.js.map +1 -0
  111. package/dist/cjs/service/settings.service.d.ts +18 -0
  112. package/dist/cjs/service/settings.service.d.ts.map +1 -0
  113. package/dist/cjs/service/settings.service.js +222 -0
  114. package/dist/cjs/service/settings.service.js.map +1 -0
  115. package/dist/cjs/service/tool-risk.service.d.ts +3 -0
  116. package/dist/cjs/service/tool-risk.service.d.ts.map +1 -0
  117. package/dist/cjs/service/tool-risk.service.js +23 -0
  118. package/dist/cjs/service/tool-risk.service.js.map +1 -0
  119. package/dist/cjs/service/workspace.service.d.ts +33 -0
  120. package/dist/cjs/service/workspace.service.d.ts.map +1 -0
  121. package/dist/cjs/service/workspace.service.js +107 -0
  122. package/dist/cjs/service/workspace.service.js.map +1 -0
  123. package/dist/cjs/sse/sse-handler.d.ts +15 -0
  124. package/dist/cjs/sse/sse-handler.d.ts.map +1 -0
  125. package/dist/cjs/sse/sse-handler.js +56 -0
  126. package/dist/cjs/sse/sse-handler.js.map +1 -0
  127. package/dist/cjs/store/app-stores.d.ts +42 -0
  128. package/dist/cjs/store/app-stores.d.ts.map +1 -0
  129. package/dist/cjs/store/app-stores.js +226 -0
  130. package/dist/cjs/store/app-stores.js.map +1 -0
  131. package/dist/cjs/store/index.d.ts +3 -0
  132. package/dist/cjs/store/index.d.ts.map +1 -0
  133. package/dist/cjs/store/index.js +10 -0
  134. package/dist/cjs/store/index.js.map +1 -0
  135. package/dist/cjs/store/mcp-server-store.d.ts +35 -0
  136. package/dist/cjs/store/mcp-server-store.d.ts.map +1 -0
  137. package/dist/cjs/store/mcp-server-store.js +288 -0
  138. package/dist/cjs/store/mcp-server-store.js.map +1 -0
  139. package/dist/cjs/tool/builtin.d.ts +18 -0
  140. package/dist/cjs/tool/builtin.d.ts.map +1 -0
  141. package/dist/cjs/tool/builtin.js +43 -0
  142. package/dist/cjs/tool/builtin.js.map +1 -0
  143. package/dist/cjs/tool/local-executors.d.ts +22 -0
  144. package/dist/cjs/tool/local-executors.d.ts.map +1 -0
  145. package/dist/cjs/tool/local-executors.js +126 -0
  146. package/dist/cjs/tool/local-executors.js.map +1 -0
  147. package/dist/cjs/tool/tools/automation.d.ts +3 -0
  148. package/dist/cjs/tool/tools/automation.d.ts.map +1 -0
  149. package/dist/cjs/tool/tools/automation.js +190 -0
  150. package/dist/cjs/tool/tools/automation.js.map +1 -0
  151. package/dist/cjs/tool/tools/communication.d.ts +3 -0
  152. package/dist/cjs/tool/tools/communication.d.ts.map +1 -0
  153. package/dist/cjs/tool/tools/communication.js +302 -0
  154. package/dist/cjs/tool/tools/communication.js.map +1 -0
  155. package/dist/cjs/tool/tools/discovery.d.ts +3 -0
  156. package/dist/cjs/tool/tools/discovery.d.ts.map +1 -0
  157. package/dist/cjs/tool/tools/discovery.js +248 -0
  158. package/dist/cjs/tool/tools/discovery.js.map +1 -0
  159. package/dist/cjs/tool/tools/filesystem.d.ts +3 -0
  160. package/dist/cjs/tool/tools/filesystem.d.ts.map +1 -0
  161. package/dist/cjs/tool/tools/filesystem.js +403 -0
  162. package/dist/cjs/tool/tools/filesystem.js.map +1 -0
  163. package/dist/cjs/tool/tools/git.d.ts +3 -0
  164. package/dist/cjs/tool/tools/git.d.ts.map +1 -0
  165. package/dist/cjs/tool/tools/git.js +224 -0
  166. package/dist/cjs/tool/tools/git.js.map +1 -0
  167. package/dist/cjs/tool/tools/memory.d.ts +3 -0
  168. package/dist/cjs/tool/tools/memory.d.ts.map +1 -0
  169. package/dist/cjs/tool/tools/memory.js +126 -0
  170. package/dist/cjs/tool/tools/memory.js.map +1 -0
  171. package/dist/cjs/tool/tools/sandbox.d.ts +3 -0
  172. package/dist/cjs/tool/tools/sandbox.d.ts.map +1 -0
  173. package/dist/cjs/tool/tools/sandbox.js +413 -0
  174. package/dist/cjs/tool/tools/sandbox.js.map +1 -0
  175. package/dist/cjs/tool/tools/web-utils.d.ts +16 -0
  176. package/dist/cjs/tool/tools/web-utils.d.ts.map +1 -0
  177. package/dist/cjs/tool/tools/web-utils.js +131 -0
  178. package/dist/cjs/tool/tools/web-utils.js.map +1 -0
  179. package/dist/cjs/tool/tools/web.d.ts +3 -0
  180. package/dist/cjs/tool/tools/web.d.ts.map +1 -0
  181. package/dist/cjs/tool/tools/web.js +358 -0
  182. package/dist/cjs/tool/tools/web.js.map +1 -0
  183. package/dist/cjs/types.d.ts +523 -0
  184. package/dist/cjs/types.d.ts.map +1 -0
  185. package/dist/cjs/types.js +6 -0
  186. package/dist/cjs/types.js.map +1 -0
  187. package/dist/cjs/utils/data-dir.d.ts +8 -0
  188. package/dist/cjs/utils/data-dir.d.ts.map +1 -0
  189. package/dist/cjs/utils/data-dir.js +92 -0
  190. package/dist/cjs/utils/data-dir.js.map +1 -0
  191. package/dist/esm/agent/agent-server.d.ts +6 -0
  192. package/dist/esm/agent/agent-server.d.ts.map +1 -0
  193. package/dist/esm/agent/agent-server.js +409 -0
  194. package/dist/esm/agent/agent-server.js.map +1 -0
  195. package/dist/esm/connectors/index.d.ts +13 -0
  196. package/dist/esm/connectors/index.d.ts.map +1 -0
  197. package/dist/esm/connectors/index.js +30 -0
  198. package/dist/esm/connectors/index.js.map +1 -0
  199. package/dist/esm/index.d.ts +56 -0
  200. package/dist/esm/index.d.ts.map +1 -0
  201. package/dist/esm/index.js +57 -0
  202. package/dist/esm/index.js.map +1 -0
  203. package/dist/esm/kb/doc-parser.d.ts +24 -0
  204. package/dist/esm/kb/doc-parser.d.ts.map +1 -0
  205. package/dist/esm/kb/doc-parser.js +100 -0
  206. package/dist/esm/kb/doc-parser.js.map +1 -0
  207. package/dist/esm/kb/embedding-vector-index.d.ts +30 -0
  208. package/dist/esm/kb/embedding-vector-index.d.ts.map +1 -0
  209. package/dist/esm/kb/embedding-vector-index.js +71 -0
  210. package/dist/esm/kb/embedding-vector-index.js.map +1 -0
  211. package/dist/esm/kb/file-knowledge-base.d.ts +25 -0
  212. package/dist/esm/kb/file-knowledge-base.d.ts.map +1 -0
  213. package/dist/esm/kb/file-knowledge-base.js +163 -0
  214. package/dist/esm/kb/file-knowledge-base.js.map +1 -0
  215. package/dist/esm/mcp/api-bridge-client.d.ts +36 -0
  216. package/dist/esm/mcp/api-bridge-client.d.ts.map +1 -0
  217. package/dist/esm/mcp/api-bridge-client.js +139 -0
  218. package/dist/esm/mcp/api-bridge-client.js.map +1 -0
  219. package/dist/esm/mcp/api-bridge-types.d.ts +91 -0
  220. package/dist/esm/mcp/api-bridge-types.d.ts.map +1 -0
  221. package/dist/esm/mcp/api-bridge-types.js +7 -0
  222. package/dist/esm/mcp/api-bridge-types.js.map +1 -0
  223. package/dist/esm/mcp/body-template.d.ts +16 -0
  224. package/dist/esm/mcp/body-template.d.ts.map +1 -0
  225. package/dist/esm/mcp/body-template.js +59 -0
  226. package/dist/esm/mcp/body-template.js.map +1 -0
  227. package/dist/esm/mcp/openapi-importer.d.ts +24 -0
  228. package/dist/esm/mcp/openapi-importer.d.ts.map +1 -0
  229. package/dist/esm/mcp/openapi-importer.js +177 -0
  230. package/dist/esm/mcp/openapi-importer.js.map +1 -0
  231. package/dist/esm/mcp/template-builder.d.ts +53 -0
  232. package/dist/esm/mcp/template-builder.d.ts.map +1 -0
  233. package/dist/esm/mcp/template-builder.js +173 -0
  234. package/dist/esm/mcp/template-builder.js.map +1 -0
  235. package/dist/esm/model/automation.d.ts +34 -0
  236. package/dist/esm/model/automation.d.ts.map +1 -0
  237. package/dist/esm/model/automation.js +5 -0
  238. package/dist/esm/model/automation.js.map +1 -0
  239. package/dist/esm/package.json +3 -0
  240. package/dist/esm/prompt/prompt-builder.d.ts +14 -0
  241. package/dist/esm/prompt/prompt-builder.d.ts.map +1 -0
  242. package/dist/esm/prompt/prompt-builder.js +109 -0
  243. package/dist/esm/prompt/prompt-builder.js.map +1 -0
  244. package/dist/esm/sandbox/local-sandbox.d.ts +70 -0
  245. package/dist/esm/sandbox/local-sandbox.d.ts.map +1 -0
  246. package/dist/esm/sandbox/local-sandbox.js +403 -0
  247. package/dist/esm/sandbox/local-sandbox.js.map +1 -0
  248. package/dist/esm/sandbox/process-code-sandbox.d.ts +25 -0
  249. package/dist/esm/sandbox/process-code-sandbox.d.ts.map +1 -0
  250. package/dist/esm/sandbox/process-code-sandbox.js +76 -0
  251. package/dist/esm/sandbox/process-code-sandbox.js.map +1 -0
  252. package/dist/esm/sandbox/sandbox-manager.d.ts +47 -0
  253. package/dist/esm/sandbox/sandbox-manager.d.ts.map +1 -0
  254. package/dist/esm/sandbox/sandbox-manager.js +88 -0
  255. package/dist/esm/sandbox/sandbox-manager.js.map +1 -0
  256. package/dist/esm/service/agent-profile.service.d.ts +27 -0
  257. package/dist/esm/service/agent-profile.service.d.ts.map +1 -0
  258. package/dist/esm/service/agent-profile.service.js +130 -0
  259. package/dist/esm/service/agent-profile.service.js.map +1 -0
  260. package/dist/esm/service/artifact.service.d.ts +33 -0
  261. package/dist/esm/service/artifact.service.d.ts.map +1 -0
  262. package/dist/esm/service/artifact.service.js +175 -0
  263. package/dist/esm/service/artifact.service.js.map +1 -0
  264. package/dist/esm/service/audit.service.d.ts +30 -0
  265. package/dist/esm/service/audit.service.d.ts.map +1 -0
  266. package/dist/esm/service/audit.service.js +131 -0
  267. package/dist/esm/service/audit.service.js.map +1 -0
  268. package/dist/esm/service/chat.service.d.ts +90 -0
  269. package/dist/esm/service/chat.service.d.ts.map +1 -0
  270. package/dist/esm/service/chat.service.js +388 -0
  271. package/dist/esm/service/chat.service.js.map +1 -0
  272. package/dist/esm/service/engine-pool.d.ts +6 -0
  273. package/dist/esm/service/engine-pool.d.ts.map +1 -0
  274. package/dist/esm/service/engine-pool.js +18 -0
  275. package/dist/esm/service/engine-pool.js.map +1 -0
  276. package/dist/esm/service/memory.service.d.ts +45 -0
  277. package/dist/esm/service/memory.service.d.ts.map +1 -0
  278. package/dist/esm/service/memory.service.js +154 -0
  279. package/dist/esm/service/memory.service.js.map +1 -0
  280. package/dist/esm/service/observability.service.d.ts +3 -0
  281. package/dist/esm/service/observability.service.d.ts.map +1 -0
  282. package/dist/esm/service/observability.service.js +5 -0
  283. package/dist/esm/service/observability.service.js.map +1 -0
  284. package/dist/esm/service/permission.service.d.ts +5 -0
  285. package/dist/esm/service/permission.service.d.ts.map +1 -0
  286. package/dist/esm/service/permission.service.js +33 -0
  287. package/dist/esm/service/permission.service.js.map +1 -0
  288. package/dist/esm/service/run-registry.d.ts +7 -0
  289. package/dist/esm/service/run-registry.d.ts.map +1 -0
  290. package/dist/esm/service/run-registry.js +37 -0
  291. package/dist/esm/service/run-registry.js.map +1 -0
  292. package/dist/esm/service/safety-audit.middleware.d.ts +3 -0
  293. package/dist/esm/service/safety-audit.middleware.d.ts.map +1 -0
  294. package/dist/esm/service/safety-audit.middleware.js +112 -0
  295. package/dist/esm/service/safety-audit.middleware.js.map +1 -0
  296. package/dist/esm/service/security-policy.service.d.ts +18 -0
  297. package/dist/esm/service/security-policy.service.d.ts.map +1 -0
  298. package/dist/esm/service/security-policy.service.js +42 -0
  299. package/dist/esm/service/security-policy.service.js.map +1 -0
  300. package/dist/esm/service/settings.service.d.ts +18 -0
  301. package/dist/esm/service/settings.service.d.ts.map +1 -0
  302. package/dist/esm/service/settings.service.js +181 -0
  303. package/dist/esm/service/settings.service.js.map +1 -0
  304. package/dist/esm/service/tool-risk.service.d.ts +3 -0
  305. package/dist/esm/service/tool-risk.service.d.ts.map +1 -0
  306. package/dist/esm/service/tool-risk.service.js +17 -0
  307. package/dist/esm/service/tool-risk.service.js.map +1 -0
  308. package/dist/esm/service/workspace.service.d.ts +33 -0
  309. package/dist/esm/service/workspace.service.d.ts.map +1 -0
  310. package/dist/esm/service/workspace.service.js +97 -0
  311. package/dist/esm/service/workspace.service.js.map +1 -0
  312. package/dist/esm/sse/sse-handler.d.ts +15 -0
  313. package/dist/esm/sse/sse-handler.d.ts.map +1 -0
  314. package/dist/esm/sse/sse-handler.js +49 -0
  315. package/dist/esm/sse/sse-handler.js.map +1 -0
  316. package/dist/esm/store/app-stores.d.ts +42 -0
  317. package/dist/esm/store/app-stores.d.ts.map +1 -0
  318. package/dist/esm/store/app-stores.js +181 -0
  319. package/dist/esm/store/app-stores.js.map +1 -0
  320. package/dist/esm/store/index.d.ts +3 -0
  321. package/dist/esm/store/index.d.ts.map +1 -0
  322. package/dist/esm/store/index.js +5 -0
  323. package/dist/esm/store/index.js.map +1 -0
  324. package/dist/esm/store/mcp-server-store.d.ts +35 -0
  325. package/dist/esm/store/mcp-server-store.d.ts.map +1 -0
  326. package/dist/esm/store/mcp-server-store.js +251 -0
  327. package/dist/esm/store/mcp-server-store.js.map +1 -0
  328. package/dist/esm/tool/builtin.d.ts +18 -0
  329. package/dist/esm/tool/builtin.d.ts.map +1 -0
  330. package/dist/esm/tool/builtin.js +40 -0
  331. package/dist/esm/tool/builtin.js.map +1 -0
  332. package/dist/esm/tool/local-executors.d.ts +22 -0
  333. package/dist/esm/tool/local-executors.d.ts.map +1 -0
  334. package/dist/esm/tool/local-executors.js +88 -0
  335. package/dist/esm/tool/local-executors.js.map +1 -0
  336. package/dist/esm/tool/tools/automation.d.ts +3 -0
  337. package/dist/esm/tool/tools/automation.d.ts.map +1 -0
  338. package/dist/esm/tool/tools/automation.js +154 -0
  339. package/dist/esm/tool/tools/automation.js.map +1 -0
  340. package/dist/esm/tool/tools/communication.d.ts +3 -0
  341. package/dist/esm/tool/tools/communication.d.ts.map +1 -0
  342. package/dist/esm/tool/tools/communication.js +266 -0
  343. package/dist/esm/tool/tools/communication.js.map +1 -0
  344. package/dist/esm/tool/tools/discovery.d.ts +3 -0
  345. package/dist/esm/tool/tools/discovery.d.ts.map +1 -0
  346. package/dist/esm/tool/tools/discovery.js +245 -0
  347. package/dist/esm/tool/tools/discovery.js.map +1 -0
  348. package/dist/esm/tool/tools/filesystem.d.ts +3 -0
  349. package/dist/esm/tool/tools/filesystem.d.ts.map +1 -0
  350. package/dist/esm/tool/tools/filesystem.js +367 -0
  351. package/dist/esm/tool/tools/filesystem.js.map +1 -0
  352. package/dist/esm/tool/tools/git.d.ts +3 -0
  353. package/dist/esm/tool/tools/git.d.ts.map +1 -0
  354. package/dist/esm/tool/tools/git.js +188 -0
  355. package/dist/esm/tool/tools/git.js.map +1 -0
  356. package/dist/esm/tool/tools/memory.d.ts +3 -0
  357. package/dist/esm/tool/tools/memory.d.ts.map +1 -0
  358. package/dist/esm/tool/tools/memory.js +123 -0
  359. package/dist/esm/tool/tools/memory.js.map +1 -0
  360. package/dist/esm/tool/tools/sandbox.d.ts +3 -0
  361. package/dist/esm/tool/tools/sandbox.d.ts.map +1 -0
  362. package/dist/esm/tool/tools/sandbox.js +377 -0
  363. package/dist/esm/tool/tools/sandbox.js.map +1 -0
  364. package/dist/esm/tool/tools/web-utils.d.ts +16 -0
  365. package/dist/esm/tool/tools/web-utils.d.ts.map +1 -0
  366. package/dist/esm/tool/tools/web-utils.js +88 -0
  367. package/dist/esm/tool/tools/web-utils.js.map +1 -0
  368. package/dist/esm/tool/tools/web.d.ts +3 -0
  369. package/dist/esm/tool/tools/web.d.ts.map +1 -0
  370. package/dist/esm/tool/tools/web.js +319 -0
  371. package/dist/esm/tool/tools/web.js.map +1 -0
  372. package/dist/esm/types.d.ts +523 -0
  373. package/dist/esm/types.d.ts.map +1 -0
  374. package/dist/esm/types.js +5 -0
  375. package/dist/esm/types.js.map +1 -0
  376. package/dist/esm/utils/data-dir.d.ts +8 -0
  377. package/dist/esm/utils/data-dir.d.ts.map +1 -0
  378. package/dist/esm/utils/data-dir.js +48 -0
  379. package/dist/esm/utils/data-dir.js.map +1 -0
  380. package/package.json +56 -0
@@ -0,0 +1,377 @@
1
+ // ============================================================
2
+ // 沙箱与可视化工具:run_script, show_widget, save_artifact
3
+ // ============================================================
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ export function createSandboxTools() {
7
+ return [
8
+ // ---- run_script ----
9
+ // 在沙箱中运行 Python/Node.js/Shell 脚本
10
+ {
11
+ definition: {
12
+ type: 'function',
13
+ function: {
14
+ name: 'run_script',
15
+ description: 'Run a script file in an isolated sandbox. ' +
16
+ '**DEFAULT PATTERN: Always write script to a file first, then use run_script to execute it.** ' +
17
+ 'Step 1: `write_file({ path: "script.cjs", content: "..." })` — write your script to a file. ' +
18
+ 'Step 2: `run_script({ language: "nodejs", code: "require(require(\'path\').join(process.cwd(),\'script.cjs\'));" })` — execute the file. ' +
19
+ 'The `code` parameter should ONLY contain a short require/import/loader command (typically < 200 chars). ' +
20
+ 'NEVER embed full scripts, document generation code, or complex logic inline in the `code` parameter. ' +
21
+ 'Exception: trivial one-liners like `console.log("hello")` or `require("./test.cjs")` are OK inline. ' +
22
+ '**Prefer `nodejs`** for data processing, HTTP requests, file manipulation, and general scripting. ' +
23
+ 'Only use `python` when Node.js cannot handle the task (e.g. numpy, pandas, matplotlib, weasyprint). ' +
24
+ 'Supported languages: nodejs, python, shell. ' +
25
+ 'Node.js scripts use CommonJS (.cjs) — `require()` and `module.exports` are supported. ' +
26
+ 'npm packages are NOT pre-installed; use `execute_command` with the preferred package manager from Runtime env (e.g. `pnpm install`, `yarn add`, or `npm install`) with `timeout: 60000`. ' +
27
+ 'For PDF generation: prefer Python with `weasyprint` or `reportlab`.',
28
+ parameters: {
29
+ type: 'object',
30
+ properties: {
31
+ language: {
32
+ type: 'string',
33
+ description: 'Script language. Prefer `nodejs` for most tasks. Use `python` only when specific Python libraries are required.',
34
+ enum: ['nodejs', 'python', 'shell'],
35
+ },
36
+ code: {
37
+ type: 'string',
38
+ description: 'Short loader command to execute, e.g. "require(require(\'path\').join(process.cwd(),\'script.cjs\'));" — NOT full script content (MUST be non-empty)',
39
+ },
40
+ timeout: {
41
+ type: 'number',
42
+ description: 'Timeout in ms, default 30000',
43
+ },
44
+ },
45
+ required: ['language', 'code'],
46
+ },
47
+ },
48
+ },
49
+ executor: async (args, ctx) => {
50
+ const language = args.language;
51
+ const code = args.code;
52
+ const timeout = args.timeout != null ? Number(args.timeout) : undefined;
53
+ if (!language || !code) {
54
+ return [
55
+ 'ERROR: run_script called with empty parameters. You MUST provide both `language` and `code`.',
56
+ '',
57
+ 'If your script is LONG (>50 lines), use the Two-Step approach:',
58
+ ' Step 1: write_file({ path: "generate.cjs", content: "<your full script>" })',
59
+ ' Step 2: run_script({ language: "nodejs", code: "require(require(\'path\').join(process.cwd(),\'generate.cjs\'));", timeout: 60000 })',
60
+ '',
61
+ 'If your script is SHORT, call run_script directly:',
62
+ ' run_script({ language: "nodejs", code: "console.log(\'hello\');", timeout: 30000 })',
63
+ '',
64
+ 'IMPORTANT: You MUST include the actual code string in the `code` parameter. Never call this tool with empty {}.',
65
+ ].join('\n');
66
+ }
67
+ // 从 context 获取沙箱实例
68
+ const sandbox = ctx.custom?.sandbox;
69
+ if (!sandbox) {
70
+ return 'Error: Sandbox not available. Please ensure sandbox is initialized for this session.';
71
+ }
72
+ try {
73
+ return await sandbox.runScript(language, code, timeout);
74
+ }
75
+ catch (err) {
76
+ return `Error: Script execution failed: ${err?.message || err}`;
77
+ }
78
+ },
79
+ category: 'builtin',
80
+ concurrent: false,
81
+ },
82
+ // ---- show_widget ----
83
+ // 在对话中内嵌渲染交互式 HTML 组件(图表、数据表、仪表盘等)
84
+ {
85
+ definition: {
86
+ type: 'function',
87
+ function: {
88
+ name: 'show_widget',
89
+ description: 'Render an interactive HTML widget inline in the chat conversation. ' +
90
+ 'Use this to display charts, data tables, dashboards, metric cards, or any interactive ' +
91
+ 'visualization directly in the conversation. ' +
92
+ 'The HTML is rendered in a sandboxed iframe with CDN library support (Chart.js, D3, Plotly, ECharts, etc.). ' +
93
+ 'CSS theme variables are automatically injected for seamless integration. ' +
94
+ '\n\n## IMPORTANT: For data reports with charts/metrics/tables, prefer `create_report` tool — ' +
95
+ 'it generates themed HTML automatically with no manual CSS/ECharts coding needed. ' +
96
+ 'Use show_widget only for custom visualizations that create_report cannot produce. ' +
97
+ '\n\n## Input Modes\n' +
98
+ '- `html` (inline): HTML fragment ONLY — NO <!DOCTYPE>, <html>, <head>, or <body> tags.\n' +
99
+ '- `html_file`: Path to a .html file in sandbox. MAY be a full HTML document (with <!DOCTYPE>/<html>/<head>/<body>). ' +
100
+ 'PREFERRED for complex reports with ECharts (>1500 chars).\n' +
101
+ '\n## ⛔ HTML Quality Iron Rules (CRITICAL — violations cause rendering failure)\n' +
102
+ '1. NEVER escape HTML tags as entities: &lt;h3&gt; shows as text, NOT as heading. Always write raw <h3> tags.\n' +
103
+ '2. getElementById IDs MUST exactly match HTML id attributes: <div id="chart1"> → getElementById("chart1"). ' +
104
+ 'A mismatch crashes ALL subsequent charts.\n' +
105
+ '3. NEVER include <\/script> (backslash-escaped) inside inline <script> — use string concatenation instead.\n' +
106
+ '4. NEVER put HTML body content inside <script> tags — keep <style>, HTML body, and <script> strictly separated.\n' +
107
+ '5. For ECharts: always set explicit width+height on chart container divs.\n' +
108
+ '6. NEVER define custom CSS variables in :root (e.g. --bg-page, --text-primary). ' +
109
+ 'The system injects --color-* variables automatically. Use ONLY these: ' +
110
+ '--color-bg-page, --color-bg-card, --color-bg-subtle, --color-text-primary, --color-text-secondary, ' +
111
+ '--color-text-tertiary, --color-border-muted, --color-accent-primary, --color-profit, --color-loss.\n' +
112
+ '7. NEVER hardcode hex colors in ECharts. Use getComputedStyle(document.documentElement).getPropertyValue("--color-xxx").\n' +
113
+ 'Either `html` or `html_file` is required.',
114
+ parameters: {
115
+ type: 'object',
116
+ properties: {
117
+ html: {
118
+ type: 'string',
119
+ description: 'Raw HTML fragment to render (MUST be non-empty). No DOCTYPE/html/head/body tags. ' +
120
+ 'Can use CDN libraries: cdnjs.cloudflare.com, cdn.jsdelivr.net, unpkg.com, esm.sh. ' +
121
+ 'NEVER use &lt; or &gt; — write raw HTML tags directly.',
122
+ },
123
+ title: {
124
+ type: 'string',
125
+ description: 'Optional display title for the widget',
126
+ },
127
+ height: {
128
+ type: 'number',
129
+ description: 'Optional fixed height in pixels. If omitted, the widget auto-sizes to fit content.',
130
+ },
131
+ html_file: {
132
+ type: 'string',
133
+ description: 'Path to an HTML file in sandbox (PREFERRED for large/complex widgets). ' +
134
+ 'May be a full HTML document or a fragment. Use write_file to create the file first.',
135
+ },
136
+ },
137
+ required: [],
138
+ },
139
+ },
140
+ },
141
+ executor: async (args, ctx) => {
142
+ let html = args.html;
143
+ const htmlFile = args.html_file;
144
+ const title = args.title || '';
145
+ const height = args.height;
146
+ // 从 html_file 读取(大型 widget 场景)
147
+ if (!html && htmlFile) {
148
+ const sandbox = ctx.custom?.sandbox;
149
+ if (!sandbox)
150
+ return 'Error: Sandbox not available. Cannot read html_file.';
151
+ const resolvedPath = path.isAbsolute(htmlFile)
152
+ ? htmlFile
153
+ : path.join(sandbox.rootDir, htmlFile);
154
+ if (!resolvedPath.startsWith(sandbox.rootDir)) {
155
+ return 'Error: html_file path must be within sandbox directory.';
156
+ }
157
+ try {
158
+ html = fs.readFileSync(resolvedPath, 'utf-8');
159
+ }
160
+ catch (err) {
161
+ return `Error: Failed to read html_file "${htmlFile}": ${err?.message || err}`;
162
+ }
163
+ }
164
+ if (!html) {
165
+ return [
166
+ 'Error: Either `html` or `html_file` is required.',
167
+ '',
168
+ 'For small widgets (<1500 chars HTML):',
169
+ ' show_widget({ html: "<div>...</div>", title: "My Chart" })',
170
+ '',
171
+ 'For large widgets (ECharts dashboards, complex visualizations):',
172
+ ' Step 1: write_file({ path: "widget.html", content: "<your full HTML>" })',
173
+ ' Step 2: show_widget({ html_file: "widget.html", title: "Dashboard" })',
174
+ ].join('\n');
175
+ }
176
+ // 通过 emitWidget 回调发射 SSE widget 事件
177
+ const emitWidget = ctx.emitWidget;
178
+ if (emitWidget) {
179
+ const widgetId = `widget_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
180
+ emitWidget({ widgetId, html, title, height });
181
+ return `Widget rendered: ${title || widgetId}`;
182
+ }
183
+ // 回退:没有 SSE 流时返回 HTML 长度提示
184
+ return `Widget created (${html.length} chars). Note: widget rendering requires an active SSE stream.`;
185
+ },
186
+ category: 'builtin',
187
+ concurrent: true,
188
+ },
189
+ // ---- save_artifact ----
190
+ // 将沙箱中生成的文件保存为 Artifact(图表、数据文件等),推送到对话中展示
191
+ {
192
+ definition: {
193
+ type: 'function',
194
+ function: {
195
+ name: 'save_artifact',
196
+ description: 'Save a file from the sandbox as a chat artifact. ' +
197
+ 'Use this to export charts, images, data files, or any generated output so users can ' +
198
+ 'view and download them directly in the conversation. ' +
199
+ 'The file must exist in the sandbox filesystem (use run_script to generate it first). ' +
200
+ 'NOTE: create_presentation, create_document, and create_pdf already save their output as artifacts automatically — do NOT call save_artifact for files produced by those tools.',
201
+ parameters: {
202
+ type: 'object',
203
+ properties: {
204
+ path: {
205
+ type: 'string',
206
+ description: 'File path inside the sandbox (e.g., "output/report.html")',
207
+ },
208
+ filename: {
209
+ type: 'string',
210
+ description: 'Display filename for the artifact (optional, defaults to basename of path)',
211
+ },
212
+ description: {
213
+ type: 'string',
214
+ description: 'Short description of the artifact (e.g., "Q1-Q4 revenue bar chart")',
215
+ },
216
+ },
217
+ required: ['path'],
218
+ },
219
+ },
220
+ },
221
+ executor: async (args, ctx) => {
222
+ let filePath = args.path;
223
+ const displayName = args.filename || '';
224
+ const desc = args.description || '';
225
+ if (!filePath || typeof filePath !== 'string') {
226
+ return [
227
+ 'ERROR: save_artifact called with empty `path`. You MUST specify the file to save.',
228
+ '',
229
+ 'Correct usage:',
230
+ ' save_artifact({ path: "output/presentation.pptx", filename: "MyPresentation.pptx", description: "Presentation about..." })',
231
+ ' save_artifact({ path: "output/report.pdf", filename: "Report.pdf" })',
232
+ '',
233
+ 'The file must already exist in the sandbox (generated by run_script).',
234
+ ].join('\n');
235
+ }
236
+ // 安全检查:拒绝沙箱外的绝对路径
237
+ if (path.isAbsolute(filePath) && /\/(Users|home)\//.test(filePath)) {
238
+ const basename = path.basename(filePath);
239
+ return [
240
+ `ERROR: save_artifact received absolute path "${filePath}" which is outside the sandbox.`,
241
+ `Files MUST be generated inside the sandbox using relative paths.`,
242
+ '',
243
+ `Correct usage:`,
244
+ ` 1. Use run_script to generate "${basename}" with a relative path`,
245
+ ` 2. Call save_artifact({ path: "${basename}", ... })`,
246
+ ].join('\n');
247
+ }
248
+ // 获取沙箱实例
249
+ const sandbox = ctx.custom?.sandbox;
250
+ if (!sandbox) {
251
+ return 'Error: Sandbox not available. Use run_script to generate files first.';
252
+ }
253
+ const fsExec = sandbox.getFileSystemExecutor();
254
+ if (!fsExec) {
255
+ return 'Error: FileSystem executor not available in sandbox';
256
+ }
257
+ // 检测是否为二进制文件(根据扩展名判断)
258
+ const binaryExts = new Set([
259
+ '.pdf', '.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.ico',
260
+ '.zip', '.gz', '.tar', '.xlsx', '.xls', '.docx', '.pptx',
261
+ ]);
262
+ const ext = filePath.includes('.') ? '.' + filePath.split('.').pop().toLowerCase() : '';
263
+ const isBinary = binaryExts.has(ext);
264
+ // 读取文件内容(二进制文件使用 Buffer,文本文件使用 UTF-8)
265
+ let content;
266
+ try {
267
+ if (isBinary && fsExec.readFileBuffer) {
268
+ content = await fsExec.readFileBuffer(filePath);
269
+ }
270
+ else {
271
+ content = await fsExec.readFile(filePath);
272
+ }
273
+ }
274
+ catch (err) {
275
+ // File not found — try to auto-recover by searching for the file
276
+ const ext2 = filePath.includes('.') ? filePath.split('.').pop() : '';
277
+ let foundFile = '';
278
+ // 1. Try shell find command to locate the file
279
+ try {
280
+ const shell = sandbox.getShellExecutor();
281
+ if (shell && ext2) {
282
+ const findResult = await shell.exec(`find . -name "*.${ext2}" -not -path "./_scripts/*" -not -path "./node_modules/*" 2>/dev/null`, 5000);
283
+ if (findResult && findResult !== '(no output)' && !findResult.includes('Error')) {
284
+ const candidates = findResult.trim().split('\n').filter(l => l.trim());
285
+ if (candidates.length > 0) {
286
+ foundFile = candidates[0].trim().replace(/^\.\//, '');
287
+ }
288
+ }
289
+ }
290
+ }
291
+ catch { /* find failed */ }
292
+ // 2. If found, try to read it
293
+ if (foundFile) {
294
+ try {
295
+ if (isBinary && fsExec.readFileBuffer) {
296
+ content = await fsExec.readFileBuffer(foundFile);
297
+ }
298
+ else {
299
+ content = await fsExec.readFile(foundFile);
300
+ }
301
+ if (content && ((typeof content === 'string' && content.length) || (Buffer.isBuffer(content) && content.length))) {
302
+ filePath = foundFile;
303
+ }
304
+ }
305
+ catch {
306
+ foundFile = '';
307
+ }
308
+ }
309
+ // 3. If still no file, return diagnostic error
310
+ if (!content || (typeof content === 'string' && !content.length) || (Buffer.isBuffer(content) && !content.length)) {
311
+ let fileList = '';
312
+ try {
313
+ const entries = await fsExec.listDir('.');
314
+ const relevant = entries.filter(e => !e.startsWith('_scripts') && !e.startsWith('node_modules'));
315
+ if (relevant.length > 0) {
316
+ fileList = '\n\nFiles in sandbox root:\n' + relevant.map(e => ' - ' + e).join('\n');
317
+ }
318
+ else {
319
+ fileList = '\n\nSandbox is empty — no files were generated. The script likely failed.';
320
+ }
321
+ }
322
+ catch {
323
+ fileList = '';
324
+ }
325
+ return [
326
+ `ERROR: File "${filePath}" not found in sandbox.`,
327
+ '',
328
+ 'Possible causes:',
329
+ ' 1. The generation script failed silently (check run_script output)',
330
+ ' 2. The file was saved with a different name or path',
331
+ '',
332
+ 'Fix steps:',
333
+ ' 1. Run: execute_command({ command: "find . -name *.pptx -o -name *.docx -o -name *.pdf", timeout: 5000 })',
334
+ ' 2. Check script output for errors',
335
+ ' 3. Re-run with a relative path like "output/presentation.pptx"',
336
+ fileList,
337
+ ].join('\n');
338
+ }
339
+ }
340
+ if (!content || (typeof content === 'string' && !content.length) || (Buffer.isBuffer(content) && !content.length)) {
341
+ return `Error: File "${filePath}" is empty`;
342
+ }
343
+ // 确定文件名
344
+ const filename = displayName || filePath.split('/').pop() || 'artifact';
345
+ // 保存到沙箱内 Artifact 存储
346
+ try {
347
+ // @ts-ignore — application-layer module
348
+ const { saveArtifact } = await import("../../service/artifact.service.js");
349
+ const sessionId = ctx.sessionId || 'default';
350
+ const result = saveArtifact(sandbox.rootDir, sessionId, filename, content);
351
+ // 通过 SSE 推送到前端(去重命中时跳过,避免重复推送)
352
+ const emitArtifact = ctx.emitArtifact;
353
+ if (emitArtifact && !result.dedup) {
354
+ emitArtifact({
355
+ artifactId: result.artifactId,
356
+ filename: result.filename,
357
+ mimeType: result.mimeType,
358
+ size: result.size,
359
+ url: result.url,
360
+ description: desc || undefined,
361
+ });
362
+ }
363
+ if (result.dedup) {
364
+ return `Artifact already saved (dedup): ${result.filename} (${result.size} bytes). URL: ${result.url}`;
365
+ }
366
+ return `Artifact saved: ${result.filename} (${result.size} bytes, ${result.mimeType}). URL: ${result.url}`;
367
+ }
368
+ catch (err) {
369
+ return `Error: Failed to save artifact: ${err?.message || err}`;
370
+ }
371
+ },
372
+ category: 'builtin',
373
+ concurrent: true,
374
+ },
375
+ ];
376
+ }
377
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../../src/tool/tools/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { convert as htmlToText } from 'html-to-text';
2
+ export declare function htmlToMarkdown(html: string): string;
3
+ export { htmlToText };
4
+ /**
5
+ * 从 Content-Type header 或 HTML meta 标签中检测字符编码
6
+ * 返回 Node.js TextDecoder 支持的编码名,默认 'utf-8'
7
+ */
8
+ export declare function detectEncoding(contentType: string | undefined, htmlHead: Buffer): string;
9
+ /** 将常见编码别名规范化为 TextDecoder 支持的名称 */
10
+ export declare function normalizeCharset(raw: string): string;
11
+ /**
12
+ * 扫描 Markdown 内容中的相对链接 [text](path.md),
13
+ * 解析为绝对路径并内联文件内容,避免 LLM 用 read_file 猜测路径
14
+ */
15
+ export declare function inlineMarkdownRefs(content: string, sourceFilePath: string): string;
16
+ //# sourceMappingURL=web-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-utils.d.ts","sourceRoot":"","sources":["../../../../src/tool/tools/web-utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAMrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBxF;AAED,oCAAoC;AACpC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASpD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CA2BlF"}
@@ -0,0 +1,88 @@
1
+ // ============================================================
2
+ // Web 工具共享辅助函数
3
+ // ============================================================
4
+ import TurndownService from 'turndown';
5
+ import { convert as htmlToText } from 'html-to-text';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ /** HTML → Markdown(基于 turndown) */
9
+ const turndownService = new TurndownService({ headingStyle: 'atx', codeBlockStyle: 'fenced' });
10
+ export function htmlToMarkdown(html) {
11
+ return turndownService.turndown(html);
12
+ }
13
+ export { htmlToText };
14
+ /**
15
+ * 从 Content-Type header 或 HTML meta 标签中检测字符编码
16
+ * 返回 Node.js TextDecoder 支持的编码名,默认 'utf-8'
17
+ */
18
+ export function detectEncoding(contentType, htmlHead) {
19
+ // 1. 从 Content-Type header 检测: charset=gbk
20
+ if (contentType) {
21
+ const match = contentType.match(/charset\s*=\s*([\w-]+)/i);
22
+ if (match)
23
+ return normalizeCharset(match[1]);
24
+ }
25
+ // 2. 从 HTML <meta> 检测(仅扫描前 1024 字节)
26
+ const head = htmlHead.slice(0, 1024).toString('ascii');
27
+ // <meta charset="gbk">
28
+ const metaCharset = head.match(/<meta[^>]+charset\s*=\s*["']?([\w-]+)/i);
29
+ if (metaCharset)
30
+ return normalizeCharset(metaCharset[1]);
31
+ // <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
32
+ const metaEquiv = head.match(/content\s*=\s*["'][^"']*charset=([\w-]+)/i);
33
+ if (metaEquiv)
34
+ return normalizeCharset(metaEquiv[1]);
35
+ return 'utf-8';
36
+ }
37
+ /** 将常见编码别名规范化为 TextDecoder 支持的名称 */
38
+ export function normalizeCharset(raw) {
39
+ const lower = raw.toLowerCase().replace(/[^a-z0-9]/g, '');
40
+ if (lower === 'gb2312' || lower === 'gbk' || lower === 'gb18030' || lower === 'cp936')
41
+ return 'gbk';
42
+ if (lower === 'big5' || lower === 'bigfive')
43
+ return 'big5';
44
+ if (lower === 'eucjp')
45
+ return 'euc-jp';
46
+ if (lower === 'shiftjis' || lower === 'sjis')
47
+ return 'shift_jis';
48
+ if (lower === 'euckr')
49
+ return 'euc-kr';
50
+ if (lower === 'utf8' || lower === 'utf-8')
51
+ return 'utf-8';
52
+ return raw.toLowerCase();
53
+ }
54
+ /**
55
+ * 扫描 Markdown 内容中的相对链接 [text](path.md),
56
+ * 解析为绝对路径并内联文件内容,避免 LLM 用 read_file 猜测路径
57
+ */
58
+ export function inlineMarkdownRefs(content, sourceFilePath) {
59
+ const dir = path.dirname(sourceFilePath);
60
+ // Match [text](relative-path.md) — skip http/https links
61
+ const linkRegex = /\[([^\]]+)\]\(([^)]+\.md)\)/g;
62
+ const MAX_INLINE_SIZE = 50000; // 50KB per file
63
+ const MAX_TOTAL_SIZE = 150000; // 150KB total
64
+ let totalInlined = content.length;
65
+ return content.replace(linkRegex, (match, text, refPath) => {
66
+ if (refPath.startsWith('http://') || refPath.startsWith('https://'))
67
+ return match;
68
+ const absPath = path.resolve(dir, refPath);
69
+ try {
70
+ if (!fs.existsSync(absPath))
71
+ return match;
72
+ const stat = fs.statSync(absPath);
73
+ if (stat.size > MAX_INLINE_SIZE) {
74
+ return `[${text}](${refPath}) — *file too large to inline (${Math.round(stat.size / 1024)}KB)*`;
75
+ }
76
+ if (totalInlined + stat.size > MAX_TOTAL_SIZE) {
77
+ return `[${text}](${refPath}) — *skipped: total inline budget exceeded*`;
78
+ }
79
+ const refContent = fs.readFileSync(absPath, 'utf-8');
80
+ totalInlined += refContent.length;
81
+ return `\n\n---\n## ${text}\n*Source: ${refPath}*\n\n${refContent}\n---\n`;
82
+ }
83
+ catch {
84
+ return match;
85
+ }
86
+ });
87
+ }
88
+ //# sourceMappingURL=web-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-utils.js","sourceRoot":"","sources":["../../../../src/tool/tools/web-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RegisteredTool } from '@cicctencent/agent-core';
2
+ export declare function createWebTools(): RegisteredTool[];
3
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../../src/tool/tools/web.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAW,MAAM,yBAAyB,CAAC;AAUvE,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAqUjD"}