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,312 @@
1
+ # Rate Limit 詳細管理功能
2
+
3
+ 完整的 Rate Limit 管理工具,支援查詢、設定、匯出等功能。
4
+
5
+ ## 🎯 核心功能
6
+
7
+ ### 1. 詳細查詢(單一使用者)
8
+
9
+ ```bash
10
+ # 查詢使用者的完整 Rate Limit 資訊
11
+ bash admin/users.sh rate-limit query <email> --detailed
12
+ ```
13
+
14
+ **顯示內容:**
15
+ - 📋 方案類型(plan-free, plan-max-1, plan-max-2)
16
+ - 預設限制(RPM, TPM, RPD)
17
+ - ⚙️ 自訂限制(Custom Limits)- 如果有覆寫
18
+ - 📊 實際生效限制(有 custom 用 custom,沒有用 plan 預設)
19
+ - 📈 當前使用狀況(包含百分比)
20
+
21
+ **範例:**
22
+ ```bash
23
+ bash admin/users.sh rate-limit query bohachu@gmail.com --detailed
24
+ ```
25
+
26
+ **輸出範例:**
27
+ ```
28
+ ==================================================
29
+ 👤 使用者: bohachu@gmail.com
30
+ ==================================================
31
+
32
+ 📋 方案類型: plan-free
33
+ 預設限制: RPM=6, TPM=200000, RPD=32
34
+
35
+ ✅ 無自訂限制(使用方案預設值)
36
+
37
+ 📊 實際生效限制:
38
+ RPM: 6
39
+ TPM: 200000
40
+ RPD: 32
41
+
42
+ 📈 當前使用狀況:
43
+ RPM: 0 / 6 (0.0%)
44
+ TPM: 0 / 200000 (0.0%)
45
+ RPD: 2 / 32 (6.3%)
46
+
47
+ ==================================================
48
+ ```
49
+
50
+ ---
51
+
52
+ ### 2. 詳細列表(所有使用者)
53
+
54
+ ```bash
55
+ # 列出所有使用者的詳細 Rate Limit 資訊
56
+ bash admin/users.sh rate-limit list --detailed
57
+
58
+ # 同時匯出 CSV
59
+ bash admin/users.sh rate-limit list --detailed --export csv
60
+ ```
61
+
62
+ ---
63
+
64
+ ### 3. 快速匯出 CSV
65
+
66
+ ```bash
67
+ # 匯出所有使用者的完整 Rate Limit 資訊為 CSV
68
+ bash admin/users.sh rate-limit export
69
+ ```
70
+
71
+ **CSV 包含欄位:**
72
+ - Email, UID, Plan
73
+ - Plan_Default_RPM, Plan_Default_TPM, Plan_Default_RPD
74
+ - Has_Custom_Limits
75
+ - Custom_RPM, Custom_TPM, Custom_RPD
76
+ - Effective_RPM, Effective_TPM, Effective_RPD
77
+ - Current_RPM, Current_TPM, Current_RPD
78
+ - RPM_Usage, TPM_Usage, RPD_Usage (百分比)
79
+
80
+ ---
81
+
82
+ ### 4. 設定自訂限制
83
+
84
+ ```bash
85
+ # 設定使用者的自訂 Rate Limit
86
+ bash admin/users.sh rate-limit set-custom <email> --rpd <value> --rpm <value> --tpm <value>
87
+ ```
88
+
89
+ **範例:**
90
+ ```bash
91
+ # 設定 RPD 為 1000
92
+ bash admin/users.sh rate-limit set-custom bohachu@gmail.com --rpd 1000
93
+
94
+ # 同時設定多個限制
95
+ bash admin/users.sh rate-limit set-custom user@example.com --rpd 500 --rpm 10 --tpm 300000
96
+ ```
97
+
98
+ **說明:**
99
+ - 自訂限制會覆寫使用者的方案預設值
100
+ - 只設定你指定的欄位(例如只設定 RPD,RPM/TPM 仍使用 plan 預設)
101
+ - 自訂限制儲存在 Firestore `users/{userId}.customLimits`
102
+
103
+ ---
104
+
105
+ ### 5. 移除自訂限制
106
+
107
+ ```bash
108
+ # 移除使用者的自訂限制,恢復為方案預設值
109
+ bash admin/users.sh rate-limit remove-custom <email>
110
+ ```
111
+
112
+ **範例:**
113
+ ```bash
114
+ bash admin/users.sh rate-limit remove-custom bohachu@gmail.com
115
+ ```
116
+
117
+ **說明:**
118
+ - 完全刪除 `customLimits` 欄位
119
+ - 使用者將恢復使用 plan 的預設限制
120
+
121
+ ---
122
+
123
+ ### 6. 設定計數器值(危險操作)
124
+
125
+ ```bash
126
+ # 直接設定使用者的計數器值(僅供測試)
127
+ bash admin/users.sh rate-limit set-counter <email> --rpd <value> --rpm <value> --tpm <value>
128
+ ```
129
+
130
+ **範例:**
131
+ ```bash
132
+ # 設定 RPD 計數器為 10(模擬已使用 10 次)
133
+ bash admin/users.sh rate-limit set-counter user@example.com --rpd 10
134
+ ```
135
+
136
+ **⚠️ 警告:**
137
+ - 這是危險操作,直接修改計數器值
138
+ - 僅供測試使用
139
+ - 生產環境請謹慎使用
140
+
141
+ ---
142
+
143
+ ### 7. 重置計數器(清除使用量)
144
+
145
+ ```bash
146
+ # 清除使用者的所有計數器
147
+ bash admin/users.sh rate-limit reset <email>
148
+ ```
149
+
150
+ **說明:**
151
+ - 刪除該使用者的所有 RPM、TPM、RPD 計數器
152
+ - 使用者可以重新開始使用服務
153
+
154
+ ---
155
+
156
+ ## 📊 Plan 預設限制
157
+
158
+ ### plan-free
159
+ - RPM: 6 次/分鐘
160
+ - TPM: 200,000 tokens/分鐘
161
+ - RPD: 32 次/天
162
+
163
+ ### plan-max-1
164
+ - RPM: 6 次/分鐘
165
+ - TPM: 600,000 tokens/分鐘
166
+ - RPD: 111 次/天
167
+
168
+ ### plan-max-2
169
+ - RPM: 6 次/分鐘
170
+ - TPM: 600,000 tokens/分鐘
171
+ - RPD: 450 次/天
172
+
173
+ ---
174
+
175
+ ## 🔍 常見使用場景
176
+
177
+ ### 場景 1:查看使用者完整狀態
178
+ ```bash
179
+ # 查詢使用者的詳細資訊,了解是否有 custom limits
180
+ bash admin/users.sh rate-limit query bohachu@gmail.com --detailed
181
+ ```
182
+
183
+ ### 場景 2:批次檢查所有使用者
184
+ ```bash
185
+ # 匯出 CSV 並在試算表中分析
186
+ bash admin/users.sh rate-limit export
187
+ ```
188
+
189
+ ### 場景 3:特定使用者需要更高限制
190
+ ```bash
191
+ # 設定自訂 RPD 為 1000
192
+ bash admin/users.sh rate-limit set-custom user@example.com --rpd 1000
193
+
194
+ # 驗證設定
195
+ bash admin/users.sh rate-limit query user@example.com --detailed
196
+ ```
197
+
198
+ ### 場景 4:恢復為預設限制
199
+ ```bash
200
+ # 移除自訂限制
201
+ bash admin/users.sh rate-limit remove-custom user@example.com
202
+
203
+ # 驗證已恢復
204
+ bash admin/users.sh rate-limit query user@example.com --detailed
205
+ ```
206
+
207
+ ### 場景 5:重置使用量
208
+ ```bash
209
+ # 清除計數器
210
+ bash admin/users.sh rate-limit reset user@example.com
211
+ ```
212
+
213
+ ---
214
+
215
+ ## 🎓 進階功能
216
+
217
+ ### 1. 混合使用 plan 和 custom limits
218
+
219
+ 使用者可以只覆寫部分限制:
220
+
221
+ ```bash
222
+ # 只覆寫 RPD,RPM/TPM 仍使用 plan 預設
223
+ bash admin/users.sh rate-limit set-custom user@example.com --rpd 500
224
+
225
+ # 查詢結果會顯示:
226
+ # - Custom_RPD: 500 (覆寫預設)
227
+ # - RPM: 6 (使用 plan 預設)
228
+ # - TPM: 200000 (使用 plan 預設)
229
+ ```
230
+
231
+ ### 2. CSV 分析技巧
232
+
233
+ 匯出的 CSV 可以在試算表中進行:
234
+ - 篩選有 `Has_Custom_Limits=YES` 的使用者
235
+ - 計算平均使用率
236
+ - 找出接近限制的使用者(RPD > 80%)
237
+ - 對比 plan 預設值和實際生效值
238
+
239
+ ---
240
+
241
+ ## 📂 檔案結構
242
+
243
+ ```
244
+ admin/
245
+ ├── users.sh # CLI 入口腳本
246
+ ├── users-cli.ts # 主程式
247
+ ├── lib/
248
+ │ ├── rate-limit-detailed.ts # 詳細查詢模組(新增)
249
+ │ ├── firebase.ts # Firebase 初始化
250
+ │ ├── user-resolver.ts # Email ↔ UID 轉換
251
+ │ └── firestore-safe.ts # 安全的 Firestore 操作
252
+ └── RATE_LIMIT_MANAGEMENT.md # 本文件
253
+ ```
254
+
255
+ ---
256
+
257
+ ## ⚙️ 技術細節
258
+
259
+ ### 資料來源
260
+
261
+ 1. **Plan 資訊**:`users/{userId}.plan` (預設 plan-free)
262
+ 2. **Custom Limits**:`users/{userId}.customLimits`
263
+ 3. **計數器**:`rate_limit_counters/{type}:{userId}:{time}`
264
+
265
+ ### 計數器 Key 格式
266
+
267
+ - **RPM/TPM**:`rpm:userId:29390840`(分鐘編號)
268
+ - **RPD**:`rpd:userId:2025-11-18`(日期字串)
269
+
270
+ ### 限制生效邏輯
271
+
272
+ ```typescript
273
+ effectiveLimit = customLimits?.rpd ?? planDefaults.rpd
274
+ ```
275
+
276
+ 有 custom 就用 custom,沒有就用 plan 預設。
277
+
278
+ ---
279
+
280
+ ## 🆘 疑難排解
281
+
282
+ ### Q: 為什麼 custom limits 沒有立即生效?
283
+
284
+ A: Custom limits 在使用者**下次 API 請求**時才會載入。如果需要立即生效,可以:
285
+ 1. 請使用者重新發送請求
286
+ 2. 或重啟 API 服務(不建議)
287
+
288
+ ### Q: 如何確認 custom limits 已移除?
289
+
290
+ A: 使用詳細查詢:
291
+ ```bash
292
+ bash admin/users.sh rate-limit query <email> --detailed
293
+ ```
294
+ 應該看到「✅ 無自訂限制(使用方案預設值)」
295
+
296
+ ### Q: CSV 檔案在哪裡?
297
+
298
+ A: 匯出的 CSV 會儲存在執行目錄(通常是 `api/`),檔名格式:
299
+ ```
300
+ rate-limit-export-{timestamp}.csv
301
+ ```
302
+
303
+ ---
304
+
305
+ ## 📝 更新日誌
306
+
307
+ ### 2025-11-18
308
+ - ✅ 新增詳細查詢功能(`--detailed`)
309
+ - ✅ 新增 CSV 匯出功能
310
+ - ✅ 新增 `remove-custom` 命令
311
+ - ✅ 新增 `set-counter` 命令(危險操作)
312
+ - ✅ 整合所有 Rate Limit 管理功能到統一 CLI
@@ -0,0 +1,338 @@
1
+ # 波特人 Users CLI - 統一使用者管理工具
2
+
3
+ 統一的命令列工具,用於管理 Rate Limit、訂閱、使用者資訊等。
4
+
5
+ ## 🚀 快速開始
6
+
7
+ ```bash
8
+ # 查看所有可用命令
9
+ ./admin/users.sh --help
10
+
11
+ # 查詢單一使用者完整資訊
12
+ ./admin/users.sh query aidoer@cameo.tw
13
+
14
+ # 列出所有 Firebase Auth 使用者
15
+ ./admin/users.sh list --auth
16
+
17
+ # 重置使用者 Rate Limit
18
+ ./admin/users.sh rate-limit reset aidoer@cameo.tw
19
+
20
+ # 重置使用者試用期
21
+ ./admin/users.sh subscription reset-trial aidoer@cameo.tw
22
+ ```
23
+
24
+ > **注意**:`users.sh` 是包裝腳本,會自動設定環境變數並呼叫 `users.ts`
25
+
26
+ ## 📋 完整命令列表
27
+
28
+ ### 主命令
29
+
30
+ ```bash
31
+ ./admin/users.sh [command] [options]
32
+ ```
33
+
34
+ ### 1. list - 列出使用者
35
+
36
+ ```bash
37
+ # 列出所有 Firebase Auth 使用者
38
+ ./admin/users.sh list --auth
39
+
40
+ # 列出 Firestore users collection 使用者(含 plan 資訊)
41
+ ./admin/users.sh list --firestore
42
+
43
+ # 列出有 rate limit 記錄的使用者
44
+ ./admin/users.sh list --rate-limit
45
+
46
+ # 列出有訂閱記錄的使用者
47
+ ./admin/users.sh list --subscription
48
+
49
+ # 匯出為 CSV
50
+ ./admin/users.sh list --auth --export csv
51
+ ```
52
+
53
+ ### 2. query - 查詢單一使用者
54
+
55
+ ```bash
56
+ # 查詢使用者完整資訊(訂閱 + Rate Limit)
57
+ ./admin/users.sh query aidoer@cameo.tw
58
+ ./admin/users.sh query t1ZdkoObjMf8j7jwiUUFC1kOvTt1
59
+
60
+ # 以 JSON 格式輸出
61
+ ./admin/users.sh query aidoer@cameo.tw --json
62
+ ```
63
+
64
+ ### 3. rate-limit - Rate Limit 管理
65
+
66
+ #### 3.1 列出所有 Rate Limit 狀態
67
+
68
+ ```bash
69
+ # 列出所有使用者的 Rate Limit 狀態(含視覺化進度條)
70
+ ./admin/users.sh rate-limit list
71
+
72
+ # 匯出 CSV 並自動開啟
73
+ ./admin/users.sh rate-limit list --export csv
74
+ ```
75
+
76
+ #### 3.2 查詢特定使用者 Rate Limit
77
+
78
+ ```bash
79
+ ./admin/users.sh rate-limit query aidoer@cameo.tw
80
+ ```
81
+
82
+ #### 3.3 重置特定使用者 Rate Limit
83
+
84
+ ```bash
85
+ # 清除使用者的所有 Rate Limit 計數器(RPM, TPM, RPD)
86
+ ./admin/users.sh rate-limit reset aidoer@cameo.tw
87
+ ./admin/users.sh rate-limit reset t1ZdkoObjMf8j7jwiUUFC1kOvTt1
88
+ ```
89
+
90
+ ### 4. subscription - 訂閱管理
91
+
92
+ #### 4.1 列出所有訂閱狀態
93
+
94
+ ```bash
95
+ # 列出所有使用者的訂閱狀態(含試用期剩餘天數)
96
+ ./admin/users.sh subscription list
97
+
98
+ # 匯出 CSV 並自動開啟
99
+ ./admin/users.sh subscription list --export csv
100
+ ```
101
+
102
+ #### 4.2 查詢特定使用者訂閱
103
+
104
+ ```bash
105
+ ./admin/users.sh subscription query aidoer@cameo.tw
106
+ ```
107
+
108
+ #### 4.3 設定使用者試用期結束日期
109
+
110
+ ```bash
111
+ # 設定特定日期(用於測試過期功能)
112
+ ./admin/users.sh subscription set-expiry aidoer@cameo.tw 2024-01-15
113
+
114
+ # 設定為昨天(立即過期)
115
+ ./admin/users.sh subscription set-expiry aidoer@cameo.tw yesterday
116
+
117
+ # 設定為今天
118
+ ./admin/users.sh subscription set-expiry aidoer@cameo.tw today
119
+
120
+ # 設定為明天
121
+ ./admin/users.sh subscription set-expiry aidoer@cameo.tw tomorrow
122
+ ```
123
+
124
+ #### 4.4 重置使用者試用期
125
+
126
+ ```bash
127
+ # 刪除訂閱記錄,使用者下次使用時將自動獲得新的 14 天試用期
128
+ ./admin/users.sh subscription reset-trial aidoer@cameo.tw
129
+ ```
130
+
131
+ ### 5. plan - 方案管理
132
+
133
+ #### 5.1 設定使用者方案
134
+
135
+ ```bash
136
+ # 設定使用者方案(Lite | Max-1 | Max-2)
137
+ ./admin/users.sh plan set aidoer@cameo.tw Max-1
138
+ ./admin/users.sh plan set user@example.com Max-2
139
+
140
+ # 支援使用 UID
141
+ ./admin/users.sh plan set t1ZdkoObjMf8j7jwiUUFC1kOvTt1 Max-1
142
+ ```
143
+
144
+ **方案限制對照表:**
145
+
146
+ | 方案 | RPM | TPM | RPD |
147
+ |------|-----|-----|-----|
148
+ | Lite | 6 | 200K | 32 |
149
+ | Max-1 | 6 | 600K | 111 |
150
+ | Max-2 | 6 | 600K | 450 |
151
+
152
+ **注意事項:**
153
+ - 會同時更新 `user_subscriptions/{userId}` 和 `users/{userId}` 的 plan 欄位
154
+ - 如果使用者沒有訂閱記錄,會自動建立 `active` 狀態的訂閱
155
+ - 新的 Rate Limit 在下次 API 請求時生效
156
+
157
+ #### 5.2 查詢使用者方案
158
+
159
+ ```bash
160
+ # 查詢使用者目前方案及訂閱詳情
161
+ ./admin/users.sh plan get aidoer@cameo.tw
162
+ ./admin/users.sh plan get t1ZdkoObjMf8j7jwiUUFC1kOvTt1
163
+ ```
164
+
165
+ ### 6. migrate - 資料遷移
166
+
167
+ ```bash
168
+ # 遷移 Lite 方案的 RPD 限制
169
+ # (當修改 Lite 方案的 RPD 限制時,使用此工具更新所有現有使用者的計數器)
170
+ ./admin/users.sh migrate plan-free-rpd
171
+ ```
172
+
173
+ ### 7. seed - 建立測試資料
174
+
175
+ ```bash
176
+ # 建立 Rate Limit 測試資料
177
+ ./admin/users.sh seed --rate-limit
178
+
179
+ # 建立訂閱測試資料
180
+ ./admin/users.sh seed --subscription
181
+
182
+ # 同時建立兩種測試資料
183
+ ./admin/users.sh seed --rate-limit --subscription
184
+ ```
185
+
186
+ ## 🎯 常見使用場景
187
+
188
+ ### 場景 1: 使用者反應被限制,需要查詢狀態
189
+
190
+ ```bash
191
+ # 1. 查詢使用者完整資訊
192
+ ./admin/users.sh query user@example.com
193
+
194
+ # 2. 查看詳細 Rate Limit 狀態
195
+ ./admin/users.sh rate-limit query user@example.com
196
+
197
+ # 3. 如需重置 Rate Limit
198
+ ./admin/users.sh rate-limit reset user@example.com
199
+ ```
200
+
201
+ ### 場景 2: 使用者試用期過期,需要重新試用
202
+
203
+ ```bash
204
+ # 1. 查詢目前訂閱狀態
205
+ ./admin/users.sh subscription query user@example.com
206
+
207
+ # 2. 重置試用期
208
+ ./admin/users.sh subscription reset-trial user@example.com
209
+ ```
210
+
211
+ ### 場景 3: 批次檢查所有使用者狀態
212
+
213
+ ```bash
214
+ # 1. 列出所有 Rate Limit 狀態並匯出 CSV
215
+ ./admin/users.sh rate-limit list --export csv
216
+
217
+ # 2. 列出所有訂閱狀態並匯出 CSV
218
+ ./admin/users.sh subscription list --export csv
219
+
220
+ # 3. 在試算表中分析和篩選
221
+ ```
222
+
223
+ ### 場景 4: 升級使用者方案
224
+
225
+ ```bash
226
+ # 1. 查詢使用者目前方案
227
+ ./admin/users.sh plan get user@example.com
228
+
229
+ # 2. 升級到 Max-1 或 Max-2
230
+ ./admin/users.sh plan set user@example.com Max-1
231
+
232
+ # 3. 驗證方案已更新
233
+ ./admin/users.sh query user@example.com
234
+ ```
235
+
236
+ ### 場景 5: 修改 Rate Limit 方案限制後
237
+
238
+ ```bash
239
+ # 執行資料遷移,更新所有現有使用者的計數器(Lite 方案)
240
+ ./admin/users.sh migrate plan-free-rpd
241
+ ```
242
+
243
+ ## 🔧 技術細節
244
+
245
+ ### 檔案結構
246
+
247
+ ```
248
+ admin/
249
+ ├── users.sh # Shell wrapper 腳本(主入口)
250
+ ├── users.ts # TypeScript CLI 主程式
251
+ ├── lib/ # 共用模組
252
+ │ ├── firebase.ts # Firebase Admin 初始化
253
+ │ ├── firestore-safe.ts # 安全的 Firestore 操作(避開 google-gax 問題)
254
+ │ ├── user-resolver.ts # Email ↔ UID 轉換
255
+ │ ├── formatters.ts # 輸出格式化(表格、CSV、JSON)
256
+ │ └── types.ts # 共用型別定義
257
+ └── README.md # 本文件
258
+ ```
259
+
260
+ ### google-gax 問題處理
261
+
262
+ 本工具使用 REST API 作為 fallback 來刪除 Firestore 文件,避開了 `google-gax` 套件的 `ERR_PACKAGE_PATH_NOT_EXPORTED` 錯誤。
263
+
264
+ 當執行 `rate-limit reset` 時,會自動使用安全的 REST API 方式刪除計數器。
265
+
266
+ ### 環境需求
267
+
268
+ 1. **Google Cloud 認證**
269
+ - 需要 `keys/compute-sa-key.json` 或 `keys/firebase-admin-key.json`
270
+ - 或設定 `GOOGLE_APPLICATION_CREDENTIALS` 環境變數
271
+
272
+ 2. **必要套件**
273
+ - `tsx` - TypeScript 執行器(已安裝)
274
+ - `commander` - CLI 框架(已安裝)
275
+ - `firebase-admin` - Firebase SDK(已安裝)
276
+
277
+ 3. **GCP CLI**
278
+ - 部分功能需要 `gcloud` CLI(用於 REST API 認證)
279
+
280
+ ## ⚠️ 注意事項
281
+
282
+ 1. **生產環境操作**
283
+ - 所有工具都會直接操作生產環境的 Firestore
284
+ - 重置操作無法復原,請謹慎使用
285
+
286
+ 2. **權限要求**
287
+ - Service Account 需要有 Firestore 讀寫權限
288
+ - 需要 Firebase Auth 讀取權限
289
+
290
+ 3. **自動重建**
291
+ - 重置試用期後,使用者下次使用時會自動建立新的 14 天試用訂閱
292
+ - Rate Limit 重置後,使用者立即可以重新開始使用服務
293
+
294
+ ## 🆘 常見問題
295
+
296
+ ### Q1: 執行時出現「找不到 firebase-admin」
297
+
298
+ **解決方式:**
299
+ 使用 `./admin/users.sh` wrapper 腳本,不要直接執行 `users.ts`
300
+
301
+ ### Q2: 出現「找不到 GCP 認證金鑰」
302
+
303
+ **解決方式:**
304
+ 確認 `keys/compute-sa-key.json` 存在,或設定環境變數:
305
+ ```bash
306
+ export GOOGLE_APPLICATION_CREDENTIALS="keys/compute-sa-key.json"
307
+ ```
308
+
309
+ ### Q3: rate-limit reset 失敗
310
+
311
+ **解決方式:**
312
+ 1. 確認已安裝並登入 `gcloud` CLI
313
+ 2. 確認 GCP 專案設定正確:`gcloud config get-value project`
314
+ 3. 如果專案不對,切換:`gcloud config set project botrun-c`
315
+
316
+ ## 📚 延伸閱讀
317
+
318
+ - [Rate Limit 系統架構](../api/src/rate-limit/README.md)
319
+ - [訂閱系統架構](../api/src/subscription/README.md)
320
+ - [工具-Reset-Rate-Limit-腳本](../docs/工具-Reset-Rate-Limit-腳本.txt)
321
+ - [工具-Reset-Trial-Subscription-腳本](../docs/工具-Reset-Trial-Subscription-腳本.txt)
322
+
323
+ ## 🎉 從舊工具遷移
324
+
325
+ ### 舊的 Shell 腳本對照表
326
+
327
+ | 舊腳本 | 新命令 |
328
+ |--------|--------|
329
+ | `admin/rate-limit.sh` | `./admin/users.sh rate-limit list` |
330
+ | `admin/reset-rate.sh <user>` | `./admin/users.sh rate-limit reset <user>` |
331
+ | `admin/trial.sh` | `./admin/users.sh subscription list` |
332
+ | `admin/reset-trial.sh <user>` | `./admin/users.sh subscription reset-trial <user>` |
333
+ | `admin/migrate-plan-free.sh` | `./admin/users.sh migrate plan-free-rpd` |
334
+ | `admin/seed-trial-data.sh` | `./admin/users.sh seed --subscription` |
335
+ | (無舊工具) | `./admin/users.sh plan set <user> <plan>` ✨ 新功能 |
336
+ | (無舊工具) | `./admin/users.sh plan get <user>` ✨ 新功能 |
337
+
338
+ 所有舊的 `.sh` 腳本已移至 `bak/admin/` 目錄備份。
@@ -0,0 +1,22 @@
1
+ # Botrun-C 成本分析報告
2
+ # 生成時間: 2025-12-08T23:07:24.015Z
3
+ # 分析期間: 2025/12/2 - 2025/12/9 (7 天)
4
+ # 總使用者數: 10
5
+ # 總 Token 數: 0
6
+ # 總成本: $1196.00
7
+
8
+ # 按方案分佈
9
+ # Max-2: 4 位使用者, $1196.00 (100.0%)
10
+ # Lite: 6 位使用者, $0.00 (0.0%)
11
+
12
+ ✉️ Email,User ID,Plan,Total Requests,Total Tokens,Avg Daily Requests,Avg Daily Tokens,Monthly Plan Cost,Estimated Monthly Cost,Estimated Annual Cost,Cost per Token,Cost per Request,Cost per Day,TPM Utilization,RPM Utilization,RPD Utilization,Rank,Percentile Rank
13
+ baby.ff.74@gmail.com,074xGzIKWyfKTBt1NMIj9lxi5mO2,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,1,10.0%
14
+ cyh6800@gmail.com,0l3CZEWySQRTre9nK5NbW2tbZuK2,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,5,50.0%
15
+ damonwheeler.49353@gmail.com,15diNdor1XPCqJ2P6wqGVNXY2wj2,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,6,60.0%
16
+ sebastian.hsu@cameo.tw,18BJ7J6UjOME9K64pHZT2aD0FeF3,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,2,20.0%
17
+ alanmcdonald.32283@gmail.com,1XIowNy4HGRPlaEMoGyp167NPHC3,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,7,70.0%
18
+ minah.say@gmail.com,1s6ZM7LIoEOZZoSJ8EBmGdghdH42,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,3,30.0%
19
+ gemini0619200@gmail.com,2EJnLIQ3fnduA7uR578SwFuBs962,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,8,80.0%
20
+ mathewmack.80060@gmail.com,3ESZBFrWzLgs44njrsPz1EUzwmn2,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,9,90.0%
21
+ 4pf8n66zw8@privaterelay.appleid.com,4QbgM0jDNWOouL766csx2cArvBI3,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,10,100.0%
22
+ wengroy@cameo.tw,4pv86sko5cU0QaJfhdGaGX4X6EC3,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,4,40.0%
@@ -0,0 +1,22 @@
1
+ # Botrun-C 成本分析報告
2
+ # 生成時間: 2025-12-08T23:08:43.063Z
3
+ # 分析期間: 2025/12/2 - 2025/12/9 (7 天)
4
+ # 總使用者數: 10
5
+ # 總 Token 數: 0
6
+ # 總成本: $1196.00
7
+
8
+ # 按方案分佈
9
+ # Max-2: 4 位使用者, $1196.00 (100.0%)
10
+ # Lite: 6 位使用者, $0.00 (0.0%)
11
+
12
+ Email,User ID,Plan,Total Requests,Total Tokens,Avg Daily Requests,Avg Daily Tokens,Monthly Plan Cost,Estimated Monthly Cost,Estimated Annual Cost,Cost per Token,Cost per Request,Cost per Day,TPM Utilization,RPM Utilization,RPD Utilization,Rank,Percentile Rank
13
+ baby.ff.74@gmail.com,074xGzIKWyfKTBt1NMIj9lxi5mO2,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,1,10.0%
14
+ cyh6800@gmail.com,0l3CZEWySQRTre9nK5NbW2tbZuK2,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,5,50.0%
15
+ damonwheeler.49353@gmail.com,15diNdor1XPCqJ2P6wqGVNXY2wj2,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,6,60.0%
16
+ sebastian.hsu@cameo.tw,18BJ7J6UjOME9K64pHZT2aD0FeF3,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,2,20.0%
17
+ alanmcdonald.32283@gmail.com,1XIowNy4HGRPlaEMoGyp167NPHC3,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,7,70.0%
18
+ minah.say@gmail.com,1s6ZM7LIoEOZZoSJ8EBmGdghdH42,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,3,30.0%
19
+ gemini0619200@gmail.com,2EJnLIQ3fnduA7uR578SwFuBs962,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,8,80.0%
20
+ mathewmack.80060@gmail.com,3ESZBFrWzLgs44njrsPz1EUzwmn2,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,9,90.0%
21
+ 4pf8n66zw8@privaterelay.appleid.com,4QbgM0jDNWOouL766csx2cArvBI3,Lite,0,0,0.00,0.00,$0.00,$0.00,$0.00,$0.000000,$0.000000,$0.00,0.0%,0.0%,0.0%,10,100.0%
22
+ wengroy@cameo.tw,4pv86sko5cU0QaJfhdGaGX4X6EC3,Max-2,0,0,0.00,0.00,$299.00,$299.00,$3588.00,$0.000000,$0.000000,$9.97,0.0%,0.0%,0.0%,4,40.0%