ai-parrot 0.17.2__cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

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 (535) hide show
  1. agentui/.prettierrc +15 -0
  2. agentui/QUICKSTART.md +272 -0
  3. agentui/README.md +59 -0
  4. agentui/env.example +16 -0
  5. agentui/jsconfig.json +14 -0
  6. agentui/package-lock.json +4242 -0
  7. agentui/package.json +34 -0
  8. agentui/scripts/postinstall/apply-patches.mjs +260 -0
  9. agentui/src/app.css +61 -0
  10. agentui/src/app.d.ts +13 -0
  11. agentui/src/app.html +12 -0
  12. agentui/src/components/LoadingSpinner.svelte +64 -0
  13. agentui/src/components/ThemeSwitcher.svelte +159 -0
  14. agentui/src/components/index.js +4 -0
  15. agentui/src/lib/api/bots.ts +60 -0
  16. agentui/src/lib/api/chat.ts +22 -0
  17. agentui/src/lib/api/http.ts +25 -0
  18. agentui/src/lib/components/BotCard.svelte +33 -0
  19. agentui/src/lib/components/ChatBubble.svelte +63 -0
  20. agentui/src/lib/components/Toast.svelte +21 -0
  21. agentui/src/lib/config.ts +20 -0
  22. agentui/src/lib/stores/auth.svelte.ts +73 -0
  23. agentui/src/lib/stores/theme.svelte.js +64 -0
  24. agentui/src/lib/stores/toast.svelte.ts +31 -0
  25. agentui/src/lib/utils/conversation.ts +39 -0
  26. agentui/src/routes/+layout.svelte +20 -0
  27. agentui/src/routes/+page.svelte +232 -0
  28. agentui/src/routes/login/+page.svelte +200 -0
  29. agentui/src/routes/talk/[agentId]/+page.svelte +297 -0
  30. agentui/src/routes/talk/[agentId]/+page.ts +7 -0
  31. agentui/static/README.md +1 -0
  32. agentui/svelte.config.js +11 -0
  33. agentui/tailwind.config.ts +53 -0
  34. agentui/tsconfig.json +3 -0
  35. agentui/vite.config.ts +10 -0
  36. ai_parrot-0.17.2.dist-info/METADATA +472 -0
  37. ai_parrot-0.17.2.dist-info/RECORD +535 -0
  38. ai_parrot-0.17.2.dist-info/WHEEL +6 -0
  39. ai_parrot-0.17.2.dist-info/entry_points.txt +2 -0
  40. ai_parrot-0.17.2.dist-info/licenses/LICENSE +21 -0
  41. ai_parrot-0.17.2.dist-info/top_level.txt +6 -0
  42. crew-builder/.prettierrc +15 -0
  43. crew-builder/QUICKSTART.md +259 -0
  44. crew-builder/README.md +113 -0
  45. crew-builder/env.example +17 -0
  46. crew-builder/jsconfig.json +14 -0
  47. crew-builder/package-lock.json +4182 -0
  48. crew-builder/package.json +37 -0
  49. crew-builder/scripts/postinstall/apply-patches.mjs +260 -0
  50. crew-builder/src/app.css +62 -0
  51. crew-builder/src/app.d.ts +13 -0
  52. crew-builder/src/app.html +12 -0
  53. crew-builder/src/components/LoadingSpinner.svelte +64 -0
  54. crew-builder/src/components/ThemeSwitcher.svelte +149 -0
  55. crew-builder/src/components/index.js +9 -0
  56. crew-builder/src/lib/api/bots.ts +60 -0
  57. crew-builder/src/lib/api/chat.ts +80 -0
  58. crew-builder/src/lib/api/client.ts +56 -0
  59. crew-builder/src/lib/api/crew/crew.ts +136 -0
  60. crew-builder/src/lib/api/index.ts +5 -0
  61. crew-builder/src/lib/api/o365/auth.ts +65 -0
  62. crew-builder/src/lib/auth/auth.ts +54 -0
  63. crew-builder/src/lib/components/AgentNode.svelte +43 -0
  64. crew-builder/src/lib/components/BotCard.svelte +33 -0
  65. crew-builder/src/lib/components/ChatBubble.svelte +67 -0
  66. crew-builder/src/lib/components/ConfigPanel.svelte +278 -0
  67. crew-builder/src/lib/components/JsonTreeNode.svelte +76 -0
  68. crew-builder/src/lib/components/JsonViewer.svelte +24 -0
  69. crew-builder/src/lib/components/MarkdownEditor.svelte +48 -0
  70. crew-builder/src/lib/components/ThemeToggle.svelte +36 -0
  71. crew-builder/src/lib/components/Toast.svelte +67 -0
  72. crew-builder/src/lib/components/Toolbar.svelte +157 -0
  73. crew-builder/src/lib/components/index.ts +10 -0
  74. crew-builder/src/lib/config.ts +8 -0
  75. crew-builder/src/lib/stores/auth.svelte.ts +228 -0
  76. crew-builder/src/lib/stores/crewStore.ts +369 -0
  77. crew-builder/src/lib/stores/theme.svelte.js +145 -0
  78. crew-builder/src/lib/stores/toast.svelte.ts +69 -0
  79. crew-builder/src/lib/utils/conversation.ts +39 -0
  80. crew-builder/src/lib/utils/markdown.ts +122 -0
  81. crew-builder/src/lib/utils/talkHistory.ts +47 -0
  82. crew-builder/src/routes/+layout.svelte +20 -0
  83. crew-builder/src/routes/+page.svelte +539 -0
  84. crew-builder/src/routes/agents/+page.svelte +247 -0
  85. crew-builder/src/routes/agents/[agentId]/+page.svelte +288 -0
  86. crew-builder/src/routes/agents/[agentId]/+page.ts +7 -0
  87. crew-builder/src/routes/builder/+page.svelte +204 -0
  88. crew-builder/src/routes/crew/ask/+page.svelte +1052 -0
  89. crew-builder/src/routes/crew/ask/+page.ts +1 -0
  90. crew-builder/src/routes/integrations/o365/+page.svelte +304 -0
  91. crew-builder/src/routes/login/+page.svelte +197 -0
  92. crew-builder/src/routes/talk/[agentId]/+page.svelte +487 -0
  93. crew-builder/src/routes/talk/[agentId]/+page.ts +7 -0
  94. crew-builder/static/README.md +1 -0
  95. crew-builder/svelte.config.js +11 -0
  96. crew-builder/tailwind.config.ts +53 -0
  97. crew-builder/tsconfig.json +3 -0
  98. crew-builder/vite.config.ts +10 -0
  99. mcp_servers/calculator_server.py +309 -0
  100. parrot/__init__.py +27 -0
  101. parrot/__pycache__/__init__.cpython-310.pyc +0 -0
  102. parrot/__pycache__/version.cpython-310.pyc +0 -0
  103. parrot/_version.py +34 -0
  104. parrot/a2a/__init__.py +48 -0
  105. parrot/a2a/client.py +658 -0
  106. parrot/a2a/discovery.py +89 -0
  107. parrot/a2a/mixin.py +257 -0
  108. parrot/a2a/models.py +376 -0
  109. parrot/a2a/server.py +770 -0
  110. parrot/agents/__init__.py +29 -0
  111. parrot/bots/__init__.py +12 -0
  112. parrot/bots/a2a_agent.py +19 -0
  113. parrot/bots/abstract.py +3139 -0
  114. parrot/bots/agent.py +1129 -0
  115. parrot/bots/basic.py +9 -0
  116. parrot/bots/chatbot.py +669 -0
  117. parrot/bots/data.py +1618 -0
  118. parrot/bots/database/__init__.py +5 -0
  119. parrot/bots/database/abstract.py +3071 -0
  120. parrot/bots/database/cache.py +286 -0
  121. parrot/bots/database/models.py +468 -0
  122. parrot/bots/database/prompts.py +154 -0
  123. parrot/bots/database/retries.py +98 -0
  124. parrot/bots/database/router.py +269 -0
  125. parrot/bots/database/sql.py +41 -0
  126. parrot/bots/db/__init__.py +6 -0
  127. parrot/bots/db/abstract.py +556 -0
  128. parrot/bots/db/bigquery.py +602 -0
  129. parrot/bots/db/cache.py +85 -0
  130. parrot/bots/db/documentdb.py +668 -0
  131. parrot/bots/db/elastic.py +1014 -0
  132. parrot/bots/db/influx.py +898 -0
  133. parrot/bots/db/mock.py +96 -0
  134. parrot/bots/db/multi.py +783 -0
  135. parrot/bots/db/prompts.py +185 -0
  136. parrot/bots/db/sql.py +1255 -0
  137. parrot/bots/db/tools.py +212 -0
  138. parrot/bots/document.py +680 -0
  139. parrot/bots/hrbot.py +15 -0
  140. parrot/bots/kb.py +170 -0
  141. parrot/bots/mcp.py +36 -0
  142. parrot/bots/orchestration/README.md +463 -0
  143. parrot/bots/orchestration/__init__.py +1 -0
  144. parrot/bots/orchestration/agent.py +155 -0
  145. parrot/bots/orchestration/crew.py +3330 -0
  146. parrot/bots/orchestration/fsm.py +1179 -0
  147. parrot/bots/orchestration/hr.py +434 -0
  148. parrot/bots/orchestration/storage/__init__.py +4 -0
  149. parrot/bots/orchestration/storage/memory.py +100 -0
  150. parrot/bots/orchestration/storage/mixin.py +119 -0
  151. parrot/bots/orchestration/verify.py +202 -0
  152. parrot/bots/product.py +204 -0
  153. parrot/bots/prompts/__init__.py +96 -0
  154. parrot/bots/prompts/agents.py +155 -0
  155. parrot/bots/prompts/data.py +216 -0
  156. parrot/bots/prompts/output_generation.py +8 -0
  157. parrot/bots/scraper/__init__.py +3 -0
  158. parrot/bots/scraper/models.py +122 -0
  159. parrot/bots/scraper/scraper.py +1173 -0
  160. parrot/bots/scraper/templates.py +115 -0
  161. parrot/bots/stores/__init__.py +5 -0
  162. parrot/bots/stores/local.py +172 -0
  163. parrot/bots/webdev.py +81 -0
  164. parrot/cli.py +17 -0
  165. parrot/clients/__init__.py +16 -0
  166. parrot/clients/base.py +1491 -0
  167. parrot/clients/claude.py +1191 -0
  168. parrot/clients/factory.py +129 -0
  169. parrot/clients/google.py +4567 -0
  170. parrot/clients/gpt.py +1975 -0
  171. parrot/clients/grok.py +432 -0
  172. parrot/clients/groq.py +986 -0
  173. parrot/clients/hf.py +582 -0
  174. parrot/clients/models.py +18 -0
  175. parrot/conf.py +395 -0
  176. parrot/embeddings/__init__.py +9 -0
  177. parrot/embeddings/base.py +157 -0
  178. parrot/embeddings/google.py +98 -0
  179. parrot/embeddings/huggingface.py +74 -0
  180. parrot/embeddings/openai.py +84 -0
  181. parrot/embeddings/processor.py +88 -0
  182. parrot/exceptions.c +13868 -0
  183. parrot/exceptions.cpython-310-x86_64-linux-gnu.so +0 -0
  184. parrot/exceptions.pxd +22 -0
  185. parrot/exceptions.pxi +15 -0
  186. parrot/exceptions.pyx +44 -0
  187. parrot/generators/__init__.py +29 -0
  188. parrot/generators/base.py +200 -0
  189. parrot/generators/html.py +293 -0
  190. parrot/generators/react.py +205 -0
  191. parrot/generators/streamlit.py +203 -0
  192. parrot/generators/template.py +105 -0
  193. parrot/handlers/__init__.py +4 -0
  194. parrot/handlers/agent.py +861 -0
  195. parrot/handlers/agents/__init__.py +1 -0
  196. parrot/handlers/agents/abstract.py +900 -0
  197. parrot/handlers/bots.py +338 -0
  198. parrot/handlers/chat.py +915 -0
  199. parrot/handlers/creation.sql +192 -0
  200. parrot/handlers/crew/ARCHITECTURE.md +362 -0
  201. parrot/handlers/crew/README_BOTMANAGER_PERSISTENCE.md +303 -0
  202. parrot/handlers/crew/README_REDIS_PERSISTENCE.md +366 -0
  203. parrot/handlers/crew/__init__.py +0 -0
  204. parrot/handlers/crew/handler.py +801 -0
  205. parrot/handlers/crew/models.py +229 -0
  206. parrot/handlers/crew/redis_persistence.py +523 -0
  207. parrot/handlers/jobs/__init__.py +10 -0
  208. parrot/handlers/jobs/job.py +384 -0
  209. parrot/handlers/jobs/mixin.py +627 -0
  210. parrot/handlers/jobs/models.py +115 -0
  211. parrot/handlers/jobs/worker.py +31 -0
  212. parrot/handlers/models.py +596 -0
  213. parrot/handlers/o365_auth.py +105 -0
  214. parrot/handlers/stream.py +337 -0
  215. parrot/interfaces/__init__.py +6 -0
  216. parrot/interfaces/aws.py +143 -0
  217. parrot/interfaces/credentials.py +113 -0
  218. parrot/interfaces/database.py +27 -0
  219. parrot/interfaces/google.py +1123 -0
  220. parrot/interfaces/hierarchy.py +1227 -0
  221. parrot/interfaces/http.py +651 -0
  222. parrot/interfaces/images/__init__.py +0 -0
  223. parrot/interfaces/images/plugins/__init__.py +24 -0
  224. parrot/interfaces/images/plugins/abstract.py +58 -0
  225. parrot/interfaces/images/plugins/analisys.py +148 -0
  226. parrot/interfaces/images/plugins/classify.py +150 -0
  227. parrot/interfaces/images/plugins/classifybase.py +182 -0
  228. parrot/interfaces/images/plugins/detect.py +150 -0
  229. parrot/interfaces/images/plugins/exif.py +1103 -0
  230. parrot/interfaces/images/plugins/hash.py +52 -0
  231. parrot/interfaces/images/plugins/vision.py +104 -0
  232. parrot/interfaces/images/plugins/yolo.py +66 -0
  233. parrot/interfaces/images/plugins/zerodetect.py +197 -0
  234. parrot/interfaces/o365.py +978 -0
  235. parrot/interfaces/onedrive.py +822 -0
  236. parrot/interfaces/sharepoint.py +1435 -0
  237. parrot/interfaces/soap.py +257 -0
  238. parrot/loaders/__init__.py +8 -0
  239. parrot/loaders/abstract.py +1131 -0
  240. parrot/loaders/audio.py +199 -0
  241. parrot/loaders/basepdf.py +53 -0
  242. parrot/loaders/basevideo.py +1568 -0
  243. parrot/loaders/csv.py +409 -0
  244. parrot/loaders/docx.py +116 -0
  245. parrot/loaders/epubloader.py +316 -0
  246. parrot/loaders/excel.py +199 -0
  247. parrot/loaders/factory.py +55 -0
  248. parrot/loaders/files/__init__.py +0 -0
  249. parrot/loaders/files/abstract.py +39 -0
  250. parrot/loaders/files/html.py +26 -0
  251. parrot/loaders/files/text.py +63 -0
  252. parrot/loaders/html.py +152 -0
  253. parrot/loaders/markdown.py +442 -0
  254. parrot/loaders/pdf.py +373 -0
  255. parrot/loaders/pdfmark.py +320 -0
  256. parrot/loaders/pdftables.py +506 -0
  257. parrot/loaders/ppt.py +476 -0
  258. parrot/loaders/qa.py +63 -0
  259. parrot/loaders/splitters/__init__.py +10 -0
  260. parrot/loaders/splitters/base.py +138 -0
  261. parrot/loaders/splitters/md.py +228 -0
  262. parrot/loaders/splitters/token.py +143 -0
  263. parrot/loaders/txt.py +26 -0
  264. parrot/loaders/video.py +89 -0
  265. parrot/loaders/videolocal.py +218 -0
  266. parrot/loaders/videounderstanding.py +377 -0
  267. parrot/loaders/vimeo.py +167 -0
  268. parrot/loaders/web.py +599 -0
  269. parrot/loaders/youtube.py +504 -0
  270. parrot/manager/__init__.py +5 -0
  271. parrot/manager/manager.py +1030 -0
  272. parrot/mcp/__init__.py +28 -0
  273. parrot/mcp/adapter.py +105 -0
  274. parrot/mcp/cli.py +174 -0
  275. parrot/mcp/client.py +119 -0
  276. parrot/mcp/config.py +75 -0
  277. parrot/mcp/integration.py +842 -0
  278. parrot/mcp/oauth.py +933 -0
  279. parrot/mcp/server.py +225 -0
  280. parrot/mcp/transports/__init__.py +3 -0
  281. parrot/mcp/transports/base.py +279 -0
  282. parrot/mcp/transports/grpc_session.py +163 -0
  283. parrot/mcp/transports/http.py +312 -0
  284. parrot/mcp/transports/mcp.proto +108 -0
  285. parrot/mcp/transports/quic.py +1082 -0
  286. parrot/mcp/transports/sse.py +330 -0
  287. parrot/mcp/transports/stdio.py +309 -0
  288. parrot/mcp/transports/unix.py +395 -0
  289. parrot/mcp/transports/websocket.py +547 -0
  290. parrot/memory/__init__.py +16 -0
  291. parrot/memory/abstract.py +209 -0
  292. parrot/memory/agent.py +32 -0
  293. parrot/memory/cache.py +175 -0
  294. parrot/memory/core.py +555 -0
  295. parrot/memory/file.py +153 -0
  296. parrot/memory/mem.py +131 -0
  297. parrot/memory/redis.py +613 -0
  298. parrot/models/__init__.py +46 -0
  299. parrot/models/basic.py +118 -0
  300. parrot/models/compliance.py +208 -0
  301. parrot/models/crew.py +395 -0
  302. parrot/models/detections.py +654 -0
  303. parrot/models/generation.py +85 -0
  304. parrot/models/google.py +223 -0
  305. parrot/models/groq.py +23 -0
  306. parrot/models/openai.py +30 -0
  307. parrot/models/outputs.py +285 -0
  308. parrot/models/responses.py +938 -0
  309. parrot/notifications/__init__.py +743 -0
  310. parrot/openapi/__init__.py +3 -0
  311. parrot/openapi/components.yaml +641 -0
  312. parrot/openapi/config.py +322 -0
  313. parrot/outputs/__init__.py +32 -0
  314. parrot/outputs/formats/__init__.py +108 -0
  315. parrot/outputs/formats/altair.py +359 -0
  316. parrot/outputs/formats/application.py +122 -0
  317. parrot/outputs/formats/base.py +351 -0
  318. parrot/outputs/formats/bokeh.py +356 -0
  319. parrot/outputs/formats/card.py +424 -0
  320. parrot/outputs/formats/chart.py +436 -0
  321. parrot/outputs/formats/d3.py +255 -0
  322. parrot/outputs/formats/echarts.py +310 -0
  323. parrot/outputs/formats/generators/__init__.py +0 -0
  324. parrot/outputs/formats/generators/abstract.py +61 -0
  325. parrot/outputs/formats/generators/panel.py +145 -0
  326. parrot/outputs/formats/generators/streamlit.py +86 -0
  327. parrot/outputs/formats/generators/terminal.py +63 -0
  328. parrot/outputs/formats/holoviews.py +310 -0
  329. parrot/outputs/formats/html.py +147 -0
  330. parrot/outputs/formats/jinja2.py +46 -0
  331. parrot/outputs/formats/json.py +87 -0
  332. parrot/outputs/formats/map.py +933 -0
  333. parrot/outputs/formats/markdown.py +172 -0
  334. parrot/outputs/formats/matplotlib.py +237 -0
  335. parrot/outputs/formats/mixins/__init__.py +0 -0
  336. parrot/outputs/formats/mixins/emaps.py +855 -0
  337. parrot/outputs/formats/plotly.py +341 -0
  338. parrot/outputs/formats/seaborn.py +310 -0
  339. parrot/outputs/formats/table.py +397 -0
  340. parrot/outputs/formats/template_report.py +138 -0
  341. parrot/outputs/formats/yaml.py +125 -0
  342. parrot/outputs/formatter.py +152 -0
  343. parrot/outputs/templates/__init__.py +95 -0
  344. parrot/pipelines/__init__.py +0 -0
  345. parrot/pipelines/abstract.py +210 -0
  346. parrot/pipelines/detector.py +124 -0
  347. parrot/pipelines/models.py +90 -0
  348. parrot/pipelines/planogram.py +3002 -0
  349. parrot/pipelines/table.sql +97 -0
  350. parrot/plugins/__init__.py +106 -0
  351. parrot/plugins/importer.py +80 -0
  352. parrot/py.typed +0 -0
  353. parrot/registry/__init__.py +18 -0
  354. parrot/registry/registry.py +594 -0
  355. parrot/scheduler/__init__.py +1189 -0
  356. parrot/scheduler/models.py +60 -0
  357. parrot/security/__init__.py +16 -0
  358. parrot/security/prompt_injection.py +268 -0
  359. parrot/security/security_events.sql +25 -0
  360. parrot/services/__init__.py +1 -0
  361. parrot/services/mcp/__init__.py +8 -0
  362. parrot/services/mcp/config.py +13 -0
  363. parrot/services/mcp/server.py +295 -0
  364. parrot/services/o365_remote_auth.py +235 -0
  365. parrot/stores/__init__.py +7 -0
  366. parrot/stores/abstract.py +352 -0
  367. parrot/stores/arango.py +1090 -0
  368. parrot/stores/bigquery.py +1377 -0
  369. parrot/stores/cache.py +106 -0
  370. parrot/stores/empty.py +10 -0
  371. parrot/stores/faiss_store.py +1157 -0
  372. parrot/stores/kb/__init__.py +9 -0
  373. parrot/stores/kb/abstract.py +68 -0
  374. parrot/stores/kb/cache.py +165 -0
  375. parrot/stores/kb/doc.py +325 -0
  376. parrot/stores/kb/hierarchy.py +346 -0
  377. parrot/stores/kb/local.py +457 -0
  378. parrot/stores/kb/prompt.py +28 -0
  379. parrot/stores/kb/redis.py +659 -0
  380. parrot/stores/kb/store.py +115 -0
  381. parrot/stores/kb/user.py +374 -0
  382. parrot/stores/models.py +59 -0
  383. parrot/stores/pgvector.py +3 -0
  384. parrot/stores/postgres.py +2853 -0
  385. parrot/stores/utils/__init__.py +0 -0
  386. parrot/stores/utils/chunking.py +197 -0
  387. parrot/telemetry/__init__.py +3 -0
  388. parrot/telemetry/mixin.py +111 -0
  389. parrot/template/__init__.py +3 -0
  390. parrot/template/engine.py +259 -0
  391. parrot/tools/__init__.py +23 -0
  392. parrot/tools/abstract.py +644 -0
  393. parrot/tools/agent.py +363 -0
  394. parrot/tools/arangodbsearch.py +537 -0
  395. parrot/tools/arxiv_tool.py +188 -0
  396. parrot/tools/calculator/__init__.py +3 -0
  397. parrot/tools/calculator/operations/__init__.py +38 -0
  398. parrot/tools/calculator/operations/calculus.py +80 -0
  399. parrot/tools/calculator/operations/statistics.py +76 -0
  400. parrot/tools/calculator/tool.py +150 -0
  401. parrot/tools/cloudwatch.py +988 -0
  402. parrot/tools/codeinterpreter/__init__.py +127 -0
  403. parrot/tools/codeinterpreter/executor.py +371 -0
  404. parrot/tools/codeinterpreter/internals.py +473 -0
  405. parrot/tools/codeinterpreter/models.py +643 -0
  406. parrot/tools/codeinterpreter/prompts.py +224 -0
  407. parrot/tools/codeinterpreter/tool.py +664 -0
  408. parrot/tools/company_info/__init__.py +6 -0
  409. parrot/tools/company_info/tool.py +1138 -0
  410. parrot/tools/correlationanalysis.py +437 -0
  411. parrot/tools/database/abstract.py +286 -0
  412. parrot/tools/database/bq.py +115 -0
  413. parrot/tools/database/cache.py +284 -0
  414. parrot/tools/database/models.py +95 -0
  415. parrot/tools/database/pg.py +343 -0
  416. parrot/tools/databasequery.py +1159 -0
  417. parrot/tools/db.py +1800 -0
  418. parrot/tools/ddgo.py +370 -0
  419. parrot/tools/decorators.py +271 -0
  420. parrot/tools/dftohtml.py +282 -0
  421. parrot/tools/document.py +549 -0
  422. parrot/tools/ecs.py +819 -0
  423. parrot/tools/edareport.py +368 -0
  424. parrot/tools/elasticsearch.py +1049 -0
  425. parrot/tools/employees.py +462 -0
  426. parrot/tools/epson/__init__.py +96 -0
  427. parrot/tools/excel.py +683 -0
  428. parrot/tools/file/__init__.py +13 -0
  429. parrot/tools/file/abstract.py +76 -0
  430. parrot/tools/file/gcs.py +378 -0
  431. parrot/tools/file/local.py +284 -0
  432. parrot/tools/file/s3.py +511 -0
  433. parrot/tools/file/tmp.py +309 -0
  434. parrot/tools/file/tool.py +501 -0
  435. parrot/tools/file_reader.py +129 -0
  436. parrot/tools/flowtask/__init__.py +19 -0
  437. parrot/tools/flowtask/tool.py +761 -0
  438. parrot/tools/gittoolkit.py +508 -0
  439. parrot/tools/google/__init__.py +18 -0
  440. parrot/tools/google/base.py +169 -0
  441. parrot/tools/google/tools.py +1251 -0
  442. parrot/tools/googlelocation.py +5 -0
  443. parrot/tools/googleroutes.py +5 -0
  444. parrot/tools/googlesearch.py +5 -0
  445. parrot/tools/googlesitesearch.py +5 -0
  446. parrot/tools/googlevoice.py +2 -0
  447. parrot/tools/gvoice.py +695 -0
  448. parrot/tools/ibisworld/README.md +225 -0
  449. parrot/tools/ibisworld/__init__.py +11 -0
  450. parrot/tools/ibisworld/tool.py +366 -0
  451. parrot/tools/jiratoolkit.py +1718 -0
  452. parrot/tools/manager.py +1098 -0
  453. parrot/tools/math.py +152 -0
  454. parrot/tools/metadata.py +476 -0
  455. parrot/tools/msteams.py +1621 -0
  456. parrot/tools/msword.py +635 -0
  457. parrot/tools/multidb.py +580 -0
  458. parrot/tools/multistoresearch.py +369 -0
  459. parrot/tools/networkninja.py +167 -0
  460. parrot/tools/nextstop/__init__.py +4 -0
  461. parrot/tools/nextstop/base.py +286 -0
  462. parrot/tools/nextstop/employee.py +733 -0
  463. parrot/tools/nextstop/store.py +462 -0
  464. parrot/tools/notification.py +435 -0
  465. parrot/tools/o365/__init__.py +42 -0
  466. parrot/tools/o365/base.py +295 -0
  467. parrot/tools/o365/bundle.py +522 -0
  468. parrot/tools/o365/events.py +554 -0
  469. parrot/tools/o365/mail.py +992 -0
  470. parrot/tools/o365/onedrive.py +497 -0
  471. parrot/tools/o365/sharepoint.py +641 -0
  472. parrot/tools/openapi_toolkit.py +904 -0
  473. parrot/tools/openweather.py +527 -0
  474. parrot/tools/pdfprint.py +1001 -0
  475. parrot/tools/powerbi.py +518 -0
  476. parrot/tools/powerpoint.py +1113 -0
  477. parrot/tools/pricestool.py +146 -0
  478. parrot/tools/products/__init__.py +246 -0
  479. parrot/tools/prophet_tool.py +171 -0
  480. parrot/tools/pythonpandas.py +630 -0
  481. parrot/tools/pythonrepl.py +910 -0
  482. parrot/tools/qsource.py +436 -0
  483. parrot/tools/querytoolkit.py +395 -0
  484. parrot/tools/quickeda.py +827 -0
  485. parrot/tools/resttool.py +553 -0
  486. parrot/tools/retail/__init__.py +0 -0
  487. parrot/tools/retail/bby.py +528 -0
  488. parrot/tools/sandboxtool.py +703 -0
  489. parrot/tools/sassie/__init__.py +352 -0
  490. parrot/tools/scraping/__init__.py +7 -0
  491. parrot/tools/scraping/docs/select.md +466 -0
  492. parrot/tools/scraping/documentation.md +1278 -0
  493. parrot/tools/scraping/driver.py +436 -0
  494. parrot/tools/scraping/models.py +576 -0
  495. parrot/tools/scraping/options.py +85 -0
  496. parrot/tools/scraping/orchestrator.py +517 -0
  497. parrot/tools/scraping/readme.md +740 -0
  498. parrot/tools/scraping/tool.py +3115 -0
  499. parrot/tools/seasonaldetection.py +642 -0
  500. parrot/tools/shell_tool/__init__.py +5 -0
  501. parrot/tools/shell_tool/actions.py +408 -0
  502. parrot/tools/shell_tool/engine.py +155 -0
  503. parrot/tools/shell_tool/models.py +322 -0
  504. parrot/tools/shell_tool/tool.py +442 -0
  505. parrot/tools/site_search.py +214 -0
  506. parrot/tools/textfile.py +418 -0
  507. parrot/tools/think.py +378 -0
  508. parrot/tools/toolkit.py +298 -0
  509. parrot/tools/webapp_tool.py +187 -0
  510. parrot/tools/whatif.py +1279 -0
  511. parrot/tools/workday/MULTI_WSDL_EXAMPLE.md +249 -0
  512. parrot/tools/workday/__init__.py +6 -0
  513. parrot/tools/workday/models.py +1389 -0
  514. parrot/tools/workday/tool.py +1293 -0
  515. parrot/tools/yfinance_tool.py +306 -0
  516. parrot/tools/zipcode.py +217 -0
  517. parrot/utils/__init__.py +2 -0
  518. parrot/utils/helpers.py +73 -0
  519. parrot/utils/parsers/__init__.py +5 -0
  520. parrot/utils/parsers/toml.c +12078 -0
  521. parrot/utils/parsers/toml.cpython-310-x86_64-linux-gnu.so +0 -0
  522. parrot/utils/parsers/toml.pyx +21 -0
  523. parrot/utils/toml.py +11 -0
  524. parrot/utils/types.cpp +20936 -0
  525. parrot/utils/types.cpython-310-x86_64-linux-gnu.so +0 -0
  526. parrot/utils/types.pyx +213 -0
  527. parrot/utils/uv.py +11 -0
  528. parrot/version.py +10 -0
  529. parrot/yaml-rs/Cargo.lock +350 -0
  530. parrot/yaml-rs/Cargo.toml +19 -0
  531. parrot/yaml-rs/pyproject.toml +19 -0
  532. parrot/yaml-rs/python/yaml_rs/__init__.py +81 -0
  533. parrot/yaml-rs/src/lib.rs +222 -0
  534. requirements/docker-compose.yml +24 -0
  535. requirements/requirements-dev.txt +21 -0
@@ -0,0 +1,200 @@
1
+ <script>
2
+ import { goto } from '$app/navigation';
3
+ import { onMount } from 'svelte';
4
+ import { authStore } from '$lib/stores/auth.svelte.ts';
5
+ import { toastStore } from '$lib/stores/toast.svelte.ts';
6
+ import { LoadingSpinner } from '../../components';
7
+ import { config } from '$lib/config';
8
+
9
+ let username = $state(config.defaultUsername);
10
+ let password = $state(config.defaultPassword);
11
+ let error = $state('');
12
+ let loading = $state(false);
13
+ let showPassword = $state(false);
14
+ const environmentLabel = config.environmentLabel;
15
+
16
+ // Redirect if already authenticated
17
+ onMount(() => {
18
+ if ($authStore.isAuthenticated) {
19
+ goto('/');
20
+ }
21
+ });
22
+
23
+ async function handleSubmit(event) {
24
+ event.preventDefault();
25
+ error = '';
26
+ loading = true;
27
+
28
+ const result = await authStore.login(username, password);
29
+
30
+ if (!result.success) {
31
+ error = result.error;
32
+ loading = false;
33
+
34
+ // Show toast notification for better UX
35
+ toastStore.error(result.error, 5000);
36
+ } else {
37
+ loading = false;
38
+ toastStore.success('Login successful! Redirecting...', 2000);
39
+ goto('/');
40
+ }
41
+ }
42
+
43
+ function togglePasswordVisibility() {
44
+ showPassword = !showPassword;
45
+ }
46
+ </script>
47
+
48
+ <svelte:head>
49
+ <title>Login - AgentUI</title>
50
+ </svelte:head>
51
+
52
+ <div class="flex min-h-screen items-center justify-center bg-base-200 px-4 py-12">
53
+ <div class="w-full max-w-md">
54
+ <!-- Logo/Title -->
55
+ <div class="mb-8 text-center">
56
+ <h1 class="mb-2 text-4xl font-bold text-primary">AI-Parrot</h1>
57
+ <p class="text-base-content/70">AgentUI</p>
58
+ {#if environmentLabel}
59
+ <div class="badge badge-outline mt-2 uppercase tracking-wide">{environmentLabel}</div>
60
+ {/if}
61
+ </div>
62
+
63
+ <!-- Login Card -->
64
+ <div class="card bg-base-100 shadow-xl">
65
+ <div class="card-body">
66
+ <h2 class="card-title justify-center text-2xl">Welcome back</h2>
67
+ <p class="text-center text-sm text-base-content/70">Sign in to talk with your agents</p>
68
+
69
+ {#if error}
70
+ <div class="alert alert-error mt-4">
71
+ <svg
72
+ xmlns="http://www.w3.org/2000/svg"
73
+ class="h-6 w-6 shrink-0 stroke-current"
74
+ fill="none"
75
+ viewBox="0 0 24 24"
76
+ >
77
+ <path
78
+ stroke-linecap="round"
79
+ stroke-linejoin="round"
80
+ stroke-width="2"
81
+ d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
82
+ />
83
+ </svg>
84
+ <span>{error}</span>
85
+ </div>
86
+ {/if}
87
+
88
+ <form onsubmit={handleSubmit} class="mt-4 space-y-4">
89
+ <!-- Username -->
90
+ <div class="form-control">
91
+ <label class="label" for="username">
92
+ <span class="label-text">Username or Email</span>
93
+ </label>
94
+ <input
95
+ id="username"
96
+ type="text"
97
+ placeholder="Enter your username or email"
98
+ class="input input-bordered w-full"
99
+ bind:value={username}
100
+ disabled={loading}
101
+ required
102
+ autocomplete="username"
103
+ />
104
+ </div>
105
+
106
+ <!-- Password -->
107
+ <div class="form-control">
108
+ <label class="label" for="password">
109
+ <span class="label-text">Password</span>
110
+ </label>
111
+ <div class="relative">
112
+ <input
113
+ id="password"
114
+ type={showPassword ? 'text' : 'password'}
115
+ placeholder="Enter your password"
116
+ class="input input-bordered w-full pr-12"
117
+ bind:value={password}
118
+ disabled={loading}
119
+ required
120
+ autocomplete="current-password"
121
+ />
122
+ <button
123
+ type="button"
124
+ class="btn btn-ghost btn-sm absolute right-1 top-1"
125
+ onclick={togglePasswordVisibility}
126
+ tabindex="-1"
127
+ aria-label={showPassword ? 'Hide password' : 'Show password'}
128
+ >
129
+ {#if showPassword}
130
+ <svg
131
+ xmlns="http://www.w3.org/2000/svg"
132
+ class="h-5 w-5"
133
+ fill="none"
134
+ viewBox="0 0 24 24"
135
+ stroke="currentColor"
136
+ >
137
+ <path
138
+ stroke-linecap="round"
139
+ stroke-linejoin="round"
140
+ stroke-width="2"
141
+ d="M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.542 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"
142
+ />
143
+ </svg>
144
+ {:else}
145
+ <svg
146
+ xmlns="http://www.w3.org/2000/svg"
147
+ class="h-5 w-5"
148
+ fill="none"
149
+ viewBox="0 0 24 24"
150
+ stroke="currentColor"
151
+ >
152
+ <path
153
+ stroke-linecap="round"
154
+ stroke-linejoin="round"
155
+ stroke-width="2"
156
+ d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"
157
+ />
158
+ <path
159
+ stroke-linecap="round"
160
+ stroke-linejoin="round"
161
+ stroke-width="2"
162
+ d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
163
+ />
164
+ </svg>
165
+ {/if}
166
+ </button>
167
+ </div>
168
+ <label class="label">
169
+ <a href="/forgot-password" class="link-hover link label-text-alt">
170
+ Forgot password?
171
+ </a>
172
+ </label>
173
+ </div>
174
+
175
+ <!-- Submit Button -->
176
+ <button type="submit" class="btn btn-primary w-full" disabled={loading}>
177
+ {#if loading}
178
+ <LoadingSpinner size="sm" text="Signing in..." center={false} />
179
+ {:else}
180
+ Sign In
181
+ {/if}
182
+ </button>
183
+ </form>
184
+
185
+ <!-- Divider -->
186
+ <div class="divider">OR</div>
187
+
188
+ <!-- Register Link -->
189
+ <div class="text-center">
190
+ <p class="text-sm">Use the same credentials you use for the rest of AI Parrot.</p>
191
+ </div>
192
+ </div>
193
+ </div>
194
+
195
+ <!-- Footer -->
196
+ <div class="mt-8 text-center text-sm text-base-content/60">
197
+ <p>© 2025 AI-Parrot AgentUI. All rights reserved.</p>
198
+ </div>
199
+ </div>
200
+ </div>
@@ -0,0 +1,297 @@
1
+ <script lang="ts">
2
+ import { browser } from '$app/environment';
3
+ import { goto } from '$app/navigation';
4
+ import { onMount } from 'svelte';
5
+ import { authStore } from '$lib/stores/auth.svelte.ts';
6
+ import { botsApi, type BotSummary } from '$lib/api/bots';
7
+ import { chatApi, type ChatResponse } from '$lib/api/chat';
8
+ import { getTurn, saveTurn, loadConversation } from '$lib/utils/conversation';
9
+ import { ChatBubble, LoadingSpinner } from '../../../components';
10
+
11
+ export let data: { agentId: string };
12
+
13
+ let agent: BotSummary | null = $state(null);
14
+ type ChatMessage = {
15
+ id: string;
16
+ role: 'user' | 'assistant';
17
+ content: string;
18
+ timestamp: string;
19
+ turnId?: string;
20
+ };
21
+
22
+ let messages = $state<ChatMessage[]>([]);
23
+ let input = $state('');
24
+ let sending = $state(false);
25
+ let loading = $state(true);
26
+ let error = $state('');
27
+ let leftMenu = ['Chat', 'Content', 'Prompts', 'Playbooks'];
28
+ let selectedMenu = $state('Chat');
29
+ let selectedTurnId = $state<string | null>(null);
30
+ let selectedTurn = $state<ChatResponse | null>(null);
31
+ let storedTurnOrder = $state<string[]>([]);
32
+
33
+ const agentId = data.agentId;
34
+
35
+ async function loadAgent() {
36
+ if (!browser) return;
37
+ loading = true;
38
+ error = '';
39
+
40
+ try {
41
+ agent = await botsApi.getBot(agentId);
42
+ } catch (err: any) {
43
+ console.error('Failed to load agent', err);
44
+ error = err?.response?.data?.message || 'Unable to load the agent right now.';
45
+ agent = null;
46
+ } finally {
47
+ loading = false;
48
+ }
49
+ }
50
+
51
+ function loadStoredTurns() {
52
+ if (!browser) return;
53
+ const conversation = loadConversation(agentId);
54
+ storedTurnOrder = conversation.order;
55
+ }
56
+
57
+ async function sendMessage() {
58
+ if (!input.trim() || sending) return;
59
+
60
+ const text = input.trim();
61
+ input = '';
62
+
63
+ const userMessage = {
64
+ id: crypto.randomUUID(),
65
+ role: 'user' as const,
66
+ content: text,
67
+ timestamp: new Date().toISOString()
68
+ };
69
+ messages = [...messages, userMessage];
70
+ sending = true;
71
+ error = '';
72
+
73
+ try {
74
+ const response = await chatApi.sendChat(agentId, { query: text });
75
+ const reply = response?.response || response?.message || 'The agent did not return a response.';
76
+
77
+ const assistantMessage = {
78
+ id: crypto.randomUUID(),
79
+ role: 'assistant' as const,
80
+ content: reply,
81
+ timestamp: new Date().toISOString(),
82
+ turnId: response?.turn_id
83
+ };
84
+ messages = [...messages, assistantMessage];
85
+ if (response?.turn_id) {
86
+ saveTurn(agentId, response);
87
+ loadStoredTurns();
88
+ selectedTurnId = response.turn_id;
89
+ selectedTurn = response;
90
+ }
91
+ } catch (err: any) {
92
+ console.error('Chat failed', err);
93
+ error = err?.response?.data?.message || err?.message || 'Chat failed. Please try again.';
94
+ messages = messages.filter((message) => message.id !== userMessage.id);
95
+ } finally {
96
+ sending = false;
97
+ }
98
+ }
99
+
100
+ function handleKeydown(event: KeyboardEvent) {
101
+ if (event.key === 'Enter' && !event.shiftKey) {
102
+ event.preventDefault();
103
+ sendMessage();
104
+ }
105
+ }
106
+
107
+ onMount(() => {
108
+ if (!browser) return;
109
+ if (!$authStore.isAuthenticated && !$authStore.loading) {
110
+ goto('/login');
111
+ return;
112
+ }
113
+ loadAgent();
114
+ loadStoredTurns();
115
+ });
116
+
117
+ function handleBubbleSelect(event: CustomEvent<{ turnId: string }>) {
118
+ const { turnId } = event.detail;
119
+ if (!turnId) return;
120
+ selectedTurnId = turnId;
121
+ selectedTurn = getTurn(agentId, turnId);
122
+ }
123
+ </script>
124
+
125
+ <svelte:head>
126
+ <title>Chat - {agent?.name || 'Agent'}</title>
127
+ </svelte:head>
128
+
129
+ {#if loading}
130
+ <div class="flex min-h-screen items-center justify-center">
131
+ <LoadingSpinner text="Loading agent..." />
132
+ </div>
133
+ {:else if !agent}
134
+ <div class="flex min-h-screen flex-col items-center justify-center gap-4">
135
+ <p class="text-lg font-semibold text-base-content/80">{error || 'Agent not found.'}</p>
136
+ <button class="btn btn-primary" on:click={() => goto('/')}>Back to agents</button>
137
+ </div>
138
+ {:else}
139
+ <div class="min-h-screen bg-base-200/40">
140
+ <div class="mx-auto flex min-h-screen max-w-[1400px] gap-6 p-4 lg:p-8">
141
+ <!-- Left rail -->
142
+ <aside class="hidden w-56 flex-col rounded-3xl bg-base-100 p-6 shadow-xl lg:flex">
143
+ <div class="mb-6">
144
+ <p class="text-sm font-semibold text-base-content/60">{agent.category || 'Agent'}</p>
145
+ <h2 class="text-2xl font-bold">{agent.name}</h2>
146
+ <p class="text-sm text-base-content/70">{agent.description}</p>
147
+ </div>
148
+ <nav class="space-y-2">
149
+ {#each leftMenu as item}
150
+ <button
151
+ class={`btn btn-ghost w-full justify-start ${
152
+ selectedMenu === item ? 'bg-primary/10 text-primary' : 'text-base-content/80'
153
+ }`}
154
+ type="button"
155
+ on:click={() => (selectedMenu = item)}
156
+ >
157
+ {item}
158
+ </button>
159
+ {/each}
160
+ </nav>
161
+ <div class="mt-auto rounded-2xl bg-gradient-to-br from-primary to-indigo-600 p-4 text-sm text-primary-content">
162
+ <p class="font-semibold">Coming soon</p>
163
+ <p class="opacity-80">Quick access to prompts, automations, and knowledge.</p>
164
+ </div>
165
+ </aside>
166
+
167
+ <!-- Chat area -->
168
+ <section class="flex flex-1 flex-col gap-4">
169
+ <div class="rounded-3xl border border-base-200 bg-base-100 p-4 shadow-sm">
170
+ <div class="flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between">
171
+ <div>
172
+ <p class="text-sm text-base-content/60">Chat with</p>
173
+ <h1 class="text-2xl font-bold">{agent.name}</h1>
174
+ </div>
175
+ <div class="flex items-center gap-2 text-sm text-success">
176
+ <span class="h-2 w-2 rounded-full bg-success"></span>
177
+ Available
178
+ </div>
179
+ </div>
180
+ </div>
181
+
182
+ <div class="flex flex-1 flex-col gap-4 rounded-3xl border border-base-200 bg-base-100 p-6 shadow-lg">
183
+ <div class="flex-1 space-y-4 overflow-y-auto pr-2">
184
+ {#if messages.length === 0}
185
+ <div class="rounded-2xl bg-base-200/60 p-6 text-center text-base-content/70">
186
+ Say hello to start the conversation.
187
+ </div>
188
+ {:else}
189
+ {#each messages as message (message.id)}
190
+ <ChatBubble
191
+ role={message.role}
192
+ content={message.content}
193
+ timestamp={message.timestamp}
194
+ turnId={message.turnId}
195
+ selectable={message.role === 'assistant'}
196
+ selected={message.turnId ? message.turnId === selectedTurnId : false}
197
+ on:select={handleBubbleSelect}
198
+ />
199
+ {/each}
200
+ {/if}
201
+ </div>
202
+
203
+ {#if error}
204
+ <div class="alert alert-error">
205
+ <span>{error}</span>
206
+ </div>
207
+ {/if}
208
+
209
+ <div class="rounded-2xl border border-base-200 bg-base-100 p-4 shadow-inner">
210
+ <textarea
211
+ class="textarea textarea-ghost min-h-[120px] w-full resize-none text-base"
212
+ placeholder={`Ask ${agent.name} anything...`}
213
+ bind:value={input}
214
+ on:keydown={handleKeydown}
215
+ ></textarea>
216
+ <div class="mt-3 flex items-center justify-between">
217
+ <div class="flex gap-2 text-sm text-base-content/60">
218
+ <button class="btn btn-ghost btn-sm" type="button">➕ Attachment</button>
219
+ <button class="btn btn-ghost btn-sm" type="button">📎 Reference</button>
220
+ </div>
221
+ <button class="btn btn-primary" type="button" disabled={sending} on:click={sendMessage}>
222
+ {#if sending}
223
+ <LoadingSpinner size="sm" text="Asking..." center={false} />
224
+ {:else}
225
+ Send
226
+ {/if}
227
+ </button>
228
+ </div>
229
+ </div>
230
+ </div>
231
+ </section>
232
+
233
+ <!-- Right sidebar -->
234
+ <aside class="hidden w-80 flex-shrink-0 flex-col gap-4 rounded-3xl bg-base-100 p-6 shadow-xl xl:flex">
235
+ <div>
236
+ <p class="text-xs font-semibold uppercase tracking-wide text-base-content/60">Agent details</p>
237
+ <h3 class="text-xl font-semibold">{agent.name}</h3>
238
+ <p class="text-sm text-base-content/70">{agent.description || 'No description available.'}</p>
239
+ </div>
240
+ <div class="space-y-3 rounded-2xl bg-base-200/70 p-4 text-sm">
241
+ <div class="flex items-center justify-between">
242
+ <span class="text-base-content/70">Owner</span>
243
+ <span class="font-semibold">{agent.owner || 'N/A'}</span>
244
+ </div>
245
+ <div class="flex items-center justify-between">
246
+ <span class="text-base-content/70">Category</span>
247
+ <span class="font-semibold">{agent.category || 'General'}</span>
248
+ </div>
249
+ </div>
250
+
251
+ <div class="rounded-2xl border border-base-200 p-4 text-sm">
252
+ <div class="flex items-center justify-between">
253
+ <div>
254
+ <p class="text-xs font-semibold uppercase tracking-wide text-base-content/60">Turn inspector</p>
255
+ <p class="text-sm text-base-content/70">Click any assistant bubble to inspect the payload.</p>
256
+ </div>
257
+ {#if selectedTurnId}
258
+ <span class="badge badge-outline badge-sm">{selectedTurnId.slice(0, 8)}…</span>
259
+ {/if}
260
+ </div>
261
+
262
+ <details class="mt-3" open={!!selectedTurn}>
263
+ <summary class="cursor-pointer font-semibold">Response payload</summary>
264
+ {#if selectedTurn}
265
+ <pre class="mt-3 max-h-80 overflow-auto rounded-2xl bg-base-300/40 p-3 text-xs">
266
+ {JSON.stringify(selectedTurn, null, 2)}
267
+ </pre>
268
+ {:else}
269
+ <p class="mt-3 text-xs text-base-content/60">Select a turn to reveal the JSON response.</p>
270
+ {/if}
271
+ </details>
272
+
273
+ {#if storedTurnOrder.length > 0}
274
+ <div class="mt-4 space-y-1 text-xs">
275
+ <p class="font-semibold text-base-content">Stored turns</p>
276
+ {#each storedTurnOrder.slice().reverse() as turn}
277
+ <button
278
+ type="button"
279
+ class={`btn btn-ghost btn-xs w-full justify-between ${
280
+ selectedTurnId === turn ? 'text-primary' : 'text-base-content/70'
281
+ }`}
282
+ on:click={() => {
283
+ selectedTurnId = turn;
284
+ selectedTurn = getTurn(agentId, turn);
285
+ }}
286
+ >
287
+ <span>{turn.slice(0, 8)}…</span>
288
+ <span>Inspect</span>
289
+ </button>
290
+ {/each}
291
+ </div>
292
+ {/if}
293
+ </div>
294
+ </aside>
295
+ </div>
296
+ </div>
297
+ {/if}
@@ -0,0 +1,7 @@
1
+ import type { PageLoad } from './$types';
2
+
3
+ export const load: PageLoad = async ({ params }) => {
4
+ return {
5
+ agentId: params.agentId
6
+ };
7
+ };
@@ -0,0 +1 @@
1
+ ## Static files
@@ -0,0 +1,11 @@
1
+ import adapter from '@sveltejs/adapter-auto';
2
+ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3
+
4
+ const config = {
5
+ preprocess: vitePreprocess(),
6
+ kit: {
7
+ adapter: adapter()
8
+ }
9
+ };
10
+
11
+ export default config;
@@ -0,0 +1,53 @@
1
+ import type { Config } from 'tailwindcss';
2
+ import daisyui from 'daisyui';
3
+
4
+ export default {
5
+ content: ['./src/**/*.{html,js,svelte,ts}'],
6
+ theme: {
7
+ extend: {}
8
+ },
9
+ plugins: [daisyui],
10
+ daisyui: {
11
+ themes: [
12
+ 'light',
13
+ 'dark',
14
+ 'cupcake',
15
+ 'bumblebee',
16
+ 'emerald',
17
+ 'corporate',
18
+ 'synthwave',
19
+ 'retro',
20
+ 'cyberpunk',
21
+ 'valentine',
22
+ 'halloween',
23
+ 'garden',
24
+ 'forest',
25
+ 'aqua',
26
+ 'lofi',
27
+ 'pastel',
28
+ 'fantasy',
29
+ 'wireframe',
30
+ 'black',
31
+ 'luxury',
32
+ 'dracula',
33
+ 'cmyk',
34
+ 'autumn',
35
+ 'business',
36
+ 'acid',
37
+ 'lemonade',
38
+ 'night',
39
+ 'coffee',
40
+ 'winter',
41
+ 'dim',
42
+ 'nord',
43
+ 'sunset'
44
+ ],
45
+ darkTheme: 'dark',
46
+ base: true,
47
+ styled: true,
48
+ utils: true,
49
+ prefix: '',
50
+ logs: true,
51
+ themeRoot: ':root'
52
+ }
53
+ } satisfies Config;
agentui/tsconfig.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json"
3
+ }
agentui/vite.config.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { sveltekit } from '@sveltejs/kit/vite';
2
+ import tailwindcss from '@tailwindcss/vite';
3
+ import { defineConfig } from 'vite';
4
+
5
+ export default defineConfig({
6
+ plugins: [
7
+ tailwindcss(),
8
+ sveltekit()
9
+ ]
10
+ });