botrun-horse 2.31.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} +8 -8
  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 +7 -5
  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/html-report.md +15 -0
  45. package/{bin/commands/writing.mjs → modules/writing/command.mjs} +3 -3
  46. package/{lib → modules}/writing/generate.mjs +2 -2
  47. package/modules/writing/index.mjs +38 -0
  48. package/package.json +3 -1
  49. package/parallel-dag-todo-list/imagen-module.md +51 -0
  50. package/bin/commands/schema.mjs +0 -254
  51. package/botrun-c/.claude/skills/DOCX/351/226/261/350/256/200/346/212/200/350/203/275/SKILL.md +0 -103
  52. 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
  53. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/SKILL.md +0 -1093
  54. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branch.mjs +0 -73
  55. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branches.mjs +0 -77
  56. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-checkout.mjs +0 -72
  57. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-clone.mjs +0 -72
  58. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-commit.mjs +0 -75
  59. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-branch.mjs +0 -75
  60. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-file.mjs +0 -72
  61. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-diff.mjs +0 -80
  62. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list-tree.mjs +0 -336
  63. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list.mjs +0 -199
  64. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-merge.mjs +0 -86
  65. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-move.mjs +0 -75
  66. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-create.mjs +0 -81
  67. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-list.mjs +0 -74
  68. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-merge.mjs +0 -83
  69. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-view.mjs +0 -71
  70. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-push.mjs +0 -71
  71. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-read.mjs +0 -277
  72. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-search.mjs +0 -370
  73. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-stash.mjs +0 -116
  74. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-sync.mjs +0 -71
  75. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-write.mjs +0 -74
  76. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/lib/path-validator.mjs +0 -167
  77. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/SKILL.md +0 -605
  78. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-create.mjs +0 -127
  79. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-delete.mjs +0 -77
  80. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-diff.mjs +0 -87
  81. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-history.mjs +0 -99
  82. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-list.mjs +0 -174
  83. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-read.mjs +0 -214
  84. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-restore.mjs +0 -75
  85. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-search.mjs +0 -270
  86. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-sync-back.mjs +0 -155
  87. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-update.mjs +0 -100
  88. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/SKILL.md +0 -414
  89. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/create-project.mjs +0 -91
  90. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/finalize-project.mjs +0 -162
  91. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/SKILL.md +0 -206
  92. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/package.json +0 -19
  93. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-analyze.mjs +0 -309
  94. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-compress.mjs +0 -315
  95. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-split.mjs +0 -275
  96. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-to-text.mjs +0 -336
  97. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/test-pdf-scripts.mjs +0 -491
  98. package/botrun-c/.claude/skills/docx-to-markdown/SKILL.md +0 -76
  99. package/botrun-c/.claude/skills/docx-to-markdown/scripts/convert_docx.py +0 -183
  100. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/SKILL.md +0 -133
  101. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/scripts/ocr_processor.py +0 -381
  102. package/botrun-c/.claude/skills/gemini-transcribe/SKILL.md +0 -115
  103. package/botrun-c/.claude/skills/gemini-transcribe/scripts/transcribe.py +0 -499
  104. package/botrun-c/.claude/skills/nchc-transcribe/SKILL.md +0 -131
  105. package/botrun-c/.claude/skills/nchc-transcribe/scripts/transcribe.py +0 -522
  106. package/botrun-c/.claude/skills/p320-moj-review/SKILL.md +0 -200
  107. package/botrun-c/.claude/skills/p320-moj-review/references/guideline.md +0 -118
  108. package/botrun-c/.claude/skills/pdf-multimodal-processor/SKILL.md +0 -186
  109. package/botrun-c/.claude/skills/pdf-multimodal-processor/scripts/process_pdf.py +0 -515
  110. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/SKILL.md +0 -81
  111. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/package.json +0 -13
  112. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/secure-search.mjs +0 -232
  113. 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
  114. package/botrun-c/.claude/skills//345/216/273/350/255/230/345/210/245/346/212/200/350/203/275/SKILL.md +0 -125
  115. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/SKILL.md +0 -123
  116. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/scripts/recall.mjs +0 -339
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. 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
  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/image-session-manager.mjs +0 -219
  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/output-formatter.mjs +0 -209
  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/package.json +0 -20
  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/utils.mjs +0 -115
  127. 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
  128. 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
  129. 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
  130. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/SKILL.md +0 -131
  131. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/scripts/skill-manager.mjs +0 -542
  132. 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
  133. 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
  134. 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
  135. 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
  136. 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
  137. 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
  138. 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
  139. 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
  140. 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
  141. 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
  142. 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
  143. 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
  144. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/SKILL.md +0 -114
  145. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/remember.mjs +0 -159
  146. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test-advanced.mjs +0 -342
  147. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test.mjs +0 -430
  148. 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
  149. 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
  150. 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
  151. 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
  152. package/botrun-c/.dockerignore +0 -131
  153. package/botrun-c/.dockeroptimize +0 -13
  154. package/botrun-c/.firebase/hosting.b3V0.cache +0 -30
  155. package/botrun-c/.firebaserc +0 -5
  156. package/botrun-c/.gcloudignore +0 -56
  157. package/botrun-c/.ruby-version +0 -1
  158. package/botrun-c/CHANGELOG.md +0 -224
  159. package/botrun-c/Dockerfile.gcp +0 -365
  160. package/botrun-c/Dockerfile.slim +0 -195
  161. package/botrun-c/Gemfile +0 -8
  162. package/botrun-c/Gemfile.lock +0 -233
  163. package/botrun-c/LOCAL-DEVELOPMENT-GUIDE.md +0 -393
  164. package/botrun-c/PLAN.md +0 -131
  165. package/botrun-c/README.md +0 -129
  166. package/botrun-c/TODO-CAPACITOR-INTEGRATION.md +0 -482
  167. package/botrun-c/VERIFICATION.md +0 -121
  168. package/botrun-c/admin/RATE_LIMIT_MANAGEMENT.md +0 -312
  169. package/botrun-c/admin/README.md +0 -338
  170. package/botrun-c/admin/botrun-billing-report-1765235244038.csv +0 -22
  171. package/botrun-c/admin/botrun-billing-report-1765235323089.csv +0 -22
  172. package/botrun-c/admin/botrun-dashboard-1765235244039.html +0 -278
  173. package/botrun-c/admin/botrun-dashboard-1765235323089.html +0 -278
  174. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235244039.html +0 -161
  175. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235323090.html +0 -161
  176. package/botrun-c/admin/check-billing.ts +0 -48
  177. package/botrun-c/admin/count-all-users.ts +0 -65
  178. package/botrun-c/admin/generate-analytics-report.ts +0 -188
  179. package/botrun-c/admin/jest.config.ts +0 -43
  180. package/botrun-c/admin/lib/__tests__/formatters.test.ts +0 -264
  181. package/botrun-c/admin/lib/__tests__/mocks/firebase.mock.ts +0 -112
  182. package/botrun-c/admin/lib/__tests__/services/UserService.test.ts +0 -83
  183. package/botrun-c/admin/lib/__tests__/user-resolver.test.ts +0 -439
  184. package/botrun-c/admin/lib/analyzers/BillingAnalyticsService.ts +0 -242
  185. package/botrun-c/admin/lib/analyzers/CsvExporter.ts +0 -263
  186. package/botrun-c/admin/lib/analyzers/HtmlChartGenerator.ts +0 -530
  187. package/botrun-c/admin/lib/analyzers/SpikeAnalyzer.ts +0 -608
  188. package/botrun-c/admin/lib/analyzers/TimeSeriesAnalyzer.ts +0 -344
  189. package/botrun-c/admin/lib/cli/CLIBootstrapper.ts +0 -40
  190. package/botrun-c/admin/lib/commands/AbstractCommand.ts +0 -69
  191. package/botrun-c/admin/lib/commands/AnalyticsCommand.ts +0 -215
  192. package/botrun-c/admin/lib/commands/ListCommand.ts +0 -85
  193. package/botrun-c/admin/lib/commands/QueryCommand.ts +0 -81
  194. package/botrun-c/admin/lib/commands/SpikeCommand.ts +0 -83
  195. package/botrun-c/admin/lib/domain/User.ts +0 -38
  196. package/botrun-c/admin/lib/firebase.ts +0 -92
  197. package/botrun-c/admin/lib/firestore-safe.ts +0 -105
  198. package/botrun-c/admin/lib/formatters.ts +0 -154
  199. package/botrun-c/admin/lib/rate-limit-detailed.ts +0 -355
  200. package/botrun-c/admin/lib/rate-limit.ts +0 -286
  201. package/botrun-c/admin/lib/repositories/UserRepository.ts +0 -104
  202. package/botrun-c/admin/lib/services/UserService.ts +0 -108
  203. package/botrun-c/admin/lib/types.ts +0 -56
  204. package/botrun-c/admin/lib/user-resolver.ts +0 -275
  205. package/botrun-c/admin/manage-auth-domains.js +0 -178
  206. package/botrun-c/admin/migrate-plan-free.sh +0 -64
  207. package/botrun-c/admin/package-lock.json +0 -5656
  208. package/botrun-c/admin/package.json +0 -28
  209. package/botrun-c/admin/rate-limit.sh +0 -55
  210. package/botrun-c/admin/remove-custom-limits.ts +0 -75
  211. package/botrun-c/admin/reset-rate.sh +0 -70
  212. package/botrun-c/admin/reset-trial.sh +0 -68
  213. package/botrun-c/admin/seed-trial-data.sh +0 -38
  214. package/botrun-c/admin/trial.sh +0 -55
  215. package/botrun-c/admin/tsconfig.json +0 -20
  216. package/botrun-c/admin/users-cli.py +0 -298
  217. package/botrun-c/admin/users.sh +0 -12
  218. package/botrun-c/admin/users.ts +0 -1321
  219. package/botrun-c/api/admin-tools/check-whitelist.mjs.migration-bak +0 -74
  220. package/botrun-c/api/admin-tools/create-user.mjs +0 -92
  221. package/botrun-c/api/admin-tools/create-user.mjs.migration-bak +0 -92
  222. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py +0 -287
  223. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py.migration-bak +0 -287
  224. package/botrun-c/api/admin-tools/init-firestore.mjs +0 -75
  225. package/botrun-c/api/admin-tools/init-firestore.mjs.migration-bak +0 -101
  226. package/botrun-c/api/admin-tools/list-users.mjs +0 -43
  227. package/botrun-c/api/admin-tools/list-users.mjs.migration-bak +0 -43
  228. package/botrun-c/api/admin-tools/manage-authorized-domains.ts +0 -255
  229. package/botrun-c/api/admin-tools/manage-authorized-domains.ts.migration-bak +0 -255
  230. package/botrun-c/api/admin-tools/setup-custom-claims.ts.migration-bak +0 -155
  231. package/botrun-c/api/admin-tools/test-claims.mjs +0 -69
  232. package/botrun-c/api/admin-tools/test-claims.mjs.migration-bak +0 -69
  233. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs +0 -72
  234. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs.migration-bak +0 -72
  235. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs +0 -159
  236. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs.migration-bak +0 -159
  237. package/botrun-c/api/admin-tools/update-service-urls.mjs +0 -82
  238. package/botrun-c/api/admin-tools/update-service-urls.mjs.migration-bak +0 -82
  239. package/botrun-c/api/package-lock.json +0 -5031
  240. package/botrun-c/api/package.json +0 -63
  241. package/botrun-c/api/pnpm-lock.yaml +0 -4157
  242. package/botrun-c/api/rate-limit-export-1763620678737.csv +0 -79
  243. package/botrun-c/api/scripts/README-migrate-plan-free.md +0 -197
  244. package/botrun-c/api/scripts/check-users.ts +0 -45
  245. package/botrun-c/api/scripts/delete-firestore-docs.js +0 -43
  246. package/botrun-c/api/scripts/dump-subscriptions.ts +0 -395
  247. package/botrun-c/api/scripts/list-all-users.ts +0 -65
  248. package/botrun-c/api/scripts/migrate-plan-free-rpd-16to32.ts +0 -262
  249. package/botrun-c/api/scripts/migrate-plan-names-to-lite-max.ts +0 -269
  250. package/botrun-c/api/scripts/query-user-info.ts +0 -304
  251. package/botrun-c/api/scripts/reset-rate-limit.ts +0 -206
  252. package/botrun-c/api/scripts/reset-trial-subscription.ts +0 -166
  253. package/botrun-c/api/scripts/rollback-plan-names-from-lite-max.ts +0 -139
  254. package/botrun-c/api/scripts/seed-rate-limit-test-data.ts +0 -114
  255. package/botrun-c/api/scripts/seed-subscription-test-data.ts +0 -173
  256. package/botrun-c/api/scripts/test-rate-limit-message.ts +0 -108
  257. package/botrun-c/api/test-billing-write.ts +0 -103
  258. package/botrun-c/api/test-billing.ts +0 -81
  259. package/botrun-c/api/test-chat-upload.sh +0 -162
  260. package/botrun-c/api/test-nchc-whisper.ts +0 -87
  261. package/botrun-c/api/test-skills-loading.js +0 -77
  262. package/botrun-c/api/test-skills-symlink.js +0 -118
  263. package/botrun-c/api/test-upload-multimodal.sh +0 -167
  264. package/botrun-c/api/tsconfig.json +0 -27
  265. package/botrun-c/api/verify-form-2-1.mjs +0 -229
  266. package/botrun-c/api/vitest.config.ts +0 -9
  267. package/botrun-c/appium-capabilities.json +0 -20
  268. package/botrun-c/cors.json +0 -26
  269. package/botrun-c/delete-old.sh +0 -44
  270. package/botrun-c/design/google-drive/01-architecture.md +0 -186
  271. package/botrun-c/design/google-drive/02-api-design.md +0 -314
  272. package/botrun-c/design/google-drive/03-frontend-design.md +0 -278
  273. package/botrun-c/design/google-drive/04-skill-design.md +0 -384
  274. package/botrun-c/design/google-drive/05-test-plan.md +0 -507
  275. package/botrun-c/design/google-drive/README.md +0 -32
  276. package/botrun-c/dev/mcp-token-calculator/README.md +0 -92
  277. package/botrun-c/dev/mcp-token-calculator/RESULTS.md +0 -188
  278. package/botrun-c/dev/mcp-token-calculator/calculate-current-tokens.ts +0 -369
  279. package/botrun-c/dev/mcp-token-calculator/calculate-mcp-tokens.ts +0 -464
  280. package/botrun-c/dev/mcp-token-calculator/optimization-proposals.ts +0 -316
  281. package/botrun-c/dev/mcp-token-calculator/package-lock.json +0 -599
  282. package/botrun-c/dev/mcp-token-calculator/package.json +0 -22
  283. package/botrun-c/dev/mcp-token-calculator/test-all-schemas.ts +0 -314
  284. package/botrun-c/dev/mcp-token-calculator/test-schema-correctness.ts +0 -221
  285. package/botrun-c/dev/mcp-token-calculator/verify-optimization.ts +0 -159
  286. package/botrun-c/fastlane/ANDROID-DEPLOYMENT-SETUP.md +0 -825
  287. package/botrun-c/fastlane/IOS-DEPLOYMENT-SETUP.md +0 -431
  288. package/botrun-c/fastlane/Pluginfile +0 -5
  289. package/botrun-c/fastlane/QUICK-START.md +0 -133
  290. package/botrun-c/fastlane/README.md +0 -424
  291. package/botrun-c/fastlane/RUBY-SETUP.md +0 -449
  292. package/botrun-c/fastlane/android/Appfile +0 -11
  293. package/botrun-c/fastlane/android/Fastfile +0 -240
  294. package/botrun-c/firebase.json +0 -46
  295. package/botrun-c/firestore-init-data.json +0 -40
  296. package/botrun-c/firestore.indexes.json +0 -55
  297. package/botrun-c/firestore.rules +0 -53
  298. package/botrun-c/fix-codex-permissions.sh +0 -56
  299. package/botrun-c/gcs-lifecycle-30day-retention.json +0 -12
  300. package/botrun-c/html-architecture/architecture/deployment.html +0 -664
  301. package/botrun-c/html-architecture/architecture/index.html +0 -309
  302. package/botrun-c/html-architecture/architecture/styles.css +0 -500
  303. package/botrun-c/html-architecture/architecture/system-components.html +0 -538
  304. package/botrun-c/html-architecture/architecture/user-flow.html +0 -370
  305. package/botrun-c/mobile-android/FIREBASE-AUTH-SETUP.md +0 -302
  306. package/botrun-c/mobile-android/WSL-ANDROID-SETUP.md +0 -252
  307. package/botrun-c/mobile-android/android/app/build.gradle +0 -75
  308. package/botrun-c/mobile-android/android/app/capacitor.build.gradle +0 -31
  309. package/botrun-c/mobile-android/android/app/proguard-rules.pro +0 -21
  310. package/botrun-c/mobile-android/android/build.gradle +0 -29
  311. package/botrun-c/mobile-android/android/capacitor.settings.gradle +0 -42
  312. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  313. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  314. package/botrun-c/mobile-android/android/gradle.properties +0 -22
  315. package/botrun-c/mobile-android/android/gradlew +0 -252
  316. package/botrun-c/mobile-android/android/gradlew.bat +0 -94
  317. package/botrun-c/mobile-android/android/settings.gradle +0 -5
  318. package/botrun-c/mobile-android/android/variables.gradle +0 -16
  319. package/botrun-c/mobile-android/capacitor.config.ts +0 -44
  320. package/botrun-c/mobile-android/fastlane/Appfile +0 -11
  321. package/botrun-c/mobile-android/fastlane/Fastfile +0 -202
  322. package/botrun-c/mobile-android/fastlane/README.md +0 -96
  323. package/botrun-c/mobile-android/google-services.json.template +0 -39
  324. package/botrun-c/mobile-android/package.json +0 -32
  325. package/botrun-c/mobile-android/resources/icon.png +0 -0
  326. package/botrun-c/mobile-android/tsconfig.json +0 -15
  327. package/botrun-c/mobile-ios/.ruby-version +0 -1
  328. package/botrun-c/mobile-ios/BUILD-LOG.md +0 -82
  329. package/botrun-c/mobile-ios/Gemfile +0 -4
  330. package/botrun-c/mobile-ios/Gemfile.lock +0 -299
  331. package/botrun-c/mobile-ios/GoogleService-Info.plist.template +0 -34
  332. package/botrun-c/mobile-ios/IOS-PERMISSIONS.md +0 -80
  333. package/botrun-c/mobile-ios/QUICK-START.md +0 -189
  334. package/botrun-c/mobile-ios/README.md +0 -231
  335. package/botrun-c/mobile-ios/capacitor.config.ts +0 -46
  336. package/botrun-c/mobile-ios/fastlane/Fastfile +0 -326
  337. package/botrun-c/mobile-ios/fastlane/README.md +0 -88
  338. package/botrun-c/mobile-ios/ios/App/App/App.entitlements +0 -10
  339. package/botrun-c/mobile-ios/ios/App/App/AppDelegate.swift +0 -49
  340. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
  341. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  342. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Contents.json +0 -6
  343. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +0 -56
  344. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png +0 -0
  345. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png +0 -0
  346. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png +0 -0
  347. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png +0 -0
  348. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png +0 -0
  349. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png +0 -0
  350. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  351. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  352. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  353. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/LaunchScreen.storyboard +0 -32
  354. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/Main.storyboard +0 -19
  355. package/botrun-c/mobile-ios/ios/App/App/Info.plist +0 -72
  356. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/project.pbxproj +0 -446
  357. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme +0 -78
  358. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/contents.xcworkspacedata +0 -10
  359. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  360. package/botrun-c/mobile-ios/ios/App/Podfile +0 -52
  361. package/botrun-c/mobile-ios/ios/App/Podfile.lock +0 -205
  362. package/botrun-c/mobile-ios/ios/App/add_plist.rb +0 -30
  363. package/botrun-c/mobile-ios/ios/App/fix_plist_path.rb +0 -22
  364. package/botrun-c/mobile-ios/package.json +0 -29
  365. package/botrun-c/mobile-ios/resources/icon.png +0 -0
  366. package/botrun-c/mobile-ios/run-simulator.sh +0 -34
  367. package/botrun-c/mobile-ios/screenshot-after-clean-rebuild.png +0 -0
  368. package/botrun-c/mobile-ios/screenshot-final-version.png +0 -0
  369. package/botrun-c/mobile-ios/screenshot-simulator.png +0 -0
  370. package/botrun-c/mobile-ios/screenshot-version-1009.png +0 -0
  371. package/botrun-c/mobile-ios/screenshot-with-version.png +0 -0
  372. package/botrun-c/mobile-ios/screenshot-working.png +0 -0
  373. package/botrun-c/mobile-ios/setup-ios.sh +0 -106
  374. package/botrun-c/mobile-ios/tsconfig.json +0 -16
  375. package/botrun-c/org-policy-allow-all-users.yaml +0 -3
  376. package/botrun-c/package.json +0 -68
  377. package/botrun-c/pnpm-lock.yaml +0 -10198
  378. package/botrun-c/pnpm-workspace.yaml +0 -6
  379. package/botrun-c/prompts/BOTRUN-1.md +0 -13
  380. package/botrun-c/prompts/BOTRUN-2.md +0 -70
  381. package/botrun-c/prompts/BOTRUN-3.md +0 -139
  382. package/botrun-c/prototypes/firestore-gax-debug/package-lock.json +0 -1204
  383. package/botrun-c/prototypes/firestore-gax-debug/package.json +0 -12
  384. package/botrun-c/prototypes/firestore-gax-debug/pnpm-workspace.yaml +0 -2
  385. package/botrun-c/prototypes/firestore-gax-debug/test.js +0 -98
  386. package/botrun-c/prototypes/taiwan-haiku/README.md +0 -93
  387. package/botrun-c/prototypes/taiwan-haiku/index.ts +0 -139
  388. package/botrun-c/prototypes/taiwan-haiku/package.json +0 -23
  389. package/botrun-c/prototypes/taiwan-haiku/pnpm-lock.yaml +0 -730
  390. package/botrun-c/prototypes/taiwan-haiku/test-vertex-direct.ts +0 -83
  391. package/botrun-c/prototypes/taiwan-haiku/tsconfig.json +0 -18
  392. package/botrun-c/prototypes/web-search/FINDINGS-STAGE-1.md +0 -48
  393. package/botrun-c/prototypes/web-search/README.md +0 -46
  394. package/botrun-c/prototypes/web-search/VERIFICATION-REPORT.md +0 -310
  395. package/botrun-c/prototypes/web-search/package-lock.json +0 -595
  396. package/botrun-c/prototypes/web-search/package.json +0 -18
  397. package/botrun-c/prototypes/web-search/stage-1.1-basic-connection.js +0 -123
  398. package/botrun-c/prototypes/web-search/stage-1.2-with-websearch.js +0 -154
  399. package/botrun-c/prototypes/web-search/stage-1.3-search-query.js +0 -192
  400. package/botrun-c/prototypes/web-search/stage-2-agent-sdk-websearch.js +0 -265
  401. package/botrun-c/runtime-scripts/env-detect.sh +0 -64
  402. package/botrun-c/scripts/github-collaborator-manager.sh +0 -297
  403. package/botrun-c/scripts/github-collaborator-manager.ts +0 -325
  404. package/botrun-c/scripts/manage-collaborators.sh +0 -91
  405. package/botrun-c/scripts/setup-secrets.sh +0 -202
  406. package/botrun-c/scripts/stress-test-17-users.sh +0 -113
  407. package/botrun-c/scripts/stress-test-api.sh +0 -119
  408. package/botrun-c/scripts/stress-test-full-report.sh +0 -385
  409. package/botrun-c/specs/infra-vm/design.md +0 -0
  410. package/botrun-c/specs/share-skill/design.md +0 -1146
  411. package/botrun-c/specs/share-skill/tasks.md +0 -444
  412. package/botrun-c/stress-test-results/20260121-162630/config.json +0 -7
  413. package/botrun-c/stress-test-results/20260121-162630/user-1-status.txt +0 -1
  414. package/botrun-c/stress-test-results/20260121-162630/user-1-timing.txt +0 -1
  415. package/botrun-c/stress-test-results/20260121-162630/user-1.json +0 -2
  416. package/botrun-c/stress-test-results/20260121-162646/config.json +0 -7
  417. package/botrun-c/stress-test-results/20260121-162646/user-1-status.txt +0 -1
  418. package/botrun-c/stress-test-results/20260121-162646/user-1-timing.txt +0 -1
  419. package/botrun-c/stress-test-results/20260121-162646/user-1.json +0 -2
  420. package/botrun-c/stress-test-results/20260121-162646/user-10-status.txt +0 -1
  421. package/botrun-c/stress-test-results/20260121-162646/user-10-timing.txt +0 -1
  422. package/botrun-c/stress-test-results/20260121-162646/user-10.json +0 -2
  423. package/botrun-c/stress-test-results/20260121-162646/user-11-status.txt +0 -1
  424. package/botrun-c/stress-test-results/20260121-162646/user-11-timing.txt +0 -1
  425. package/botrun-c/stress-test-results/20260121-162646/user-11.json +0 -2
  426. package/botrun-c/stress-test-results/20260121-162646/user-12-status.txt +0 -1
  427. package/botrun-c/stress-test-results/20260121-162646/user-12-timing.txt +0 -1
  428. package/botrun-c/stress-test-results/20260121-162646/user-12.json +0 -2
  429. package/botrun-c/stress-test-results/20260121-162646/user-13-status.txt +0 -1
  430. package/botrun-c/stress-test-results/20260121-162646/user-13-timing.txt +0 -1
  431. package/botrun-c/stress-test-results/20260121-162646/user-13.json +0 -2
  432. package/botrun-c/stress-test-results/20260121-162646/user-14-status.txt +0 -1
  433. package/botrun-c/stress-test-results/20260121-162646/user-14-timing.txt +0 -1
  434. package/botrun-c/stress-test-results/20260121-162646/user-14.json +0 -2
  435. package/botrun-c/stress-test-results/20260121-162646/user-15-status.txt +0 -1
  436. package/botrun-c/stress-test-results/20260121-162646/user-15-timing.txt +0 -1
  437. package/botrun-c/stress-test-results/20260121-162646/user-15.json +0 -2
  438. package/botrun-c/stress-test-results/20260121-162646/user-16-status.txt +0 -1
  439. package/botrun-c/stress-test-results/20260121-162646/user-16-timing.txt +0 -1
  440. package/botrun-c/stress-test-results/20260121-162646/user-16.json +0 -2
  441. package/botrun-c/stress-test-results/20260121-162646/user-17-status.txt +0 -1
  442. package/botrun-c/stress-test-results/20260121-162646/user-17-timing.txt +0 -1
  443. package/botrun-c/stress-test-results/20260121-162646/user-17.json +0 -2
  444. package/botrun-c/stress-test-results/20260121-162646/user-2-status.txt +0 -1
  445. package/botrun-c/stress-test-results/20260121-162646/user-2-timing.txt +0 -1
  446. package/botrun-c/stress-test-results/20260121-162646/user-2.json +0 -2
  447. package/botrun-c/stress-test-results/20260121-162646/user-3-status.txt +0 -1
  448. package/botrun-c/stress-test-results/20260121-162646/user-3-timing.txt +0 -1
  449. package/botrun-c/stress-test-results/20260121-162646/user-3.json +0 -2
  450. package/botrun-c/stress-test-results/20260121-162646/user-4-status.txt +0 -1
  451. package/botrun-c/stress-test-results/20260121-162646/user-4-timing.txt +0 -1
  452. package/botrun-c/stress-test-results/20260121-162646/user-4.json +0 -2
  453. package/botrun-c/stress-test-results/20260121-162646/user-5-status.txt +0 -1
  454. package/botrun-c/stress-test-results/20260121-162646/user-5-timing.txt +0 -1
  455. package/botrun-c/stress-test-results/20260121-162646/user-5.json +0 -2
  456. package/botrun-c/stress-test-results/20260121-162646/user-6-status.txt +0 -1
  457. package/botrun-c/stress-test-results/20260121-162646/user-6-timing.txt +0 -1
  458. package/botrun-c/stress-test-results/20260121-162646/user-6.json +0 -2
  459. package/botrun-c/stress-test-results/20260121-162646/user-7-status.txt +0 -1
  460. package/botrun-c/stress-test-results/20260121-162646/user-7-timing.txt +0 -1
  461. package/botrun-c/stress-test-results/20260121-162646/user-7.json +0 -2
  462. package/botrun-c/stress-test-results/20260121-162646/user-8-status.txt +0 -1
  463. package/botrun-c/stress-test-results/20260121-162646/user-8-timing.txt +0 -1
  464. package/botrun-c/stress-test-results/20260121-162646/user-8.json +0 -2
  465. package/botrun-c/stress-test-results/20260121-162646/user-9-status.txt +0 -1
  466. package/botrun-c/stress-test-results/20260121-162646/user-9-timing.txt +0 -1
  467. package/botrun-c/stress-test-results/20260121-162646/user-9.json +0 -2
  468. package/botrun-c/stress-test-results/20260121-163148/REPORT.html +0 -344
  469. package/botrun-c/stress-test-results/20260121-163148/REPORT.md +0 -93
  470. package/botrun-c/stress-test-results/20260121-163148/REPORT.pdf +0 -0
  471. package/botrun-c/stress-test-results/20260121-163148/config.json +0 -7
  472. package/botrun-c/stress-test-results/20260121-163148/summary.json +0 -26
  473. package/botrun-c/stress-test-results/20260121-163148/user-1-status.txt +0 -1
  474. package/botrun-c/stress-test-results/20260121-163148/user-1-timing.txt +0 -1
  475. package/botrun-c/stress-test-results/20260121-163148/user-1.json +0 -206
  476. package/botrun-c/stress-test-results/20260121-163148/user-10-status.txt +0 -1
  477. package/botrun-c/stress-test-results/20260121-163148/user-10-timing.txt +0 -1
  478. package/botrun-c/stress-test-results/20260121-163148/user-10.json +0 -110
  479. package/botrun-c/stress-test-results/20260121-163148/user-11-status.txt +0 -1
  480. package/botrun-c/stress-test-results/20260121-163148/user-11-timing.txt +0 -1
  481. package/botrun-c/stress-test-results/20260121-163148/user-11.json +0 -104
  482. package/botrun-c/stress-test-results/20260121-163148/user-12-status.txt +0 -1
  483. package/botrun-c/stress-test-results/20260121-163148/user-12-timing.txt +0 -1
  484. package/botrun-c/stress-test-results/20260121-163148/user-12.json +0 -98
  485. package/botrun-c/stress-test-results/20260121-163148/user-13-status.txt +0 -1
  486. package/botrun-c/stress-test-results/20260121-163148/user-13-timing.txt +0 -1
  487. package/botrun-c/stress-test-results/20260121-163148/user-13.json +0 -68
  488. package/botrun-c/stress-test-results/20260121-163148/user-14-status.txt +0 -1
  489. package/botrun-c/stress-test-results/20260121-163148/user-14-timing.txt +0 -1
  490. package/botrun-c/stress-test-results/20260121-163148/user-14.json +0 -116
  491. package/botrun-c/stress-test-results/20260121-163148/user-15-status.txt +0 -1
  492. package/botrun-c/stress-test-results/20260121-163148/user-15-timing.txt +0 -1
  493. package/botrun-c/stress-test-results/20260121-163148/user-15.json +0 -131
  494. package/botrun-c/stress-test-results/20260121-163148/user-16-status.txt +0 -1
  495. package/botrun-c/stress-test-results/20260121-163148/user-16-timing.txt +0 -1
  496. package/botrun-c/stress-test-results/20260121-163148/user-16.json +0 -110
  497. package/botrun-c/stress-test-results/20260121-163148/user-17-status.txt +0 -1
  498. package/botrun-c/stress-test-results/20260121-163148/user-17-timing.txt +0 -1
  499. package/botrun-c/stress-test-results/20260121-163148/user-17.json +0 -116
  500. package/botrun-c/stress-test-results/20260121-163148/user-2-status.txt +0 -1
  501. package/botrun-c/stress-test-results/20260121-163148/user-2-timing.txt +0 -1
  502. package/botrun-c/stress-test-results/20260121-163148/user-2.json +0 -98
  503. package/botrun-c/stress-test-results/20260121-163148/user-3-status.txt +0 -1
  504. package/botrun-c/stress-test-results/20260121-163148/user-3-timing.txt +0 -1
  505. package/botrun-c/stress-test-results/20260121-163148/user-3.json +0 -62
  506. package/botrun-c/stress-test-results/20260121-163148/user-4-status.txt +0 -1
  507. package/botrun-c/stress-test-results/20260121-163148/user-4-timing.txt +0 -1
  508. package/botrun-c/stress-test-results/20260121-163148/user-4.json +0 -113
  509. package/botrun-c/stress-test-results/20260121-163148/user-5-status.txt +0 -1
  510. package/botrun-c/stress-test-results/20260121-163148/user-5-timing.txt +0 -1
  511. package/botrun-c/stress-test-results/20260121-163148/user-5.json +0 -83
  512. package/botrun-c/stress-test-results/20260121-163148/user-6-status.txt +0 -1
  513. package/botrun-c/stress-test-results/20260121-163148/user-6-timing.txt +0 -1
  514. package/botrun-c/stress-test-results/20260121-163148/user-6.json +0 -125
  515. package/botrun-c/stress-test-results/20260121-163148/user-7-status.txt +0 -1
  516. package/botrun-c/stress-test-results/20260121-163148/user-7-timing.txt +0 -1
  517. package/botrun-c/stress-test-results/20260121-163148/user-7.json +0 -62
  518. package/botrun-c/stress-test-results/20260121-163148/user-8-status.txt +0 -1
  519. package/botrun-c/stress-test-results/20260121-163148/user-8-timing.txt +0 -1
  520. package/botrun-c/stress-test-results/20260121-163148/user-8.json +0 -41
  521. package/botrun-c/stress-test-results/20260121-163148/user-9-status.txt +0 -1
  522. package/botrun-c/stress-test-results/20260121-163148/user-9-timing.txt +0 -1
  523. package/botrun-c/stress-test-results/20260121-163148/user-9.json +0 -53
  524. package/botrun-c/test-merge.md +0 -1
  525. package/botrun-c/version.txt +0 -1
  526. package/botrun-c/web/.version +0 -1
  527. package/botrun-c/web/ALLOW-PUBLIC-ACCESS.md +0 -57
  528. package/botrun-c/web/FINAL-SETUP-STEPS.md +0 -71
  529. package/botrun-c/web/FIREBASE-MANUAL-STEPS.md +0 -41
  530. package/botrun-c/web/QUICK-SETUP-HELPER.md +0 -79
  531. package/botrun-c/web/README.md +0 -162
  532. package/botrun-c/web/__tests__/image-extractor.test.ts +0 -147
  533. package/botrun-c/web/__tests__/useGitHub.test.ts +0 -245
  534. package/botrun-c/web/app/favicon.ico +0 -0
  535. package/botrun-c/web/app/globals.css +0 -215
  536. package/botrun-c/web/app/image-preview/page.tsx +0 -213
  537. package/botrun-c/web/app/layout.tsx +0 -46
  538. package/botrun-c/web/app/page.tsx +0 -45
  539. package/botrun-c/web/components/CapacitorProvider.tsx +0 -43
  540. package/botrun-c/web/components/ChatPage.tsx +0 -1736
  541. package/botrun-c/web/components/ConversationList.tsx +0 -237
  542. package/botrun-c/web/components/ConversationListItem.tsx +0 -121
  543. package/botrun-c/web/components/LoginPage.tsx +0 -212
  544. package/botrun-c/web/components/Providers.tsx +0 -12
  545. package/botrun-c/web/components/StatusBarProvider.tsx +0 -16
  546. package/botrun-c/web/components/attachment-preview.tsx +0 -193
  547. package/botrun-c/web/components/botrun-incubator/BotrunIncubator.tsx +0 -266
  548. package/botrun-c/web/components/botrun-incubator/index.ts +0 -1
  549. package/botrun-c/web/components/chat-input.tsx +0 -1251
  550. package/botrun-c/web/components/chat-message.tsx +0 -598
  551. package/botrun-c/web/components/drop-zone.tsx +0 -143
  552. package/botrun-c/web/components/gdrive/gdrive-add-dialog.tsx +0 -254
  553. package/botrun-c/web/components/gdrive/gdrive-drawer.tsx +0 -236
  554. package/botrun-c/web/components/gdrive/gdrive-selector.tsx +0 -226
  555. package/botrun-c/web/components/gdrive/index.ts +0 -7
  556. package/botrun-c/web/components/generated-image-card.tsx +0 -363
  557. package/botrun-c/web/components/github/GitHubConnect.tsx +0 -366
  558. package/botrun-c/web/components/github/index.ts +0 -2
  559. package/botrun-c/web/components/import-skill-dialog.tsx +0 -208
  560. package/botrun-c/web/components/scroll-to-bottom-button.tsx +0 -90
  561. package/botrun-c/web/components/share-skill-dialog.tsx +0 -175
  562. package/botrun-c/web/components/skills-editor.tsx +0 -443
  563. package/botrun-c/web/components/skills-manager-drawer.tsx +0 -586
  564. package/botrun-c/web/components/smart-button-group.tsx +0 -132
  565. package/botrun-c/web/config/smart-buttons.ts +0 -295
  566. package/botrun-c/web/config/welcome-messages.ts +0 -29
  567. package/botrun-c/web/contexts/AuthContext.tsx +0 -220
  568. package/botrun-c/web/hooks/use-toast.ts +0 -187
  569. package/botrun-c/web/hooks/useAppStoreUpdate.ts +0 -356
  570. package/botrun-c/web/hooks/useAppVersion.ts +0 -113
  571. package/botrun-c/web/hooks/useAttachments.ts +0 -269
  572. package/botrun-c/web/hooks/useAuthToken.ts +0 -59
  573. package/botrun-c/web/hooks/useAutoWelcome.ts +0 -89
  574. package/botrun-c/web/hooks/useCapacitorPlatform.ts +0 -113
  575. package/botrun-c/web/hooks/useCapawesomeLiveUpdate.ts +0 -149
  576. package/botrun-c/web/hooks/useClaudeModel.ts +0 -118
  577. package/botrun-c/web/hooks/useConversation.ts +0 -115
  578. package/botrun-c/web/hooks/useConversations.ts +0 -235
  579. package/botrun-c/web/hooks/useGdriveFolders.ts +0 -199
  580. package/botrun-c/web/hooks/useGdriveSync.ts +0 -107
  581. package/botrun-c/web/hooks/useGitHub.ts +0 -409
  582. package/botrun-c/web/hooks/useScrollToBottom.ts +0 -150
  583. package/botrun-c/web/hooks/useStatusBar.ts +0 -42
  584. package/botrun-c/web/hooks/useUserPlan.ts +0 -153
  585. package/botrun-c/web/lib/api-config.ts +0 -162
  586. package/botrun-c/web/lib/api-url.ts +0 -62
  587. package/botrun-c/web/lib/api.ts +0 -105
  588. package/botrun-c/web/lib/attachment-utils.ts +0 -168
  589. package/botrun-c/web/lib/build-version.ts +0 -11
  590. package/botrun-c/web/lib/clipboard-utils.ts +0 -199
  591. package/botrun-c/web/lib/constants.ts +0 -62
  592. package/botrun-c/web/lib/conversation-storage.ts +0 -324
  593. package/botrun-c/web/lib/firebase-capacitor.ts +0 -135
  594. package/botrun-c/web/lib/firebase.ts +0 -137
  595. package/botrun-c/web/lib/firestore-auth.ts +0 -61
  596. package/botrun-c/web/lib/firestore-auth.ts.migration-bak +0 -319
  597. package/botrun-c/web/lib/image-extractor.ts +0 -156
  598. package/botrun-c/web/lib/path-utils.ts +0 -48
  599. package/botrun-c/web/lib/rehype-del-to-mark.ts +0 -19
  600. package/botrun-c/web/lib/upload-service.ts +0 -326
  601. package/botrun-c/web/lib/utils.ts +0 -6
  602. package/botrun-c/web/next.config.js +0 -49
  603. package/botrun-c/web/package-lock.json +0 -6711
  604. package/botrun-c/web/package.json +0 -63
  605. package/botrun-c/web/postcss.config.js +0 -6
  606. package/botrun-c/web/public/apple_icon.png +0 -0
  607. package/botrun-c/web/public/google_icon.png +0 -0
  608. package/botrun-c/web/public/logo-48-small.png +0 -0
  609. package/botrun-c/web/public/logo-48.png +0 -0
  610. package/botrun-c/web/scripts/generate-version.js +0 -36
  611. package/botrun-c/web/scripts/update-build-version.js +0 -41
  612. package/botrun-c/web/tailwind.config.ts +0 -80
  613. package/botrun-c/web/test-welcome-message.mjs +0 -115
  614. package/botrun-c/web/tsconfig.json +0 -42
  615. package/botrun-c/web/types/agent.ts +0 -6
  616. package/botrun-c/web/types/attachment.ts +0 -39
  617. package/botrun-c/web/types/conversation.ts +0 -68
  618. package/botrun-c/web/types/flutter.d.ts +0 -6
  619. package/botrun-c/web/types/project.ts +0 -41
  620. package/botrun-c/web/types/skills.ts +0 -13
  621. 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
  622. package/lib/writing/index.mjs +0 -5
  623. /package/{lib/core → modules/_core}/adapters/base.mjs +0 -0
  624. /package/{lib/core → modules/_core}/adapters/claude.mjs +0 -0
  625. /package/{lib/core → modules/_core}/adapters/gemini-api.mjs +0 -0
  626. /package/{lib/core → modules/_core}/adapters/gemini-shared.mjs +0 -0
  627. /package/{lib/core → modules/_core}/adapters/gemini-vertex.mjs +0 -0
  628. /package/{lib/core → modules/_core}/adapters/local.mjs +0 -0
  629. /package/{lib/core → modules/_core}/adapters/nchc.mjs +0 -0
  630. /package/{lib/core → modules/_core}/adapters/openai-shared.mjs +0 -0
  631. /package/{lib/core → modules/_core}/adapters/openrouter.mjs +0 -0
  632. /package/{lib/core → modules/_core}/ai-cache.mjs +0 -0
  633. /package/{lib/core → modules/_core}/ai-router.mjs +0 -0
  634. /package/{lib/core → modules/_core}/cli-utils.mjs +0 -0
  635. /package/{lib/core → modules/_core}/dag.mjs +0 -0
  636. /package/{lib/core → modules/_core}/db.mjs +0 -0
  637. /package/{lib/core → modules/_core}/env.mjs +0 -0
  638. /package/{lib/flows → modules/_core}/hatch-portal.mjs +0 -0
  639. /package/{lib/core → modules/_core}/llm.mjs +0 -0
  640. /package/{lib/flows → modules/_core}/opencode-agent.mjs +0 -0
  641. /package/{lib/core → modules/_core}/paths.mjs +0 -0
  642. /package/{lib/core → modules/_core}/proxy.mjs +0 -0
  643. /package/{lib/flows → modules/_core}/review-doc.mjs +0 -0
  644. /package/{lib → modules/_core}/tools/fs-tools.mjs +0 -0
  645. /package/{lib → modules/_core}/tools/index.mjs +0 -0
  646. /package/{lib/core → modules/_core}/watermelon.mjs +0 -0
  647. /package/{lib/ocr/index.mjs → modules/ocr/ocr-lib.mjs} +0 -0
  648. /package/{lib → modules}/portal/hatch.mjs +0 -0
  649. /package/{lib/portal/index.mjs → modules/portal/portal-lib.mjs} +0 -0
  650. /package/{lib → modules}/search/crawler.mjs +0 -0
  651. /package/{lib/prompt → modules/skill}/prompts/zero-framework/coding.md +0 -0
  652. /package/{lib/prompt → modules/skill}/prompts/zero-framework/fullstack.md +0 -0
  653. /package/{lib/prompt → modules/skill}/prompts/zero-framework/gemini-search-cli.md +0 -0
  654. /package/{lib/prompt → modules/skill}/prompts/zero-framework/search.md +0 -0
  655. /package/{lib/prompt → modules/skill}/prompts/zero-framework/segment.md +0 -0
  656. /package/{lib/prompt → modules/skill}/prompts/zero-framework/slice.md +0 -0
  657. /package/{lib/prompt → modules/skill}/prompts/zero-framework/smart-cache.md +0 -0
  658. /package/{lib/prompt → modules/skill}/prompts/zero-framework/trigram-search.md +0 -0
  659. /package/{lib/prompt → modules/skill}/prompts/zero-framework/tts-format.md +0 -0
  660. /package/{lib/prompt → modules/skill}/prompts/zero-framework/watermelon-sqlite.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
- }