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.
Files changed (800) hide show
  1. amd_gaia-0.14.1.dist-info/METADATA +768 -0
  2. amd_gaia-0.14.1.dist-info/RECORD +800 -0
  3. amd_gaia-0.14.1.dist-info/WHEEL +5 -0
  4. amd_gaia-0.14.1.dist-info/entry_points.txt +5 -0
  5. amd_gaia-0.14.1.dist-info/licenses/LICENSE.md +21 -0
  6. amd_gaia-0.14.1.dist-info/top_level.txt +1 -0
  7. gaia/__init__.py +2 -0
  8. gaia/agents/__init__.py +19 -0
  9. gaia/agents/base/__init__.py +9 -0
  10. gaia/agents/base/agent.py +2072 -0
  11. gaia/agents/base/api_agent.py +120 -0
  12. gaia/agents/base/console.py +1457 -0
  13. gaia/agents/base/mcp_agent.py +86 -0
  14. gaia/agents/base/tools.py +83 -0
  15. gaia/agents/blender/agent.py +556 -0
  16. gaia/agents/blender/agent_simple.py +135 -0
  17. gaia/agents/blender/app.py +211 -0
  18. gaia/agents/blender/app_simple.py +41 -0
  19. gaia/agents/blender/core/__init__.py +16 -0
  20. gaia/agents/blender/core/materials.py +506 -0
  21. gaia/agents/blender/core/objects.py +316 -0
  22. gaia/agents/blender/core/rendering.py +225 -0
  23. gaia/agents/blender/core/scene.py +220 -0
  24. gaia/agents/blender/core/view.py +146 -0
  25. gaia/agents/chat/__init__.py +9 -0
  26. gaia/agents/chat/agent.py +975 -0
  27. gaia/agents/chat/app.py +1058 -0
  28. gaia/agents/chat/session.py +508 -0
  29. gaia/agents/chat/tools/__init__.py +15 -0
  30. gaia/agents/chat/tools/file_tools.py +96 -0
  31. gaia/agents/chat/tools/rag_tools.py +1729 -0
  32. gaia/agents/chat/tools/shell_tools.py +436 -0
  33. gaia/agents/code/__init__.py +7 -0
  34. gaia/agents/code/agent.py +547 -0
  35. gaia/agents/code/app.py +266 -0
  36. gaia/agents/code/models.py +135 -0
  37. gaia/agents/code/orchestration/__init__.py +24 -0
  38. gaia/agents/code/orchestration/checklist_executor.py +1739 -0
  39. gaia/agents/code/orchestration/checklist_generator.py +709 -0
  40. gaia/agents/code/orchestration/factories/__init__.py +9 -0
  41. gaia/agents/code/orchestration/factories/base.py +63 -0
  42. gaia/agents/code/orchestration/factories/nextjs_factory.py +118 -0
  43. gaia/agents/code/orchestration/factories/python_factory.py +106 -0
  44. gaia/agents/code/orchestration/orchestrator.py +610 -0
  45. gaia/agents/code/orchestration/project_analyzer.py +391 -0
  46. gaia/agents/code/orchestration/steps/__init__.py +67 -0
  47. gaia/agents/code/orchestration/steps/base.py +188 -0
  48. gaia/agents/code/orchestration/steps/error_handler.py +314 -0
  49. gaia/agents/code/orchestration/steps/nextjs.py +828 -0
  50. gaia/agents/code/orchestration/steps/python.py +307 -0
  51. gaia/agents/code/orchestration/template_catalog.py +463 -0
  52. gaia/agents/code/orchestration/workflows/__init__.py +14 -0
  53. gaia/agents/code/orchestration/workflows/base.py +80 -0
  54. gaia/agents/code/orchestration/workflows/nextjs.py +186 -0
  55. gaia/agents/code/orchestration/workflows/python.py +94 -0
  56. gaia/agents/code/prompts/__init__.py +11 -0
  57. gaia/agents/code/prompts/base_prompt.py +77 -0
  58. gaia/agents/code/prompts/code_patterns.py +1925 -0
  59. gaia/agents/code/prompts/nextjs_prompt.py +40 -0
  60. gaia/agents/code/prompts/python_prompt.py +109 -0
  61. gaia/agents/code/schema_inference.py +365 -0
  62. gaia/agents/code/system_prompt.py +41 -0
  63. gaia/agents/code/tools/__init__.py +42 -0
  64. gaia/agents/code/tools/cli_tools.py +1138 -0
  65. gaia/agents/code/tools/code_formatting.py +319 -0
  66. gaia/agents/code/tools/code_tools.py +769 -0
  67. gaia/agents/code/tools/error_fixing.py +1347 -0
  68. gaia/agents/code/tools/external_tools.py +180 -0
  69. gaia/agents/code/tools/file_io.py +845 -0
  70. gaia/agents/code/tools/prisma_tools.py +190 -0
  71. gaia/agents/code/tools/project_management.py +1016 -0
  72. gaia/agents/code/tools/testing.py +321 -0
  73. gaia/agents/code/tools/typescript_tools.py +122 -0
  74. gaia/agents/code/tools/validation_parsing.py +461 -0
  75. gaia/agents/code/tools/validation_tools.py +803 -0
  76. gaia/agents/code/tools/web_dev_tools.py +1744 -0
  77. gaia/agents/code/validators/__init__.py +16 -0
  78. gaia/agents/code/validators/antipattern_checker.py +241 -0
  79. gaia/agents/code/validators/ast_analyzer.py +197 -0
  80. gaia/agents/code/validators/requirements_validator.py +145 -0
  81. gaia/agents/code/validators/syntax_validator.py +171 -0
  82. gaia/agents/docker/__init__.py +7 -0
  83. gaia/agents/docker/agent.py +642 -0
  84. gaia/agents/jira/__init__.py +11 -0
  85. gaia/agents/jira/agent.py +894 -0
  86. gaia/agents/jira/jql_templates.py +299 -0
  87. gaia/agents/routing/__init__.py +7 -0
  88. gaia/agents/routing/agent.py +512 -0
  89. gaia/agents/routing/system_prompt.py +75 -0
  90. gaia/api/__init__.py +23 -0
  91. gaia/api/agent_registry.py +238 -0
  92. gaia/api/app.py +305 -0
  93. gaia/api/openai_server.py +575 -0
  94. gaia/api/schemas.py +186 -0
  95. gaia/api/sse_handler.py +370 -0
  96. gaia/apps/__init__.py +4 -0
  97. gaia/apps/llm/__init__.py +6 -0
  98. gaia/apps/llm/app.py +169 -0
  99. gaia/apps/summarize/app.py +633 -0
  100. gaia/apps/summarize/html_viewer.py +133 -0
  101. gaia/apps/summarize/pdf_formatter.py +284 -0
  102. gaia/audio/__init__.py +2 -0
  103. gaia/audio/audio_client.py +439 -0
  104. gaia/audio/audio_recorder.py +269 -0
  105. gaia/audio/kokoro_tts.py +599 -0
  106. gaia/audio/whisper_asr.py +432 -0
  107. gaia/chat/__init__.py +16 -0
  108. gaia/chat/app.py +430 -0
  109. gaia/chat/prompts.py +522 -0
  110. gaia/chat/sdk.py +1200 -0
  111. gaia/cli.py +5621 -0
  112. gaia/eval/batch_experiment.py +2332 -0
  113. gaia/eval/claude.py +542 -0
  114. gaia/eval/config.py +37 -0
  115. gaia/eval/email_generator.py +512 -0
  116. gaia/eval/eval.py +3179 -0
  117. gaia/eval/groundtruth.py +1130 -0
  118. gaia/eval/transcript_generator.py +582 -0
  119. gaia/eval/webapp/README.md +168 -0
  120. gaia/eval/webapp/node_modules/.bin/mime +16 -0
  121. gaia/eval/webapp/node_modules/.bin/mime.cmd +17 -0
  122. gaia/eval/webapp/node_modules/.bin/mime.ps1 +28 -0
  123. gaia/eval/webapp/node_modules/.package-lock.json +865 -0
  124. gaia/eval/webapp/node_modules/accepts/HISTORY.md +243 -0
  125. gaia/eval/webapp/node_modules/accepts/LICENSE +23 -0
  126. gaia/eval/webapp/node_modules/accepts/README.md +140 -0
  127. gaia/eval/webapp/node_modules/accepts/index.js +238 -0
  128. gaia/eval/webapp/node_modules/accepts/package.json +47 -0
  129. gaia/eval/webapp/node_modules/array-flatten/LICENSE +21 -0
  130. gaia/eval/webapp/node_modules/array-flatten/README.md +43 -0
  131. gaia/eval/webapp/node_modules/array-flatten/array-flatten.js +64 -0
  132. gaia/eval/webapp/node_modules/array-flatten/package.json +39 -0
  133. gaia/eval/webapp/node_modules/body-parser/HISTORY.md +672 -0
  134. gaia/eval/webapp/node_modules/body-parser/LICENSE +23 -0
  135. gaia/eval/webapp/node_modules/body-parser/README.md +476 -0
  136. gaia/eval/webapp/node_modules/body-parser/SECURITY.md +25 -0
  137. gaia/eval/webapp/node_modules/body-parser/index.js +156 -0
  138. gaia/eval/webapp/node_modules/body-parser/lib/read.js +205 -0
  139. gaia/eval/webapp/node_modules/body-parser/lib/types/json.js +247 -0
  140. gaia/eval/webapp/node_modules/body-parser/lib/types/raw.js +101 -0
  141. gaia/eval/webapp/node_modules/body-parser/lib/types/text.js +121 -0
  142. gaia/eval/webapp/node_modules/body-parser/lib/types/urlencoded.js +307 -0
  143. gaia/eval/webapp/node_modules/body-parser/package.json +56 -0
  144. gaia/eval/webapp/node_modules/bytes/History.md +97 -0
  145. gaia/eval/webapp/node_modules/bytes/LICENSE +23 -0
  146. gaia/eval/webapp/node_modules/bytes/Readme.md +152 -0
  147. gaia/eval/webapp/node_modules/bytes/index.js +170 -0
  148. gaia/eval/webapp/node_modules/bytes/package.json +42 -0
  149. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
  150. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
  151. gaia/eval/webapp/node_modules/call-bind-apply-helpers/.nycrc +9 -0
  152. gaia/eval/webapp/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
  153. gaia/eval/webapp/node_modules/call-bind-apply-helpers/LICENSE +21 -0
  154. gaia/eval/webapp/node_modules/call-bind-apply-helpers/README.md +62 -0
  155. gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
  156. gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
  157. gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
  158. gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
  159. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
  160. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
  161. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
  162. gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
  163. gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
  164. gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.js +15 -0
  165. gaia/eval/webapp/node_modules/call-bind-apply-helpers/package.json +85 -0
  166. gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
  167. gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
  168. gaia/eval/webapp/node_modules/call-bind-apply-helpers/test/index.js +63 -0
  169. gaia/eval/webapp/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
  170. gaia/eval/webapp/node_modules/call-bound/.eslintrc +13 -0
  171. gaia/eval/webapp/node_modules/call-bound/.github/FUNDING.yml +12 -0
  172. gaia/eval/webapp/node_modules/call-bound/.nycrc +9 -0
  173. gaia/eval/webapp/node_modules/call-bound/CHANGELOG.md +42 -0
  174. gaia/eval/webapp/node_modules/call-bound/LICENSE +21 -0
  175. gaia/eval/webapp/node_modules/call-bound/README.md +53 -0
  176. gaia/eval/webapp/node_modules/call-bound/index.d.ts +94 -0
  177. gaia/eval/webapp/node_modules/call-bound/index.js +19 -0
  178. gaia/eval/webapp/node_modules/call-bound/package.json +99 -0
  179. gaia/eval/webapp/node_modules/call-bound/test/index.js +61 -0
  180. gaia/eval/webapp/node_modules/call-bound/tsconfig.json +10 -0
  181. gaia/eval/webapp/node_modules/content-disposition/HISTORY.md +60 -0
  182. gaia/eval/webapp/node_modules/content-disposition/LICENSE +22 -0
  183. gaia/eval/webapp/node_modules/content-disposition/README.md +142 -0
  184. gaia/eval/webapp/node_modules/content-disposition/index.js +458 -0
  185. gaia/eval/webapp/node_modules/content-disposition/package.json +44 -0
  186. gaia/eval/webapp/node_modules/content-type/HISTORY.md +29 -0
  187. gaia/eval/webapp/node_modules/content-type/LICENSE +22 -0
  188. gaia/eval/webapp/node_modules/content-type/README.md +94 -0
  189. gaia/eval/webapp/node_modules/content-type/index.js +225 -0
  190. gaia/eval/webapp/node_modules/content-type/package.json +42 -0
  191. gaia/eval/webapp/node_modules/cookie/LICENSE +24 -0
  192. gaia/eval/webapp/node_modules/cookie/README.md +317 -0
  193. gaia/eval/webapp/node_modules/cookie/SECURITY.md +25 -0
  194. gaia/eval/webapp/node_modules/cookie/index.js +334 -0
  195. gaia/eval/webapp/node_modules/cookie/package.json +44 -0
  196. gaia/eval/webapp/node_modules/cookie-signature/.npmignore +4 -0
  197. gaia/eval/webapp/node_modules/cookie-signature/History.md +38 -0
  198. gaia/eval/webapp/node_modules/cookie-signature/Readme.md +42 -0
  199. gaia/eval/webapp/node_modules/cookie-signature/index.js +51 -0
  200. gaia/eval/webapp/node_modules/cookie-signature/package.json +18 -0
  201. gaia/eval/webapp/node_modules/debug/.coveralls.yml +1 -0
  202. gaia/eval/webapp/node_modules/debug/.eslintrc +11 -0
  203. gaia/eval/webapp/node_modules/debug/.npmignore +9 -0
  204. gaia/eval/webapp/node_modules/debug/.travis.yml +14 -0
  205. gaia/eval/webapp/node_modules/debug/CHANGELOG.md +362 -0
  206. gaia/eval/webapp/node_modules/debug/LICENSE +19 -0
  207. gaia/eval/webapp/node_modules/debug/Makefile +50 -0
  208. gaia/eval/webapp/node_modules/debug/README.md +312 -0
  209. gaia/eval/webapp/node_modules/debug/component.json +19 -0
  210. gaia/eval/webapp/node_modules/debug/karma.conf.js +70 -0
  211. gaia/eval/webapp/node_modules/debug/node.js +1 -0
  212. gaia/eval/webapp/node_modules/debug/package.json +49 -0
  213. gaia/eval/webapp/node_modules/debug/src/browser.js +185 -0
  214. gaia/eval/webapp/node_modules/debug/src/debug.js +202 -0
  215. gaia/eval/webapp/node_modules/debug/src/index.js +10 -0
  216. gaia/eval/webapp/node_modules/debug/src/inspector-log.js +15 -0
  217. gaia/eval/webapp/node_modules/debug/src/node.js +248 -0
  218. gaia/eval/webapp/node_modules/depd/History.md +103 -0
  219. gaia/eval/webapp/node_modules/depd/LICENSE +22 -0
  220. gaia/eval/webapp/node_modules/depd/Readme.md +280 -0
  221. gaia/eval/webapp/node_modules/depd/index.js +538 -0
  222. gaia/eval/webapp/node_modules/depd/lib/browser/index.js +77 -0
  223. gaia/eval/webapp/node_modules/depd/package.json +45 -0
  224. gaia/eval/webapp/node_modules/destroy/LICENSE +23 -0
  225. gaia/eval/webapp/node_modules/destroy/README.md +63 -0
  226. gaia/eval/webapp/node_modules/destroy/index.js +209 -0
  227. gaia/eval/webapp/node_modules/destroy/package.json +48 -0
  228. gaia/eval/webapp/node_modules/dunder-proto/.eslintrc +5 -0
  229. gaia/eval/webapp/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
  230. gaia/eval/webapp/node_modules/dunder-proto/.nycrc +13 -0
  231. gaia/eval/webapp/node_modules/dunder-proto/CHANGELOG.md +24 -0
  232. gaia/eval/webapp/node_modules/dunder-proto/LICENSE +21 -0
  233. gaia/eval/webapp/node_modules/dunder-proto/README.md +54 -0
  234. gaia/eval/webapp/node_modules/dunder-proto/get.d.ts +5 -0
  235. gaia/eval/webapp/node_modules/dunder-proto/get.js +30 -0
  236. gaia/eval/webapp/node_modules/dunder-proto/package.json +76 -0
  237. gaia/eval/webapp/node_modules/dunder-proto/set.d.ts +5 -0
  238. gaia/eval/webapp/node_modules/dunder-proto/set.js +35 -0
  239. gaia/eval/webapp/node_modules/dunder-proto/test/get.js +34 -0
  240. gaia/eval/webapp/node_modules/dunder-proto/test/index.js +4 -0
  241. gaia/eval/webapp/node_modules/dunder-proto/test/set.js +50 -0
  242. gaia/eval/webapp/node_modules/dunder-proto/tsconfig.json +9 -0
  243. gaia/eval/webapp/node_modules/ee-first/LICENSE +22 -0
  244. gaia/eval/webapp/node_modules/ee-first/README.md +80 -0
  245. gaia/eval/webapp/node_modules/ee-first/index.js +95 -0
  246. gaia/eval/webapp/node_modules/ee-first/package.json +29 -0
  247. gaia/eval/webapp/node_modules/encodeurl/LICENSE +22 -0
  248. gaia/eval/webapp/node_modules/encodeurl/README.md +109 -0
  249. gaia/eval/webapp/node_modules/encodeurl/index.js +60 -0
  250. gaia/eval/webapp/node_modules/encodeurl/package.json +40 -0
  251. gaia/eval/webapp/node_modules/es-define-property/.eslintrc +13 -0
  252. gaia/eval/webapp/node_modules/es-define-property/.github/FUNDING.yml +12 -0
  253. gaia/eval/webapp/node_modules/es-define-property/.nycrc +9 -0
  254. gaia/eval/webapp/node_modules/es-define-property/CHANGELOG.md +29 -0
  255. gaia/eval/webapp/node_modules/es-define-property/LICENSE +21 -0
  256. gaia/eval/webapp/node_modules/es-define-property/README.md +49 -0
  257. gaia/eval/webapp/node_modules/es-define-property/index.d.ts +3 -0
  258. gaia/eval/webapp/node_modules/es-define-property/index.js +14 -0
  259. gaia/eval/webapp/node_modules/es-define-property/package.json +81 -0
  260. gaia/eval/webapp/node_modules/es-define-property/test/index.js +56 -0
  261. gaia/eval/webapp/node_modules/es-define-property/tsconfig.json +10 -0
  262. gaia/eval/webapp/node_modules/es-errors/.eslintrc +5 -0
  263. gaia/eval/webapp/node_modules/es-errors/.github/FUNDING.yml +12 -0
  264. gaia/eval/webapp/node_modules/es-errors/CHANGELOG.md +40 -0
  265. gaia/eval/webapp/node_modules/es-errors/LICENSE +21 -0
  266. gaia/eval/webapp/node_modules/es-errors/README.md +55 -0
  267. gaia/eval/webapp/node_modules/es-errors/eval.d.ts +3 -0
  268. gaia/eval/webapp/node_modules/es-errors/eval.js +4 -0
  269. gaia/eval/webapp/node_modules/es-errors/index.d.ts +3 -0
  270. gaia/eval/webapp/node_modules/es-errors/index.js +4 -0
  271. gaia/eval/webapp/node_modules/es-errors/package.json +80 -0
  272. gaia/eval/webapp/node_modules/es-errors/range.d.ts +3 -0
  273. gaia/eval/webapp/node_modules/es-errors/range.js +4 -0
  274. gaia/eval/webapp/node_modules/es-errors/ref.d.ts +3 -0
  275. gaia/eval/webapp/node_modules/es-errors/ref.js +4 -0
  276. gaia/eval/webapp/node_modules/es-errors/syntax.d.ts +3 -0
  277. gaia/eval/webapp/node_modules/es-errors/syntax.js +4 -0
  278. gaia/eval/webapp/node_modules/es-errors/test/index.js +19 -0
  279. gaia/eval/webapp/node_modules/es-errors/tsconfig.json +49 -0
  280. gaia/eval/webapp/node_modules/es-errors/type.d.ts +3 -0
  281. gaia/eval/webapp/node_modules/es-errors/type.js +4 -0
  282. gaia/eval/webapp/node_modules/es-errors/uri.d.ts +3 -0
  283. gaia/eval/webapp/node_modules/es-errors/uri.js +4 -0
  284. gaia/eval/webapp/node_modules/es-object-atoms/.eslintrc +16 -0
  285. gaia/eval/webapp/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
  286. gaia/eval/webapp/node_modules/es-object-atoms/CHANGELOG.md +37 -0
  287. gaia/eval/webapp/node_modules/es-object-atoms/LICENSE +21 -0
  288. gaia/eval/webapp/node_modules/es-object-atoms/README.md +63 -0
  289. gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
  290. gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
  291. gaia/eval/webapp/node_modules/es-object-atoms/ToObject.d.ts +7 -0
  292. gaia/eval/webapp/node_modules/es-object-atoms/ToObject.js +10 -0
  293. gaia/eval/webapp/node_modules/es-object-atoms/index.d.ts +3 -0
  294. gaia/eval/webapp/node_modules/es-object-atoms/index.js +4 -0
  295. gaia/eval/webapp/node_modules/es-object-atoms/isObject.d.ts +3 -0
  296. gaia/eval/webapp/node_modules/es-object-atoms/isObject.js +6 -0
  297. gaia/eval/webapp/node_modules/es-object-atoms/package.json +80 -0
  298. gaia/eval/webapp/node_modules/es-object-atoms/test/index.js +38 -0
  299. gaia/eval/webapp/node_modules/es-object-atoms/tsconfig.json +6 -0
  300. gaia/eval/webapp/node_modules/escape-html/LICENSE +24 -0
  301. gaia/eval/webapp/node_modules/escape-html/Readme.md +43 -0
  302. gaia/eval/webapp/node_modules/escape-html/index.js +78 -0
  303. gaia/eval/webapp/node_modules/escape-html/package.json +24 -0
  304. gaia/eval/webapp/node_modules/etag/HISTORY.md +83 -0
  305. gaia/eval/webapp/node_modules/etag/LICENSE +22 -0
  306. gaia/eval/webapp/node_modules/etag/README.md +159 -0
  307. gaia/eval/webapp/node_modules/etag/index.js +131 -0
  308. gaia/eval/webapp/node_modules/etag/package.json +47 -0
  309. gaia/eval/webapp/node_modules/express/History.md +3656 -0
  310. gaia/eval/webapp/node_modules/express/LICENSE +24 -0
  311. gaia/eval/webapp/node_modules/express/Readme.md +260 -0
  312. gaia/eval/webapp/node_modules/express/index.js +11 -0
  313. gaia/eval/webapp/node_modules/express/lib/application.js +661 -0
  314. gaia/eval/webapp/node_modules/express/lib/express.js +116 -0
  315. gaia/eval/webapp/node_modules/express/lib/middleware/init.js +43 -0
  316. gaia/eval/webapp/node_modules/express/lib/middleware/query.js +47 -0
  317. gaia/eval/webapp/node_modules/express/lib/request.js +525 -0
  318. gaia/eval/webapp/node_modules/express/lib/response.js +1179 -0
  319. gaia/eval/webapp/node_modules/express/lib/router/index.js +673 -0
  320. gaia/eval/webapp/node_modules/express/lib/router/layer.js +181 -0
  321. gaia/eval/webapp/node_modules/express/lib/router/route.js +230 -0
  322. gaia/eval/webapp/node_modules/express/lib/utils.js +303 -0
  323. gaia/eval/webapp/node_modules/express/lib/view.js +182 -0
  324. gaia/eval/webapp/node_modules/express/package.json +102 -0
  325. gaia/eval/webapp/node_modules/finalhandler/HISTORY.md +210 -0
  326. gaia/eval/webapp/node_modules/finalhandler/LICENSE +22 -0
  327. gaia/eval/webapp/node_modules/finalhandler/README.md +147 -0
  328. gaia/eval/webapp/node_modules/finalhandler/SECURITY.md +25 -0
  329. gaia/eval/webapp/node_modules/finalhandler/index.js +341 -0
  330. gaia/eval/webapp/node_modules/finalhandler/package.json +47 -0
  331. gaia/eval/webapp/node_modules/forwarded/HISTORY.md +21 -0
  332. gaia/eval/webapp/node_modules/forwarded/LICENSE +22 -0
  333. gaia/eval/webapp/node_modules/forwarded/README.md +57 -0
  334. gaia/eval/webapp/node_modules/forwarded/index.js +90 -0
  335. gaia/eval/webapp/node_modules/forwarded/package.json +45 -0
  336. gaia/eval/webapp/node_modules/fresh/HISTORY.md +70 -0
  337. gaia/eval/webapp/node_modules/fresh/LICENSE +23 -0
  338. gaia/eval/webapp/node_modules/fresh/README.md +119 -0
  339. gaia/eval/webapp/node_modules/fresh/index.js +137 -0
  340. gaia/eval/webapp/node_modules/fresh/package.json +46 -0
  341. gaia/eval/webapp/node_modules/fs/README.md +9 -0
  342. gaia/eval/webapp/node_modules/fs/package.json +20 -0
  343. gaia/eval/webapp/node_modules/function-bind/.eslintrc +21 -0
  344. gaia/eval/webapp/node_modules/function-bind/.github/FUNDING.yml +12 -0
  345. gaia/eval/webapp/node_modules/function-bind/.github/SECURITY.md +3 -0
  346. gaia/eval/webapp/node_modules/function-bind/.nycrc +13 -0
  347. gaia/eval/webapp/node_modules/function-bind/CHANGELOG.md +136 -0
  348. gaia/eval/webapp/node_modules/function-bind/LICENSE +20 -0
  349. gaia/eval/webapp/node_modules/function-bind/README.md +46 -0
  350. gaia/eval/webapp/node_modules/function-bind/implementation.js +84 -0
  351. gaia/eval/webapp/node_modules/function-bind/index.js +5 -0
  352. gaia/eval/webapp/node_modules/function-bind/package.json +87 -0
  353. gaia/eval/webapp/node_modules/function-bind/test/.eslintrc +9 -0
  354. gaia/eval/webapp/node_modules/function-bind/test/index.js +252 -0
  355. gaia/eval/webapp/node_modules/get-intrinsic/.eslintrc +42 -0
  356. gaia/eval/webapp/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
  357. gaia/eval/webapp/node_modules/get-intrinsic/.nycrc +9 -0
  358. gaia/eval/webapp/node_modules/get-intrinsic/CHANGELOG.md +186 -0
  359. gaia/eval/webapp/node_modules/get-intrinsic/LICENSE +21 -0
  360. gaia/eval/webapp/node_modules/get-intrinsic/README.md +71 -0
  361. gaia/eval/webapp/node_modules/get-intrinsic/index.js +378 -0
  362. gaia/eval/webapp/node_modules/get-intrinsic/package.json +97 -0
  363. gaia/eval/webapp/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
  364. gaia/eval/webapp/node_modules/get-proto/.eslintrc +10 -0
  365. gaia/eval/webapp/node_modules/get-proto/.github/FUNDING.yml +12 -0
  366. gaia/eval/webapp/node_modules/get-proto/.nycrc +9 -0
  367. gaia/eval/webapp/node_modules/get-proto/CHANGELOG.md +21 -0
  368. gaia/eval/webapp/node_modules/get-proto/LICENSE +21 -0
  369. gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
  370. gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
  371. gaia/eval/webapp/node_modules/get-proto/README.md +50 -0
  372. gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
  373. gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
  374. gaia/eval/webapp/node_modules/get-proto/index.d.ts +5 -0
  375. gaia/eval/webapp/node_modules/get-proto/index.js +27 -0
  376. gaia/eval/webapp/node_modules/get-proto/package.json +81 -0
  377. gaia/eval/webapp/node_modules/get-proto/test/index.js +68 -0
  378. gaia/eval/webapp/node_modules/get-proto/tsconfig.json +9 -0
  379. gaia/eval/webapp/node_modules/gopd/.eslintrc +16 -0
  380. gaia/eval/webapp/node_modules/gopd/.github/FUNDING.yml +12 -0
  381. gaia/eval/webapp/node_modules/gopd/CHANGELOG.md +45 -0
  382. gaia/eval/webapp/node_modules/gopd/LICENSE +21 -0
  383. gaia/eval/webapp/node_modules/gopd/README.md +40 -0
  384. gaia/eval/webapp/node_modules/gopd/gOPD.d.ts +1 -0
  385. gaia/eval/webapp/node_modules/gopd/gOPD.js +4 -0
  386. gaia/eval/webapp/node_modules/gopd/index.d.ts +5 -0
  387. gaia/eval/webapp/node_modules/gopd/index.js +15 -0
  388. gaia/eval/webapp/node_modules/gopd/package.json +77 -0
  389. gaia/eval/webapp/node_modules/gopd/test/index.js +36 -0
  390. gaia/eval/webapp/node_modules/gopd/tsconfig.json +9 -0
  391. gaia/eval/webapp/node_modules/has-symbols/.eslintrc +11 -0
  392. gaia/eval/webapp/node_modules/has-symbols/.github/FUNDING.yml +12 -0
  393. gaia/eval/webapp/node_modules/has-symbols/.nycrc +9 -0
  394. gaia/eval/webapp/node_modules/has-symbols/CHANGELOG.md +91 -0
  395. gaia/eval/webapp/node_modules/has-symbols/LICENSE +21 -0
  396. gaia/eval/webapp/node_modules/has-symbols/README.md +46 -0
  397. gaia/eval/webapp/node_modules/has-symbols/index.d.ts +3 -0
  398. gaia/eval/webapp/node_modules/has-symbols/index.js +14 -0
  399. gaia/eval/webapp/node_modules/has-symbols/package.json +111 -0
  400. gaia/eval/webapp/node_modules/has-symbols/shams.d.ts +3 -0
  401. gaia/eval/webapp/node_modules/has-symbols/shams.js +45 -0
  402. gaia/eval/webapp/node_modules/has-symbols/test/index.js +22 -0
  403. gaia/eval/webapp/node_modules/has-symbols/test/shams/core-js.js +29 -0
  404. gaia/eval/webapp/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
  405. gaia/eval/webapp/node_modules/has-symbols/test/tests.js +58 -0
  406. gaia/eval/webapp/node_modules/has-symbols/tsconfig.json +10 -0
  407. gaia/eval/webapp/node_modules/hasown/.eslintrc +5 -0
  408. gaia/eval/webapp/node_modules/hasown/.github/FUNDING.yml +12 -0
  409. gaia/eval/webapp/node_modules/hasown/.nycrc +13 -0
  410. gaia/eval/webapp/node_modules/hasown/CHANGELOG.md +40 -0
  411. gaia/eval/webapp/node_modules/hasown/LICENSE +21 -0
  412. gaia/eval/webapp/node_modules/hasown/README.md +40 -0
  413. gaia/eval/webapp/node_modules/hasown/index.d.ts +3 -0
  414. gaia/eval/webapp/node_modules/hasown/index.js +8 -0
  415. gaia/eval/webapp/node_modules/hasown/package.json +92 -0
  416. gaia/eval/webapp/node_modules/hasown/tsconfig.json +6 -0
  417. gaia/eval/webapp/node_modules/http-errors/HISTORY.md +180 -0
  418. gaia/eval/webapp/node_modules/http-errors/LICENSE +23 -0
  419. gaia/eval/webapp/node_modules/http-errors/README.md +169 -0
  420. gaia/eval/webapp/node_modules/http-errors/index.js +289 -0
  421. gaia/eval/webapp/node_modules/http-errors/package.json +50 -0
  422. gaia/eval/webapp/node_modules/iconv-lite/Changelog.md +162 -0
  423. gaia/eval/webapp/node_modules/iconv-lite/LICENSE +21 -0
  424. gaia/eval/webapp/node_modules/iconv-lite/README.md +156 -0
  425. gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
  426. gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
  427. gaia/eval/webapp/node_modules/iconv-lite/encodings/index.js +22 -0
  428. gaia/eval/webapp/node_modules/iconv-lite/encodings/internal.js +188 -0
  429. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
  430. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
  431. gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
  432. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
  433. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
  434. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
  435. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
  436. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
  437. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
  438. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
  439. gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
  440. gaia/eval/webapp/node_modules/iconv-lite/encodings/utf16.js +177 -0
  441. gaia/eval/webapp/node_modules/iconv-lite/encodings/utf7.js +290 -0
  442. gaia/eval/webapp/node_modules/iconv-lite/lib/bom-handling.js +52 -0
  443. gaia/eval/webapp/node_modules/iconv-lite/lib/extend-node.js +217 -0
  444. gaia/eval/webapp/node_modules/iconv-lite/lib/index.d.ts +24 -0
  445. gaia/eval/webapp/node_modules/iconv-lite/lib/index.js +153 -0
  446. gaia/eval/webapp/node_modules/iconv-lite/lib/streams.js +121 -0
  447. gaia/eval/webapp/node_modules/iconv-lite/package.json +46 -0
  448. gaia/eval/webapp/node_modules/inherits/LICENSE +16 -0
  449. gaia/eval/webapp/node_modules/inherits/README.md +42 -0
  450. gaia/eval/webapp/node_modules/inherits/inherits.js +9 -0
  451. gaia/eval/webapp/node_modules/inherits/inherits_browser.js +27 -0
  452. gaia/eval/webapp/node_modules/inherits/package.json +29 -0
  453. gaia/eval/webapp/node_modules/ipaddr.js/LICENSE +19 -0
  454. gaia/eval/webapp/node_modules/ipaddr.js/README.md +233 -0
  455. gaia/eval/webapp/node_modules/ipaddr.js/ipaddr.min.js +1 -0
  456. gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
  457. gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
  458. gaia/eval/webapp/node_modules/ipaddr.js/package.json +35 -0
  459. gaia/eval/webapp/node_modules/math-intrinsics/.eslintrc +16 -0
  460. gaia/eval/webapp/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
  461. gaia/eval/webapp/node_modules/math-intrinsics/CHANGELOG.md +24 -0
  462. gaia/eval/webapp/node_modules/math-intrinsics/LICENSE +21 -0
  463. gaia/eval/webapp/node_modules/math-intrinsics/README.md +50 -0
  464. gaia/eval/webapp/node_modules/math-intrinsics/abs.d.ts +1 -0
  465. gaia/eval/webapp/node_modules/math-intrinsics/abs.js +4 -0
  466. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
  467. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
  468. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
  469. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
  470. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
  471. gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.js +5 -0
  472. gaia/eval/webapp/node_modules/math-intrinsics/floor.d.ts +1 -0
  473. gaia/eval/webapp/node_modules/math-intrinsics/floor.js +4 -0
  474. gaia/eval/webapp/node_modules/math-intrinsics/isFinite.d.ts +3 -0
  475. gaia/eval/webapp/node_modules/math-intrinsics/isFinite.js +12 -0
  476. gaia/eval/webapp/node_modules/math-intrinsics/isInteger.d.ts +3 -0
  477. gaia/eval/webapp/node_modules/math-intrinsics/isInteger.js +16 -0
  478. gaia/eval/webapp/node_modules/math-intrinsics/isNaN.d.ts +1 -0
  479. gaia/eval/webapp/node_modules/math-intrinsics/isNaN.js +6 -0
  480. gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
  481. gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.js +6 -0
  482. gaia/eval/webapp/node_modules/math-intrinsics/max.d.ts +1 -0
  483. gaia/eval/webapp/node_modules/math-intrinsics/max.js +4 -0
  484. gaia/eval/webapp/node_modules/math-intrinsics/min.d.ts +1 -0
  485. gaia/eval/webapp/node_modules/math-intrinsics/min.js +4 -0
  486. gaia/eval/webapp/node_modules/math-intrinsics/mod.d.ts +3 -0
  487. gaia/eval/webapp/node_modules/math-intrinsics/mod.js +9 -0
  488. gaia/eval/webapp/node_modules/math-intrinsics/package.json +86 -0
  489. gaia/eval/webapp/node_modules/math-intrinsics/pow.d.ts +1 -0
  490. gaia/eval/webapp/node_modules/math-intrinsics/pow.js +4 -0
  491. gaia/eval/webapp/node_modules/math-intrinsics/round.d.ts +1 -0
  492. gaia/eval/webapp/node_modules/math-intrinsics/round.js +4 -0
  493. gaia/eval/webapp/node_modules/math-intrinsics/sign.d.ts +3 -0
  494. gaia/eval/webapp/node_modules/math-intrinsics/sign.js +11 -0
  495. gaia/eval/webapp/node_modules/math-intrinsics/test/index.js +192 -0
  496. gaia/eval/webapp/node_modules/math-intrinsics/tsconfig.json +3 -0
  497. gaia/eval/webapp/node_modules/media-typer/HISTORY.md +22 -0
  498. gaia/eval/webapp/node_modules/media-typer/LICENSE +22 -0
  499. gaia/eval/webapp/node_modules/media-typer/README.md +81 -0
  500. gaia/eval/webapp/node_modules/media-typer/index.js +270 -0
  501. gaia/eval/webapp/node_modules/media-typer/package.json +26 -0
  502. gaia/eval/webapp/node_modules/merge-descriptors/HISTORY.md +21 -0
  503. gaia/eval/webapp/node_modules/merge-descriptors/LICENSE +23 -0
  504. gaia/eval/webapp/node_modules/merge-descriptors/README.md +49 -0
  505. gaia/eval/webapp/node_modules/merge-descriptors/index.js +60 -0
  506. gaia/eval/webapp/node_modules/merge-descriptors/package.json +39 -0
  507. gaia/eval/webapp/node_modules/methods/HISTORY.md +29 -0
  508. gaia/eval/webapp/node_modules/methods/LICENSE +24 -0
  509. gaia/eval/webapp/node_modules/methods/README.md +51 -0
  510. gaia/eval/webapp/node_modules/methods/index.js +69 -0
  511. gaia/eval/webapp/node_modules/methods/package.json +36 -0
  512. gaia/eval/webapp/node_modules/mime/.npmignore +0 -0
  513. gaia/eval/webapp/node_modules/mime/CHANGELOG.md +164 -0
  514. gaia/eval/webapp/node_modules/mime/LICENSE +21 -0
  515. gaia/eval/webapp/node_modules/mime/README.md +90 -0
  516. gaia/eval/webapp/node_modules/mime/cli.js +8 -0
  517. gaia/eval/webapp/node_modules/mime/mime.js +108 -0
  518. gaia/eval/webapp/node_modules/mime/package.json +44 -0
  519. gaia/eval/webapp/node_modules/mime/src/build.js +53 -0
  520. gaia/eval/webapp/node_modules/mime/src/test.js +60 -0
  521. gaia/eval/webapp/node_modules/mime/types.json +1 -0
  522. gaia/eval/webapp/node_modules/mime-db/HISTORY.md +507 -0
  523. gaia/eval/webapp/node_modules/mime-db/LICENSE +23 -0
  524. gaia/eval/webapp/node_modules/mime-db/README.md +100 -0
  525. gaia/eval/webapp/node_modules/mime-db/db.json +8519 -0
  526. gaia/eval/webapp/node_modules/mime-db/index.js +12 -0
  527. gaia/eval/webapp/node_modules/mime-db/package.json +60 -0
  528. gaia/eval/webapp/node_modules/mime-types/HISTORY.md +397 -0
  529. gaia/eval/webapp/node_modules/mime-types/LICENSE +23 -0
  530. gaia/eval/webapp/node_modules/mime-types/README.md +113 -0
  531. gaia/eval/webapp/node_modules/mime-types/index.js +188 -0
  532. gaia/eval/webapp/node_modules/mime-types/package.json +44 -0
  533. gaia/eval/webapp/node_modules/ms/index.js +152 -0
  534. gaia/eval/webapp/node_modules/ms/license.md +21 -0
  535. gaia/eval/webapp/node_modules/ms/package.json +37 -0
  536. gaia/eval/webapp/node_modules/ms/readme.md +51 -0
  537. gaia/eval/webapp/node_modules/negotiator/HISTORY.md +108 -0
  538. gaia/eval/webapp/node_modules/negotiator/LICENSE +24 -0
  539. gaia/eval/webapp/node_modules/negotiator/README.md +203 -0
  540. gaia/eval/webapp/node_modules/negotiator/index.js +82 -0
  541. gaia/eval/webapp/node_modules/negotiator/lib/charset.js +169 -0
  542. gaia/eval/webapp/node_modules/negotiator/lib/encoding.js +184 -0
  543. gaia/eval/webapp/node_modules/negotiator/lib/language.js +179 -0
  544. gaia/eval/webapp/node_modules/negotiator/lib/mediaType.js +294 -0
  545. gaia/eval/webapp/node_modules/negotiator/package.json +42 -0
  546. gaia/eval/webapp/node_modules/object-inspect/.eslintrc +53 -0
  547. gaia/eval/webapp/node_modules/object-inspect/.github/FUNDING.yml +12 -0
  548. gaia/eval/webapp/node_modules/object-inspect/.nycrc +13 -0
  549. gaia/eval/webapp/node_modules/object-inspect/CHANGELOG.md +424 -0
  550. gaia/eval/webapp/node_modules/object-inspect/LICENSE +21 -0
  551. gaia/eval/webapp/node_modules/object-inspect/example/all.js +23 -0
  552. gaia/eval/webapp/node_modules/object-inspect/example/circular.js +6 -0
  553. gaia/eval/webapp/node_modules/object-inspect/example/fn.js +5 -0
  554. gaia/eval/webapp/node_modules/object-inspect/example/inspect.js +10 -0
  555. gaia/eval/webapp/node_modules/object-inspect/index.js +544 -0
  556. gaia/eval/webapp/node_modules/object-inspect/package-support.json +20 -0
  557. gaia/eval/webapp/node_modules/object-inspect/package.json +105 -0
  558. gaia/eval/webapp/node_modules/object-inspect/readme.markdown +84 -0
  559. gaia/eval/webapp/node_modules/object-inspect/test/bigint.js +58 -0
  560. gaia/eval/webapp/node_modules/object-inspect/test/browser/dom.js +15 -0
  561. gaia/eval/webapp/node_modules/object-inspect/test/circular.js +16 -0
  562. gaia/eval/webapp/node_modules/object-inspect/test/deep.js +12 -0
  563. gaia/eval/webapp/node_modules/object-inspect/test/element.js +53 -0
  564. gaia/eval/webapp/node_modules/object-inspect/test/err.js +48 -0
  565. gaia/eval/webapp/node_modules/object-inspect/test/fakes.js +29 -0
  566. gaia/eval/webapp/node_modules/object-inspect/test/fn.js +76 -0
  567. gaia/eval/webapp/node_modules/object-inspect/test/global.js +17 -0
  568. gaia/eval/webapp/node_modules/object-inspect/test/has.js +15 -0
  569. gaia/eval/webapp/node_modules/object-inspect/test/holes.js +15 -0
  570. gaia/eval/webapp/node_modules/object-inspect/test/indent-option.js +271 -0
  571. gaia/eval/webapp/node_modules/object-inspect/test/inspect.js +139 -0
  572. gaia/eval/webapp/node_modules/object-inspect/test/lowbyte.js +12 -0
  573. gaia/eval/webapp/node_modules/object-inspect/test/number.js +58 -0
  574. gaia/eval/webapp/node_modules/object-inspect/test/quoteStyle.js +26 -0
  575. gaia/eval/webapp/node_modules/object-inspect/test/toStringTag.js +40 -0
  576. gaia/eval/webapp/node_modules/object-inspect/test/undef.js +12 -0
  577. gaia/eval/webapp/node_modules/object-inspect/test/values.js +261 -0
  578. gaia/eval/webapp/node_modules/object-inspect/test-core-js.js +26 -0
  579. gaia/eval/webapp/node_modules/object-inspect/util.inspect.js +1 -0
  580. gaia/eval/webapp/node_modules/on-finished/HISTORY.md +98 -0
  581. gaia/eval/webapp/node_modules/on-finished/LICENSE +23 -0
  582. gaia/eval/webapp/node_modules/on-finished/README.md +162 -0
  583. gaia/eval/webapp/node_modules/on-finished/index.js +234 -0
  584. gaia/eval/webapp/node_modules/on-finished/package.json +39 -0
  585. gaia/eval/webapp/node_modules/parseurl/HISTORY.md +58 -0
  586. gaia/eval/webapp/node_modules/parseurl/LICENSE +24 -0
  587. gaia/eval/webapp/node_modules/parseurl/README.md +133 -0
  588. gaia/eval/webapp/node_modules/parseurl/index.js +158 -0
  589. gaia/eval/webapp/node_modules/parseurl/package.json +40 -0
  590. gaia/eval/webapp/node_modules/path/.npmignore +1 -0
  591. gaia/eval/webapp/node_modules/path/LICENSE +18 -0
  592. gaia/eval/webapp/node_modules/path/README.md +15 -0
  593. gaia/eval/webapp/node_modules/path/package.json +24 -0
  594. gaia/eval/webapp/node_modules/path/path.js +628 -0
  595. gaia/eval/webapp/node_modules/path-to-regexp/LICENSE +21 -0
  596. gaia/eval/webapp/node_modules/path-to-regexp/Readme.md +35 -0
  597. gaia/eval/webapp/node_modules/path-to-regexp/index.js +156 -0
  598. gaia/eval/webapp/node_modules/path-to-regexp/package.json +30 -0
  599. gaia/eval/webapp/node_modules/process/.eslintrc +21 -0
  600. gaia/eval/webapp/node_modules/process/LICENSE +22 -0
  601. gaia/eval/webapp/node_modules/process/README.md +26 -0
  602. gaia/eval/webapp/node_modules/process/browser.js +184 -0
  603. gaia/eval/webapp/node_modules/process/index.js +2 -0
  604. gaia/eval/webapp/node_modules/process/package.json +27 -0
  605. gaia/eval/webapp/node_modules/process/test.js +199 -0
  606. gaia/eval/webapp/node_modules/proxy-addr/HISTORY.md +161 -0
  607. gaia/eval/webapp/node_modules/proxy-addr/LICENSE +22 -0
  608. gaia/eval/webapp/node_modules/proxy-addr/README.md +139 -0
  609. gaia/eval/webapp/node_modules/proxy-addr/index.js +327 -0
  610. gaia/eval/webapp/node_modules/proxy-addr/package.json +47 -0
  611. gaia/eval/webapp/node_modules/qs/.editorconfig +46 -0
  612. gaia/eval/webapp/node_modules/qs/.eslintrc +38 -0
  613. gaia/eval/webapp/node_modules/qs/.github/FUNDING.yml +12 -0
  614. gaia/eval/webapp/node_modules/qs/.nycrc +13 -0
  615. gaia/eval/webapp/node_modules/qs/CHANGELOG.md +600 -0
  616. gaia/eval/webapp/node_modules/qs/LICENSE.md +29 -0
  617. gaia/eval/webapp/node_modules/qs/README.md +709 -0
  618. gaia/eval/webapp/node_modules/qs/dist/qs.js +90 -0
  619. gaia/eval/webapp/node_modules/qs/lib/formats.js +23 -0
  620. gaia/eval/webapp/node_modules/qs/lib/index.js +11 -0
  621. gaia/eval/webapp/node_modules/qs/lib/parse.js +296 -0
  622. gaia/eval/webapp/node_modules/qs/lib/stringify.js +351 -0
  623. gaia/eval/webapp/node_modules/qs/lib/utils.js +265 -0
  624. gaia/eval/webapp/node_modules/qs/package.json +91 -0
  625. gaia/eval/webapp/node_modules/qs/test/empty-keys-cases.js +267 -0
  626. gaia/eval/webapp/node_modules/qs/test/parse.js +1170 -0
  627. gaia/eval/webapp/node_modules/qs/test/stringify.js +1298 -0
  628. gaia/eval/webapp/node_modules/qs/test/utils.js +136 -0
  629. gaia/eval/webapp/node_modules/range-parser/HISTORY.md +56 -0
  630. gaia/eval/webapp/node_modules/range-parser/LICENSE +23 -0
  631. gaia/eval/webapp/node_modules/range-parser/README.md +84 -0
  632. gaia/eval/webapp/node_modules/range-parser/index.js +162 -0
  633. gaia/eval/webapp/node_modules/range-parser/package.json +44 -0
  634. gaia/eval/webapp/node_modules/raw-body/HISTORY.md +308 -0
  635. gaia/eval/webapp/node_modules/raw-body/LICENSE +22 -0
  636. gaia/eval/webapp/node_modules/raw-body/README.md +223 -0
  637. gaia/eval/webapp/node_modules/raw-body/SECURITY.md +24 -0
  638. gaia/eval/webapp/node_modules/raw-body/index.d.ts +87 -0
  639. gaia/eval/webapp/node_modules/raw-body/index.js +336 -0
  640. gaia/eval/webapp/node_modules/raw-body/package.json +49 -0
  641. gaia/eval/webapp/node_modules/safe-buffer/LICENSE +21 -0
  642. gaia/eval/webapp/node_modules/safe-buffer/README.md +584 -0
  643. gaia/eval/webapp/node_modules/safe-buffer/index.d.ts +187 -0
  644. gaia/eval/webapp/node_modules/safe-buffer/index.js +65 -0
  645. gaia/eval/webapp/node_modules/safe-buffer/package.json +51 -0
  646. gaia/eval/webapp/node_modules/safer-buffer/LICENSE +21 -0
  647. gaia/eval/webapp/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  648. gaia/eval/webapp/node_modules/safer-buffer/Readme.md +156 -0
  649. gaia/eval/webapp/node_modules/safer-buffer/dangerous.js +58 -0
  650. gaia/eval/webapp/node_modules/safer-buffer/package.json +34 -0
  651. gaia/eval/webapp/node_modules/safer-buffer/safer.js +77 -0
  652. gaia/eval/webapp/node_modules/safer-buffer/tests.js +406 -0
  653. gaia/eval/webapp/node_modules/send/HISTORY.md +526 -0
  654. gaia/eval/webapp/node_modules/send/LICENSE +23 -0
  655. gaia/eval/webapp/node_modules/send/README.md +327 -0
  656. gaia/eval/webapp/node_modules/send/SECURITY.md +24 -0
  657. gaia/eval/webapp/node_modules/send/index.js +1142 -0
  658. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/HISTORY.md +14 -0
  659. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/LICENSE +22 -0
  660. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/README.md +128 -0
  661. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/index.js +60 -0
  662. gaia/eval/webapp/node_modules/send/node_modules/encodeurl/package.json +40 -0
  663. gaia/eval/webapp/node_modules/send/node_modules/ms/index.js +162 -0
  664. gaia/eval/webapp/node_modules/send/node_modules/ms/license.md +21 -0
  665. gaia/eval/webapp/node_modules/send/node_modules/ms/package.json +38 -0
  666. gaia/eval/webapp/node_modules/send/node_modules/ms/readme.md +59 -0
  667. gaia/eval/webapp/node_modules/send/package.json +62 -0
  668. gaia/eval/webapp/node_modules/serve-static/HISTORY.md +487 -0
  669. gaia/eval/webapp/node_modules/serve-static/LICENSE +25 -0
  670. gaia/eval/webapp/node_modules/serve-static/README.md +257 -0
  671. gaia/eval/webapp/node_modules/serve-static/index.js +209 -0
  672. gaia/eval/webapp/node_modules/serve-static/package.json +42 -0
  673. gaia/eval/webapp/node_modules/setprototypeof/LICENSE +13 -0
  674. gaia/eval/webapp/node_modules/setprototypeof/README.md +31 -0
  675. gaia/eval/webapp/node_modules/setprototypeof/index.d.ts +2 -0
  676. gaia/eval/webapp/node_modules/setprototypeof/index.js +17 -0
  677. gaia/eval/webapp/node_modules/setprototypeof/package.json +38 -0
  678. gaia/eval/webapp/node_modules/setprototypeof/test/index.js +24 -0
  679. gaia/eval/webapp/node_modules/side-channel/.editorconfig +9 -0
  680. gaia/eval/webapp/node_modules/side-channel/.eslintrc +12 -0
  681. gaia/eval/webapp/node_modules/side-channel/.github/FUNDING.yml +12 -0
  682. gaia/eval/webapp/node_modules/side-channel/.nycrc +13 -0
  683. gaia/eval/webapp/node_modules/side-channel/CHANGELOG.md +110 -0
  684. gaia/eval/webapp/node_modules/side-channel/LICENSE +21 -0
  685. gaia/eval/webapp/node_modules/side-channel/README.md +61 -0
  686. gaia/eval/webapp/node_modules/side-channel/index.d.ts +14 -0
  687. gaia/eval/webapp/node_modules/side-channel/index.js +43 -0
  688. gaia/eval/webapp/node_modules/side-channel/package.json +85 -0
  689. gaia/eval/webapp/node_modules/side-channel/test/index.js +104 -0
  690. gaia/eval/webapp/node_modules/side-channel/tsconfig.json +9 -0
  691. gaia/eval/webapp/node_modules/side-channel-list/.editorconfig +9 -0
  692. gaia/eval/webapp/node_modules/side-channel-list/.eslintrc +11 -0
  693. gaia/eval/webapp/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
  694. gaia/eval/webapp/node_modules/side-channel-list/.nycrc +13 -0
  695. gaia/eval/webapp/node_modules/side-channel-list/CHANGELOG.md +15 -0
  696. gaia/eval/webapp/node_modules/side-channel-list/LICENSE +21 -0
  697. gaia/eval/webapp/node_modules/side-channel-list/README.md +62 -0
  698. gaia/eval/webapp/node_modules/side-channel-list/index.d.ts +13 -0
  699. gaia/eval/webapp/node_modules/side-channel-list/index.js +113 -0
  700. gaia/eval/webapp/node_modules/side-channel-list/list.d.ts +14 -0
  701. gaia/eval/webapp/node_modules/side-channel-list/package.json +77 -0
  702. gaia/eval/webapp/node_modules/side-channel-list/test/index.js +104 -0
  703. gaia/eval/webapp/node_modules/side-channel-list/tsconfig.json +9 -0
  704. gaia/eval/webapp/node_modules/side-channel-map/.editorconfig +9 -0
  705. gaia/eval/webapp/node_modules/side-channel-map/.eslintrc +11 -0
  706. gaia/eval/webapp/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
  707. gaia/eval/webapp/node_modules/side-channel-map/.nycrc +13 -0
  708. gaia/eval/webapp/node_modules/side-channel-map/CHANGELOG.md +22 -0
  709. gaia/eval/webapp/node_modules/side-channel-map/LICENSE +21 -0
  710. gaia/eval/webapp/node_modules/side-channel-map/README.md +62 -0
  711. gaia/eval/webapp/node_modules/side-channel-map/index.d.ts +15 -0
  712. gaia/eval/webapp/node_modules/side-channel-map/index.js +68 -0
  713. gaia/eval/webapp/node_modules/side-channel-map/package.json +80 -0
  714. gaia/eval/webapp/node_modules/side-channel-map/test/index.js +114 -0
  715. gaia/eval/webapp/node_modules/side-channel-map/tsconfig.json +9 -0
  716. gaia/eval/webapp/node_modules/side-channel-weakmap/.editorconfig +9 -0
  717. gaia/eval/webapp/node_modules/side-channel-weakmap/.eslintrc +12 -0
  718. gaia/eval/webapp/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
  719. gaia/eval/webapp/node_modules/side-channel-weakmap/.nycrc +13 -0
  720. gaia/eval/webapp/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
  721. gaia/eval/webapp/node_modules/side-channel-weakmap/LICENSE +21 -0
  722. gaia/eval/webapp/node_modules/side-channel-weakmap/README.md +62 -0
  723. gaia/eval/webapp/node_modules/side-channel-weakmap/index.d.ts +15 -0
  724. gaia/eval/webapp/node_modules/side-channel-weakmap/index.js +84 -0
  725. gaia/eval/webapp/node_modules/side-channel-weakmap/package.json +87 -0
  726. gaia/eval/webapp/node_modules/side-channel-weakmap/test/index.js +114 -0
  727. gaia/eval/webapp/node_modules/side-channel-weakmap/tsconfig.json +9 -0
  728. gaia/eval/webapp/node_modules/statuses/HISTORY.md +82 -0
  729. gaia/eval/webapp/node_modules/statuses/LICENSE +23 -0
  730. gaia/eval/webapp/node_modules/statuses/README.md +136 -0
  731. gaia/eval/webapp/node_modules/statuses/codes.json +65 -0
  732. gaia/eval/webapp/node_modules/statuses/index.js +146 -0
  733. gaia/eval/webapp/node_modules/statuses/package.json +49 -0
  734. gaia/eval/webapp/node_modules/toidentifier/HISTORY.md +9 -0
  735. gaia/eval/webapp/node_modules/toidentifier/LICENSE +21 -0
  736. gaia/eval/webapp/node_modules/toidentifier/README.md +61 -0
  737. gaia/eval/webapp/node_modules/toidentifier/index.js +32 -0
  738. gaia/eval/webapp/node_modules/toidentifier/package.json +38 -0
  739. gaia/eval/webapp/node_modules/type-is/HISTORY.md +259 -0
  740. gaia/eval/webapp/node_modules/type-is/LICENSE +23 -0
  741. gaia/eval/webapp/node_modules/type-is/README.md +170 -0
  742. gaia/eval/webapp/node_modules/type-is/index.js +266 -0
  743. gaia/eval/webapp/node_modules/type-is/package.json +45 -0
  744. gaia/eval/webapp/node_modules/unpipe/HISTORY.md +4 -0
  745. gaia/eval/webapp/node_modules/unpipe/LICENSE +22 -0
  746. gaia/eval/webapp/node_modules/unpipe/README.md +43 -0
  747. gaia/eval/webapp/node_modules/unpipe/index.js +69 -0
  748. gaia/eval/webapp/node_modules/unpipe/package.json +27 -0
  749. gaia/eval/webapp/node_modules/util/LICENSE +18 -0
  750. gaia/eval/webapp/node_modules/util/README.md +15 -0
  751. gaia/eval/webapp/node_modules/util/node_modules/inherits/LICENSE +16 -0
  752. gaia/eval/webapp/node_modules/util/node_modules/inherits/README.md +42 -0
  753. gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits.js +7 -0
  754. gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits_browser.js +23 -0
  755. gaia/eval/webapp/node_modules/util/node_modules/inherits/package.json +29 -0
  756. gaia/eval/webapp/node_modules/util/package.json +35 -0
  757. gaia/eval/webapp/node_modules/util/support/isBuffer.js +3 -0
  758. gaia/eval/webapp/node_modules/util/support/isBufferBrowser.js +6 -0
  759. gaia/eval/webapp/node_modules/util/util.js +586 -0
  760. gaia/eval/webapp/node_modules/utils-merge/.npmignore +9 -0
  761. gaia/eval/webapp/node_modules/utils-merge/LICENSE +20 -0
  762. gaia/eval/webapp/node_modules/utils-merge/README.md +34 -0
  763. gaia/eval/webapp/node_modules/utils-merge/index.js +23 -0
  764. gaia/eval/webapp/node_modules/utils-merge/package.json +40 -0
  765. gaia/eval/webapp/node_modules/vary/HISTORY.md +39 -0
  766. gaia/eval/webapp/node_modules/vary/LICENSE +22 -0
  767. gaia/eval/webapp/node_modules/vary/README.md +101 -0
  768. gaia/eval/webapp/node_modules/vary/index.js +149 -0
  769. gaia/eval/webapp/node_modules/vary/package.json +43 -0
  770. gaia/eval/webapp/package-lock.json +875 -0
  771. gaia/eval/webapp/package.json +21 -0
  772. gaia/eval/webapp/public/app.js +3403 -0
  773. gaia/eval/webapp/public/index.html +88 -0
  774. gaia/eval/webapp/public/styles.css +3661 -0
  775. gaia/eval/webapp/server.js +416 -0
  776. gaia/eval/webapp/test-setup.js +73 -0
  777. gaia/llm/__init__.py +2 -0
  778. gaia/llm/lemonade_client.py +3083 -0
  779. gaia/llm/lemonade_manager.py +269 -0
  780. gaia/llm/llm_client.py +729 -0
  781. gaia/llm/vlm_client.py +307 -0
  782. gaia/logger.py +189 -0
  783. gaia/mcp/agent_mcp_server.py +245 -0
  784. gaia/mcp/blender_mcp_client.py +138 -0
  785. gaia/mcp/blender_mcp_server.py +648 -0
  786. gaia/mcp/context7_cache.py +332 -0
  787. gaia/mcp/external_services.py +518 -0
  788. gaia/mcp/mcp_bridge.py +550 -0
  789. gaia/mcp/servers/__init__.py +6 -0
  790. gaia/mcp/servers/docker_mcp.py +83 -0
  791. gaia/rag/__init__.py +10 -0
  792. gaia/rag/app.py +293 -0
  793. gaia/rag/demo.py +304 -0
  794. gaia/rag/pdf_utils.py +235 -0
  795. gaia/rag/sdk.py +2194 -0
  796. gaia/security.py +163 -0
  797. gaia/talk/app.py +289 -0
  798. gaia/talk/sdk.py +538 -0
  799. gaia/util.py +46 -0
  800. gaia/version.py +100 -0
@@ -0,0 +1,828 @@
1
+ # Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ """
4
+ Next.js step implementations.
5
+
6
+ Steps wrap the existing Code Agent tools with standardized interfaces.
7
+ """
8
+
9
+ from dataclasses import dataclass, field
10
+ from pathlib import Path
11
+ from typing import Any, Dict, Optional, Tuple
12
+
13
+ from .base import BaseStep, ErrorCategory, StepResult, UserContext
14
+
15
+ # Package versions (matching nextjs_prompt.py)
16
+ NEXTJS_VERSION = "14.2.33"
17
+ PRISMA_VERSION = "5.22.0"
18
+ ZOD_VERSION = "3.23.8"
19
+
20
+
21
+ @dataclass
22
+ class CreateNextAppStep(BaseStep):
23
+ """Step to create a new Next.js application."""
24
+
25
+ name: str = "create_next_app"
26
+ description: str = "Initialize Next.js project"
27
+
28
+ def should_skip(self, context: UserContext) -> Optional[str]:
29
+ """Skip if package.json already exists."""
30
+ package_json = Path(context.project_dir) / "package.json"
31
+ if package_json.exists():
32
+ return "package.json already exists, project already initialized"
33
+ return None
34
+
35
+ def get_tool_invocation(
36
+ self, context: UserContext
37
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
38
+ """Return run_cli_command invocation."""
39
+ return (
40
+ "run_cli_command",
41
+ {
42
+ "command": f"npx -y create-next-app@{NEXTJS_VERSION} . --typescript --tailwind --eslint --app --src-dir --yes",
43
+ "working_dir": context.project_dir,
44
+ "timeout": 1200,
45
+ },
46
+ )
47
+
48
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
49
+ """Convert tool result to StepResult."""
50
+ if isinstance(result, dict):
51
+ if result.get("success") or result.get("return_code") == 0:
52
+ return StepResult.ok(
53
+ "Next.js project created successfully",
54
+ files=["package.json", "tsconfig.json", "src/app/page.tsx"],
55
+ )
56
+ return StepResult.make_error(
57
+ "Failed to create Next.js project",
58
+ result.get("error") or result.get("stderr", "Unknown error"),
59
+ ErrorCategory.COMPILATION,
60
+ )
61
+ return StepResult.make_error(
62
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
63
+ )
64
+
65
+
66
+ @dataclass
67
+ class SetupAppStylingStep(BaseStep):
68
+ """Step to set up app-wide modern styling.
69
+
70
+ Creates the root layout and globals.css with a modern dark theme
71
+ design system that all pages inherit.
72
+ """
73
+
74
+ name: str = "setup_styling"
75
+ description: str = "Set up modern app styling"
76
+ app_title: str = "My App"
77
+ app_description: str = "A modern web application"
78
+
79
+ def get_tool_invocation(
80
+ self, context: UserContext
81
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
82
+ """Return setup_app_styling invocation."""
83
+ # Derive app title from entity name or use default
84
+ title = f"{context.entity_name or 'My'} App"
85
+ description = f"A modern {(context.entity_name or 'web').lower()} application"
86
+
87
+ return (
88
+ "setup_app_styling",
89
+ {
90
+ "project_dir": context.project_dir,
91
+ "app_title": title,
92
+ "app_description": description,
93
+ },
94
+ )
95
+
96
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
97
+ """Convert tool result to StepResult."""
98
+ if isinstance(result, dict):
99
+ if result.get("success"):
100
+ return StepResult.ok(
101
+ "App styling configured with modern design system",
102
+ files=result.get("files", []),
103
+ )
104
+ return StepResult.make_error(
105
+ "Failed to set up app styling",
106
+ result.get("error", "Unknown error"),
107
+ ErrorCategory.CONFIGURATION,
108
+ )
109
+ return StepResult.make_error(
110
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
111
+ )
112
+
113
+
114
+ @dataclass
115
+ class InstallDependenciesStep(BaseStep):
116
+ """Step to install additional dependencies."""
117
+
118
+ name: str = "install_deps"
119
+ description: str = "Install Prisma and Zod"
120
+
121
+ def should_skip(self, context: UserContext) -> Optional[str]:
122
+ """Skip if prisma is already in package.json."""
123
+ package_json = Path(context.project_dir) / "package.json"
124
+ if package_json.exists():
125
+ content = package_json.read_text()
126
+ if "prisma" in content and "@prisma/client" in content:
127
+ return "Dependencies already installed"
128
+ return None
129
+
130
+ def get_tool_invocation(
131
+ self, context: UserContext
132
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
133
+ """Return run_cli_command invocation."""
134
+ return (
135
+ "run_cli_command",
136
+ {
137
+ "command": f"npm install prisma@^{PRISMA_VERSION} @prisma/client@^{PRISMA_VERSION} zod@^{ZOD_VERSION}",
138
+ "working_dir": context.project_dir,
139
+ "timeout": 1200,
140
+ },
141
+ )
142
+
143
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
144
+ """Convert tool result to StepResult."""
145
+ if isinstance(result, dict):
146
+ if result.get("success") or result.get("return_code") == 0:
147
+ return StepResult.ok("Dependencies installed successfully")
148
+ return StepResult.make_error(
149
+ "Failed to install dependencies",
150
+ result.get("error") or result.get("stderr", "Unknown error"),
151
+ ErrorCategory.DEPENDENCY,
152
+ )
153
+ return StepResult.make_error(
154
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
155
+ )
156
+
157
+
158
+ @dataclass
159
+ class PrismaInitStep(BaseStep):
160
+ """Step to initialize Prisma with SQLite."""
161
+
162
+ name: str = "prisma_init"
163
+ description: str = "Initialize Prisma"
164
+
165
+ def should_skip(self, context: UserContext) -> Optional[str]:
166
+ """Skip if prisma directory already exists."""
167
+ prisma_dir = Path(context.project_dir) / "prisma"
168
+ if prisma_dir.exists() and (prisma_dir / "schema.prisma").exists():
169
+ return "Prisma already initialized"
170
+ return None
171
+
172
+ def get_tool_invocation(
173
+ self, context: UserContext
174
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
175
+ """Return run_cli_command invocation."""
176
+ return (
177
+ "run_cli_command",
178
+ {
179
+ "command": "npx -y prisma init --datasource-provider sqlite",
180
+ "working_dir": context.project_dir,
181
+ "timeout": 600,
182
+ },
183
+ )
184
+
185
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
186
+ """Convert tool result to StepResult."""
187
+ if isinstance(result, dict):
188
+ if result.get("success") or result.get("return_code") == 0:
189
+ return StepResult.ok(
190
+ "Prisma initialized with SQLite",
191
+ files=["prisma/schema.prisma"],
192
+ )
193
+ return StepResult.make_error(
194
+ "Failed to initialize Prisma",
195
+ result.get("error") or result.get("stderr", "Unknown error"),
196
+ ErrorCategory.CONFIGURATION,
197
+ )
198
+ return StepResult.make_error(
199
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
200
+ )
201
+
202
+
203
+ @dataclass
204
+ class ManageDataModelStep(BaseStep):
205
+ """Step to create Prisma data model."""
206
+
207
+ name: str = "data_model"
208
+ description: str = "Create Prisma model"
209
+ entity_name: str = "Item"
210
+ fields: Dict[str, str] = field(default_factory=lambda: {"title": "string"})
211
+
212
+ def validate_preconditions(self, context: UserContext) -> Optional[str]:
213
+ """Check that Prisma is initialized before managing data model."""
214
+ schema_path = Path(context.project_dir) / "prisma" / "schema.prisma"
215
+ if not schema_path.exists():
216
+ return (
217
+ "Prisma not initialized. The prisma/schema.prisma file must exist. "
218
+ "Run 'npx prisma init --datasource-provider sqlite' first."
219
+ )
220
+ return None
221
+
222
+ def get_tool_invocation(
223
+ self, context: UserContext
224
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
225
+ """Return manage_data_model invocation."""
226
+ return (
227
+ "manage_data_model",
228
+ {
229
+ "project_dir": context.project_dir,
230
+ "model_name": self.entity_name,
231
+ "fields": self.fields,
232
+ },
233
+ )
234
+
235
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
236
+ """Convert tool result to StepResult."""
237
+ if isinstance(result, dict):
238
+ if result.get("success"):
239
+ # Store generated files in context
240
+ files = result.get("files", [])
241
+ return StepResult.ok(
242
+ f"Prisma model {self.entity_name} created",
243
+ files=files,
244
+ model_name=self.entity_name,
245
+ )
246
+ return StepResult.make_error(
247
+ f"Failed to create {self.entity_name} model",
248
+ result.get("error", "Unknown error"),
249
+ ErrorCategory.COMPILATION,
250
+ )
251
+ return StepResult.make_error(
252
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
253
+ )
254
+
255
+
256
+ @dataclass
257
+ class SetupPrismaStep(BaseStep):
258
+ """Step to set up Prisma client after schema changes.
259
+
260
+ This creates the Prisma singleton, generates client types, and pushes to DB.
261
+ Must run AFTER ManageDataModelStep and BEFORE API endpoint steps.
262
+ """
263
+
264
+ name: str = "setup_prisma"
265
+ description: str = "Set up Prisma client and database"
266
+
267
+ def validate_preconditions(self, context: UserContext) -> Optional[str]:
268
+ """Check that Prisma schema exists before setup."""
269
+ schema_path = Path(context.project_dir) / "prisma" / "schema.prisma"
270
+ if not schema_path.exists():
271
+ return (
272
+ "Prisma schema not found. The prisma/schema.prisma file must exist. "
273
+ "Run 'npx prisma init' first."
274
+ )
275
+ return None
276
+
277
+ def get_tool_invocation(
278
+ self, context: UserContext
279
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
280
+ """Return setup_prisma invocation."""
281
+ return (
282
+ "setup_prisma",
283
+ {
284
+ "project_dir": context.project_dir,
285
+ "regenerate": True,
286
+ "push_db": True,
287
+ },
288
+ )
289
+
290
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
291
+ """Convert tool result to StepResult."""
292
+ if isinstance(result, dict):
293
+ if result.get("success"):
294
+ files = []
295
+ if result.get("singleton_path"):
296
+ files.append(result["singleton_path"])
297
+ return StepResult.ok(
298
+ "Prisma client set up successfully",
299
+ files=files,
300
+ generated=result.get("generated", False),
301
+ pushed=result.get("pushed", False),
302
+ )
303
+ return StepResult.make_error(
304
+ "Failed to set up Prisma",
305
+ result.get("error", "Unknown error"),
306
+ ErrorCategory.COMPILATION,
307
+ )
308
+ return StepResult.make_error(
309
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
310
+ )
311
+
312
+
313
+ @dataclass
314
+ class ManageApiEndpointStep(BaseStep):
315
+ """Step to create collection API endpoint (GET, POST)."""
316
+
317
+ name: str = "api_collection"
318
+ description: str = "Create collection API"
319
+ entity_name: str = "Item"
320
+ fields: Dict[str, str] = field(default_factory=lambda: {"title": "string"})
321
+
322
+ def validate_preconditions(self, context: UserContext) -> Optional[str]:
323
+ """Check that Prisma singleton exists before creating API endpoints."""
324
+ prisma_lib = Path(context.project_dir) / "src" / "lib" / "prisma.ts"
325
+ if not prisma_lib.exists():
326
+ return (
327
+ "Prisma client not set up. The src/lib/prisma.ts file must exist. "
328
+ "Run 'setup_prisma' tool first to create the Prisma singleton."
329
+ )
330
+ return None
331
+
332
+ def get_tool_invocation(
333
+ self, context: UserContext
334
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
335
+ """Return manage_api_endpoint invocation."""
336
+ return (
337
+ "manage_api_endpoint",
338
+ {
339
+ "project_dir": context.project_dir,
340
+ "resource_name": self.entity_name.lower(),
341
+ "operations": ["GET", "POST"],
342
+ "fields": self.fields,
343
+ },
344
+ )
345
+
346
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
347
+ """Convert tool result to StepResult."""
348
+ if isinstance(result, dict):
349
+ if result.get("success"):
350
+ files = result.get("files", [])
351
+ return StepResult.ok(
352
+ f"Collection API for {self.entity_name} created",
353
+ files=files,
354
+ )
355
+ return StepResult.make_error(
356
+ f"Failed to create collection API for {self.entity_name}",
357
+ result.get("error", "Unknown error"),
358
+ ErrorCategory.COMPILATION,
359
+ )
360
+ return StepResult.make_error(
361
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
362
+ )
363
+
364
+
365
+ @dataclass
366
+ class ManageApiEndpointDynamicStep(BaseStep):
367
+ """Step to create dynamic API endpoint (GET, PATCH, DELETE for [id])."""
368
+
369
+ name: str = "api_item"
370
+ description: str = "Create item API"
371
+ entity_name: str = "Item"
372
+ fields: Dict[str, str] = field(default_factory=lambda: {"title": "string"})
373
+
374
+ def get_tool_invocation(
375
+ self, context: UserContext
376
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
377
+ """Return manage_api_endpoint invocation for dynamic route.
378
+
379
+ Note: The tool automatically creates the [id]/route.ts file when
380
+ PATCH/DELETE operations are requested.
381
+ """
382
+ return (
383
+ "manage_api_endpoint",
384
+ {
385
+ "project_dir": context.project_dir,
386
+ "resource_name": self.entity_name.lower(),
387
+ "operations": ["GET", "PATCH", "DELETE"],
388
+ "fields": self.fields,
389
+ },
390
+ )
391
+
392
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
393
+ """Convert tool result to StepResult."""
394
+ if isinstance(result, dict):
395
+ if result.get("success"):
396
+ files = result.get("files", [])
397
+ return StepResult.ok(
398
+ f"Item API for {self.entity_name} created",
399
+ files=files,
400
+ )
401
+ return StepResult.make_error(
402
+ f"Failed to create item API for {self.entity_name}",
403
+ result.get("error", "Unknown error"),
404
+ ErrorCategory.COMPILATION,
405
+ )
406
+ return StepResult.make_error(
407
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
408
+ )
409
+
410
+
411
+ @dataclass
412
+ class ManageReactComponentStep(BaseStep):
413
+ """Step to create React component."""
414
+
415
+ name: str = "component"
416
+ description: str = "Create React component"
417
+ entity_name: str = "Item"
418
+ variant: str = "list" # list, form, new, detail, actions
419
+ fields: Dict[str, str] = field(default_factory=lambda: {"title": "string"})
420
+
421
+ def get_tool_invocation(
422
+ self, context: UserContext
423
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
424
+ """Return manage_react_component invocation.
425
+
426
+ Note: resource_name is REQUIRED for the tool to generate correct paths.
427
+ Without it, all variants fall back to src/components/{component_name}.tsx.
428
+ """
429
+ # For "form" variant, validation expects TodoForm.tsx (not Todo.tsx)
430
+ if self.variant == "form":
431
+ component_name = f"{self.entity_name}Form"
432
+ else:
433
+ component_name = self.entity_name
434
+
435
+ return (
436
+ "manage_react_component",
437
+ {
438
+ "project_dir": context.project_dir,
439
+ "component_name": component_name,
440
+ "resource_name": self.entity_name.lower(), # Required for path generation
441
+ "variant": self.variant,
442
+ "fields": self.fields,
443
+ },
444
+ )
445
+
446
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
447
+ """Convert tool result to StepResult."""
448
+ if isinstance(result, dict):
449
+ if result.get("success"):
450
+ files = result.get("files", [])
451
+ return StepResult.ok(
452
+ f"{self.entity_name} {self.variant} component created",
453
+ files=files,
454
+ variant=self.variant,
455
+ )
456
+ return StepResult.make_error(
457
+ f"Failed to create {self.entity_name} {self.variant}",
458
+ result.get("error", "Unknown error"),
459
+ ErrorCategory.COMPILATION,
460
+ )
461
+ return StepResult.make_error(
462
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
463
+ )
464
+
465
+
466
+ @dataclass
467
+ class ValidateCrudStructureStep(BaseStep):
468
+ """Step to validate CRUD structure."""
469
+
470
+ name: str = "validate_structure"
471
+ description: str = "Validate CRUD structure"
472
+ entity_name: str = "Item"
473
+
474
+ def get_tool_invocation(
475
+ self, context: UserContext
476
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
477
+ """Return validate_crud_structure invocation."""
478
+ return (
479
+ "validate_crud_structure",
480
+ {
481
+ "project_dir": context.project_dir,
482
+ "resource_name": self.entity_name.lower(),
483
+ },
484
+ )
485
+
486
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
487
+ """Convert tool result to StepResult."""
488
+ if isinstance(result, dict):
489
+ if result.get("success") or result.get("valid"):
490
+ return StepResult.ok("CRUD structure validated successfully")
491
+ missing = result.get("missing_files", [])
492
+ return StepResult.make_error(
493
+ "CRUD structure validation failed",
494
+ f"Missing files: {missing}",
495
+ ErrorCategory.VALIDATION,
496
+ )
497
+ return StepResult.make_error(
498
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
499
+ )
500
+
501
+
502
+ @dataclass
503
+ class ValidateTypescriptStep(BaseStep):
504
+ """Step to validate TypeScript."""
505
+
506
+ name: str = "validate_typescript"
507
+ description: str = "Run TypeScript validation"
508
+
509
+ def get_tool_invocation(
510
+ self, context: UserContext
511
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
512
+ """Return validate_typescript invocation."""
513
+ return (
514
+ "validate_typescript",
515
+ {
516
+ "project_dir": context.project_dir,
517
+ },
518
+ )
519
+
520
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
521
+ """Convert tool result to StepResult."""
522
+ if isinstance(result, dict):
523
+ if result.get("success") or result.get("valid"):
524
+ return StepResult.ok("TypeScript validation passed")
525
+ errors = result.get("errors", [])
526
+ return StepResult.make_error(
527
+ "TypeScript validation failed",
528
+ "\n".join(errors) if errors else result.get("error", "Unknown error"),
529
+ ErrorCategory.COMPILATION,
530
+ )
531
+ return StepResult.make_error(
532
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
533
+ )
534
+
535
+
536
+ @dataclass
537
+ class TestCrudApiStep(BaseStep):
538
+ """Step to test CRUD API."""
539
+
540
+ name: str = "test_api"
541
+ description: str = "Test CRUD operations"
542
+ entity_name: str = "Item"
543
+
544
+ def get_tool_invocation(
545
+ self, context: UserContext
546
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
547
+ """Return test_crud_api invocation."""
548
+ return (
549
+ "test_crud_api",
550
+ {
551
+ "project_dir": context.project_dir,
552
+ "model_name": self.entity_name,
553
+ },
554
+ )
555
+
556
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
557
+ """Convert tool result to StepResult."""
558
+ if isinstance(result, dict):
559
+ if result.get("success"):
560
+ return StepResult.ok(
561
+ "CRUD API tests passed",
562
+ tests_passed=result.get("tests_passed", 0),
563
+ )
564
+ # Test failures are warnings, not hard errors
565
+ # The code was generated - tests may fail due to database/server issues
566
+ test_result = result.get("result", {})
567
+ passed = test_result.get("tests_passed", 0)
568
+ failed = test_result.get("tests_failed", 0)
569
+ details = test_result.get("results", {})
570
+ # Build summary of which tests failed
571
+ failed_tests = [k for k, v in details.items() if not v.get("pass")]
572
+ return StepResult.warning(
573
+ f"API tests: {passed} passed, {failed} failed ({', '.join(failed_tests)})",
574
+ tests_passed=passed,
575
+ tests_failed=failed,
576
+ failed_tests=failed_tests,
577
+ )
578
+ return StepResult.make_error(
579
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
580
+ )
581
+
582
+
583
+ @dataclass
584
+ class UpdateLandingPageStep(BaseStep):
585
+ """Step to update landing page with navigation."""
586
+
587
+ name: str = "update_landing"
588
+ description: str = "Update landing page"
589
+ entity_name: str = "Item"
590
+
591
+ def get_tool_invocation(
592
+ self, context: UserContext
593
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
594
+ """Return update_landing_page invocation."""
595
+ return (
596
+ "update_landing_page",
597
+ {
598
+ "project_dir": context.project_dir,
599
+ "resource_name": self.entity_name.lower(),
600
+ },
601
+ )
602
+
603
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
604
+ """Convert tool result to StepResult."""
605
+ if isinstance(result, dict):
606
+ if result.get("success"):
607
+ return StepResult.ok("Landing page updated with navigation link")
608
+ return StepResult.make_error(
609
+ "Failed to update landing page",
610
+ result.get("error", "Unknown error"),
611
+ ErrorCategory.COMPILATION,
612
+ )
613
+ return StepResult.make_error(
614
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
615
+ )
616
+
617
+
618
+ @dataclass
619
+ class SetupTestingStep(BaseStep):
620
+ """Step to set up testing infrastructure."""
621
+
622
+ name: str = "setup_testing"
623
+ description: str = "Set up Vitest and testing libraries"
624
+
625
+ def should_skip(self, context: UserContext) -> Optional[str]:
626
+ """Skip if vitest is already configured."""
627
+ vitest_config = Path(context.project_dir) / "vitest.config.ts"
628
+ if vitest_config.exists():
629
+ return "Vitest already configured"
630
+ return None
631
+
632
+ def get_tool_invocation(
633
+ self, context: UserContext
634
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
635
+ """Return setup_nextjs_testing invocation."""
636
+ return (
637
+ "setup_nextjs_testing",
638
+ {
639
+ "project_dir": context.project_dir,
640
+ },
641
+ )
642
+
643
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
644
+ """Convert tool result to StepResult."""
645
+ if isinstance(result, dict):
646
+ if result.get("success"):
647
+ return StepResult.ok(
648
+ "Testing infrastructure set up",
649
+ files=result.get("files", []),
650
+ )
651
+ return StepResult.make_error(
652
+ "Failed to set up testing",
653
+ result.get("error", "Unknown error"),
654
+ ErrorCategory.CONFIGURATION,
655
+ )
656
+ return StepResult.make_error(
657
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
658
+ )
659
+
660
+
661
+ @dataclass
662
+ class RunTestsStep(BaseStep):
663
+ """Step to run all tests."""
664
+
665
+ name: str = "run_tests"
666
+ description: str = "Run npm test"
667
+
668
+ def get_tool_invocation(
669
+ self, context: UserContext
670
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
671
+ """Return run_cli_command invocation for npm test."""
672
+ return (
673
+ "run_cli_command",
674
+ {
675
+ "command": "npm test",
676
+ "working_dir": context.project_dir,
677
+ "timeout": 1200,
678
+ },
679
+ )
680
+
681
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
682
+ """Convert tool result to StepResult."""
683
+ if isinstance(result, dict):
684
+ if result.get("success") or result.get("return_code") == 0:
685
+ return StepResult.ok("All tests passed")
686
+ # Tests failing is a warning, not a hard error
687
+ return StepResult.warning(
688
+ "Some tests failed",
689
+ stderr=result.get("stderr", ""),
690
+ stdout=result.get("stdout", ""),
691
+ )
692
+ return StepResult.make_error(
693
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
694
+ )
695
+
696
+
697
+ @dataclass
698
+ class ValidateStylesStep(BaseStep):
699
+ """Step to validate CSS files and design system consistency.
700
+
701
+ This step validates:
702
+ 1. CSS files contain valid CSS (not TypeScript/JavaScript) - CRITICAL
703
+ 2. globals.css has Tailwind directives
704
+ 3. layout.tsx imports globals.css
705
+ 4. Custom classes used in components are defined in globals.css
706
+
707
+ Addresses Issue #1002: CSS file contains TypeScript code instead of CSS.
708
+ """
709
+
710
+ name: str = "validate_styles"
711
+ description: str = "Validate CSS files and design system"
712
+ resource_name: Optional[str] = None
713
+
714
+ def validate_preconditions(self, context: UserContext) -> Optional[str]:
715
+ """Check that styling files exist before validation."""
716
+ globals_css = Path(context.project_dir) / "src" / "app" / "globals.css"
717
+ if not globals_css.exists():
718
+ return (
719
+ "globals.css not found. The src/app/globals.css file must exist. "
720
+ "Run 'setup_app_styling' first."
721
+ )
722
+ return None
723
+
724
+ def get_tool_invocation(
725
+ self, context: UserContext
726
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
727
+ """Return validate_styles invocation."""
728
+ params = {
729
+ "project_dir": context.project_dir,
730
+ }
731
+ if self.resource_name:
732
+ params["_resource_name"] = self.resource_name
733
+ return ("validate_styles", params)
734
+
735
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
736
+ """Convert tool result to StepResult."""
737
+ if isinstance(result, dict):
738
+ if result.get("success") or result.get("is_valid"):
739
+ warnings = result.get("warnings", [])
740
+ if warnings:
741
+ return StepResult.warning(
742
+ "Styling validated with warnings",
743
+ warnings=warnings,
744
+ )
745
+ return StepResult.ok("Styling validated successfully")
746
+
747
+ errors = result.get("errors", [])
748
+ # Check if any errors are CRITICAL (blocking)
749
+ critical_errors = [e for e in errors if "CRITICAL" in e]
750
+ if critical_errors:
751
+ return StepResult.make_error(
752
+ "CRITICAL styling validation failed",
753
+ "\n".join(critical_errors),
754
+ ErrorCategory.VALIDATION,
755
+ retryable=True, # Allow LLM to retry with correct CSS
756
+ )
757
+ return StepResult.make_error(
758
+ "Styling validation failed",
759
+ "\n".join(errors) if errors else result.get("error", "Unknown error"),
760
+ ErrorCategory.VALIDATION,
761
+ )
762
+ return StepResult.make_error(
763
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
764
+ )
765
+
766
+
767
+ @dataclass
768
+ class GenerateStyleTestsStep(BaseStep):
769
+ """Step to generate CSS and styling tests for the project.
770
+
771
+ Creates test files that validate:
772
+ 1. CSS file integrity (no TypeScript in CSS)
773
+ 2. Tailwind directive presence
774
+ 3. Design system class definitions
775
+ 4. Layout imports globals.css
776
+
777
+ Tests are placed in the project's /tests directory.
778
+ """
779
+
780
+ name: str = "generate_style_tests"
781
+ description: str = "Generate CSS and styling tests"
782
+ resource_name: str = "Item"
783
+
784
+ def should_skip(self, context: UserContext) -> Optional[str]:
785
+ """Skip if style tests already exist."""
786
+ styles_test = Path(context.project_dir) / "tests" / "styles.test.ts"
787
+ if styles_test.exists():
788
+ return "Style tests already exist"
789
+ return None
790
+
791
+ def validate_preconditions(self, context: UserContext) -> Optional[str]:
792
+ """Check that testing is set up before generating style tests."""
793
+ vitest_config = Path(context.project_dir) / "vitest.config.ts"
794
+ if not vitest_config.exists():
795
+ return (
796
+ "Vitest not configured. Run 'setup_testing' first to set up "
797
+ "the testing infrastructure."
798
+ )
799
+ return None
800
+
801
+ def get_tool_invocation(
802
+ self, context: UserContext
803
+ ) -> Optional[Tuple[str, Dict[str, Any]]]:
804
+ """Return generate_style_tests invocation."""
805
+ return (
806
+ "generate_style_tests",
807
+ {
808
+ "project_dir": context.project_dir,
809
+ "resource_name": self.resource_name,
810
+ },
811
+ )
812
+
813
+ def handle_result(self, result: Any, context: UserContext) -> StepResult:
814
+ """Convert tool result to StepResult."""
815
+ if isinstance(result, dict):
816
+ if result.get("success"):
817
+ return StepResult.ok(
818
+ "Style tests generated successfully",
819
+ files=result.get("files", []),
820
+ )
821
+ return StepResult.make_error(
822
+ "Failed to generate style tests",
823
+ result.get("error", "Unknown error"),
824
+ ErrorCategory.COMPILATION,
825
+ )
826
+ return StepResult.make_error(
827
+ "Unexpected result format", str(result), ErrorCategory.UNKNOWN
828
+ )