agent-starter-pack 0.6.4__py3-none-any.whl → 0.7.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 (34) hide show
  1. {agent_starter_pack-0.6.4.dist-info → agent_starter_pack-0.7.1.dist-info}/METADATA +15 -12
  2. {agent_starter_pack-0.6.4.dist-info → agent_starter_pack-0.7.1.dist-info}/RECORD +34 -31
  3. agents/adk_gemini_fullstack/app/agent.py +62 -8
  4. llm.txt +296 -0
  5. src/base_template/.gitignore +1 -1
  6. src/base_template/GEMINI.md +5 -0
  7. src/base_template/Makefile +20 -5
  8. src/base_template/README.md +3 -0
  9. src/base_template/deployment/cd/deploy-to-prod.yaml +3 -3
  10. src/base_template/deployment/cd/staging.yaml +4 -4
  11. src/base_template/deployment/ci/pr_checks.yaml +1 -1
  12. src/base_template/pyproject.toml +2 -2
  13. src/cli/utils/cicd.py +4 -1
  14. src/cli/utils/template.py +22 -18
  15. src/data_ingestion/uv.lock +97 -0
  16. src/frontends/adk_gemini_fullstack/frontend/package-lock.json +276 -0
  17. src/frontends/adk_gemini_fullstack/frontend/package.json +1 -0
  18. src/frontends/adk_gemini_fullstack/frontend/src/components/ChatMessagesView.tsx +5 -4
  19. src/frontends/adk_gemini_fullstack/frontend/vite.config.ts +4 -0
  20. src/resources/docs/adk-cheatsheet.md +1224 -0
  21. src/resources/locks/uv-adk_base-agent_engine.lock +14 -13
  22. src/resources/locks/uv-adk_base-cloud_run.lock +14 -13
  23. src/resources/locks/uv-adk_gemini_fullstack-agent_engine.lock +14 -13
  24. src/resources/locks/uv-adk_gemini_fullstack-cloud_run.lock +14 -13
  25. src/resources/locks/uv-agentic_rag-agent_engine.lock +78 -83
  26. src/resources/locks/uv-agentic_rag-cloud_run.lock +110 -119
  27. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +130 -135
  28. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +163 -172
  29. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +87 -92
  30. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +119 -128
  31. src/resources/locks/uv-live_api-cloud_run.lock +98 -107
  32. {agent_starter_pack-0.6.4.dist-info → agent_starter_pack-0.7.1.dist-info}/WHEEL +0 -0
  33. {agent_starter_pack-0.6.4.dist-info → agent_starter_pack-0.7.1.dist-info}/entry_points.txt +0 -0
  34. {agent_starter_pack-0.6.4.dist-info → agent_starter_pack-0.7.1.dist-info}/licenses/LICENSE +0 -0
@@ -23,6 +23,7 @@
23
23
  "react-dom": "^19.0.0",
24
24
  "react-markdown": "^9.0.3",
25
25
  "react-router-dom": "^7.5.3",
26
+ "remark-gfm": "^4.0.1",
26
27
  "tailwind-merge": "^3.2.0",
27
28
  "tailwindcss": "^4.1.5"
28
29
  },
@@ -3946,6 +3947,41 @@
3946
3947
  "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
3947
3948
  }
3948
3949
  },
3950
+ "node_modules/markdown-table": {
3951
+ "version": "3.0.4",
3952
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
3953
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
3954
+ "funding": {
3955
+ "type": "github",
3956
+ "url": "https://github.com/sponsors/wooorm"
3957
+ }
3958
+ },
3959
+ "node_modules/mdast-util-find-and-replace": {
3960
+ "version": "3.0.2",
3961
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
3962
+ "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
3963
+ "dependencies": {
3964
+ "@types/mdast": "^4.0.0",
3965
+ "escape-string-regexp": "^5.0.0",
3966
+ "unist-util-is": "^6.0.0",
3967
+ "unist-util-visit-parents": "^6.0.0"
3968
+ },
3969
+ "funding": {
3970
+ "type": "opencollective",
3971
+ "url": "https://opencollective.com/unified"
3972
+ }
3973
+ },
3974
+ "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
3975
+ "version": "5.0.0",
3976
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
3977
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
3978
+ "engines": {
3979
+ "node": ">=12"
3980
+ },
3981
+ "funding": {
3982
+ "url": "https://github.com/sponsors/sindresorhus"
3983
+ }
3984
+ },
3949
3985
  "node_modules/mdast-util-from-markdown": {
3950
3986
  "version": "2.0.2",
3951
3987
  "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
@@ -3970,6 +4006,101 @@
3970
4006
  "url": "https://opencollective.com/unified"
3971
4007
  }
3972
4008
  },
4009
+ "node_modules/mdast-util-gfm": {
4010
+ "version": "3.1.0",
4011
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
4012
+ "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
4013
+ "dependencies": {
4014
+ "mdast-util-from-markdown": "^2.0.0",
4015
+ "mdast-util-gfm-autolink-literal": "^2.0.0",
4016
+ "mdast-util-gfm-footnote": "^2.0.0",
4017
+ "mdast-util-gfm-strikethrough": "^2.0.0",
4018
+ "mdast-util-gfm-table": "^2.0.0",
4019
+ "mdast-util-gfm-task-list-item": "^2.0.0",
4020
+ "mdast-util-to-markdown": "^2.0.0"
4021
+ },
4022
+ "funding": {
4023
+ "type": "opencollective",
4024
+ "url": "https://opencollective.com/unified"
4025
+ }
4026
+ },
4027
+ "node_modules/mdast-util-gfm-autolink-literal": {
4028
+ "version": "2.0.1",
4029
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
4030
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
4031
+ "dependencies": {
4032
+ "@types/mdast": "^4.0.0",
4033
+ "ccount": "^2.0.0",
4034
+ "devlop": "^1.0.0",
4035
+ "mdast-util-find-and-replace": "^3.0.0",
4036
+ "micromark-util-character": "^2.0.0"
4037
+ },
4038
+ "funding": {
4039
+ "type": "opencollective",
4040
+ "url": "https://opencollective.com/unified"
4041
+ }
4042
+ },
4043
+ "node_modules/mdast-util-gfm-footnote": {
4044
+ "version": "2.1.0",
4045
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
4046
+ "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
4047
+ "dependencies": {
4048
+ "@types/mdast": "^4.0.0",
4049
+ "devlop": "^1.1.0",
4050
+ "mdast-util-from-markdown": "^2.0.0",
4051
+ "mdast-util-to-markdown": "^2.0.0",
4052
+ "micromark-util-normalize-identifier": "^2.0.0"
4053
+ },
4054
+ "funding": {
4055
+ "type": "opencollective",
4056
+ "url": "https://opencollective.com/unified"
4057
+ }
4058
+ },
4059
+ "node_modules/mdast-util-gfm-strikethrough": {
4060
+ "version": "2.0.0",
4061
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
4062
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
4063
+ "dependencies": {
4064
+ "@types/mdast": "^4.0.0",
4065
+ "mdast-util-from-markdown": "^2.0.0",
4066
+ "mdast-util-to-markdown": "^2.0.0"
4067
+ },
4068
+ "funding": {
4069
+ "type": "opencollective",
4070
+ "url": "https://opencollective.com/unified"
4071
+ }
4072
+ },
4073
+ "node_modules/mdast-util-gfm-table": {
4074
+ "version": "2.0.0",
4075
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
4076
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
4077
+ "dependencies": {
4078
+ "@types/mdast": "^4.0.0",
4079
+ "devlop": "^1.0.0",
4080
+ "markdown-table": "^3.0.0",
4081
+ "mdast-util-from-markdown": "^2.0.0",
4082
+ "mdast-util-to-markdown": "^2.0.0"
4083
+ },
4084
+ "funding": {
4085
+ "type": "opencollective",
4086
+ "url": "https://opencollective.com/unified"
4087
+ }
4088
+ },
4089
+ "node_modules/mdast-util-gfm-task-list-item": {
4090
+ "version": "2.0.0",
4091
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
4092
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
4093
+ "dependencies": {
4094
+ "@types/mdast": "^4.0.0",
4095
+ "devlop": "^1.0.0",
4096
+ "mdast-util-from-markdown": "^2.0.0",
4097
+ "mdast-util-to-markdown": "^2.0.0"
4098
+ },
4099
+ "funding": {
4100
+ "type": "opencollective",
4101
+ "url": "https://opencollective.com/unified"
4102
+ }
4103
+ },
3973
4104
  "node_modules/mdast-util-mdx-expression": {
3974
4105
  "version": "2.0.1",
3975
4106
  "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
@@ -4178,6 +4309,120 @@
4178
4309
  "micromark-util-types": "^2.0.0"
4179
4310
  }
4180
4311
  },
4312
+ "node_modules/micromark-extension-gfm": {
4313
+ "version": "3.0.0",
4314
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
4315
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
4316
+ "dependencies": {
4317
+ "micromark-extension-gfm-autolink-literal": "^2.0.0",
4318
+ "micromark-extension-gfm-footnote": "^2.0.0",
4319
+ "micromark-extension-gfm-strikethrough": "^2.0.0",
4320
+ "micromark-extension-gfm-table": "^2.0.0",
4321
+ "micromark-extension-gfm-tagfilter": "^2.0.0",
4322
+ "micromark-extension-gfm-task-list-item": "^2.0.0",
4323
+ "micromark-util-combine-extensions": "^2.0.0",
4324
+ "micromark-util-types": "^2.0.0"
4325
+ },
4326
+ "funding": {
4327
+ "type": "opencollective",
4328
+ "url": "https://opencollective.com/unified"
4329
+ }
4330
+ },
4331
+ "node_modules/micromark-extension-gfm-autolink-literal": {
4332
+ "version": "2.1.0",
4333
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
4334
+ "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
4335
+ "dependencies": {
4336
+ "micromark-util-character": "^2.0.0",
4337
+ "micromark-util-sanitize-uri": "^2.0.0",
4338
+ "micromark-util-symbol": "^2.0.0",
4339
+ "micromark-util-types": "^2.0.0"
4340
+ },
4341
+ "funding": {
4342
+ "type": "opencollective",
4343
+ "url": "https://opencollective.com/unified"
4344
+ }
4345
+ },
4346
+ "node_modules/micromark-extension-gfm-footnote": {
4347
+ "version": "2.1.0",
4348
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
4349
+ "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
4350
+ "dependencies": {
4351
+ "devlop": "^1.0.0",
4352
+ "micromark-core-commonmark": "^2.0.0",
4353
+ "micromark-factory-space": "^2.0.0",
4354
+ "micromark-util-character": "^2.0.0",
4355
+ "micromark-util-normalize-identifier": "^2.0.0",
4356
+ "micromark-util-sanitize-uri": "^2.0.0",
4357
+ "micromark-util-symbol": "^2.0.0",
4358
+ "micromark-util-types": "^2.0.0"
4359
+ },
4360
+ "funding": {
4361
+ "type": "opencollective",
4362
+ "url": "https://opencollective.com/unified"
4363
+ }
4364
+ },
4365
+ "node_modules/micromark-extension-gfm-strikethrough": {
4366
+ "version": "2.1.0",
4367
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
4368
+ "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
4369
+ "dependencies": {
4370
+ "devlop": "^1.0.0",
4371
+ "micromark-util-chunked": "^2.0.0",
4372
+ "micromark-util-classify-character": "^2.0.0",
4373
+ "micromark-util-resolve-all": "^2.0.0",
4374
+ "micromark-util-symbol": "^2.0.0",
4375
+ "micromark-util-types": "^2.0.0"
4376
+ },
4377
+ "funding": {
4378
+ "type": "opencollective",
4379
+ "url": "https://opencollective.com/unified"
4380
+ }
4381
+ },
4382
+ "node_modules/micromark-extension-gfm-table": {
4383
+ "version": "2.1.1",
4384
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
4385
+ "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
4386
+ "dependencies": {
4387
+ "devlop": "^1.0.0",
4388
+ "micromark-factory-space": "^2.0.0",
4389
+ "micromark-util-character": "^2.0.0",
4390
+ "micromark-util-symbol": "^2.0.0",
4391
+ "micromark-util-types": "^2.0.0"
4392
+ },
4393
+ "funding": {
4394
+ "type": "opencollective",
4395
+ "url": "https://opencollective.com/unified"
4396
+ }
4397
+ },
4398
+ "node_modules/micromark-extension-gfm-tagfilter": {
4399
+ "version": "2.0.0",
4400
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
4401
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
4402
+ "dependencies": {
4403
+ "micromark-util-types": "^2.0.0"
4404
+ },
4405
+ "funding": {
4406
+ "type": "opencollective",
4407
+ "url": "https://opencollective.com/unified"
4408
+ }
4409
+ },
4410
+ "node_modules/micromark-extension-gfm-task-list-item": {
4411
+ "version": "2.1.0",
4412
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
4413
+ "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
4414
+ "dependencies": {
4415
+ "devlop": "^1.0.0",
4416
+ "micromark-factory-space": "^2.0.0",
4417
+ "micromark-util-character": "^2.0.0",
4418
+ "micromark-util-symbol": "^2.0.0",
4419
+ "micromark-util-types": "^2.0.0"
4420
+ },
4421
+ "funding": {
4422
+ "type": "opencollective",
4423
+ "url": "https://opencollective.com/unified"
4424
+ }
4425
+ },
4181
4426
  "node_modules/micromark-factory-destination": {
4182
4427
  "version": "2.0.1",
4183
4428
  "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
@@ -5030,6 +5275,23 @@
5030
5275
  }
5031
5276
  }
5032
5277
  },
5278
+ "node_modules/remark-gfm": {
5279
+ "version": "4.0.1",
5280
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
5281
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
5282
+ "dependencies": {
5283
+ "@types/mdast": "^4.0.0",
5284
+ "mdast-util-gfm": "^3.0.0",
5285
+ "micromark-extension-gfm": "^3.0.0",
5286
+ "remark-parse": "^11.0.0",
5287
+ "remark-stringify": "^11.0.0",
5288
+ "unified": "^11.0.0"
5289
+ },
5290
+ "funding": {
5291
+ "type": "opencollective",
5292
+ "url": "https://opencollective.com/unified"
5293
+ }
5294
+ },
5033
5295
  "node_modules/remark-parse": {
5034
5296
  "version": "11.0.0",
5035
5297
  "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
@@ -5063,6 +5325,20 @@
5063
5325
  "url": "https://opencollective.com/unified"
5064
5326
  }
5065
5327
  },
5328
+ "node_modules/remark-stringify": {
5329
+ "version": "11.0.0",
5330
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
5331
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
5332
+ "dependencies": {
5333
+ "@types/mdast": "^4.0.0",
5334
+ "mdast-util-to-markdown": "^2.0.0",
5335
+ "unified": "^11.0.0"
5336
+ },
5337
+ "funding": {
5338
+ "type": "opencollective",
5339
+ "url": "https://opencollective.com/unified"
5340
+ }
5341
+ },
5066
5342
  "node_modules/resolve-from": {
5067
5343
  "version": "4.0.0",
5068
5344
  "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -25,6 +25,7 @@
25
25
  "react-dom": "^19.0.0",
26
26
  "react-markdown": "^9.0.3",
27
27
  "react-router-dom": "^7.5.3",
28
+ "remark-gfm": "^4.0.1",
28
29
  "tailwind-merge": "^3.2.0",
29
30
  "tailwindcss": "^4.1.5"
30
31
  },
@@ -5,6 +5,7 @@ import { InputForm } from "@/components/InputForm";
5
5
  import { Button } from "@/components/ui/button";
6
6
  import { useState, ReactNode } from "react";
7
7
  import ReactMarkdown from "react-markdown";
8
+ import remarkGfm from 'remark-gfm';
8
9
  import { cn } from "@/utils";
9
10
  import { Badge } from "@/components/ui/badge";
10
11
  import { ActivityTimeline } from "@/components/ActivityTimeline";
@@ -148,7 +149,7 @@ const HumanMessageBubble: React.FC<HumanMessageBubbleProps> = ({
148
149
  }) => {
149
150
  return (
150
151
  <div className="text-white rounded-3xl break-words min-h-7 bg-neutral-700 max-w-[100%] sm:max-w-[90%] px-4 pt-3 rounded-br-lg">
151
- <ReactMarkdown components={mdComponents}>
152
+ <ReactMarkdown components={mdComponents} remarkPlugins={[remarkGfm]}>
152
153
  {message.content}
153
154
  </ReactMarkdown>
154
155
  </div>
@@ -204,7 +205,7 @@ const AiMessageBubble: React.FC<AiMessageBubbleProps> = ({
204
205
  )}
205
206
  <div className="flex items-start gap-3">
206
207
  <div className="flex-1">
207
- <ReactMarkdown components={mdComponents}>
208
+ <ReactMarkdown components={mdComponents} remarkPlugins={[remarkGfm]}>
208
209
  {message.content}
209
210
  </ReactMarkdown>
210
211
  </div>
@@ -236,7 +237,7 @@ const AiMessageBubble: React.FC<AiMessageBubbleProps> = ({
236
237
  {message.content && message.content.trim() && agent !== "interactive_planner_agent" && (
237
238
  <div className="flex items-start gap-3 mt-2">
238
239
  <div className="flex-1">
239
- <ReactMarkdown components={mdComponents}>
240
+ <ReactMarkdown components={mdComponents} remarkPlugins={[remarkGfm]}>
240
241
  {message.content}
241
242
  </ReactMarkdown>
242
243
  </div>
@@ -260,7 +261,7 @@ const AiMessageBubble: React.FC<AiMessageBubbleProps> = ({
260
261
  <div className="relative break-words flex flex-col w-full">
261
262
  <div className="flex items-start gap-3">
262
263
  <div className="flex-1">
263
- <ReactMarkdown components={mdComponents}>
264
+ <ReactMarkdown components={mdComponents} remarkPlugins={[remarkGfm]}>
264
265
  {message.content}
265
266
  </ReactMarkdown>
266
267
  </div>
@@ -13,6 +13,10 @@ export default defineConfig({
13
13
  },
14
14
  },
15
15
  server: {
16
+ // Makes the server accessible on the local network (e.g., for mobile testing)
17
+ host: true,
18
+ // Should be disabled or limited when deployed in untrusted network environments.
19
+ allowedHosts: true,
16
20
  proxy: {
17
21
  // Proxy API requests to the backend server
18
22
  "/api": {