amd-gaia 0.14.1__py3-none-any.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.
- amd_gaia-0.14.1.dist-info/METADATA +768 -0
- amd_gaia-0.14.1.dist-info/RECORD +800 -0
- amd_gaia-0.14.1.dist-info/WHEEL +5 -0
- amd_gaia-0.14.1.dist-info/entry_points.txt +5 -0
- amd_gaia-0.14.1.dist-info/licenses/LICENSE.md +21 -0
- amd_gaia-0.14.1.dist-info/top_level.txt +1 -0
- gaia/__init__.py +2 -0
- gaia/agents/__init__.py +19 -0
- gaia/agents/base/__init__.py +9 -0
- gaia/agents/base/agent.py +2072 -0
- gaia/agents/base/api_agent.py +120 -0
- gaia/agents/base/console.py +1457 -0
- gaia/agents/base/mcp_agent.py +86 -0
- gaia/agents/base/tools.py +83 -0
- gaia/agents/blender/agent.py +556 -0
- gaia/agents/blender/agent_simple.py +135 -0
- gaia/agents/blender/app.py +211 -0
- gaia/agents/blender/app_simple.py +41 -0
- gaia/agents/blender/core/__init__.py +16 -0
- gaia/agents/blender/core/materials.py +506 -0
- gaia/agents/blender/core/objects.py +316 -0
- gaia/agents/blender/core/rendering.py +225 -0
- gaia/agents/blender/core/scene.py +220 -0
- gaia/agents/blender/core/view.py +146 -0
- gaia/agents/chat/__init__.py +9 -0
- gaia/agents/chat/agent.py +975 -0
- gaia/agents/chat/app.py +1058 -0
- gaia/agents/chat/session.py +508 -0
- gaia/agents/chat/tools/__init__.py +15 -0
- gaia/agents/chat/tools/file_tools.py +96 -0
- gaia/agents/chat/tools/rag_tools.py +1729 -0
- gaia/agents/chat/tools/shell_tools.py +436 -0
- gaia/agents/code/__init__.py +7 -0
- gaia/agents/code/agent.py +547 -0
- gaia/agents/code/app.py +266 -0
- gaia/agents/code/models.py +135 -0
- gaia/agents/code/orchestration/__init__.py +24 -0
- gaia/agents/code/orchestration/checklist_executor.py +1739 -0
- gaia/agents/code/orchestration/checklist_generator.py +709 -0
- gaia/agents/code/orchestration/factories/__init__.py +9 -0
- gaia/agents/code/orchestration/factories/base.py +63 -0
- gaia/agents/code/orchestration/factories/nextjs_factory.py +118 -0
- gaia/agents/code/orchestration/factories/python_factory.py +106 -0
- gaia/agents/code/orchestration/orchestrator.py +610 -0
- gaia/agents/code/orchestration/project_analyzer.py +391 -0
- gaia/agents/code/orchestration/steps/__init__.py +67 -0
- gaia/agents/code/orchestration/steps/base.py +188 -0
- gaia/agents/code/orchestration/steps/error_handler.py +314 -0
- gaia/agents/code/orchestration/steps/nextjs.py +828 -0
- gaia/agents/code/orchestration/steps/python.py +307 -0
- gaia/agents/code/orchestration/template_catalog.py +463 -0
- gaia/agents/code/orchestration/workflows/__init__.py +14 -0
- gaia/agents/code/orchestration/workflows/base.py +80 -0
- gaia/agents/code/orchestration/workflows/nextjs.py +186 -0
- gaia/agents/code/orchestration/workflows/python.py +94 -0
- gaia/agents/code/prompts/__init__.py +11 -0
- gaia/agents/code/prompts/base_prompt.py +77 -0
- gaia/agents/code/prompts/code_patterns.py +1925 -0
- gaia/agents/code/prompts/nextjs_prompt.py +40 -0
- gaia/agents/code/prompts/python_prompt.py +109 -0
- gaia/agents/code/schema_inference.py +365 -0
- gaia/agents/code/system_prompt.py +41 -0
- gaia/agents/code/tools/__init__.py +42 -0
- gaia/agents/code/tools/cli_tools.py +1138 -0
- gaia/agents/code/tools/code_formatting.py +319 -0
- gaia/agents/code/tools/code_tools.py +769 -0
- gaia/agents/code/tools/error_fixing.py +1347 -0
- gaia/agents/code/tools/external_tools.py +180 -0
- gaia/agents/code/tools/file_io.py +845 -0
- gaia/agents/code/tools/prisma_tools.py +190 -0
- gaia/agents/code/tools/project_management.py +1016 -0
- gaia/agents/code/tools/testing.py +321 -0
- gaia/agents/code/tools/typescript_tools.py +122 -0
- gaia/agents/code/tools/validation_parsing.py +461 -0
- gaia/agents/code/tools/validation_tools.py +803 -0
- gaia/agents/code/tools/web_dev_tools.py +1744 -0
- gaia/agents/code/validators/__init__.py +16 -0
- gaia/agents/code/validators/antipattern_checker.py +241 -0
- gaia/agents/code/validators/ast_analyzer.py +197 -0
- gaia/agents/code/validators/requirements_validator.py +145 -0
- gaia/agents/code/validators/syntax_validator.py +171 -0
- gaia/agents/docker/__init__.py +7 -0
- gaia/agents/docker/agent.py +642 -0
- gaia/agents/jira/__init__.py +11 -0
- gaia/agents/jira/agent.py +894 -0
- gaia/agents/jira/jql_templates.py +299 -0
- gaia/agents/routing/__init__.py +7 -0
- gaia/agents/routing/agent.py +512 -0
- gaia/agents/routing/system_prompt.py +75 -0
- gaia/api/__init__.py +23 -0
- gaia/api/agent_registry.py +238 -0
- gaia/api/app.py +305 -0
- gaia/api/openai_server.py +575 -0
- gaia/api/schemas.py +186 -0
- gaia/api/sse_handler.py +370 -0
- gaia/apps/__init__.py +4 -0
- gaia/apps/llm/__init__.py +6 -0
- gaia/apps/llm/app.py +169 -0
- gaia/apps/summarize/app.py +633 -0
- gaia/apps/summarize/html_viewer.py +133 -0
- gaia/apps/summarize/pdf_formatter.py +284 -0
- gaia/audio/__init__.py +2 -0
- gaia/audio/audio_client.py +439 -0
- gaia/audio/audio_recorder.py +269 -0
- gaia/audio/kokoro_tts.py +599 -0
- gaia/audio/whisper_asr.py +432 -0
- gaia/chat/__init__.py +16 -0
- gaia/chat/app.py +430 -0
- gaia/chat/prompts.py +522 -0
- gaia/chat/sdk.py +1200 -0
- gaia/cli.py +5621 -0
- gaia/eval/batch_experiment.py +2332 -0
- gaia/eval/claude.py +542 -0
- gaia/eval/config.py +37 -0
- gaia/eval/email_generator.py +512 -0
- gaia/eval/eval.py +3179 -0
- gaia/eval/groundtruth.py +1130 -0
- gaia/eval/transcript_generator.py +582 -0
- gaia/eval/webapp/README.md +168 -0
- gaia/eval/webapp/node_modules/.bin/mime +16 -0
- gaia/eval/webapp/node_modules/.bin/mime.cmd +17 -0
- gaia/eval/webapp/node_modules/.bin/mime.ps1 +28 -0
- gaia/eval/webapp/node_modules/.package-lock.json +865 -0
- gaia/eval/webapp/node_modules/accepts/HISTORY.md +243 -0
- gaia/eval/webapp/node_modules/accepts/LICENSE +23 -0
- gaia/eval/webapp/node_modules/accepts/README.md +140 -0
- gaia/eval/webapp/node_modules/accepts/index.js +238 -0
- gaia/eval/webapp/node_modules/accepts/package.json +47 -0
- gaia/eval/webapp/node_modules/array-flatten/LICENSE +21 -0
- gaia/eval/webapp/node_modules/array-flatten/README.md +43 -0
- gaia/eval/webapp/node_modules/array-flatten/array-flatten.js +64 -0
- gaia/eval/webapp/node_modules/array-flatten/package.json +39 -0
- gaia/eval/webapp/node_modules/body-parser/HISTORY.md +672 -0
- gaia/eval/webapp/node_modules/body-parser/LICENSE +23 -0
- gaia/eval/webapp/node_modules/body-parser/README.md +476 -0
- gaia/eval/webapp/node_modules/body-parser/SECURITY.md +25 -0
- gaia/eval/webapp/node_modules/body-parser/index.js +156 -0
- gaia/eval/webapp/node_modules/body-parser/lib/read.js +205 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/json.js +247 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/raw.js +101 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/text.js +121 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/urlencoded.js +307 -0
- gaia/eval/webapp/node_modules/body-parser/package.json +56 -0
- gaia/eval/webapp/node_modules/bytes/History.md +97 -0
- gaia/eval/webapp/node_modules/bytes/LICENSE +23 -0
- gaia/eval/webapp/node_modules/bytes/Readme.md +152 -0
- gaia/eval/webapp/node_modules/bytes/index.js +170 -0
- gaia/eval/webapp/node_modules/bytes/package.json +42 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.nycrc +9 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/README.md +62 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.js +15 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/package.json +85 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/test/index.js +63 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/call-bound/.eslintrc +13 -0
- gaia/eval/webapp/node_modules/call-bound/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/call-bound/.nycrc +9 -0
- gaia/eval/webapp/node_modules/call-bound/CHANGELOG.md +42 -0
- gaia/eval/webapp/node_modules/call-bound/LICENSE +21 -0
- gaia/eval/webapp/node_modules/call-bound/README.md +53 -0
- gaia/eval/webapp/node_modules/call-bound/index.d.ts +94 -0
- gaia/eval/webapp/node_modules/call-bound/index.js +19 -0
- gaia/eval/webapp/node_modules/call-bound/package.json +99 -0
- gaia/eval/webapp/node_modules/call-bound/test/index.js +61 -0
- gaia/eval/webapp/node_modules/call-bound/tsconfig.json +10 -0
- gaia/eval/webapp/node_modules/content-disposition/HISTORY.md +60 -0
- gaia/eval/webapp/node_modules/content-disposition/LICENSE +22 -0
- gaia/eval/webapp/node_modules/content-disposition/README.md +142 -0
- gaia/eval/webapp/node_modules/content-disposition/index.js +458 -0
- gaia/eval/webapp/node_modules/content-disposition/package.json +44 -0
- gaia/eval/webapp/node_modules/content-type/HISTORY.md +29 -0
- gaia/eval/webapp/node_modules/content-type/LICENSE +22 -0
- gaia/eval/webapp/node_modules/content-type/README.md +94 -0
- gaia/eval/webapp/node_modules/content-type/index.js +225 -0
- gaia/eval/webapp/node_modules/content-type/package.json +42 -0
- gaia/eval/webapp/node_modules/cookie/LICENSE +24 -0
- gaia/eval/webapp/node_modules/cookie/README.md +317 -0
- gaia/eval/webapp/node_modules/cookie/SECURITY.md +25 -0
- gaia/eval/webapp/node_modules/cookie/index.js +334 -0
- gaia/eval/webapp/node_modules/cookie/package.json +44 -0
- gaia/eval/webapp/node_modules/cookie-signature/.npmignore +4 -0
- gaia/eval/webapp/node_modules/cookie-signature/History.md +38 -0
- gaia/eval/webapp/node_modules/cookie-signature/Readme.md +42 -0
- gaia/eval/webapp/node_modules/cookie-signature/index.js +51 -0
- gaia/eval/webapp/node_modules/cookie-signature/package.json +18 -0
- gaia/eval/webapp/node_modules/debug/.coveralls.yml +1 -0
- gaia/eval/webapp/node_modules/debug/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/debug/.npmignore +9 -0
- gaia/eval/webapp/node_modules/debug/.travis.yml +14 -0
- gaia/eval/webapp/node_modules/debug/CHANGELOG.md +362 -0
- gaia/eval/webapp/node_modules/debug/LICENSE +19 -0
- gaia/eval/webapp/node_modules/debug/Makefile +50 -0
- gaia/eval/webapp/node_modules/debug/README.md +312 -0
- gaia/eval/webapp/node_modules/debug/component.json +19 -0
- gaia/eval/webapp/node_modules/debug/karma.conf.js +70 -0
- gaia/eval/webapp/node_modules/debug/node.js +1 -0
- gaia/eval/webapp/node_modules/debug/package.json +49 -0
- gaia/eval/webapp/node_modules/debug/src/browser.js +185 -0
- gaia/eval/webapp/node_modules/debug/src/debug.js +202 -0
- gaia/eval/webapp/node_modules/debug/src/index.js +10 -0
- gaia/eval/webapp/node_modules/debug/src/inspector-log.js +15 -0
- gaia/eval/webapp/node_modules/debug/src/node.js +248 -0
- gaia/eval/webapp/node_modules/depd/History.md +103 -0
- gaia/eval/webapp/node_modules/depd/LICENSE +22 -0
- gaia/eval/webapp/node_modules/depd/Readme.md +280 -0
- gaia/eval/webapp/node_modules/depd/index.js +538 -0
- gaia/eval/webapp/node_modules/depd/lib/browser/index.js +77 -0
- gaia/eval/webapp/node_modules/depd/package.json +45 -0
- gaia/eval/webapp/node_modules/destroy/LICENSE +23 -0
- gaia/eval/webapp/node_modules/destroy/README.md +63 -0
- gaia/eval/webapp/node_modules/destroy/index.js +209 -0
- gaia/eval/webapp/node_modules/destroy/package.json +48 -0
- gaia/eval/webapp/node_modules/dunder-proto/.eslintrc +5 -0
- gaia/eval/webapp/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/dunder-proto/.nycrc +13 -0
- gaia/eval/webapp/node_modules/dunder-proto/CHANGELOG.md +24 -0
- gaia/eval/webapp/node_modules/dunder-proto/LICENSE +21 -0
- gaia/eval/webapp/node_modules/dunder-proto/README.md +54 -0
- gaia/eval/webapp/node_modules/dunder-proto/get.d.ts +5 -0
- gaia/eval/webapp/node_modules/dunder-proto/get.js +30 -0
- gaia/eval/webapp/node_modules/dunder-proto/package.json +76 -0
- gaia/eval/webapp/node_modules/dunder-proto/set.d.ts +5 -0
- gaia/eval/webapp/node_modules/dunder-proto/set.js +35 -0
- gaia/eval/webapp/node_modules/dunder-proto/test/get.js +34 -0
- gaia/eval/webapp/node_modules/dunder-proto/test/index.js +4 -0
- gaia/eval/webapp/node_modules/dunder-proto/test/set.js +50 -0
- gaia/eval/webapp/node_modules/dunder-proto/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/ee-first/LICENSE +22 -0
- gaia/eval/webapp/node_modules/ee-first/README.md +80 -0
- gaia/eval/webapp/node_modules/ee-first/index.js +95 -0
- gaia/eval/webapp/node_modules/ee-first/package.json +29 -0
- gaia/eval/webapp/node_modules/encodeurl/LICENSE +22 -0
- gaia/eval/webapp/node_modules/encodeurl/README.md +109 -0
- gaia/eval/webapp/node_modules/encodeurl/index.js +60 -0
- gaia/eval/webapp/node_modules/encodeurl/package.json +40 -0
- gaia/eval/webapp/node_modules/es-define-property/.eslintrc +13 -0
- gaia/eval/webapp/node_modules/es-define-property/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/es-define-property/.nycrc +9 -0
- gaia/eval/webapp/node_modules/es-define-property/CHANGELOG.md +29 -0
- gaia/eval/webapp/node_modules/es-define-property/LICENSE +21 -0
- gaia/eval/webapp/node_modules/es-define-property/README.md +49 -0
- gaia/eval/webapp/node_modules/es-define-property/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-define-property/index.js +14 -0
- gaia/eval/webapp/node_modules/es-define-property/package.json +81 -0
- gaia/eval/webapp/node_modules/es-define-property/test/index.js +56 -0
- gaia/eval/webapp/node_modules/es-define-property/tsconfig.json +10 -0
- gaia/eval/webapp/node_modules/es-errors/.eslintrc +5 -0
- gaia/eval/webapp/node_modules/es-errors/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/es-errors/CHANGELOG.md +40 -0
- gaia/eval/webapp/node_modules/es-errors/LICENSE +21 -0
- gaia/eval/webapp/node_modules/es-errors/README.md +55 -0
- gaia/eval/webapp/node_modules/es-errors/eval.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/eval.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/index.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/package.json +80 -0
- gaia/eval/webapp/node_modules/es-errors/range.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/range.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/ref.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/ref.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/syntax.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/syntax.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/test/index.js +19 -0
- gaia/eval/webapp/node_modules/es-errors/tsconfig.json +49 -0
- gaia/eval/webapp/node_modules/es-errors/type.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/type.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/uri.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/uri.js +4 -0
- gaia/eval/webapp/node_modules/es-object-atoms/.eslintrc +16 -0
- gaia/eval/webapp/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/es-object-atoms/CHANGELOG.md +37 -0
- gaia/eval/webapp/node_modules/es-object-atoms/LICENSE +21 -0
- gaia/eval/webapp/node_modules/es-object-atoms/README.md +63 -0
- gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- gaia/eval/webapp/node_modules/es-object-atoms/ToObject.d.ts +7 -0
- gaia/eval/webapp/node_modules/es-object-atoms/ToObject.js +10 -0
- gaia/eval/webapp/node_modules/es-object-atoms/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-object-atoms/index.js +4 -0
- gaia/eval/webapp/node_modules/es-object-atoms/isObject.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-object-atoms/isObject.js +6 -0
- gaia/eval/webapp/node_modules/es-object-atoms/package.json +80 -0
- gaia/eval/webapp/node_modules/es-object-atoms/test/index.js +38 -0
- gaia/eval/webapp/node_modules/es-object-atoms/tsconfig.json +6 -0
- gaia/eval/webapp/node_modules/escape-html/LICENSE +24 -0
- gaia/eval/webapp/node_modules/escape-html/Readme.md +43 -0
- gaia/eval/webapp/node_modules/escape-html/index.js +78 -0
- gaia/eval/webapp/node_modules/escape-html/package.json +24 -0
- gaia/eval/webapp/node_modules/etag/HISTORY.md +83 -0
- gaia/eval/webapp/node_modules/etag/LICENSE +22 -0
- gaia/eval/webapp/node_modules/etag/README.md +159 -0
- gaia/eval/webapp/node_modules/etag/index.js +131 -0
- gaia/eval/webapp/node_modules/etag/package.json +47 -0
- gaia/eval/webapp/node_modules/express/History.md +3656 -0
- gaia/eval/webapp/node_modules/express/LICENSE +24 -0
- gaia/eval/webapp/node_modules/express/Readme.md +260 -0
- gaia/eval/webapp/node_modules/express/index.js +11 -0
- gaia/eval/webapp/node_modules/express/lib/application.js +661 -0
- gaia/eval/webapp/node_modules/express/lib/express.js +116 -0
- gaia/eval/webapp/node_modules/express/lib/middleware/init.js +43 -0
- gaia/eval/webapp/node_modules/express/lib/middleware/query.js +47 -0
- gaia/eval/webapp/node_modules/express/lib/request.js +525 -0
- gaia/eval/webapp/node_modules/express/lib/response.js +1179 -0
- gaia/eval/webapp/node_modules/express/lib/router/index.js +673 -0
- gaia/eval/webapp/node_modules/express/lib/router/layer.js +181 -0
- gaia/eval/webapp/node_modules/express/lib/router/route.js +230 -0
- gaia/eval/webapp/node_modules/express/lib/utils.js +303 -0
- gaia/eval/webapp/node_modules/express/lib/view.js +182 -0
- gaia/eval/webapp/node_modules/express/package.json +102 -0
- gaia/eval/webapp/node_modules/finalhandler/HISTORY.md +210 -0
- gaia/eval/webapp/node_modules/finalhandler/LICENSE +22 -0
- gaia/eval/webapp/node_modules/finalhandler/README.md +147 -0
- gaia/eval/webapp/node_modules/finalhandler/SECURITY.md +25 -0
- gaia/eval/webapp/node_modules/finalhandler/index.js +341 -0
- gaia/eval/webapp/node_modules/finalhandler/package.json +47 -0
- gaia/eval/webapp/node_modules/forwarded/HISTORY.md +21 -0
- gaia/eval/webapp/node_modules/forwarded/LICENSE +22 -0
- gaia/eval/webapp/node_modules/forwarded/README.md +57 -0
- gaia/eval/webapp/node_modules/forwarded/index.js +90 -0
- gaia/eval/webapp/node_modules/forwarded/package.json +45 -0
- gaia/eval/webapp/node_modules/fresh/HISTORY.md +70 -0
- gaia/eval/webapp/node_modules/fresh/LICENSE +23 -0
- gaia/eval/webapp/node_modules/fresh/README.md +119 -0
- gaia/eval/webapp/node_modules/fresh/index.js +137 -0
- gaia/eval/webapp/node_modules/fresh/package.json +46 -0
- gaia/eval/webapp/node_modules/fs/README.md +9 -0
- gaia/eval/webapp/node_modules/fs/package.json +20 -0
- gaia/eval/webapp/node_modules/function-bind/.eslintrc +21 -0
- gaia/eval/webapp/node_modules/function-bind/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/function-bind/.github/SECURITY.md +3 -0
- gaia/eval/webapp/node_modules/function-bind/.nycrc +13 -0
- gaia/eval/webapp/node_modules/function-bind/CHANGELOG.md +136 -0
- gaia/eval/webapp/node_modules/function-bind/LICENSE +20 -0
- gaia/eval/webapp/node_modules/function-bind/README.md +46 -0
- gaia/eval/webapp/node_modules/function-bind/implementation.js +84 -0
- gaia/eval/webapp/node_modules/function-bind/index.js +5 -0
- gaia/eval/webapp/node_modules/function-bind/package.json +87 -0
- gaia/eval/webapp/node_modules/function-bind/test/.eslintrc +9 -0
- gaia/eval/webapp/node_modules/function-bind/test/index.js +252 -0
- gaia/eval/webapp/node_modules/get-intrinsic/.eslintrc +42 -0
- gaia/eval/webapp/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/get-intrinsic/.nycrc +9 -0
- gaia/eval/webapp/node_modules/get-intrinsic/CHANGELOG.md +186 -0
- gaia/eval/webapp/node_modules/get-intrinsic/LICENSE +21 -0
- gaia/eval/webapp/node_modules/get-intrinsic/README.md +71 -0
- gaia/eval/webapp/node_modules/get-intrinsic/index.js +378 -0
- gaia/eval/webapp/node_modules/get-intrinsic/package.json +97 -0
- gaia/eval/webapp/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
- gaia/eval/webapp/node_modules/get-proto/.eslintrc +10 -0
- gaia/eval/webapp/node_modules/get-proto/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/get-proto/.nycrc +9 -0
- gaia/eval/webapp/node_modules/get-proto/CHANGELOG.md +21 -0
- gaia/eval/webapp/node_modules/get-proto/LICENSE +21 -0
- gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
- gaia/eval/webapp/node_modules/get-proto/README.md +50 -0
- gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- gaia/eval/webapp/node_modules/get-proto/index.d.ts +5 -0
- gaia/eval/webapp/node_modules/get-proto/index.js +27 -0
- gaia/eval/webapp/node_modules/get-proto/package.json +81 -0
- gaia/eval/webapp/node_modules/get-proto/test/index.js +68 -0
- gaia/eval/webapp/node_modules/get-proto/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/gopd/.eslintrc +16 -0
- gaia/eval/webapp/node_modules/gopd/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/gopd/CHANGELOG.md +45 -0
- gaia/eval/webapp/node_modules/gopd/LICENSE +21 -0
- gaia/eval/webapp/node_modules/gopd/README.md +40 -0
- gaia/eval/webapp/node_modules/gopd/gOPD.d.ts +1 -0
- gaia/eval/webapp/node_modules/gopd/gOPD.js +4 -0
- gaia/eval/webapp/node_modules/gopd/index.d.ts +5 -0
- gaia/eval/webapp/node_modules/gopd/index.js +15 -0
- gaia/eval/webapp/node_modules/gopd/package.json +77 -0
- gaia/eval/webapp/node_modules/gopd/test/index.js +36 -0
- gaia/eval/webapp/node_modules/gopd/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/has-symbols/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/has-symbols/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/has-symbols/.nycrc +9 -0
- gaia/eval/webapp/node_modules/has-symbols/CHANGELOG.md +91 -0
- gaia/eval/webapp/node_modules/has-symbols/LICENSE +21 -0
- gaia/eval/webapp/node_modules/has-symbols/README.md +46 -0
- gaia/eval/webapp/node_modules/has-symbols/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/has-symbols/index.js +14 -0
- gaia/eval/webapp/node_modules/has-symbols/package.json +111 -0
- gaia/eval/webapp/node_modules/has-symbols/shams.d.ts +3 -0
- gaia/eval/webapp/node_modules/has-symbols/shams.js +45 -0
- gaia/eval/webapp/node_modules/has-symbols/test/index.js +22 -0
- gaia/eval/webapp/node_modules/has-symbols/test/shams/core-js.js +29 -0
- gaia/eval/webapp/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
- gaia/eval/webapp/node_modules/has-symbols/test/tests.js +58 -0
- gaia/eval/webapp/node_modules/has-symbols/tsconfig.json +10 -0
- gaia/eval/webapp/node_modules/hasown/.eslintrc +5 -0
- gaia/eval/webapp/node_modules/hasown/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/hasown/.nycrc +13 -0
- gaia/eval/webapp/node_modules/hasown/CHANGELOG.md +40 -0
- gaia/eval/webapp/node_modules/hasown/LICENSE +21 -0
- gaia/eval/webapp/node_modules/hasown/README.md +40 -0
- gaia/eval/webapp/node_modules/hasown/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/hasown/index.js +8 -0
- gaia/eval/webapp/node_modules/hasown/package.json +92 -0
- gaia/eval/webapp/node_modules/hasown/tsconfig.json +6 -0
- gaia/eval/webapp/node_modules/http-errors/HISTORY.md +180 -0
- gaia/eval/webapp/node_modules/http-errors/LICENSE +23 -0
- gaia/eval/webapp/node_modules/http-errors/README.md +169 -0
- gaia/eval/webapp/node_modules/http-errors/index.js +289 -0
- gaia/eval/webapp/node_modules/http-errors/package.json +50 -0
- gaia/eval/webapp/node_modules/iconv-lite/Changelog.md +162 -0
- gaia/eval/webapp/node_modules/iconv-lite/LICENSE +21 -0
- gaia/eval/webapp/node_modules/iconv-lite/README.md +156 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/index.js +22 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/internal.js +188 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/utf16.js +177 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/utf7.js +290 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/bom-handling.js +52 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/extend-node.js +217 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/index.d.ts +24 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/index.js +153 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/streams.js +121 -0
- gaia/eval/webapp/node_modules/iconv-lite/package.json +46 -0
- gaia/eval/webapp/node_modules/inherits/LICENSE +16 -0
- gaia/eval/webapp/node_modules/inherits/README.md +42 -0
- gaia/eval/webapp/node_modules/inherits/inherits.js +9 -0
- gaia/eval/webapp/node_modules/inherits/inherits_browser.js +27 -0
- gaia/eval/webapp/node_modules/inherits/package.json +29 -0
- gaia/eval/webapp/node_modules/ipaddr.js/LICENSE +19 -0
- gaia/eval/webapp/node_modules/ipaddr.js/README.md +233 -0
- gaia/eval/webapp/node_modules/ipaddr.js/ipaddr.min.js +1 -0
- gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
- gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- gaia/eval/webapp/node_modules/ipaddr.js/package.json +35 -0
- gaia/eval/webapp/node_modules/math-intrinsics/.eslintrc +16 -0
- gaia/eval/webapp/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/math-intrinsics/CHANGELOG.md +24 -0
- gaia/eval/webapp/node_modules/math-intrinsics/LICENSE +21 -0
- gaia/eval/webapp/node_modules/math-intrinsics/README.md +50 -0
- gaia/eval/webapp/node_modules/math-intrinsics/abs.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/abs.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.js +5 -0
- gaia/eval/webapp/node_modules/math-intrinsics/floor.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/floor.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isFinite.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isFinite.js +12 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isInteger.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isInteger.js +16 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNaN.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNaN.js +6 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.js +6 -0
- gaia/eval/webapp/node_modules/math-intrinsics/max.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/max.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/min.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/min.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/mod.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/mod.js +9 -0
- gaia/eval/webapp/node_modules/math-intrinsics/package.json +86 -0
- gaia/eval/webapp/node_modules/math-intrinsics/pow.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/pow.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/round.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/round.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/sign.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/sign.js +11 -0
- gaia/eval/webapp/node_modules/math-intrinsics/test/index.js +192 -0
- gaia/eval/webapp/node_modules/math-intrinsics/tsconfig.json +3 -0
- gaia/eval/webapp/node_modules/media-typer/HISTORY.md +22 -0
- gaia/eval/webapp/node_modules/media-typer/LICENSE +22 -0
- gaia/eval/webapp/node_modules/media-typer/README.md +81 -0
- gaia/eval/webapp/node_modules/media-typer/index.js +270 -0
- gaia/eval/webapp/node_modules/media-typer/package.json +26 -0
- gaia/eval/webapp/node_modules/merge-descriptors/HISTORY.md +21 -0
- gaia/eval/webapp/node_modules/merge-descriptors/LICENSE +23 -0
- gaia/eval/webapp/node_modules/merge-descriptors/README.md +49 -0
- gaia/eval/webapp/node_modules/merge-descriptors/index.js +60 -0
- gaia/eval/webapp/node_modules/merge-descriptors/package.json +39 -0
- gaia/eval/webapp/node_modules/methods/HISTORY.md +29 -0
- gaia/eval/webapp/node_modules/methods/LICENSE +24 -0
- gaia/eval/webapp/node_modules/methods/README.md +51 -0
- gaia/eval/webapp/node_modules/methods/index.js +69 -0
- gaia/eval/webapp/node_modules/methods/package.json +36 -0
- gaia/eval/webapp/node_modules/mime/.npmignore +0 -0
- gaia/eval/webapp/node_modules/mime/CHANGELOG.md +164 -0
- gaia/eval/webapp/node_modules/mime/LICENSE +21 -0
- gaia/eval/webapp/node_modules/mime/README.md +90 -0
- gaia/eval/webapp/node_modules/mime/cli.js +8 -0
- gaia/eval/webapp/node_modules/mime/mime.js +108 -0
- gaia/eval/webapp/node_modules/mime/package.json +44 -0
- gaia/eval/webapp/node_modules/mime/src/build.js +53 -0
- gaia/eval/webapp/node_modules/mime/src/test.js +60 -0
- gaia/eval/webapp/node_modules/mime/types.json +1 -0
- gaia/eval/webapp/node_modules/mime-db/HISTORY.md +507 -0
- gaia/eval/webapp/node_modules/mime-db/LICENSE +23 -0
- gaia/eval/webapp/node_modules/mime-db/README.md +100 -0
- gaia/eval/webapp/node_modules/mime-db/db.json +8519 -0
- gaia/eval/webapp/node_modules/mime-db/index.js +12 -0
- gaia/eval/webapp/node_modules/mime-db/package.json +60 -0
- gaia/eval/webapp/node_modules/mime-types/HISTORY.md +397 -0
- gaia/eval/webapp/node_modules/mime-types/LICENSE +23 -0
- gaia/eval/webapp/node_modules/mime-types/README.md +113 -0
- gaia/eval/webapp/node_modules/mime-types/index.js +188 -0
- gaia/eval/webapp/node_modules/mime-types/package.json +44 -0
- gaia/eval/webapp/node_modules/ms/index.js +152 -0
- gaia/eval/webapp/node_modules/ms/license.md +21 -0
- gaia/eval/webapp/node_modules/ms/package.json +37 -0
- gaia/eval/webapp/node_modules/ms/readme.md +51 -0
- gaia/eval/webapp/node_modules/negotiator/HISTORY.md +108 -0
- gaia/eval/webapp/node_modules/negotiator/LICENSE +24 -0
- gaia/eval/webapp/node_modules/negotiator/README.md +203 -0
- gaia/eval/webapp/node_modules/negotiator/index.js +82 -0
- gaia/eval/webapp/node_modules/negotiator/lib/charset.js +169 -0
- gaia/eval/webapp/node_modules/negotiator/lib/encoding.js +184 -0
- gaia/eval/webapp/node_modules/negotiator/lib/language.js +179 -0
- gaia/eval/webapp/node_modules/negotiator/lib/mediaType.js +294 -0
- gaia/eval/webapp/node_modules/negotiator/package.json +42 -0
- gaia/eval/webapp/node_modules/object-inspect/.eslintrc +53 -0
- gaia/eval/webapp/node_modules/object-inspect/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/object-inspect/.nycrc +13 -0
- gaia/eval/webapp/node_modules/object-inspect/CHANGELOG.md +424 -0
- gaia/eval/webapp/node_modules/object-inspect/LICENSE +21 -0
- gaia/eval/webapp/node_modules/object-inspect/example/all.js +23 -0
- gaia/eval/webapp/node_modules/object-inspect/example/circular.js +6 -0
- gaia/eval/webapp/node_modules/object-inspect/example/fn.js +5 -0
- gaia/eval/webapp/node_modules/object-inspect/example/inspect.js +10 -0
- gaia/eval/webapp/node_modules/object-inspect/index.js +544 -0
- gaia/eval/webapp/node_modules/object-inspect/package-support.json +20 -0
- gaia/eval/webapp/node_modules/object-inspect/package.json +105 -0
- gaia/eval/webapp/node_modules/object-inspect/readme.markdown +84 -0
- gaia/eval/webapp/node_modules/object-inspect/test/bigint.js +58 -0
- gaia/eval/webapp/node_modules/object-inspect/test/browser/dom.js +15 -0
- gaia/eval/webapp/node_modules/object-inspect/test/circular.js +16 -0
- gaia/eval/webapp/node_modules/object-inspect/test/deep.js +12 -0
- gaia/eval/webapp/node_modules/object-inspect/test/element.js +53 -0
- gaia/eval/webapp/node_modules/object-inspect/test/err.js +48 -0
- gaia/eval/webapp/node_modules/object-inspect/test/fakes.js +29 -0
- gaia/eval/webapp/node_modules/object-inspect/test/fn.js +76 -0
- gaia/eval/webapp/node_modules/object-inspect/test/global.js +17 -0
- gaia/eval/webapp/node_modules/object-inspect/test/has.js +15 -0
- gaia/eval/webapp/node_modules/object-inspect/test/holes.js +15 -0
- gaia/eval/webapp/node_modules/object-inspect/test/indent-option.js +271 -0
- gaia/eval/webapp/node_modules/object-inspect/test/inspect.js +139 -0
- gaia/eval/webapp/node_modules/object-inspect/test/lowbyte.js +12 -0
- gaia/eval/webapp/node_modules/object-inspect/test/number.js +58 -0
- gaia/eval/webapp/node_modules/object-inspect/test/quoteStyle.js +26 -0
- gaia/eval/webapp/node_modules/object-inspect/test/toStringTag.js +40 -0
- gaia/eval/webapp/node_modules/object-inspect/test/undef.js +12 -0
- gaia/eval/webapp/node_modules/object-inspect/test/values.js +261 -0
- gaia/eval/webapp/node_modules/object-inspect/test-core-js.js +26 -0
- gaia/eval/webapp/node_modules/object-inspect/util.inspect.js +1 -0
- gaia/eval/webapp/node_modules/on-finished/HISTORY.md +98 -0
- gaia/eval/webapp/node_modules/on-finished/LICENSE +23 -0
- gaia/eval/webapp/node_modules/on-finished/README.md +162 -0
- gaia/eval/webapp/node_modules/on-finished/index.js +234 -0
- gaia/eval/webapp/node_modules/on-finished/package.json +39 -0
- gaia/eval/webapp/node_modules/parseurl/HISTORY.md +58 -0
- gaia/eval/webapp/node_modules/parseurl/LICENSE +24 -0
- gaia/eval/webapp/node_modules/parseurl/README.md +133 -0
- gaia/eval/webapp/node_modules/parseurl/index.js +158 -0
- gaia/eval/webapp/node_modules/parseurl/package.json +40 -0
- gaia/eval/webapp/node_modules/path/.npmignore +1 -0
- gaia/eval/webapp/node_modules/path/LICENSE +18 -0
- gaia/eval/webapp/node_modules/path/README.md +15 -0
- gaia/eval/webapp/node_modules/path/package.json +24 -0
- gaia/eval/webapp/node_modules/path/path.js +628 -0
- gaia/eval/webapp/node_modules/path-to-regexp/LICENSE +21 -0
- gaia/eval/webapp/node_modules/path-to-regexp/Readme.md +35 -0
- gaia/eval/webapp/node_modules/path-to-regexp/index.js +156 -0
- gaia/eval/webapp/node_modules/path-to-regexp/package.json +30 -0
- gaia/eval/webapp/node_modules/process/.eslintrc +21 -0
- gaia/eval/webapp/node_modules/process/LICENSE +22 -0
- gaia/eval/webapp/node_modules/process/README.md +26 -0
- gaia/eval/webapp/node_modules/process/browser.js +184 -0
- gaia/eval/webapp/node_modules/process/index.js +2 -0
- gaia/eval/webapp/node_modules/process/package.json +27 -0
- gaia/eval/webapp/node_modules/process/test.js +199 -0
- gaia/eval/webapp/node_modules/proxy-addr/HISTORY.md +161 -0
- gaia/eval/webapp/node_modules/proxy-addr/LICENSE +22 -0
- gaia/eval/webapp/node_modules/proxy-addr/README.md +139 -0
- gaia/eval/webapp/node_modules/proxy-addr/index.js +327 -0
- gaia/eval/webapp/node_modules/proxy-addr/package.json +47 -0
- gaia/eval/webapp/node_modules/qs/.editorconfig +46 -0
- gaia/eval/webapp/node_modules/qs/.eslintrc +38 -0
- gaia/eval/webapp/node_modules/qs/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/qs/.nycrc +13 -0
- gaia/eval/webapp/node_modules/qs/CHANGELOG.md +600 -0
- gaia/eval/webapp/node_modules/qs/LICENSE.md +29 -0
- gaia/eval/webapp/node_modules/qs/README.md +709 -0
- gaia/eval/webapp/node_modules/qs/dist/qs.js +90 -0
- gaia/eval/webapp/node_modules/qs/lib/formats.js +23 -0
- gaia/eval/webapp/node_modules/qs/lib/index.js +11 -0
- gaia/eval/webapp/node_modules/qs/lib/parse.js +296 -0
- gaia/eval/webapp/node_modules/qs/lib/stringify.js +351 -0
- gaia/eval/webapp/node_modules/qs/lib/utils.js +265 -0
- gaia/eval/webapp/node_modules/qs/package.json +91 -0
- gaia/eval/webapp/node_modules/qs/test/empty-keys-cases.js +267 -0
- gaia/eval/webapp/node_modules/qs/test/parse.js +1170 -0
- gaia/eval/webapp/node_modules/qs/test/stringify.js +1298 -0
- gaia/eval/webapp/node_modules/qs/test/utils.js +136 -0
- gaia/eval/webapp/node_modules/range-parser/HISTORY.md +56 -0
- gaia/eval/webapp/node_modules/range-parser/LICENSE +23 -0
- gaia/eval/webapp/node_modules/range-parser/README.md +84 -0
- gaia/eval/webapp/node_modules/range-parser/index.js +162 -0
- gaia/eval/webapp/node_modules/range-parser/package.json +44 -0
- gaia/eval/webapp/node_modules/raw-body/HISTORY.md +308 -0
- gaia/eval/webapp/node_modules/raw-body/LICENSE +22 -0
- gaia/eval/webapp/node_modules/raw-body/README.md +223 -0
- gaia/eval/webapp/node_modules/raw-body/SECURITY.md +24 -0
- gaia/eval/webapp/node_modules/raw-body/index.d.ts +87 -0
- gaia/eval/webapp/node_modules/raw-body/index.js +336 -0
- gaia/eval/webapp/node_modules/raw-body/package.json +49 -0
- gaia/eval/webapp/node_modules/safe-buffer/LICENSE +21 -0
- gaia/eval/webapp/node_modules/safe-buffer/README.md +584 -0
- gaia/eval/webapp/node_modules/safe-buffer/index.d.ts +187 -0
- gaia/eval/webapp/node_modules/safe-buffer/index.js +65 -0
- gaia/eval/webapp/node_modules/safe-buffer/package.json +51 -0
- gaia/eval/webapp/node_modules/safer-buffer/LICENSE +21 -0
- gaia/eval/webapp/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- gaia/eval/webapp/node_modules/safer-buffer/Readme.md +156 -0
- gaia/eval/webapp/node_modules/safer-buffer/dangerous.js +58 -0
- gaia/eval/webapp/node_modules/safer-buffer/package.json +34 -0
- gaia/eval/webapp/node_modules/safer-buffer/safer.js +77 -0
- gaia/eval/webapp/node_modules/safer-buffer/tests.js +406 -0
- gaia/eval/webapp/node_modules/send/HISTORY.md +526 -0
- gaia/eval/webapp/node_modules/send/LICENSE +23 -0
- gaia/eval/webapp/node_modules/send/README.md +327 -0
- gaia/eval/webapp/node_modules/send/SECURITY.md +24 -0
- gaia/eval/webapp/node_modules/send/index.js +1142 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/HISTORY.md +14 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/LICENSE +22 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/README.md +128 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/index.js +60 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/package.json +40 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/index.js +162 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/license.md +21 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/package.json +38 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/readme.md +59 -0
- gaia/eval/webapp/node_modules/send/package.json +62 -0
- gaia/eval/webapp/node_modules/serve-static/HISTORY.md +487 -0
- gaia/eval/webapp/node_modules/serve-static/LICENSE +25 -0
- gaia/eval/webapp/node_modules/serve-static/README.md +257 -0
- gaia/eval/webapp/node_modules/serve-static/index.js +209 -0
- gaia/eval/webapp/node_modules/serve-static/package.json +42 -0
- gaia/eval/webapp/node_modules/setprototypeof/LICENSE +13 -0
- gaia/eval/webapp/node_modules/setprototypeof/README.md +31 -0
- gaia/eval/webapp/node_modules/setprototypeof/index.d.ts +2 -0
- gaia/eval/webapp/node_modules/setprototypeof/index.js +17 -0
- gaia/eval/webapp/node_modules/setprototypeof/package.json +38 -0
- gaia/eval/webapp/node_modules/setprototypeof/test/index.js +24 -0
- gaia/eval/webapp/node_modules/side-channel/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel/.eslintrc +12 -0
- gaia/eval/webapp/node_modules/side-channel/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel/CHANGELOG.md +110 -0
- gaia/eval/webapp/node_modules/side-channel/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel/README.md +61 -0
- gaia/eval/webapp/node_modules/side-channel/index.d.ts +14 -0
- gaia/eval/webapp/node_modules/side-channel/index.js +43 -0
- gaia/eval/webapp/node_modules/side-channel/package.json +85 -0
- gaia/eval/webapp/node_modules/side-channel/test/index.js +104 -0
- gaia/eval/webapp/node_modules/side-channel/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/side-channel-list/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel-list/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel-list/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel-list/CHANGELOG.md +15 -0
- gaia/eval/webapp/node_modules/side-channel-list/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel-list/README.md +62 -0
- gaia/eval/webapp/node_modules/side-channel-list/index.d.ts +13 -0
- gaia/eval/webapp/node_modules/side-channel-list/index.js +113 -0
- gaia/eval/webapp/node_modules/side-channel-list/list.d.ts +14 -0
- gaia/eval/webapp/node_modules/side-channel-list/package.json +77 -0
- gaia/eval/webapp/node_modules/side-channel-list/test/index.js +104 -0
- gaia/eval/webapp/node_modules/side-channel-list/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/side-channel-map/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel-map/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel-map/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel-map/CHANGELOG.md +22 -0
- gaia/eval/webapp/node_modules/side-channel-map/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel-map/README.md +62 -0
- gaia/eval/webapp/node_modules/side-channel-map/index.d.ts +15 -0
- gaia/eval/webapp/node_modules/side-channel-map/index.js +68 -0
- gaia/eval/webapp/node_modules/side-channel-map/package.json +80 -0
- gaia/eval/webapp/node_modules/side-channel-map/test/index.js +114 -0
- gaia/eval/webapp/node_modules/side-channel-map/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.eslintrc +12 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/README.md +62 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/index.d.ts +15 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/index.js +84 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/package.json +87 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/test/index.js +114 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/statuses/HISTORY.md +82 -0
- gaia/eval/webapp/node_modules/statuses/LICENSE +23 -0
- gaia/eval/webapp/node_modules/statuses/README.md +136 -0
- gaia/eval/webapp/node_modules/statuses/codes.json +65 -0
- gaia/eval/webapp/node_modules/statuses/index.js +146 -0
- gaia/eval/webapp/node_modules/statuses/package.json +49 -0
- gaia/eval/webapp/node_modules/toidentifier/HISTORY.md +9 -0
- gaia/eval/webapp/node_modules/toidentifier/LICENSE +21 -0
- gaia/eval/webapp/node_modules/toidentifier/README.md +61 -0
- gaia/eval/webapp/node_modules/toidentifier/index.js +32 -0
- gaia/eval/webapp/node_modules/toidentifier/package.json +38 -0
- gaia/eval/webapp/node_modules/type-is/HISTORY.md +259 -0
- gaia/eval/webapp/node_modules/type-is/LICENSE +23 -0
- gaia/eval/webapp/node_modules/type-is/README.md +170 -0
- gaia/eval/webapp/node_modules/type-is/index.js +266 -0
- gaia/eval/webapp/node_modules/type-is/package.json +45 -0
- gaia/eval/webapp/node_modules/unpipe/HISTORY.md +4 -0
- gaia/eval/webapp/node_modules/unpipe/LICENSE +22 -0
- gaia/eval/webapp/node_modules/unpipe/README.md +43 -0
- gaia/eval/webapp/node_modules/unpipe/index.js +69 -0
- gaia/eval/webapp/node_modules/unpipe/package.json +27 -0
- gaia/eval/webapp/node_modules/util/LICENSE +18 -0
- gaia/eval/webapp/node_modules/util/README.md +15 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/LICENSE +16 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/README.md +42 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits.js +7 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits_browser.js +23 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/package.json +29 -0
- gaia/eval/webapp/node_modules/util/package.json +35 -0
- gaia/eval/webapp/node_modules/util/support/isBuffer.js +3 -0
- gaia/eval/webapp/node_modules/util/support/isBufferBrowser.js +6 -0
- gaia/eval/webapp/node_modules/util/util.js +586 -0
- gaia/eval/webapp/node_modules/utils-merge/.npmignore +9 -0
- gaia/eval/webapp/node_modules/utils-merge/LICENSE +20 -0
- gaia/eval/webapp/node_modules/utils-merge/README.md +34 -0
- gaia/eval/webapp/node_modules/utils-merge/index.js +23 -0
- gaia/eval/webapp/node_modules/utils-merge/package.json +40 -0
- gaia/eval/webapp/node_modules/vary/HISTORY.md +39 -0
- gaia/eval/webapp/node_modules/vary/LICENSE +22 -0
- gaia/eval/webapp/node_modules/vary/README.md +101 -0
- gaia/eval/webapp/node_modules/vary/index.js +149 -0
- gaia/eval/webapp/node_modules/vary/package.json +43 -0
- gaia/eval/webapp/package-lock.json +875 -0
- gaia/eval/webapp/package.json +21 -0
- gaia/eval/webapp/public/app.js +3403 -0
- gaia/eval/webapp/public/index.html +88 -0
- gaia/eval/webapp/public/styles.css +3661 -0
- gaia/eval/webapp/server.js +416 -0
- gaia/eval/webapp/test-setup.js +73 -0
- gaia/llm/__init__.py +2 -0
- gaia/llm/lemonade_client.py +3083 -0
- gaia/llm/lemonade_manager.py +269 -0
- gaia/llm/llm_client.py +729 -0
- gaia/llm/vlm_client.py +307 -0
- gaia/logger.py +189 -0
- gaia/mcp/agent_mcp_server.py +245 -0
- gaia/mcp/blender_mcp_client.py +138 -0
- gaia/mcp/blender_mcp_server.py +648 -0
- gaia/mcp/context7_cache.py +332 -0
- gaia/mcp/external_services.py +518 -0
- gaia/mcp/mcp_bridge.py +550 -0
- gaia/mcp/servers/__init__.py +6 -0
- gaia/mcp/servers/docker_mcp.py +83 -0
- gaia/rag/__init__.py +10 -0
- gaia/rag/app.py +293 -0
- gaia/rag/demo.py +304 -0
- gaia/rag/pdf_utils.py +235 -0
- gaia/rag/sdk.py +2194 -0
- gaia/security.py +163 -0
- gaia/talk/app.py +289 -0
- gaia/talk/sdk.py +538 -0
- gaia/util.py +46 -0
- gaia/version.py +100 -0
|
@@ -0,0 +1,642 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
"""
|
|
5
|
+
Docker Agent for GAIA.
|
|
6
|
+
|
|
7
|
+
This agent provides an intelligent interface for containerizing applications,
|
|
8
|
+
generating Dockerfiles, and managing Docker containers through natural language commands.
|
|
9
|
+
"""
|
|
10
|
+
import json
|
|
11
|
+
import logging
|
|
12
|
+
import subprocess
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Any, Dict
|
|
15
|
+
|
|
16
|
+
from gaia.agents.base.console import AgentConsole, SilentConsole
|
|
17
|
+
from gaia.agents.base.mcp_agent import MCPAgent
|
|
18
|
+
from gaia.agents.base.tools import tool
|
|
19
|
+
from gaia.security import PathValidator
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
DEFAULT_MODEL = "Qwen3-Coder-30B-A3B-Instruct-GGUF"
|
|
24
|
+
DEFAULT_MAX_STEPS = 10
|
|
25
|
+
DEFAULT_PORT = 8080
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class DockerAgent(MCPAgent):
|
|
29
|
+
"""
|
|
30
|
+
Intelligent Docker agent for containerization assistance.
|
|
31
|
+
|
|
32
|
+
This agent helps developers containerize their applications by:
|
|
33
|
+
- Analyzing application structure and dependencies
|
|
34
|
+
- Generating appropriate Dockerfiles using LLM intelligence
|
|
35
|
+
- Building Docker images
|
|
36
|
+
- Running containers with proper configuration
|
|
37
|
+
|
|
38
|
+
The agent uses Lemonade/LLM to understand the application context
|
|
39
|
+
and generate optimal Dockerfiles based on best practices.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def __init__(self, **kwargs):
|
|
43
|
+
"""Initialize the Docker agent.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
**kwargs: Agent initialization parameters:
|
|
47
|
+
- max_steps: Maximum conversation steps (default: 10)
|
|
48
|
+
- model_id: LLM model to use (default: Qwen3-Coder-30B-A3B-Instruct-GGUF)
|
|
49
|
+
- silent_mode: Suppress console output (default: False)
|
|
50
|
+
- debug: Enable debug logging (default: False)
|
|
51
|
+
- show_prompts: Display prompts sent to LLM (default: False)
|
|
52
|
+
"""
|
|
53
|
+
# Use larger coding model for reliable Dockerfile generation
|
|
54
|
+
if "model_id" not in kwargs:
|
|
55
|
+
kwargs["model_id"] = DEFAULT_MODEL
|
|
56
|
+
|
|
57
|
+
if "max_steps" not in kwargs:
|
|
58
|
+
kwargs["max_steps"] = DEFAULT_MAX_STEPS
|
|
59
|
+
|
|
60
|
+
# Security: Configure allowed paths for file operations
|
|
61
|
+
# If None, allow current directory and subdirectories
|
|
62
|
+
self.allowed_paths = kwargs.pop("allowed_paths", None)
|
|
63
|
+
self.path_validator = PathValidator(self.allowed_paths)
|
|
64
|
+
|
|
65
|
+
super().__init__(**kwargs)
|
|
66
|
+
|
|
67
|
+
def _get_system_prompt(self) -> str:
|
|
68
|
+
"""Generate the system prompt for Docker containerization.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
str: System prompt that teaches the LLM about Dockerfile best practices
|
|
72
|
+
"""
|
|
73
|
+
return """You are a Docker containerization expert that responds ONLY in JSON format.
|
|
74
|
+
|
|
75
|
+
**CRITICAL RULES:**
|
|
76
|
+
1. Output ONLY valid JSON - nothing else
|
|
77
|
+
2. Do NOT add any text before the opening {
|
|
78
|
+
3. Do NOT add any text after the closing }
|
|
79
|
+
4. Your ENTIRE response must be parseable JSON
|
|
80
|
+
|
|
81
|
+
You help developers containerize their applications by:
|
|
82
|
+
- Analyzing application structure and dependencies
|
|
83
|
+
- Generating optimized Dockerfiles
|
|
84
|
+
- Building and running Docker containers
|
|
85
|
+
|
|
86
|
+
**Dockerfile Best Practices:**
|
|
87
|
+
- Use appropriate base images (python:3.9-slim for Python, node:18-alpine for Node.js)
|
|
88
|
+
- Minimize layers by combining RUN commands
|
|
89
|
+
- Copy dependency files first for better caching
|
|
90
|
+
- Use non-root users when possible
|
|
91
|
+
- Expose appropriate ports
|
|
92
|
+
- Set proper working directories
|
|
93
|
+
|
|
94
|
+
**Example Dockerfiles (use as inspiration - adapt to specific needs):**
|
|
95
|
+
|
|
96
|
+
Python/Flask application:
|
|
97
|
+
```
|
|
98
|
+
FROM python:3.9-slim
|
|
99
|
+
WORKDIR /app
|
|
100
|
+
COPY requirements.txt .
|
|
101
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
102
|
+
COPY . .
|
|
103
|
+
EXPOSE 5000
|
|
104
|
+
CMD ["python", "app.py"]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Node.js/Express application:
|
|
108
|
+
```
|
|
109
|
+
FROM node:18-alpine
|
|
110
|
+
WORKDIR /app
|
|
111
|
+
COPY package*.json ./
|
|
112
|
+
RUN npm ci --only=production
|
|
113
|
+
COPY . .
|
|
114
|
+
EXPOSE 3000
|
|
115
|
+
CMD ["npm", "start"]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**RESPONSE FORMAT - Use EXACTLY this structure:**
|
|
119
|
+
|
|
120
|
+
For ANALYZE (understand the app structure):
|
|
121
|
+
{"thought": "User wants to containerize X application", "goal": "Analyze application", "plan": [{"tool": "analyze_directory", "tool_args": {"path": "PATH_HERE"}}]}
|
|
122
|
+
|
|
123
|
+
For SAVE_DOCKERFILE (save generated Dockerfile):
|
|
124
|
+
{"thought": "Analyzed app, now generating Dockerfile content", "goal": "Save Dockerfile", "plan": [{"tool": "save_dockerfile", "tool_args": {"dockerfile_content": "FROM python:3.9-slim\\nWORKDIR /app\\n...", "path": ".", "port": 5000}}]}
|
|
125
|
+
|
|
126
|
+
For BUILD (build Docker image):
|
|
127
|
+
{"thought": "Building Docker image", "goal": "Build image", "plan": [{"tool": "build_image", "tool_args": {"path": "PATH", "tag": "TAG"}}]}
|
|
128
|
+
|
|
129
|
+
For RUN (run container):
|
|
130
|
+
{"thought": "Running container", "goal": "Run container", "plan": [{"tool": "run_container", "tool_args": {"image": "IMAGE", "port": "PORT_MAP"}}]}
|
|
131
|
+
|
|
132
|
+
For FINAL ANSWER:
|
|
133
|
+
{"thought": "Task completed", "goal": "Report results", "answer": "Successfully containerized the application. [Details about what was done]"}
|
|
134
|
+
|
|
135
|
+
**EXAMPLES:**
|
|
136
|
+
|
|
137
|
+
User: "create a Dockerfile for my Flask app"
|
|
138
|
+
Step 1: {"thought": "Need to analyze the app first", "goal": "Analyze application", "plan": [{"tool": "analyze_directory", "tool_args": {"path": "."}}]}
|
|
139
|
+
Step 2 (after seeing app_type=flask, entry_point=app.py): {"thought": "Flask app detected, I'll generate an appropriate Dockerfile", "goal": "Save Dockerfile", "plan": [{"tool": "save_dockerfile", "tool_args": {"dockerfile_content": "FROM python:3.9-slim\nWORKDIR /app\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\nCOPY . .\nEXPOSE 5000\nCMD [\"python\", \"app.py\"]", "path": ".", "port": 5000}}]}
|
|
140
|
+
|
|
141
|
+
User: "containerize and build my Node.js app"
|
|
142
|
+
Step 1: Analyze with analyze_directory
|
|
143
|
+
Step 2: Generate and save Node.js Dockerfile with save_dockerfile
|
|
144
|
+
Step 3: Build with build_image
|
|
145
|
+
|
|
146
|
+
**IMPORTANT:**
|
|
147
|
+
- First analyze the app to understand its structure
|
|
148
|
+
- Then generate appropriate Dockerfile content based on the analysis
|
|
149
|
+
- Include proper copyright header in Dockerfile
|
|
150
|
+
- Use save_dockerfile to write the Dockerfile you generated"""
|
|
151
|
+
|
|
152
|
+
def _create_console(self):
|
|
153
|
+
"""Create console for Docker agent output."""
|
|
154
|
+
if self.silent_mode:
|
|
155
|
+
return SilentConsole()
|
|
156
|
+
return AgentConsole()
|
|
157
|
+
|
|
158
|
+
def _register_tools(self):
|
|
159
|
+
"""Register Docker-specific tools."""
|
|
160
|
+
|
|
161
|
+
@tool
|
|
162
|
+
def analyze_directory(path: str = ".") -> Dict[str, Any]:
|
|
163
|
+
"""Analyze application directory to determine type and dependencies.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
path: Directory path to analyze (default: current directory)
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
Dictionary containing application information:
|
|
170
|
+
- app_type: Type of application (flask, node, python, etc.)
|
|
171
|
+
- entry_point: Main application file
|
|
172
|
+
- dependencies: Dependencies file (requirements.txt, package.json)
|
|
173
|
+
- port: Suggested port to expose
|
|
174
|
+
- additional_files: Other relevant files found
|
|
175
|
+
"""
|
|
176
|
+
return self._analyze_directory(path)
|
|
177
|
+
|
|
178
|
+
@tool
|
|
179
|
+
def save_dockerfile(
|
|
180
|
+
dockerfile_content: str, path: str = ".", port: int = 5000
|
|
181
|
+
) -> Dict[str, Any]:
|
|
182
|
+
"""Save a Dockerfile that you've generated.
|
|
183
|
+
|
|
184
|
+
You should generate the Dockerfile content based on the application analysis
|
|
185
|
+
and your knowledge of Docker best practices. Use the example Dockerfiles in
|
|
186
|
+
the system prompt as guidance.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
dockerfile_content: The complete Dockerfile content you've generated
|
|
190
|
+
path: Directory where to save the Dockerfile (default: current directory)
|
|
191
|
+
port: Port exposed by the application (default: 5000)
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
Dictionary containing:
|
|
195
|
+
- status: "success" or "error"
|
|
196
|
+
- path: Path where Dockerfile was saved
|
|
197
|
+
- next_steps: Instructions for building and running
|
|
198
|
+
"""
|
|
199
|
+
return self._save_dockerfile(dockerfile_content, path, port)
|
|
200
|
+
|
|
201
|
+
@tool
|
|
202
|
+
def build_image(path: str = ".", tag: str = "app:latest") -> Dict[str, Any]:
|
|
203
|
+
"""Build Docker image from Dockerfile.
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
path: Directory containing Dockerfile
|
|
207
|
+
tag: Image tag (default: app:latest)
|
|
208
|
+
|
|
209
|
+
Returns:
|
|
210
|
+
Dictionary containing:
|
|
211
|
+
- success: Whether build succeeded
|
|
212
|
+
- image: Image tag if successful
|
|
213
|
+
- output: Build output
|
|
214
|
+
- error: Error message if failed
|
|
215
|
+
"""
|
|
216
|
+
return self._build_image(path, tag)
|
|
217
|
+
|
|
218
|
+
@tool
|
|
219
|
+
def run_container(
|
|
220
|
+
image: str, port: str = None, name: str = None
|
|
221
|
+
) -> Dict[str, Any]:
|
|
222
|
+
"""Run Docker container from image.
|
|
223
|
+
|
|
224
|
+
Args:
|
|
225
|
+
image: Docker image to run
|
|
226
|
+
port: Port mapping (e.g., "5000:5000")
|
|
227
|
+
name: Container name (optional)
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
Dictionary containing:
|
|
231
|
+
- success: Whether container started
|
|
232
|
+
- container_id: Container ID if successful
|
|
233
|
+
- url: Access URL if port mapped
|
|
234
|
+
- output: Run output
|
|
235
|
+
- error: Error message if failed
|
|
236
|
+
"""
|
|
237
|
+
return self._run_container(image, port, name)
|
|
238
|
+
|
|
239
|
+
def _analyze_directory(self, path: str) -> Dict[str, Any]:
|
|
240
|
+
"""Analyze directory to determine application type and structure."""
|
|
241
|
+
logger.debug(f"Analyzing directory: {path}")
|
|
242
|
+
|
|
243
|
+
# Security check
|
|
244
|
+
if not self.path_validator.is_path_allowed(path):
|
|
245
|
+
return {
|
|
246
|
+
"status": "error",
|
|
247
|
+
"error": f"Access denied: {path} is not in allowed paths",
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
path_obj = Path(path).resolve()
|
|
251
|
+
if not path_obj.exists():
|
|
252
|
+
return {"status": "error", "error": f"Directory {path} does not exist"}
|
|
253
|
+
|
|
254
|
+
result = {
|
|
255
|
+
"path": str(path_obj),
|
|
256
|
+
"app_type": "unknown",
|
|
257
|
+
"entry_point": None,
|
|
258
|
+
"dependencies": None,
|
|
259
|
+
"port": DEFAULT_PORT,
|
|
260
|
+
"additional_files": [],
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
# Check for Python/Flask application
|
|
264
|
+
requirements_file = path_obj / "requirements.txt"
|
|
265
|
+
if requirements_file.exists():
|
|
266
|
+
result["app_type"] = "python"
|
|
267
|
+
result["dependencies"] = "requirements.txt"
|
|
268
|
+
|
|
269
|
+
# Read requirements to detect framework
|
|
270
|
+
with open(requirements_file, "r", encoding="utf-8") as f:
|
|
271
|
+
requirements = f.read().lower()
|
|
272
|
+
if "flask" in requirements:
|
|
273
|
+
result["app_type"] = "flask"
|
|
274
|
+
result["port"] = DEFAULT_PORT
|
|
275
|
+
elif "django" in requirements:
|
|
276
|
+
result["app_type"] = "django"
|
|
277
|
+
result["port"] = DEFAULT_PORT
|
|
278
|
+
elif "fastapi" in requirements:
|
|
279
|
+
result["app_type"] = "fastapi"
|
|
280
|
+
result["port"] = DEFAULT_PORT
|
|
281
|
+
|
|
282
|
+
# Find entry point
|
|
283
|
+
for potential_entry in [
|
|
284
|
+
"app.py",
|
|
285
|
+
"main.py",
|
|
286
|
+
"run.py",
|
|
287
|
+
"server.py",
|
|
288
|
+
"application.py",
|
|
289
|
+
]:
|
|
290
|
+
if (path_obj / potential_entry).exists():
|
|
291
|
+
result["entry_point"] = potential_entry
|
|
292
|
+
break
|
|
293
|
+
|
|
294
|
+
# Check for Node.js application
|
|
295
|
+
package_json = path_obj / "package.json"
|
|
296
|
+
if package_json.exists():
|
|
297
|
+
result["app_type"] = "node"
|
|
298
|
+
result["dependencies"] = "package.json"
|
|
299
|
+
result["port"] = DEFAULT_PORT
|
|
300
|
+
|
|
301
|
+
# Read package.json to understand the app better
|
|
302
|
+
try:
|
|
303
|
+
with open(package_json, "r", encoding="utf-8") as f:
|
|
304
|
+
pkg_data = json.load(f)
|
|
305
|
+
|
|
306
|
+
# Check for start script
|
|
307
|
+
if "scripts" in pkg_data and "start" in pkg_data["scripts"]:
|
|
308
|
+
result["start_command"] = pkg_data["scripts"]["start"]
|
|
309
|
+
|
|
310
|
+
# Detect framework from dependencies
|
|
311
|
+
deps = pkg_data.get("dependencies", {})
|
|
312
|
+
if "express" in deps:
|
|
313
|
+
result["app_type"] = "express"
|
|
314
|
+
elif "next" in deps:
|
|
315
|
+
result["app_type"] = "nextjs"
|
|
316
|
+
elif "react" in deps:
|
|
317
|
+
result["app_type"] = "react"
|
|
318
|
+
|
|
319
|
+
# Find entry point
|
|
320
|
+
if "main" in pkg_data:
|
|
321
|
+
result["entry_point"] = pkg_data["main"]
|
|
322
|
+
else:
|
|
323
|
+
for potential_entry in ["index.js", "server.js", "app.js"]:
|
|
324
|
+
if (path_obj / potential_entry).exists():
|
|
325
|
+
result["entry_point"] = potential_entry
|
|
326
|
+
break
|
|
327
|
+
except Exception as e:
|
|
328
|
+
logger.warning(f"Could not parse package.json: {e}")
|
|
329
|
+
|
|
330
|
+
# Check for other important files
|
|
331
|
+
for file_name in [
|
|
332
|
+
".env.example",
|
|
333
|
+
"docker-compose.yml",
|
|
334
|
+
"Dockerfile",
|
|
335
|
+
".dockerignore",
|
|
336
|
+
]:
|
|
337
|
+
if (path_obj / file_name).exists():
|
|
338
|
+
result["additional_files"].append(file_name)
|
|
339
|
+
|
|
340
|
+
logger.debug(f"Analysis result: {result}")
|
|
341
|
+
return result
|
|
342
|
+
|
|
343
|
+
def _save_dockerfile(
|
|
344
|
+
self, dockerfile_content: str, path: str, port: int
|
|
345
|
+
) -> Dict[str, Any]:
|
|
346
|
+
"""Save Dockerfile content generated by the LLM.
|
|
347
|
+
|
|
348
|
+
Args:
|
|
349
|
+
dockerfile_content: Dockerfile content generated by LLM
|
|
350
|
+
path: Directory where to save the Dockerfile
|
|
351
|
+
port: Port exposed by the application
|
|
352
|
+
|
|
353
|
+
Returns:
|
|
354
|
+
Dictionary with status, path, and next steps
|
|
355
|
+
"""
|
|
356
|
+
logger.debug(f"Saving Dockerfile to: {path}")
|
|
357
|
+
|
|
358
|
+
# Security check
|
|
359
|
+
if not self.path_validator.is_path_allowed(path):
|
|
360
|
+
return {
|
|
361
|
+
"status": "error",
|
|
362
|
+
"error": f"Access denied: {path} is not in allowed paths",
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
path_obj = Path(path).resolve()
|
|
366
|
+
if not path_obj.exists():
|
|
367
|
+
return {"status": "error", "error": f"Directory {path} does not exist"}
|
|
368
|
+
|
|
369
|
+
dockerfile_path = path_obj / "Dockerfile"
|
|
370
|
+
|
|
371
|
+
try:
|
|
372
|
+
# Save the LLM-generated Dockerfile
|
|
373
|
+
with open(dockerfile_path, "w", encoding="utf-8") as f:
|
|
374
|
+
f.write(dockerfile_content)
|
|
375
|
+
|
|
376
|
+
# Generate image name from directory
|
|
377
|
+
image_name = path_obj.name.lower().replace("_", "-").replace(" ", "-")
|
|
378
|
+
|
|
379
|
+
return {
|
|
380
|
+
"status": "success",
|
|
381
|
+
"path": str(dockerfile_path),
|
|
382
|
+
"next_steps": [
|
|
383
|
+
"1. Build the Docker image:",
|
|
384
|
+
f" cd {path_obj}",
|
|
385
|
+
f" docker build -t {image_name} .",
|
|
386
|
+
"",
|
|
387
|
+
"2. Run the container (keeps running in background):",
|
|
388
|
+
f" docker run -d -p {port}:{port} --name {image_name}-container {image_name}",
|
|
389
|
+
"",
|
|
390
|
+
"3. Access your application at:",
|
|
391
|
+
f" http://localhost:{port}",
|
|
392
|
+
"",
|
|
393
|
+
"4. View container logs:",
|
|
394
|
+
f" docker logs -f {image_name}-container",
|
|
395
|
+
"",
|
|
396
|
+
"5. Stop the container when done:",
|
|
397
|
+
f" docker stop {image_name}-container",
|
|
398
|
+
],
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
except Exception as e:
|
|
402
|
+
return {"status": "error", "error": f"Failed to save Dockerfile: {str(e)}"}
|
|
403
|
+
|
|
404
|
+
def _build_image(self, path: str, tag: str) -> Dict[str, Any]:
|
|
405
|
+
"""Build Docker image from Dockerfile."""
|
|
406
|
+
logger.debug(f"Building Docker image: {tag} from {path}")
|
|
407
|
+
|
|
408
|
+
# Security check
|
|
409
|
+
if not self.path_validator.is_path_allowed(path):
|
|
410
|
+
return {
|
|
411
|
+
"status": "error",
|
|
412
|
+
"error": f"Access denied: {path} is not in allowed paths",
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
# Check if Docker is available
|
|
416
|
+
try:
|
|
417
|
+
result = subprocess.run(
|
|
418
|
+
["docker", "--version"],
|
|
419
|
+
capture_output=True,
|
|
420
|
+
text=True,
|
|
421
|
+
timeout=5,
|
|
422
|
+
check=False,
|
|
423
|
+
)
|
|
424
|
+
if result.returncode != 0:
|
|
425
|
+
return {
|
|
426
|
+
"status": "error",
|
|
427
|
+
"error": "Docker is not installed or not accessible. Please install Docker first.",
|
|
428
|
+
}
|
|
429
|
+
except Exception as e:
|
|
430
|
+
return {"status": "error", "error": f"Cannot access Docker: {str(e)}"}
|
|
431
|
+
|
|
432
|
+
# Build the image
|
|
433
|
+
try:
|
|
434
|
+
result = subprocess.run(
|
|
435
|
+
["docker", "build", "-t", tag, path],
|
|
436
|
+
capture_output=True,
|
|
437
|
+
text=True,
|
|
438
|
+
timeout=300, # 5 minute timeout for build
|
|
439
|
+
check=False,
|
|
440
|
+
)
|
|
441
|
+
|
|
442
|
+
if result.returncode == 0:
|
|
443
|
+
return {
|
|
444
|
+
"status": "success",
|
|
445
|
+
"success": True,
|
|
446
|
+
"image": tag,
|
|
447
|
+
"output": result.stdout,
|
|
448
|
+
"message": f"Successfully built Docker image: {tag}",
|
|
449
|
+
}
|
|
450
|
+
else:
|
|
451
|
+
return {
|
|
452
|
+
"status": "error",
|
|
453
|
+
"success": False,
|
|
454
|
+
"error": f"Docker build failed: {result.stderr}",
|
|
455
|
+
"output": result.stdout,
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
except subprocess.TimeoutExpired:
|
|
459
|
+
return {
|
|
460
|
+
"status": "error",
|
|
461
|
+
"error": "Docker build timed out after 5 minutes",
|
|
462
|
+
}
|
|
463
|
+
except Exception as e:
|
|
464
|
+
return {"status": "error", "error": f"Failed to build image: {str(e)}"}
|
|
465
|
+
|
|
466
|
+
def _run_container(
|
|
467
|
+
self, image: str, port: str = None, name: str = None
|
|
468
|
+
) -> Dict[str, Any]:
|
|
469
|
+
"""Run Docker container from image."""
|
|
470
|
+
logger.debug(f"Running container from image: {image}")
|
|
471
|
+
|
|
472
|
+
# Build docker run command
|
|
473
|
+
cmd = ["docker", "run", "-d"] # Run in detached mode
|
|
474
|
+
|
|
475
|
+
if port:
|
|
476
|
+
cmd.extend(["-p", port])
|
|
477
|
+
|
|
478
|
+
if name:
|
|
479
|
+
cmd.extend(["--name", name])
|
|
480
|
+
|
|
481
|
+
cmd.append(image)
|
|
482
|
+
|
|
483
|
+
try:
|
|
484
|
+
result = subprocess.run(
|
|
485
|
+
cmd, capture_output=True, text=True, timeout=30, check=False
|
|
486
|
+
)
|
|
487
|
+
|
|
488
|
+
if result.returncode == 0:
|
|
489
|
+
container_id = result.stdout.strip()[:12]
|
|
490
|
+
|
|
491
|
+
response = {
|
|
492
|
+
"status": "success",
|
|
493
|
+
"success": True,
|
|
494
|
+
"container_id": container_id,
|
|
495
|
+
"image": image,
|
|
496
|
+
"message": f"Container {container_id} is running",
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
if port:
|
|
500
|
+
host_port = port.split(":")[0]
|
|
501
|
+
response["url"] = f"http://localhost:{host_port}"
|
|
502
|
+
response[
|
|
503
|
+
"message"
|
|
504
|
+
] += f"\nAccess your application at: http://localhost:{host_port}"
|
|
505
|
+
|
|
506
|
+
return response
|
|
507
|
+
else:
|
|
508
|
+
return {
|
|
509
|
+
"status": "error",
|
|
510
|
+
"success": False,
|
|
511
|
+
"error": f"Failed to run container: {result.stderr}",
|
|
512
|
+
"output": result.stdout,
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
except subprocess.TimeoutExpired:
|
|
516
|
+
return {"status": "error", "error": "Docker run command timed out"}
|
|
517
|
+
except Exception as e:
|
|
518
|
+
return {"status": "error", "error": f"Failed to run container: {str(e)}"}
|
|
519
|
+
|
|
520
|
+
# MCP Interface Implementation
|
|
521
|
+
def get_mcp_tool_definitions(self) -> list[Dict[str, Any]]:
|
|
522
|
+
"""Return MCP tool definitions for Docker agent."""
|
|
523
|
+
return [
|
|
524
|
+
{
|
|
525
|
+
"name": "dockerize",
|
|
526
|
+
"description": "Containerize an application by analyzing its structure, generating an optimized Dockerfile, building the Docker image, and running the container. Use this when the user wants to dockerize, containerize, or run their application in Docker. This performs the complete workflow: analyze → create Dockerfile → build image → run container.",
|
|
527
|
+
"inputSchema": {
|
|
528
|
+
"type": "object",
|
|
529
|
+
"properties": {
|
|
530
|
+
"appPath": {
|
|
531
|
+
"type": "string",
|
|
532
|
+
"description": "Absolute path to the application's root directory. Must be a complete filesystem path (e.g., C:/Users/name/myapp on Windows or /home/user/myapp on Linux). This is where the Dockerfile will be created and where dependency files (requirements.txt, package.json) should exist.",
|
|
533
|
+
},
|
|
534
|
+
"port": {
|
|
535
|
+
"type": "integer",
|
|
536
|
+
"description": "The port that the application listens on inside the container. This will be exposed in the Dockerfile and mapped to the same host port when running the container. Common values: 5000 (Flask), 3000 (Node.js/Express), 8000 (Django), 8080 (general web apps). Default: 5000",
|
|
537
|
+
"default": 5000,
|
|
538
|
+
},
|
|
539
|
+
},
|
|
540
|
+
"required": ["appPath"],
|
|
541
|
+
},
|
|
542
|
+
}
|
|
543
|
+
]
|
|
544
|
+
|
|
545
|
+
def execute_mcp_tool(
|
|
546
|
+
self, tool_name: str, arguments: Dict[str, Any]
|
|
547
|
+
) -> Dict[str, Any]:
|
|
548
|
+
"""Execute MCP tool call by delegating to LLM via process_query."""
|
|
549
|
+
if tool_name == "dockerize":
|
|
550
|
+
# Validate appPath is provided
|
|
551
|
+
if "appPath" not in arguments:
|
|
552
|
+
return {
|
|
553
|
+
"success": False,
|
|
554
|
+
"error": "appPath is required - must be an absolute path to the application directory",
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
app_path = arguments["appPath"]
|
|
558
|
+
|
|
559
|
+
# Validate it's an absolute path
|
|
560
|
+
path_obj = Path(app_path)
|
|
561
|
+
if not path_obj.is_absolute():
|
|
562
|
+
return {
|
|
563
|
+
"success": False,
|
|
564
|
+
"error": f"appPath must be an absolute path, got: {app_path}",
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
# Validate directory exists
|
|
568
|
+
if not path_obj.exists():
|
|
569
|
+
return {
|
|
570
|
+
"success": False,
|
|
571
|
+
"error": f"Directory does not exist: {app_path}",
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
# Validate it's a directory
|
|
575
|
+
if not path_obj.is_dir():
|
|
576
|
+
return {
|
|
577
|
+
"success": False,
|
|
578
|
+
"error": f"Path is not a directory: {app_path}",
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
# Security check
|
|
582
|
+
if not self.path_validator.is_path_allowed(app_path):
|
|
583
|
+
return {
|
|
584
|
+
"success": False,
|
|
585
|
+
"error": f"Access denied: {app_path} is not in allowed paths",
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
# Get parameters
|
|
589
|
+
port = arguments.get("port", DEFAULT_PORT)
|
|
590
|
+
|
|
591
|
+
# Construct natural language query for the LLM
|
|
592
|
+
# Always do full workflow: dockerize → build → run
|
|
593
|
+
query_parts = [f"Dockerize the application at {app_path}"]
|
|
594
|
+
|
|
595
|
+
if port != DEFAULT_PORT:
|
|
596
|
+
query_parts.append(f"using port {port}")
|
|
597
|
+
|
|
598
|
+
query_parts.append("then build and run the container")
|
|
599
|
+
|
|
600
|
+
query = " ".join(query_parts) + "."
|
|
601
|
+
|
|
602
|
+
# Let the LLM orchestrate the workflow
|
|
603
|
+
result = self.process_query(user_input=query, trace=False)
|
|
604
|
+
|
|
605
|
+
# Extract the final result
|
|
606
|
+
# process_query returns: {status: "success"/"failed"/"incomplete", result: ..., error_history: [...]}
|
|
607
|
+
status = result.get("status", "incomplete")
|
|
608
|
+
final_result = result.get("result", "")
|
|
609
|
+
|
|
610
|
+
# Only report failure if status is explicitly "failed"
|
|
611
|
+
# Intermediate errors/warnings are acceptable as long as the overall task succeeded
|
|
612
|
+
if status == "success":
|
|
613
|
+
return {
|
|
614
|
+
"success": True,
|
|
615
|
+
"status": "completed",
|
|
616
|
+
"result": final_result,
|
|
617
|
+
"steps_taken": result.get("steps_taken", 0),
|
|
618
|
+
"duration": result.get("duration", 0),
|
|
619
|
+
}
|
|
620
|
+
elif status == "failed":
|
|
621
|
+
# Include error details only when actually failed
|
|
622
|
+
error_history = result.get("error_history", [])
|
|
623
|
+
error_msg = (
|
|
624
|
+
error_history[-1] if error_history else "Unknown error occurred"
|
|
625
|
+
)
|
|
626
|
+
return {
|
|
627
|
+
"success": False,
|
|
628
|
+
"error": error_msg,
|
|
629
|
+
"result": final_result,
|
|
630
|
+
"error_count": result.get("error_count", 0),
|
|
631
|
+
}
|
|
632
|
+
else:
|
|
633
|
+
# Incomplete status
|
|
634
|
+
return {
|
|
635
|
+
"success": False,
|
|
636
|
+
"error": "Task did not complete within step limit",
|
|
637
|
+
"result": final_result,
|
|
638
|
+
"steps_taken": result.get("steps_taken", 0),
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
else:
|
|
642
|
+
raise ValueError(f"Unknown tool: {tool_name}")
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
"""
|
|
5
|
+
GAIA Jira Agent - Simplified Jira integration for GAIA.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .agent import JiraAgent, JiraIssue, JiraSearchResult
|
|
9
|
+
from .jql_templates import generate_jql_from_templates
|
|
10
|
+
|
|
11
|
+
__all__ = ["JiraAgent", "JiraIssue", "JiraSearchResult", "generate_jql_from_templates"]
|