botrun-horse 2.29.2 โ†’ 2.30.0

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 (574) hide show
  1. package/botrun-c/.claude/skills/DOCX/351/226/261/350/256/200/346/212/200/350/203/275/SKILL.md +103 -0
  2. package/botrun-c/.claude/skills/DOCX/351/226/261/350/256/200/346/212/200/350/203/275/scripts/docx-to-markdown.mjs +206 -0
  3. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/SKILL.md +1093 -0
  4. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branch.mjs +73 -0
  5. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branches.mjs +77 -0
  6. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-checkout.mjs +72 -0
  7. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-clone.mjs +72 -0
  8. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-commit.mjs +75 -0
  9. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-branch.mjs +75 -0
  10. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-file.mjs +72 -0
  11. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-diff.mjs +80 -0
  12. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list-tree.mjs +336 -0
  13. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list.mjs +199 -0
  14. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-merge.mjs +86 -0
  15. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-move.mjs +75 -0
  16. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-create.mjs +81 -0
  17. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-list.mjs +74 -0
  18. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-merge.mjs +83 -0
  19. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-view.mjs +71 -0
  20. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-push.mjs +71 -0
  21. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-read.mjs +277 -0
  22. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-search.mjs +370 -0
  23. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-stash.mjs +116 -0
  24. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-sync.mjs +71 -0
  25. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-write.mjs +74 -0
  26. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/lib/path-validator.mjs +167 -0
  27. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/SKILL.md +605 -0
  28. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-create.mjs +127 -0
  29. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-delete.mjs +77 -0
  30. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-diff.mjs +87 -0
  31. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-history.mjs +99 -0
  32. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-list.mjs +174 -0
  33. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-read.mjs +214 -0
  34. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-restore.mjs +75 -0
  35. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-search.mjs +270 -0
  36. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-sync-back.mjs +155 -0
  37. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-update.mjs +100 -0
  38. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/SKILL.md +414 -0
  39. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/create-project.mjs +91 -0
  40. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/finalize-project.mjs +162 -0
  41. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/SKILL.md +206 -0
  42. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/package.json +19 -0
  43. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-analyze.mjs +309 -0
  44. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-compress.mjs +315 -0
  45. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-split.mjs +275 -0
  46. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-to-text.mjs +336 -0
  47. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/test-pdf-scripts.mjs +491 -0
  48. package/botrun-c/.claude/skills/docx-to-markdown/SKILL.md +76 -0
  49. package/botrun-c/.claude/skills/docx-to-markdown/scripts/convert_docx.py +183 -0
  50. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/SKILL.md +133 -0
  51. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/scripts/ocr_processor.py +381 -0
  52. package/botrun-c/.claude/skills/gemini-transcribe/SKILL.md +115 -0
  53. package/botrun-c/.claude/skills/gemini-transcribe/scripts/transcribe.py +499 -0
  54. package/botrun-c/.claude/skills/nchc-transcribe/SKILL.md +131 -0
  55. package/botrun-c/.claude/skills/nchc-transcribe/scripts/transcribe.py +522 -0
  56. package/botrun-c/.claude/skills/p320-moj-review/SKILL.md +200 -0
  57. package/botrun-c/.claude/skills/p320-moj-review/references/guideline.md +118 -0
  58. package/botrun-c/.claude/skills/pdf-multimodal-processor/SKILL.md +186 -0
  59. package/botrun-c/.claude/skills/pdf-multimodal-processor/scripts/process_pdf.py +515 -0
  60. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/SKILL.md +81 -0
  61. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/package.json +13 -0
  62. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/secure-search.mjs +232 -0
  63. package/botrun-c/.claude/skills/top100/351/240/230/350/242/226/351/240/220/346/270/254/346/212/200/350/203/275/SKILL.md +518 -0
  64. package/botrun-c/.claude/skills//345/216/273/350/255/230/345/210/245/346/212/200/350/203/275/SKILL.md +125 -0
  65. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/SKILL.md +123 -0
  66. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/scripts/recall.mjs +339 -0
  67. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/SKILL.md +156 -0
  68. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/__tests__/utils.test.mjs +139 -0
  69. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/constants.mjs +40 -0
  70. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/gcs-uploader.mjs +195 -0
  71. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/gemini-image-client.mjs +307 -0
  72. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/generate-image.mjs +103 -0
  73. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/image-session-manager.mjs +219 -0
  74. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/output-formatter.mjs +209 -0
  75. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/package.json +20 -0
  76. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/utils.mjs +115 -0
  77. package/botrun-c/.claude/skills//345/244/232/346/250/241/346/205/213/351/226/261/350/256/200/346/212/200/350/203/275/SKILL.md +86 -0
  78. package/botrun-c/.claude/skills//345/244/232/346/250/241/346/205/213/351/226/261/350/256/200/346/212/200/350/203/275/scripts/multimodal-read.mjs +304 -0
  79. package/botrun-c/.claude/skills//345/244/232/346/250/241/346/205/213/351/226/261/350/256/200/346/212/200/350/203/275/scripts/package.json +17 -0
  80. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/SKILL.md +131 -0
  81. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/scripts/skill-manager.mjs +542 -0
  82. package/botrun-c/.claude/skills//346/234/203/350/255/260/350/250/230/351/214/204/346/212/200/350/203/275/SKILL.md +127 -0
  83. package/botrun-c/.claude/skills//347/233/256/351/214/204/345/210/227/350/241/250/346/212/200/350/203/275/SKILL.md +53 -0
  84. package/botrun-c/.claude/skills//347/233/256/351/214/204/345/210/227/350/241/250/346/212/200/350/203/275/scripts/package.json +13 -0
  85. package/botrun-c/.claude/skills//347/233/256/351/214/204/345/210/227/350/241/250/346/212/200/350/203/275/scripts/tree-view.mjs +149 -0
  86. package/botrun-c/.claude/skills//347/264/224/346/226/207/345/255/227/345/244/232/346/252/224/346/241/210/350/256/200/345/217/226/346/212/200/350/203/275/SKILL.md +82 -0
  87. package/botrun-c/.claude/skills//347/264/224/346/226/207/345/255/227/345/244/232/346/252/224/346/241/210/350/256/200/345/217/226/346/212/200/350/203/275/scripts/package.json +16 -0
  88. package/botrun-c/.claude/skills//347/264/224/346/226/207/345/255/227/345/244/232/346/252/224/346/241/210/350/256/200/345/217/226/346/212/200/350/203/275/scripts/secure-read.mjs +260 -0
  89. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/SKILL.md +156 -0
  90. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/package.json +16 -0
  91. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/search.js +139 -0
  92. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/search.mjs +272 -0
  93. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/search.ts +166 -0
  94. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/SKILL.md +114 -0
  95. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/remember.mjs +159 -0
  96. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test-advanced.mjs +342 -0
  97. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test.mjs +430 -0
  98. package/botrun-c/.claude/skills//350/252/236/351/237/263/350/275/211/346/226/207/345/255/227/346/212/200/350/203/275/SKILL.md +30 -0
  99. package/botrun-c/.claude/skills//350/252/236/351/237/263/350/275/211/346/226/207/345/255/227/346/212/200/350/203/275/scripts/package.json +13 -0
  100. package/botrun-c/.claude/skills//350/252/236/351/237/263/350/275/211/346/226/207/345/255/227/346/212/200/350/203/275/scripts/transcribe.mjs +294 -0
  101. package/botrun-c/.claude/skills//351/233/266/345/271/273/350/246/272/350/255/211/346/230/216/346/212/200/350/203/275/SKILL.md +338 -0
  102. package/botrun-c/.dockerignore +131 -0
  103. package/botrun-c/.dockeroptimize +13 -0
  104. package/botrun-c/.firebase/hosting.b3V0.cache +30 -0
  105. package/botrun-c/.firebaserc +5 -0
  106. package/botrun-c/.gcloudignore +56 -0
  107. package/botrun-c/.ruby-version +1 -0
  108. package/botrun-c/CHANGELOG.md +224 -0
  109. package/botrun-c/Dockerfile.gcp +365 -0
  110. package/botrun-c/Dockerfile.slim +195 -0
  111. package/botrun-c/Gemfile +8 -0
  112. package/botrun-c/Gemfile.lock +233 -0
  113. package/botrun-c/LOCAL-DEVELOPMENT-GUIDE.md +393 -0
  114. package/botrun-c/PLAN.md +131 -0
  115. package/botrun-c/README.md +129 -0
  116. package/botrun-c/TODO-CAPACITOR-INTEGRATION.md +482 -0
  117. package/botrun-c/VERIFICATION.md +121 -0
  118. package/botrun-c/admin/RATE_LIMIT_MANAGEMENT.md +312 -0
  119. package/botrun-c/admin/README.md +338 -0
  120. package/botrun-c/admin/botrun-billing-report-1765235244038.csv +22 -0
  121. package/botrun-c/admin/botrun-billing-report-1765235323089.csv +22 -0
  122. package/botrun-c/admin/botrun-dashboard-1765235244039.html +278 -0
  123. package/botrun-c/admin/botrun-dashboard-1765235323089.html +278 -0
  124. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235244039.html +161 -0
  125. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235323090.html +161 -0
  126. package/botrun-c/admin/check-billing.ts +48 -0
  127. package/botrun-c/admin/count-all-users.ts +65 -0
  128. package/botrun-c/admin/generate-analytics-report.ts +188 -0
  129. package/botrun-c/admin/jest.config.ts +43 -0
  130. package/botrun-c/admin/lib/__tests__/formatters.test.ts +264 -0
  131. package/botrun-c/admin/lib/__tests__/mocks/firebase.mock.ts +112 -0
  132. package/botrun-c/admin/lib/__tests__/services/UserService.test.ts +83 -0
  133. package/botrun-c/admin/lib/__tests__/user-resolver.test.ts +439 -0
  134. package/botrun-c/admin/lib/analyzers/BillingAnalyticsService.ts +242 -0
  135. package/botrun-c/admin/lib/analyzers/CsvExporter.ts +263 -0
  136. package/botrun-c/admin/lib/analyzers/HtmlChartGenerator.ts +530 -0
  137. package/botrun-c/admin/lib/analyzers/SpikeAnalyzer.ts +608 -0
  138. package/botrun-c/admin/lib/analyzers/TimeSeriesAnalyzer.ts +344 -0
  139. package/botrun-c/admin/lib/cli/CLIBootstrapper.ts +40 -0
  140. package/botrun-c/admin/lib/commands/AbstractCommand.ts +69 -0
  141. package/botrun-c/admin/lib/commands/AnalyticsCommand.ts +215 -0
  142. package/botrun-c/admin/lib/commands/ListCommand.ts +85 -0
  143. package/botrun-c/admin/lib/commands/QueryCommand.ts +81 -0
  144. package/botrun-c/admin/lib/commands/SpikeCommand.ts +83 -0
  145. package/botrun-c/admin/lib/domain/User.ts +38 -0
  146. package/botrun-c/admin/lib/firebase.ts +92 -0
  147. package/botrun-c/admin/lib/firestore-safe.ts +105 -0
  148. package/botrun-c/admin/lib/formatters.ts +154 -0
  149. package/botrun-c/admin/lib/rate-limit-detailed.ts +355 -0
  150. package/botrun-c/admin/lib/rate-limit.ts +286 -0
  151. package/botrun-c/admin/lib/repositories/UserRepository.ts +104 -0
  152. package/botrun-c/admin/lib/services/UserService.ts +108 -0
  153. package/botrun-c/admin/lib/types.ts +56 -0
  154. package/botrun-c/admin/lib/user-resolver.ts +275 -0
  155. package/botrun-c/admin/manage-auth-domains.js +178 -0
  156. package/botrun-c/admin/migrate-plan-free.sh +64 -0
  157. package/botrun-c/admin/package-lock.json +5656 -0
  158. package/botrun-c/admin/package.json +28 -0
  159. package/botrun-c/admin/rate-limit.sh +55 -0
  160. package/botrun-c/admin/remove-custom-limits.ts +75 -0
  161. package/botrun-c/admin/reset-rate.sh +70 -0
  162. package/botrun-c/admin/reset-trial.sh +68 -0
  163. package/botrun-c/admin/seed-trial-data.sh +38 -0
  164. package/botrun-c/admin/trial.sh +55 -0
  165. package/botrun-c/admin/tsconfig.json +20 -0
  166. package/botrun-c/admin/users-cli.py +298 -0
  167. package/botrun-c/admin/users.sh +12 -0
  168. package/botrun-c/admin/users.ts +1321 -0
  169. package/botrun-c/api/admin-tools/check-whitelist.mjs.migration-bak +74 -0
  170. package/botrun-c/api/admin-tools/create-user.mjs +92 -0
  171. package/botrun-c/api/admin-tools/create-user.mjs.migration-bak +92 -0
  172. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py +287 -0
  173. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py.migration-bak +287 -0
  174. package/botrun-c/api/admin-tools/init-firestore.mjs +75 -0
  175. package/botrun-c/api/admin-tools/init-firestore.mjs.migration-bak +101 -0
  176. package/botrun-c/api/admin-tools/list-users.mjs +43 -0
  177. package/botrun-c/api/admin-tools/list-users.mjs.migration-bak +43 -0
  178. package/botrun-c/api/admin-tools/manage-authorized-domains.ts +255 -0
  179. package/botrun-c/api/admin-tools/manage-authorized-domains.ts.migration-bak +255 -0
  180. package/botrun-c/api/admin-tools/setup-custom-claims.ts.migration-bak +155 -0
  181. package/botrun-c/api/admin-tools/test-claims.mjs +69 -0
  182. package/botrun-c/api/admin-tools/test-claims.mjs.migration-bak +69 -0
  183. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs +72 -0
  184. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs.migration-bak +72 -0
  185. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs +159 -0
  186. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs.migration-bak +159 -0
  187. package/botrun-c/api/admin-tools/update-service-urls.mjs +82 -0
  188. package/botrun-c/api/admin-tools/update-service-urls.mjs.migration-bak +82 -0
  189. package/botrun-c/api/package-lock.json +5031 -0
  190. package/botrun-c/api/package.json +63 -0
  191. package/botrun-c/api/pnpm-lock.yaml +4157 -0
  192. package/botrun-c/api/rate-limit-export-1763620678737.csv +79 -0
  193. package/botrun-c/api/scripts/README-migrate-plan-free.md +197 -0
  194. package/botrun-c/api/scripts/check-users.ts +45 -0
  195. package/botrun-c/api/scripts/delete-firestore-docs.js +43 -0
  196. package/botrun-c/api/scripts/dump-subscriptions.ts +395 -0
  197. package/botrun-c/api/scripts/list-all-users.ts +65 -0
  198. package/botrun-c/api/scripts/migrate-plan-free-rpd-16to32.ts +262 -0
  199. package/botrun-c/api/scripts/migrate-plan-names-to-lite-max.ts +269 -0
  200. package/botrun-c/api/scripts/query-user-info.ts +304 -0
  201. package/botrun-c/api/scripts/reset-rate-limit.ts +206 -0
  202. package/botrun-c/api/scripts/reset-trial-subscription.ts +166 -0
  203. package/botrun-c/api/scripts/rollback-plan-names-from-lite-max.ts +139 -0
  204. package/botrun-c/api/scripts/seed-rate-limit-test-data.ts +114 -0
  205. package/botrun-c/api/scripts/seed-subscription-test-data.ts +173 -0
  206. package/botrun-c/api/scripts/test-rate-limit-message.ts +108 -0
  207. package/botrun-c/api/test-billing-write.ts +103 -0
  208. package/botrun-c/api/test-billing.ts +81 -0
  209. package/botrun-c/api/test-chat-upload.sh +162 -0
  210. package/botrun-c/api/test-nchc-whisper.ts +87 -0
  211. package/botrun-c/api/test-skills-loading.js +77 -0
  212. package/botrun-c/api/test-skills-symlink.js +118 -0
  213. package/botrun-c/api/test-upload-multimodal.sh +167 -0
  214. package/botrun-c/api/tsconfig.json +27 -0
  215. package/botrun-c/api/verify-form-2-1.mjs +229 -0
  216. package/botrun-c/api/vitest.config.ts +9 -0
  217. package/botrun-c/appium-capabilities.json +20 -0
  218. package/botrun-c/cors.json +26 -0
  219. package/botrun-c/delete-old.sh +44 -0
  220. package/botrun-c/design/google-drive/01-architecture.md +186 -0
  221. package/botrun-c/design/google-drive/02-api-design.md +314 -0
  222. package/botrun-c/design/google-drive/03-frontend-design.md +278 -0
  223. package/botrun-c/design/google-drive/04-skill-design.md +384 -0
  224. package/botrun-c/design/google-drive/05-test-plan.md +507 -0
  225. package/botrun-c/design/google-drive/README.md +32 -0
  226. package/botrun-c/dev/mcp-token-calculator/README.md +92 -0
  227. package/botrun-c/dev/mcp-token-calculator/RESULTS.md +188 -0
  228. package/botrun-c/dev/mcp-token-calculator/calculate-current-tokens.ts +369 -0
  229. package/botrun-c/dev/mcp-token-calculator/calculate-mcp-tokens.ts +464 -0
  230. package/botrun-c/dev/mcp-token-calculator/optimization-proposals.ts +316 -0
  231. package/botrun-c/dev/mcp-token-calculator/package-lock.json +599 -0
  232. package/botrun-c/dev/mcp-token-calculator/package.json +22 -0
  233. package/botrun-c/dev/mcp-token-calculator/test-all-schemas.ts +314 -0
  234. package/botrun-c/dev/mcp-token-calculator/test-schema-correctness.ts +221 -0
  235. package/botrun-c/dev/mcp-token-calculator/verify-optimization.ts +159 -0
  236. package/botrun-c/fastlane/ANDROID-DEPLOYMENT-SETUP.md +825 -0
  237. package/botrun-c/fastlane/IOS-DEPLOYMENT-SETUP.md +431 -0
  238. package/botrun-c/fastlane/Pluginfile +5 -0
  239. package/botrun-c/fastlane/QUICK-START.md +133 -0
  240. package/botrun-c/fastlane/README.md +424 -0
  241. package/botrun-c/fastlane/RUBY-SETUP.md +449 -0
  242. package/botrun-c/fastlane/android/Appfile +11 -0
  243. package/botrun-c/fastlane/android/Fastfile +240 -0
  244. package/botrun-c/firebase.json +46 -0
  245. package/botrun-c/firestore-init-data.json +40 -0
  246. package/botrun-c/firestore.indexes.json +55 -0
  247. package/botrun-c/firestore.rules +53 -0
  248. package/botrun-c/fix-codex-permissions.sh +56 -0
  249. package/botrun-c/gcs-lifecycle-30day-retention.json +12 -0
  250. package/botrun-c/html-architecture/architecture/deployment.html +664 -0
  251. package/botrun-c/html-architecture/architecture/index.html +309 -0
  252. package/botrun-c/html-architecture/architecture/styles.css +500 -0
  253. package/botrun-c/html-architecture/architecture/system-components.html +538 -0
  254. package/botrun-c/html-architecture/architecture/user-flow.html +370 -0
  255. package/botrun-c/mobile-android/FIREBASE-AUTH-SETUP.md +302 -0
  256. package/botrun-c/mobile-android/WSL-ANDROID-SETUP.md +252 -0
  257. package/botrun-c/mobile-android/android/app/build.gradle +75 -0
  258. package/botrun-c/mobile-android/android/app/capacitor.build.gradle +31 -0
  259. package/botrun-c/mobile-android/android/app/proguard-rules.pro +21 -0
  260. package/botrun-c/mobile-android/android/build.gradle +29 -0
  261. package/botrun-c/mobile-android/android/capacitor.settings.gradle +42 -0
  262. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  263. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  264. package/botrun-c/mobile-android/android/gradle.properties +22 -0
  265. package/botrun-c/mobile-android/android/gradlew +252 -0
  266. package/botrun-c/mobile-android/android/gradlew.bat +94 -0
  267. package/botrun-c/mobile-android/android/settings.gradle +5 -0
  268. package/botrun-c/mobile-android/android/variables.gradle +16 -0
  269. package/botrun-c/mobile-android/capacitor.config.ts +44 -0
  270. package/botrun-c/mobile-android/fastlane/Appfile +11 -0
  271. package/botrun-c/mobile-android/fastlane/Fastfile +202 -0
  272. package/botrun-c/mobile-android/fastlane/README.md +96 -0
  273. package/botrun-c/mobile-android/google-services.json.template +39 -0
  274. package/botrun-c/mobile-android/package.json +32 -0
  275. package/botrun-c/mobile-android/resources/icon.png +0 -0
  276. package/botrun-c/mobile-android/tsconfig.json +15 -0
  277. package/botrun-c/mobile-ios/.ruby-version +1 -0
  278. package/botrun-c/mobile-ios/BUILD-LOG.md +82 -0
  279. package/botrun-c/mobile-ios/Gemfile +4 -0
  280. package/botrun-c/mobile-ios/Gemfile.lock +299 -0
  281. package/botrun-c/mobile-ios/GoogleService-Info.plist.template +34 -0
  282. package/botrun-c/mobile-ios/IOS-PERMISSIONS.md +80 -0
  283. package/botrun-c/mobile-ios/QUICK-START.md +189 -0
  284. package/botrun-c/mobile-ios/README.md +231 -0
  285. package/botrun-c/mobile-ios/capacitor.config.ts +46 -0
  286. package/botrun-c/mobile-ios/fastlane/Fastfile +326 -0
  287. package/botrun-c/mobile-ios/fastlane/README.md +88 -0
  288. package/botrun-c/mobile-ios/ios/App/App/App.entitlements +10 -0
  289. package/botrun-c/mobile-ios/ios/App/App/AppDelegate.swift +49 -0
  290. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
  291. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
  292. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Contents.json +6 -0
  293. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +56 -0
  294. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png +0 -0
  295. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png +0 -0
  296. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png +0 -0
  297. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png +0 -0
  298. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png +0 -0
  299. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png +0 -0
  300. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  301. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  302. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  303. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
  304. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/Main.storyboard +19 -0
  305. package/botrun-c/mobile-ios/ios/App/App/Info.plist +72 -0
  306. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/project.pbxproj +446 -0
  307. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme +78 -0
  308. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/contents.xcworkspacedata +10 -0
  309. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  310. package/botrun-c/mobile-ios/ios/App/Podfile +52 -0
  311. package/botrun-c/mobile-ios/ios/App/Podfile.lock +205 -0
  312. package/botrun-c/mobile-ios/ios/App/add_plist.rb +30 -0
  313. package/botrun-c/mobile-ios/ios/App/fix_plist_path.rb +22 -0
  314. package/botrun-c/mobile-ios/package.json +29 -0
  315. package/botrun-c/mobile-ios/resources/icon.png +0 -0
  316. package/botrun-c/mobile-ios/run-simulator.sh +34 -0
  317. package/botrun-c/mobile-ios/screenshot-after-clean-rebuild.png +0 -0
  318. package/botrun-c/mobile-ios/screenshot-final-version.png +0 -0
  319. package/botrun-c/mobile-ios/screenshot-simulator.png +0 -0
  320. package/botrun-c/mobile-ios/screenshot-version-1009.png +0 -0
  321. package/botrun-c/mobile-ios/screenshot-with-version.png +0 -0
  322. package/botrun-c/mobile-ios/screenshot-working.png +0 -0
  323. package/botrun-c/mobile-ios/setup-ios.sh +106 -0
  324. package/botrun-c/mobile-ios/tsconfig.json +16 -0
  325. package/botrun-c/org-policy-allow-all-users.yaml +3 -0
  326. package/botrun-c/package.json +68 -0
  327. package/botrun-c/pnpm-lock.yaml +10198 -0
  328. package/botrun-c/pnpm-workspace.yaml +6 -0
  329. package/botrun-c/prompts/BOTRUN-1.md +13 -0
  330. package/botrun-c/prompts/BOTRUN-2.md +70 -0
  331. package/botrun-c/prompts/BOTRUN-3.md +139 -0
  332. package/botrun-c/prototypes/firestore-gax-debug/package-lock.json +1204 -0
  333. package/botrun-c/prototypes/firestore-gax-debug/package.json +12 -0
  334. package/botrun-c/prototypes/firestore-gax-debug/pnpm-workspace.yaml +2 -0
  335. package/botrun-c/prototypes/firestore-gax-debug/test.js +98 -0
  336. package/botrun-c/prototypes/taiwan-haiku/README.md +93 -0
  337. package/botrun-c/prototypes/taiwan-haiku/index.ts +139 -0
  338. package/botrun-c/prototypes/taiwan-haiku/package.json +23 -0
  339. package/botrun-c/prototypes/taiwan-haiku/pnpm-lock.yaml +730 -0
  340. package/botrun-c/prototypes/taiwan-haiku/test-vertex-direct.ts +83 -0
  341. package/botrun-c/prototypes/taiwan-haiku/tsconfig.json +18 -0
  342. package/botrun-c/prototypes/web-search/FINDINGS-STAGE-1.md +48 -0
  343. package/botrun-c/prototypes/web-search/README.md +46 -0
  344. package/botrun-c/prototypes/web-search/VERIFICATION-REPORT.md +310 -0
  345. package/botrun-c/prototypes/web-search/package-lock.json +595 -0
  346. package/botrun-c/prototypes/web-search/package.json +18 -0
  347. package/botrun-c/prototypes/web-search/stage-1.1-basic-connection.js +123 -0
  348. package/botrun-c/prototypes/web-search/stage-1.2-with-websearch.js +154 -0
  349. package/botrun-c/prototypes/web-search/stage-1.3-search-query.js +192 -0
  350. package/botrun-c/prototypes/web-search/stage-2-agent-sdk-websearch.js +265 -0
  351. package/botrun-c/runtime-scripts/env-detect.sh +64 -0
  352. package/botrun-c/scripts/github-collaborator-manager.sh +297 -0
  353. package/botrun-c/scripts/github-collaborator-manager.ts +325 -0
  354. package/botrun-c/scripts/manage-collaborators.sh +91 -0
  355. package/botrun-c/scripts/setup-secrets.sh +202 -0
  356. package/botrun-c/scripts/stress-test-17-users.sh +113 -0
  357. package/botrun-c/scripts/stress-test-api.sh +119 -0
  358. package/botrun-c/scripts/stress-test-full-report.sh +385 -0
  359. package/botrun-c/specs/infra-vm/design.md +0 -0
  360. package/botrun-c/specs/share-skill/design.md +1146 -0
  361. package/botrun-c/specs/share-skill/tasks.md +444 -0
  362. package/botrun-c/stress-test-results/20260121-162630/config.json +7 -0
  363. package/botrun-c/stress-test-results/20260121-162630/user-1-status.txt +1 -0
  364. package/botrun-c/stress-test-results/20260121-162630/user-1-timing.txt +1 -0
  365. package/botrun-c/stress-test-results/20260121-162630/user-1.json +2 -0
  366. package/botrun-c/stress-test-results/20260121-162646/config.json +7 -0
  367. package/botrun-c/stress-test-results/20260121-162646/user-1-status.txt +1 -0
  368. package/botrun-c/stress-test-results/20260121-162646/user-1-timing.txt +1 -0
  369. package/botrun-c/stress-test-results/20260121-162646/user-1.json +2 -0
  370. package/botrun-c/stress-test-results/20260121-162646/user-10-status.txt +1 -0
  371. package/botrun-c/stress-test-results/20260121-162646/user-10-timing.txt +1 -0
  372. package/botrun-c/stress-test-results/20260121-162646/user-10.json +2 -0
  373. package/botrun-c/stress-test-results/20260121-162646/user-11-status.txt +1 -0
  374. package/botrun-c/stress-test-results/20260121-162646/user-11-timing.txt +1 -0
  375. package/botrun-c/stress-test-results/20260121-162646/user-11.json +2 -0
  376. package/botrun-c/stress-test-results/20260121-162646/user-12-status.txt +1 -0
  377. package/botrun-c/stress-test-results/20260121-162646/user-12-timing.txt +1 -0
  378. package/botrun-c/stress-test-results/20260121-162646/user-12.json +2 -0
  379. package/botrun-c/stress-test-results/20260121-162646/user-13-status.txt +1 -0
  380. package/botrun-c/stress-test-results/20260121-162646/user-13-timing.txt +1 -0
  381. package/botrun-c/stress-test-results/20260121-162646/user-13.json +2 -0
  382. package/botrun-c/stress-test-results/20260121-162646/user-14-status.txt +1 -0
  383. package/botrun-c/stress-test-results/20260121-162646/user-14-timing.txt +1 -0
  384. package/botrun-c/stress-test-results/20260121-162646/user-14.json +2 -0
  385. package/botrun-c/stress-test-results/20260121-162646/user-15-status.txt +1 -0
  386. package/botrun-c/stress-test-results/20260121-162646/user-15-timing.txt +1 -0
  387. package/botrun-c/stress-test-results/20260121-162646/user-15.json +2 -0
  388. package/botrun-c/stress-test-results/20260121-162646/user-16-status.txt +1 -0
  389. package/botrun-c/stress-test-results/20260121-162646/user-16-timing.txt +1 -0
  390. package/botrun-c/stress-test-results/20260121-162646/user-16.json +2 -0
  391. package/botrun-c/stress-test-results/20260121-162646/user-17-status.txt +1 -0
  392. package/botrun-c/stress-test-results/20260121-162646/user-17-timing.txt +1 -0
  393. package/botrun-c/stress-test-results/20260121-162646/user-17.json +2 -0
  394. package/botrun-c/stress-test-results/20260121-162646/user-2-status.txt +1 -0
  395. package/botrun-c/stress-test-results/20260121-162646/user-2-timing.txt +1 -0
  396. package/botrun-c/stress-test-results/20260121-162646/user-2.json +2 -0
  397. package/botrun-c/stress-test-results/20260121-162646/user-3-status.txt +1 -0
  398. package/botrun-c/stress-test-results/20260121-162646/user-3-timing.txt +1 -0
  399. package/botrun-c/stress-test-results/20260121-162646/user-3.json +2 -0
  400. package/botrun-c/stress-test-results/20260121-162646/user-4-status.txt +1 -0
  401. package/botrun-c/stress-test-results/20260121-162646/user-4-timing.txt +1 -0
  402. package/botrun-c/stress-test-results/20260121-162646/user-4.json +2 -0
  403. package/botrun-c/stress-test-results/20260121-162646/user-5-status.txt +1 -0
  404. package/botrun-c/stress-test-results/20260121-162646/user-5-timing.txt +1 -0
  405. package/botrun-c/stress-test-results/20260121-162646/user-5.json +2 -0
  406. package/botrun-c/stress-test-results/20260121-162646/user-6-status.txt +1 -0
  407. package/botrun-c/stress-test-results/20260121-162646/user-6-timing.txt +1 -0
  408. package/botrun-c/stress-test-results/20260121-162646/user-6.json +2 -0
  409. package/botrun-c/stress-test-results/20260121-162646/user-7-status.txt +1 -0
  410. package/botrun-c/stress-test-results/20260121-162646/user-7-timing.txt +1 -0
  411. package/botrun-c/stress-test-results/20260121-162646/user-7.json +2 -0
  412. package/botrun-c/stress-test-results/20260121-162646/user-8-status.txt +1 -0
  413. package/botrun-c/stress-test-results/20260121-162646/user-8-timing.txt +1 -0
  414. package/botrun-c/stress-test-results/20260121-162646/user-8.json +2 -0
  415. package/botrun-c/stress-test-results/20260121-162646/user-9-status.txt +1 -0
  416. package/botrun-c/stress-test-results/20260121-162646/user-9-timing.txt +1 -0
  417. package/botrun-c/stress-test-results/20260121-162646/user-9.json +2 -0
  418. package/botrun-c/stress-test-results/20260121-163148/REPORT.html +344 -0
  419. package/botrun-c/stress-test-results/20260121-163148/REPORT.md +93 -0
  420. package/botrun-c/stress-test-results/20260121-163148/REPORT.pdf +0 -0
  421. package/botrun-c/stress-test-results/20260121-163148/config.json +7 -0
  422. package/botrun-c/stress-test-results/20260121-163148/summary.json +26 -0
  423. package/botrun-c/stress-test-results/20260121-163148/user-1-status.txt +1 -0
  424. package/botrun-c/stress-test-results/20260121-163148/user-1-timing.txt +1 -0
  425. package/botrun-c/stress-test-results/20260121-163148/user-1.json +206 -0
  426. package/botrun-c/stress-test-results/20260121-163148/user-10-status.txt +1 -0
  427. package/botrun-c/stress-test-results/20260121-163148/user-10-timing.txt +1 -0
  428. package/botrun-c/stress-test-results/20260121-163148/user-10.json +110 -0
  429. package/botrun-c/stress-test-results/20260121-163148/user-11-status.txt +1 -0
  430. package/botrun-c/stress-test-results/20260121-163148/user-11-timing.txt +1 -0
  431. package/botrun-c/stress-test-results/20260121-163148/user-11.json +104 -0
  432. package/botrun-c/stress-test-results/20260121-163148/user-12-status.txt +1 -0
  433. package/botrun-c/stress-test-results/20260121-163148/user-12-timing.txt +1 -0
  434. package/botrun-c/stress-test-results/20260121-163148/user-12.json +98 -0
  435. package/botrun-c/stress-test-results/20260121-163148/user-13-status.txt +1 -0
  436. package/botrun-c/stress-test-results/20260121-163148/user-13-timing.txt +1 -0
  437. package/botrun-c/stress-test-results/20260121-163148/user-13.json +68 -0
  438. package/botrun-c/stress-test-results/20260121-163148/user-14-status.txt +1 -0
  439. package/botrun-c/stress-test-results/20260121-163148/user-14-timing.txt +1 -0
  440. package/botrun-c/stress-test-results/20260121-163148/user-14.json +116 -0
  441. package/botrun-c/stress-test-results/20260121-163148/user-15-status.txt +1 -0
  442. package/botrun-c/stress-test-results/20260121-163148/user-15-timing.txt +1 -0
  443. package/botrun-c/stress-test-results/20260121-163148/user-15.json +131 -0
  444. package/botrun-c/stress-test-results/20260121-163148/user-16-status.txt +1 -0
  445. package/botrun-c/stress-test-results/20260121-163148/user-16-timing.txt +1 -0
  446. package/botrun-c/stress-test-results/20260121-163148/user-16.json +110 -0
  447. package/botrun-c/stress-test-results/20260121-163148/user-17-status.txt +1 -0
  448. package/botrun-c/stress-test-results/20260121-163148/user-17-timing.txt +1 -0
  449. package/botrun-c/stress-test-results/20260121-163148/user-17.json +116 -0
  450. package/botrun-c/stress-test-results/20260121-163148/user-2-status.txt +1 -0
  451. package/botrun-c/stress-test-results/20260121-163148/user-2-timing.txt +1 -0
  452. package/botrun-c/stress-test-results/20260121-163148/user-2.json +98 -0
  453. package/botrun-c/stress-test-results/20260121-163148/user-3-status.txt +1 -0
  454. package/botrun-c/stress-test-results/20260121-163148/user-3-timing.txt +1 -0
  455. package/botrun-c/stress-test-results/20260121-163148/user-3.json +62 -0
  456. package/botrun-c/stress-test-results/20260121-163148/user-4-status.txt +1 -0
  457. package/botrun-c/stress-test-results/20260121-163148/user-4-timing.txt +1 -0
  458. package/botrun-c/stress-test-results/20260121-163148/user-4.json +113 -0
  459. package/botrun-c/stress-test-results/20260121-163148/user-5-status.txt +1 -0
  460. package/botrun-c/stress-test-results/20260121-163148/user-5-timing.txt +1 -0
  461. package/botrun-c/stress-test-results/20260121-163148/user-5.json +83 -0
  462. package/botrun-c/stress-test-results/20260121-163148/user-6-status.txt +1 -0
  463. package/botrun-c/stress-test-results/20260121-163148/user-6-timing.txt +1 -0
  464. package/botrun-c/stress-test-results/20260121-163148/user-6.json +125 -0
  465. package/botrun-c/stress-test-results/20260121-163148/user-7-status.txt +1 -0
  466. package/botrun-c/stress-test-results/20260121-163148/user-7-timing.txt +1 -0
  467. package/botrun-c/stress-test-results/20260121-163148/user-7.json +62 -0
  468. package/botrun-c/stress-test-results/20260121-163148/user-8-status.txt +1 -0
  469. package/botrun-c/stress-test-results/20260121-163148/user-8-timing.txt +1 -0
  470. package/botrun-c/stress-test-results/20260121-163148/user-8.json +41 -0
  471. package/botrun-c/stress-test-results/20260121-163148/user-9-status.txt +1 -0
  472. package/botrun-c/stress-test-results/20260121-163148/user-9-timing.txt +1 -0
  473. package/botrun-c/stress-test-results/20260121-163148/user-9.json +53 -0
  474. package/botrun-c/test-merge.md +1 -0
  475. package/botrun-c/version.txt +1 -0
  476. package/botrun-c/web/.version +1 -0
  477. package/botrun-c/web/ALLOW-PUBLIC-ACCESS.md +57 -0
  478. package/botrun-c/web/FINAL-SETUP-STEPS.md +71 -0
  479. package/botrun-c/web/FIREBASE-MANUAL-STEPS.md +41 -0
  480. package/botrun-c/web/QUICK-SETUP-HELPER.md +79 -0
  481. package/botrun-c/web/README.md +162 -0
  482. package/botrun-c/web/__tests__/image-extractor.test.ts +147 -0
  483. package/botrun-c/web/__tests__/useGitHub.test.ts +245 -0
  484. package/botrun-c/web/app/favicon.ico +0 -0
  485. package/botrun-c/web/app/globals.css +215 -0
  486. package/botrun-c/web/app/image-preview/page.tsx +213 -0
  487. package/botrun-c/web/app/layout.tsx +46 -0
  488. package/botrun-c/web/app/page.tsx +45 -0
  489. package/botrun-c/web/components/CapacitorProvider.tsx +43 -0
  490. package/botrun-c/web/components/ChatPage.tsx +1736 -0
  491. package/botrun-c/web/components/ConversationList.tsx +237 -0
  492. package/botrun-c/web/components/ConversationListItem.tsx +121 -0
  493. package/botrun-c/web/components/LoginPage.tsx +212 -0
  494. package/botrun-c/web/components/Providers.tsx +12 -0
  495. package/botrun-c/web/components/StatusBarProvider.tsx +16 -0
  496. package/botrun-c/web/components/attachment-preview.tsx +193 -0
  497. package/botrun-c/web/components/botrun-incubator/BotrunIncubator.tsx +266 -0
  498. package/botrun-c/web/components/botrun-incubator/index.ts +1 -0
  499. package/botrun-c/web/components/chat-input.tsx +1251 -0
  500. package/botrun-c/web/components/chat-message.tsx +598 -0
  501. package/botrun-c/web/components/drop-zone.tsx +143 -0
  502. package/botrun-c/web/components/gdrive/gdrive-add-dialog.tsx +254 -0
  503. package/botrun-c/web/components/gdrive/gdrive-drawer.tsx +236 -0
  504. package/botrun-c/web/components/gdrive/gdrive-selector.tsx +226 -0
  505. package/botrun-c/web/components/gdrive/index.ts +7 -0
  506. package/botrun-c/web/components/generated-image-card.tsx +363 -0
  507. package/botrun-c/web/components/github/GitHubConnect.tsx +366 -0
  508. package/botrun-c/web/components/github/index.ts +2 -0
  509. package/botrun-c/web/components/import-skill-dialog.tsx +208 -0
  510. package/botrun-c/web/components/scroll-to-bottom-button.tsx +90 -0
  511. package/botrun-c/web/components/share-skill-dialog.tsx +175 -0
  512. package/botrun-c/web/components/skills-editor.tsx +443 -0
  513. package/botrun-c/web/components/skills-manager-drawer.tsx +586 -0
  514. package/botrun-c/web/components/smart-button-group.tsx +132 -0
  515. package/botrun-c/web/config/smart-buttons.ts +295 -0
  516. package/botrun-c/web/config/welcome-messages.ts +29 -0
  517. package/botrun-c/web/contexts/AuthContext.tsx +220 -0
  518. package/botrun-c/web/hooks/use-toast.ts +187 -0
  519. package/botrun-c/web/hooks/useAppStoreUpdate.ts +356 -0
  520. package/botrun-c/web/hooks/useAppVersion.ts +113 -0
  521. package/botrun-c/web/hooks/useAttachments.ts +269 -0
  522. package/botrun-c/web/hooks/useAuthToken.ts +59 -0
  523. package/botrun-c/web/hooks/useAutoWelcome.ts +89 -0
  524. package/botrun-c/web/hooks/useCapacitorPlatform.ts +113 -0
  525. package/botrun-c/web/hooks/useCapawesomeLiveUpdate.ts +149 -0
  526. package/botrun-c/web/hooks/useClaudeModel.ts +118 -0
  527. package/botrun-c/web/hooks/useConversation.ts +115 -0
  528. package/botrun-c/web/hooks/useConversations.ts +235 -0
  529. package/botrun-c/web/hooks/useGdriveFolders.ts +199 -0
  530. package/botrun-c/web/hooks/useGdriveSync.ts +107 -0
  531. package/botrun-c/web/hooks/useGitHub.ts +409 -0
  532. package/botrun-c/web/hooks/useScrollToBottom.ts +150 -0
  533. package/botrun-c/web/hooks/useStatusBar.ts +42 -0
  534. package/botrun-c/web/hooks/useUserPlan.ts +153 -0
  535. package/botrun-c/web/lib/api-config.ts +162 -0
  536. package/botrun-c/web/lib/api-url.ts +62 -0
  537. package/botrun-c/web/lib/api.ts +105 -0
  538. package/botrun-c/web/lib/attachment-utils.ts +168 -0
  539. package/botrun-c/web/lib/build-version.ts +11 -0
  540. package/botrun-c/web/lib/clipboard-utils.ts +199 -0
  541. package/botrun-c/web/lib/constants.ts +62 -0
  542. package/botrun-c/web/lib/conversation-storage.ts +324 -0
  543. package/botrun-c/web/lib/firebase-capacitor.ts +135 -0
  544. package/botrun-c/web/lib/firebase.ts +137 -0
  545. package/botrun-c/web/lib/firestore-auth.ts +61 -0
  546. package/botrun-c/web/lib/firestore-auth.ts.migration-bak +319 -0
  547. package/botrun-c/web/lib/image-extractor.ts +156 -0
  548. package/botrun-c/web/lib/path-utils.ts +48 -0
  549. package/botrun-c/web/lib/rehype-del-to-mark.ts +19 -0
  550. package/botrun-c/web/lib/upload-service.ts +326 -0
  551. package/botrun-c/web/lib/utils.ts +6 -0
  552. package/botrun-c/web/next.config.js +49 -0
  553. package/botrun-c/web/package-lock.json +6711 -0
  554. package/botrun-c/web/package.json +63 -0
  555. package/botrun-c/web/postcss.config.js +6 -0
  556. package/botrun-c/web/public/apple_icon.png +0 -0
  557. package/botrun-c/web/public/google_icon.png +0 -0
  558. package/botrun-c/web/public/logo-48-small.png +0 -0
  559. package/botrun-c/web/public/logo-48.png +0 -0
  560. package/botrun-c/web/scripts/generate-version.js +36 -0
  561. package/botrun-c/web/scripts/update-build-version.js +41 -0
  562. package/botrun-c/web/tailwind.config.ts +80 -0
  563. package/botrun-c/web/test-welcome-message.mjs +115 -0
  564. package/botrun-c/web/tsconfig.json +42 -0
  565. package/botrun-c/web/types/agent.ts +6 -0
  566. package/botrun-c/web/types/attachment.ts +39 -0
  567. package/botrun-c/web/types/conversation.ts +68 -0
  568. package/botrun-c/web/types/flutter.d.ts +6 -0
  569. package/botrun-c/web/types/project.ts +41 -0
  570. package/botrun-c/web/types/skills.ts +13 -0
  571. package/botrun-c/web//350/250/272/346/226/267-Skills-/345/211/215/347/253/257/351/241/257/347/244/272/345/225/217/351/241/214.md +83 -0
  572. package/lib/prompt/prompts/zero-framework/fullstack.md +17 -0
  573. package/lib/prompt/prompts/zero-framework/segment.md +13 -0
  574. package/package.json +1 -1
@@ -0,0 +1,365 @@
1
+ # ================================
2
+ # Unified Dockerfile for GCP Cloud Run with pnpm Workspace (Optimized)
3
+ # Next.js Static Export + Hono API backend + Skills (v5.1201)
4
+ #
5
+ # ๐ŸŽฏ v5.1201 ้‡ๅคง่ฎŠๆ›ด๏ผšMCP Servers ๅ…จ้ขๆ”น็”จ Skills
6
+ # - ๆ‰€ๆœ‰ MCP Servers ๅทฒ่ฝ‰ๆ›็‚บ Skills๏ผˆไฝๆ–ผ .claude/skills/๏ผ‰
7
+ # - Skills ้€้Ž Bash ๅŸท่กŒ Node.js ่…ณๆœฌ
8
+ # - ๅ•Ÿๅ‹•้€Ÿๅบฆๅคงๅน…ๆๅ‡๏ผˆ็„ก้œ€ๅ•Ÿๅ‹• MCP Server ้€ฒ็จ‹๏ผ‰
9
+ #
10
+ # ๐ŸŽฏ pnpm Workspace ๆœ€ไฝณๅฏฆ่ธ๏ผš
11
+ # โœ… ๅœจๅŒไธ€ๅ€‹ stage ไฝฟ็”จไพ่ณด๏ผˆไธ่ทจ stage COPY๏ผ‰
12
+ # - frontend-builder, api-builder ้ƒฝๅพž deps ็นผๆ‰ฟ
13
+ # - ไฟ็•™ๅฎŒๆ•ด็š„ .pnpm store ๅ’Œ symlinks
14
+ # โœ… ไฝฟ็”จ pnpm deploy ้ƒจ็ฝฒ production
15
+ # - ๆ™บๆ…ง่งฃๆžๅฎŒๆ•ด็š„ workspace ไพ่ณดๅœ–
16
+ # - ่‡ชๅ‹•ๅŽป้‡๏ผŒๅช่ค‡่ฃฝ้œ€่ฆ็š„ๅŒ…๏ผˆ็„ก้‡่ค‡๏ผ‰
17
+ # - --no-optional: ๆŽ’้™ค sharp ๅœ–็‰‡่™•็† (~60MB)
18
+ # - ้ซ”็ฉๆฏ”ๆ‰‹ๅ‹• COPY ๅฐ 60-70%
19
+ #
20
+ # ๐Ÿš€ ๅ„ชๅŒ–ๆˆๆžœ๏ผš
21
+ # - MCP Servers ๅทฒๅ…จ้ขๆ”น็”จ Skills๏ผˆv5.1201๏ผ‰
22
+ # - Skills symlink ๅ„ชๅŒ–๏ผš็ฏ€็œ ~71MB๏ผˆ้ฟๅ…้‡่ค‡่ค‡่ฃฝๅˆฐ /home/nodejs/.claude/skills๏ผ‰
23
+ # - Skip optional dependencies: ็ฏ€็œ 60MB (sharp)
24
+ # - Multi-stage build + cache mount: ๅปบ็ฝฎ้€Ÿๅบฆๆๅ‡ 5-10 ๅ€
25
+ # - Layer caching optimization: ๆŒ‰่ฎŠๅ‹•้ ป็އๆŽ’ๅบ
26
+ #
27
+ # ๐Ÿ“Š Expected Final Size: ~150MB๏ผˆSkills symlink ๅ„ชๅŒ–ๅพŒ๏ผ‰
28
+ # ================================
29
+
30
+ # ============================================================================
31
+ # Stage 0: pnpm Setup (ๅ…ฑ็”จ stage)
32
+ # ============================================================================
33
+ FROM node:22-alpine AS base
34
+ ENV PNPM_HOME="/pnpm"
35
+ ENV PATH="$PNPM_HOME:$PATH"
36
+ RUN corepack enable && corepack prepare pnpm@9.15.0 --activate
37
+
38
+ # ============================================================================
39
+ # Stage 1: Install ALL Dependencies (ไฟ็•™ๅฎŒๆ•ด็š„ pnpm ็ตๆง‹)
40
+ # ๐Ÿš€ ๆ–นๆกˆ 3๏ผšLayer ๅ„ชๅŒ–็ญ–็•ฅ
41
+ # - ไพ่ฎŠๅ‹•้ ป็އๆŽ’ๅบ๏ผšlockfile > workspace config > package.json
42
+ # - lockfile ๆ”น่ฎŠๆ™‚ๆ‰้‡ๆ–ฐๅฎ‰่ฃๆ‰€ๆœ‰ไพ่ณด
43
+ # - package.json ๆ”น่ฎŠๆ™‚ๅฏไปฅๅพฉ็”จ lockfile layer๏ผˆๅฟซๅ–ๅ‘ฝไธญ็އๆ›ด้ซ˜๏ผ‰
44
+ # ============================================================================
45
+ FROM base AS deps
46
+ WORKDIR /app
47
+
48
+ # ่ค‡่ฃฝ .npmrc๏ผˆๅŒ…ๅซ Capawesome Registry ่ช่ญ‰๏ผ‰
49
+ COPY .npmrc ./
50
+
51
+ # ๐ŸŽฏ Layer 1: Lockfile๏ผˆๆœ€ๅฐ‘ๆ”น่ฎŠ๏ผŒๆœ€ๅคงๅฟซๅ–ๅ‘ฝไธญ็އ๏ผ‰
52
+ # pnpm-lock.yaml ๅชๆœ‰ๅœจไพ่ณด็‰ˆๆœฌ่ฎŠๆ›ดๆ™‚ๆ‰ๆ”น่ฎŠ
53
+ # ้€™ไธ€ๅฑคๅฟซๅ–ๅ‘ฝไธญ็އๆœ€้ซ˜๏ผˆ~90%๏ผ‰
54
+ COPY pnpm-lock.yaml ./
55
+
56
+ # ๐ŸŽฏ Layer 2: Workspace ้…็ฝฎ๏ผˆๅถ็ˆพๆ”น่ฎŠ๏ผ‰
57
+ # pnpm-workspace.yaml ๅ’Œ root package.json ๅพˆๅฐ‘ๆ”น่ฎŠ
58
+ COPY pnpm-workspace.yaml package.json ./
59
+
60
+ # ๐ŸŽฏ Layer 3: ๆ‰€ๆœ‰ๅญๅฐˆๆกˆ package.json๏ผˆ็ถ“ๅธธๆ”น่ฎŠ๏ผ‰
61
+ # ๆŒ‰ๅญ—ๆฏ้ †ๅบๆŽ’ๅˆ—๏ผŒไพฟๆ–ผ็ถญ่ญท
62
+ # API๏ผˆ็ถ“ๅธธๆ”น่ฎŠ๏ผ‰
63
+ COPY api/package.json ./api/
64
+
65
+ # MCP Servers๏ผˆv5.1201 ๅทฒๅ…จ้ขๆ”น็”จ Skills๏ผŒไปฅไธ‹ COPY ไฟ็•™ไพ›ๅ›ž้€€ไฝฟ็”จไฝ†ๅทฒ่จป่งฃ๏ผ‰
66
+ # COPY botrun-mcp-servers/audio-transcribe/package.json ./botrun-mcp-servers/audio-transcribe/
67
+ # COPY botrun-mcp-servers/botrun-bash/package.json ./botrun-mcp-servers/botrun-bash/ # ๅทฒ็งป่‡ณ bak/
68
+ # COPY botrun-mcp-servers/botrun-image-generator/package.json ./botrun-mcp-servers/botrun-image-generator/
69
+ # COPY botrun-mcp-servers/botrun-web-search/package.json ./botrun-mcp-servers/botrun-web-search/
70
+ # COPY botrun-mcp-servers/multimodal-reader/package.json ./botrun-mcp-servers/multimodal-reader/
71
+ # COPY botrun-mcp-servers/pdf-split/package.json ./botrun-mcp-servers/pdf-split/ # ๅทฒ็งป่‡ณ bak/
72
+ # COPY botrun-mcp-servers/pdf-to-text/package.json ./botrun-mcp-servers/pdf-to-text/ # ๅทฒ็งป่‡ณ bak/
73
+ # COPY botrun-mcp-servers/secure-rg/package.json ./botrun-mcp-servers/secure-rg/
74
+ # COPY botrun-mcp-servers/secure-read/package.json ./botrun-mcp-servers/secure-read/
75
+ # COPY botrun-mcp-servers/tree-view/package.json ./botrun-mcp-servers/tree-view/
76
+
77
+ # Web๏ผˆ็ถ“ๅธธๆ”น่ฎŠ๏ผ‰
78
+ COPY web/package.json ./web/
79
+
80
+ # ๐ŸŽฏ Layer 4: ๅฎ‰่ฃๆ‰€ๆœ‰ไพ่ณด๏ผˆๅŒ…ๅซๅฎŒๆ•ด็š„ .pnpm store๏ผ‰
81
+ # ไฝฟ็”จ pnpm cache mount ๅŠ ้€Ÿ๏ผˆ่ˆ‡้ ็ซฏๅฟซๅ–ไบ’่ฃœ๏ผ‰
82
+ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
83
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
84
+ echo "๐Ÿ“ฆ [pnpm install] Installing all dependencies..." && \
85
+ echo " Strategy: Frozen lockfile + layer optimization" && \
86
+ echo " Cache: Local mount + Remote registry (dual-layer)" && \
87
+ echo " pnpm.overrides: Forcing version unification" && \
88
+ echo " Fetch timeout: 300000ms (5 minutes)" && \
89
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
90
+ pnpm install --frozen-lockfile --fetch-timeout 300000 && \
91
+ echo "" && \
92
+ echo "๐Ÿ“Š [Analysis] node_modules structure:" && \
93
+ du -sh node_modules .pnpm 2>/dev/null || true && \
94
+ echo "โœ… Dependencies installed (optimized for cache reuse)"
95
+
96
+ # ============================================================================
97
+ # Stage 2: Build Next.js Frontend (ๅœจๅŒไธ€ๅ€‹ stage ๅ…งไฝฟ็”จ deps)
98
+ # ============================================================================
99
+ FROM deps AS frontend-builder
100
+
101
+ # ๐Ÿ”ข Accept version build argument
102
+ ARG APP_VERSION=unknown
103
+ ARG NEXT_PUBLIC_DEV_MODE
104
+ ARG NEXT_PUBLIC_FIREBASE_API_KEY
105
+ ARG NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
106
+ ARG NEXT_PUBLIC_FIREBASE_PROJECT_ID
107
+ ARG NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
108
+ ARG NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID
109
+ ARG NEXT_PUBLIC_FIREBASE_APP_ID
110
+ ARG NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID
111
+
112
+ # Set environment variables for build
113
+ ENV APP_VERSION=$APP_VERSION
114
+ ENV NEXT_PUBLIC_DEV_MODE=$NEXT_PUBLIC_DEV_MODE
115
+ ENV NEXT_PUBLIC_FIREBASE_API_KEY=$NEXT_PUBLIC_FIREBASE_API_KEY
116
+ ENV NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=$NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
117
+ ENV NEXT_PUBLIC_FIREBASE_PROJECT_ID=$NEXT_PUBLIC_FIREBASE_PROJECT_ID
118
+ ENV NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=$NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
119
+ ENV NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=$NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID
120
+ ENV NEXT_PUBLIC_FIREBASE_APP_ID=$NEXT_PUBLIC_FIREBASE_APP_ID
121
+ ENV NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=$NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID
122
+
123
+ # ่ค‡่ฃฝๆบ็ขผ
124
+ COPY web ./web
125
+
126
+ # Build Next.js
127
+ WORKDIR /app/web
128
+ RUN --mount=type=cache,target=/app/web/.next/cache \
129
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
130
+ echo "๐Ÿ” [Frontend Build]" && \
131
+ echo " APP_VERSION: ${APP_VERSION}" && \
132
+ echo " Using pnpm workspace (symlinks preserved)" && \
133
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
134
+ NEXT_TELEMETRY_DISABLED=1 pnpm run build && \
135
+ echo "โœ… Frontend build completed"
136
+
137
+ # ============================================================================
138
+ # Stage 3: Build Skills Dependencies (v5.1201 ๆ–ฐๅขž)
139
+ # ============================================================================
140
+ # Skills ้€้Ž Bash ๅŸท่กŒ Node.js ่…ณๆœฌ๏ผŒ้œ€่ฆๅฎ‰่ฃๅ„่‡ช็š„ npm ไพ่ณด
141
+ # ๆœ‰ไพ่ณด็š„ Skills๏ผš
142
+ # - ๅœ–็‰‡็”ŸๆˆๆŠ€่ƒฝ: @google-cloud/storage, @google/genai
143
+ # - ๅคšๆจกๆ…‹้–ฑ่ฎ€ๆŠ€่ƒฝ: @anthropic-ai/vertex-sdk, glob
144
+ # - ๅฎ‰ๅ…จ่ฎ€ๅ–ๆŠ€่ƒฝ: glob
145
+ # - ็ถฒ่ทฏๆœๅฐ‹ๆŠ€่ƒฝ: @anthropic-ai/vertex-sdk
146
+ FROM base AS skills-deps
147
+ WORKDIR /app
148
+
149
+ # ่ค‡่ฃฝ Skills ็›ฎ้Œ„
150
+ COPY .claude/skills ./.claude/skills
151
+
152
+ # ๅฎ‰่ฃๅ„ Skill ็š„ไพ่ณด๏ผˆๅชๅฎ‰่ฃๆœ‰ package.json ไธ”ๆœ‰ dependencies ็š„๏ผ‰
153
+ RUN echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
154
+ echo "๐Ÿ“ฆ [Skills] Installing Skills dependencies..." && \
155
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
156
+ for skill_dir in .claude/skills/*/scripts; do \
157
+ if [ -f "$skill_dir/package.json" ]; then \
158
+ echo "๐Ÿ“ฆ Installing: $skill_dir"; \
159
+ cd "/app/$skill_dir" && npm install --omit=dev 2>/dev/null || true; \
160
+ cd /app; \
161
+ fi; \
162
+ done && \
163
+ echo "" && \
164
+ echo "๐Ÿ“Š [Verification] Skills with node_modules:" && \
165
+ find .claude/skills -name "node_modules" -type d 2>/dev/null && \
166
+ echo "" && \
167
+ echo "โœ… Skills dependencies installed"
168
+
169
+ # ============================================================================
170
+ # Stage 4: Build API (ๅœจๅŒไธ€ๅ€‹ stage ๅ…งไฝฟ็”จ deps)
171
+ # ============================================================================
172
+ FROM deps AS api-builder
173
+
174
+ # ่ค‡่ฃฝ API ๆบ็ขผ
175
+ COPY api ./api
176
+ COPY .claude ./.claude
177
+
178
+ # ๐Ÿ”ง ไฟฎๅพฉ node_modules symlinks๏ผˆCOPY ๆœƒ่ฆ†่“‹ deps ไธญๅปบ็ซ‹็š„ symlinks๏ผ‰
179
+ RUN pnpm install --offline --frozen-lockfile
180
+
181
+ # Build API (ๅพžๆ น็›ฎ้Œ„ๅŸท่กŒ๏ผŒไฝฟ็”จ pnpm workspace)
182
+ RUN echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
183
+ echo "๐Ÿ“ฆ [API] Building API server..." && \
184
+ echo " Strategy: pnpm workspace + shared node_modules" && \
185
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
186
+ pnpm --filter botrun-c-api run build && \
187
+ echo "๐Ÿ“Š [Verification] Build result:" && \
188
+ ls -lh api/dist/ && \
189
+ echo "โœ… API compiled successfully"
190
+
191
+ # ============================================================================
192
+ # Stage 5: Prepare Production Dependencies - ๆœ€ๅฐๅŒ–็ญ–็•ฅ
193
+ # ============================================================================
194
+ # ๐ŸŽฏ ๆœ€ๅฐๅŒ–็ญ–็•ฅ๏ผˆๅ–ไปฃ pnpm deploy๏ผ‰๏ผš
195
+ # - ไฝฟ็”จ workspace ็ตๆง‹ไฝ†ๅชๅฎ‰่ฃ API ็š„ production dependencies
196
+ # - ้ฟๅ…ๅฎ‰่ฃ Next.js, React, Capacitor ็ญ‰ๅ‰็ซฏ/Mobile ไพ่ณด
197
+ # - ็›ฎๆจ™๏ผš< 120MB๏ผˆ็›ธๆฏ” pnpm deploy ็š„ 988MB๏ผ‰
198
+
199
+ # ============================================================================
200
+ # Stage 5a: Prepare Production Dependencies - API only (ไฝฟ็”จ pnpm deploy)
201
+ # ============================================================================
202
+ FROM base AS prod-deps
203
+ WORKDIR /app
204
+
205
+ # ่ค‡่ฃฝ .npmrc๏ผˆๅŒ…ๅซ Capawesome Registry ่ช่ญ‰๏ผ‰
206
+ COPY .npmrc ./
207
+
208
+ # ๐Ÿ” ่ค‡่ฃฝๅฎŒๆ•ด็š„ workspace ็ตๆง‹๏ผˆpnpm deploy ้œ€่ฆ๏ผ‰
209
+ COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
210
+ COPY api/package.json ./api/
211
+
212
+ # ๐Ÿš€ ไฝฟ็”จ pnpm deploy๏ผšๆ™บๆ…ง่ค‡่ฃฝ API ็š„ production dependencies
213
+ # ๅ„ชๅ‹ข๏ผš
214
+ # 1. ๆญฃ็ขบ่งฃๆžๆ‰€ๆœ‰ไพ่ณด๏ผˆไธๆœƒ้บๆผ hono ็ญ‰ๅฅ—ไปถ๏ผ‰
215
+ # 2. ่‡ชๅ‹•ๅŽป้‡๏ผˆๆ„Ÿ่ฌ pnpm.overrides๏ผ‰
216
+ # 3. ๅช่ค‡่ฃฝ API ้œ€่ฆ็š„ไพ่ณด๏ผˆๆŽ’้™ค webใ€MCP Servers๏ผ‰
217
+ # 4. --prod: ่ทณ้Ž devDependencies
218
+ RUN --mount=type=cache,id=pnpm-prod,target=/pnpm/store \
219
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
220
+ echo "๐Ÿ“ฆ [pnpm deploy] Deploying API production dependencies..." && \
221
+ echo " Filter: botrun-c-api" && \
222
+ echo " Mode: --prod (no devDependencies)" && \
223
+ echo " Target: /tmp/api-deploy" && \
224
+ echo " Fetch timeout: 300000ms (5 minutes)" && \
225
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
226
+ pnpm --filter botrun-c-api deploy --prod --config.fetch-timeout=300000 /tmp/api-deploy && \
227
+ echo "" && \
228
+ echo "๐Ÿ“Š [Size] Production dependencies:" && \
229
+ du -sh /tmp/api-deploy/node_modules && \
230
+ echo "" && \
231
+ echo "๐Ÿ” [Verification] Checking key packages:" && \
232
+ echo -n " hono: " && \
233
+ if [ -d "/tmp/api-deploy/node_modules/hono" ]; then echo "โœ… Installed"; else echo "โŒ NOT FOUND"; fi && \
234
+ echo -n " @hono/node-server: " && \
235
+ if [ -d "/tmp/api-deploy/node_modules/@hono" ]; then echo "โœ… Installed"; else echo "โŒ NOT FOUND"; fi && \
236
+ echo "" && \
237
+ echo "โœ… API production dependencies deployed"
238
+
239
+ # ============================================================================
240
+ # Stage 5b: MCP Servers ๅฐˆๅฑฌไพ่ณด - DISABLED (v5.1201 ๅทฒๅ…จ้ขๆ”น็”จ Skills)
241
+ # ============================================================================
242
+ # MCP Servers ๅทฒๅ…จ้ข่ฝ‰ๆ›็‚บ Skills๏ผˆv5.1201๏ผ‰
243
+ # Skills ไฝๆ–ผ .claude/skills/ ็›ฎ้Œ„๏ผŒ้€้Ž Bash ๅŸท่กŒ Node.js ่…ณๆœฌ
244
+ # ไปฅไธ‹ stage ไฟ็•™ไพ›ๅƒ่€ƒ๏ผŒไฝ†ๅทฒๅœ็”จ
245
+ #
246
+ # FROM base AS mcp-deps
247
+ # WORKDIR /app
248
+ # COPY .npmrc ./
249
+ # COPY pnpm-lock.yaml ./
250
+ # COPY botrun-mcp-servers/*/package.json ./botrun-mcp-servers/
251
+ # RUN printf 'packages:\n - "botrun-mcp-servers/*"\n' > pnpm-workspace.yaml
252
+ # RUN pnpm install --prod
253
+
254
+ # ============================================================================
255
+ # Stage 6: Final Runtime Image
256
+ # ============================================================================
257
+ FROM node:22-alpine AS runner
258
+ WORKDIR /app
259
+
260
+ # ๅฎ‰่ฃ็ณป็ตฑๅทฅๅ…ท
261
+ RUN apk add --no-cache \
262
+ dumb-init \
263
+ bash \
264
+ qpdf \
265
+ ghostscript \
266
+ poppler-utils \
267
+ ripgrep \
268
+ ffmpeg \
269
+ unzip \
270
+ git \
271
+ python3 \
272
+ py3-pip
273
+
274
+ # ๅฎ‰่ฃ uv๏ผˆPython ๅฅ—ไปถ็ฎก็†ๅ™จ๏ผŒ็”จๆ–ผ Skills ๅŸท่กŒ Python ่…ณๆœฌ๏ผ‰
275
+ RUN pip3 install --break-system-packages uv && \
276
+ uv --version && \
277
+ echo "โœ… uv installed successfully"
278
+
279
+ # Create non-root user
280
+ RUN addgroup -g 1001 -S nodejs && \
281
+ adduser -S nodejs -u 1001 && \
282
+ mkdir -p /home/nodejs/.claude && \
283
+ chown -R nodejs:nodejs /home/nodejs/.claude
284
+
285
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
286
+ # ๐Ÿ“ฆ Layer Caching Optimization (ๆŒ‰่ฎŠๅ‹•้ ป็އๆŽ’ๅบ)
287
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
288
+ # ็ญ–็•ฅ๏ผš่ฎŠๅ‹•้ ป็އ่ถŠไฝŽ็š„่ถŠๆ—ฉ่ค‡่ฃฝ๏ผŒๆœ€ๅคงๅŒ– Docker layer cache ๅˆฉ็”จ็އ
289
+ #
290
+ # pnpm deploy ๅ„ชๅ‹ข๏ผš
291
+ # โœ… ๆ™บๆ…งๅŽป้‡๏ผšๅช่ค‡่ฃฝๅฏฆ้š›้œ€่ฆ็š„ๅŒ…๏ผˆ็„ก้‡่ค‡๏ผ‰
292
+ # โœ… ๆญฃ็ขบ symlinks๏ผšไฟ็•™ pnpm ็š„ไพ่ณด็ตๆง‹
293
+ # โœ… ้ซ”็ฉๆœ€ๅฐ๏ผšๆฏ”ๆ‰‹ๅ‹• COPY node_modules ๅฐ 30-40%
294
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
295
+
296
+ # Layer 1: API Production node_modules๏ผˆๅช้œ€่ฆ API ็š„ไพ่ณด๏ผŒpnpm deploy๏ผ‰
297
+ # ๐ŸŽฏ ๅพž pnpm deploy ็ตๆžœ่ค‡่ฃฝ๏ผˆๆญฃ็ขบๅŒ…ๅซๆ‰€ๆœ‰ไพ่ณด๏ผŒๅฆ‚ hono๏ผ‰
298
+ # ๐Ÿ”ฅ ้—œ้ตๅ„ชๅŒ–๏ผšๅช่ค‡่ฃฝ API ็š„ node_modules๏ผˆ< 120MB๏ผ‰
299
+ # ไธๆœƒๆœ‰ Next.js, React, Capacitor ็ญ‰ๅ‰็ซฏไพ่ณด๏ผˆ็œ็•ฅ 868MB๏ผ‰
300
+ COPY --from=prod-deps --chown=nodejs:nodejs /tmp/api-deploy/node_modules ./node_modules
301
+ COPY --from=prod-deps --chown=nodejs:nodejs /tmp/api-deploy/package.json ./package.json
302
+
303
+ # Layer 2: Static configuration
304
+ COPY --chown=nodejs:nodejs keys ./keys
305
+
306
+ # Layer 2b: Skills๏ผˆๅŒ…ๅซๅทฒๅฎ‰่ฃ็š„ npm ไพ่ณด๏ผ‰
307
+ # ๅพž skills-deps stage ่ค‡่ฃฝ๏ผˆๅทฒๅŸท่กŒ npm install๏ผ‰
308
+ # ๐ŸŽฏ v5.1201 ๅ„ชๅŒ–๏ผšไฝฟ็”จ symlink ้ฟๅ…้‡่ค‡่ค‡่ฃฝ๏ผˆ็ฏ€็œ ~71MB๏ผ‰
309
+ # - /app/.claude/skills - ๅฏฆ้š›็›ฎ้Œ„๏ผˆSkills Route + SKILLS_DIR ็’ฐๅขƒ่ฎŠๆ•ธ๏ผ‰
310
+ # - /home/nodejs/.claude/skills - symlink โ†’ /app/.claude/skills
311
+ # ๏ผˆClaude Agent SDK settingSources: ['user'] ้œ€่ฆๆญค่ทฏๅพ‘๏ผ‰
312
+ COPY --from=skills-deps --chown=nodejs:nodejs /app/.claude/skills ./.claude/skills
313
+ RUN ln -s /app/.claude/skills /home/nodejs/.claude/skills
314
+
315
+ # Layer 3: MCP Servers - DISABLED (v5.1201 ๅทฒๅ…จ้ขๆ”น็”จ Skills)
316
+ # MCP Servers ๅทฒๅ…จ้ข่ฝ‰ๆ›็‚บ Skills๏ผˆv5.1201๏ผ‰
317
+ # Skills ไฝๆ–ผ .claude/skills/ ็›ฎ้Œ„๏ผŒ้€้Ž Bash ๅŸท่กŒ Node.js ่…ณๆœฌ
318
+ # ไปฅไธ‹ COPY ไฟ็•™ไพ›ๅƒ่€ƒ๏ผŒไฝ†ๅทฒๅœ็”จ
319
+ #
320
+ # COPY --from=mcp-deps --chown=nodejs:nodejs /app/node_modules/.pnpm ./node_modules/.pnpm
321
+ # COPY --from=mcp-builder --chown=nodejs:nodejs /app/botrun-mcp-servers/secure-rg/dist ./botrun-mcp-servers/secure-rg/dist
322
+ # COPY --from=mcp-builder --chown=nodejs:nodejs /app/botrun-mcp-servers/secure-read/dist ./botrun-mcp-servers/secure-read/dist
323
+ # COPY --from=mcp-builder --chown=nodejs:nodejs /app/botrun-mcp-servers/tree-view/dist ./botrun-mcp-servers/tree-view/dist
324
+ # COPY --from=mcp-builder --chown=nodejs:nodejs /app/botrun-mcp-servers/audio-transcribe/dist ./botrun-mcp-servers/audio-transcribe/dist
325
+ # COPY --from=mcp-builder --chown=nodejs:nodejs /app/botrun-mcp-servers/multimodal-reader/dist ./botrun-mcp-servers/multimodal-reader/dist
326
+ # COPY --from=mcp-builder --chown=nodejs:nodejs /app/botrun-mcp-servers/botrun-web-search/dist ./botrun-mcp-servers/botrun-web-search/dist
327
+ # COPY --from=mcp-builder --chown=nodejs:nodejs /app/botrun-mcp-servers/botrun-image-generator/dist ./botrun-mcp-servers/botrun-image-generator/dist
328
+
329
+ # Layer 4: Runtime scripts๏ผˆ่ฎŠๅ‹•้ ป็އ๏ผšไฝŽ๏ผ‰
330
+ COPY --chown=nodejs:nodejs runtime-scripts ./runtime-scripts
331
+
332
+ # Layer 5: Frontend build๏ผˆ่ฎŠๅ‹•้ ป็އ๏ผš้ซ˜๏ผ‰
333
+ COPY --from=frontend-builder --chown=nodejs:nodejs /app/web/out ./web/public
334
+
335
+ # Layer 6: API compiled code๏ผˆ่ฎŠๅ‹•้ ป็އ๏ผš้ซ˜๏ผ‰
336
+ COPY --from=api-builder --chown=nodejs:nodejs /app/api/dist ./dist
337
+ COPY --chown=nodejs:nodejs api/src/init-data.sh ./dist/init-data.sh
338
+
339
+ # Layer 7: Version file๏ผˆ่ฎŠๅ‹•้ ป็އ๏ผšๆฏๆฌก้ƒจ็ฝฒ้ƒฝ่ฎŠ๏ผ‰
340
+ # ๐ŸŽฏ ๅ„ชๅŒ–๏ผšๆ”พๅœจๆœ€ๅพŒ๏ผŒ้ฟๅ…่ฆ–่ฆบไธŠ็œ‹่ตทไพ†ๆœƒๅฝฑ้Ÿฟๅ…ถไป– layers
341
+ # ๅฏฆ้š›ไธŠไธๅฝฑ้Ÿฟ COPY --from= ็š„ layers๏ผŒไฝ†้‚่ผฏๆ›ดๆธ…ๆ™ฐ
342
+ COPY --chown=nodejs:nodejs version.txt ./version.txt
343
+
344
+ # Make init-data.sh executable
345
+ USER root
346
+ RUN chmod +x /app/dist/init-data.sh
347
+ USER nodejs
348
+
349
+ # Version
350
+ ARG APP_VERSION=unknown
351
+ ENV APP_VERSION=$APP_VERSION
352
+
353
+ # Environment
354
+ EXPOSE 8080
355
+ ENV NODE_ENV=production
356
+ ENV PORT=8080
357
+ ENV NEXT_TELEMETRY_DISABLED=1
358
+ # ๐Ÿ”ง Skills ็’ฐๅขƒ่ฎŠๆ•ธ๏ผˆๆ–ฐๆ–นๆกˆ A ็ฐกๅŒ–็‰ˆ๏ผ‰
359
+ ENV OFFICIAL_SKILLS_DIR=/app/.claude/skills
360
+ ENV DATA_ROOT=/mnt/data
361
+
362
+ # Use dumb-init
363
+ ENTRYPOINT ["dumb-init", "--"]
364
+
365
+ CMD ["sh", "-c", "/app/dist/init-data.sh && echo '๐Ÿš€ [Startup] Starting production server...' && echo '๐Ÿ“ฆ [Startup] Node version:' $(node --version) && echo 'โฑ๏ธ [Startup] Timestamp:' $(date -u +%Y-%m-%dT%H:%M:%SZ) && echo '๐Ÿ”ง [Startup] Working directory:' $(pwd) && echo '๐ŸŽฏ [Startup] Executing: node dist/index.js' && node dist/index.js"]
@@ -0,0 +1,195 @@
1
+ # ================================
2
+ # Slim Dockerfile - ็งป้™คๆ‰€ๆœ‰ MCP Server ไพ่ณด
3
+ # Next.js Static Export + Hono API backend ONLY
4
+ #
5
+ # ๐ŸŽฏ ็›ฎ็š„๏ผšๆฏ”่ผƒ image ๅคงๅฐๅทฎ็•ฐ
6
+ # - ๅฎŒๅ…จ็งป้™ค 8 ๅ€‹ MCP Servers
7
+ # - ๅชไฟ็•™ API ๅ’Œ Frontend
8
+ # - ไธๅฎ‰่ฃไปปไฝ• MCP ไพ่ณด๏ผˆ@modelcontextprotocolใ€@anthropic-ai/sdk ็ญ‰๏ผ‰
9
+ #
10
+ # ๐Ÿ“Š ้ ๆœŸๆ•ˆๆžœ๏ผš
11
+ # - Image size ๅคงๅน…็ธฎๅฐ๏ผˆ้ ๆœŸ < 150MB๏ผ‰
12
+ # - ๅชไฟ็•™ๆ ธๅฟƒ API ๅŠŸ่ƒฝ
13
+ # - ๅฏ็”จๆ–ผๅˆ†ๆž MCP dependencies ็š„ๅฏฆ้š›้ซ”็ฉ
14
+ # ================================
15
+
16
+ # ============================================================================
17
+ # Stage 0: pnpm Setup (ๅ…ฑ็”จ stage)
18
+ # ============================================================================
19
+ FROM node:22-alpine AS base
20
+ ENV PNPM_HOME="/pnpm"
21
+ ENV PATH="$PNPM_HOME:$PATH"
22
+ RUN corepack enable && corepack prepare pnpm@9.15.0 --activate
23
+
24
+ # ============================================================================
25
+ # Stage 1: Install Dependencies (ๆŽ’้™ค MCP Servers)
26
+ # ============================================================================
27
+ FROM base AS deps
28
+ WORKDIR /app
29
+
30
+ # ่ค‡่ฃฝ .npmrc๏ผˆๅŒ…ๅซ Capawesome Registry ่ช่ญ‰๏ผ‰
31
+ COPY .npmrc ./
32
+
33
+ # ๐Ÿ”ฅ ๅช่ค‡่ฃฝ web ๅ’Œ api ็š„ package.json๏ผˆๆŽ’้™ค MCP Servers๏ผ‰
34
+ COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
35
+ COPY web/package.json ./web/
36
+ COPY api/package.json ./api/
37
+
38
+ # ๅปบ็ซ‹็ฒพ็ฐก็š„ pnpm-workspace.yaml๏ผˆๅชๅŒ…ๅซ web ๅ’Œ api๏ผ‰
39
+ RUN printf 'packages:\n - "web"\n - "api"\n' > pnpm-workspace.yaml
40
+
41
+ # ๅฎ‰่ฃไพ่ณด๏ผˆไธๅŒ…ๅซ MCP Servers๏ผ‰
42
+ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
43
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
44
+ echo "๐Ÿ“ฆ [Slim Build] Installing dependencies (web + api ONLY)..." && \
45
+ echo " Strategy: Exclude all MCP Servers" && \
46
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
47
+ pnpm install --frozen-lockfile && \
48
+ echo "" && \
49
+ echo "๐Ÿ”„ [pnpm dedupe] Removing duplicate packages..." && \
50
+ pnpm dedupe && \
51
+ echo "" && \
52
+ echo "๐Ÿ“Š [Analysis] node_modules structure:" && \
53
+ du -sh node_modules .pnpm 2>/dev/null || true && \
54
+ echo "โœ… Dependencies installed (slim mode)"
55
+
56
+ # ============================================================================
57
+ # Stage 2: Build Next.js Frontend
58
+ # ============================================================================
59
+ FROM deps AS frontend-builder
60
+
61
+ # ๐Ÿ”ข Accept version build argument
62
+ ARG APP_VERSION=unknown
63
+ ARG NEXT_PUBLIC_DEV_MODE
64
+ ARG NEXT_PUBLIC_FIREBASE_API_KEY
65
+ ARG NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
66
+ ARG NEXT_PUBLIC_FIREBASE_PROJECT_ID
67
+ ARG NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
68
+ ARG NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID
69
+ ARG NEXT_PUBLIC_FIREBASE_APP_ID
70
+ ARG NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID
71
+
72
+ # Set environment variables for build
73
+ ENV APP_VERSION=$APP_VERSION
74
+ ENV NEXT_PUBLIC_DEV_MODE=$NEXT_PUBLIC_DEV_MODE
75
+ ENV NEXT_PUBLIC_FIREBASE_API_KEY=$NEXT_PUBLIC_FIREBASE_API_KEY
76
+ ENV NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=$NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
77
+ ENV NEXT_PUBLIC_FIREBASE_PROJECT_ID=$NEXT_PUBLIC_FIREBASE_PROJECT_ID
78
+ ENV NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=$NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
79
+ ENV NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=$NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID
80
+ ENV NEXT_PUBLIC_FIREBASE_APP_ID=$NEXT_PUBLIC_FIREBASE_APP_ID
81
+ ENV NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=$NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID
82
+
83
+ # ่ค‡่ฃฝๆบ็ขผ
84
+ COPY web ./web
85
+
86
+ # Build Next.js
87
+ WORKDIR /app/web
88
+ RUN --mount=type=cache,target=/app/web/.next/cache \
89
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
90
+ echo "๐Ÿ” [Frontend Build]" && \
91
+ echo " APP_VERSION: ${APP_VERSION}" && \
92
+ echo " Mode: Slim (no MCP Servers)" && \
93
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
94
+ NEXT_TELEMETRY_DISABLED=1 pnpm run build && \
95
+ echo "โœ… Frontend build completed"
96
+
97
+ # ============================================================================
98
+ # Stage 3: Build API
99
+ # ============================================================================
100
+ FROM deps AS api-builder
101
+
102
+ # ่ค‡่ฃฝ API ๆบ็ขผ
103
+ COPY api ./api
104
+ COPY .claude ./.claude
105
+
106
+ # Build API
107
+ WORKDIR /app/api
108
+ RUN pnpm run build && \
109
+ ls -lh dist/
110
+
111
+ # ============================================================================
112
+ # Stage 4: Prepare Production Dependencies - API only
113
+ # ============================================================================
114
+ FROM base AS prod-deps
115
+ WORKDIR /app
116
+
117
+ # ่ค‡่ฃฝ .npmrc
118
+ COPY .npmrc ./
119
+
120
+ # ๐Ÿ” ๅช่ค‡่ฃฝ API workspace ็ตๆง‹
121
+ COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
122
+ COPY api/package.json ./api/
123
+
124
+ # ๐Ÿš€ ไฝฟ็”จ pnpm deploy๏ผšๅช่ค‡่ฃฝ API ็š„ production dependencies
125
+ RUN --mount=type=cache,id=pnpm-prod,target=/pnpm/store \
126
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
127
+ echo "๐Ÿ“ฆ [Slim Build] Deploying API production dependencies..." && \
128
+ echo " Filter: botrun-c-api" && \
129
+ echo " Mode: --prod (no devDependencies, no MCP Servers)" && \
130
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" && \
131
+ pnpm --filter botrun-c-api --prod deploy /tmp/api-deploy && \
132
+ echo "" && \
133
+ echo "๐Ÿ“Š [Size] Production dependencies:" && \
134
+ du -sh /tmp/api-deploy/node_modules && \
135
+ echo "" && \
136
+ echo "โœ… API production dependencies deployed (slim mode)"
137
+
138
+ # ============================================================================
139
+ # Stage 5: Final Runtime Image
140
+ # ============================================================================
141
+ FROM node:22-alpine AS runner
142
+ WORKDIR /app
143
+
144
+ # ๐Ÿ”ฅ Slim ็‰ˆๆœฌ๏ผšๅชๅฎ‰่ฃๆœ€ๅŸบๆœฌ็š„็ณป็ตฑๅทฅๅ…ท๏ผˆไธๅฎ‰่ฃ MCP ็›ธ้—œๅทฅๅ…ท๏ผ‰
145
+ RUN apk add --no-cache \
146
+ dumb-init \
147
+ bash
148
+
149
+ # Create non-root user
150
+ RUN addgroup -g 1001 -S nodejs && \
151
+ adduser -S nodejs -u 1001 && \
152
+ mkdir -p /home/nodejs/.claude && \
153
+ chown -R nodejs:nodejs /home/nodejs/.claude
154
+
155
+ # Layer 1: API Production node_modules๏ผˆpnpm deploy๏ผ‰
156
+ COPY --from=prod-deps --chown=nodejs:nodejs /tmp/api-deploy/node_modules ./node_modules
157
+ COPY --from=prod-deps --chown=nodejs:nodejs /tmp/api-deploy/package.json ./package.json
158
+
159
+ # Layer 2: Static configuration
160
+ COPY --chown=nodejs:nodejs keys ./keys
161
+ COPY --chown=nodejs:nodejs .claude/skills ./.claude/skills
162
+ COPY --chown=nodejs:nodejs .claude/skills /home/nodejs/.claude/skills
163
+
164
+ # ๐Ÿ”ฅ Layer 3: ็งป้™คๆ‰€ๆœ‰ MCP Servers๏ผˆslim ็‰ˆๆœฌไธๅŒ…ๅซ๏ผ‰
165
+
166
+ # Layer 4: Runtime scripts
167
+ COPY --chown=nodejs:nodejs runtime-scripts ./runtime-scripts
168
+ COPY --chown=nodejs:nodejs version.txt ./version.txt
169
+
170
+ # Layer 5: Frontend build
171
+ COPY --from=frontend-builder --chown=nodejs:nodejs /app/web/out ./web/public
172
+
173
+ # Layer 6: API compiled code
174
+ COPY --from=api-builder --chown=nodejs:nodejs /app/api/dist ./dist
175
+ COPY --chown=nodejs:nodejs api/src/init-data.sh ./dist/init-data.sh
176
+
177
+ # Make init-data.sh executable
178
+ USER root
179
+ RUN chmod +x /app/dist/init-data.sh
180
+ USER nodejs
181
+
182
+ # Version
183
+ ARG APP_VERSION=unknown
184
+ ENV APP_VERSION=$APP_VERSION
185
+
186
+ # Environment
187
+ EXPOSE 8080
188
+ ENV NODE_ENV=production
189
+ ENV PORT=8080
190
+ ENV NEXT_TELEMETRY_DISABLED=1
191
+
192
+ # Use dumb-init
193
+ ENTRYPOINT ["dumb-init", "--"]
194
+
195
+ CMD ["sh", "-c", "/app/dist/init-data.sh && echo '๐Ÿš€ [Startup] Starting production server (SLIM MODE - NO MCP SERVERS)...' && echo '๐Ÿ“ฆ [Startup] Node version:' $(node --version) && echo 'โฑ๏ธ [Startup] Timestamp:' $(date -u +%Y-%m-%dT%H:%M:%SZ) && node dist/index.js"]
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Fastlane - ่‡ชๅ‹•ๅŒ–้ƒจ็ฝฒๅทฅๅ…ท
4
+ gem "fastlane"
5
+
6
+ # ๅฏ้ธ๏ผšๅŠ ้€Ÿ Fastlane ็š„ plugins
7
+ plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
8
+ eval_gemfile(plugins_path) if File.exist?(plugins_path)