botrun-horse 2.30.0 → 2.34.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 (664) hide show
  1. package/bin/bh.mjs +37 -170
  2. package/bin/commands/help.mjs +30 -30
  3. package/{lib/flows → modules/_core}/draft-writing.mjs +1 -1
  4. package/{lib/flows → modules/_core}/gemini-ask.mjs +1 -1
  5. package/{lib/flows → modules/_core}/legal-ask.mjs +4 -4
  6. package/{lib/flows → modules/_core}/openai-agent.mjs +2 -2
  7. package/{lib/flows → modules/_core}/openrouter-ask.mjs +1 -1
  8. package/{bin/commands/dag-cmd.mjs → modules/dag/command.mjs} +2 -2
  9. package/modules/dag/index.mjs +30 -0
  10. package/{bin/commands/db-cmd.mjs → modules/db/command.mjs} +3 -3
  11. package/modules/db/index.mjs +26 -0
  12. package/modules/discover.mjs +43 -0
  13. package/{bin/commands/doc.mjs → modules/doc/command.mjs} +5 -5
  14. package/modules/doc/index.mjs +55 -0
  15. package/{lib/doc/index.mjs → modules/doc/ingest.mjs} +1 -1
  16. package/{lib → modules}/doc/office2text.mjs +1 -1
  17. package/{lib → modules}/doc/pdf2text.mjs +1 -1
  18. package/{lib → modules}/doc/split.mjs +1 -1
  19. package/{bin/commands/gemini.mjs → modules/gemini/command.mjs} +3 -3
  20. package/modules/gemini/index.mjs +41 -0
  21. package/modules/imagen/command.mjs +117 -0
  22. package/modules/imagen/imagen-client.mjs +239 -0
  23. package/modules/imagen/index.mjs +60 -0
  24. package/modules/imagen/server.mjs +133 -0
  25. package/{bin/commands/legal.mjs → modules/legal/command.mjs} +5 -5
  26. package/modules/legal/index.mjs +56 -0
  27. package/{bin/commands/nchc.mjs → modules/nchc/command.mjs} +4 -4
  28. package/modules/nchc/index.mjs +48 -0
  29. package/modules/ocr/index.mjs +17 -0
  30. package/{bin/commands/openrouter.mjs → modules/openrouter/command.mjs} +5 -5
  31. package/modules/openrouter/index.mjs +49 -0
  32. package/modules/portal/index.mjs +17 -0
  33. package/{bin/commands/search.mjs → modules/search/command.mjs} +3 -3
  34. package/modules/search/index.mjs +23 -0
  35. package/{lib/search/index.mjs → modules/search/search-lib.mjs} +1 -1
  36. package/{bin/commands/skill.mjs → modules/skill/command.mjs} +46 -9
  37. package/modules/skill/index.mjs +35 -0
  38. package/{lib/prompt → modules/skill}/prompt-search.mjs +1 -1
  39. package/{lib/prompt → modules/skill}/prompt-store.mjs +28 -11
  40. package/modules/skill/prompts/zero-framework/address-matching.md +22 -0
  41. package/modules/skill/prompts/zero-framework/data-integrity.md +15 -0
  42. package/modules/skill/prompts/zero-framework/data-reasonability.md +17 -0
  43. package/modules/skill/prompts/zero-framework/gemini-image-gen.md +20 -0
  44. package/modules/skill/prompts/zero-framework/gemini-search-cli.md +10 -0
  45. package/modules/skill/prompts/zero-framework/html-report.md +15 -0
  46. package/modules/skill/prompts/zero-framework/smart-cache.md +10 -0
  47. package/modules/skill/prompts/zero-framework/trigram-search.md +12 -0
  48. package/modules/skill/prompts/zero-framework/tts-format.md +6 -0
  49. package/modules/skill/prompts/zero-framework/watermelon-sqlite.md +8 -0
  50. package/{bin/commands/writing.mjs → modules/writing/command.mjs} +3 -3
  51. package/{lib → modules}/writing/generate.mjs +2 -2
  52. package/modules/writing/index.mjs +38 -0
  53. package/package.json +3 -1
  54. package/parallel-dag-todo-list/imagen-module.md +51 -0
  55. package/bin/commands/schema.mjs +0 -254
  56. package/botrun-c/.claude/skills/DOCX/351/226/261/350/256/200/346/212/200/350/203/275/SKILL.md +0 -103
  57. package/botrun-c/.claude/skills/DOCX/351/226/261/350/256/200/346/212/200/350/203/275/scripts/docx-to-markdown.mjs +0 -206
  58. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/SKILL.md +0 -1093
  59. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branch.mjs +0 -73
  60. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branches.mjs +0 -77
  61. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-checkout.mjs +0 -72
  62. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-clone.mjs +0 -72
  63. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-commit.mjs +0 -75
  64. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-branch.mjs +0 -75
  65. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-file.mjs +0 -72
  66. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-diff.mjs +0 -80
  67. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list-tree.mjs +0 -336
  68. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list.mjs +0 -199
  69. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-merge.mjs +0 -86
  70. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-move.mjs +0 -75
  71. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-create.mjs +0 -81
  72. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-list.mjs +0 -74
  73. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-merge.mjs +0 -83
  74. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-view.mjs +0 -71
  75. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-push.mjs +0 -71
  76. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-read.mjs +0 -277
  77. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-search.mjs +0 -370
  78. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-stash.mjs +0 -116
  79. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-sync.mjs +0 -71
  80. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-write.mjs +0 -74
  81. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/lib/path-validator.mjs +0 -167
  82. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/SKILL.md +0 -605
  83. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-create.mjs +0 -127
  84. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-delete.mjs +0 -77
  85. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-diff.mjs +0 -87
  86. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-history.mjs +0 -99
  87. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-list.mjs +0 -174
  88. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-read.mjs +0 -214
  89. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-restore.mjs +0 -75
  90. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-search.mjs +0 -270
  91. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-sync-back.mjs +0 -155
  92. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-update.mjs +0 -100
  93. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/SKILL.md +0 -414
  94. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/create-project.mjs +0 -91
  95. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/finalize-project.mjs +0 -162
  96. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/SKILL.md +0 -206
  97. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/package.json +0 -19
  98. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-analyze.mjs +0 -309
  99. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-compress.mjs +0 -315
  100. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-split.mjs +0 -275
  101. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-to-text.mjs +0 -336
  102. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/test-pdf-scripts.mjs +0 -491
  103. package/botrun-c/.claude/skills/docx-to-markdown/SKILL.md +0 -76
  104. package/botrun-c/.claude/skills/docx-to-markdown/scripts/convert_docx.py +0 -183
  105. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/SKILL.md +0 -133
  106. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/scripts/ocr_processor.py +0 -381
  107. package/botrun-c/.claude/skills/gemini-transcribe/SKILL.md +0 -115
  108. package/botrun-c/.claude/skills/gemini-transcribe/scripts/transcribe.py +0 -499
  109. package/botrun-c/.claude/skills/nchc-transcribe/SKILL.md +0 -131
  110. package/botrun-c/.claude/skills/nchc-transcribe/scripts/transcribe.py +0 -522
  111. package/botrun-c/.claude/skills/p320-moj-review/SKILL.md +0 -200
  112. package/botrun-c/.claude/skills/p320-moj-review/references/guideline.md +0 -118
  113. package/botrun-c/.claude/skills/pdf-multimodal-processor/SKILL.md +0 -186
  114. package/botrun-c/.claude/skills/pdf-multimodal-processor/scripts/process_pdf.py +0 -515
  115. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/SKILL.md +0 -81
  116. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/package.json +0 -13
  117. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/secure-search.mjs +0 -232
  118. 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 +0 -518
  119. package/botrun-c/.claude/skills//345/216/273/350/255/230/345/210/245/346/212/200/350/203/275/SKILL.md +0 -125
  120. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/SKILL.md +0 -123
  121. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/scripts/recall.mjs +0 -339
  122. 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 +0 -156
  123. 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 +0 -139
  124. 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 +0 -40
  125. 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 +0 -195
  126. 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 +0 -307
  127. 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 +0 -103
  128. 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 +0 -219
  129. 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 +0 -209
  130. 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 +0 -20
  131. 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 +0 -115
  132. 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 +0 -86
  133. 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 +0 -304
  134. 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 +0 -17
  135. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/SKILL.md +0 -131
  136. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/scripts/skill-manager.mjs +0 -542
  137. 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 +0 -127
  138. 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 +0 -53
  139. 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 +0 -13
  140. 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 +0 -149
  141. 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 +0 -82
  142. 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 +0 -16
  143. 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 +0 -260
  144. 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 +0 -156
  145. 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 +0 -16
  146. 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 +0 -139
  147. 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 +0 -272
  148. 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 +0 -166
  149. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/SKILL.md +0 -114
  150. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/remember.mjs +0 -159
  151. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test-advanced.mjs +0 -342
  152. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test.mjs +0 -430
  153. 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 +0 -30
  154. 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 +0 -13
  155. 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 +0 -294
  156. 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 +0 -338
  157. package/botrun-c/.dockerignore +0 -131
  158. package/botrun-c/.dockeroptimize +0 -13
  159. package/botrun-c/.firebase/hosting.b3V0.cache +0 -30
  160. package/botrun-c/.firebaserc +0 -5
  161. package/botrun-c/.gcloudignore +0 -56
  162. package/botrun-c/.ruby-version +0 -1
  163. package/botrun-c/CHANGELOG.md +0 -224
  164. package/botrun-c/Dockerfile.gcp +0 -365
  165. package/botrun-c/Dockerfile.slim +0 -195
  166. package/botrun-c/Gemfile +0 -8
  167. package/botrun-c/Gemfile.lock +0 -233
  168. package/botrun-c/LOCAL-DEVELOPMENT-GUIDE.md +0 -393
  169. package/botrun-c/PLAN.md +0 -131
  170. package/botrun-c/README.md +0 -129
  171. package/botrun-c/TODO-CAPACITOR-INTEGRATION.md +0 -482
  172. package/botrun-c/VERIFICATION.md +0 -121
  173. package/botrun-c/admin/RATE_LIMIT_MANAGEMENT.md +0 -312
  174. package/botrun-c/admin/README.md +0 -338
  175. package/botrun-c/admin/botrun-billing-report-1765235244038.csv +0 -22
  176. package/botrun-c/admin/botrun-billing-report-1765235323089.csv +0 -22
  177. package/botrun-c/admin/botrun-dashboard-1765235244039.html +0 -278
  178. package/botrun-c/admin/botrun-dashboard-1765235323089.html +0 -278
  179. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235244039.html +0 -161
  180. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235323090.html +0 -161
  181. package/botrun-c/admin/check-billing.ts +0 -48
  182. package/botrun-c/admin/count-all-users.ts +0 -65
  183. package/botrun-c/admin/generate-analytics-report.ts +0 -188
  184. package/botrun-c/admin/jest.config.ts +0 -43
  185. package/botrun-c/admin/lib/__tests__/formatters.test.ts +0 -264
  186. package/botrun-c/admin/lib/__tests__/mocks/firebase.mock.ts +0 -112
  187. package/botrun-c/admin/lib/__tests__/services/UserService.test.ts +0 -83
  188. package/botrun-c/admin/lib/__tests__/user-resolver.test.ts +0 -439
  189. package/botrun-c/admin/lib/analyzers/BillingAnalyticsService.ts +0 -242
  190. package/botrun-c/admin/lib/analyzers/CsvExporter.ts +0 -263
  191. package/botrun-c/admin/lib/analyzers/HtmlChartGenerator.ts +0 -530
  192. package/botrun-c/admin/lib/analyzers/SpikeAnalyzer.ts +0 -608
  193. package/botrun-c/admin/lib/analyzers/TimeSeriesAnalyzer.ts +0 -344
  194. package/botrun-c/admin/lib/cli/CLIBootstrapper.ts +0 -40
  195. package/botrun-c/admin/lib/commands/AbstractCommand.ts +0 -69
  196. package/botrun-c/admin/lib/commands/AnalyticsCommand.ts +0 -215
  197. package/botrun-c/admin/lib/commands/ListCommand.ts +0 -85
  198. package/botrun-c/admin/lib/commands/QueryCommand.ts +0 -81
  199. package/botrun-c/admin/lib/commands/SpikeCommand.ts +0 -83
  200. package/botrun-c/admin/lib/domain/User.ts +0 -38
  201. package/botrun-c/admin/lib/firebase.ts +0 -92
  202. package/botrun-c/admin/lib/firestore-safe.ts +0 -105
  203. package/botrun-c/admin/lib/formatters.ts +0 -154
  204. package/botrun-c/admin/lib/rate-limit-detailed.ts +0 -355
  205. package/botrun-c/admin/lib/rate-limit.ts +0 -286
  206. package/botrun-c/admin/lib/repositories/UserRepository.ts +0 -104
  207. package/botrun-c/admin/lib/services/UserService.ts +0 -108
  208. package/botrun-c/admin/lib/types.ts +0 -56
  209. package/botrun-c/admin/lib/user-resolver.ts +0 -275
  210. package/botrun-c/admin/manage-auth-domains.js +0 -178
  211. package/botrun-c/admin/migrate-plan-free.sh +0 -64
  212. package/botrun-c/admin/package-lock.json +0 -5656
  213. package/botrun-c/admin/package.json +0 -28
  214. package/botrun-c/admin/rate-limit.sh +0 -55
  215. package/botrun-c/admin/remove-custom-limits.ts +0 -75
  216. package/botrun-c/admin/reset-rate.sh +0 -70
  217. package/botrun-c/admin/reset-trial.sh +0 -68
  218. package/botrun-c/admin/seed-trial-data.sh +0 -38
  219. package/botrun-c/admin/trial.sh +0 -55
  220. package/botrun-c/admin/tsconfig.json +0 -20
  221. package/botrun-c/admin/users-cli.py +0 -298
  222. package/botrun-c/admin/users.sh +0 -12
  223. package/botrun-c/admin/users.ts +0 -1321
  224. package/botrun-c/api/admin-tools/check-whitelist.mjs.migration-bak +0 -74
  225. package/botrun-c/api/admin-tools/create-user.mjs +0 -92
  226. package/botrun-c/api/admin-tools/create-user.mjs.migration-bak +0 -92
  227. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py +0 -287
  228. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py.migration-bak +0 -287
  229. package/botrun-c/api/admin-tools/init-firestore.mjs +0 -75
  230. package/botrun-c/api/admin-tools/init-firestore.mjs.migration-bak +0 -101
  231. package/botrun-c/api/admin-tools/list-users.mjs +0 -43
  232. package/botrun-c/api/admin-tools/list-users.mjs.migration-bak +0 -43
  233. package/botrun-c/api/admin-tools/manage-authorized-domains.ts +0 -255
  234. package/botrun-c/api/admin-tools/manage-authorized-domains.ts.migration-bak +0 -255
  235. package/botrun-c/api/admin-tools/setup-custom-claims.ts.migration-bak +0 -155
  236. package/botrun-c/api/admin-tools/test-claims.mjs +0 -69
  237. package/botrun-c/api/admin-tools/test-claims.mjs.migration-bak +0 -69
  238. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs +0 -72
  239. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs.migration-bak +0 -72
  240. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs +0 -159
  241. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs.migration-bak +0 -159
  242. package/botrun-c/api/admin-tools/update-service-urls.mjs +0 -82
  243. package/botrun-c/api/admin-tools/update-service-urls.mjs.migration-bak +0 -82
  244. package/botrun-c/api/package-lock.json +0 -5031
  245. package/botrun-c/api/package.json +0 -63
  246. package/botrun-c/api/pnpm-lock.yaml +0 -4157
  247. package/botrun-c/api/rate-limit-export-1763620678737.csv +0 -79
  248. package/botrun-c/api/scripts/README-migrate-plan-free.md +0 -197
  249. package/botrun-c/api/scripts/check-users.ts +0 -45
  250. package/botrun-c/api/scripts/delete-firestore-docs.js +0 -43
  251. package/botrun-c/api/scripts/dump-subscriptions.ts +0 -395
  252. package/botrun-c/api/scripts/list-all-users.ts +0 -65
  253. package/botrun-c/api/scripts/migrate-plan-free-rpd-16to32.ts +0 -262
  254. package/botrun-c/api/scripts/migrate-plan-names-to-lite-max.ts +0 -269
  255. package/botrun-c/api/scripts/query-user-info.ts +0 -304
  256. package/botrun-c/api/scripts/reset-rate-limit.ts +0 -206
  257. package/botrun-c/api/scripts/reset-trial-subscription.ts +0 -166
  258. package/botrun-c/api/scripts/rollback-plan-names-from-lite-max.ts +0 -139
  259. package/botrun-c/api/scripts/seed-rate-limit-test-data.ts +0 -114
  260. package/botrun-c/api/scripts/seed-subscription-test-data.ts +0 -173
  261. package/botrun-c/api/scripts/test-rate-limit-message.ts +0 -108
  262. package/botrun-c/api/test-billing-write.ts +0 -103
  263. package/botrun-c/api/test-billing.ts +0 -81
  264. package/botrun-c/api/test-chat-upload.sh +0 -162
  265. package/botrun-c/api/test-nchc-whisper.ts +0 -87
  266. package/botrun-c/api/test-skills-loading.js +0 -77
  267. package/botrun-c/api/test-skills-symlink.js +0 -118
  268. package/botrun-c/api/test-upload-multimodal.sh +0 -167
  269. package/botrun-c/api/tsconfig.json +0 -27
  270. package/botrun-c/api/verify-form-2-1.mjs +0 -229
  271. package/botrun-c/api/vitest.config.ts +0 -9
  272. package/botrun-c/appium-capabilities.json +0 -20
  273. package/botrun-c/cors.json +0 -26
  274. package/botrun-c/delete-old.sh +0 -44
  275. package/botrun-c/design/google-drive/01-architecture.md +0 -186
  276. package/botrun-c/design/google-drive/02-api-design.md +0 -314
  277. package/botrun-c/design/google-drive/03-frontend-design.md +0 -278
  278. package/botrun-c/design/google-drive/04-skill-design.md +0 -384
  279. package/botrun-c/design/google-drive/05-test-plan.md +0 -507
  280. package/botrun-c/design/google-drive/README.md +0 -32
  281. package/botrun-c/dev/mcp-token-calculator/README.md +0 -92
  282. package/botrun-c/dev/mcp-token-calculator/RESULTS.md +0 -188
  283. package/botrun-c/dev/mcp-token-calculator/calculate-current-tokens.ts +0 -369
  284. package/botrun-c/dev/mcp-token-calculator/calculate-mcp-tokens.ts +0 -464
  285. package/botrun-c/dev/mcp-token-calculator/optimization-proposals.ts +0 -316
  286. package/botrun-c/dev/mcp-token-calculator/package-lock.json +0 -599
  287. package/botrun-c/dev/mcp-token-calculator/package.json +0 -22
  288. package/botrun-c/dev/mcp-token-calculator/test-all-schemas.ts +0 -314
  289. package/botrun-c/dev/mcp-token-calculator/test-schema-correctness.ts +0 -221
  290. package/botrun-c/dev/mcp-token-calculator/verify-optimization.ts +0 -159
  291. package/botrun-c/fastlane/ANDROID-DEPLOYMENT-SETUP.md +0 -825
  292. package/botrun-c/fastlane/IOS-DEPLOYMENT-SETUP.md +0 -431
  293. package/botrun-c/fastlane/Pluginfile +0 -5
  294. package/botrun-c/fastlane/QUICK-START.md +0 -133
  295. package/botrun-c/fastlane/README.md +0 -424
  296. package/botrun-c/fastlane/RUBY-SETUP.md +0 -449
  297. package/botrun-c/fastlane/android/Appfile +0 -11
  298. package/botrun-c/fastlane/android/Fastfile +0 -240
  299. package/botrun-c/firebase.json +0 -46
  300. package/botrun-c/firestore-init-data.json +0 -40
  301. package/botrun-c/firestore.indexes.json +0 -55
  302. package/botrun-c/firestore.rules +0 -53
  303. package/botrun-c/fix-codex-permissions.sh +0 -56
  304. package/botrun-c/gcs-lifecycle-30day-retention.json +0 -12
  305. package/botrun-c/html-architecture/architecture/deployment.html +0 -664
  306. package/botrun-c/html-architecture/architecture/index.html +0 -309
  307. package/botrun-c/html-architecture/architecture/styles.css +0 -500
  308. package/botrun-c/html-architecture/architecture/system-components.html +0 -538
  309. package/botrun-c/html-architecture/architecture/user-flow.html +0 -370
  310. package/botrun-c/mobile-android/FIREBASE-AUTH-SETUP.md +0 -302
  311. package/botrun-c/mobile-android/WSL-ANDROID-SETUP.md +0 -252
  312. package/botrun-c/mobile-android/android/app/build.gradle +0 -75
  313. package/botrun-c/mobile-android/android/app/capacitor.build.gradle +0 -31
  314. package/botrun-c/mobile-android/android/app/proguard-rules.pro +0 -21
  315. package/botrun-c/mobile-android/android/build.gradle +0 -29
  316. package/botrun-c/mobile-android/android/capacitor.settings.gradle +0 -42
  317. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  318. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  319. package/botrun-c/mobile-android/android/gradle.properties +0 -22
  320. package/botrun-c/mobile-android/android/gradlew +0 -252
  321. package/botrun-c/mobile-android/android/gradlew.bat +0 -94
  322. package/botrun-c/mobile-android/android/settings.gradle +0 -5
  323. package/botrun-c/mobile-android/android/variables.gradle +0 -16
  324. package/botrun-c/mobile-android/capacitor.config.ts +0 -44
  325. package/botrun-c/mobile-android/fastlane/Appfile +0 -11
  326. package/botrun-c/mobile-android/fastlane/Fastfile +0 -202
  327. package/botrun-c/mobile-android/fastlane/README.md +0 -96
  328. package/botrun-c/mobile-android/google-services.json.template +0 -39
  329. package/botrun-c/mobile-android/package.json +0 -32
  330. package/botrun-c/mobile-android/resources/icon.png +0 -0
  331. package/botrun-c/mobile-android/tsconfig.json +0 -15
  332. package/botrun-c/mobile-ios/.ruby-version +0 -1
  333. package/botrun-c/mobile-ios/BUILD-LOG.md +0 -82
  334. package/botrun-c/mobile-ios/Gemfile +0 -4
  335. package/botrun-c/mobile-ios/Gemfile.lock +0 -299
  336. package/botrun-c/mobile-ios/GoogleService-Info.plist.template +0 -34
  337. package/botrun-c/mobile-ios/IOS-PERMISSIONS.md +0 -80
  338. package/botrun-c/mobile-ios/QUICK-START.md +0 -189
  339. package/botrun-c/mobile-ios/README.md +0 -231
  340. package/botrun-c/mobile-ios/capacitor.config.ts +0 -46
  341. package/botrun-c/mobile-ios/fastlane/Fastfile +0 -326
  342. package/botrun-c/mobile-ios/fastlane/README.md +0 -88
  343. package/botrun-c/mobile-ios/ios/App/App/App.entitlements +0 -10
  344. package/botrun-c/mobile-ios/ios/App/App/AppDelegate.swift +0 -49
  345. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
  346. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  347. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Contents.json +0 -6
  348. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +0 -56
  349. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png +0 -0
  350. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png +0 -0
  351. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png +0 -0
  352. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png +0 -0
  353. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png +0 -0
  354. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png +0 -0
  355. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  356. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  357. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  358. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/LaunchScreen.storyboard +0 -32
  359. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/Main.storyboard +0 -19
  360. package/botrun-c/mobile-ios/ios/App/App/Info.plist +0 -72
  361. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/project.pbxproj +0 -446
  362. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme +0 -78
  363. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/contents.xcworkspacedata +0 -10
  364. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  365. package/botrun-c/mobile-ios/ios/App/Podfile +0 -52
  366. package/botrun-c/mobile-ios/ios/App/Podfile.lock +0 -205
  367. package/botrun-c/mobile-ios/ios/App/add_plist.rb +0 -30
  368. package/botrun-c/mobile-ios/ios/App/fix_plist_path.rb +0 -22
  369. package/botrun-c/mobile-ios/package.json +0 -29
  370. package/botrun-c/mobile-ios/resources/icon.png +0 -0
  371. package/botrun-c/mobile-ios/run-simulator.sh +0 -34
  372. package/botrun-c/mobile-ios/screenshot-after-clean-rebuild.png +0 -0
  373. package/botrun-c/mobile-ios/screenshot-final-version.png +0 -0
  374. package/botrun-c/mobile-ios/screenshot-simulator.png +0 -0
  375. package/botrun-c/mobile-ios/screenshot-version-1009.png +0 -0
  376. package/botrun-c/mobile-ios/screenshot-with-version.png +0 -0
  377. package/botrun-c/mobile-ios/screenshot-working.png +0 -0
  378. package/botrun-c/mobile-ios/setup-ios.sh +0 -106
  379. package/botrun-c/mobile-ios/tsconfig.json +0 -16
  380. package/botrun-c/org-policy-allow-all-users.yaml +0 -3
  381. package/botrun-c/package.json +0 -68
  382. package/botrun-c/pnpm-lock.yaml +0 -10198
  383. package/botrun-c/pnpm-workspace.yaml +0 -6
  384. package/botrun-c/prompts/BOTRUN-1.md +0 -13
  385. package/botrun-c/prompts/BOTRUN-2.md +0 -70
  386. package/botrun-c/prompts/BOTRUN-3.md +0 -139
  387. package/botrun-c/prototypes/firestore-gax-debug/package-lock.json +0 -1204
  388. package/botrun-c/prototypes/firestore-gax-debug/package.json +0 -12
  389. package/botrun-c/prototypes/firestore-gax-debug/pnpm-workspace.yaml +0 -2
  390. package/botrun-c/prototypes/firestore-gax-debug/test.js +0 -98
  391. package/botrun-c/prototypes/taiwan-haiku/README.md +0 -93
  392. package/botrun-c/prototypes/taiwan-haiku/index.ts +0 -139
  393. package/botrun-c/prototypes/taiwan-haiku/package.json +0 -23
  394. package/botrun-c/prototypes/taiwan-haiku/pnpm-lock.yaml +0 -730
  395. package/botrun-c/prototypes/taiwan-haiku/test-vertex-direct.ts +0 -83
  396. package/botrun-c/prototypes/taiwan-haiku/tsconfig.json +0 -18
  397. package/botrun-c/prototypes/web-search/FINDINGS-STAGE-1.md +0 -48
  398. package/botrun-c/prototypes/web-search/README.md +0 -46
  399. package/botrun-c/prototypes/web-search/VERIFICATION-REPORT.md +0 -310
  400. package/botrun-c/prototypes/web-search/package-lock.json +0 -595
  401. package/botrun-c/prototypes/web-search/package.json +0 -18
  402. package/botrun-c/prototypes/web-search/stage-1.1-basic-connection.js +0 -123
  403. package/botrun-c/prototypes/web-search/stage-1.2-with-websearch.js +0 -154
  404. package/botrun-c/prototypes/web-search/stage-1.3-search-query.js +0 -192
  405. package/botrun-c/prototypes/web-search/stage-2-agent-sdk-websearch.js +0 -265
  406. package/botrun-c/runtime-scripts/env-detect.sh +0 -64
  407. package/botrun-c/scripts/github-collaborator-manager.sh +0 -297
  408. package/botrun-c/scripts/github-collaborator-manager.ts +0 -325
  409. package/botrun-c/scripts/manage-collaborators.sh +0 -91
  410. package/botrun-c/scripts/setup-secrets.sh +0 -202
  411. package/botrun-c/scripts/stress-test-17-users.sh +0 -113
  412. package/botrun-c/scripts/stress-test-api.sh +0 -119
  413. package/botrun-c/scripts/stress-test-full-report.sh +0 -385
  414. package/botrun-c/specs/infra-vm/design.md +0 -0
  415. package/botrun-c/specs/share-skill/design.md +0 -1146
  416. package/botrun-c/specs/share-skill/tasks.md +0 -444
  417. package/botrun-c/stress-test-results/20260121-162630/config.json +0 -7
  418. package/botrun-c/stress-test-results/20260121-162630/user-1-status.txt +0 -1
  419. package/botrun-c/stress-test-results/20260121-162630/user-1-timing.txt +0 -1
  420. package/botrun-c/stress-test-results/20260121-162630/user-1.json +0 -2
  421. package/botrun-c/stress-test-results/20260121-162646/config.json +0 -7
  422. package/botrun-c/stress-test-results/20260121-162646/user-1-status.txt +0 -1
  423. package/botrun-c/stress-test-results/20260121-162646/user-1-timing.txt +0 -1
  424. package/botrun-c/stress-test-results/20260121-162646/user-1.json +0 -2
  425. package/botrun-c/stress-test-results/20260121-162646/user-10-status.txt +0 -1
  426. package/botrun-c/stress-test-results/20260121-162646/user-10-timing.txt +0 -1
  427. package/botrun-c/stress-test-results/20260121-162646/user-10.json +0 -2
  428. package/botrun-c/stress-test-results/20260121-162646/user-11-status.txt +0 -1
  429. package/botrun-c/stress-test-results/20260121-162646/user-11-timing.txt +0 -1
  430. package/botrun-c/stress-test-results/20260121-162646/user-11.json +0 -2
  431. package/botrun-c/stress-test-results/20260121-162646/user-12-status.txt +0 -1
  432. package/botrun-c/stress-test-results/20260121-162646/user-12-timing.txt +0 -1
  433. package/botrun-c/stress-test-results/20260121-162646/user-12.json +0 -2
  434. package/botrun-c/stress-test-results/20260121-162646/user-13-status.txt +0 -1
  435. package/botrun-c/stress-test-results/20260121-162646/user-13-timing.txt +0 -1
  436. package/botrun-c/stress-test-results/20260121-162646/user-13.json +0 -2
  437. package/botrun-c/stress-test-results/20260121-162646/user-14-status.txt +0 -1
  438. package/botrun-c/stress-test-results/20260121-162646/user-14-timing.txt +0 -1
  439. package/botrun-c/stress-test-results/20260121-162646/user-14.json +0 -2
  440. package/botrun-c/stress-test-results/20260121-162646/user-15-status.txt +0 -1
  441. package/botrun-c/stress-test-results/20260121-162646/user-15-timing.txt +0 -1
  442. package/botrun-c/stress-test-results/20260121-162646/user-15.json +0 -2
  443. package/botrun-c/stress-test-results/20260121-162646/user-16-status.txt +0 -1
  444. package/botrun-c/stress-test-results/20260121-162646/user-16-timing.txt +0 -1
  445. package/botrun-c/stress-test-results/20260121-162646/user-16.json +0 -2
  446. package/botrun-c/stress-test-results/20260121-162646/user-17-status.txt +0 -1
  447. package/botrun-c/stress-test-results/20260121-162646/user-17-timing.txt +0 -1
  448. package/botrun-c/stress-test-results/20260121-162646/user-17.json +0 -2
  449. package/botrun-c/stress-test-results/20260121-162646/user-2-status.txt +0 -1
  450. package/botrun-c/stress-test-results/20260121-162646/user-2-timing.txt +0 -1
  451. package/botrun-c/stress-test-results/20260121-162646/user-2.json +0 -2
  452. package/botrun-c/stress-test-results/20260121-162646/user-3-status.txt +0 -1
  453. package/botrun-c/stress-test-results/20260121-162646/user-3-timing.txt +0 -1
  454. package/botrun-c/stress-test-results/20260121-162646/user-3.json +0 -2
  455. package/botrun-c/stress-test-results/20260121-162646/user-4-status.txt +0 -1
  456. package/botrun-c/stress-test-results/20260121-162646/user-4-timing.txt +0 -1
  457. package/botrun-c/stress-test-results/20260121-162646/user-4.json +0 -2
  458. package/botrun-c/stress-test-results/20260121-162646/user-5-status.txt +0 -1
  459. package/botrun-c/stress-test-results/20260121-162646/user-5-timing.txt +0 -1
  460. package/botrun-c/stress-test-results/20260121-162646/user-5.json +0 -2
  461. package/botrun-c/stress-test-results/20260121-162646/user-6-status.txt +0 -1
  462. package/botrun-c/stress-test-results/20260121-162646/user-6-timing.txt +0 -1
  463. package/botrun-c/stress-test-results/20260121-162646/user-6.json +0 -2
  464. package/botrun-c/stress-test-results/20260121-162646/user-7-status.txt +0 -1
  465. package/botrun-c/stress-test-results/20260121-162646/user-7-timing.txt +0 -1
  466. package/botrun-c/stress-test-results/20260121-162646/user-7.json +0 -2
  467. package/botrun-c/stress-test-results/20260121-162646/user-8-status.txt +0 -1
  468. package/botrun-c/stress-test-results/20260121-162646/user-8-timing.txt +0 -1
  469. package/botrun-c/stress-test-results/20260121-162646/user-8.json +0 -2
  470. package/botrun-c/stress-test-results/20260121-162646/user-9-status.txt +0 -1
  471. package/botrun-c/stress-test-results/20260121-162646/user-9-timing.txt +0 -1
  472. package/botrun-c/stress-test-results/20260121-162646/user-9.json +0 -2
  473. package/botrun-c/stress-test-results/20260121-163148/REPORT.html +0 -344
  474. package/botrun-c/stress-test-results/20260121-163148/REPORT.md +0 -93
  475. package/botrun-c/stress-test-results/20260121-163148/REPORT.pdf +0 -0
  476. package/botrun-c/stress-test-results/20260121-163148/config.json +0 -7
  477. package/botrun-c/stress-test-results/20260121-163148/summary.json +0 -26
  478. package/botrun-c/stress-test-results/20260121-163148/user-1-status.txt +0 -1
  479. package/botrun-c/stress-test-results/20260121-163148/user-1-timing.txt +0 -1
  480. package/botrun-c/stress-test-results/20260121-163148/user-1.json +0 -206
  481. package/botrun-c/stress-test-results/20260121-163148/user-10-status.txt +0 -1
  482. package/botrun-c/stress-test-results/20260121-163148/user-10-timing.txt +0 -1
  483. package/botrun-c/stress-test-results/20260121-163148/user-10.json +0 -110
  484. package/botrun-c/stress-test-results/20260121-163148/user-11-status.txt +0 -1
  485. package/botrun-c/stress-test-results/20260121-163148/user-11-timing.txt +0 -1
  486. package/botrun-c/stress-test-results/20260121-163148/user-11.json +0 -104
  487. package/botrun-c/stress-test-results/20260121-163148/user-12-status.txt +0 -1
  488. package/botrun-c/stress-test-results/20260121-163148/user-12-timing.txt +0 -1
  489. package/botrun-c/stress-test-results/20260121-163148/user-12.json +0 -98
  490. package/botrun-c/stress-test-results/20260121-163148/user-13-status.txt +0 -1
  491. package/botrun-c/stress-test-results/20260121-163148/user-13-timing.txt +0 -1
  492. package/botrun-c/stress-test-results/20260121-163148/user-13.json +0 -68
  493. package/botrun-c/stress-test-results/20260121-163148/user-14-status.txt +0 -1
  494. package/botrun-c/stress-test-results/20260121-163148/user-14-timing.txt +0 -1
  495. package/botrun-c/stress-test-results/20260121-163148/user-14.json +0 -116
  496. package/botrun-c/stress-test-results/20260121-163148/user-15-status.txt +0 -1
  497. package/botrun-c/stress-test-results/20260121-163148/user-15-timing.txt +0 -1
  498. package/botrun-c/stress-test-results/20260121-163148/user-15.json +0 -131
  499. package/botrun-c/stress-test-results/20260121-163148/user-16-status.txt +0 -1
  500. package/botrun-c/stress-test-results/20260121-163148/user-16-timing.txt +0 -1
  501. package/botrun-c/stress-test-results/20260121-163148/user-16.json +0 -110
  502. package/botrun-c/stress-test-results/20260121-163148/user-17-status.txt +0 -1
  503. package/botrun-c/stress-test-results/20260121-163148/user-17-timing.txt +0 -1
  504. package/botrun-c/stress-test-results/20260121-163148/user-17.json +0 -116
  505. package/botrun-c/stress-test-results/20260121-163148/user-2-status.txt +0 -1
  506. package/botrun-c/stress-test-results/20260121-163148/user-2-timing.txt +0 -1
  507. package/botrun-c/stress-test-results/20260121-163148/user-2.json +0 -98
  508. package/botrun-c/stress-test-results/20260121-163148/user-3-status.txt +0 -1
  509. package/botrun-c/stress-test-results/20260121-163148/user-3-timing.txt +0 -1
  510. package/botrun-c/stress-test-results/20260121-163148/user-3.json +0 -62
  511. package/botrun-c/stress-test-results/20260121-163148/user-4-status.txt +0 -1
  512. package/botrun-c/stress-test-results/20260121-163148/user-4-timing.txt +0 -1
  513. package/botrun-c/stress-test-results/20260121-163148/user-4.json +0 -113
  514. package/botrun-c/stress-test-results/20260121-163148/user-5-status.txt +0 -1
  515. package/botrun-c/stress-test-results/20260121-163148/user-5-timing.txt +0 -1
  516. package/botrun-c/stress-test-results/20260121-163148/user-5.json +0 -83
  517. package/botrun-c/stress-test-results/20260121-163148/user-6-status.txt +0 -1
  518. package/botrun-c/stress-test-results/20260121-163148/user-6-timing.txt +0 -1
  519. package/botrun-c/stress-test-results/20260121-163148/user-6.json +0 -125
  520. package/botrun-c/stress-test-results/20260121-163148/user-7-status.txt +0 -1
  521. package/botrun-c/stress-test-results/20260121-163148/user-7-timing.txt +0 -1
  522. package/botrun-c/stress-test-results/20260121-163148/user-7.json +0 -62
  523. package/botrun-c/stress-test-results/20260121-163148/user-8-status.txt +0 -1
  524. package/botrun-c/stress-test-results/20260121-163148/user-8-timing.txt +0 -1
  525. package/botrun-c/stress-test-results/20260121-163148/user-8.json +0 -41
  526. package/botrun-c/stress-test-results/20260121-163148/user-9-status.txt +0 -1
  527. package/botrun-c/stress-test-results/20260121-163148/user-9-timing.txt +0 -1
  528. package/botrun-c/stress-test-results/20260121-163148/user-9.json +0 -53
  529. package/botrun-c/test-merge.md +0 -1
  530. package/botrun-c/version.txt +0 -1
  531. package/botrun-c/web/.version +0 -1
  532. package/botrun-c/web/ALLOW-PUBLIC-ACCESS.md +0 -57
  533. package/botrun-c/web/FINAL-SETUP-STEPS.md +0 -71
  534. package/botrun-c/web/FIREBASE-MANUAL-STEPS.md +0 -41
  535. package/botrun-c/web/QUICK-SETUP-HELPER.md +0 -79
  536. package/botrun-c/web/README.md +0 -162
  537. package/botrun-c/web/__tests__/image-extractor.test.ts +0 -147
  538. package/botrun-c/web/__tests__/useGitHub.test.ts +0 -245
  539. package/botrun-c/web/app/favicon.ico +0 -0
  540. package/botrun-c/web/app/globals.css +0 -215
  541. package/botrun-c/web/app/image-preview/page.tsx +0 -213
  542. package/botrun-c/web/app/layout.tsx +0 -46
  543. package/botrun-c/web/app/page.tsx +0 -45
  544. package/botrun-c/web/components/CapacitorProvider.tsx +0 -43
  545. package/botrun-c/web/components/ChatPage.tsx +0 -1736
  546. package/botrun-c/web/components/ConversationList.tsx +0 -237
  547. package/botrun-c/web/components/ConversationListItem.tsx +0 -121
  548. package/botrun-c/web/components/LoginPage.tsx +0 -212
  549. package/botrun-c/web/components/Providers.tsx +0 -12
  550. package/botrun-c/web/components/StatusBarProvider.tsx +0 -16
  551. package/botrun-c/web/components/attachment-preview.tsx +0 -193
  552. package/botrun-c/web/components/botrun-incubator/BotrunIncubator.tsx +0 -266
  553. package/botrun-c/web/components/botrun-incubator/index.ts +0 -1
  554. package/botrun-c/web/components/chat-input.tsx +0 -1251
  555. package/botrun-c/web/components/chat-message.tsx +0 -598
  556. package/botrun-c/web/components/drop-zone.tsx +0 -143
  557. package/botrun-c/web/components/gdrive/gdrive-add-dialog.tsx +0 -254
  558. package/botrun-c/web/components/gdrive/gdrive-drawer.tsx +0 -236
  559. package/botrun-c/web/components/gdrive/gdrive-selector.tsx +0 -226
  560. package/botrun-c/web/components/gdrive/index.ts +0 -7
  561. package/botrun-c/web/components/generated-image-card.tsx +0 -363
  562. package/botrun-c/web/components/github/GitHubConnect.tsx +0 -366
  563. package/botrun-c/web/components/github/index.ts +0 -2
  564. package/botrun-c/web/components/import-skill-dialog.tsx +0 -208
  565. package/botrun-c/web/components/scroll-to-bottom-button.tsx +0 -90
  566. package/botrun-c/web/components/share-skill-dialog.tsx +0 -175
  567. package/botrun-c/web/components/skills-editor.tsx +0 -443
  568. package/botrun-c/web/components/skills-manager-drawer.tsx +0 -586
  569. package/botrun-c/web/components/smart-button-group.tsx +0 -132
  570. package/botrun-c/web/config/smart-buttons.ts +0 -295
  571. package/botrun-c/web/config/welcome-messages.ts +0 -29
  572. package/botrun-c/web/contexts/AuthContext.tsx +0 -220
  573. package/botrun-c/web/hooks/use-toast.ts +0 -187
  574. package/botrun-c/web/hooks/useAppStoreUpdate.ts +0 -356
  575. package/botrun-c/web/hooks/useAppVersion.ts +0 -113
  576. package/botrun-c/web/hooks/useAttachments.ts +0 -269
  577. package/botrun-c/web/hooks/useAuthToken.ts +0 -59
  578. package/botrun-c/web/hooks/useAutoWelcome.ts +0 -89
  579. package/botrun-c/web/hooks/useCapacitorPlatform.ts +0 -113
  580. package/botrun-c/web/hooks/useCapawesomeLiveUpdate.ts +0 -149
  581. package/botrun-c/web/hooks/useClaudeModel.ts +0 -118
  582. package/botrun-c/web/hooks/useConversation.ts +0 -115
  583. package/botrun-c/web/hooks/useConversations.ts +0 -235
  584. package/botrun-c/web/hooks/useGdriveFolders.ts +0 -199
  585. package/botrun-c/web/hooks/useGdriveSync.ts +0 -107
  586. package/botrun-c/web/hooks/useGitHub.ts +0 -409
  587. package/botrun-c/web/hooks/useScrollToBottom.ts +0 -150
  588. package/botrun-c/web/hooks/useStatusBar.ts +0 -42
  589. package/botrun-c/web/hooks/useUserPlan.ts +0 -153
  590. package/botrun-c/web/lib/api-config.ts +0 -162
  591. package/botrun-c/web/lib/api-url.ts +0 -62
  592. package/botrun-c/web/lib/api.ts +0 -105
  593. package/botrun-c/web/lib/attachment-utils.ts +0 -168
  594. package/botrun-c/web/lib/build-version.ts +0 -11
  595. package/botrun-c/web/lib/clipboard-utils.ts +0 -199
  596. package/botrun-c/web/lib/constants.ts +0 -62
  597. package/botrun-c/web/lib/conversation-storage.ts +0 -324
  598. package/botrun-c/web/lib/firebase-capacitor.ts +0 -135
  599. package/botrun-c/web/lib/firebase.ts +0 -137
  600. package/botrun-c/web/lib/firestore-auth.ts +0 -61
  601. package/botrun-c/web/lib/firestore-auth.ts.migration-bak +0 -319
  602. package/botrun-c/web/lib/image-extractor.ts +0 -156
  603. package/botrun-c/web/lib/path-utils.ts +0 -48
  604. package/botrun-c/web/lib/rehype-del-to-mark.ts +0 -19
  605. package/botrun-c/web/lib/upload-service.ts +0 -326
  606. package/botrun-c/web/lib/utils.ts +0 -6
  607. package/botrun-c/web/next.config.js +0 -49
  608. package/botrun-c/web/package-lock.json +0 -6711
  609. package/botrun-c/web/package.json +0 -63
  610. package/botrun-c/web/postcss.config.js +0 -6
  611. package/botrun-c/web/public/apple_icon.png +0 -0
  612. package/botrun-c/web/public/google_icon.png +0 -0
  613. package/botrun-c/web/public/logo-48-small.png +0 -0
  614. package/botrun-c/web/public/logo-48.png +0 -0
  615. package/botrun-c/web/scripts/generate-version.js +0 -36
  616. package/botrun-c/web/scripts/update-build-version.js +0 -41
  617. package/botrun-c/web/tailwind.config.ts +0 -80
  618. package/botrun-c/web/test-welcome-message.mjs +0 -115
  619. package/botrun-c/web/tsconfig.json +0 -42
  620. package/botrun-c/web/types/agent.ts +0 -6
  621. package/botrun-c/web/types/attachment.ts +0 -39
  622. package/botrun-c/web/types/conversation.ts +0 -68
  623. package/botrun-c/web/types/flutter.d.ts +0 -6
  624. package/botrun-c/web/types/project.ts +0 -41
  625. package/botrun-c/web/types/skills.ts +0 -13
  626. 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 +0 -83
  627. package/lib/writing/index.mjs +0 -5
  628. /package/{lib/core → modules/_core}/adapters/base.mjs +0 -0
  629. /package/{lib/core → modules/_core}/adapters/claude.mjs +0 -0
  630. /package/{lib/core → modules/_core}/adapters/gemini-api.mjs +0 -0
  631. /package/{lib/core → modules/_core}/adapters/gemini-shared.mjs +0 -0
  632. /package/{lib/core → modules/_core}/adapters/gemini-vertex.mjs +0 -0
  633. /package/{lib/core → modules/_core}/adapters/local.mjs +0 -0
  634. /package/{lib/core → modules/_core}/adapters/nchc.mjs +0 -0
  635. /package/{lib/core → modules/_core}/adapters/openai-shared.mjs +0 -0
  636. /package/{lib/core → modules/_core}/adapters/openrouter.mjs +0 -0
  637. /package/{lib/core → modules/_core}/ai-cache.mjs +0 -0
  638. /package/{lib/core → modules/_core}/ai-router.mjs +0 -0
  639. /package/{lib/core → modules/_core}/cli-utils.mjs +0 -0
  640. /package/{lib/core → modules/_core}/dag.mjs +0 -0
  641. /package/{lib/core → modules/_core}/db.mjs +0 -0
  642. /package/{lib/core → modules/_core}/env.mjs +0 -0
  643. /package/{lib/flows → modules/_core}/hatch-portal.mjs +0 -0
  644. /package/{lib/core → modules/_core}/llm.mjs +0 -0
  645. /package/{lib/flows → modules/_core}/opencode-agent.mjs +0 -0
  646. /package/{lib/core → modules/_core}/paths.mjs +0 -0
  647. /package/{lib/core → modules/_core}/proxy.mjs +0 -0
  648. /package/{lib/flows → modules/_core}/review-doc.mjs +0 -0
  649. /package/{lib → modules/_core}/tools/fs-tools.mjs +0 -0
  650. /package/{lib → modules/_core}/tools/index.mjs +0 -0
  651. /package/{lib/core → modules/_core}/watermelon.mjs +0 -0
  652. /package/{lib/ocr/index.mjs → modules/ocr/ocr-lib.mjs} +0 -0
  653. /package/{lib → modules}/portal/hatch.mjs +0 -0
  654. /package/{lib/portal/index.mjs → modules/portal/portal-lib.mjs} +0 -0
  655. /package/{lib → modules}/search/crawler.mjs +0 -0
  656. /package/{lib/prompt → modules/skill}/prompts/zero-framework/coding.md +0 -0
  657. /package/{lib/prompt → modules/skill}/prompts/zero-framework/fullstack.md +0 -0
  658. /package/{lib/prompt → modules/skill}/prompts/zero-framework/search.md +0 -0
  659. /package/{lib/prompt → modules/skill}/prompts/zero-framework/segment.md +0 -0
  660. /package/{lib/prompt → modules/skill}/prompts/zero-framework/slice.md +0 -0
  661. /package/{lib → modules}/writing/generators/nstc-generators.mjs +0 -0
  662. /package/{lib → modules}/writing/generators/nstc-top5.mjs +0 -0
  663. /package/{lib → modules}/writing/layouts/nstc-layout.mjs +0 -0
  664. /package/{lib → modules}/writing/renderer.mjs +0 -0
@@ -1,135 +0,0 @@
1
- // Capacitor Firebase Authentication for iOS/Android
2
- import { Capacitor } from '@capacitor/core';
3
- import { FirebaseAuthentication } from '@capacitor-firebase/authentication';
4
- import type { User } from 'firebase/auth';
5
-
6
- // 版本號:用於確認更新是否生效
7
- const FIREBASE_CAPACITOR_VERSION = '2.1.0-fix-getIdToken';
8
- console.log(`[firebase-capacitor] 🔄 Module loaded - Version: ${FIREBASE_CAPACITOR_VERSION}`);
9
-
10
- export const isNativePlatform = () => {
11
- const isNative = Capacitor.isNativePlatform();
12
- console.log('[Capacitor] Platform check:', {
13
- isNative,
14
- platform: Capacitor.getPlatform(),
15
- });
16
- return isNative;
17
- };
18
-
19
- export const signInWithGoogleNative = async (): Promise<User | null> => {
20
- try {
21
- console.log(`[Firebase Capacitor] 🚀 Starting Google Sign-In - Version: ${FIREBASE_CAPACITOR_VERSION}`);
22
- console.log('[Firebase Capacitor] Calling FirebaseAuthentication.signInWithGoogle()...');
23
-
24
- const result = await FirebaseAuthentication.signInWithGoogle();
25
- console.log('[Firebase Capacitor] signInWithGoogle returned:', result);
26
-
27
- console.log('[Firebase Capacitor] ✅ Sign-In successful:', {
28
- uid: result.user?.uid,
29
- email: result.user?.email,
30
- displayName: result.user?.displayName,
31
- });
32
-
33
- // 轉換為 Firebase User 格式
34
- const user: User = {
35
- uid: result.user?.uid || '',
36
- email: result.user?.email || null,
37
- emailVerified: result.user?.emailVerified || false,
38
- displayName: result.user?.displayName || null,
39
- photoURL: result.user?.photoUrl || null,
40
- phoneNumber: result.user?.phoneNumber || null,
41
- isAnonymous: result.user?.isAnonymous || false,
42
- tenantId: result.user?.tenantId || null,
43
- providerData: [],
44
- metadata: {} as any,
45
- refreshToken: '',
46
- providerId: 'google.com',
47
- delete: async () => {},
48
- getIdToken: async (forceRefresh?: boolean) => {
49
- try {
50
- console.log('[Firebase Capacitor] 🔐 Getting ID token...');
51
- const tokenResult = await FirebaseAuthentication.getIdToken({ forceRefresh: forceRefresh || false });
52
- console.log('[Firebase Capacitor] ✅ ID token obtained, length:', tokenResult.token?.length || 0);
53
- return tokenResult.token || '';
54
- } catch (error) {
55
- console.error('[Firebase Capacitor] ❌ Failed to get ID token:', error);
56
- return '';
57
- }
58
- },
59
- getIdTokenResult: async () => ({} as any),
60
- reload: async () => {},
61
- toJSON: () => ({}),
62
- };
63
-
64
- return user;
65
- } catch (error) {
66
- console.error('[Firebase Capacitor] ❌ Sign-In failed:', error);
67
- throw error;
68
- }
69
- };
70
-
71
- export const signOutNative = async (): Promise<void> => {
72
- try {
73
- console.log(`[Firebase Capacitor] 🚪 Signing out - Version: ${FIREBASE_CAPACITOR_VERSION}`);
74
- await FirebaseAuthentication.signOut();
75
- console.log('[Firebase Capacitor] ✅ Signed out successfully');
76
- } catch (error) {
77
- console.error('[Firebase Capacitor] ❌ Sign-Out failed:', error);
78
- throw error;
79
- }
80
- };
81
-
82
- export const getCurrentUserNative = async (): Promise<User | null> => {
83
- try {
84
- console.log(`[Firebase Capacitor] 🔍 Getting current user - Version: ${FIREBASE_CAPACITOR_VERSION}`);
85
-
86
- const result = await FirebaseAuthentication.getCurrentUser();
87
- console.log('[Firebase Capacitor] getCurrentUser returned:', result);
88
-
89
- if (!result.user) {
90
- console.log('[Firebase Capacitor] No current user');
91
- return null;
92
- }
93
-
94
- console.log('[Firebase Capacitor] Current user:', {
95
- uid: result.user.uid,
96
- email: result.user.email,
97
- });
98
-
99
- // 轉換為 Firebase User 格式
100
- const user: User = {
101
- uid: result.user.uid || '',
102
- email: result.user.email || null,
103
- emailVerified: result.user.emailVerified || false,
104
- displayName: result.user.displayName || null,
105
- photoURL: result.user.photoUrl || null,
106
- phoneNumber: result.user.phoneNumber || null,
107
- isAnonymous: result.user.isAnonymous || false,
108
- tenantId: result.user.tenantId || null,
109
- providerData: [],
110
- metadata: {} as any,
111
- refreshToken: '',
112
- providerId: 'google.com',
113
- delete: async () => {},
114
- getIdToken: async (forceRefresh?: boolean) => {
115
- try {
116
- console.log('[Firebase Capacitor] 🔐 Getting ID token...');
117
- const tokenResult = await FirebaseAuthentication.getIdToken({ forceRefresh: forceRefresh || false });
118
- console.log('[Firebase Capacitor] ✅ ID token obtained, length:', tokenResult.token?.length || 0);
119
- return tokenResult.token || '';
120
- } catch (error) {
121
- console.error('[Firebase Capacitor] ❌ Failed to get ID token:', error);
122
- return '';
123
- }
124
- },
125
- getIdTokenResult: async () => ({} as any),
126
- reload: async () => {},
127
- toJSON: () => ({}),
128
- };
129
-
130
- return user;
131
- } catch (error) {
132
- console.error('[Firebase Capacitor] ❌ Get current user failed:', error);
133
- return null;
134
- }
135
- };
@@ -1,137 +0,0 @@
1
- import { initializeApp, getApps, getApp, FirebaseApp } from 'firebase/app';
2
- import { getAuth, Auth, GoogleAuthProvider } from 'firebase/auth';
3
- import { Capacitor } from '@capacitor/core';
4
-
5
- const firebaseConfig = {
6
- apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
7
- authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
8
- projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
9
- storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
10
- messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
11
- appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
12
- measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID,
13
- };
14
-
15
- let app: FirebaseApp | undefined;
16
- let auth: Auth | undefined;
17
- let _googleProvider: GoogleAuthProvider | undefined;
18
-
19
- // 檢查是否為原生平台
20
- const isNative = Capacitor.isNativePlatform();
21
-
22
- // 初始化 Firebase App 的函數,確保只在客戶端執行
23
- function initializeFirebaseClient() {
24
- if (typeof window !== 'undefined') {
25
- // 檢查是否在瀏覽器環境
26
- console.log('[Firebase] Initializing Firebase client...');
27
- console.log('[Firebase] Platform:', isNative ? 'Native (Capacitor)' : 'Web');
28
- console.log('[Firebase] Config check:', {
29
- hasApiKey: !!firebaseConfig.apiKey,
30
- hasAuthDomain: !!firebaseConfig.authDomain,
31
- hasProjectId: !!firebaseConfig.projectId,
32
- apiKeyPrefix: firebaseConfig.apiKey?.substring(0, 10),
33
- authDomain: firebaseConfig.authDomain,
34
- projectId: firebaseConfig.projectId,
35
- });
36
-
37
- // 如果是原生平台,只初始化 Firebase App,不初始化 Web Auth
38
- if (isNative) {
39
- console.log('[Firebase] ⚠️ Native platform detected - skipping Firebase Web Auth initialization');
40
- console.log('[Firebase] Native auth will be handled by @capacitor-firebase/authentication');
41
-
42
- // 只初始化 Firebase App(用於其他 Firebase 服務,如 Firestore)
43
- if (!getApps().length) {
44
- try {
45
- app = initializeApp(firebaseConfig);
46
- console.log('[Firebase] ✅ Firebase app initialized (native mode)');
47
- } catch (error) {
48
- console.error('[Firebase] ❌ Failed to initialize Firebase app:', error);
49
- }
50
- }
51
- return; // 不初始化 Web Auth 和 GoogleProvider
52
- }
53
-
54
- // Web 平台:正常初始化
55
- // 檢查必要的配置
56
- if (!firebaseConfig.apiKey || !firebaseConfig.authDomain || !firebaseConfig.projectId) {
57
- const errorMsg = `[Firebase] ❌ Missing config - apiKey: ${firebaseConfig.apiKey ? 'SET' : 'MISSING'}, authDomain: ${firebaseConfig.authDomain || 'MISSING'}, projectId: ${firebaseConfig.projectId || 'MISSING'}`;
58
- console.error(errorMsg);
59
- console.error('[Firebase] ❌ Firebase will not be initialized. Check environment variables.');
60
- return;
61
- }
62
-
63
- // 成功讀取配置
64
- console.log('[Firebase] ✅ Config loaded successfully!', {
65
- authDomain: firebaseConfig.authDomain,
66
- projectId: firebaseConfig.projectId,
67
- });
68
-
69
- if (!getApps().length) {
70
- console.log('[Firebase] No existing app found, creating new Firebase app');
71
- try {
72
- app = initializeApp(firebaseConfig);
73
- console.log('[Firebase] ✅ Firebase app initialized successfully');
74
- } catch (error) {
75
- console.error('[Firebase] ❌ Failed to initialize Firebase app:', error);
76
- return;
77
- }
78
- } else {
79
- app = getApp();
80
- console.log('[Firebase] ✅ Using existing Firebase app');
81
- }
82
-
83
- // 確保 app 已成功初始化才獲取 auth
84
- if (app && !auth) {
85
- try {
86
- auth = getAuth(app);
87
- console.log('[Firebase] ✅ Firebase Auth initialized successfully');
88
- } catch (error) {
89
- console.error('[Firebase] ❌ Failed to initialize Firebase Auth:', error);
90
- auth = undefined;
91
- }
92
- }
93
- } else {
94
- console.log('[Firebase] Skipping initialization (not in browser environment)');
95
- }
96
- }
97
-
98
- // 在模組載入時呼叫一次初始化函數
99
- initializeFirebaseClient();
100
-
101
- // 提供一個獲取 auth 實例的函數
102
- export function getClientAuth(): Auth | undefined {
103
- if (!auth && typeof window !== 'undefined' && !isNative) {
104
- console.warn('[Firebase] Auth is not initialized. This may be due to an earlier error.');
105
- }
106
- return auth;
107
- }
108
-
109
- // 提供一個獲取 Google Provider 的函數(只在 Web 平台創建)
110
- export function getGoogleProvider(): GoogleAuthProvider | undefined {
111
- if (isNative) {
112
- console.warn('[Firebase] GoogleProvider is not available on native platform. Use signInWithGoogleNative() instead.');
113
- return undefined;
114
- }
115
-
116
- // Lazy initialization: 只在 Web 平台且第一次呼叫時創建
117
- if (!_googleProvider && typeof window !== 'undefined') {
118
- console.log('[Firebase] Creating GoogleAuthProvider for web platform');
119
- _googleProvider = new GoogleAuthProvider();
120
- _googleProvider.setCustomParameters({
121
- prompt: 'select_account'
122
- });
123
- }
124
-
125
- return _googleProvider;
126
- }
127
-
128
- // 為了向後相容,export 一個 proxy
129
- export const googleProvider = new Proxy({} as GoogleAuthProvider, {
130
- get(target, prop) {
131
- const provider = getGoogleProvider();
132
- if (!provider) {
133
- throw new Error('GoogleProvider is not available on native platform');
134
- }
135
- return (provider as any)[prop];
136
- }
137
- });
@@ -1,61 +0,0 @@
1
- /**
2
- * Firestore Authentication & Authorization Utilities
3
- * 簡化版:只要 Gmail 登入即可使用
4
- *
5
- * 🔑 架構說明:
6
- * - 任何 Google 帳號都可以登入使用
7
- * - 不需要白名單驗證
8
- * - 不需要使用者文件設定
9
- */
10
-
11
- import { User } from 'firebase/auth';
12
-
13
- /**
14
- * 檢查使用者是否有權存取當前服務
15
- * 簡化版:任何 Gmail 登入即可使用
16
- */
17
- export async function checkServiceAccess(email: string): Promise<{
18
- allowed: boolean;
19
- error?: string;
20
- }> {
21
- try {
22
- console.log('✅ [Service Access] Gmail 登入成功:', email);
23
- console.log('✅ [Service Access] 任何 Google 帳號都可以使用此系統');
24
-
25
- // 直接允許存取
26
- return {
27
- allowed: true,
28
- };
29
- } catch (error) {
30
- console.error('❌ [Service Access] Error:', error);
31
- return {
32
- allowed: false,
33
- error: '系統錯誤,請稍後再試。',
34
- };
35
- }
36
- }
37
-
38
- /**
39
- * 檢查 Firebase Token 中的 Custom Claims
40
- * 簡化版:不檢查 Custom Claims,直接允許
41
- */
42
- export async function checkCustomClaims(user: User): Promise<{
43
- valid: boolean;
44
- error?: string;
45
- }> {
46
- try {
47
- console.log('✅ [Auth] 使用者已登入:', user.email);
48
- console.log('✅ [Auth] 任何 Google 帳號都可以使用此系統');
49
-
50
- // 直接允許
51
- return {
52
- valid: true,
53
- };
54
- } catch (error) {
55
- console.error('❌ [Auth] Error:', error);
56
- return {
57
- valid: false,
58
- error: '無法驗證您的權限。請重新登入。',
59
- };
60
- }
61
- }
@@ -1,319 +0,0 @@
1
- /**
2
- * Firestore Authentication & Authorization Utilities
3
- * 檢查使用者是否在白名單、是否有權存取當前服務
4
- *
5
- * 🔑 架構說明:
6
- * - 統一使用 scoop-386004 專案處理 Auth 和 Firestore
7
- * - 簡化為單一 Firebase 專案,避免跨專案複雜度
8
- */
9
-
10
- import { User } from 'firebase/auth';
11
- import { getFirestore, doc, getDoc } from 'firebase/firestore';
12
- import { getFirebaseApp } from './firebase';
13
-
14
- export interface UserData {
15
- email: string;
16
- allowedService: string;
17
- serviceUrl: string;
18
- bucketName: string;
19
- bucketHash: string;
20
- role: string;
21
- displayName?: string;
22
- loginMethods: string[];
23
- active: boolean;
24
- createdAt: any;
25
- updatedAt: any;
26
- }
27
-
28
- export interface SystemAllowedUsers {
29
- emails: string[];
30
- updatedAt: any;
31
- updatedBy: string;
32
- }
33
-
34
- /**
35
- * 檢查使用者是否在系統白名單中
36
- */
37
- export async function isUserInWhitelist(email: string): Promise<boolean> {
38
- try {
39
- console.log('🔄 [Firestore] Checking whitelist for:', email);
40
- console.log('🔧 [Firestore] Using project:', process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID);
41
- const db = getFirestore(getFirebaseApp());
42
- console.log('✅ [Firestore] Firestore instance created');
43
- const systemRef = doc(db, 'system', 'allowedUsers');
44
- console.log('📋 [Firestore] Document path: system/allowedUsers');
45
-
46
- console.log('📋 [Firestore] Fetching allowedUsers document...');
47
- const systemDoc = await getDoc(systemRef);
48
-
49
- if (!systemDoc.exists()) {
50
- console.warn('⚠️ [Firestore] System allowedUsers document not found');
51
- return false;
52
- }
53
-
54
- const data = systemDoc.data() as SystemAllowedUsers;
55
- const isAllowed = data.emails?.includes(email) || false;
56
-
57
- console.log(`✅ [Firestore] Whitelist check for ${email}: ${isAllowed}`);
58
- console.log('📊 [Firestore] Total allowed users:', data.emails?.length || 0);
59
- return isAllowed;
60
- } catch (error) {
61
- console.error('❌ [Firestore] Error checking whitelist:', error);
62
- console.error('📍 [Firestore] Error details:', JSON.stringify(error, null, 2));
63
- return false;
64
- }
65
- }
66
-
67
- /**
68
- * 取得使用者資料
69
- */
70
- export async function getUserData(email: string): Promise<UserData | null> {
71
- try {
72
- console.log('🔄 [Firestore] Fetching user data for:', email);
73
- console.log('🔧 [Firestore] Using project:', process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID);
74
- const db = getFirestore(getFirebaseApp());
75
- console.log('✅ [Firestore] Firestore instance created');
76
- const userRef = doc(db, 'users', email);
77
- console.log('📋 [Firestore] Document path: users/' + email);
78
-
79
- console.log('📋 [Firestore] Querying users collection...');
80
- const userDoc = await getDoc(userRef);
81
-
82
- if (!userDoc.exists()) {
83
- console.warn(`⚠️ [Firestore] User document not found: ${email}`);
84
- return null;
85
- }
86
-
87
- const data = userDoc.data() as UserData;
88
- console.log(`✅ [Firestore] User data loaded:`);
89
- console.log(' Email:', data.email);
90
- console.log(' Service:', data.allowedService);
91
- console.log(' Active:', data.active);
92
- return data;
93
- } catch (error) {
94
- console.error('❌ [Firestore] Error fetching user data:', error);
95
- console.error('📍 [Firestore] Error details:', JSON.stringify(error, null, 2));
96
- return null;
97
- }
98
- }
99
-
100
- /**
101
- * 檢查使用者是否有權存取當前服務
102
- */
103
- export async function checkServiceAccess(email: string): Promise<{
104
- allowed: boolean;
105
- userData?: UserData;
106
- error?: string;
107
- redirectUrl?: string;
108
- }> {
109
- try {
110
- console.log('🔄 [Service Access] Starting service access check for:', email);
111
-
112
- // 1. 檢查白名單
113
- console.log('🔄 [Service Access] Step 1/4: Checking whitelist...');
114
- const inWhitelist = await isUserInWhitelist(email);
115
- if (!inWhitelist) {
116
- console.error('❌ [Service Access] User not in whitelist');
117
- return {
118
- allowed: false,
119
- error: '您的帳號未被授權使用此系統。請聯絡管理員。',
120
- };
121
- }
122
- console.log('✅ [Service Access] User is in whitelist');
123
-
124
- // 2. 取得使用者資料
125
- console.log('🔄 [Service Access] Step 2/4: Fetching user data...');
126
- const userData = await getUserData(email);
127
- if (!userData) {
128
- console.error('❌ [Service Access] User data not found');
129
- return {
130
- allowed: false,
131
- error: '找不到您的使用者設定。請聯絡管理員。',
132
- };
133
- }
134
- console.log('✅ [Service Access] User data retrieved');
135
-
136
- // 3. 檢查是否為 active
137
- console.log('🔄 [Service Access] Step 3/4: Checking user active status...');
138
- if (!userData.active) {
139
- console.error('❌ [Service Access] User account is inactive');
140
- return {
141
- allowed: false,
142
- error: '您的帳號已被停用。請聯絡管理員。',
143
- };
144
- }
145
- console.log('✅ [Service Access] User account is active');
146
-
147
- // 4. 檢查當前 Service 與儲存使用者專屬 API URL
148
- console.log('🔄 [Service Access] Step 4/4: Service validation...');
149
- const currentHostname = window.location.hostname;
150
-
151
- // 🎯 正確的域名格式判斷:
152
- // 統一前端: j.cameo.tw (Load Balancer) 或 botrun-j-{revision}.asia-northeast1.run.app (東京)
153
- // 個人後端: j.cameo.tw/u/{hash}/ (Load Balancer) 或 botrun-j-{hash}-{revision}.asia-east1.run.app (台灣)
154
-
155
- const pathname = window.location.pathname;
156
- const isUnifiedFrontend =
157
- currentHostname === 'j.cameo.tw' && !pathname.startsWith('/u/') || // Load Balancer 統一前端
158
- currentHostname.includes('.asia-northeast1.run.app') || // 舊的 Cloud Run 統一前端
159
- currentHostname === 'localhost'; // 開發環境
160
-
161
- // 提取 service hash (8位16進制) - 只在個人後端有效
162
- let currentServiceHash: string | null = null;
163
-
164
- if (currentHostname === 'j.cameo.tw') {
165
- // Load Balancer URL: j.cameo.tw/u/{hash}/
166
- const pathnameHashMatch = pathname.match(/^\/u\/([0-9a-f]{8})/);
167
- currentServiceHash = pathnameHashMatch ? pathnameHashMatch[1] : null;
168
- } else {
169
- // 舊的 Cloud Run URL: botrun-j-{hash}-{revision}.asia-east1.run.app
170
- const hostnameHashMatch = currentHostname.match(/botrun-j-([0-9a-f]{8})-\d+\.asia-east1\.run\.app/);
171
- currentServiceHash = hostnameHashMatch ? hostnameHashMatch[1] : null;
172
- }
173
-
174
- const allowedServiceHash = userData.bucketHash;
175
-
176
- console.log('🔍 [Service Access] Service info:');
177
- console.log(` Current hostname: ${currentHostname}`);
178
- console.log(` Is unified frontend: ${isUnifiedFrontend}`);
179
- console.log(` Current hash: ${currentServiceHash || '(統一前端)'}`);
180
- console.log(` User's allowed service: ${userData.allowedService}`);
181
- console.log(` User's service URL: ${userData.serviceUrl}`);
182
- console.log(` User's bucket hash: ${allowedServiceHash}`);
183
-
184
- // 📌 新架構:統一前端作為登入入口,登入後重定向到個人後端
185
- // userData.serviceUrl 用於重定向目標
186
- if (isUnifiedFrontend) {
187
- console.log('✅ [Service Access] 統一前端 - 允許登入');
188
- console.log('📍 [Service Access] 使用者將重定向到: ' + userData.serviceUrl);
189
- // 允許登入,userData 包含 serviceUrl 供重定向使用
190
- return {
191
- allowed: true,
192
- userData, // 包含 serviceUrl,AuthContext 會用來重定向
193
- };
194
- }
195
-
196
- // 如果使用者直接訪問專屬服務 URL,檢查 hash 是否匹配
197
- if (currentServiceHash !== allowedServiceHash) {
198
- console.warn('⚠️ [Service Access] 訪問了其他使用者的專屬服務');
199
- return {
200
- allowed: false,
201
- userData,
202
- error: `您的帳號授權使用 ${userData.allowedService},請使用主服務登入。`,
203
- };
204
- }
205
- console.log('✅ [Service Access] 訪問自己的專屬服務(允許)');
206
-
207
- // 5. 所有檢查通過
208
- console.log('✅ [Service Access] ALL CHECKS PASSED');
209
- return {
210
- allowed: true,
211
- userData,
212
- };
213
- } catch (error) {
214
- console.error('❌ [Service Access] Error checking service access:', error);
215
- console.error('📍 [Service Access] Error details:', JSON.stringify(error, null, 2));
216
- return {
217
- allowed: false,
218
- error: '系統錯誤,請稍後再試。',
219
- };
220
- }
221
- }
222
-
223
- /**
224
- * 檢查 Firebase Token 中的 Custom Claims
225
- */
226
- export async function checkCustomClaims(user: User): Promise<{
227
- valid: boolean;
228
- allowedService?: string;
229
- error?: string;
230
- }> {
231
- try {
232
- console.log('🔄 [Custom Claims] Starting custom claims check for:', user.email);
233
- console.log('⏱️ [Custom Claims] Fetching ID token result...');
234
-
235
- const tokenResult = await user.getIdTokenResult();
236
- const claims = tokenResult.claims;
237
-
238
- console.log(`✅ [Custom Claims] Token retrieved`);
239
- console.log('📋 [Custom Claims] Claims:', claims);
240
-
241
- // 檢查是否有 allowedService claim
242
- if (!claims.allowedService) {
243
- console.warn('⚠️ [Custom Claims] No allowedService claim (might be a new user)');
244
- return {
245
- valid: false,
246
- error: '您的帳號尚未完成設定。請登出後重新登入,或聯絡管理員。',
247
- };
248
- }
249
-
250
- // 檢查當前服務是否符合
251
- const currentHostname = window.location.hostname;
252
-
253
- // 🎯 正確的域名格式判斷:
254
- // 統一前端: j.cameo.tw (Load Balancer) 或 botrun-j-{revision}.asia-northeast1.run.app (東京)
255
- // 個人後端: j.cameo.tw/u/{hash}/ (Load Balancer) 或 botrun-j-{hash}-{revision}.asia-east1.run.app (台灣)
256
-
257
- // 判斷是否為統一前端
258
- const pathname = window.location.pathname;
259
- const isUnifiedFrontend =
260
- currentHostname === 'j.cameo.tw' && !pathname.startsWith('/u/') || // Load Balancer 統一前端
261
- currentHostname.includes('.asia-northeast1.run.app') || // 舊的 Cloud Run 統一前端
262
- currentHostname === 'localhost'; // 開發環境
263
-
264
- // 提取 service hash (8位16進制) - 只在個人後端有效
265
- let currentServiceHash: string | null = null;
266
-
267
- if (currentHostname === 'j.cameo.tw') {
268
- // Load Balancer URL: j.cameo.tw/u/{hash}/
269
- const pathnameHashMatch = pathname.match(/^\/u\/([0-9a-f]{8})/);
270
- currentServiceHash = pathnameHashMatch ? pathnameHashMatch[1] : null;
271
- } else {
272
- // 舊的 Cloud Run URL: botrun-j-{hash}-{revision}.asia-east1.run.app
273
- const hostnameHashMatch = currentHostname.match(/botrun-j-([0-9a-f]{8})-\d+\.asia-east1\.run\.app/);
274
- currentServiceHash = hostnameHashMatch ? hostnameHashMatch[1] : null;
275
- }
276
-
277
- const currentService = currentServiceHash ? `botrun-j-${currentServiceHash}` : null;
278
-
279
- console.log('🔍 [Custom Claims] Service check:');
280
- console.log(' Current hostname:', currentHostname);
281
- console.log(' Is unified frontend:', isUnifiedFrontend);
282
- console.log(' Extracted hash:', currentServiceHash || '(none)');
283
- console.log(' Current service:', currentService || '(統一前端)');
284
- console.log(' Allowed service:', claims.allowedService);
285
-
286
- // 📌 新架構:統一前端作為登入入口,允許所有使用者登入
287
- if (isUnifiedFrontend) {
288
- console.log('✅ [Custom Claims] 統一前端 - 允許登入,準備重定向');
289
- console.log('📍 [Custom Claims] 使用者應前往: ' + claims.allowedService);
290
- return {
291
- valid: true,
292
- allowedService: claims.allowedService as string,
293
- };
294
- }
295
-
296
- // 如果使用者直接訪問專屬服務,檢查是否匹配
297
- if (claims.allowedService !== currentService) {
298
- console.error('❌ [Custom Claims] 訪問了其他使用者的專屬服務');
299
- return {
300
- valid: false,
301
- allowedService: claims.allowedService as string,
302
- error: `您的帳號授權使用 ${claims.allowedService},請使用主服務登入。`,
303
- };
304
- }
305
-
306
- console.log('✅ [Custom Claims] All checks passed');
307
- return {
308
- valid: true,
309
- allowedService: claims.allowedService as string,
310
- };
311
- } catch (error) {
312
- console.error('❌ [Custom Claims] Error checking custom claims:', error);
313
- console.error('📍 [Custom Claims] Error details:', JSON.stringify(error, null, 2));
314
- return {
315
- valid: false,
316
- error: '無法驗證您的權限。請重新登入。',
317
- };
318
- }
319
- }