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,1058 @@
1
+ # Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ """
4
+ Chat Agent Application - Interactive chat with RAG and file search.
5
+ """
6
+
7
+ import argparse
8
+ import os
9
+ import sys
10
+ from pathlib import Path
11
+
12
+ from gaia.agents.chat.agent import ChatAgent, ChatAgentConfig
13
+ from gaia.logger import get_logger
14
+
15
+ logger = get_logger(__name__)
16
+
17
+
18
+ def parse_args():
19
+ """Parse command line arguments."""
20
+ parser = argparse.ArgumentParser(
21
+ description="Chat Agent with RAG and file search capabilities"
22
+ )
23
+
24
+ # LLM backend options
25
+ parser.add_argument(
26
+ "--use-claude", action="store_true", help="Use Claude API instead of local LLM"
27
+ )
28
+ parser.add_argument(
29
+ "--use-chatgpt",
30
+ action="store_true",
31
+ help="Use ChatGPT/OpenAI API instead of local LLM",
32
+ )
33
+ parser.add_argument(
34
+ "--claude-model",
35
+ type=str,
36
+ default="claude-sonnet-4-20250514",
37
+ help="Claude model to use (default: claude-sonnet-4-20250514)",
38
+ )
39
+ parser.add_argument(
40
+ "--model-id",
41
+ type=str,
42
+ default=None,
43
+ help="Model ID for local LLM (default: Qwen3-Coder-30B-A3B-Instruct-GGUF)",
44
+ )
45
+
46
+ # Agent configuration
47
+ parser.add_argument(
48
+ "--max-steps",
49
+ type=int,
50
+ default=10,
51
+ help="Maximum conversation steps (default: 10)",
52
+ )
53
+ parser.add_argument(
54
+ "--streaming", action="store_true", help="Enable streaming responses"
55
+ )
56
+ parser.add_argument(
57
+ "--show-stats", action="store_true", help="Show performance statistics"
58
+ )
59
+ parser.add_argument(
60
+ "--show-prompts", action="store_true", help="Display prompts sent to LLM"
61
+ )
62
+ parser.add_argument("--debug", action="store_true", help="Enable debug output")
63
+ parser.add_argument(
64
+ "--silent",
65
+ action="store_true",
66
+ help="Suppress agent reasoning output (silent mode)",
67
+ )
68
+
69
+ # RAG configuration
70
+ parser.add_argument(
71
+ "--index",
72
+ "-i",
73
+ type=str,
74
+ metavar="PATH",
75
+ help="Index a document before running (combine with --query for one-shot usage)",
76
+ )
77
+ parser.add_argument(
78
+ "--documents", "-d", nargs="+", help="Documents to index for RAG"
79
+ )
80
+ parser.add_argument(
81
+ "--watch", "-w", nargs="+", help="Directories to monitor for new documents"
82
+ )
83
+ parser.add_argument(
84
+ "--chunk-size", type=int, default=500, help="Document chunk size (default: 500)"
85
+ )
86
+ parser.add_argument(
87
+ "--chunk-overlap",
88
+ type=int,
89
+ default=100,
90
+ help="Chunk overlap in characters (default: 100)",
91
+ )
92
+ parser.add_argument(
93
+ "--max-chunks",
94
+ type=int,
95
+ default=5,
96
+ help="Maximum chunks to retrieve (default: 5)",
97
+ )
98
+ parser.add_argument(
99
+ "--use-llm-chunking",
100
+ action="store_true",
101
+ help="Use LLM-based semantic chunking for better context preservation (slower but more accurate)",
102
+ )
103
+ parser.add_argument(
104
+ "--allowed-paths",
105
+ nargs="+",
106
+ help="Allowed directory paths for file operations (default: current directory)",
107
+ )
108
+
109
+ # Input/output
110
+ parser.add_argument(
111
+ "--query", "-q", type=str, help="Single query to execute (non-interactive mode)"
112
+ )
113
+ parser.add_argument("--output-dir", type=str, help="Directory for output files")
114
+ parser.add_argument(
115
+ "--list-tools", action="store_true", help="List available tools and exit"
116
+ )
117
+
118
+ return parser.parse_args()
119
+
120
+
121
+ def interactive_mode(agent: ChatAgent):
122
+ """Run agent in interactive chat mode."""
123
+ print("=" * 60)
124
+ print("Chat Agent with RAG - Interactive Mode")
125
+ print("=" * 60)
126
+
127
+ # Display model information
128
+ model_name = getattr(agent, "model_display_name", "Unknown")
129
+ print(f"\nšŸ¤– Model: {model_name}")
130
+
131
+ print("\nCapabilities:")
132
+ print(" • Document Q&A using RAG")
133
+ print(" - Documents: PDF, TXT, MD, CSV, JSON")
134
+ print(" - Backend: Python, Java, C/C++, Go, Rust, Ruby, PHP, Swift, etc.")
135
+ print(" - Web: JS/TS, HTML, CSS/SCSS/SASS, Vue, Svelte, React (JSX/TSX)")
136
+ print(" - Config: YAML, XML, TOML, INI, ENV")
137
+ print(" • Document summarization with multiple styles")
138
+ print(" • Code retrieval and search (no code generation)")
139
+ print(" • File search and operations")
140
+ print(" • Shell command execution")
141
+ print(" • Auto-indexing when files change")
142
+ print(" • Session persistence with auto-save")
143
+ print("\nSession Commands:")
144
+ print(" /resume [id] - Resume a previous session (or list if no id)")
145
+ print(" /save - Save current session")
146
+ print(" /sessions - List all available sessions")
147
+ print(" /reset - Clear conversation and start fresh")
148
+ print("\nDocument Commands:")
149
+ print(" /index <path> - Index a document or directory")
150
+ print(" /watch <dir> - Watch a directory for changes")
151
+ print(" /list - List indexed documents")
152
+ print(" /status - Show system status")
153
+ print("\nDebug Commands:")
154
+ print(" /chunks <file> - Show all chunks for a document")
155
+ print(" /chunk <n> - Show specific chunk content")
156
+ print(" /test <query> - Test query retrieval with scores")
157
+ print(
158
+ " /dump <file|#> - Export document + chunks to markdown (use number from /list)"
159
+ )
160
+ print(" /clear-cache - Clear RAG cache (force re-indexing)")
161
+ print(" /search-debug - Toggle RAG debug mode")
162
+ print("\nOther Commands:")
163
+ print(" /help or /? - Show this help")
164
+ print(" /quit - Exit")
165
+ print("\nOr just type your question to chat with indexed documents.")
166
+ print("=" * 60)
167
+
168
+ while True:
169
+ try:
170
+ user_input = input("\nYou: ").strip()
171
+
172
+ if not user_input:
173
+ continue
174
+
175
+ # Handle commands
176
+ if user_input.startswith("/"):
177
+ parts = user_input.split(maxsplit=1)
178
+ command = parts[0].lower()
179
+ arg = parts[1] if len(parts) > 1 else None
180
+
181
+ if command == "/quit":
182
+ # Auto-save before quitting
183
+ if agent.current_session:
184
+ print("\nšŸ’¾ Saving current session...")
185
+ agent.save_current_session()
186
+ print("Goodbye!")
187
+ break
188
+
189
+ elif command in ["/help", "/?"]:
190
+ print("\n" + "=" * 60)
191
+ print("Chat Agent - Available Commands & Capabilities")
192
+ print("=" * 60)
193
+ print("\nšŸŽÆ CAPABILITIES:")
194
+ print(" • Document Q&A using RAG")
195
+ print(" - Documents: PDF, TXT, MD, CSV, JSON")
196
+ print(
197
+ " - Backend: Python, Java, C/C++, Go, Rust, Ruby, PHP, Swift, Kotlin, Scala"
198
+ )
199
+ print(
200
+ " - Web: JS/TS, HTML, CSS/SCSS/SASS/LESS, Vue, Svelte, Astro, React"
201
+ )
202
+ print(" - Config: YAML, XML, TOML, INI, ENV, Properties")
203
+ print(" - Build: Gradle, CMake, Makefiles")
204
+ print(" - Database: SQL")
205
+ print(
206
+ " • Document summarization (brief, detailed, bullets, executive, etc.)"
207
+ )
208
+ print(" • Code retrieval and search (no code generation)")
209
+ print(" • File operations and search")
210
+ print(" • Shell command execution (ls, grep, find, etc.)")
211
+ print(" • Auto-indexing when files change")
212
+ print(" • Session persistence with auto-save")
213
+ print("\nšŸ“‹ SESSION MANAGEMENT:")
214
+ print(" /resume [id] - Resume session (or list if no id)")
215
+ print(" /save - Save current session")
216
+ print(" /sessions - List all sessions")
217
+ print(" /reset - Clear and start fresh")
218
+ print("\nšŸ“š DOCUMENT MANAGEMENT:")
219
+ print(" /index <path> - Index file or directory")
220
+ print(" /watch <dir> - Watch directory for changes")
221
+ print(" /list - List indexed documents")
222
+ print(" /status - Show system status")
223
+ print("\nšŸ” DEBUG & OBSERVABILITY:")
224
+ print(" /chunks <file> - Show all chunks for a document")
225
+ print(" /chunk <n> - Show specific chunk content")
226
+ print(" /test <query> - Test query retrieval with scores")
227
+ print(
228
+ " /dump <file|#> - Export document + chunks to markdown (use number from /list)"
229
+ )
230
+ print(" /clear-cache - Clear RAG cache (force re-indexing)")
231
+ print(" /search-debug - Toggle RAG debug mode")
232
+ print("\nšŸ’¬ EXAMPLE QUERIES:")
233
+ print(" Documents:")
234
+ print(" 'What does the document say about X?'")
235
+ print(" 'Summarize report.pdf in bullet points'")
236
+ print(" Backend Code:")
237
+ print(" 'Where is the UserAuth class defined?'")
238
+ print(" 'Find all functions that use database connections'")
239
+ print(" 'What does the authenticate() function do?'")
240
+ print(" Web Development:")
241
+ print(" 'Find all CSS classes with hover effects'")
242
+ print(" 'Where are the API endpoints defined?'")
243
+ print(" 'Show me all Vue components that use props'")
244
+ print(" General:")
245
+ print(" 'List all Python files in src/'")
246
+ print(" 'Search for TODO comments in my code'")
247
+ print(" 'Find all files that import React'")
248
+ print("\nāš™ļø OTHER COMMANDS:")
249
+ print(" /help or /? - Show this help")
250
+ print(" /quit - Exit (auto-saves)")
251
+ print("=" * 60)
252
+
253
+ elif command == "/resume":
254
+ if not arg:
255
+ # List available sessions
256
+ sessions = agent.session_manager.list_sessions()
257
+ if not sessions:
258
+ print("\nšŸ“‚ No saved sessions found.")
259
+ else:
260
+ print("\n" + "=" * 60)
261
+ print("Available Sessions")
262
+ print("=" * 60)
263
+ for sess in sessions:
264
+ print(f"\n ID: {sess['session_id']}")
265
+ print(f" Created: {sess['created_at']}")
266
+ print(f" Updated: {sess['updated_at']}")
267
+ print(f" Documents: {sess['num_documents']}")
268
+ print(f" Messages: {sess['num_messages']}")
269
+ print("\n" + "=" * 60)
270
+ print("\nUse: /resume <session_id> to load a session")
271
+ else:
272
+ # Resume specific session
273
+ print(f"\nšŸ“‚ Resuming session: {arg}")
274
+ if agent.load_session(arg):
275
+ session = agent.current_session
276
+ print("āœ… Loaded session with:")
277
+ print(f" - {len(session.indexed_documents)} documents")
278
+ print(
279
+ f" - {len(session.watched_directories)} watched directories"
280
+ )
281
+ print(f" - {len(session.chat_history)} chat messages")
282
+ else:
283
+ print(f"āŒ Failed to load session: {arg}")
284
+
285
+ elif command == "/save":
286
+ print("\nšŸ’¾ Saving current session...")
287
+ if agent.save_current_session():
288
+ session_id = (
289
+ agent.current_session.session_id
290
+ if agent.current_session
291
+ else "unknown"
292
+ )
293
+ print(f"āœ… Session saved: {session_id}")
294
+ else:
295
+ print("āŒ Failed to save session")
296
+
297
+ elif command == "/sessions":
298
+ sessions = agent.session_manager.list_sessions()
299
+ if not sessions:
300
+ print("\nšŸ“‚ No saved sessions found.")
301
+ else:
302
+ print("\n" + "=" * 60)
303
+ print(f"Found {len(sessions)} Session(s)")
304
+ print("=" * 60)
305
+ for i, sess in enumerate(sessions, 1):
306
+ print(f"\n{i}. {sess['session_id']}")
307
+ print(f" Created: {sess['created_at']}")
308
+ print(
309
+ f" Documents: {sess['num_documents']}, Messages: {sess['num_messages']}"
310
+ )
311
+ print("\n" + "=" * 60)
312
+
313
+ elif command == "/reset":
314
+ print("\nšŸ”„ Resetting conversation...")
315
+ # Save current session first
316
+ if agent.current_session:
317
+ agent.save_current_session()
318
+ # Create new session
319
+ agent.current_session = agent.session_manager.create_session()
320
+ # Clear chat history (if agent tracks it)
321
+ if hasattr(agent, "chat_history"):
322
+ agent.chat_history = []
323
+ print("āœ… Conversation reset. Previous session saved.")
324
+ print(f" New session: {agent.current_session.session_id}")
325
+
326
+ elif command == "/index":
327
+ if not arg:
328
+ print("Usage: /index <file_or_directory_path>")
329
+ print("Example: /index /path/to/document.pdf")
330
+ print(" /index /path/to/documents/")
331
+ continue
332
+
333
+ # Check if it's a directory or file
334
+ path = Path(arg)
335
+
336
+ if path.is_dir():
337
+ print(f"\nšŸ“ Indexing all documents in directory: {arg}")
338
+ # Find all supported document types
339
+ doc_patterns = ["*.pdf", "*.txt", "*.md", "*.csv", "*.json"]
340
+ doc_files = []
341
+ for pattern in doc_patterns:
342
+ doc_files.extend(path.glob(pattern))
343
+
344
+ if not doc_files:
345
+ print("āŒ No supported documents found in directory")
346
+ print(" Supported types: PDF, TXT, MD, CSV, JSON")
347
+ continue
348
+
349
+ print(f"Found {len(doc_files)} document(s)\n")
350
+ success_count = 0
351
+ for doc_file in doc_files:
352
+ print(f" šŸ“„ Indexing: {doc_file.name}...")
353
+ # Directly call the RAG index method
354
+ try:
355
+ result = agent.rag.index_document(
356
+ str(doc_file.absolute())
357
+ )
358
+ if result.get("success"):
359
+ print(
360
+ f" āœ… Success: {result.get('num_chunks', 0)} chunks created"
361
+ )
362
+ success_count += 1
363
+ else:
364
+ error = result.get("error", "Unknown error")
365
+ print(f" āŒ Failed: {error}")
366
+ except Exception as e:
367
+ print(f" āŒ Error: {e}")
368
+
369
+ print(
370
+ f"\nšŸ“Š Summary: {success_count}/{len(doc_files)} documents indexed successfully"
371
+ )
372
+
373
+ else:
374
+ # Single file
375
+ if not os.path.exists(arg):
376
+ print(f"\nāŒ File not found: {arg}")
377
+ print(" Please check the file path and try again")
378
+ continue
379
+
380
+ print(f"\nšŸ“„ Indexing: {path.name}")
381
+ print("=" * 60)
382
+
383
+ try:
384
+ # Directly call the RAG index method
385
+ result = agent.rag.index_document(str(path.absolute()))
386
+
387
+ if result.get("success"):
388
+ # Display success with detailed stats
389
+ print("āœ… INDEXING SUCCESSFUL")
390
+ print("=" * 60)
391
+ print(f"šŸ“ File: {result.get('file_name', path.name)}")
392
+ print(f"šŸ“„ Type: {result.get('file_type', 'Unknown')}")
393
+ print(
394
+ f"šŸ’¾ Size: {result.get('file_size_mb', 0):.2f} MB"
395
+ )
396
+
397
+ # Show num_pages for PDFs
398
+ if result.get("num_pages"):
399
+ print(f"šŸ“– Pages: {result['num_pages']}")
400
+
401
+ print(
402
+ f"šŸ“¦ Chunks Created: {result.get('num_chunks', 0)}"
403
+ )
404
+
405
+ # Show cache/reindex status
406
+ if result.get("from_cache"):
407
+ print("⚔ Loaded from cache (fast)")
408
+ elif result.get("already_indexed"):
409
+ print("ā„¹ļø Already indexed (skipped)")
410
+ elif result.get("reindexed"):
411
+ print("šŸ”„ Reindexed (updated)")
412
+
413
+ print("\nšŸ“Š GLOBAL STATISTICS")
414
+ print("=" * 60)
415
+ print(
416
+ f"Total Documents Indexed: {result.get('total_indexed_files', 0)}"
417
+ )
418
+ print(f"Total Chunks: {result.get('total_chunks', 0)}")
419
+ print("=" * 60)
420
+ else:
421
+ # Display error
422
+ print("āŒ INDEXING FAILED")
423
+ print("=" * 60)
424
+ error = result.get("error", "Unknown error")
425
+ print(f"Error: {error}")
426
+ if result.get("file_name"):
427
+ print(f"File: {result['file_name']}")
428
+ print("=" * 60)
429
+
430
+ except Exception as e:
431
+ print("āŒ INDEXING FAILED")
432
+ print("=" * 60)
433
+ print(f"Error: {e}")
434
+ print("=" * 60)
435
+
436
+ elif command == "/watch":
437
+ if not arg:
438
+ print("Usage: /watch <directory_path>")
439
+ print("Example: /watch /path/to/documents")
440
+ continue
441
+ result = agent.process_query(f"Watch the directory: {arg}")
442
+ print(f"\n{result['result']}")
443
+
444
+ elif command == "/list":
445
+ # Directly access indexed files from RAG system
446
+ print("\n" + "=" * 60)
447
+ print("šŸ“š INDEXED DOCUMENTS")
448
+ print("=" * 60)
449
+
450
+ if not agent.rag.indexed_files:
451
+ print("No documents indexed yet.")
452
+ print("\nUse /index <path> to index a document")
453
+ else:
454
+ print(f"Total: {len(agent.rag.indexed_files)} document(s)\n")
455
+ for i, file_path in enumerate(
456
+ sorted(agent.rag.indexed_files), 1
457
+ ):
458
+ file_name = Path(file_path).name
459
+ file_type = Path(file_path).suffix
460
+
461
+ # Get chunk count for this file if available
462
+ num_chunks = 0
463
+ if file_path in agent.rag.file_to_chunk_indices:
464
+ num_chunks = len(
465
+ agent.rag.file_to_chunk_indices[file_path]
466
+ )
467
+
468
+ print(f"{i}. {file_name}")
469
+ print(f" Type: {file_type}")
470
+ print(f" Chunks: {num_chunks}")
471
+ print(f" Path: {file_path}")
472
+ print()
473
+
474
+ print("=" * 60)
475
+
476
+ elif command == "/status":
477
+ # Directly access RAG status
478
+ print("\n" + "=" * 60)
479
+ print("šŸ“Š RAG SYSTEM STATUS")
480
+ print("=" * 60)
481
+
482
+ status = agent.rag.get_status()
483
+
484
+ print("\nšŸ“š Documents:")
485
+ print(f" Indexed Files: {status['indexed_files']}")
486
+ print(f" Total Chunks: {status['total_chunks']}")
487
+
488
+ print("\nāš™ļø Configuration:")
489
+ print(f" Chunk Size: {status['config']['chunk_size']} tokens")
490
+ print(
491
+ f" Chunk Overlap: {status['config']['chunk_overlap']} tokens"
492
+ )
493
+ print(f" Max Chunks per Query: {status['config']['max_chunks']}")
494
+
495
+ print("\nšŸ’¾ Storage:")
496
+ print(f" Cache Directory: {status['cache_dir']}")
497
+ print(f" Embedding Model: {status['embedding_model']}")
498
+
499
+ # Show watched directories
500
+ if agent.watch_directories:
501
+ print("\nšŸ‘€ Watched Directories:")
502
+ for i, dir_path in enumerate(agent.watch_directories, 1):
503
+ print(f" {i}. {dir_path}")
504
+
505
+ # Show session info
506
+ if agent.current_session:
507
+ print("\nšŸ“‹ Current Session:")
508
+ print(f" ID: {agent.current_session.session_id}")
509
+ print(f" Created: {agent.current_session.created_at}")
510
+ print(f" Updated: {agent.current_session.updated_at}")
511
+ print(
512
+ f" Documents: {len(agent.current_session.indexed_documents)}"
513
+ )
514
+ print(f" Messages: {len(agent.current_session.chat_history)}")
515
+
516
+ print("\n" + "=" * 60)
517
+
518
+ elif command == "/chunks":
519
+ if not arg:
520
+ print("Usage: /chunks <filename>")
521
+ print("Example: /chunks document.pdf")
522
+ continue
523
+
524
+ # Find file in indexed files
525
+ matching_files = [
526
+ f
527
+ for f in agent.rag.indexed_files
528
+ if Path(f).name == arg or f == arg
529
+ ]
530
+
531
+ if not matching_files:
532
+ print(f"\nāŒ File not indexed: {arg}")
533
+ print("\nIndexed files:")
534
+ for f in agent.rag.indexed_files:
535
+ print(f" - {Path(f).name}")
536
+ continue
537
+
538
+ file_path = matching_files[0]
539
+
540
+ # Get chunks for this file
541
+ if file_path not in agent.rag.file_to_chunk_indices:
542
+ print(f"\nāŒ No chunks found for: {arg}")
543
+ continue
544
+
545
+ chunk_indices = agent.rag.file_to_chunk_indices[file_path]
546
+
547
+ print("\n" + "=" * 60)
548
+ print(f"DOCUMENT CHUNKS: {Path(file_path).name}")
549
+ print("=" * 60)
550
+ print(f"Total Chunks: {len(chunk_indices)}")
551
+ print(f"Chunk Size: {agent.rag.config.chunk_size} tokens")
552
+ print(f"Overlap: {agent.rag.config.chunk_overlap} tokens\n")
553
+
554
+ for i, chunk_idx in enumerate(chunk_indices, 1):
555
+ if chunk_idx < len(agent.rag.chunks):
556
+ chunk = agent.rag.chunks[chunk_idx]
557
+ token_count = len(chunk) // 4 # Rough estimate
558
+
559
+ print(f"CHUNK {i} ({token_count} tokens):")
560
+ print("ā”Œ" + "─" * 58 + "┐")
561
+
562
+ # Show first 200 chars of chunk
563
+ preview = chunk[:200].replace("\n", " ")
564
+ if len(chunk) > 200:
565
+ preview += "..."
566
+
567
+ # Word wrap the preview
568
+ import textwrap
569
+
570
+ wrapped = textwrap.wrap(preview, width=56)
571
+ for line in wrapped:
572
+ print(f"│ {line:<56} │")
573
+
574
+ print("ā””" + "─" * 58 + "ā”˜")
575
+ print()
576
+
577
+ print("=" * 60)
578
+ print("\nUse '/chunk <n>' to see full content of a specific chunk")
579
+
580
+ elif command == "/chunk":
581
+ if not arg or not arg.isdigit():
582
+ print("Usage: /chunk <number>")
583
+ print("Example: /chunk 5")
584
+ continue
585
+
586
+ chunk_num = int(arg) - 1 # Convert to 0-indexed
587
+
588
+ if chunk_num < 0 or chunk_num >= len(agent.rag.chunks):
589
+ print(
590
+ f"\nāŒ Invalid chunk number. Valid range: 1-{len(agent.rag.chunks)}"
591
+ )
592
+ continue
593
+
594
+ chunk = agent.rag.chunks[chunk_num]
595
+
596
+ # Find which file this chunk belongs to
597
+ source_file = agent.rag.chunk_to_file.get(chunk_num, "Unknown")
598
+
599
+ print("\n" + "=" * 60)
600
+ print(f"CHUNK {arg}")
601
+ print("=" * 60)
602
+ print(
603
+ f"Source: {Path(source_file).name if source_file != 'Unknown' else 'Unknown'}"
604
+ )
605
+ print(f"Token count: {len(chunk) // 4} (estimated)")
606
+ print(f"Character count: {len(chunk):,}")
607
+ print("\nCONTENT:")
608
+ print("ā”Œ" + "─" * 58 + "┐")
609
+
610
+ # Word wrap content
611
+ import textwrap
612
+
613
+ wrapped = textwrap.wrap(chunk, width=56)
614
+ for line in wrapped:
615
+ print(f"│ {line:<56} │")
616
+
617
+ print("ā””" + "─" * 58 + "ā”˜")
618
+ print("=" * 60)
619
+
620
+ elif command == "/test":
621
+ if not arg:
622
+ print("Usage: /test <query>")
623
+ print("Example: /test what is the vision?")
624
+ continue
625
+
626
+ if not agent.rag.indexed_files:
627
+ print("\nāŒ No documents indexed. Use /index <path> first.")
628
+ continue
629
+
630
+ print("\n" + "=" * 60)
631
+ print(f'QUERY TEST: "{arg}"')
632
+ print("=" * 60)
633
+
634
+ # Test retrieval
635
+ try:
636
+ # pylint: disable=protected-access
637
+ chunks, scores = agent.rag._retrieve_chunks(arg)
638
+
639
+ print(f"\nTop {len(chunks)} matching chunks:\n")
640
+
641
+ for i, (chunk, score) in enumerate(zip(chunks, scores), 1):
642
+ # Find chunk index
643
+ chunk_idx = (
644
+ agent.rag.chunks.index(chunk)
645
+ if chunk in agent.rag.chunks
646
+ else -1
647
+ )
648
+ source_file = agent.rag.chunk_to_file.get(
649
+ chunk_idx, "Unknown"
650
+ )
651
+
652
+ # Color code by score
653
+ if score > 0.75:
654
+ emoji = "⭐"
655
+ elif score > 0.60:
656
+ emoji = "āœ…"
657
+ else:
658
+ emoji = "āš ļø"
659
+
660
+ print(
661
+ f"{i}. {emoji} CHUNK {chunk_idx + 1} (score: {score:.3f})"
662
+ )
663
+ print(
664
+ f" Source: {Path(source_file).name if source_file != 'Unknown' else 'Unknown'}"
665
+ )
666
+
667
+ # Preview
668
+ preview = chunk[:150].replace("\n", " ")
669
+ if len(chunk) > 150:
670
+ preview += "..."
671
+ print(f" Preview: {preview}")
672
+ print()
673
+
674
+ print("=" * 60)
675
+ print("\nScore Legend:")
676
+ print(" ⭐ Excellent (>0.75) - Highly relevant")
677
+ print(" āœ… Good (0.60-0.75) - Probably relevant")
678
+ print(" āš ļø Poor (<0.60) - May not be relevant")
679
+
680
+ except Exception as e:
681
+ print(f"\nāŒ Query test failed: {e}")
682
+
683
+ elif command == "/dump":
684
+ if not arg:
685
+ print("Usage: /dump <filename_or_number>")
686
+ print("Example: /dump document.pdf")
687
+ print("Example: /dump 1")
688
+ continue
689
+
690
+ # Find file in indexed files
691
+ from datetime import datetime
692
+
693
+ file_path = None
694
+
695
+ # Check if arg is a number (index)
696
+ if arg.isdigit():
697
+ index = int(arg) - 1 # Convert to 0-based index
698
+ indexed_list = list(agent.rag.indexed_files)
699
+ if 0 <= index < len(indexed_list):
700
+ file_path = indexed_list[index]
701
+ else:
702
+ print(f"\nāŒ Invalid index: {arg}")
703
+ print(f"Valid range: 1-{len(indexed_list)}")
704
+ continue
705
+ else:
706
+ # Try to match by filename
707
+ matching_files = [
708
+ f
709
+ for f in agent.rag.indexed_files
710
+ if Path(f).name == arg or f == arg
711
+ ]
712
+
713
+ if not matching_files:
714
+ print(f"\nāŒ File not indexed: {arg}")
715
+ print("\nIndexed files:")
716
+ for i, f in enumerate(agent.rag.indexed_files, 1):
717
+ print(f" {i}. {Path(f).name}")
718
+ continue
719
+
720
+ file_path = matching_files[0]
721
+
722
+ # Get chunks for this file
723
+ if file_path not in agent.rag.file_to_chunk_indices:
724
+ print(f"\nāŒ No chunks found for: {arg}")
725
+ continue
726
+
727
+ chunk_indices = agent.rag.file_to_chunk_indices[file_path]
728
+
729
+ print(f"\nšŸ“ Generating markdown dump for: {Path(file_path).name}")
730
+
731
+ # Try to get cached metadata first (faster!)
732
+ cached_metadata = agent.rag.file_metadata.get(file_path, {})
733
+ extracted_text = cached_metadata.get("full_text")
734
+ num_pages = cached_metadata.get("num_pages")
735
+ vlm_pages = cached_metadata.get("vlm_pages", 0)
736
+ total_images = cached_metadata.get("total_images", 0)
737
+
738
+ # Fall back to re-extraction only if cache is missing
739
+ if not extracted_text:
740
+ print(" āš ļø No cached text found, re-extracting from file...")
741
+ try:
742
+ # pylint: disable=protected-access
743
+ extracted_text, metadata = (
744
+ agent.rag._extract_text_from_file(file_path)
745
+ )
746
+ num_pages = metadata.get("num_pages")
747
+ vlm_pages = metadata.get("vlm_pages", 0)
748
+ total_images = metadata.get("total_images", 0)
749
+ except Exception as e:
750
+ print(f"āŒ Failed to extract text: {e}")
751
+ continue
752
+ else:
753
+ print(
754
+ " āœ… Using cached text and metadata (no re-extraction needed)"
755
+ )
756
+
757
+ # Create markdown content
758
+ markdown_lines = []
759
+ markdown_lines.append(f"# RAG Debug Dump: {Path(file_path).name}")
760
+ markdown_lines.append(
761
+ f"\nGenerated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
762
+ )
763
+
764
+ # Metadata
765
+ markdown_lines.append("## Document Metadata\n")
766
+ markdown_lines.append(f"- **File:** {Path(file_path).name}")
767
+ markdown_lines.append(f"- **Path:** {file_path}")
768
+ file_size = os.path.getsize(file_path) / (1024 * 1024)
769
+ markdown_lines.append(f"- **Size:** {file_size:.2f} MB")
770
+ if num_pages:
771
+ markdown_lines.append(f"- **Pages:** {num_pages}")
772
+ if vlm_pages and vlm_pages > 0:
773
+ markdown_lines.append(
774
+ f"- **VLM Enhanced Pages:** {vlm_pages} (images processed)"
775
+ )
776
+ if total_images and total_images > 0:
777
+ markdown_lines.append(
778
+ f"- **Total Images Extracted:** {total_images}"
779
+ )
780
+ markdown_lines.append(f"- **Characters:** {len(extracted_text):,}")
781
+ markdown_lines.append(f"- **Chunks:** {len(chunk_indices)}")
782
+ markdown_lines.append(
783
+ f"- **Chunk Size:** {agent.rag.config.chunk_size} tokens"
784
+ )
785
+ markdown_lines.append(
786
+ f"- **Chunk Overlap:** {agent.rag.config.chunk_overlap} tokens"
787
+ )
788
+ markdown_lines.append("")
789
+
790
+ # Full document text
791
+ markdown_lines.append("---\n")
792
+ markdown_lines.append("## Full Document Text (As Extracted)")
793
+ markdown_lines.append("\n```")
794
+ markdown_lines.append(extracted_text)
795
+ markdown_lines.append("```\n")
796
+
797
+ # Chunked version with boundaries
798
+ markdown_lines.append("---\n")
799
+ markdown_lines.append("## Document with Chunk Boundaries\n")
800
+
801
+ for i, chunk_idx in enumerate(chunk_indices, 1):
802
+ if chunk_idx < len(agent.rag.chunks):
803
+ chunk = agent.rag.chunks[chunk_idx]
804
+
805
+ # Extract page number from chunk (with lookback)
806
+ from gaia.agents.chat.tools.rag_tools import (
807
+ extract_page_from_chunk,
808
+ )
809
+
810
+ page_num = extract_page_from_chunk(
811
+ chunk, chunk_idx, agent.rag.chunks
812
+ )
813
+ page_info = (
814
+ f"Page {page_num}" if page_num else "Page Unknown"
815
+ )
816
+
817
+ markdown_lines.append(
818
+ f"### šŸ”· CHUNK {i} ({page_info}, Index: {chunk_idx})\n"
819
+ )
820
+ markdown_lines.append(
821
+ f"- **Token Count:** {len(chunk) // 4} (estimated)"
822
+ )
823
+ markdown_lines.append(
824
+ f"- **Character Count:** {len(chunk):,}"
825
+ )
826
+ markdown_lines.append("")
827
+ markdown_lines.append("```")
828
+ markdown_lines.append(chunk)
829
+ markdown_lines.append("```\n")
830
+
831
+ markdown_lines.append("---\n")
832
+ markdown_lines.append("## Chunk Summary\n")
833
+ markdown_lines.append("| Chunk | Tokens | Characters | Preview |")
834
+ markdown_lines.append("|-------|--------|------------|---------|")
835
+
836
+ for i, chunk_idx in enumerate(chunk_indices, 1):
837
+ if chunk_idx < len(agent.rag.chunks):
838
+ chunk = agent.rag.chunks[chunk_idx]
839
+ tokens = len(chunk) // 4
840
+ chars = len(chunk)
841
+ preview = chunk[:50].replace("\n", " ").replace("|", "\\|")
842
+ markdown_lines.append(
843
+ f"| {i} | {tokens} | {chars:,} | {preview}... |"
844
+ )
845
+
846
+ # Write to file
847
+ output_filename = f"{Path(file_path).stem}_rag_dump.md"
848
+ output_path = Path.cwd() / output_filename
849
+
850
+ with open(output_path, "w", encoding="utf-8") as f:
851
+ f.write("\n".join(markdown_lines))
852
+
853
+ # Calculate output size
854
+ output_content = "\n".join(markdown_lines)
855
+ output_size = len(output_content)
856
+
857
+ print(f"āœ… Markdown dump created: {output_filename}")
858
+ print(f" Path: {output_path}")
859
+ print("\nšŸ“Š Statistics:")
860
+ print(f" Document: {len(extracted_text):,} characters")
861
+ print(f" Chunks: {len(chunk_indices)}")
862
+ print(f" Output: {output_size:,} characters")
863
+ print("\nYou can now:")
864
+ print(" 1. Review chunking quality")
865
+ print(" 2. Verify PDF extraction accuracy")
866
+ print(" 3. Search for specific content (Ctrl+F)")
867
+ print(" 4. Share with others for troubleshooting")
868
+
869
+ elif command == "/clear-cache":
870
+ print("\nāš ļø This will clear the RAG cache for all documents.")
871
+ print(
872
+ " Cached chunks will be deleted and documents will need to be re-indexed."
873
+ )
874
+ response = input("\nAre you sure? (yes/no): ").strip().lower()
875
+
876
+ if response == "yes":
877
+ import shutil
878
+
879
+ cache_dir = agent.rag.config.cache_dir
880
+ if os.path.exists(cache_dir):
881
+ shutil.rmtree(cache_dir)
882
+ os.makedirs(cache_dir, exist_ok=True)
883
+ print(f"\nāœ… Cache cleared: {cache_dir}")
884
+
885
+ # Clear in-memory state as well
886
+ agent.rag.indexed_files.clear()
887
+ agent.rag.chunks.clear()
888
+ agent.rag.chunk_to_file.clear()
889
+ agent.rag.file_to_chunk_indices.clear()
890
+ agent.rag.file_metadata.clear()
891
+ agent.rag.index = None
892
+ agent.indexed_files.clear()
893
+
894
+ print(
895
+ "\nAll documents will be re-indexed from scratch on next access."
896
+ )
897
+ else:
898
+ print(f"\nā„¹ļø Cache directory doesn't exist: {cache_dir}")
899
+ else:
900
+ print("\nāŒ Cache clear cancelled")
901
+
902
+ elif command == "/search-debug":
903
+ # Toggle RAG debug mode
904
+ current_debug = getattr(agent.rag.config, "show_stats", False)
905
+ agent.rag.config.show_stats = not current_debug
906
+
907
+ if agent.rag.config.show_stats:
908
+ print("\nšŸ”§ RAG Debug Mode: ENABLED")
909
+ print("\nAll queries will now show:")
910
+ print(" - Embedding generation details")
911
+ print(" - Search execution info")
912
+ print(" - Similarity scores")
913
+ print(" - Chunk selection reasoning")
914
+ else:
915
+ print("\nšŸ”§ RAG Debug Mode: DISABLED")
916
+ print("\nQueries will run in normal mode")
917
+
918
+ else:
919
+ print(f"Unknown command: {command}. Type /help for help.")
920
+
921
+ continue
922
+
923
+ # Process regular query
924
+ result = agent.process_query(user_input)
925
+ # The answer is already streamed by the agent, no need to print it again
926
+
927
+ # Update conversation history for session persistence
928
+ if hasattr(agent, "conversation_history"):
929
+ agent.conversation_history.append(
930
+ {"role": "user", "content": user_input}
931
+ )
932
+ if result.get("result"):
933
+ agent.conversation_history.append(
934
+ {"role": "assistant", "content": result["result"]}
935
+ )
936
+
937
+ if result.get("error_count", 0) > 0:
938
+ print(f"\nāš ļø {result['error_count']} error(s) occurred")
939
+
940
+ except KeyboardInterrupt:
941
+ print("\n\nGoodbye!")
942
+ break
943
+ except EOFError:
944
+ print("\n\nGoodbye!")
945
+ break
946
+ except Exception as e:
947
+ logger.error(f"Error: {e}")
948
+ print(f"\nāŒ Error: {e}")
949
+
950
+
951
+ def main():
952
+ """Main entry point."""
953
+ args = parse_args()
954
+
955
+ try:
956
+ # Keep console output visible by default so users can see agent reasoning
957
+ # Silent mode can be enabled with --silent flag or for single-query mode
958
+ if args.silent:
959
+ use_silent_mode = True
960
+ elif args.query is not None:
961
+ use_silent_mode = True # Auto-silent for non-interactive queries
962
+ else:
963
+ use_silent_mode = False # Show output in interactive mode
964
+
965
+ # Create agent config
966
+ config = ChatAgentConfig(
967
+ use_claude=args.use_claude,
968
+ use_chatgpt=args.use_chatgpt,
969
+ claude_model=args.claude_model,
970
+ model_id=args.model_id,
971
+ max_steps=args.max_steps,
972
+ show_prompts=args.show_prompts,
973
+ output_dir=args.output_dir,
974
+ streaming=args.streaming,
975
+ show_stats=args.show_stats,
976
+ silent_mode=use_silent_mode,
977
+ debug=args.debug,
978
+ rag_documents=args.documents,
979
+ watch_directories=args.watch,
980
+ chunk_size=args.chunk_size,
981
+ chunk_overlap=args.chunk_overlap,
982
+ max_chunks=args.max_chunks,
983
+ use_llm_chunking=args.use_llm_chunking,
984
+ allowed_paths=args.allowed_paths,
985
+ )
986
+
987
+ # Create agent with config
988
+ agent = ChatAgent(config)
989
+
990
+ # Create initial session if not loading one
991
+ if not agent.current_session:
992
+ agent.current_session = agent.session_manager.create_session()
993
+ logger.debug(f"Created new session: {agent.current_session.session_id}")
994
+
995
+ # Index document if --index flag provided
996
+ if args.index:
997
+ index_path = args.index
998
+ if not os.path.exists(index_path):
999
+ print(f"āŒ File not found: {index_path}")
1000
+ return 1
1001
+
1002
+ print(f"šŸ“„ Indexing: {Path(index_path).name}")
1003
+ print("=" * 60)
1004
+
1005
+ result = agent.rag.index_document(str(Path(index_path).absolute()))
1006
+
1007
+ if result.get("success"):
1008
+ print("āœ… INDEXING SUCCESSFUL")
1009
+ print(f"šŸ“ File: {result.get('file_name')}")
1010
+ print(f"šŸ“„ Type: {result.get('file_type')}")
1011
+ print(f"šŸ’¾ Size: {result.get('file_size_mb', 0):.2f} MB")
1012
+ if result.get("num_pages"):
1013
+ print(f"šŸ“– Pages: {result['num_pages']}")
1014
+ print(f"šŸ“¦ Chunks: {result.get('num_chunks', 0)}")
1015
+ print("=" * 60)
1016
+ else:
1017
+ print(f"āŒ Indexing failed: {result.get('error')}")
1018
+ return 1
1019
+
1020
+ # List tools if requested
1021
+ if args.list_tools:
1022
+ agent.list_tools(verbose=True)
1023
+ return 0
1024
+
1025
+ # Single query mode
1026
+ if args.query:
1027
+ result = agent.process_query(args.query)
1028
+ print(f"\n{result['result']}")
1029
+
1030
+ if args.show_stats and result.get("duration"):
1031
+ print("\nšŸ“Š Stats:")
1032
+ print(f" Duration: {result['duration']:.2f}s")
1033
+ print(f" Steps: {result['steps_taken']}")
1034
+ print(f" Tokens: {result.get('total_tokens', 0):,}")
1035
+
1036
+ return 0 if result["status"] == "success" else 1
1037
+
1038
+ # Interactive mode
1039
+ interactive_mode(agent)
1040
+ return 0
1041
+
1042
+ except KeyboardInterrupt:
1043
+ print("\n\nInterrupted by user")
1044
+ return 130
1045
+ except Exception as e:
1046
+ logger.error(f"Error: {e}", exc_info=True)
1047
+ print(f"\nāŒ Error: {e}")
1048
+ return 1
1049
+ finally:
1050
+ # Cleanup
1051
+ try:
1052
+ agent.stop_watching()
1053
+ except Exception: # pylint: disable=broad-except
1054
+ pass
1055
+
1056
+
1057
+ if __name__ == "__main__":
1058
+ sys.exit(main())