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.
- agentui/.prettierrc +15 -0
- agentui/QUICKSTART.md +272 -0
- agentui/README.md +59 -0
- agentui/env.example +16 -0
- agentui/jsconfig.json +14 -0
- agentui/package-lock.json +4242 -0
- agentui/package.json +34 -0
- agentui/scripts/postinstall/apply-patches.mjs +260 -0
- agentui/src/app.css +61 -0
- agentui/src/app.d.ts +13 -0
- agentui/src/app.html +12 -0
- agentui/src/components/LoadingSpinner.svelte +64 -0
- agentui/src/components/ThemeSwitcher.svelte +159 -0
- agentui/src/components/index.js +4 -0
- agentui/src/lib/api/bots.ts +60 -0
- agentui/src/lib/api/chat.ts +22 -0
- agentui/src/lib/api/http.ts +25 -0
- agentui/src/lib/components/BotCard.svelte +33 -0
- agentui/src/lib/components/ChatBubble.svelte +63 -0
- agentui/src/lib/components/Toast.svelte +21 -0
- agentui/src/lib/config.ts +20 -0
- agentui/src/lib/stores/auth.svelte.ts +73 -0
- agentui/src/lib/stores/theme.svelte.js +64 -0
- agentui/src/lib/stores/toast.svelte.ts +31 -0
- agentui/src/lib/utils/conversation.ts +39 -0
- agentui/src/routes/+layout.svelte +20 -0
- agentui/src/routes/+page.svelte +232 -0
- agentui/src/routes/login/+page.svelte +200 -0
- agentui/src/routes/talk/[agentId]/+page.svelte +297 -0
- agentui/src/routes/talk/[agentId]/+page.ts +7 -0
- agentui/static/README.md +1 -0
- agentui/svelte.config.js +11 -0
- agentui/tailwind.config.ts +53 -0
- agentui/tsconfig.json +3 -0
- agentui/vite.config.ts +10 -0
- ai_parrot-0.17.2.dist-info/METADATA +472 -0
- ai_parrot-0.17.2.dist-info/RECORD +535 -0
- ai_parrot-0.17.2.dist-info/WHEEL +6 -0
- ai_parrot-0.17.2.dist-info/entry_points.txt +2 -0
- ai_parrot-0.17.2.dist-info/licenses/LICENSE +21 -0
- ai_parrot-0.17.2.dist-info/top_level.txt +6 -0
- crew-builder/.prettierrc +15 -0
- crew-builder/QUICKSTART.md +259 -0
- crew-builder/README.md +113 -0
- crew-builder/env.example +17 -0
- crew-builder/jsconfig.json +14 -0
- crew-builder/package-lock.json +4182 -0
- crew-builder/package.json +37 -0
- crew-builder/scripts/postinstall/apply-patches.mjs +260 -0
- crew-builder/src/app.css +62 -0
- crew-builder/src/app.d.ts +13 -0
- crew-builder/src/app.html +12 -0
- crew-builder/src/components/LoadingSpinner.svelte +64 -0
- crew-builder/src/components/ThemeSwitcher.svelte +149 -0
- crew-builder/src/components/index.js +9 -0
- crew-builder/src/lib/api/bots.ts +60 -0
- crew-builder/src/lib/api/chat.ts +80 -0
- crew-builder/src/lib/api/client.ts +56 -0
- crew-builder/src/lib/api/crew/crew.ts +136 -0
- crew-builder/src/lib/api/index.ts +5 -0
- crew-builder/src/lib/api/o365/auth.ts +65 -0
- crew-builder/src/lib/auth/auth.ts +54 -0
- crew-builder/src/lib/components/AgentNode.svelte +43 -0
- crew-builder/src/lib/components/BotCard.svelte +33 -0
- crew-builder/src/lib/components/ChatBubble.svelte +67 -0
- crew-builder/src/lib/components/ConfigPanel.svelte +278 -0
- crew-builder/src/lib/components/JsonTreeNode.svelte +76 -0
- crew-builder/src/lib/components/JsonViewer.svelte +24 -0
- crew-builder/src/lib/components/MarkdownEditor.svelte +48 -0
- crew-builder/src/lib/components/ThemeToggle.svelte +36 -0
- crew-builder/src/lib/components/Toast.svelte +67 -0
- crew-builder/src/lib/components/Toolbar.svelte +157 -0
- crew-builder/src/lib/components/index.ts +10 -0
- crew-builder/src/lib/config.ts +8 -0
- crew-builder/src/lib/stores/auth.svelte.ts +228 -0
- crew-builder/src/lib/stores/crewStore.ts +369 -0
- crew-builder/src/lib/stores/theme.svelte.js +145 -0
- crew-builder/src/lib/stores/toast.svelte.ts +69 -0
- crew-builder/src/lib/utils/conversation.ts +39 -0
- crew-builder/src/lib/utils/markdown.ts +122 -0
- crew-builder/src/lib/utils/talkHistory.ts +47 -0
- crew-builder/src/routes/+layout.svelte +20 -0
- crew-builder/src/routes/+page.svelte +539 -0
- crew-builder/src/routes/agents/+page.svelte +247 -0
- crew-builder/src/routes/agents/[agentId]/+page.svelte +288 -0
- crew-builder/src/routes/agents/[agentId]/+page.ts +7 -0
- crew-builder/src/routes/builder/+page.svelte +204 -0
- crew-builder/src/routes/crew/ask/+page.svelte +1052 -0
- crew-builder/src/routes/crew/ask/+page.ts +1 -0
- crew-builder/src/routes/integrations/o365/+page.svelte +304 -0
- crew-builder/src/routes/login/+page.svelte +197 -0
- crew-builder/src/routes/talk/[agentId]/+page.svelte +487 -0
- crew-builder/src/routes/talk/[agentId]/+page.ts +7 -0
- crew-builder/static/README.md +1 -0
- crew-builder/svelte.config.js +11 -0
- crew-builder/tailwind.config.ts +53 -0
- crew-builder/tsconfig.json +3 -0
- crew-builder/vite.config.ts +10 -0
- mcp_servers/calculator_server.py +309 -0
- parrot/__init__.py +27 -0
- parrot/__pycache__/__init__.cpython-310.pyc +0 -0
- parrot/__pycache__/version.cpython-310.pyc +0 -0
- parrot/_version.py +34 -0
- parrot/a2a/__init__.py +48 -0
- parrot/a2a/client.py +658 -0
- parrot/a2a/discovery.py +89 -0
- parrot/a2a/mixin.py +257 -0
- parrot/a2a/models.py +376 -0
- parrot/a2a/server.py +770 -0
- parrot/agents/__init__.py +29 -0
- parrot/bots/__init__.py +12 -0
- parrot/bots/a2a_agent.py +19 -0
- parrot/bots/abstract.py +3139 -0
- parrot/bots/agent.py +1129 -0
- parrot/bots/basic.py +9 -0
- parrot/bots/chatbot.py +669 -0
- parrot/bots/data.py +1618 -0
- parrot/bots/database/__init__.py +5 -0
- parrot/bots/database/abstract.py +3071 -0
- parrot/bots/database/cache.py +286 -0
- parrot/bots/database/models.py +468 -0
- parrot/bots/database/prompts.py +154 -0
- parrot/bots/database/retries.py +98 -0
- parrot/bots/database/router.py +269 -0
- parrot/bots/database/sql.py +41 -0
- parrot/bots/db/__init__.py +6 -0
- parrot/bots/db/abstract.py +556 -0
- parrot/bots/db/bigquery.py +602 -0
- parrot/bots/db/cache.py +85 -0
- parrot/bots/db/documentdb.py +668 -0
- parrot/bots/db/elastic.py +1014 -0
- parrot/bots/db/influx.py +898 -0
- parrot/bots/db/mock.py +96 -0
- parrot/bots/db/multi.py +783 -0
- parrot/bots/db/prompts.py +185 -0
- parrot/bots/db/sql.py +1255 -0
- parrot/bots/db/tools.py +212 -0
- parrot/bots/document.py +680 -0
- parrot/bots/hrbot.py +15 -0
- parrot/bots/kb.py +170 -0
- parrot/bots/mcp.py +36 -0
- parrot/bots/orchestration/README.md +463 -0
- parrot/bots/orchestration/__init__.py +1 -0
- parrot/bots/orchestration/agent.py +155 -0
- parrot/bots/orchestration/crew.py +3330 -0
- parrot/bots/orchestration/fsm.py +1179 -0
- parrot/bots/orchestration/hr.py +434 -0
- parrot/bots/orchestration/storage/__init__.py +4 -0
- parrot/bots/orchestration/storage/memory.py +100 -0
- parrot/bots/orchestration/storage/mixin.py +119 -0
- parrot/bots/orchestration/verify.py +202 -0
- parrot/bots/product.py +204 -0
- parrot/bots/prompts/__init__.py +96 -0
- parrot/bots/prompts/agents.py +155 -0
- parrot/bots/prompts/data.py +216 -0
- parrot/bots/prompts/output_generation.py +8 -0
- parrot/bots/scraper/__init__.py +3 -0
- parrot/bots/scraper/models.py +122 -0
- parrot/bots/scraper/scraper.py +1173 -0
- parrot/bots/scraper/templates.py +115 -0
- parrot/bots/stores/__init__.py +5 -0
- parrot/bots/stores/local.py +172 -0
- parrot/bots/webdev.py +81 -0
- parrot/cli.py +17 -0
- parrot/clients/__init__.py +16 -0
- parrot/clients/base.py +1491 -0
- parrot/clients/claude.py +1191 -0
- parrot/clients/factory.py +129 -0
- parrot/clients/google.py +4567 -0
- parrot/clients/gpt.py +1975 -0
- parrot/clients/grok.py +432 -0
- parrot/clients/groq.py +986 -0
- parrot/clients/hf.py +582 -0
- parrot/clients/models.py +18 -0
- parrot/conf.py +395 -0
- parrot/embeddings/__init__.py +9 -0
- parrot/embeddings/base.py +157 -0
- parrot/embeddings/google.py +98 -0
- parrot/embeddings/huggingface.py +74 -0
- parrot/embeddings/openai.py +84 -0
- parrot/embeddings/processor.py +88 -0
- parrot/exceptions.c +13868 -0
- parrot/exceptions.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/exceptions.pxd +22 -0
- parrot/exceptions.pxi +15 -0
- parrot/exceptions.pyx +44 -0
- parrot/generators/__init__.py +29 -0
- parrot/generators/base.py +200 -0
- parrot/generators/html.py +293 -0
- parrot/generators/react.py +205 -0
- parrot/generators/streamlit.py +203 -0
- parrot/generators/template.py +105 -0
- parrot/handlers/__init__.py +4 -0
- parrot/handlers/agent.py +861 -0
- parrot/handlers/agents/__init__.py +1 -0
- parrot/handlers/agents/abstract.py +900 -0
- parrot/handlers/bots.py +338 -0
- parrot/handlers/chat.py +915 -0
- parrot/handlers/creation.sql +192 -0
- parrot/handlers/crew/ARCHITECTURE.md +362 -0
- parrot/handlers/crew/README_BOTMANAGER_PERSISTENCE.md +303 -0
- parrot/handlers/crew/README_REDIS_PERSISTENCE.md +366 -0
- parrot/handlers/crew/__init__.py +0 -0
- parrot/handlers/crew/handler.py +801 -0
- parrot/handlers/crew/models.py +229 -0
- parrot/handlers/crew/redis_persistence.py +523 -0
- parrot/handlers/jobs/__init__.py +10 -0
- parrot/handlers/jobs/job.py +384 -0
- parrot/handlers/jobs/mixin.py +627 -0
- parrot/handlers/jobs/models.py +115 -0
- parrot/handlers/jobs/worker.py +31 -0
- parrot/handlers/models.py +596 -0
- parrot/handlers/o365_auth.py +105 -0
- parrot/handlers/stream.py +337 -0
- parrot/interfaces/__init__.py +6 -0
- parrot/interfaces/aws.py +143 -0
- parrot/interfaces/credentials.py +113 -0
- parrot/interfaces/database.py +27 -0
- parrot/interfaces/google.py +1123 -0
- parrot/interfaces/hierarchy.py +1227 -0
- parrot/interfaces/http.py +651 -0
- parrot/interfaces/images/__init__.py +0 -0
- parrot/interfaces/images/plugins/__init__.py +24 -0
- parrot/interfaces/images/plugins/abstract.py +58 -0
- parrot/interfaces/images/plugins/analisys.py +148 -0
- parrot/interfaces/images/plugins/classify.py +150 -0
- parrot/interfaces/images/plugins/classifybase.py +182 -0
- parrot/interfaces/images/plugins/detect.py +150 -0
- parrot/interfaces/images/plugins/exif.py +1103 -0
- parrot/interfaces/images/plugins/hash.py +52 -0
- parrot/interfaces/images/plugins/vision.py +104 -0
- parrot/interfaces/images/plugins/yolo.py +66 -0
- parrot/interfaces/images/plugins/zerodetect.py +197 -0
- parrot/interfaces/o365.py +978 -0
- parrot/interfaces/onedrive.py +822 -0
- parrot/interfaces/sharepoint.py +1435 -0
- parrot/interfaces/soap.py +257 -0
- parrot/loaders/__init__.py +8 -0
- parrot/loaders/abstract.py +1131 -0
- parrot/loaders/audio.py +199 -0
- parrot/loaders/basepdf.py +53 -0
- parrot/loaders/basevideo.py +1568 -0
- parrot/loaders/csv.py +409 -0
- parrot/loaders/docx.py +116 -0
- parrot/loaders/epubloader.py +316 -0
- parrot/loaders/excel.py +199 -0
- parrot/loaders/factory.py +55 -0
- parrot/loaders/files/__init__.py +0 -0
- parrot/loaders/files/abstract.py +39 -0
- parrot/loaders/files/html.py +26 -0
- parrot/loaders/files/text.py +63 -0
- parrot/loaders/html.py +152 -0
- parrot/loaders/markdown.py +442 -0
- parrot/loaders/pdf.py +373 -0
- parrot/loaders/pdfmark.py +320 -0
- parrot/loaders/pdftables.py +506 -0
- parrot/loaders/ppt.py +476 -0
- parrot/loaders/qa.py +63 -0
- parrot/loaders/splitters/__init__.py +10 -0
- parrot/loaders/splitters/base.py +138 -0
- parrot/loaders/splitters/md.py +228 -0
- parrot/loaders/splitters/token.py +143 -0
- parrot/loaders/txt.py +26 -0
- parrot/loaders/video.py +89 -0
- parrot/loaders/videolocal.py +218 -0
- parrot/loaders/videounderstanding.py +377 -0
- parrot/loaders/vimeo.py +167 -0
- parrot/loaders/web.py +599 -0
- parrot/loaders/youtube.py +504 -0
- parrot/manager/__init__.py +5 -0
- parrot/manager/manager.py +1030 -0
- parrot/mcp/__init__.py +28 -0
- parrot/mcp/adapter.py +105 -0
- parrot/mcp/cli.py +174 -0
- parrot/mcp/client.py +119 -0
- parrot/mcp/config.py +75 -0
- parrot/mcp/integration.py +842 -0
- parrot/mcp/oauth.py +933 -0
- parrot/mcp/server.py +225 -0
- parrot/mcp/transports/__init__.py +3 -0
- parrot/mcp/transports/base.py +279 -0
- parrot/mcp/transports/grpc_session.py +163 -0
- parrot/mcp/transports/http.py +312 -0
- parrot/mcp/transports/mcp.proto +108 -0
- parrot/mcp/transports/quic.py +1082 -0
- parrot/mcp/transports/sse.py +330 -0
- parrot/mcp/transports/stdio.py +309 -0
- parrot/mcp/transports/unix.py +395 -0
- parrot/mcp/transports/websocket.py +547 -0
- parrot/memory/__init__.py +16 -0
- parrot/memory/abstract.py +209 -0
- parrot/memory/agent.py +32 -0
- parrot/memory/cache.py +175 -0
- parrot/memory/core.py +555 -0
- parrot/memory/file.py +153 -0
- parrot/memory/mem.py +131 -0
- parrot/memory/redis.py +613 -0
- parrot/models/__init__.py +46 -0
- parrot/models/basic.py +118 -0
- parrot/models/compliance.py +208 -0
- parrot/models/crew.py +395 -0
- parrot/models/detections.py +654 -0
- parrot/models/generation.py +85 -0
- parrot/models/google.py +223 -0
- parrot/models/groq.py +23 -0
- parrot/models/openai.py +30 -0
- parrot/models/outputs.py +285 -0
- parrot/models/responses.py +938 -0
- parrot/notifications/__init__.py +743 -0
- parrot/openapi/__init__.py +3 -0
- parrot/openapi/components.yaml +641 -0
- parrot/openapi/config.py +322 -0
- parrot/outputs/__init__.py +32 -0
- parrot/outputs/formats/__init__.py +108 -0
- parrot/outputs/formats/altair.py +359 -0
- parrot/outputs/formats/application.py +122 -0
- parrot/outputs/formats/base.py +351 -0
- parrot/outputs/formats/bokeh.py +356 -0
- parrot/outputs/formats/card.py +424 -0
- parrot/outputs/formats/chart.py +436 -0
- parrot/outputs/formats/d3.py +255 -0
- parrot/outputs/formats/echarts.py +310 -0
- parrot/outputs/formats/generators/__init__.py +0 -0
- parrot/outputs/formats/generators/abstract.py +61 -0
- parrot/outputs/formats/generators/panel.py +145 -0
- parrot/outputs/formats/generators/streamlit.py +86 -0
- parrot/outputs/formats/generators/terminal.py +63 -0
- parrot/outputs/formats/holoviews.py +310 -0
- parrot/outputs/formats/html.py +147 -0
- parrot/outputs/formats/jinja2.py +46 -0
- parrot/outputs/formats/json.py +87 -0
- parrot/outputs/formats/map.py +933 -0
- parrot/outputs/formats/markdown.py +172 -0
- parrot/outputs/formats/matplotlib.py +237 -0
- parrot/outputs/formats/mixins/__init__.py +0 -0
- parrot/outputs/formats/mixins/emaps.py +855 -0
- parrot/outputs/formats/plotly.py +341 -0
- parrot/outputs/formats/seaborn.py +310 -0
- parrot/outputs/formats/table.py +397 -0
- parrot/outputs/formats/template_report.py +138 -0
- parrot/outputs/formats/yaml.py +125 -0
- parrot/outputs/formatter.py +152 -0
- parrot/outputs/templates/__init__.py +95 -0
- parrot/pipelines/__init__.py +0 -0
- parrot/pipelines/abstract.py +210 -0
- parrot/pipelines/detector.py +124 -0
- parrot/pipelines/models.py +90 -0
- parrot/pipelines/planogram.py +3002 -0
- parrot/pipelines/table.sql +97 -0
- parrot/plugins/__init__.py +106 -0
- parrot/plugins/importer.py +80 -0
- parrot/py.typed +0 -0
- parrot/registry/__init__.py +18 -0
- parrot/registry/registry.py +594 -0
- parrot/scheduler/__init__.py +1189 -0
- parrot/scheduler/models.py +60 -0
- parrot/security/__init__.py +16 -0
- parrot/security/prompt_injection.py +268 -0
- parrot/security/security_events.sql +25 -0
- parrot/services/__init__.py +1 -0
- parrot/services/mcp/__init__.py +8 -0
- parrot/services/mcp/config.py +13 -0
- parrot/services/mcp/server.py +295 -0
- parrot/services/o365_remote_auth.py +235 -0
- parrot/stores/__init__.py +7 -0
- parrot/stores/abstract.py +352 -0
- parrot/stores/arango.py +1090 -0
- parrot/stores/bigquery.py +1377 -0
- parrot/stores/cache.py +106 -0
- parrot/stores/empty.py +10 -0
- parrot/stores/faiss_store.py +1157 -0
- parrot/stores/kb/__init__.py +9 -0
- parrot/stores/kb/abstract.py +68 -0
- parrot/stores/kb/cache.py +165 -0
- parrot/stores/kb/doc.py +325 -0
- parrot/stores/kb/hierarchy.py +346 -0
- parrot/stores/kb/local.py +457 -0
- parrot/stores/kb/prompt.py +28 -0
- parrot/stores/kb/redis.py +659 -0
- parrot/stores/kb/store.py +115 -0
- parrot/stores/kb/user.py +374 -0
- parrot/stores/models.py +59 -0
- parrot/stores/pgvector.py +3 -0
- parrot/stores/postgres.py +2853 -0
- parrot/stores/utils/__init__.py +0 -0
- parrot/stores/utils/chunking.py +197 -0
- parrot/telemetry/__init__.py +3 -0
- parrot/telemetry/mixin.py +111 -0
- parrot/template/__init__.py +3 -0
- parrot/template/engine.py +259 -0
- parrot/tools/__init__.py +23 -0
- parrot/tools/abstract.py +644 -0
- parrot/tools/agent.py +363 -0
- parrot/tools/arangodbsearch.py +537 -0
- parrot/tools/arxiv_tool.py +188 -0
- parrot/tools/calculator/__init__.py +3 -0
- parrot/tools/calculator/operations/__init__.py +38 -0
- parrot/tools/calculator/operations/calculus.py +80 -0
- parrot/tools/calculator/operations/statistics.py +76 -0
- parrot/tools/calculator/tool.py +150 -0
- parrot/tools/cloudwatch.py +988 -0
- parrot/tools/codeinterpreter/__init__.py +127 -0
- parrot/tools/codeinterpreter/executor.py +371 -0
- parrot/tools/codeinterpreter/internals.py +473 -0
- parrot/tools/codeinterpreter/models.py +643 -0
- parrot/tools/codeinterpreter/prompts.py +224 -0
- parrot/tools/codeinterpreter/tool.py +664 -0
- parrot/tools/company_info/__init__.py +6 -0
- parrot/tools/company_info/tool.py +1138 -0
- parrot/tools/correlationanalysis.py +437 -0
- parrot/tools/database/abstract.py +286 -0
- parrot/tools/database/bq.py +115 -0
- parrot/tools/database/cache.py +284 -0
- parrot/tools/database/models.py +95 -0
- parrot/tools/database/pg.py +343 -0
- parrot/tools/databasequery.py +1159 -0
- parrot/tools/db.py +1800 -0
- parrot/tools/ddgo.py +370 -0
- parrot/tools/decorators.py +271 -0
- parrot/tools/dftohtml.py +282 -0
- parrot/tools/document.py +549 -0
- parrot/tools/ecs.py +819 -0
- parrot/tools/edareport.py +368 -0
- parrot/tools/elasticsearch.py +1049 -0
- parrot/tools/employees.py +462 -0
- parrot/tools/epson/__init__.py +96 -0
- parrot/tools/excel.py +683 -0
- parrot/tools/file/__init__.py +13 -0
- parrot/tools/file/abstract.py +76 -0
- parrot/tools/file/gcs.py +378 -0
- parrot/tools/file/local.py +284 -0
- parrot/tools/file/s3.py +511 -0
- parrot/tools/file/tmp.py +309 -0
- parrot/tools/file/tool.py +501 -0
- parrot/tools/file_reader.py +129 -0
- parrot/tools/flowtask/__init__.py +19 -0
- parrot/tools/flowtask/tool.py +761 -0
- parrot/tools/gittoolkit.py +508 -0
- parrot/tools/google/__init__.py +18 -0
- parrot/tools/google/base.py +169 -0
- parrot/tools/google/tools.py +1251 -0
- parrot/tools/googlelocation.py +5 -0
- parrot/tools/googleroutes.py +5 -0
- parrot/tools/googlesearch.py +5 -0
- parrot/tools/googlesitesearch.py +5 -0
- parrot/tools/googlevoice.py +2 -0
- parrot/tools/gvoice.py +695 -0
- parrot/tools/ibisworld/README.md +225 -0
- parrot/tools/ibisworld/__init__.py +11 -0
- parrot/tools/ibisworld/tool.py +366 -0
- parrot/tools/jiratoolkit.py +1718 -0
- parrot/tools/manager.py +1098 -0
- parrot/tools/math.py +152 -0
- parrot/tools/metadata.py +476 -0
- parrot/tools/msteams.py +1621 -0
- parrot/tools/msword.py +635 -0
- parrot/tools/multidb.py +580 -0
- parrot/tools/multistoresearch.py +369 -0
- parrot/tools/networkninja.py +167 -0
- parrot/tools/nextstop/__init__.py +4 -0
- parrot/tools/nextstop/base.py +286 -0
- parrot/tools/nextstop/employee.py +733 -0
- parrot/tools/nextstop/store.py +462 -0
- parrot/tools/notification.py +435 -0
- parrot/tools/o365/__init__.py +42 -0
- parrot/tools/o365/base.py +295 -0
- parrot/tools/o365/bundle.py +522 -0
- parrot/tools/o365/events.py +554 -0
- parrot/tools/o365/mail.py +992 -0
- parrot/tools/o365/onedrive.py +497 -0
- parrot/tools/o365/sharepoint.py +641 -0
- parrot/tools/openapi_toolkit.py +904 -0
- parrot/tools/openweather.py +527 -0
- parrot/tools/pdfprint.py +1001 -0
- parrot/tools/powerbi.py +518 -0
- parrot/tools/powerpoint.py +1113 -0
- parrot/tools/pricestool.py +146 -0
- parrot/tools/products/__init__.py +246 -0
- parrot/tools/prophet_tool.py +171 -0
- parrot/tools/pythonpandas.py +630 -0
- parrot/tools/pythonrepl.py +910 -0
- parrot/tools/qsource.py +436 -0
- parrot/tools/querytoolkit.py +395 -0
- parrot/tools/quickeda.py +827 -0
- parrot/tools/resttool.py +553 -0
- parrot/tools/retail/__init__.py +0 -0
- parrot/tools/retail/bby.py +528 -0
- parrot/tools/sandboxtool.py +703 -0
- parrot/tools/sassie/__init__.py +352 -0
- parrot/tools/scraping/__init__.py +7 -0
- parrot/tools/scraping/docs/select.md +466 -0
- parrot/tools/scraping/documentation.md +1278 -0
- parrot/tools/scraping/driver.py +436 -0
- parrot/tools/scraping/models.py +576 -0
- parrot/tools/scraping/options.py +85 -0
- parrot/tools/scraping/orchestrator.py +517 -0
- parrot/tools/scraping/readme.md +740 -0
- parrot/tools/scraping/tool.py +3115 -0
- parrot/tools/seasonaldetection.py +642 -0
- parrot/tools/shell_tool/__init__.py +5 -0
- parrot/tools/shell_tool/actions.py +408 -0
- parrot/tools/shell_tool/engine.py +155 -0
- parrot/tools/shell_tool/models.py +322 -0
- parrot/tools/shell_tool/tool.py +442 -0
- parrot/tools/site_search.py +214 -0
- parrot/tools/textfile.py +418 -0
- parrot/tools/think.py +378 -0
- parrot/tools/toolkit.py +298 -0
- parrot/tools/webapp_tool.py +187 -0
- parrot/tools/whatif.py +1279 -0
- parrot/tools/workday/MULTI_WSDL_EXAMPLE.md +249 -0
- parrot/tools/workday/__init__.py +6 -0
- parrot/tools/workday/models.py +1389 -0
- parrot/tools/workday/tool.py +1293 -0
- parrot/tools/yfinance_tool.py +306 -0
- parrot/tools/zipcode.py +217 -0
- parrot/utils/__init__.py +2 -0
- parrot/utils/helpers.py +73 -0
- parrot/utils/parsers/__init__.py +5 -0
- parrot/utils/parsers/toml.c +12078 -0
- parrot/utils/parsers/toml.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/utils/parsers/toml.pyx +21 -0
- parrot/utils/toml.py +11 -0
- parrot/utils/types.cpp +20936 -0
- parrot/utils/types.cpython-310-x86_64-linux-gnu.so +0 -0
- parrot/utils/types.pyx +213 -0
- parrot/utils/uv.py +11 -0
- parrot/version.py +10 -0
- parrot/yaml-rs/Cargo.lock +350 -0
- parrot/yaml-rs/Cargo.toml +19 -0
- parrot/yaml-rs/pyproject.toml +19 -0
- parrot/yaml-rs/python/yaml_rs/__init__.py +81 -0
- parrot/yaml-rs/src/lib.rs +222 -0
- requirements/docker-compose.yml +24 -0
- requirements/requirements-dev.txt +21 -0
|
@@ -0,0 +1,643 @@
|
|
|
1
|
+
from typing import Literal, Optional, List, Dict, Any
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from uuid import UUID, uuid4
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from pydantic import BaseModel, Field, field_validator, ConfigDict
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class OperationType(str, Enum):
|
|
9
|
+
"""Tipos de operaciones soportadas por el CodeInterpreterTool"""
|
|
10
|
+
ANALYZE = "analyze"
|
|
11
|
+
DOCUMENT = "document"
|
|
12
|
+
TEST = "test"
|
|
13
|
+
DEBUG = "debug"
|
|
14
|
+
EXPLAIN = "explain"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ExecutionStatus(str, Enum):
|
|
18
|
+
"""Estados posibles de ejecución"""
|
|
19
|
+
SUCCESS = "success"
|
|
20
|
+
SUCCESS_WITH_WARNINGS = "success_with_warnings"
|
|
21
|
+
FAILED = "failed"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Severity(str, Enum):
|
|
25
|
+
"""Niveles de severidad para issues detectados"""
|
|
26
|
+
CRITICAL = "critical"
|
|
27
|
+
HIGH = "high"
|
|
28
|
+
MEDIUM = "medium"
|
|
29
|
+
LOW = "low"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class CodeReference(BaseModel):
|
|
33
|
+
"""Referencias a ubicaciones específicas en código fuente"""
|
|
34
|
+
file_path: Optional[str] = Field(
|
|
35
|
+
None,
|
|
36
|
+
description="Ruta al archivo fuente, si está disponible"
|
|
37
|
+
)
|
|
38
|
+
start_line: int = Field(
|
|
39
|
+
...,
|
|
40
|
+
ge=1,
|
|
41
|
+
description="Línea inicial (1-indexed)"
|
|
42
|
+
)
|
|
43
|
+
end_line: int = Field(
|
|
44
|
+
...,
|
|
45
|
+
ge=1,
|
|
46
|
+
description="Línea final (1-indexed)"
|
|
47
|
+
)
|
|
48
|
+
code_snippet: str = Field(
|
|
49
|
+
...,
|
|
50
|
+
description="Fragmento de código referenciado"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
@field_validator('end_line')
|
|
54
|
+
@classmethod
|
|
55
|
+
def validate_line_range(cls, v, info):
|
|
56
|
+
if 'start_line' in info.data and v < info.data['start_line']:
|
|
57
|
+
raise ValueError('end_line debe ser mayor o igual a start_line')
|
|
58
|
+
return v
|
|
59
|
+
|
|
60
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class BaseCodeResponse(BaseModel):
|
|
64
|
+
"""Modelo base para todas las respuestas del CodeInterpreterTool"""
|
|
65
|
+
operation_id: UUID = Field(
|
|
66
|
+
default_factory=uuid4,
|
|
67
|
+
description="Identificador único de la operación"
|
|
68
|
+
)
|
|
69
|
+
timestamp: datetime = Field(
|
|
70
|
+
default_factory=datetime.utcnow,
|
|
71
|
+
description="Timestamp de ejecución en UTC"
|
|
72
|
+
)
|
|
73
|
+
operation_type: OperationType = Field(
|
|
74
|
+
...,
|
|
75
|
+
description="Tipo de operación realizada"
|
|
76
|
+
)
|
|
77
|
+
status: ExecutionStatus = Field(
|
|
78
|
+
...,
|
|
79
|
+
description="Estado de ejecución de la operación"
|
|
80
|
+
)
|
|
81
|
+
execution_time_ms: int = Field(
|
|
82
|
+
...,
|
|
83
|
+
ge=0,
|
|
84
|
+
description="Tiempo de ejecución en milisegundos"
|
|
85
|
+
)
|
|
86
|
+
code_hash: str = Field(
|
|
87
|
+
...,
|
|
88
|
+
min_length=64,
|
|
89
|
+
max_length=64,
|
|
90
|
+
description="SHA-256 hash del código analizado"
|
|
91
|
+
)
|
|
92
|
+
language: str = Field(
|
|
93
|
+
default="python",
|
|
94
|
+
description="Lenguaje del código analizado"
|
|
95
|
+
)
|
|
96
|
+
error_message: Optional[str] = Field(
|
|
97
|
+
None,
|
|
98
|
+
description="Mensaje de error si status es FAILED"
|
|
99
|
+
)
|
|
100
|
+
warnings: List[str] = Field(
|
|
101
|
+
default_factory=list,
|
|
102
|
+
description="Advertencias generadas durante la ejecución"
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
model_config = ConfigDict(
|
|
106
|
+
use_enum_values=True,
|
|
107
|
+
str_strip_whitespace=True
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class ComplexityMetrics(BaseModel):
|
|
112
|
+
"""Métricas de complejidad del código"""
|
|
113
|
+
cyclomatic_complexity: int = Field(
|
|
114
|
+
...,
|
|
115
|
+
ge=1,
|
|
116
|
+
description="Complejidad ciclomática calculada"
|
|
117
|
+
)
|
|
118
|
+
lines_of_code: int = Field(
|
|
119
|
+
...,
|
|
120
|
+
ge=0,
|
|
121
|
+
description="Líneas de código (excluyendo comentarios y blanks)"
|
|
122
|
+
)
|
|
123
|
+
cognitive_complexity: Optional[int] = Field(
|
|
124
|
+
None,
|
|
125
|
+
ge=0,
|
|
126
|
+
description="Score de complejidad cognitiva"
|
|
127
|
+
)
|
|
128
|
+
maintainability_index: Optional[float] = Field(
|
|
129
|
+
None,
|
|
130
|
+
ge=0.0,
|
|
131
|
+
le=100.0,
|
|
132
|
+
description="Índice de mantenibilidad (0-100)"
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class FunctionComponent(BaseModel):
|
|
139
|
+
"""Información sobre una función identificada en el código"""
|
|
140
|
+
name: str = Field(..., description="Nombre de la función")
|
|
141
|
+
signature: str = Field(..., description="Signatura completa con tipos")
|
|
142
|
+
purpose: str = Field(..., description="Propósito de la función")
|
|
143
|
+
parameters: Dict[str, str] = Field(
|
|
144
|
+
default_factory=dict,
|
|
145
|
+
description="Mapping de nombre de parámetro a descripción"
|
|
146
|
+
)
|
|
147
|
+
return_type: str = Field(..., description="Tipo de retorno")
|
|
148
|
+
return_description: str = Field(
|
|
149
|
+
...,
|
|
150
|
+
description="Descripción del valor de retorno"
|
|
151
|
+
)
|
|
152
|
+
side_effects: List[str] = Field(
|
|
153
|
+
default_factory=list,
|
|
154
|
+
description="Side effects observables"
|
|
155
|
+
)
|
|
156
|
+
location: CodeReference = Field(
|
|
157
|
+
...,
|
|
158
|
+
description="Ubicación en el código fuente"
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class ClassComponent(BaseModel):
|
|
165
|
+
"""Información sobre una clase identificada en el código"""
|
|
166
|
+
name: str = Field(..., description="Nombre de la clase")
|
|
167
|
+
purpose: str = Field(..., description="Propósito de la clase")
|
|
168
|
+
attributes: Dict[str, str] = Field(
|
|
169
|
+
default_factory=dict,
|
|
170
|
+
description="Mapping de nombre de atributo a descripción con tipo"
|
|
171
|
+
)
|
|
172
|
+
methods: List[str] = Field(
|
|
173
|
+
default_factory=list,
|
|
174
|
+
description="Lista de métodos públicos con descripciones concisas"
|
|
175
|
+
)
|
|
176
|
+
inheritance: List[str] = Field(
|
|
177
|
+
default_factory=list,
|
|
178
|
+
description="Clases padre de las que hereda"
|
|
179
|
+
)
|
|
180
|
+
relationships: Dict[str, str] = Field(
|
|
181
|
+
default_factory=dict,
|
|
182
|
+
description="Relaciones con otras clases (composición, agregación)"
|
|
183
|
+
)
|
|
184
|
+
location: CodeReference = Field(
|
|
185
|
+
...,
|
|
186
|
+
description="Ubicación en el código fuente"
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class Dependency(BaseModel):
|
|
193
|
+
"""Información sobre una dependencia externa"""
|
|
194
|
+
name: str = Field(..., description="Nombre del módulo o paquete")
|
|
195
|
+
version: Optional[str] = Field(
|
|
196
|
+
None,
|
|
197
|
+
description="Versión específica si es detectable"
|
|
198
|
+
)
|
|
199
|
+
dependency_type: Literal["stdlib", "third_party", "internal"] = Field(
|
|
200
|
+
...,
|
|
201
|
+
description="Tipo de dependencia"
|
|
202
|
+
)
|
|
203
|
+
usage_description: str = Field(
|
|
204
|
+
...,
|
|
205
|
+
description="Cómo se utiliza la dependencia"
|
|
206
|
+
)
|
|
207
|
+
coupling_level: Literal["tight", "moderate", "loose"] = Field(
|
|
208
|
+
...,
|
|
209
|
+
description="Nivel de acoplamiento"
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
class QualityObservation(BaseModel):
|
|
216
|
+
"""Observación sobre calidad del código"""
|
|
217
|
+
category: Literal["strength", "improvement"] = Field(
|
|
218
|
+
...,
|
|
219
|
+
description="Si es una fortaleza o área de mejora"
|
|
220
|
+
)
|
|
221
|
+
title: str = Field(..., description="Título conciso de la observación")
|
|
222
|
+
description: str = Field(
|
|
223
|
+
...,
|
|
224
|
+
description="Descripción detallada y específica"
|
|
225
|
+
)
|
|
226
|
+
impact: Literal["high", "medium", "low"] = Field(
|
|
227
|
+
...,
|
|
228
|
+
description="Impacto de la observación"
|
|
229
|
+
)
|
|
230
|
+
actionable_suggestion: Optional[str] = Field(
|
|
231
|
+
None,
|
|
232
|
+
description="Sugerencia accionable si es mejora"
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
class CodeAnalysisResponse(BaseCodeResponse):
|
|
239
|
+
"""Respuesta completa para operación de análisis de código"""
|
|
240
|
+
operation_type: Literal[OperationType.ANALYZE] = OperationType.ANALYZE
|
|
241
|
+
|
|
242
|
+
executive_summary: str = Field(
|
|
243
|
+
...,
|
|
244
|
+
min_length=10,
|
|
245
|
+
max_length=500,
|
|
246
|
+
description="Resumen ejecutivo del propósito del código"
|
|
247
|
+
)
|
|
248
|
+
detailed_purpose: str = Field(
|
|
249
|
+
...,
|
|
250
|
+
description="Descripción detallada de funcionalidad y contexto"
|
|
251
|
+
)
|
|
252
|
+
functions: List[FunctionComponent] = Field(
|
|
253
|
+
default_factory=list,
|
|
254
|
+
description="Funciones identificadas en el código"
|
|
255
|
+
)
|
|
256
|
+
classes: List[ClassComponent] = Field(
|
|
257
|
+
default_factory=list,
|
|
258
|
+
description="Clases identificadas en el código"
|
|
259
|
+
)
|
|
260
|
+
dependencies: List[Dependency] = Field(
|
|
261
|
+
default_factory=list,
|
|
262
|
+
description="Dependencias externas identificadas"
|
|
263
|
+
)
|
|
264
|
+
complexity_metrics: ComplexityMetrics = Field(
|
|
265
|
+
...,
|
|
266
|
+
description="Métricas de complejidad del código"
|
|
267
|
+
)
|
|
268
|
+
quality_observations: List[QualityObservation] = Field(
|
|
269
|
+
default_factory=list,
|
|
270
|
+
description="Observaciones sobre calidad del código"
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
class DocstringFormat(str, Enum):
|
|
277
|
+
"""Formatos soportados de docstrings"""
|
|
278
|
+
GOOGLE = "google"
|
|
279
|
+
NUMPY = "numpy"
|
|
280
|
+
SPHINX = "sphinx"
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
class DocumentedElement(BaseModel):
|
|
284
|
+
"""Elemento individual que ha sido documentado"""
|
|
285
|
+
element_type: Literal["function", "class", "method", "module"] = Field(
|
|
286
|
+
...,
|
|
287
|
+
description="Tipo de elemento documentado"
|
|
288
|
+
)
|
|
289
|
+
element_name: str = Field(
|
|
290
|
+
...,
|
|
291
|
+
description="Nombre del elemento"
|
|
292
|
+
)
|
|
293
|
+
location: CodeReference = Field(
|
|
294
|
+
...,
|
|
295
|
+
description="Ubicación en el código fuente"
|
|
296
|
+
)
|
|
297
|
+
generated_docstring: str = Field(
|
|
298
|
+
...,
|
|
299
|
+
description="Docstring generado"
|
|
300
|
+
)
|
|
301
|
+
justification: Optional[str] = Field(
|
|
302
|
+
None,
|
|
303
|
+
description="Justificación de decisiones no obvias"
|
|
304
|
+
)
|
|
305
|
+
cross_references: List[str] = Field(
|
|
306
|
+
default_factory=list,
|
|
307
|
+
description="Referencias a otros elementos relacionados"
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
class DocumentationResponse(BaseCodeResponse):
|
|
314
|
+
"""Respuesta completa para operación de generación de documentación"""
|
|
315
|
+
operation_type: Literal[OperationType.DOCUMENT] = OperationType.DOCUMENT
|
|
316
|
+
|
|
317
|
+
docstring_format: DocstringFormat = Field(
|
|
318
|
+
...,
|
|
319
|
+
description="Formato de docstring utilizado"
|
|
320
|
+
)
|
|
321
|
+
modified_code: str = Field(
|
|
322
|
+
...,
|
|
323
|
+
description="Código con docstrings insertados"
|
|
324
|
+
)
|
|
325
|
+
documented_elements: List[DocumentedElement] = Field(
|
|
326
|
+
default_factory=list,
|
|
327
|
+
description="Elementos que fueron documentados"
|
|
328
|
+
)
|
|
329
|
+
module_documentation: Optional[str] = Field(
|
|
330
|
+
None,
|
|
331
|
+
description="Documentación de nivel módulo en markdown"
|
|
332
|
+
)
|
|
333
|
+
documentation_coverage: float = Field(
|
|
334
|
+
...,
|
|
335
|
+
ge=0.0,
|
|
336
|
+
le=100.0,
|
|
337
|
+
description="Porcentaje de elementos documentados"
|
|
338
|
+
)
|
|
339
|
+
saved_files: List[str] = Field(
|
|
340
|
+
default_factory=list,
|
|
341
|
+
description="Rutas de archivos guardados con documentación"
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
class TestType(str, Enum):
|
|
348
|
+
"""Tipos de tests generados"""
|
|
349
|
+
UNIT = "unit"
|
|
350
|
+
INTEGRATION = "integration"
|
|
351
|
+
PROPERTY_BASED = "property_based"
|
|
352
|
+
REGRESSION = "regression"
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
class GeneratedTest(BaseModel):
|
|
356
|
+
"""Información sobre un test generado"""
|
|
357
|
+
name: str = Field(
|
|
358
|
+
...,
|
|
359
|
+
description="Nombre descriptivo del test"
|
|
360
|
+
)
|
|
361
|
+
test_type: TestType = Field(
|
|
362
|
+
...,
|
|
363
|
+
description="Tipo de test"
|
|
364
|
+
)
|
|
365
|
+
test_code: str = Field(
|
|
366
|
+
...,
|
|
367
|
+
description="Código fuente completo del test"
|
|
368
|
+
)
|
|
369
|
+
fixtures_required: List[str] = Field(
|
|
370
|
+
default_factory=list,
|
|
371
|
+
description="Fixtures requeridas para ejecutar el test"
|
|
372
|
+
)
|
|
373
|
+
dependencies: List[str] = Field(
|
|
374
|
+
default_factory=list,
|
|
375
|
+
description="Dependencias adicionales para el test"
|
|
376
|
+
)
|
|
377
|
+
estimated_coverage: float = Field(
|
|
378
|
+
...,
|
|
379
|
+
ge=0.0,
|
|
380
|
+
le=100.0,
|
|
381
|
+
description="Porcentaje estimado de cobertura"
|
|
382
|
+
)
|
|
383
|
+
covers_lines: List[int] = Field(
|
|
384
|
+
default_factory=list,
|
|
385
|
+
description="Líneas del código original cubiertas"
|
|
386
|
+
)
|
|
387
|
+
is_edge_case: bool = Field(
|
|
388
|
+
default=False,
|
|
389
|
+
description="Si el test cubre un edge case"
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
class CoverageGap(BaseModel):
|
|
396
|
+
"""Brecha en cobertura de tests"""
|
|
397
|
+
location: CodeReference = Field(
|
|
398
|
+
...,
|
|
399
|
+
description="Ubicación del código no cubierto"
|
|
400
|
+
)
|
|
401
|
+
gap_type: Literal["branch", "line", "condition"] = Field(
|
|
402
|
+
...,
|
|
403
|
+
description="Tipo de brecha en cobertura"
|
|
404
|
+
)
|
|
405
|
+
description: str = Field(
|
|
406
|
+
...,
|
|
407
|
+
description="Descripción de qué no está cubierto"
|
|
408
|
+
)
|
|
409
|
+
suggested_test: Optional[str] = Field(
|
|
410
|
+
None,
|
|
411
|
+
description="Sugerencia de test adicional"
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
class TestGenerationResponse(BaseCodeResponse):
|
|
418
|
+
"""Respuesta completa para operación de generación de tests"""
|
|
419
|
+
operation_type: Literal[OperationType.TEST] = OperationType.TEST
|
|
420
|
+
|
|
421
|
+
test_framework: str = Field(
|
|
422
|
+
default="pytest",
|
|
423
|
+
description="Framework de testing utilizado"
|
|
424
|
+
)
|
|
425
|
+
generated_tests: List[GeneratedTest] = Field(
|
|
426
|
+
default_factory=list,
|
|
427
|
+
description="Tests generados"
|
|
428
|
+
)
|
|
429
|
+
test_file_path: Optional[str] = Field(
|
|
430
|
+
None,
|
|
431
|
+
description="Ruta del archivo de tests generado"
|
|
432
|
+
)
|
|
433
|
+
overall_coverage: float = Field(
|
|
434
|
+
...,
|
|
435
|
+
ge=0.0,
|
|
436
|
+
le=100.0,
|
|
437
|
+
description="Cobertura total estimada"
|
|
438
|
+
)
|
|
439
|
+
coverage_gaps: List[CoverageGap] = Field(
|
|
440
|
+
default_factory=list,
|
|
441
|
+
description="Brechas en cobertura identificadas"
|
|
442
|
+
)
|
|
443
|
+
setup_instructions: Optional[str] = Field(
|
|
444
|
+
None,
|
|
445
|
+
description="Instrucciones para ejecutar los tests"
|
|
446
|
+
)
|
|
447
|
+
saved_files: List[str] = Field(
|
|
448
|
+
default_factory=list,
|
|
449
|
+
description="Archivos guardados con tests"
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
class BugIssue(BaseModel):
|
|
456
|
+
"""Issue o bug potencial identificado"""
|
|
457
|
+
severity: Severity = Field(
|
|
458
|
+
...,
|
|
459
|
+
description="Severidad del issue"
|
|
460
|
+
)
|
|
461
|
+
category: str = Field(
|
|
462
|
+
...,
|
|
463
|
+
description="Categoría del bug (logic, exception_handling, etc.)"
|
|
464
|
+
)
|
|
465
|
+
title: str = Field(
|
|
466
|
+
...,
|
|
467
|
+
description="Título conciso del issue"
|
|
468
|
+
)
|
|
469
|
+
location: CodeReference = Field(
|
|
470
|
+
...,
|
|
471
|
+
description="Ubicación exacta del problema"
|
|
472
|
+
)
|
|
473
|
+
description: str = Field(
|
|
474
|
+
...,
|
|
475
|
+
description="Explicación detallada del problema"
|
|
476
|
+
)
|
|
477
|
+
trigger_scenario: str = Field(
|
|
478
|
+
...,
|
|
479
|
+
description="Escenario específico que triggerea el bug"
|
|
480
|
+
)
|
|
481
|
+
expected_behavior: str = Field(
|
|
482
|
+
...,
|
|
483
|
+
description="Comportamiento esperado correcto"
|
|
484
|
+
)
|
|
485
|
+
actual_behavior: str = Field(
|
|
486
|
+
...,
|
|
487
|
+
description="Comportamiento observable incorrecto"
|
|
488
|
+
)
|
|
489
|
+
suggested_fix: str = Field(
|
|
490
|
+
...,
|
|
491
|
+
description="Código o descripción de la solución propuesta"
|
|
492
|
+
)
|
|
493
|
+
fix_diff: Optional[str] = Field(
|
|
494
|
+
None,
|
|
495
|
+
description="Diff del cambio propuesto si está disponible"
|
|
496
|
+
)
|
|
497
|
+
alternative_solutions: List[str] = Field(
|
|
498
|
+
default_factory=list,
|
|
499
|
+
description="Soluciones alternativas con trade-offs"
|
|
500
|
+
)
|
|
501
|
+
impact_analysis: str = Field(
|
|
502
|
+
...,
|
|
503
|
+
description="Análisis del impacto del bug"
|
|
504
|
+
)
|
|
505
|
+
likelihood: Literal["high", "medium", "low"] = Field(
|
|
506
|
+
...,
|
|
507
|
+
description="Probabilidad de que se manifieste en producción"
|
|
508
|
+
)
|
|
509
|
+
|
|
510
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
class DebugResponse(BaseCodeResponse):
|
|
514
|
+
"""Respuesta completa para operación de detección de bugs"""
|
|
515
|
+
operation_type: Literal[OperationType.DEBUG] = OperationType.DEBUG
|
|
516
|
+
|
|
517
|
+
issues_found: List[BugIssue] = Field(
|
|
518
|
+
default_factory=list,
|
|
519
|
+
description="Issues potenciales identificados"
|
|
520
|
+
)
|
|
521
|
+
critical_count: int = Field(
|
|
522
|
+
default=0,
|
|
523
|
+
ge=0,
|
|
524
|
+
description="Número de issues críticos"
|
|
525
|
+
)
|
|
526
|
+
high_count: int = Field(
|
|
527
|
+
default=0,
|
|
528
|
+
ge=0,
|
|
529
|
+
description="Número de issues high severity"
|
|
530
|
+
)
|
|
531
|
+
medium_count: int = Field(
|
|
532
|
+
default=0,
|
|
533
|
+
ge=0,
|
|
534
|
+
description="Número de issues medium severity"
|
|
535
|
+
)
|
|
536
|
+
low_count: int = Field(
|
|
537
|
+
default=0,
|
|
538
|
+
ge=0,
|
|
539
|
+
description="Número de issues low severity"
|
|
540
|
+
)
|
|
541
|
+
static_analysis_results: Optional[Dict[str, Any]] = Field(
|
|
542
|
+
None,
|
|
543
|
+
description="Resultados de herramientas de análisis estático"
|
|
544
|
+
)
|
|
545
|
+
priority_order: List[int] = Field(
|
|
546
|
+
default_factory=list,
|
|
547
|
+
description="Índices de issues_found en orden de prioridad"
|
|
548
|
+
)
|
|
549
|
+
|
|
550
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
class CodeFlowStep(BaseModel):
|
|
554
|
+
"""Paso individual en el flujo de ejecución"""
|
|
555
|
+
step_number: int = Field(
|
|
556
|
+
...,
|
|
557
|
+
ge=1,
|
|
558
|
+
description="Número del paso en secuencia"
|
|
559
|
+
)
|
|
560
|
+
location: CodeReference = Field(
|
|
561
|
+
...,
|
|
562
|
+
description="Ubicación del paso en código"
|
|
563
|
+
)
|
|
564
|
+
description: str = Field(
|
|
565
|
+
...,
|
|
566
|
+
description="Descripción de qué hace este paso"
|
|
567
|
+
)
|
|
568
|
+
purpose: str = Field(
|
|
569
|
+
...,
|
|
570
|
+
description="Propósito del paso en el algoritmo mayor"
|
|
571
|
+
)
|
|
572
|
+
data_transformation: Optional[str] = Field(
|
|
573
|
+
None,
|
|
574
|
+
description="Cómo se transforman los datos en este paso"
|
|
575
|
+
)
|
|
576
|
+
|
|
577
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
class ConceptExplanation(BaseModel):
|
|
581
|
+
"""Explicación de un concepto técnico utilizado"""
|
|
582
|
+
concept_name: str = Field(
|
|
583
|
+
...,
|
|
584
|
+
description="Nombre del concepto técnico"
|
|
585
|
+
)
|
|
586
|
+
simplified_explanation: str = Field(
|
|
587
|
+
...,
|
|
588
|
+
description="Explicación simplificada del concepto"
|
|
589
|
+
)
|
|
590
|
+
code_example: Optional[str] = Field(
|
|
591
|
+
None,
|
|
592
|
+
description="Ejemplo de código simplificado"
|
|
593
|
+
)
|
|
594
|
+
usage_in_analyzed_code: str = Field(
|
|
595
|
+
...,
|
|
596
|
+
description="Cómo se usa el concepto en el código analizado"
|
|
597
|
+
)
|
|
598
|
+
|
|
599
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
class ExplanationResponse(BaseCodeResponse):
|
|
603
|
+
"""Respuesta completa para operación de explicación de código"""
|
|
604
|
+
operation_type: Literal[OperationType.EXPLAIN] = OperationType.EXPLAIN
|
|
605
|
+
|
|
606
|
+
analogy: Optional[str] = Field(
|
|
607
|
+
None,
|
|
608
|
+
description="Analogía o metáfora para facilitar comprensión"
|
|
609
|
+
)
|
|
610
|
+
high_level_summary: str = Field(
|
|
611
|
+
...,
|
|
612
|
+
description="Resumen de alto nivel del código"
|
|
613
|
+
)
|
|
614
|
+
execution_flow: List[CodeFlowStep] = Field(
|
|
615
|
+
default_factory=list,
|
|
616
|
+
description="Flujo de ejecución paso a paso"
|
|
617
|
+
)
|
|
618
|
+
key_concepts: List[ConceptExplanation] = Field(
|
|
619
|
+
default_factory=list,
|
|
620
|
+
description="Conceptos técnicos clave explicados"
|
|
621
|
+
)
|
|
622
|
+
data_structures_used: Dict[str, str] = Field(
|
|
623
|
+
default_factory=dict,
|
|
624
|
+
description="Estructuras de datos utilizadas con explicaciones"
|
|
625
|
+
)
|
|
626
|
+
algorithm_description: Optional[str] = Field(
|
|
627
|
+
None,
|
|
628
|
+
description="Descripción del algoritmo si es relevante"
|
|
629
|
+
)
|
|
630
|
+
complexity_analysis: Optional[str] = Field(
|
|
631
|
+
None,
|
|
632
|
+
description="Análisis de complejidad temporal y espacial"
|
|
633
|
+
)
|
|
634
|
+
visualization: Optional[str] = Field(
|
|
635
|
+
None,
|
|
636
|
+
description="Diagrama ASCII o visualización textual"
|
|
637
|
+
)
|
|
638
|
+
user_expertise_level: Literal["beginner", "intermediate", "advanced"] = Field(
|
|
639
|
+
default="intermediate",
|
|
640
|
+
description="Nivel de expertise asumido del usuario"
|
|
641
|
+
)
|
|
642
|
+
|
|
643
|
+
model_config = ConfigDict(str_strip_whitespace=True)
|