@revealui/ai 0.1.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 (397) hide show
  1. package/LICENSE +22 -0
  2. package/LICENSE.commercial +112 -0
  3. package/README.md +314 -0
  4. package/dist/a2a/card.d.ts +26 -0
  5. package/dist/a2a/card.d.ts.map +1 -0
  6. package/dist/a2a/card.js +173 -0
  7. package/dist/a2a/handler.d.ts +26 -0
  8. package/dist/a2a/handler.d.ts.map +1 -0
  9. package/dist/a2a/handler.js +170 -0
  10. package/dist/a2a/index.d.ts +10 -0
  11. package/dist/a2a/index.d.ts.map +1 -0
  12. package/dist/a2a/index.js +9 -0
  13. package/dist/a2a/task-store.d.ts +42 -0
  14. package/dist/a2a/task-store.d.ts.map +1 -0
  15. package/dist/a2a/task-store.js +99 -0
  16. package/dist/audit/emitter.d.ts +34 -0
  17. package/dist/audit/emitter.d.ts.map +1 -0
  18. package/dist/audit/emitter.js +34 -0
  19. package/dist/audit/index.d.ts +44 -0
  20. package/dist/audit/index.d.ts.map +1 -0
  21. package/dist/audit/index.js +48 -0
  22. package/dist/audit/observer.d.ts +108 -0
  23. package/dist/audit/observer.d.ts.map +1 -0
  24. package/dist/audit/observer.js +271 -0
  25. package/dist/audit/policy.d.ts +70 -0
  26. package/dist/audit/policy.d.ts.map +1 -0
  27. package/dist/audit/policy.js +209 -0
  28. package/dist/audit/store.d.ts +42 -0
  29. package/dist/audit/store.d.ts.map +1 -0
  30. package/dist/audit/store.js +80 -0
  31. package/dist/audit/types.d.ts +169 -0
  32. package/dist/audit/types.d.ts.map +1 -0
  33. package/dist/audit/types.js +80 -0
  34. package/dist/client/hooks/index.d.ts +22 -0
  35. package/dist/client/hooks/index.d.ts.map +1 -0
  36. package/dist/client/hooks/index.js +21 -0
  37. package/dist/client/hooks/useAgentContext.d.ts +30 -0
  38. package/dist/client/hooks/useAgentContext.d.ts.map +1 -0
  39. package/dist/client/hooks/useAgentContext.js +161 -0
  40. package/dist/client/hooks/useAgentEvents.d.ts +126 -0
  41. package/dist/client/hooks/useAgentEvents.d.ts.map +1 -0
  42. package/dist/client/hooks/useAgentEvents.js +232 -0
  43. package/dist/client/hooks/useAgentStream.d.ts +44 -0
  44. package/dist/client/hooks/useAgentStream.d.ts.map +1 -0
  45. package/dist/client/hooks/useAgentStream.js +101 -0
  46. package/dist/client/hooks/useEpisodicMemory.d.ts +25 -0
  47. package/dist/client/hooks/useEpisodicMemory.d.ts.map +1 -0
  48. package/dist/client/hooks/useEpisodicMemory.js +174 -0
  49. package/dist/client/hooks/useWorkingMemory.d.ts +57 -0
  50. package/dist/client/hooks/useWorkingMemory.d.ts.map +1 -0
  51. package/dist/client/hooks/useWorkingMemory.js +276 -0
  52. package/dist/client/index.d.ts +14 -0
  53. package/dist/client/index.d.ts.map +1 -0
  54. package/dist/client/index.js +13 -0
  55. package/dist/embeddings/index.d.ts +51 -0
  56. package/dist/embeddings/index.d.ts.map +1 -0
  57. package/dist/embeddings/index.js +73 -0
  58. package/dist/index.d.ts +83 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +103 -0
  61. package/dist/inference/context-assembly.d.ts +27 -0
  62. package/dist/inference/context-assembly.d.ts.map +1 -0
  63. package/dist/inference/context-assembly.js +81 -0
  64. package/dist/inference/overflow-compressor.d.ts +17 -0
  65. package/dist/inference/overflow-compressor.d.ts.map +1 -0
  66. package/dist/inference/overflow-compressor.js +40 -0
  67. package/dist/inference/runRag.d.ts +35 -0
  68. package/dist/inference/runRag.d.ts.map +1 -0
  69. package/dist/inference/runRag.js +53 -0
  70. package/dist/ingestion/bm25.d.ts +29 -0
  71. package/dist/ingestion/bm25.d.ts.map +1 -0
  72. package/dist/ingestion/bm25.js +161 -0
  73. package/dist/ingestion/cms-indexer.d.ts +39 -0
  74. package/dist/ingestion/cms-indexer.d.ts.map +1 -0
  75. package/dist/ingestion/cms-indexer.js +74 -0
  76. package/dist/ingestion/file-parsers.d.ts +51 -0
  77. package/dist/ingestion/file-parsers.d.ts.map +1 -0
  78. package/dist/ingestion/file-parsers.js +247 -0
  79. package/dist/ingestion/hybrid-search.d.ts +22 -0
  80. package/dist/ingestion/hybrid-search.d.ts.map +1 -0
  81. package/dist/ingestion/hybrid-search.js +63 -0
  82. package/dist/ingestion/index.d.ts +9 -0
  83. package/dist/ingestion/index.d.ts.map +1 -0
  84. package/dist/ingestion/index.js +8 -0
  85. package/dist/ingestion/pipeline.d.ts +35 -0
  86. package/dist/ingestion/pipeline.d.ts.map +1 -0
  87. package/dist/ingestion/pipeline.js +114 -0
  88. package/dist/ingestion/rag-vector-service.d.ts +34 -0
  89. package/dist/ingestion/rag-vector-service.d.ts.map +1 -0
  90. package/dist/ingestion/rag-vector-service.js +98 -0
  91. package/dist/ingestion/reranker.d.ts +10 -0
  92. package/dist/ingestion/reranker.d.ts.map +1 -0
  93. package/dist/ingestion/reranker.js +41 -0
  94. package/dist/ingestion/text-splitter.d.ts +25 -0
  95. package/dist/ingestion/text-splitter.d.ts.map +1 -0
  96. package/dist/ingestion/text-splitter.js +119 -0
  97. package/dist/llm/cache-utils.d.ts +146 -0
  98. package/dist/llm/cache-utils.d.ts.map +1 -0
  99. package/dist/llm/cache-utils.js +204 -0
  100. package/dist/llm/client.d.ts +134 -0
  101. package/dist/llm/client.d.ts.map +1 -0
  102. package/dist/llm/client.js +497 -0
  103. package/dist/llm/key-validator.d.ts +25 -0
  104. package/dist/llm/key-validator.d.ts.map +1 -0
  105. package/dist/llm/key-validator.js +101 -0
  106. package/dist/llm/provider-health.d.ts +40 -0
  107. package/dist/llm/provider-health.d.ts.map +1 -0
  108. package/dist/llm/provider-health.js +97 -0
  109. package/dist/llm/providers/anthropic.d.ts +31 -0
  110. package/dist/llm/providers/anthropic.d.ts.map +1 -0
  111. package/dist/llm/providers/anthropic.js +248 -0
  112. package/dist/llm/providers/base.d.ts +111 -0
  113. package/dist/llm/providers/base.d.ts.map +1 -0
  114. package/dist/llm/providers/base.js +6 -0
  115. package/dist/llm/providers/groq.d.ts +23 -0
  116. package/dist/llm/providers/groq.d.ts.map +1 -0
  117. package/dist/llm/providers/groq.js +27 -0
  118. package/dist/llm/providers/ollama.d.ts +27 -0
  119. package/dist/llm/providers/ollama.d.ts.map +1 -0
  120. package/dist/llm/providers/ollama.js +48 -0
  121. package/dist/llm/providers/openai.d.ts +19 -0
  122. package/dist/llm/providers/openai.d.ts.map +1 -0
  123. package/dist/llm/providers/openai.js +245 -0
  124. package/dist/llm/providers/vultr.d.ts +18 -0
  125. package/dist/llm/providers/vultr.d.ts.map +1 -0
  126. package/dist/llm/providers/vultr.js +168 -0
  127. package/dist/llm/response-cache.d.ts +166 -0
  128. package/dist/llm/response-cache.d.ts.map +1 -0
  129. package/dist/llm/response-cache.js +233 -0
  130. package/dist/llm/semantic-cache.d.ts +179 -0
  131. package/dist/llm/semantic-cache.d.ts.map +1 -0
  132. package/dist/llm/semantic-cache.js +306 -0
  133. package/dist/llm/server.d.ts +14 -0
  134. package/dist/llm/server.d.ts.map +1 -0
  135. package/dist/llm/server.js +15 -0
  136. package/dist/llm/token-counter.d.ts +48 -0
  137. package/dist/llm/token-counter.d.ts.map +1 -0
  138. package/dist/llm/token-counter.js +77 -0
  139. package/dist/llm/workspace-provider-config.d.ts +38 -0
  140. package/dist/llm/workspace-provider-config.d.ts.map +1 -0
  141. package/dist/llm/workspace-provider-config.js +47 -0
  142. package/dist/memory/agent/context-manager.d.ts +148 -0
  143. package/dist/memory/agent/context-manager.d.ts.map +1 -0
  144. package/dist/memory/agent/context-manager.js +284 -0
  145. package/dist/memory/agent/index.d.ts +7 -0
  146. package/dist/memory/agent/index.d.ts.map +1 -0
  147. package/dist/memory/agent/index.js +6 -0
  148. package/dist/memory/crdt/index.d.ts +13 -0
  149. package/dist/memory/crdt/index.d.ts.map +1 -0
  150. package/dist/memory/crdt/index.js +12 -0
  151. package/dist/memory/crdt/lww-register.d.ts +108 -0
  152. package/dist/memory/crdt/lww-register.d.ts.map +1 -0
  153. package/dist/memory/crdt/lww-register.js +169 -0
  154. package/dist/memory/crdt/or-set.d.ts +141 -0
  155. package/dist/memory/crdt/or-set.d.ts.map +1 -0
  156. package/dist/memory/crdt/or-set.js +291 -0
  157. package/dist/memory/crdt/pn-counter.d.ts +116 -0
  158. package/dist/memory/crdt/pn-counter.d.ts.map +1 -0
  159. package/dist/memory/crdt/pn-counter.js +174 -0
  160. package/dist/memory/crdt/vector-clock.d.ts +115 -0
  161. package/dist/memory/crdt/vector-clock.d.ts.map +1 -0
  162. package/dist/memory/crdt/vector-clock.js +179 -0
  163. package/dist/memory/errors/index.d.ts +56 -0
  164. package/dist/memory/errors/index.d.ts.map +1 -0
  165. package/dist/memory/errors/index.js +85 -0
  166. package/dist/memory/index.d.ts +21 -0
  167. package/dist/memory/index.d.ts.map +1 -0
  168. package/dist/memory/index.js +20 -0
  169. package/dist/memory/persistence/crdt-persistence.d.ts +85 -0
  170. package/dist/memory/persistence/crdt-persistence.d.ts.map +1 -0
  171. package/dist/memory/persistence/crdt-persistence.js +204 -0
  172. package/dist/memory/persistence/index.d.ts +7 -0
  173. package/dist/memory/persistence/index.d.ts.map +1 -0
  174. package/dist/memory/persistence/index.js +6 -0
  175. package/dist/memory/preferences/index.d.ts +7 -0
  176. package/dist/memory/preferences/index.d.ts.map +1 -0
  177. package/dist/memory/preferences/index.js +6 -0
  178. package/dist/memory/preferences/user-preferences-manager.d.ts +133 -0
  179. package/dist/memory/preferences/user-preferences-manager.d.ts.map +1 -0
  180. package/dist/memory/preferences/user-preferences-manager.js +342 -0
  181. package/dist/memory/services/index.d.ts +8 -0
  182. package/dist/memory/services/index.d.ts.map +1 -0
  183. package/dist/memory/services/index.js +6 -0
  184. package/dist/memory/services/node-id-service.d.ts +75 -0
  185. package/dist/memory/services/node-id-service.d.ts.map +1 -0
  186. package/dist/memory/services/node-id-service.js +190 -0
  187. package/dist/memory/stores/episodic-memory.d.ts +182 -0
  188. package/dist/memory/stores/episodic-memory.d.ts.map +1 -0
  189. package/dist/memory/stores/episodic-memory.js +378 -0
  190. package/dist/memory/stores/index.d.ts +16 -0
  191. package/dist/memory/stores/index.d.ts.map +1 -0
  192. package/dist/memory/stores/index.js +15 -0
  193. package/dist/memory/stores/procedural-memory.d.ts +89 -0
  194. package/dist/memory/stores/procedural-memory.d.ts.map +1 -0
  195. package/dist/memory/stores/procedural-memory.js +152 -0
  196. package/dist/memory/stores/semantic-memory.d.ts +92 -0
  197. package/dist/memory/stores/semantic-memory.d.ts.map +1 -0
  198. package/dist/memory/stores/semantic-memory.js +155 -0
  199. package/dist/memory/stores/working-memory.d.ts +225 -0
  200. package/dist/memory/stores/working-memory.d.ts.map +1 -0
  201. package/dist/memory/stores/working-memory.js +336 -0
  202. package/dist/memory/utils/deep-clone.d.ts +10 -0
  203. package/dist/memory/utils/deep-clone.d.ts.map +1 -0
  204. package/dist/memory/utils/deep-clone.js +9 -0
  205. package/dist/memory/utils/index.d.ts +8 -0
  206. package/dist/memory/utils/index.d.ts.map +1 -0
  207. package/dist/memory/utils/index.js +7 -0
  208. package/dist/memory/utils/logger.d.ts +21 -0
  209. package/dist/memory/utils/logger.d.ts.map +1 -0
  210. package/dist/memory/utils/logger.js +62 -0
  211. package/dist/memory/utils/sql-helpers.d.ts +97 -0
  212. package/dist/memory/utils/sql-helpers.d.ts.map +1 -0
  213. package/dist/memory/utils/sql-helpers.js +214 -0
  214. package/dist/memory/utils/validation.d.ts +62 -0
  215. package/dist/memory/utils/validation.d.ts.map +1 -0
  216. package/dist/memory/utils/validation.js +244 -0
  217. package/dist/memory/vector/index.d.ts +12 -0
  218. package/dist/memory/vector/index.d.ts.map +1 -0
  219. package/dist/memory/vector/index.js +14 -0
  220. package/dist/memory/vector/vector-memory-service.d.ts +88 -0
  221. package/dist/memory/vector/vector-memory-service.d.ts.map +1 -0
  222. package/dist/memory/vector/vector-memory-service.js +335 -0
  223. package/dist/observability/logger.d.ts +79 -0
  224. package/dist/observability/logger.d.ts.map +1 -0
  225. package/dist/observability/logger.js +165 -0
  226. package/dist/observability/metrics.d.ts +43 -0
  227. package/dist/observability/metrics.d.ts.map +1 -0
  228. package/dist/observability/metrics.js +197 -0
  229. package/dist/observability/query.d.ts +150 -0
  230. package/dist/observability/query.d.ts.map +1 -0
  231. package/dist/observability/query.js +339 -0
  232. package/dist/observability/types.d.ts +140 -0
  233. package/dist/observability/types.d.ts.map +1 -0
  234. package/dist/observability/types.js +6 -0
  235. package/dist/orchestration/agent.d.ts +98 -0
  236. package/dist/orchestration/agent.d.ts.map +1 -0
  237. package/dist/orchestration/agent.js +6 -0
  238. package/dist/orchestration/defaults.d.ts +21 -0
  239. package/dist/orchestration/defaults.d.ts.map +1 -0
  240. package/dist/orchestration/defaults.js +22 -0
  241. package/dist/orchestration/memory-integration.d.ts +58 -0
  242. package/dist/orchestration/memory-integration.d.ts.map +1 -0
  243. package/dist/orchestration/memory-integration.js +130 -0
  244. package/dist/orchestration/orchestrator.d.ts +67 -0
  245. package/dist/orchestration/orchestrator.d.ts.map +1 -0
  246. package/dist/orchestration/orchestrator.js +174 -0
  247. package/dist/orchestration/runtime.d.ts +82 -0
  248. package/dist/orchestration/runtime.d.ts.map +1 -0
  249. package/dist/orchestration/runtime.js +251 -0
  250. package/dist/orchestration/streaming-runtime.d.ts +36 -0
  251. package/dist/orchestration/streaming-runtime.d.ts.map +1 -0
  252. package/dist/orchestration/streaming-runtime.js +175 -0
  253. package/dist/orchestration/ticket-agent.d.ts +70 -0
  254. package/dist/orchestration/ticket-agent.d.ts.map +1 -0
  255. package/dist/orchestration/ticket-agent.js +146 -0
  256. package/dist/skills/activation/index.d.ts +7 -0
  257. package/dist/skills/activation/index.d.ts.map +1 -0
  258. package/dist/skills/activation/index.js +6 -0
  259. package/dist/skills/activation/skill-activator.d.ts +68 -0
  260. package/dist/skills/activation/skill-activator.d.ts.map +1 -0
  261. package/dist/skills/activation/skill-activator.js +224 -0
  262. package/dist/skills/catalog/catalog-search.d.ts +55 -0
  263. package/dist/skills/catalog/catalog-search.d.ts.map +1 -0
  264. package/dist/skills/catalog/catalog-search.js +111 -0
  265. package/dist/skills/catalog/catalog-types.d.ts +81 -0
  266. package/dist/skills/catalog/catalog-types.d.ts.map +1 -0
  267. package/dist/skills/catalog/catalog-types.js +66 -0
  268. package/dist/skills/catalog/index.d.ts +9 -0
  269. package/dist/skills/catalog/index.d.ts.map +1 -0
  270. package/dist/skills/catalog/index.js +7 -0
  271. package/dist/skills/catalog/vercel-catalog.d.ts +42 -0
  272. package/dist/skills/catalog/vercel-catalog.d.ts.map +1 -0
  273. package/dist/skills/catalog/vercel-catalog.js +189 -0
  274. package/dist/skills/compat/index.d.ts +9 -0
  275. package/dist/skills/compat/index.d.ts.map +1 -0
  276. package/dist/skills/compat/index.js +8 -0
  277. package/dist/skills/compat/skill-enhancer.d.ts +37 -0
  278. package/dist/skills/compat/skill-enhancer.d.ts.map +1 -0
  279. package/dist/skills/compat/skill-enhancer.js +76 -0
  280. package/dist/skills/compat/tool-mapper.d.ts +61 -0
  281. package/dist/skills/compat/tool-mapper.d.ts.map +1 -0
  282. package/dist/skills/compat/tool-mapper.js +168 -0
  283. package/dist/skills/compat/vercel-compat.d.ts +33 -0
  284. package/dist/skills/compat/vercel-compat.d.ts.map +1 -0
  285. package/dist/skills/compat/vercel-compat.js +132 -0
  286. package/dist/skills/index.d.ts +40 -0
  287. package/dist/skills/index.d.ts.map +1 -0
  288. package/dist/skills/index.js +47 -0
  289. package/dist/skills/integration/agent-skill-provider.d.ts +94 -0
  290. package/dist/skills/integration/agent-skill-provider.d.ts.map +1 -0
  291. package/dist/skills/integration/agent-skill-provider.js +161 -0
  292. package/dist/skills/integration/index.d.ts +7 -0
  293. package/dist/skills/integration/index.d.ts.map +1 -0
  294. package/dist/skills/integration/index.js +6 -0
  295. package/dist/skills/loader/github-loader.d.ts +61 -0
  296. package/dist/skills/loader/github-loader.d.ts.map +1 -0
  297. package/dist/skills/loader/github-loader.js +176 -0
  298. package/dist/skills/loader/index.d.ts +10 -0
  299. package/dist/skills/loader/index.d.ts.map +1 -0
  300. package/dist/skills/loader/index.js +9 -0
  301. package/dist/skills/loader/local-loader.d.ts +56 -0
  302. package/dist/skills/loader/local-loader.d.ts.map +1 -0
  303. package/dist/skills/loader/local-loader.js +186 -0
  304. package/dist/skills/loader/vercel-loader.d.ts +64 -0
  305. package/dist/skills/loader/vercel-loader.d.ts.map +1 -0
  306. package/dist/skills/loader/vercel-loader.js +313 -0
  307. package/dist/skills/loader/vercel-types.d.ts +64 -0
  308. package/dist/skills/loader/vercel-types.d.ts.map +1 -0
  309. package/dist/skills/loader/vercel-types.js +55 -0
  310. package/dist/skills/parser/index.d.ts +7 -0
  311. package/dist/skills/parser/index.d.ts.map +1 -0
  312. package/dist/skills/parser/index.js +6 -0
  313. package/dist/skills/parser/skill-md-parser.d.ts +64 -0
  314. package/dist/skills/parser/skill-md-parser.d.ts.map +1 -0
  315. package/dist/skills/parser/skill-md-parser.js +242 -0
  316. package/dist/skills/registry/index.d.ts +7 -0
  317. package/dist/skills/registry/index.d.ts.map +1 -0
  318. package/dist/skills/registry/index.js +6 -0
  319. package/dist/skills/registry/skill-registry.d.ts +133 -0
  320. package/dist/skills/registry/skill-registry.d.ts.map +1 -0
  321. package/dist/skills/registry/skill-registry.js +373 -0
  322. package/dist/skills/types.d.ts +216 -0
  323. package/dist/skills/types.d.ts.map +1 -0
  324. package/dist/skills/types.js +176 -0
  325. package/dist/templates/agent-spec.d.ts +138 -0
  326. package/dist/templates/agent-spec.d.ts.map +1 -0
  327. package/dist/templates/agent-spec.js +138 -0
  328. package/dist/templates/index.d.ts +56 -0
  329. package/dist/templates/index.d.ts.map +1 -0
  330. package/dist/templates/index.js +58 -0
  331. package/dist/templates/prompt-spec.d.ts +140 -0
  332. package/dist/templates/prompt-spec.d.ts.map +1 -0
  333. package/dist/templates/prompt-spec.js +210 -0
  334. package/dist/templates/skill-spec.d.ts +106 -0
  335. package/dist/templates/skill-spec.d.ts.map +1 -0
  336. package/dist/templates/skill-spec.js +119 -0
  337. package/dist/tools/base.d.ts +74 -0
  338. package/dist/tools/base.d.ts.map +1 -0
  339. package/dist/tools/base.js +6 -0
  340. package/dist/tools/cms/collection-tools.d.ts +36 -0
  341. package/dist/tools/cms/collection-tools.d.ts.map +1 -0
  342. package/dist/tools/cms/collection-tools.js +178 -0
  343. package/dist/tools/cms/factory.d.ts +89 -0
  344. package/dist/tools/cms/factory.d.ts.map +1 -0
  345. package/dist/tools/cms/factory.js +462 -0
  346. package/dist/tools/cms/global-tools.d.ts +21 -0
  347. package/dist/tools/cms/global-tools.d.ts.map +1 -0
  348. package/dist/tools/cms/global-tools.js +92 -0
  349. package/dist/tools/cms/index.d.ts +11 -0
  350. package/dist/tools/cms/index.d.ts.map +1 -0
  351. package/dist/tools/cms/index.js +11 -0
  352. package/dist/tools/cms/media-tools.d.ts +31 -0
  353. package/dist/tools/cms/media-tools.d.ts.map +1 -0
  354. package/dist/tools/cms/media-tools.js +140 -0
  355. package/dist/tools/cms/user-tools.d.ts +31 -0
  356. package/dist/tools/cms/user-tools.d.ts.map +1 -0
  357. package/dist/tools/cms/user-tools.js +135 -0
  358. package/dist/tools/deduplicator.d.ts +19 -0
  359. package/dist/tools/deduplicator.d.ts.map +1 -0
  360. package/dist/tools/deduplicator.js +53 -0
  361. package/dist/tools/document-summarizer.d.ts +11 -0
  362. package/dist/tools/document-summarizer.d.ts.map +1 -0
  363. package/dist/tools/document-summarizer.js +82 -0
  364. package/dist/tools/mcp-adapter.d.ts +66 -0
  365. package/dist/tools/mcp-adapter.d.ts.map +1 -0
  366. package/dist/tools/mcp-adapter.js +152 -0
  367. package/dist/tools/memory/index.d.ts +3 -0
  368. package/dist/tools/memory/index.d.ts.map +1 -0
  369. package/dist/tools/memory/index.js +1 -0
  370. package/dist/tools/memory/store-memory.d.ts +39 -0
  371. package/dist/tools/memory/store-memory.d.ts.map +1 -0
  372. package/dist/tools/memory/store-memory.js +94 -0
  373. package/dist/tools/registry.d.ts +14 -0
  374. package/dist/tools/registry.d.ts.map +1 -0
  375. package/dist/tools/registry.js +48 -0
  376. package/dist/tools/ticket-tools.d.ts +31 -0
  377. package/dist/tools/ticket-tools.d.ts.map +1 -0
  378. package/dist/tools/ticket-tools.js +74 -0
  379. package/dist/tools/web/duck-duck-go.d.ts +52 -0
  380. package/dist/tools/web/duck-duck-go.d.ts.map +1 -0
  381. package/dist/tools/web/duck-duck-go.js +202 -0
  382. package/dist/tools/web/exa.d.ts +34 -0
  383. package/dist/tools/web/exa.d.ts.map +1 -0
  384. package/dist/tools/web/exa.js +80 -0
  385. package/dist/tools/web/index.d.ts +6 -0
  386. package/dist/tools/web/index.d.ts.map +1 -0
  387. package/dist/tools/web/index.js +4 -0
  388. package/dist/tools/web/scraper.d.ts +9 -0
  389. package/dist/tools/web/scraper.d.ts.map +1 -0
  390. package/dist/tools/web/scraper.js +118 -0
  391. package/dist/tools/web/tavily.d.ts +32 -0
  392. package/dist/tools/web/tavily.d.ts.map +1 -0
  393. package/dist/tools/web/tavily.js +73 -0
  394. package/dist/tools/web/types.d.ts +31 -0
  395. package/dist/tools/web/types.d.ts.map +1 -0
  396. package/dist/tools/web/types.js +9 -0
  397. package/package.json +143 -0
@@ -0,0 +1,462 @@
1
+ /**
2
+ * CMS Tools Factory
3
+ * Creates CMS tools with API client injected for actual execution
4
+ */
5
+ import { createDocumentTool, deleteDocumentTool, findDocumentsTool, getDocumentTool, listCollectionsTool, updateDocumentTool, } from './collection-tools.js';
6
+ import { getGlobalTool, listGlobalsTool, updateGlobalTool } from './global-tools.js';
7
+ import { deleteMediaTool, getMediaTool, listMediaTool, updateMediaTool, uploadMediaTool, } from './media-tools.js';
8
+ import { createUserTool, deleteUserTool, getCurrentUserTool, listUsersTool, updateUserTool, } from './user-tools.js';
9
+ /**
10
+ * Create CMS tools with API client injected
11
+ * This factory function creates functional tools by injecting the actual API implementation
12
+ */
13
+ export function createCMSTools(config) {
14
+ const { apiClient, collections, globals, user } = config;
15
+ // Clone tools and inject API client implementation
16
+ const tools = [];
17
+ // Collection Tools
18
+ tools.push({
19
+ ...listCollectionsTool,
20
+ async execute() {
21
+ if (collections && collections.length > 0) {
22
+ return {
23
+ success: true,
24
+ data: { collections, count: collections.length },
25
+ };
26
+ }
27
+ return listCollectionsTool.execute({});
28
+ },
29
+ });
30
+ tools.push({
31
+ ...findDocumentsTool,
32
+ async execute(params) {
33
+ const { collection, page, limit, where, sort } = params;
34
+ try {
35
+ const response = await apiClient.find({
36
+ collection,
37
+ page,
38
+ limit,
39
+ where,
40
+ sort,
41
+ });
42
+ return {
43
+ success: true,
44
+ data: {
45
+ documents: response.docs || [],
46
+ totalDocs: response.totalDocs || 0,
47
+ page: response.page || 1,
48
+ totalPages: response.totalPages || 1,
49
+ },
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ success: false,
55
+ error: `Failed to find documents: ${error instanceof Error ? error.message : String(error)}`,
56
+ };
57
+ }
58
+ },
59
+ });
60
+ tools.push({
61
+ ...getDocumentTool,
62
+ async execute(params) {
63
+ const { collection, id } = params;
64
+ try {
65
+ const document = await apiClient.findById(collection, id);
66
+ return {
67
+ success: true,
68
+ data: document,
69
+ };
70
+ }
71
+ catch (error) {
72
+ return {
73
+ success: false,
74
+ error: `Failed to get document: ${error instanceof Error ? error.message : String(error)}`,
75
+ };
76
+ }
77
+ },
78
+ });
79
+ tools.push({
80
+ ...createDocumentTool,
81
+ async execute(params) {
82
+ const { collection, data } = params;
83
+ try {
84
+ const document = await apiClient.create({ collection, data });
85
+ return {
86
+ success: true,
87
+ data: document,
88
+ metadata: {
89
+ message: `Created ${collection} document successfully`,
90
+ },
91
+ };
92
+ }
93
+ catch (error) {
94
+ return {
95
+ success: false,
96
+ error: `Failed to create document: ${error instanceof Error ? error.message : String(error)}`,
97
+ };
98
+ }
99
+ },
100
+ });
101
+ tools.push({
102
+ ...updateDocumentTool,
103
+ async execute(params) {
104
+ const { collection, id, data } = params;
105
+ try {
106
+ const document = await apiClient.update({ collection, id, data });
107
+ return {
108
+ success: true,
109
+ data: document,
110
+ metadata: {
111
+ message: `Updated ${collection} document successfully`,
112
+ },
113
+ };
114
+ }
115
+ catch (error) {
116
+ return {
117
+ success: false,
118
+ error: `Failed to update document: ${error instanceof Error ? error.message : String(error)}`,
119
+ };
120
+ }
121
+ },
122
+ });
123
+ tools.push({
124
+ ...deleteDocumentTool,
125
+ async execute(params) {
126
+ const { collection, id } = params;
127
+ try {
128
+ await apiClient.delete({ collection, id });
129
+ return {
130
+ success: true,
131
+ metadata: {
132
+ message: `Deleted ${collection} document successfully`,
133
+ },
134
+ };
135
+ }
136
+ catch (error) {
137
+ return {
138
+ success: false,
139
+ error: `Failed to delete document: ${error instanceof Error ? error.message : String(error)}`,
140
+ };
141
+ }
142
+ },
143
+ });
144
+ // Global Tools
145
+ tools.push({
146
+ ...listGlobalsTool,
147
+ async execute() {
148
+ if (globals && globals.length > 0) {
149
+ return {
150
+ success: true,
151
+ data: { globals, count: globals.length },
152
+ };
153
+ }
154
+ return listGlobalsTool.execute({});
155
+ },
156
+ });
157
+ tools.push({
158
+ ...getGlobalTool,
159
+ async execute(params) {
160
+ const { slug, depth } = params;
161
+ try {
162
+ const global = await apiClient.findGlobal({ slug, depth });
163
+ return {
164
+ success: true,
165
+ data: global,
166
+ };
167
+ }
168
+ catch (error) {
169
+ return {
170
+ success: false,
171
+ error: `Failed to get global: ${error instanceof Error ? error.message : String(error)}`,
172
+ };
173
+ }
174
+ },
175
+ });
176
+ tools.push({
177
+ ...updateGlobalTool,
178
+ async execute(params) {
179
+ const { slug, data } = params;
180
+ try {
181
+ const global = await apiClient.updateGlobal({ slug, data });
182
+ return {
183
+ success: true,
184
+ data: global,
185
+ metadata: {
186
+ message: `Updated ${slug} global successfully`,
187
+ },
188
+ };
189
+ }
190
+ catch (error) {
191
+ return {
192
+ success: false,
193
+ error: `Failed to update global: ${error instanceof Error ? error.message : String(error)}`,
194
+ };
195
+ }
196
+ },
197
+ });
198
+ // Media Tools (use collection 'media' for now)
199
+ tools.push({
200
+ ...listMediaTool,
201
+ async execute(params) {
202
+ const { page, limit, mimeType } = params;
203
+ try {
204
+ const where = mimeType ? { mimeType } : undefined;
205
+ const response = await apiClient.find({
206
+ collection: 'media',
207
+ page,
208
+ limit,
209
+ where,
210
+ });
211
+ return {
212
+ success: true,
213
+ data: {
214
+ media: response.docs || [],
215
+ totalDocs: response.totalDocs || 0,
216
+ page: response.page || 1,
217
+ totalPages: response.totalPages || 1,
218
+ },
219
+ };
220
+ }
221
+ catch (error) {
222
+ return {
223
+ success: false,
224
+ error: `Failed to list media: ${error instanceof Error ? error.message : String(error)}`,
225
+ };
226
+ }
227
+ },
228
+ });
229
+ tools.push({
230
+ ...getMediaTool,
231
+ async execute(params) {
232
+ const { id } = params;
233
+ try {
234
+ const media = await apiClient.findById('media', id);
235
+ return {
236
+ success: true,
237
+ data: media,
238
+ };
239
+ }
240
+ catch (error) {
241
+ return {
242
+ success: false,
243
+ error: `Failed to get media: ${error instanceof Error ? error.message : String(error)}`,
244
+ };
245
+ }
246
+ },
247
+ });
248
+ tools.push({
249
+ ...uploadMediaTool,
250
+ async execute(params) {
251
+ const { filename, mimeType, data: _data, alt, } = params;
252
+ try {
253
+ // For now, create media document
254
+ // In full implementation, would upload to storage first
255
+ const media = await apiClient.create({
256
+ collection: 'media',
257
+ data: {
258
+ filename,
259
+ mimeType,
260
+ alt,
261
+ // Note: Actual file upload would happen here
262
+ },
263
+ });
264
+ return {
265
+ success: true,
266
+ data: media,
267
+ metadata: {
268
+ message: `Uploaded ${filename} successfully`,
269
+ },
270
+ };
271
+ }
272
+ catch (error) {
273
+ return {
274
+ success: false,
275
+ error: `Failed to upload media: ${error instanceof Error ? error.message : String(error)}`,
276
+ };
277
+ }
278
+ },
279
+ });
280
+ tools.push({
281
+ ...updateMediaTool,
282
+ async execute(params) {
283
+ const { id, alt, title, description } = params;
284
+ try {
285
+ const data = {};
286
+ if (alt !== undefined)
287
+ data.alt = alt;
288
+ if (title !== undefined)
289
+ data.title = title;
290
+ if (description !== undefined)
291
+ data.description = description;
292
+ const media = await apiClient.update({
293
+ collection: 'media',
294
+ id,
295
+ data,
296
+ });
297
+ return {
298
+ success: true,
299
+ data: media,
300
+ metadata: {
301
+ message: 'Updated media metadata successfully',
302
+ },
303
+ };
304
+ }
305
+ catch (error) {
306
+ return {
307
+ success: false,
308
+ error: `Failed to update media: ${error instanceof Error ? error.message : String(error)}`,
309
+ };
310
+ }
311
+ },
312
+ });
313
+ tools.push({
314
+ ...deleteMediaTool,
315
+ async execute(params) {
316
+ const { id } = params;
317
+ try {
318
+ await apiClient.delete({ collection: 'media', id });
319
+ return {
320
+ success: true,
321
+ metadata: {
322
+ message: 'Deleted media successfully',
323
+ },
324
+ };
325
+ }
326
+ catch (error) {
327
+ return {
328
+ success: false,
329
+ error: `Failed to delete media: ${error instanceof Error ? error.message : String(error)}`,
330
+ };
331
+ }
332
+ },
333
+ });
334
+ // User Tools (use collection 'users' for now)
335
+ tools.push({
336
+ ...getCurrentUserTool,
337
+ async execute() {
338
+ if (user) {
339
+ return {
340
+ success: true,
341
+ data: user,
342
+ };
343
+ }
344
+ return {
345
+ success: false,
346
+ error: 'No user context available',
347
+ };
348
+ },
349
+ });
350
+ tools.push({
351
+ ...listUsersTool,
352
+ async execute(params) {
353
+ const { page, limit, role } = params;
354
+ try {
355
+ const where = role ? { role } : undefined;
356
+ const response = await apiClient.find({
357
+ collection: 'users',
358
+ page,
359
+ limit,
360
+ where,
361
+ });
362
+ return {
363
+ success: true,
364
+ data: {
365
+ users: response.docs || [],
366
+ totalDocs: response.totalDocs || 0,
367
+ page: response.page || 1,
368
+ totalPages: response.totalPages || 1,
369
+ },
370
+ };
371
+ }
372
+ catch (error) {
373
+ return {
374
+ success: false,
375
+ error: `Failed to list users: ${error instanceof Error ? error.message : String(error)}`,
376
+ };
377
+ }
378
+ },
379
+ });
380
+ tools.push({
381
+ ...createUserTool,
382
+ async execute(params) {
383
+ const { email, password, name, role } = params;
384
+ try {
385
+ const user = await apiClient.create({
386
+ collection: 'users',
387
+ data: { email, password, name, role },
388
+ });
389
+ return {
390
+ success: true,
391
+ data: user,
392
+ metadata: {
393
+ message: `Created user ${email} successfully`,
394
+ },
395
+ };
396
+ }
397
+ catch (error) {
398
+ return {
399
+ success: false,
400
+ error: `Failed to create user: ${error instanceof Error ? error.message : String(error)}`,
401
+ };
402
+ }
403
+ },
404
+ });
405
+ tools.push({
406
+ ...updateUserTool,
407
+ async execute(params) {
408
+ const { id, email, name, role, password } = params;
409
+ try {
410
+ const data = {};
411
+ if (email !== undefined)
412
+ data.email = email;
413
+ if (name !== undefined)
414
+ data.name = name;
415
+ if (role !== undefined)
416
+ data.role = role;
417
+ if (password !== undefined)
418
+ data.password = password;
419
+ const user = await apiClient.update({
420
+ collection: 'users',
421
+ id,
422
+ data,
423
+ });
424
+ return {
425
+ success: true,
426
+ data: user,
427
+ metadata: {
428
+ message: 'Updated user successfully',
429
+ },
430
+ };
431
+ }
432
+ catch (error) {
433
+ return {
434
+ success: false,
435
+ error: `Failed to update user: ${error instanceof Error ? error.message : String(error)}`,
436
+ };
437
+ }
438
+ },
439
+ });
440
+ tools.push({
441
+ ...deleteUserTool,
442
+ async execute(params) {
443
+ const { id } = params;
444
+ try {
445
+ await apiClient.delete({ collection: 'users', id });
446
+ return {
447
+ success: true,
448
+ metadata: {
449
+ message: 'Deleted user successfully',
450
+ },
451
+ };
452
+ }
453
+ catch (error) {
454
+ return {
455
+ success: false,
456
+ error: `Failed to delete user: ${error instanceof Error ? error.message : String(error)}`,
457
+ };
458
+ }
459
+ },
460
+ });
461
+ return tools;
462
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * CMS Global Tools
3
+ * Tools for managing global content (Header, Footer, Settings)
4
+ */
5
+ import type { Tool } from '../base.js';
6
+ /**
7
+ * Tool: List all globals
8
+ * Returns available global configurations
9
+ */
10
+ export declare const listGlobalsTool: Tool;
11
+ /**
12
+ * Tool: Get a global by slug
13
+ * Retrieve global configuration data
14
+ */
15
+ export declare const getGlobalTool: Tool;
16
+ /**
17
+ * Tool: Update a global
18
+ * Modify global configuration
19
+ */
20
+ export declare const updateGlobalTool: Tool;
21
+ //# sourceMappingURL=global-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/cms/global-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,YAAY,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,IA6B7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,IAwB3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,IA+B9B,CAAA"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * CMS Global Tools
3
+ * Tools for managing global content (Header, Footer, Settings)
4
+ */
5
+ import { z } from 'zod/v4';
6
+ /**
7
+ * Tool: List all globals
8
+ * Returns available global configurations
9
+ */
10
+ export const listGlobalsTool = {
11
+ name: 'list_globals',
12
+ description: 'Get a list of all available CMS globals. Globals are site-wide settings like Header, Footer, and Settings.',
13
+ parameters: z.object({}),
14
+ async execute() {
15
+ try {
16
+ // This will be injected with RevealUI config at runtime
17
+ const globals = [
18
+ { slug: 'header', label: 'Header', description: 'Site header and navigation' },
19
+ { slug: 'footer', label: 'Footer', description: 'Site footer content' },
20
+ { slug: 'settings', label: 'Settings', description: 'Global site settings' },
21
+ ];
22
+ return {
23
+ success: true,
24
+ data: {
25
+ globals,
26
+ count: globals.length,
27
+ },
28
+ };
29
+ }
30
+ catch (error) {
31
+ return {
32
+ success: false,
33
+ error: `Failed to list globals: ${error instanceof Error ? error.message : String(error)}`,
34
+ };
35
+ }
36
+ },
37
+ };
38
+ /**
39
+ * Tool: Get a global by slug
40
+ * Retrieve global configuration data
41
+ */
42
+ export const getGlobalTool = {
43
+ name: 'get_global',
44
+ description: 'Get the current configuration of a CMS global. Use this to see the current state before updating (e.g., current header navigation items).',
45
+ parameters: z.object({
46
+ slug: z.string().describe('The global slug (e.g., "header", "footer", "settings")'),
47
+ depth: z.number().optional().describe('Depth of populated relationships (default: 0, max: 10)'),
48
+ }),
49
+ async execute(params) {
50
+ const { slug: _slug, depth: _depth = 0 } = params;
51
+ try {
52
+ // API client will be injected at runtime
53
+ throw new Error('API client not configured. This tool must be registered with an API client instance.');
54
+ }
55
+ catch (error) {
56
+ return {
57
+ success: false,
58
+ error: `Failed to get global: ${error instanceof Error ? error.message : String(error)}`,
59
+ };
60
+ }
61
+ },
62
+ };
63
+ /**
64
+ * Tool: Update a global
65
+ * Modify global configuration
66
+ */
67
+ export const updateGlobalTool = {
68
+ name: 'update_global',
69
+ description: 'Update a CMS global configuration. Use this to modify site-wide settings like header navigation, footer links, or global settings. Common uses:\n- Add/remove navigation links in header\n- Update footer content\n- Change site-wide settings\n\nExample for header navigation:\n{\n "slug": "header",\n "data": {\n "navItems": [\n {"link": {"type": "custom", "label": "Home", "url": "/"}},\n {"link": {"type": "custom", "label": "About", "url": "/about"}}\n ]\n }\n}',
70
+ parameters: z.object({
71
+ slug: z.string().describe('The global slug (e.g., "header", "footer", "settings")'),
72
+ data: z
73
+ .record(z.string(), z.unknown())
74
+ .describe('The global data to update as key-value pairs. For header/footer, this typically includes:\n' +
75
+ '- navItems: Array of navigation items\n' +
76
+ '- Each navItem has a "link" object with type, label, url, and optional newTab\n' +
77
+ 'Example: {navItems: [{link: {type: "custom", label: "Home", url: "/"}}]}'),
78
+ }),
79
+ async execute(params) {
80
+ const { slug: _slug, data: _data } = params;
81
+ try {
82
+ // API client will be injected at runtime
83
+ throw new Error('API client not configured. This tool must be registered with an API client instance.');
84
+ }
85
+ catch (error) {
86
+ return {
87
+ success: false,
88
+ error: `Failed to update global: ${error instanceof Error ? error.message : String(error)}`,
89
+ };
90
+ }
91
+ },
92
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CMS Tools Package
3
+ * Complete set of tools for AI-powered CMS management
4
+ */
5
+ export { createDocumentTool, deleteDocumentTool, findDocumentsTool, getDocumentTool, listCollectionsTool, updateDocumentTool, } from './collection-tools.js';
6
+ export type { CMSAPIClient, CMSToolsConfig, CollectionMetadata, GlobalMetadata, UserContext, } from './factory.js';
7
+ export { createCMSTools } from './factory.js';
8
+ export { getGlobalTool, listGlobalsTool, updateGlobalTool } from './global-tools.js';
9
+ export { deleteMediaTool, getMediaTool, listMediaTool, updateMediaTool, uploadMediaTool, } from './media-tools.js';
10
+ export { createUserTool, deleteUserTool, getCurrentUserTool, listUsersTool, updateUserTool, } from './user-tools.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/cms/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpF,OAAO,EACL,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CMS Tools Package
3
+ * Complete set of tools for AI-powered CMS management
4
+ */
5
+ // Export individual tool definitions (for documentation/reference)
6
+ export { createDocumentTool, deleteDocumentTool, findDocumentsTool, getDocumentTool, listCollectionsTool, updateDocumentTool, } from './collection-tools.js';
7
+ // Export factory for creating functional tools
8
+ export { createCMSTools } from './factory.js';
9
+ export { getGlobalTool, listGlobalsTool, updateGlobalTool } from './global-tools.js';
10
+ export { deleteMediaTool, getMediaTool, listMediaTool, updateMediaTool, uploadMediaTool, } from './media-tools.js';
11
+ export { createUserTool, deleteUserTool, getCurrentUserTool, listUsersTool, updateUserTool, } from './user-tools.js';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * CMS Media Tools
3
+ * Tools for managing media files (images, videos, documents)
4
+ */
5
+ import type { Tool } from '../base.js';
6
+ /**
7
+ * Tool: List media files
8
+ * Browse the media library
9
+ */
10
+ export declare const listMediaTool: Tool;
11
+ /**
12
+ * Tool: Get media by ID
13
+ * Retrieve a specific media file
14
+ */
15
+ export declare const getMediaTool: Tool;
16
+ /**
17
+ * Tool: Upload media
18
+ * Upload a new media file
19
+ */
20
+ export declare const uploadMediaTool: Tool;
21
+ /**
22
+ * Tool: Delete media
23
+ * Remove a media file from the library
24
+ */
25
+ export declare const deleteMediaTool: Tool;
26
+ /**
27
+ * Tool: Update media metadata
28
+ * Update media file metadata (alt text, title, etc.)
29
+ */
30
+ export declare const updateMediaTool: Tool;
31
+ //# sourceMappingURL=media-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/cms/media-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,YAAY,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,IAqC3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,IAsB1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,IAyC7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,IAuB7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,IAoC7B,CAAA"}