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,41 +0,0 @@
1
- # 🔥 Firebase Console 手動操作指南(1 分鐘完成)
2
-
3
- ## ✅ 已自動完成的設定
4
-
5
- - ✅ Firebase Web App 已建立:`confidential-botrun-web`
6
- - ✅ Firebase 配置已更新到所有環境變數
7
- - ✅ Cloud Run 已重新部署並成功啟動
8
- - ✅ Firebase Admin SDK 已連接到正確的專案
9
-
10
- ## 📋 需要手動完成的步驟(2 個點擊)
11
-
12
- ### 第一步:啟用 Google Sign-In(30 秒)
13
-
14
- 1. 訪問 Firebase Console:
15
- ```
16
- https://console.firebase.google.com/project/confidential-botrun-c9e39/authentication/providers
17
- ```
18
-
19
- 2. 點擊「Google」提供商
20
- 3. 啟用「Enable」開關
21
- 4. 選擇支援電子郵件:`cbh@cameo.tw`
22
- 5. 點擊「Save」
23
-
24
- ### 第二步:加入授權域名(30 秒)
25
-
26
- 1. 在同一頁面,點擊「Settings」標籤
27
- 2. 找到「Authorized domains」區塊
28
- 3. 點擊「Add domain」
29
- 4. 輸入:`confidential-botrun-551954295423.asia-east1.run.app`
30
- 5. 點擊「Add」
31
-
32
- ---
33
-
34
- ## 📊 設定摘要
35
-
36
- **Firebase Project**: `confidential-botrun-c9e39`
37
- **Firebase Web App**: `confidential-botrun-web`
38
- **App ID**: `1:979669169263:web:bda3889209dd7a36b8499a`
39
- **Auth Domain**: `confidential-botrun-c9e39.firebaseapp.com`
40
- **Cloud Run URL**: `https://confidential-botrun-551954295423.asia-east1.run.app`
41
- **GCS Bucket**: `gs://confidential-botrun`
@@ -1,79 +0,0 @@
1
- # 🚀 快速設定輔助工具
2
-
3
- 我已經為您自動完成以下步驟:
4
- - ✅ 建立 Firebase Web App
5
- - ✅ 配置所有環境變數
6
- - ✅ 重新建置並部署 Cloud Run
7
- - ✅ 開啟必要的 Console 頁面
8
-
9
- ## 📺 現在應該有 2 個瀏覽器頁面已開啟
10
-
11
- ### 頁面 1:組織政策設定
12
- **URL**: https://console.cloud.google.com/iam-admin/orgpolicies/iam-allowedPolicyMemberDomains?project=confidential-botrun
13
-
14
- **操作步驟**:
15
- 1. 點擊「**EDIT**」(編輯)按鈕
16
- 2. 選擇「**Replace**」(取代)
17
- 3. 點擊「**+ ADD RULE**」
18
- 4. 選擇「**Allow All**」
19
- 5. 點擊「**SET POLICY**」(設定政策)
20
-
21
- ### 頁面 2:Firebase Authentication 設定
22
- **URL**: https://console.firebase.google.com/project/confidential-botrun-c9e39/authentication/providers
23
-
24
- **操作步驟**:
25
-
26
- **A. 啟用 Google Sign-In:**
27
- 1. 找到「**Google**」提供商
28
- 2. 點擊進入
29
- 3. 啟用「**Enable**」開關
30
- 4. 在「Project support email」選擇:`cbh@cameo.tw`
31
- 5. 點擊「**Save**」
32
-
33
- **B. 加入授權域名:**
34
- 1. 點擊「**Settings**」標籤
35
- 2. 找到「**Authorized domains**」區塊
36
- 3. 點擊「**Add domain**」
37
- 4. 輸入:`confidential-botrun-551954295423.asia-east1.run.app`
38
- 5. 點擊「**Add**」
39
-
40
- ---
41
-
42
- ## ⏱️ 完成後執行
43
-
44
- 完成上述步驟後,執行以下命令來驗證和完成設定:
45
-
46
- ```bash
47
- bash /tmp/wait-and-verify.sh
48
- ```
49
-
50
- 或者直接測試:
51
-
52
- ```bash
53
- # 設定 Cloud Run 公開存取
54
- gcloud run services add-iam-policy-binding confidential-botrun \
55
- --region=asia-east1 \
56
- --member=allUsers \
57
- --role=roles/run.invoker \
58
- --project=confidential-botrun
59
-
60
- # 測試訪問
61
- open https://confidential-botrun-551954295423.asia-east1.run.app
62
- ```
63
-
64
- ---
65
-
66
- ## 🎯 預期結果
67
-
68
- 完成所有步驟後,您應該可以:
69
- - ✅ 訪問 https://confidential-botrun-551954295423.asia-east1.run.app
70
- - ✅ 看到登入頁面(不再顯示 403 Forbidden)
71
- - ✅ 點擊「Sign in with Google」
72
- - ✅ 使用任何 Gmail 或 Google Workspace 帳號登入
73
- - ✅ 使用 AI 聊天功能
74
-
75
- ---
76
-
77
- **預計完成時間**: 4 分鐘
78
-
79
- 如果遇到問題,請告訴我具體的錯誤訊息!
@@ -1,162 +0,0 @@
1
- # Botrun-C Web
2
-
3
- 北歐極簡風格的 AI Agent 對話介面,專為手機全螢幕對話優化。
4
-
5
- ## 特色
6
-
7
- - 🎨 **北歐極簡設計** - 清爽簡約的 UI,將空間留給對話內容
8
- - 📱 **手機優化** - 響應式設計,完美適配移動設備
9
- - ⚡ **即時串流** - Server-Sent Events (SSE) 實時顯示 AI 回應
10
- - 🌓 **明暗主題** - 自動適配系統主題
11
- - 🛠️ **工具可視化** - 清楚顯示 AI 使用的工具
12
-
13
- ## 技術棧
14
-
15
- - **Framework**: Next.js 14 (App Router)
16
- - **Styling**: Tailwind CSS
17
- - **UI Components**: shadcn/ui
18
- - **Icons**: Lucide React
19
- - **Language**: TypeScript
20
-
21
- ## 快速開始
22
-
23
- ### 1. 安裝依賴
24
-
25
- ```bash
26
- npm install
27
- ```
28
-
29
- ### 2. 設定環境變數
30
-
31
- ```bash
32
- cp .env.local.example .env.local
33
- ```
34
-
35
- 編輯 `.env.local`:
36
- ```env
37
- NEXT_PUBLIC_API_URL=http://localhost:8000
38
- ```
39
-
40
- ### 3. 啟動開發伺服器
41
-
42
- ```bash
43
- npm run dev
44
- ```
45
-
46
- 應用程式將在 http://localhost:3000 啟動。
47
-
48
- ## 專案結構
49
-
50
- ```
51
- web/
52
- ├── app/ # Next.js App Router
53
- │ ├── layout.tsx # 根佈局
54
- │ ├── page.tsx # 主頁面(對話介面)
55
- │ └── globals.css # 全域樣式
56
- ├── components/ # React 組件
57
- │ ├── ui/ # shadcn/ui 基礎組件
58
- │ │ ├── button.tsx
59
- │ │ ├── input.tsx
60
- │ │ └── scroll-area.tsx
61
- │ ├── chat-message.tsx # 訊息組件
62
- │ └── chat-input.tsx # 輸入框組件
63
- ├── lib/ # 工具函式
64
- │ └── utils.ts # cn() 等工具
65
- └── public/ # 靜態資源
66
- ```
67
-
68
- ## 北歐風格設計理念
69
-
70
- ### 色彩系統
71
-
72
- **淺色主題** - 受雪白 (Snow White) 啟發
73
- - 主要背景:純白 (#FFFFFF)
74
- - 次要背景:極淺灰 (#F8F9FA)
75
- - 強調色:冰藍 (#4A90E2)
76
-
77
- **深色主題** - 受極夜 (Polar Night) 啟發
78
- - 主要背景:深藍灰 (#0C0E15)
79
- - 次要背景:暗藍灰 (#1A1D2E)
80
- - 強調色:淺藍 (#5B9BF3)
81
-
82
- ### 設計原則
83
-
84
- 1. **極簡主義** - 移除不必要的裝飾,專注於內容
85
- 2. **留白** - 充足的空白空間,提升閱讀舒適度
86
- 3. **簡潔字體** - 使用 Inter 字體,清晰易讀
87
- 4. **柔和圓角** - 適度的圓角,營造友善氛圍
88
- 5. **對話優先** - 最大化對話展示空間
89
-
90
- ## 手機優化
91
-
92
- - **全螢幕體驗** - 100vh 高度,充分利用螢幕空間
93
- - **固定輸入** - 輸入框固定在底部,方便單手操作
94
- - **自動捲動** - 新訊息自動捲到視窗底部
95
- - **觸控優化** - 適當的按鈕大小與間距
96
- - **響應式字體** - 根據螢幕大小調整字體
97
-
98
- ## API 整合
99
-
100
- 前端通過 Server-Sent Events (SSE) 與後端 API 通訊:
101
-
102
- ```typescript
103
- // POST /api/chat
104
- {
105
- "message": "你好",
106
- "sessionId": "optional-session-id"
107
- }
108
- ```
109
-
110
- **SSE 事件類型:**
111
- - `session`: 新的會話 ID
112
- - `message`: AI 回應文字片段
113
- - `tool_use`: AI 使用工具
114
- - `tool_result`: 工具執行結果
115
- - `done`: 對話完成
116
- - `error`: 發生錯誤
117
-
118
- ## 開發
119
-
120
- ```bash
121
- # 開發模式(含 hot reload)
122
- npm run dev
123
-
124
- # 建置生產版本
125
- npm run build
126
-
127
- # 執行生產版本
128
- npm start
129
-
130
- # 程式碼檢查
131
- npm run lint
132
- ```
133
-
134
- ## 部署
135
-
136
- ### Vercel(推薦)
137
-
138
- ```bash
139
- npm install -g vercel
140
- vercel
141
- ```
142
-
143
- ### Docker
144
-
145
- ```bash
146
- docker build -t botrun-c-web .
147
- docker run -p 3000:3000 botrun-c-web
148
- ```
149
-
150
- ## 環境變數
151
-
152
- | 變數 | 說明 | 預設值 |
153
- |------|------|--------|
154
- | `NEXT_PUBLIC_API_URL` | API 伺服器 URL | http://localhost:8000 |
155
-
156
- ## 授權
157
-
158
- MIT License
159
-
160
- ---
161
-
162
- **Botrun-C Web** - Simple, Clean, Nordic
@@ -1,147 +0,0 @@
1
- // ============================================================================
2
- // image-extractor.test.ts - 圖片提取器單元測試
3
- // BDD 風格測試案例
4
- // ============================================================================
5
-
6
- import {
7
- extractImagesFromMarkdown,
8
- extractSessionId,
9
- extractImagesFromToolOutput,
10
- extractImagesFromToolUses,
11
- isValidImageUrl,
12
- } from '../lib/image-extractor';
13
-
14
- describe('Image Extractor', () => {
15
- describe('extractImagesFromMarkdown', () => {
16
- it('should extract single image from markdown', () => {
17
- const content = '![Generated Image](https://storage.googleapis.com/bucket/image.png)';
18
- const images = extractImagesFromMarkdown(content);
19
-
20
- expect(images).toHaveLength(1);
21
- expect(images[0].url).toBe('https://storage.googleapis.com/bucket/image.png');
22
- expect(images[0].alt).toBe('Generated Image');
23
- });
24
-
25
- it('should extract multiple images from markdown', () => {
26
- const content = `
27
- ## 圖片生成結果
28
- ![Image 1](https://storage.googleapis.com/bucket/image1.png)
29
- ![Image 2](https://storage.googleapis.com/bucket/image2.png)
30
- `;
31
- const images = extractImagesFromMarkdown(content);
32
-
33
- expect(images).toHaveLength(2);
34
- expect(images[0].url).toContain('image1.png');
35
- expect(images[1].url).toContain('image2.png');
36
- });
37
-
38
- it('should reject non-HTTPS URLs', () => {
39
- const content = '![Image](http://insecure.com/image.png)';
40
- const images = extractImagesFromMarkdown(content);
41
-
42
- expect(images).toHaveLength(0);
43
- });
44
-
45
- it('should handle empty content', () => {
46
- expect(extractImagesFromMarkdown('')).toHaveLength(0);
47
- expect(extractImagesFromMarkdown(null as any)).toHaveLength(0);
48
- expect(extractImagesFromMarkdown(undefined as any)).toHaveLength(0);
49
- });
50
-
51
- it('should use default alt text when alt is empty', () => {
52
- const content = '![](https://storage.googleapis.com/bucket/image.png)';
53
- const images = extractImagesFromMarkdown(content);
54
-
55
- expect(images).toHaveLength(1);
56
- expect(images[0].alt).toBe('Generated Image');
57
- });
58
- });
59
-
60
- describe('extractSessionId', () => {
61
- it('should extract session ID from content', () => {
62
- const content = 'Session ID: `abc123-def456-ghi789`';
63
- const sessionId = extractSessionId(content);
64
-
65
- expect(sessionId).toBe('abc123-def456-ghi789');
66
- });
67
-
68
- it('should return undefined when no session ID', () => {
69
- const content = 'No session info here';
70
- const sessionId = extractSessionId(content);
71
-
72
- expect(sessionId).toBeUndefined();
73
- });
74
-
75
- it('should handle empty content', () => {
76
- expect(extractSessionId('')).toBeUndefined();
77
- expect(extractSessionId(null as any)).toBeUndefined();
78
- });
79
- });
80
-
81
- describe('extractImagesFromToolOutput', () => {
82
- it('should extract images from string output', () => {
83
- const toolOutput = '![Image](https://storage.googleapis.com/bucket/image.png)';
84
- const images = extractImagesFromToolOutput(toolOutput);
85
-
86
- expect(images).toHaveLength(1);
87
- });
88
-
89
- it('should extract images from MCP array format', () => {
90
- const toolOutput = [
91
- { type: 'text', text: '![Image](https://storage.googleapis.com/bucket/image.png)' },
92
- ];
93
- const images = extractImagesFromToolOutput(toolOutput);
94
-
95
- expect(images).toHaveLength(1);
96
- });
97
-
98
- it('should attach sessionId to images', () => {
99
- const toolOutput = `
100
- ![Image](https://storage.googleapis.com/bucket/image.png)
101
- Session ID: \`test-session-id\`
102
- `;
103
- const images = extractImagesFromToolOutput(toolOutput);
104
-
105
- expect(images).toHaveLength(1);
106
- expect(images[0].sessionId).toBe('test-session-id');
107
- });
108
- });
109
-
110
- describe('extractImagesFromToolUses', () => {
111
- it('should extract images from multiple tool uses', () => {
112
- const toolUses = [
113
- { toolOutput: '![Image 1](https://example.com/1.png)' },
114
- { toolOutput: '![Image 2](https://example.com/2.png)' },
115
- ];
116
- const images = extractImagesFromToolUses(toolUses);
117
-
118
- expect(images).toHaveLength(2);
119
- });
120
-
121
- it('should handle empty toolUses', () => {
122
- expect(extractImagesFromToolUses([])).toHaveLength(0);
123
- expect(extractImagesFromToolUses(undefined)).toHaveLength(0);
124
- });
125
- });
126
-
127
- describe('isValidImageUrl', () => {
128
- it('should accept GCS signed URLs', () => {
129
- expect(isValidImageUrl('https://storage.googleapis.com/bucket/image.png?X-Goog-Algorithm=...')).toBe(true);
130
- });
131
-
132
- it('should accept common image extensions', () => {
133
- expect(isValidImageUrl('https://example.com/image.png')).toBe(true);
134
- expect(isValidImageUrl('https://example.com/image.jpg')).toBe(true);
135
- expect(isValidImageUrl('https://example.com/image.webp')).toBe(true);
136
- });
137
-
138
- it('should reject non-HTTPS URLs', () => {
139
- expect(isValidImageUrl('http://example.com/image.png')).toBe(false);
140
- });
141
-
142
- it('should reject invalid inputs', () => {
143
- expect(isValidImageUrl('')).toBe(false);
144
- expect(isValidImageUrl(null as any)).toBe(false);
145
- });
146
- });
147
- });
@@ -1,245 +0,0 @@
1
- /**
2
- * BDD Test Suite for useGitHub Hook
3
- */
4
-
5
- import { describe, it, expect, vi, beforeEach } from 'vitest';
6
-
7
- // Mock fetch
8
- const mockFetch = vi.fn();
9
- global.fetch = mockFetch;
10
-
11
- // Mock API URL
12
- vi.mock('@/lib/api-url', () => ({
13
- getApiUrl: () => 'http://localhost:8080',
14
- }));
15
-
16
- describe('useGitHub Hook Types (BDD)', () => {
17
- beforeEach(() => {
18
- mockFetch.mockClear();
19
- });
20
-
21
- describe('Given GitHubRepoInfo type', () => {
22
- it('When defining a repo info, Then it should have correct shape', () => {
23
- const repoInfo = {
24
- id: 123,
25
- name: 'my-repo',
26
- fullName: 'owner/my-repo',
27
- private: false,
28
- defaultBranch: 'main',
29
- url: 'https://github.com/owner/my-repo',
30
- };
31
-
32
- expect(repoInfo.id).toBe(123);
33
- expect(repoInfo.fullName).toBe('owner/my-repo');
34
- expect(repoInfo.private).toBe(false);
35
- });
36
- });
37
-
38
- describe('Given ConnectedRepo type', () => {
39
- it('When defining a connected repo, Then it should have correct shape', () => {
40
- const connectedRepo = {
41
- id: 'user123__owner_my-repo',
42
- repoFullName: 'owner/my-repo',
43
- owner: 'owner',
44
- name: 'my-repo',
45
- defaultBranch: 'main',
46
- currentBranch: 'feature/test',
47
- status: 'cloned' as const,
48
- lastSyncAt: '2024-01-15T12:00:00Z',
49
- error: null,
50
- createdAt: '2024-01-01T00:00:00Z',
51
- };
52
-
53
- expect(connectedRepo.id).toBe('user123__owner_my-repo');
54
- expect(connectedRepo.status).toBe('cloned');
55
- expect(connectedRepo.error).toBeNull();
56
- });
57
-
58
- it('When repo has error, Then error should have message and optional code', () => {
59
- const connectedRepo = {
60
- id: 'user123__owner_my-repo',
61
- repoFullName: 'owner/my-repo',
62
- owner: 'owner',
63
- name: 'my-repo',
64
- defaultBranch: 'main',
65
- currentBranch: 'main',
66
- status: 'error' as const,
67
- lastSyncAt: null,
68
- error: {
69
- message: 'Clone failed',
70
- code: 'CLONE_ERROR',
71
- },
72
- createdAt: '2024-01-01T00:00:00Z',
73
- };
74
-
75
- expect(connectedRepo.status).toBe('error');
76
- expect(connectedRepo.error?.message).toBe('Clone failed');
77
- expect(connectedRepo.error?.code).toBe('CLONE_ERROR');
78
- });
79
- });
80
-
81
- describe('Given GitStatus type', () => {
82
- it('When repo has changes, Then hasChanges should be true', () => {
83
- const status = {
84
- branch: 'main',
85
- ahead: 1,
86
- behind: 0,
87
- staged: ['file1.ts'],
88
- unstaged: [],
89
- untracked: ['newfile.ts'],
90
- hasChanges: true,
91
- };
92
-
93
- expect(status.hasChanges).toBe(true);
94
- expect(status.staged.length).toBe(1);
95
- expect(status.untracked.length).toBe(1);
96
- });
97
-
98
- it('When repo has no changes, Then hasChanges should be false', () => {
99
- const status = {
100
- branch: 'main',
101
- ahead: 0,
102
- behind: 0,
103
- staged: [],
104
- unstaged: [],
105
- untracked: [],
106
- hasChanges: false,
107
- };
108
-
109
- expect(status.hasChanges).toBe(false);
110
- expect(status.staged.length).toBe(0);
111
- });
112
- });
113
-
114
- describe('Given GitCommit type', () => {
115
- it('When defining a commit, Then it should have all required fields', () => {
116
- const commit = {
117
- sha: 'abc123def456',
118
- message: 'Initial commit',
119
- author: 'John Doe',
120
- date: '2024-01-15T12:00:00Z',
121
- };
122
-
123
- expect(commit.sha).toBe('abc123def456');
124
- expect(commit.message).toBe('Initial commit');
125
- expect(commit.author).toBe('John Doe');
126
- });
127
- });
128
-
129
- describe('Given API responses', () => {
130
- it('When status API returns connected=false, Then repos should be empty', async () => {
131
- const mockResponse = {
132
- connected: false,
133
- connectedRepos: [],
134
- availableRepos: [],
135
- };
136
-
137
- mockFetch.mockResolvedValueOnce({
138
- ok: true,
139
- json: async () => mockResponse,
140
- });
141
-
142
- const response = await fetch('http://localhost:8080/api/github/status');
143
- const data = await response.json();
144
-
145
- expect(data.connected).toBe(false);
146
- expect(data.connectedRepos).toHaveLength(0);
147
- });
148
-
149
- it('When status API returns connected=true, Then repos should be populated', async () => {
150
- const mockResponse = {
151
- connected: true,
152
- connectedRepos: [
153
- {
154
- id: 'user123__org_repo',
155
- repoFullName: 'org/repo',
156
- owner: 'org',
157
- name: 'repo',
158
- defaultBranch: 'main',
159
- currentBranch: 'main',
160
- status: 'cloned',
161
- lastSyncAt: '2024-01-15T12:00:00Z',
162
- error: null,
163
- createdAt: '2024-01-01T00:00:00Z',
164
- },
165
- ],
166
- availableRepos: [
167
- {
168
- id: 456,
169
- name: 'other-repo',
170
- fullName: 'org/other-repo',
171
- private: true,
172
- defaultBranch: 'main',
173
- url: 'https://github.com/org/other-repo',
174
- },
175
- ],
176
- };
177
-
178
- mockFetch.mockResolvedValueOnce({
179
- ok: true,
180
- json: async () => mockResponse,
181
- });
182
-
183
- const response = await fetch('http://localhost:8080/api/github/status');
184
- const data = await response.json();
185
-
186
- expect(data.connected).toBe(true);
187
- expect(data.connectedRepos).toHaveLength(1);
188
- expect(data.connectedRepos[0].repoFullName).toBe('org/repo');
189
- expect(data.availableRepos).toHaveLength(1);
190
- });
191
-
192
- it('When clone API succeeds, Then return repo info', async () => {
193
- const mockResponse = {
194
- success: true,
195
- repo: {
196
- id: 'user123__org_repo',
197
- repoFullName: 'org/repo',
198
- owner: 'org',
199
- name: 'repo',
200
- defaultBranch: 'main',
201
- currentBranch: 'main',
202
- status: 'cloned',
203
- lastSyncAt: '2024-01-15T12:00:00Z',
204
- error: null,
205
- createdAt: '2024-01-15T12:00:00Z',
206
- },
207
- localPath: '/mnt/data/user123/github/org_repo',
208
- };
209
-
210
- mockFetch.mockResolvedValueOnce({
211
- ok: true,
212
- json: async () => mockResponse,
213
- });
214
-
215
- const response = await fetch('http://localhost:8080/api/github/repos/org/repo/clone', {
216
- method: 'POST',
217
- });
218
- const data = await response.json();
219
-
220
- expect(data.success).toBe(true);
221
- expect(data.repo.status).toBe('cloned');
222
- expect(data.localPath).toContain('github');
223
- });
224
-
225
- it('When clone API fails, Then return error', async () => {
226
- const mockResponse = {
227
- success: false,
228
- error: 'Repository not found or not accessible.',
229
- };
230
-
231
- mockFetch.mockResolvedValueOnce({
232
- ok: false,
233
- json: async () => mockResponse,
234
- });
235
-
236
- const response = await fetch('http://localhost:8080/api/github/repos/org/nonexistent/clone', {
237
- method: 'POST',
238
- });
239
- const data = await response.json();
240
-
241
- expect(data.success).toBe(false);
242
- expect(data.error).toContain('not found');
243
- });
244
- });
245
- });
Binary file