botrun-horse 2.30.0 → 2.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. package/bin/bh.mjs +37 -170
  2. package/bin/commands/help.mjs +30 -30
  3. package/{lib/flows → modules/_core}/draft-writing.mjs +1 -1
  4. package/{lib/flows → modules/_core}/gemini-ask.mjs +1 -1
  5. package/{lib/flows → modules/_core}/legal-ask.mjs +4 -4
  6. package/{lib/flows → modules/_core}/openai-agent.mjs +2 -2
  7. package/{lib/flows → modules/_core}/openrouter-ask.mjs +1 -1
  8. package/{bin/commands/dag-cmd.mjs → modules/dag/command.mjs} +2 -2
  9. package/modules/dag/index.mjs +30 -0
  10. package/{bin/commands/db-cmd.mjs → modules/db/command.mjs} +3 -3
  11. package/modules/db/index.mjs +26 -0
  12. package/modules/discover.mjs +43 -0
  13. package/{bin/commands/doc.mjs → modules/doc/command.mjs} +5 -5
  14. package/modules/doc/index.mjs +55 -0
  15. package/{lib/doc/index.mjs → modules/doc/ingest.mjs} +1 -1
  16. package/{lib → modules}/doc/office2text.mjs +1 -1
  17. package/{lib → modules}/doc/pdf2text.mjs +1 -1
  18. package/{lib → modules}/doc/split.mjs +1 -1
  19. package/{bin/commands/gemini.mjs → modules/gemini/command.mjs} +3 -3
  20. package/modules/gemini/index.mjs +41 -0
  21. package/modules/imagen/command.mjs +117 -0
  22. package/modules/imagen/imagen-client.mjs +239 -0
  23. package/modules/imagen/index.mjs +60 -0
  24. package/modules/imagen/server.mjs +133 -0
  25. package/{bin/commands/legal.mjs → modules/legal/command.mjs} +5 -5
  26. package/modules/legal/index.mjs +56 -0
  27. package/{bin/commands/nchc.mjs → modules/nchc/command.mjs} +4 -4
  28. package/modules/nchc/index.mjs +48 -0
  29. package/modules/ocr/index.mjs +17 -0
  30. package/{bin/commands/openrouter.mjs → modules/openrouter/command.mjs} +5 -5
  31. package/modules/openrouter/index.mjs +49 -0
  32. package/modules/portal/index.mjs +17 -0
  33. package/{bin/commands/search.mjs → modules/search/command.mjs} +3 -3
  34. package/modules/search/index.mjs +23 -0
  35. package/{lib/search/index.mjs → modules/search/search-lib.mjs} +1 -1
  36. package/{bin/commands/skill.mjs → modules/skill/command.mjs} +46 -9
  37. package/modules/skill/index.mjs +35 -0
  38. package/{lib/prompt → modules/skill}/prompt-search.mjs +1 -1
  39. package/{lib/prompt → modules/skill}/prompt-store.mjs +28 -11
  40. package/modules/skill/prompts/zero-framework/address-matching.md +22 -0
  41. package/modules/skill/prompts/zero-framework/data-integrity.md +15 -0
  42. package/modules/skill/prompts/zero-framework/data-reasonability.md +17 -0
  43. package/modules/skill/prompts/zero-framework/gemini-image-gen.md +20 -0
  44. package/modules/skill/prompts/zero-framework/gemini-search-cli.md +10 -0
  45. package/modules/skill/prompts/zero-framework/html-report.md +15 -0
  46. package/modules/skill/prompts/zero-framework/smart-cache.md +10 -0
  47. package/modules/skill/prompts/zero-framework/trigram-search.md +12 -0
  48. package/modules/skill/prompts/zero-framework/tts-format.md +6 -0
  49. package/modules/skill/prompts/zero-framework/watermelon-sqlite.md +8 -0
  50. package/{bin/commands/writing.mjs → modules/writing/command.mjs} +3 -3
  51. package/{lib → modules}/writing/generate.mjs +2 -2
  52. package/modules/writing/index.mjs +38 -0
  53. package/package.json +3 -1
  54. package/parallel-dag-todo-list/imagen-module.md +51 -0
  55. package/bin/commands/schema.mjs +0 -254
  56. package/botrun-c/.claude/skills/DOCX/351/226/261/350/256/200/346/212/200/350/203/275/SKILL.md +0 -103
  57. package/botrun-c/.claude/skills/DOCX/351/226/261/350/256/200/346/212/200/350/203/275/scripts/docx-to-markdown.mjs +0 -206
  58. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/SKILL.md +0 -1093
  59. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branch.mjs +0 -73
  60. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-branches.mjs +0 -77
  61. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-checkout.mjs +0 -72
  62. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-clone.mjs +0 -72
  63. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-commit.mjs +0 -75
  64. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-branch.mjs +0 -75
  65. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-delete-file.mjs +0 -72
  66. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-diff.mjs +0 -80
  67. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list-tree.mjs +0 -336
  68. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-list.mjs +0 -199
  69. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-merge.mjs +0 -86
  70. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-move.mjs +0 -75
  71. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-create.mjs +0 -81
  72. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-list.mjs +0 -74
  73. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-merge.mjs +0 -83
  74. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-pr-view.mjs +0 -71
  75. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-push.mjs +0 -71
  76. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-read.mjs +0 -277
  77. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-search.mjs +0 -370
  78. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-stash.mjs +0 -116
  79. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-sync.mjs +0 -71
  80. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/github-write.mjs +0 -74
  81. package/botrun-c/.claude/skills/GitHub/346/212/200/350/203/275/scripts/lib/path-validator.mjs +0 -167
  82. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/SKILL.md +0 -605
  83. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-create.mjs +0 -127
  84. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-delete.mjs +0 -77
  85. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-diff.mjs +0 -87
  86. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-history.mjs +0 -99
  87. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-list.mjs +0 -174
  88. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-read.mjs +0 -214
  89. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-restore.mjs +0 -75
  90. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-search.mjs +0 -270
  91. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-sync-back.mjs +0 -155
  92. package/botrun-c/.claude/skills/GoogleDrive/346/212/200/350/203/275/scripts/gdrive-update.mjs +0 -100
  93. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/SKILL.md +0 -414
  94. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/create-project.mjs +0 -91
  95. package/botrun-c/.claude/skills/HTML/347/224/237/346/210/220/346/212/200/350/203/275/scripts/finalize-project.mjs +0 -162
  96. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/SKILL.md +0 -206
  97. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/package.json +0 -19
  98. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-analyze.mjs +0 -309
  99. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-compress.mjs +0 -315
  100. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-split.mjs +0 -275
  101. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/pdf-to-text.mjs +0 -336
  102. package/botrun-c/.claude/skills/PDF/346/212/200/350/203/275/scripts/test-pdf-scripts.mjs +0 -491
  103. package/botrun-c/.claude/skills/docx-to-markdown/SKILL.md +0 -76
  104. package/botrun-c/.claude/skills/docx-to-markdown/scripts/convert_docx.py +0 -183
  105. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/SKILL.md +0 -133
  106. package/botrun-c/.claude/skills/gcp-coord-ml-ocr/scripts/ocr_processor.py +0 -381
  107. package/botrun-c/.claude/skills/gemini-transcribe/SKILL.md +0 -115
  108. package/botrun-c/.claude/skills/gemini-transcribe/scripts/transcribe.py +0 -499
  109. package/botrun-c/.claude/skills/nchc-transcribe/SKILL.md +0 -131
  110. package/botrun-c/.claude/skills/nchc-transcribe/scripts/transcribe.py +0 -522
  111. package/botrun-c/.claude/skills/p320-moj-review/SKILL.md +0 -200
  112. package/botrun-c/.claude/skills/p320-moj-review/references/guideline.md +0 -118
  113. package/botrun-c/.claude/skills/pdf-multimodal-processor/SKILL.md +0 -186
  114. package/botrun-c/.claude/skills/pdf-multimodal-processor/scripts/process_pdf.py +0 -515
  115. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/SKILL.md +0 -81
  116. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/package.json +0 -13
  117. package/botrun-c/.claude/skills/ripgrep/346/220/234/345/260/213/346/212/200/350/203/275/scripts/secure-search.mjs +0 -232
  118. package/botrun-c/.claude/skills/top100/351/240/230/350/242/226/351/240/220/346/270/254/346/212/200/350/203/275/SKILL.md +0 -518
  119. package/botrun-c/.claude/skills//345/216/273/350/255/230/345/210/245/346/212/200/350/203/275/SKILL.md +0 -125
  120. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/SKILL.md +0 -123
  121. package/botrun-c/.claude/skills//345/233/236/346/206/266/346/212/200/350/203/275/scripts/recall.mjs +0 -339
  122. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/SKILL.md +0 -156
  123. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/__tests__/utils.test.mjs +0 -139
  124. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/constants.mjs +0 -40
  125. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/gcs-uploader.mjs +0 -195
  126. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/gemini-image-client.mjs +0 -307
  127. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/generate-image.mjs +0 -103
  128. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/image-session-manager.mjs +0 -219
  129. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/output-formatter.mjs +0 -209
  130. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/package.json +0 -20
  131. package/botrun-c/.claude/skills//345/234/226/347/211/207/347/224/237/346/210/220/346/212/200/350/203/275/scripts/utils.mjs +0 -115
  132. package/botrun-c/.claude/skills//345/244/232/346/250/241/346/205/213/351/226/261/350/256/200/346/212/200/350/203/275/SKILL.md +0 -86
  133. package/botrun-c/.claude/skills//345/244/232/346/250/241/346/205/213/351/226/261/350/256/200/346/212/200/350/203/275/scripts/multimodal-read.mjs +0 -304
  134. package/botrun-c/.claude/skills//345/244/232/346/250/241/346/205/213/351/226/261/350/256/200/346/212/200/350/203/275/scripts/package.json +0 -17
  135. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/SKILL.md +0 -131
  136. package/botrun-c/.claude/skills//345/255/265/345/214/226/346/212/200/350/203/275/scripts/skill-manager.mjs +0 -542
  137. package/botrun-c/.claude/skills//346/234/203/350/255/260/350/250/230/351/214/204/346/212/200/350/203/275/SKILL.md +0 -127
  138. package/botrun-c/.claude/skills//347/233/256/351/214/204/345/210/227/350/241/250/346/212/200/350/203/275/SKILL.md +0 -53
  139. package/botrun-c/.claude/skills//347/233/256/351/214/204/345/210/227/350/241/250/346/212/200/350/203/275/scripts/package.json +0 -13
  140. package/botrun-c/.claude/skills//347/233/256/351/214/204/345/210/227/350/241/250/346/212/200/350/203/275/scripts/tree-view.mjs +0 -149
  141. package/botrun-c/.claude/skills//347/264/224/346/226/207/345/255/227/345/244/232/346/252/224/346/241/210/350/256/200/345/217/226/346/212/200/350/203/275/SKILL.md +0 -82
  142. package/botrun-c/.claude/skills//347/264/224/346/226/207/345/255/227/345/244/232/346/252/224/346/241/210/350/256/200/345/217/226/346/212/200/350/203/275/scripts/package.json +0 -16
  143. package/botrun-c/.claude/skills//347/264/224/346/226/207/345/255/227/345/244/232/346/252/224/346/241/210/350/256/200/345/217/226/346/212/200/350/203/275/scripts/secure-read.mjs +0 -260
  144. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/SKILL.md +0 -156
  145. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/package.json +0 -16
  146. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/search.js +0 -139
  147. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/search.mjs +0 -272
  148. package/botrun-c/.claude/skills//347/266/262/350/267/257/346/220/234/345/260/213/346/212/200/350/203/275/scripts/search.ts +0 -166
  149. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/SKILL.md +0 -114
  150. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/remember.mjs +0 -159
  151. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test-advanced.mjs +0 -342
  152. package/botrun-c/.claude/skills//350/250/230/346/206/266/346/212/200/350/203/275/scripts/test.mjs +0 -430
  153. package/botrun-c/.claude/skills//350/252/236/351/237/263/350/275/211/346/226/207/345/255/227/346/212/200/350/203/275/SKILL.md +0 -30
  154. package/botrun-c/.claude/skills//350/252/236/351/237/263/350/275/211/346/226/207/345/255/227/346/212/200/350/203/275/scripts/package.json +0 -13
  155. package/botrun-c/.claude/skills//350/252/236/351/237/263/350/275/211/346/226/207/345/255/227/346/212/200/350/203/275/scripts/transcribe.mjs +0 -294
  156. package/botrun-c/.claude/skills//351/233/266/345/271/273/350/246/272/350/255/211/346/230/216/346/212/200/350/203/275/SKILL.md +0 -338
  157. package/botrun-c/.dockerignore +0 -131
  158. package/botrun-c/.dockeroptimize +0 -13
  159. package/botrun-c/.firebase/hosting.b3V0.cache +0 -30
  160. package/botrun-c/.firebaserc +0 -5
  161. package/botrun-c/.gcloudignore +0 -56
  162. package/botrun-c/.ruby-version +0 -1
  163. package/botrun-c/CHANGELOG.md +0 -224
  164. package/botrun-c/Dockerfile.gcp +0 -365
  165. package/botrun-c/Dockerfile.slim +0 -195
  166. package/botrun-c/Gemfile +0 -8
  167. package/botrun-c/Gemfile.lock +0 -233
  168. package/botrun-c/LOCAL-DEVELOPMENT-GUIDE.md +0 -393
  169. package/botrun-c/PLAN.md +0 -131
  170. package/botrun-c/README.md +0 -129
  171. package/botrun-c/TODO-CAPACITOR-INTEGRATION.md +0 -482
  172. package/botrun-c/VERIFICATION.md +0 -121
  173. package/botrun-c/admin/RATE_LIMIT_MANAGEMENT.md +0 -312
  174. package/botrun-c/admin/README.md +0 -338
  175. package/botrun-c/admin/botrun-billing-report-1765235244038.csv +0 -22
  176. package/botrun-c/admin/botrun-billing-report-1765235323089.csv +0 -22
  177. package/botrun-c/admin/botrun-dashboard-1765235244039.html +0 -278
  178. package/botrun-c/admin/botrun-dashboard-1765235323089.html +0 -278
  179. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235244039.html +0 -161
  180. package/botrun-c/admin/botrun-timeseries-074xGzIKWyfKTBt1NMIj9lxi5mO2-1765235323090.html +0 -161
  181. package/botrun-c/admin/check-billing.ts +0 -48
  182. package/botrun-c/admin/count-all-users.ts +0 -65
  183. package/botrun-c/admin/generate-analytics-report.ts +0 -188
  184. package/botrun-c/admin/jest.config.ts +0 -43
  185. package/botrun-c/admin/lib/__tests__/formatters.test.ts +0 -264
  186. package/botrun-c/admin/lib/__tests__/mocks/firebase.mock.ts +0 -112
  187. package/botrun-c/admin/lib/__tests__/services/UserService.test.ts +0 -83
  188. package/botrun-c/admin/lib/__tests__/user-resolver.test.ts +0 -439
  189. package/botrun-c/admin/lib/analyzers/BillingAnalyticsService.ts +0 -242
  190. package/botrun-c/admin/lib/analyzers/CsvExporter.ts +0 -263
  191. package/botrun-c/admin/lib/analyzers/HtmlChartGenerator.ts +0 -530
  192. package/botrun-c/admin/lib/analyzers/SpikeAnalyzer.ts +0 -608
  193. package/botrun-c/admin/lib/analyzers/TimeSeriesAnalyzer.ts +0 -344
  194. package/botrun-c/admin/lib/cli/CLIBootstrapper.ts +0 -40
  195. package/botrun-c/admin/lib/commands/AbstractCommand.ts +0 -69
  196. package/botrun-c/admin/lib/commands/AnalyticsCommand.ts +0 -215
  197. package/botrun-c/admin/lib/commands/ListCommand.ts +0 -85
  198. package/botrun-c/admin/lib/commands/QueryCommand.ts +0 -81
  199. package/botrun-c/admin/lib/commands/SpikeCommand.ts +0 -83
  200. package/botrun-c/admin/lib/domain/User.ts +0 -38
  201. package/botrun-c/admin/lib/firebase.ts +0 -92
  202. package/botrun-c/admin/lib/firestore-safe.ts +0 -105
  203. package/botrun-c/admin/lib/formatters.ts +0 -154
  204. package/botrun-c/admin/lib/rate-limit-detailed.ts +0 -355
  205. package/botrun-c/admin/lib/rate-limit.ts +0 -286
  206. package/botrun-c/admin/lib/repositories/UserRepository.ts +0 -104
  207. package/botrun-c/admin/lib/services/UserService.ts +0 -108
  208. package/botrun-c/admin/lib/types.ts +0 -56
  209. package/botrun-c/admin/lib/user-resolver.ts +0 -275
  210. package/botrun-c/admin/manage-auth-domains.js +0 -178
  211. package/botrun-c/admin/migrate-plan-free.sh +0 -64
  212. package/botrun-c/admin/package-lock.json +0 -5656
  213. package/botrun-c/admin/package.json +0 -28
  214. package/botrun-c/admin/rate-limit.sh +0 -55
  215. package/botrun-c/admin/remove-custom-limits.ts +0 -75
  216. package/botrun-c/admin/reset-rate.sh +0 -70
  217. package/botrun-c/admin/reset-trial.sh +0 -68
  218. package/botrun-c/admin/seed-trial-data.sh +0 -38
  219. package/botrun-c/admin/trial.sh +0 -55
  220. package/botrun-c/admin/tsconfig.json +0 -20
  221. package/botrun-c/admin/users-cli.py +0 -298
  222. package/botrun-c/admin/users.sh +0 -12
  223. package/botrun-c/admin/users.ts +0 -1321
  224. package/botrun-c/api/admin-tools/check-whitelist.mjs.migration-bak +0 -74
  225. package/botrun-c/api/admin-tools/create-user.mjs +0 -92
  226. package/botrun-c/api/admin-tools/create-user.mjs.migration-bak +0 -92
  227. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py +0 -287
  228. package/botrun-c/api/admin-tools/firebase-auth-domains-v2.py.migration-bak +0 -287
  229. package/botrun-c/api/admin-tools/init-firestore.mjs +0 -75
  230. package/botrun-c/api/admin-tools/init-firestore.mjs.migration-bak +0 -101
  231. package/botrun-c/api/admin-tools/list-users.mjs +0 -43
  232. package/botrun-c/api/admin-tools/list-users.mjs.migration-bak +0 -43
  233. package/botrun-c/api/admin-tools/manage-authorized-domains.ts +0 -255
  234. package/botrun-c/api/admin-tools/manage-authorized-domains.ts.migration-bak +0 -255
  235. package/botrun-c/api/admin-tools/setup-custom-claims.ts.migration-bak +0 -155
  236. package/botrun-c/api/admin-tools/test-claims.mjs +0 -69
  237. package/botrun-c/api/admin-tools/test-claims.mjs.migration-bak +0 -69
  238. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs +0 -72
  239. package/botrun-c/api/admin-tools/update-service-urls-gcloud.mjs.migration-bak +0 -72
  240. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs +0 -159
  241. package/botrun-c/api/admin-tools/update-service-urls-to-lb.mjs.migration-bak +0 -159
  242. package/botrun-c/api/admin-tools/update-service-urls.mjs +0 -82
  243. package/botrun-c/api/admin-tools/update-service-urls.mjs.migration-bak +0 -82
  244. package/botrun-c/api/package-lock.json +0 -5031
  245. package/botrun-c/api/package.json +0 -63
  246. package/botrun-c/api/pnpm-lock.yaml +0 -4157
  247. package/botrun-c/api/rate-limit-export-1763620678737.csv +0 -79
  248. package/botrun-c/api/scripts/README-migrate-plan-free.md +0 -197
  249. package/botrun-c/api/scripts/check-users.ts +0 -45
  250. package/botrun-c/api/scripts/delete-firestore-docs.js +0 -43
  251. package/botrun-c/api/scripts/dump-subscriptions.ts +0 -395
  252. package/botrun-c/api/scripts/list-all-users.ts +0 -65
  253. package/botrun-c/api/scripts/migrate-plan-free-rpd-16to32.ts +0 -262
  254. package/botrun-c/api/scripts/migrate-plan-names-to-lite-max.ts +0 -269
  255. package/botrun-c/api/scripts/query-user-info.ts +0 -304
  256. package/botrun-c/api/scripts/reset-rate-limit.ts +0 -206
  257. package/botrun-c/api/scripts/reset-trial-subscription.ts +0 -166
  258. package/botrun-c/api/scripts/rollback-plan-names-from-lite-max.ts +0 -139
  259. package/botrun-c/api/scripts/seed-rate-limit-test-data.ts +0 -114
  260. package/botrun-c/api/scripts/seed-subscription-test-data.ts +0 -173
  261. package/botrun-c/api/scripts/test-rate-limit-message.ts +0 -108
  262. package/botrun-c/api/test-billing-write.ts +0 -103
  263. package/botrun-c/api/test-billing.ts +0 -81
  264. package/botrun-c/api/test-chat-upload.sh +0 -162
  265. package/botrun-c/api/test-nchc-whisper.ts +0 -87
  266. package/botrun-c/api/test-skills-loading.js +0 -77
  267. package/botrun-c/api/test-skills-symlink.js +0 -118
  268. package/botrun-c/api/test-upload-multimodal.sh +0 -167
  269. package/botrun-c/api/tsconfig.json +0 -27
  270. package/botrun-c/api/verify-form-2-1.mjs +0 -229
  271. package/botrun-c/api/vitest.config.ts +0 -9
  272. package/botrun-c/appium-capabilities.json +0 -20
  273. package/botrun-c/cors.json +0 -26
  274. package/botrun-c/delete-old.sh +0 -44
  275. package/botrun-c/design/google-drive/01-architecture.md +0 -186
  276. package/botrun-c/design/google-drive/02-api-design.md +0 -314
  277. package/botrun-c/design/google-drive/03-frontend-design.md +0 -278
  278. package/botrun-c/design/google-drive/04-skill-design.md +0 -384
  279. package/botrun-c/design/google-drive/05-test-plan.md +0 -507
  280. package/botrun-c/design/google-drive/README.md +0 -32
  281. package/botrun-c/dev/mcp-token-calculator/README.md +0 -92
  282. package/botrun-c/dev/mcp-token-calculator/RESULTS.md +0 -188
  283. package/botrun-c/dev/mcp-token-calculator/calculate-current-tokens.ts +0 -369
  284. package/botrun-c/dev/mcp-token-calculator/calculate-mcp-tokens.ts +0 -464
  285. package/botrun-c/dev/mcp-token-calculator/optimization-proposals.ts +0 -316
  286. package/botrun-c/dev/mcp-token-calculator/package-lock.json +0 -599
  287. package/botrun-c/dev/mcp-token-calculator/package.json +0 -22
  288. package/botrun-c/dev/mcp-token-calculator/test-all-schemas.ts +0 -314
  289. package/botrun-c/dev/mcp-token-calculator/test-schema-correctness.ts +0 -221
  290. package/botrun-c/dev/mcp-token-calculator/verify-optimization.ts +0 -159
  291. package/botrun-c/fastlane/ANDROID-DEPLOYMENT-SETUP.md +0 -825
  292. package/botrun-c/fastlane/IOS-DEPLOYMENT-SETUP.md +0 -431
  293. package/botrun-c/fastlane/Pluginfile +0 -5
  294. package/botrun-c/fastlane/QUICK-START.md +0 -133
  295. package/botrun-c/fastlane/README.md +0 -424
  296. package/botrun-c/fastlane/RUBY-SETUP.md +0 -449
  297. package/botrun-c/fastlane/android/Appfile +0 -11
  298. package/botrun-c/fastlane/android/Fastfile +0 -240
  299. package/botrun-c/firebase.json +0 -46
  300. package/botrun-c/firestore-init-data.json +0 -40
  301. package/botrun-c/firestore.indexes.json +0 -55
  302. package/botrun-c/firestore.rules +0 -53
  303. package/botrun-c/fix-codex-permissions.sh +0 -56
  304. package/botrun-c/gcs-lifecycle-30day-retention.json +0 -12
  305. package/botrun-c/html-architecture/architecture/deployment.html +0 -664
  306. package/botrun-c/html-architecture/architecture/index.html +0 -309
  307. package/botrun-c/html-architecture/architecture/styles.css +0 -500
  308. package/botrun-c/html-architecture/architecture/system-components.html +0 -538
  309. package/botrun-c/html-architecture/architecture/user-flow.html +0 -370
  310. package/botrun-c/mobile-android/FIREBASE-AUTH-SETUP.md +0 -302
  311. package/botrun-c/mobile-android/WSL-ANDROID-SETUP.md +0 -252
  312. package/botrun-c/mobile-android/android/app/build.gradle +0 -75
  313. package/botrun-c/mobile-android/android/app/capacitor.build.gradle +0 -31
  314. package/botrun-c/mobile-android/android/app/proguard-rules.pro +0 -21
  315. package/botrun-c/mobile-android/android/build.gradle +0 -29
  316. package/botrun-c/mobile-android/android/capacitor.settings.gradle +0 -42
  317. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  318. package/botrun-c/mobile-android/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  319. package/botrun-c/mobile-android/android/gradle.properties +0 -22
  320. package/botrun-c/mobile-android/android/gradlew +0 -252
  321. package/botrun-c/mobile-android/android/gradlew.bat +0 -94
  322. package/botrun-c/mobile-android/android/settings.gradle +0 -5
  323. package/botrun-c/mobile-android/android/variables.gradle +0 -16
  324. package/botrun-c/mobile-android/capacitor.config.ts +0 -44
  325. package/botrun-c/mobile-android/fastlane/Appfile +0 -11
  326. package/botrun-c/mobile-android/fastlane/Fastfile +0 -202
  327. package/botrun-c/mobile-android/fastlane/README.md +0 -96
  328. package/botrun-c/mobile-android/google-services.json.template +0 -39
  329. package/botrun-c/mobile-android/package.json +0 -32
  330. package/botrun-c/mobile-android/resources/icon.png +0 -0
  331. package/botrun-c/mobile-android/tsconfig.json +0 -15
  332. package/botrun-c/mobile-ios/.ruby-version +0 -1
  333. package/botrun-c/mobile-ios/BUILD-LOG.md +0 -82
  334. package/botrun-c/mobile-ios/Gemfile +0 -4
  335. package/botrun-c/mobile-ios/Gemfile.lock +0 -299
  336. package/botrun-c/mobile-ios/GoogleService-Info.plist.template +0 -34
  337. package/botrun-c/mobile-ios/IOS-PERMISSIONS.md +0 -80
  338. package/botrun-c/mobile-ios/QUICK-START.md +0 -189
  339. package/botrun-c/mobile-ios/README.md +0 -231
  340. package/botrun-c/mobile-ios/capacitor.config.ts +0 -46
  341. package/botrun-c/mobile-ios/fastlane/Fastfile +0 -326
  342. package/botrun-c/mobile-ios/fastlane/README.md +0 -88
  343. package/botrun-c/mobile-ios/ios/App/App/App.entitlements +0 -10
  344. package/botrun-c/mobile-ios/ios/App/App/AppDelegate.swift +0 -49
  345. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
  346. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  347. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Contents.json +0 -6
  348. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +0 -56
  349. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png +0 -0
  350. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png +0 -0
  351. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png +0 -0
  352. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png +0 -0
  353. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png +0 -0
  354. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png +0 -0
  355. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  356. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  357. package/botrun-c/mobile-ios/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  358. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/LaunchScreen.storyboard +0 -32
  359. package/botrun-c/mobile-ios/ios/App/App/Base.lproj/Main.storyboard +0 -19
  360. package/botrun-c/mobile-ios/ios/App/App/Info.plist +0 -72
  361. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/project.pbxproj +0 -446
  362. package/botrun-c/mobile-ios/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme +0 -78
  363. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/contents.xcworkspacedata +0 -10
  364. package/botrun-c/mobile-ios/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  365. package/botrun-c/mobile-ios/ios/App/Podfile +0 -52
  366. package/botrun-c/mobile-ios/ios/App/Podfile.lock +0 -205
  367. package/botrun-c/mobile-ios/ios/App/add_plist.rb +0 -30
  368. package/botrun-c/mobile-ios/ios/App/fix_plist_path.rb +0 -22
  369. package/botrun-c/mobile-ios/package.json +0 -29
  370. package/botrun-c/mobile-ios/resources/icon.png +0 -0
  371. package/botrun-c/mobile-ios/run-simulator.sh +0 -34
  372. package/botrun-c/mobile-ios/screenshot-after-clean-rebuild.png +0 -0
  373. package/botrun-c/mobile-ios/screenshot-final-version.png +0 -0
  374. package/botrun-c/mobile-ios/screenshot-simulator.png +0 -0
  375. package/botrun-c/mobile-ios/screenshot-version-1009.png +0 -0
  376. package/botrun-c/mobile-ios/screenshot-with-version.png +0 -0
  377. package/botrun-c/mobile-ios/screenshot-working.png +0 -0
  378. package/botrun-c/mobile-ios/setup-ios.sh +0 -106
  379. package/botrun-c/mobile-ios/tsconfig.json +0 -16
  380. package/botrun-c/org-policy-allow-all-users.yaml +0 -3
  381. package/botrun-c/package.json +0 -68
  382. package/botrun-c/pnpm-lock.yaml +0 -10198
  383. package/botrun-c/pnpm-workspace.yaml +0 -6
  384. package/botrun-c/prompts/BOTRUN-1.md +0 -13
  385. package/botrun-c/prompts/BOTRUN-2.md +0 -70
  386. package/botrun-c/prompts/BOTRUN-3.md +0 -139
  387. package/botrun-c/prototypes/firestore-gax-debug/package-lock.json +0 -1204
  388. package/botrun-c/prototypes/firestore-gax-debug/package.json +0 -12
  389. package/botrun-c/prototypes/firestore-gax-debug/pnpm-workspace.yaml +0 -2
  390. package/botrun-c/prototypes/firestore-gax-debug/test.js +0 -98
  391. package/botrun-c/prototypes/taiwan-haiku/README.md +0 -93
  392. package/botrun-c/prototypes/taiwan-haiku/index.ts +0 -139
  393. package/botrun-c/prototypes/taiwan-haiku/package.json +0 -23
  394. package/botrun-c/prototypes/taiwan-haiku/pnpm-lock.yaml +0 -730
  395. package/botrun-c/prototypes/taiwan-haiku/test-vertex-direct.ts +0 -83
  396. package/botrun-c/prototypes/taiwan-haiku/tsconfig.json +0 -18
  397. package/botrun-c/prototypes/web-search/FINDINGS-STAGE-1.md +0 -48
  398. package/botrun-c/prototypes/web-search/README.md +0 -46
  399. package/botrun-c/prototypes/web-search/VERIFICATION-REPORT.md +0 -310
  400. package/botrun-c/prototypes/web-search/package-lock.json +0 -595
  401. package/botrun-c/prototypes/web-search/package.json +0 -18
  402. package/botrun-c/prototypes/web-search/stage-1.1-basic-connection.js +0 -123
  403. package/botrun-c/prototypes/web-search/stage-1.2-with-websearch.js +0 -154
  404. package/botrun-c/prototypes/web-search/stage-1.3-search-query.js +0 -192
  405. package/botrun-c/prototypes/web-search/stage-2-agent-sdk-websearch.js +0 -265
  406. package/botrun-c/runtime-scripts/env-detect.sh +0 -64
  407. package/botrun-c/scripts/github-collaborator-manager.sh +0 -297
  408. package/botrun-c/scripts/github-collaborator-manager.ts +0 -325
  409. package/botrun-c/scripts/manage-collaborators.sh +0 -91
  410. package/botrun-c/scripts/setup-secrets.sh +0 -202
  411. package/botrun-c/scripts/stress-test-17-users.sh +0 -113
  412. package/botrun-c/scripts/stress-test-api.sh +0 -119
  413. package/botrun-c/scripts/stress-test-full-report.sh +0 -385
  414. package/botrun-c/specs/infra-vm/design.md +0 -0
  415. package/botrun-c/specs/share-skill/design.md +0 -1146
  416. package/botrun-c/specs/share-skill/tasks.md +0 -444
  417. package/botrun-c/stress-test-results/20260121-162630/config.json +0 -7
  418. package/botrun-c/stress-test-results/20260121-162630/user-1-status.txt +0 -1
  419. package/botrun-c/stress-test-results/20260121-162630/user-1-timing.txt +0 -1
  420. package/botrun-c/stress-test-results/20260121-162630/user-1.json +0 -2
  421. package/botrun-c/stress-test-results/20260121-162646/config.json +0 -7
  422. package/botrun-c/stress-test-results/20260121-162646/user-1-status.txt +0 -1
  423. package/botrun-c/stress-test-results/20260121-162646/user-1-timing.txt +0 -1
  424. package/botrun-c/stress-test-results/20260121-162646/user-1.json +0 -2
  425. package/botrun-c/stress-test-results/20260121-162646/user-10-status.txt +0 -1
  426. package/botrun-c/stress-test-results/20260121-162646/user-10-timing.txt +0 -1
  427. package/botrun-c/stress-test-results/20260121-162646/user-10.json +0 -2
  428. package/botrun-c/stress-test-results/20260121-162646/user-11-status.txt +0 -1
  429. package/botrun-c/stress-test-results/20260121-162646/user-11-timing.txt +0 -1
  430. package/botrun-c/stress-test-results/20260121-162646/user-11.json +0 -2
  431. package/botrun-c/stress-test-results/20260121-162646/user-12-status.txt +0 -1
  432. package/botrun-c/stress-test-results/20260121-162646/user-12-timing.txt +0 -1
  433. package/botrun-c/stress-test-results/20260121-162646/user-12.json +0 -2
  434. package/botrun-c/stress-test-results/20260121-162646/user-13-status.txt +0 -1
  435. package/botrun-c/stress-test-results/20260121-162646/user-13-timing.txt +0 -1
  436. package/botrun-c/stress-test-results/20260121-162646/user-13.json +0 -2
  437. package/botrun-c/stress-test-results/20260121-162646/user-14-status.txt +0 -1
  438. package/botrun-c/stress-test-results/20260121-162646/user-14-timing.txt +0 -1
  439. package/botrun-c/stress-test-results/20260121-162646/user-14.json +0 -2
  440. package/botrun-c/stress-test-results/20260121-162646/user-15-status.txt +0 -1
  441. package/botrun-c/stress-test-results/20260121-162646/user-15-timing.txt +0 -1
  442. package/botrun-c/stress-test-results/20260121-162646/user-15.json +0 -2
  443. package/botrun-c/stress-test-results/20260121-162646/user-16-status.txt +0 -1
  444. package/botrun-c/stress-test-results/20260121-162646/user-16-timing.txt +0 -1
  445. package/botrun-c/stress-test-results/20260121-162646/user-16.json +0 -2
  446. package/botrun-c/stress-test-results/20260121-162646/user-17-status.txt +0 -1
  447. package/botrun-c/stress-test-results/20260121-162646/user-17-timing.txt +0 -1
  448. package/botrun-c/stress-test-results/20260121-162646/user-17.json +0 -2
  449. package/botrun-c/stress-test-results/20260121-162646/user-2-status.txt +0 -1
  450. package/botrun-c/stress-test-results/20260121-162646/user-2-timing.txt +0 -1
  451. package/botrun-c/stress-test-results/20260121-162646/user-2.json +0 -2
  452. package/botrun-c/stress-test-results/20260121-162646/user-3-status.txt +0 -1
  453. package/botrun-c/stress-test-results/20260121-162646/user-3-timing.txt +0 -1
  454. package/botrun-c/stress-test-results/20260121-162646/user-3.json +0 -2
  455. package/botrun-c/stress-test-results/20260121-162646/user-4-status.txt +0 -1
  456. package/botrun-c/stress-test-results/20260121-162646/user-4-timing.txt +0 -1
  457. package/botrun-c/stress-test-results/20260121-162646/user-4.json +0 -2
  458. package/botrun-c/stress-test-results/20260121-162646/user-5-status.txt +0 -1
  459. package/botrun-c/stress-test-results/20260121-162646/user-5-timing.txt +0 -1
  460. package/botrun-c/stress-test-results/20260121-162646/user-5.json +0 -2
  461. package/botrun-c/stress-test-results/20260121-162646/user-6-status.txt +0 -1
  462. package/botrun-c/stress-test-results/20260121-162646/user-6-timing.txt +0 -1
  463. package/botrun-c/stress-test-results/20260121-162646/user-6.json +0 -2
  464. package/botrun-c/stress-test-results/20260121-162646/user-7-status.txt +0 -1
  465. package/botrun-c/stress-test-results/20260121-162646/user-7-timing.txt +0 -1
  466. package/botrun-c/stress-test-results/20260121-162646/user-7.json +0 -2
  467. package/botrun-c/stress-test-results/20260121-162646/user-8-status.txt +0 -1
  468. package/botrun-c/stress-test-results/20260121-162646/user-8-timing.txt +0 -1
  469. package/botrun-c/stress-test-results/20260121-162646/user-8.json +0 -2
  470. package/botrun-c/stress-test-results/20260121-162646/user-9-status.txt +0 -1
  471. package/botrun-c/stress-test-results/20260121-162646/user-9-timing.txt +0 -1
  472. package/botrun-c/stress-test-results/20260121-162646/user-9.json +0 -2
  473. package/botrun-c/stress-test-results/20260121-163148/REPORT.html +0 -344
  474. package/botrun-c/stress-test-results/20260121-163148/REPORT.md +0 -93
  475. package/botrun-c/stress-test-results/20260121-163148/REPORT.pdf +0 -0
  476. package/botrun-c/stress-test-results/20260121-163148/config.json +0 -7
  477. package/botrun-c/stress-test-results/20260121-163148/summary.json +0 -26
  478. package/botrun-c/stress-test-results/20260121-163148/user-1-status.txt +0 -1
  479. package/botrun-c/stress-test-results/20260121-163148/user-1-timing.txt +0 -1
  480. package/botrun-c/stress-test-results/20260121-163148/user-1.json +0 -206
  481. package/botrun-c/stress-test-results/20260121-163148/user-10-status.txt +0 -1
  482. package/botrun-c/stress-test-results/20260121-163148/user-10-timing.txt +0 -1
  483. package/botrun-c/stress-test-results/20260121-163148/user-10.json +0 -110
  484. package/botrun-c/stress-test-results/20260121-163148/user-11-status.txt +0 -1
  485. package/botrun-c/stress-test-results/20260121-163148/user-11-timing.txt +0 -1
  486. package/botrun-c/stress-test-results/20260121-163148/user-11.json +0 -104
  487. package/botrun-c/stress-test-results/20260121-163148/user-12-status.txt +0 -1
  488. package/botrun-c/stress-test-results/20260121-163148/user-12-timing.txt +0 -1
  489. package/botrun-c/stress-test-results/20260121-163148/user-12.json +0 -98
  490. package/botrun-c/stress-test-results/20260121-163148/user-13-status.txt +0 -1
  491. package/botrun-c/stress-test-results/20260121-163148/user-13-timing.txt +0 -1
  492. package/botrun-c/stress-test-results/20260121-163148/user-13.json +0 -68
  493. package/botrun-c/stress-test-results/20260121-163148/user-14-status.txt +0 -1
  494. package/botrun-c/stress-test-results/20260121-163148/user-14-timing.txt +0 -1
  495. package/botrun-c/stress-test-results/20260121-163148/user-14.json +0 -116
  496. package/botrun-c/stress-test-results/20260121-163148/user-15-status.txt +0 -1
  497. package/botrun-c/stress-test-results/20260121-163148/user-15-timing.txt +0 -1
  498. package/botrun-c/stress-test-results/20260121-163148/user-15.json +0 -131
  499. package/botrun-c/stress-test-results/20260121-163148/user-16-status.txt +0 -1
  500. package/botrun-c/stress-test-results/20260121-163148/user-16-timing.txt +0 -1
  501. package/botrun-c/stress-test-results/20260121-163148/user-16.json +0 -110
  502. package/botrun-c/stress-test-results/20260121-163148/user-17-status.txt +0 -1
  503. package/botrun-c/stress-test-results/20260121-163148/user-17-timing.txt +0 -1
  504. package/botrun-c/stress-test-results/20260121-163148/user-17.json +0 -116
  505. package/botrun-c/stress-test-results/20260121-163148/user-2-status.txt +0 -1
  506. package/botrun-c/stress-test-results/20260121-163148/user-2-timing.txt +0 -1
  507. package/botrun-c/stress-test-results/20260121-163148/user-2.json +0 -98
  508. package/botrun-c/stress-test-results/20260121-163148/user-3-status.txt +0 -1
  509. package/botrun-c/stress-test-results/20260121-163148/user-3-timing.txt +0 -1
  510. package/botrun-c/stress-test-results/20260121-163148/user-3.json +0 -62
  511. package/botrun-c/stress-test-results/20260121-163148/user-4-status.txt +0 -1
  512. package/botrun-c/stress-test-results/20260121-163148/user-4-timing.txt +0 -1
  513. package/botrun-c/stress-test-results/20260121-163148/user-4.json +0 -113
  514. package/botrun-c/stress-test-results/20260121-163148/user-5-status.txt +0 -1
  515. package/botrun-c/stress-test-results/20260121-163148/user-5-timing.txt +0 -1
  516. package/botrun-c/stress-test-results/20260121-163148/user-5.json +0 -83
  517. package/botrun-c/stress-test-results/20260121-163148/user-6-status.txt +0 -1
  518. package/botrun-c/stress-test-results/20260121-163148/user-6-timing.txt +0 -1
  519. package/botrun-c/stress-test-results/20260121-163148/user-6.json +0 -125
  520. package/botrun-c/stress-test-results/20260121-163148/user-7-status.txt +0 -1
  521. package/botrun-c/stress-test-results/20260121-163148/user-7-timing.txt +0 -1
  522. package/botrun-c/stress-test-results/20260121-163148/user-7.json +0 -62
  523. package/botrun-c/stress-test-results/20260121-163148/user-8-status.txt +0 -1
  524. package/botrun-c/stress-test-results/20260121-163148/user-8-timing.txt +0 -1
  525. package/botrun-c/stress-test-results/20260121-163148/user-8.json +0 -41
  526. package/botrun-c/stress-test-results/20260121-163148/user-9-status.txt +0 -1
  527. package/botrun-c/stress-test-results/20260121-163148/user-9-timing.txt +0 -1
  528. package/botrun-c/stress-test-results/20260121-163148/user-9.json +0 -53
  529. package/botrun-c/test-merge.md +0 -1
  530. package/botrun-c/version.txt +0 -1
  531. package/botrun-c/web/.version +0 -1
  532. package/botrun-c/web/ALLOW-PUBLIC-ACCESS.md +0 -57
  533. package/botrun-c/web/FINAL-SETUP-STEPS.md +0 -71
  534. package/botrun-c/web/FIREBASE-MANUAL-STEPS.md +0 -41
  535. package/botrun-c/web/QUICK-SETUP-HELPER.md +0 -79
  536. package/botrun-c/web/README.md +0 -162
  537. package/botrun-c/web/__tests__/image-extractor.test.ts +0 -147
  538. package/botrun-c/web/__tests__/useGitHub.test.ts +0 -245
  539. package/botrun-c/web/app/favicon.ico +0 -0
  540. package/botrun-c/web/app/globals.css +0 -215
  541. package/botrun-c/web/app/image-preview/page.tsx +0 -213
  542. package/botrun-c/web/app/layout.tsx +0 -46
  543. package/botrun-c/web/app/page.tsx +0 -45
  544. package/botrun-c/web/components/CapacitorProvider.tsx +0 -43
  545. package/botrun-c/web/components/ChatPage.tsx +0 -1736
  546. package/botrun-c/web/components/ConversationList.tsx +0 -237
  547. package/botrun-c/web/components/ConversationListItem.tsx +0 -121
  548. package/botrun-c/web/components/LoginPage.tsx +0 -212
  549. package/botrun-c/web/components/Providers.tsx +0 -12
  550. package/botrun-c/web/components/StatusBarProvider.tsx +0 -16
  551. package/botrun-c/web/components/attachment-preview.tsx +0 -193
  552. package/botrun-c/web/components/botrun-incubator/BotrunIncubator.tsx +0 -266
  553. package/botrun-c/web/components/botrun-incubator/index.ts +0 -1
  554. package/botrun-c/web/components/chat-input.tsx +0 -1251
  555. package/botrun-c/web/components/chat-message.tsx +0 -598
  556. package/botrun-c/web/components/drop-zone.tsx +0 -143
  557. package/botrun-c/web/components/gdrive/gdrive-add-dialog.tsx +0 -254
  558. package/botrun-c/web/components/gdrive/gdrive-drawer.tsx +0 -236
  559. package/botrun-c/web/components/gdrive/gdrive-selector.tsx +0 -226
  560. package/botrun-c/web/components/gdrive/index.ts +0 -7
  561. package/botrun-c/web/components/generated-image-card.tsx +0 -363
  562. package/botrun-c/web/components/github/GitHubConnect.tsx +0 -366
  563. package/botrun-c/web/components/github/index.ts +0 -2
  564. package/botrun-c/web/components/import-skill-dialog.tsx +0 -208
  565. package/botrun-c/web/components/scroll-to-bottom-button.tsx +0 -90
  566. package/botrun-c/web/components/share-skill-dialog.tsx +0 -175
  567. package/botrun-c/web/components/skills-editor.tsx +0 -443
  568. package/botrun-c/web/components/skills-manager-drawer.tsx +0 -586
  569. package/botrun-c/web/components/smart-button-group.tsx +0 -132
  570. package/botrun-c/web/config/smart-buttons.ts +0 -295
  571. package/botrun-c/web/config/welcome-messages.ts +0 -29
  572. package/botrun-c/web/contexts/AuthContext.tsx +0 -220
  573. package/botrun-c/web/hooks/use-toast.ts +0 -187
  574. package/botrun-c/web/hooks/useAppStoreUpdate.ts +0 -356
  575. package/botrun-c/web/hooks/useAppVersion.ts +0 -113
  576. package/botrun-c/web/hooks/useAttachments.ts +0 -269
  577. package/botrun-c/web/hooks/useAuthToken.ts +0 -59
  578. package/botrun-c/web/hooks/useAutoWelcome.ts +0 -89
  579. package/botrun-c/web/hooks/useCapacitorPlatform.ts +0 -113
  580. package/botrun-c/web/hooks/useCapawesomeLiveUpdate.ts +0 -149
  581. package/botrun-c/web/hooks/useClaudeModel.ts +0 -118
  582. package/botrun-c/web/hooks/useConversation.ts +0 -115
  583. package/botrun-c/web/hooks/useConversations.ts +0 -235
  584. package/botrun-c/web/hooks/useGdriveFolders.ts +0 -199
  585. package/botrun-c/web/hooks/useGdriveSync.ts +0 -107
  586. package/botrun-c/web/hooks/useGitHub.ts +0 -409
  587. package/botrun-c/web/hooks/useScrollToBottom.ts +0 -150
  588. package/botrun-c/web/hooks/useStatusBar.ts +0 -42
  589. package/botrun-c/web/hooks/useUserPlan.ts +0 -153
  590. package/botrun-c/web/lib/api-config.ts +0 -162
  591. package/botrun-c/web/lib/api-url.ts +0 -62
  592. package/botrun-c/web/lib/api.ts +0 -105
  593. package/botrun-c/web/lib/attachment-utils.ts +0 -168
  594. package/botrun-c/web/lib/build-version.ts +0 -11
  595. package/botrun-c/web/lib/clipboard-utils.ts +0 -199
  596. package/botrun-c/web/lib/constants.ts +0 -62
  597. package/botrun-c/web/lib/conversation-storage.ts +0 -324
  598. package/botrun-c/web/lib/firebase-capacitor.ts +0 -135
  599. package/botrun-c/web/lib/firebase.ts +0 -137
  600. package/botrun-c/web/lib/firestore-auth.ts +0 -61
  601. package/botrun-c/web/lib/firestore-auth.ts.migration-bak +0 -319
  602. package/botrun-c/web/lib/image-extractor.ts +0 -156
  603. package/botrun-c/web/lib/path-utils.ts +0 -48
  604. package/botrun-c/web/lib/rehype-del-to-mark.ts +0 -19
  605. package/botrun-c/web/lib/upload-service.ts +0 -326
  606. package/botrun-c/web/lib/utils.ts +0 -6
  607. package/botrun-c/web/next.config.js +0 -49
  608. package/botrun-c/web/package-lock.json +0 -6711
  609. package/botrun-c/web/package.json +0 -63
  610. package/botrun-c/web/postcss.config.js +0 -6
  611. package/botrun-c/web/public/apple_icon.png +0 -0
  612. package/botrun-c/web/public/google_icon.png +0 -0
  613. package/botrun-c/web/public/logo-48-small.png +0 -0
  614. package/botrun-c/web/public/logo-48.png +0 -0
  615. package/botrun-c/web/scripts/generate-version.js +0 -36
  616. package/botrun-c/web/scripts/update-build-version.js +0 -41
  617. package/botrun-c/web/tailwind.config.ts +0 -80
  618. package/botrun-c/web/test-welcome-message.mjs +0 -115
  619. package/botrun-c/web/tsconfig.json +0 -42
  620. package/botrun-c/web/types/agent.ts +0 -6
  621. package/botrun-c/web/types/attachment.ts +0 -39
  622. package/botrun-c/web/types/conversation.ts +0 -68
  623. package/botrun-c/web/types/flutter.d.ts +0 -6
  624. package/botrun-c/web/types/project.ts +0 -41
  625. package/botrun-c/web/types/skills.ts +0 -13
  626. package/botrun-c/web//350/250/272/346/226/267-Skills-/345/211/215/347/253/257/351/241/257/347/244/272/345/225/217/351/241/214.md +0 -83
  627. package/lib/writing/index.mjs +0 -5
  628. /package/{lib/core → modules/_core}/adapters/base.mjs +0 -0
  629. /package/{lib/core → modules/_core}/adapters/claude.mjs +0 -0
  630. /package/{lib/core → modules/_core}/adapters/gemini-api.mjs +0 -0
  631. /package/{lib/core → modules/_core}/adapters/gemini-shared.mjs +0 -0
  632. /package/{lib/core → modules/_core}/adapters/gemini-vertex.mjs +0 -0
  633. /package/{lib/core → modules/_core}/adapters/local.mjs +0 -0
  634. /package/{lib/core → modules/_core}/adapters/nchc.mjs +0 -0
  635. /package/{lib/core → modules/_core}/adapters/openai-shared.mjs +0 -0
  636. /package/{lib/core → modules/_core}/adapters/openrouter.mjs +0 -0
  637. /package/{lib/core → modules/_core}/ai-cache.mjs +0 -0
  638. /package/{lib/core → modules/_core}/ai-router.mjs +0 -0
  639. /package/{lib/core → modules/_core}/cli-utils.mjs +0 -0
  640. /package/{lib/core → modules/_core}/dag.mjs +0 -0
  641. /package/{lib/core → modules/_core}/db.mjs +0 -0
  642. /package/{lib/core → modules/_core}/env.mjs +0 -0
  643. /package/{lib/flows → modules/_core}/hatch-portal.mjs +0 -0
  644. /package/{lib/core → modules/_core}/llm.mjs +0 -0
  645. /package/{lib/flows → modules/_core}/opencode-agent.mjs +0 -0
  646. /package/{lib/core → modules/_core}/paths.mjs +0 -0
  647. /package/{lib/core → modules/_core}/proxy.mjs +0 -0
  648. /package/{lib/flows → modules/_core}/review-doc.mjs +0 -0
  649. /package/{lib → modules/_core}/tools/fs-tools.mjs +0 -0
  650. /package/{lib → modules/_core}/tools/index.mjs +0 -0
  651. /package/{lib/core → modules/_core}/watermelon.mjs +0 -0
  652. /package/{lib/ocr/index.mjs → modules/ocr/ocr-lib.mjs} +0 -0
  653. /package/{lib → modules}/portal/hatch.mjs +0 -0
  654. /package/{lib/portal/index.mjs → modules/portal/portal-lib.mjs} +0 -0
  655. /package/{lib → modules}/search/crawler.mjs +0 -0
  656. /package/{lib/prompt → modules/skill}/prompts/zero-framework/coding.md +0 -0
  657. /package/{lib/prompt → modules/skill}/prompts/zero-framework/fullstack.md +0 -0
  658. /package/{lib/prompt → modules/skill}/prompts/zero-framework/search.md +0 -0
  659. /package/{lib/prompt → modules/skill}/prompts/zero-framework/segment.md +0 -0
  660. /package/{lib/prompt → modules/skill}/prompts/zero-framework/slice.md +0 -0
  661. /package/{lib → modules}/writing/generators/nstc-generators.mjs +0 -0
  662. /package/{lib → modules}/writing/generators/nstc-top5.mjs +0 -0
  663. /package/{lib → modules}/writing/layouts/nstc-layout.mjs +0 -0
  664. /package/{lib → modules}/writing/renderer.mjs +0 -0
package/bin/bh.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // bin/bh.mjs — botrun-horse CLI 總入口(路由分派)
3
- // 多專案架構:lib 放腦、projects 放料、bin/commands/ 放各指令群組
3
+ // 所有指令模組由 modules/*/index.mjs 自動註冊
4
4
  //
5
5
  // 用法:
6
6
  // node bin/bh.mjs <指令群組> [子指令] [選項]
@@ -8,11 +8,14 @@
8
8
  //
9
9
  // 所有指令皆支援 --project=<名稱>、--format=json、stdin pipe、--quiet、--print0
10
10
 
11
- import { setupHttpProxy } from '../lib/core/proxy.mjs';
11
+ import { setupHttpProxy } from '../modules/_core/proxy.mjs';
12
12
  setupHttpProxy(); // 必須在所有 fetch 呼叫之前執行(含 @google/genai、Anthropic SDK)
13
13
 
14
- import { parseArgs, VERSION } from '../lib/core/cli-utils.mjs';
15
- import { COMMANDS } from './commands/schema.mjs';
14
+ import { parseArgs, VERSION } from '../modules/_core/cli-utils.mjs';
15
+ import { discoverModules, collectSchemas } from '../modules/discover.mjs';
16
+
17
+ const _modules = await discoverModules();
18
+ const COMMANDS = collectSchemas(_modules);
16
19
 
17
20
  const { command, subcommand, flags, positionals } = parseArgs(process.argv);
18
21
 
@@ -21,178 +24,42 @@ if (flags.version || command === '--version' || command === '-V') {
21
24
  process.stdout.write(`${VERSION}\n`); process.exit(0);
22
25
  }
23
26
 
24
- // ===== Help 快速路由 =====
25
- if (flags.help && !command) {
27
+ // ===== Help =====
28
+ if (!command || command === 'help' || command === '--help' || command === '-h') {
26
29
  const { showHelp } = await import('./commands/help.mjs');
27
- showHelp(flags); process.exit(0);
30
+ showHelp(flags, COMMANDS); process.exit(0);
28
31
  }
29
- if (flags.help && command) {
32
+ if (flags.help) {
30
33
  const { showCommandHelp } = await import('./commands/help.mjs');
31
- showCommandHelp(command); process.exit(0);
34
+ showCommandHelp(command, COMMANDS); process.exit(0);
32
35
  }
33
36
 
34
- // ===== 指令路由 =====
35
- switch (command) {
36
- case 'doc': {
37
- const { cmdDocSplit, cmdDocText, cmdDocIngest } = await import('./commands/doc.mjs');
38
- switch (subcommand) {
39
- case 'split': await cmdDocSplit(positionals, flags); break;
40
- case 'text': await cmdDocText(positionals, flags); break;
41
- case 'ingest': await cmdDocIngest(positionals, flags); break;
42
- default: {
43
- const { showCommandHelp } = await import('./commands/help.mjs');
44
- if (!subcommand) showCommandHelp('doc');
45
- else { process.stderr.write(`doc: 未知子指令 ${subcommand}\n`); process.exit(1); }
46
- }
47
- }
48
- break;
49
- }
50
-
51
- case 'writing': {
52
- const { cmdWritingGenerate } = await import('./commands/writing.mjs');
53
- switch (subcommand) {
54
- case 'generate': await cmdWritingGenerate(flags); break;
55
- default: {
56
- const { showCommandHelp } = await import('./commands/help.mjs');
57
- if (!subcommand) showCommandHelp('writing');
58
- else { process.stderr.write(`writing: 未知子指令 ${subcommand}\n`); process.exit(1); }
59
- }
60
- }
61
- break;
62
- }
63
-
64
- case 'gemini': {
65
- const { cmdGeminiAsk } = await import('./commands/gemini.mjs');
66
- switch (subcommand) {
67
- case 'ask': await cmdGeminiAsk(positionals, flags); break;
68
- default: {
69
- const { showCommandHelp } = await import('./commands/help.mjs');
70
- if (!subcommand) showCommandHelp('gemini');
71
- else { process.stderr.write(`gemini: 未知子指令 ${subcommand}\n`); process.exit(1); }
72
- }
73
- }
74
- break;
75
- }
76
-
77
- case 'nchc': {
78
- const { cmdNchcAsk, cmdNchcAgent, cmdNchcCode, cmdNchcModels } = await import('./commands/nchc.mjs');
79
- switch (subcommand) {
80
- case 'ask': await cmdNchcAsk(positionals, flags); break;
81
- case 'agent': await cmdNchcAgent(positionals, flags); break;
82
- case 'code': await cmdNchcCode(positionals, flags); break;
83
- case 'models': cmdNchcModels(flags); break;
84
- default: {
85
- const { showCommandHelp } = await import('./commands/help.mjs');
86
- if (!subcommand) showCommandHelp('nchc');
87
- else { process.stderr.write(`nchc: 未知子指令 ${subcommand}\n`); process.exit(1); }
88
- }
89
- }
90
- break;
91
- }
92
-
93
- case 'openrouter': {
94
- const { cmdOpenrouterAsk, cmdOpenrouterModels } = await import('./commands/openrouter.mjs');
95
- switch (subcommand) {
96
- case 'ask': await cmdOpenrouterAsk(positionals, flags); break;
97
- case 'models': cmdOpenrouterModels(flags); break;
98
- default: {
99
- const { showCommandHelp } = await import('./commands/help.mjs');
100
- if (!subcommand) showCommandHelp('openrouter');
101
- else { process.stderr.write(`openrouter: 未知子指令 ${subcommand}\n`); process.exit(1); }
102
- }
103
- }
104
- break;
105
- }
106
-
107
- case 'legal': {
108
- const { cmdLegalAsk, cmdLegalCacheList, cmdLegalCacheStats } = await import('./commands/legal.mjs');
109
- switch (subcommand) {
110
- case 'ask': await cmdLegalAsk(positionals, flags); break;
111
- case 'cache': {
112
- // legal cache {list|stats}
113
- const cacheSubcmd = positionals[0];
114
- switch (cacheSubcmd) {
115
- case 'list': await cmdLegalCacheList(flags); break;
116
- case 'stats': await cmdLegalCacheStats(flags); break;
117
- default: {
118
- process.stderr.write(`legal cache: 未知子指令 ${cacheSubcmd}(可用: list, stats)\n`);
119
- process.exit(1);
120
- }
121
- }
122
- break;
123
- }
124
- default: {
125
- const { showCommandHelp } = await import('./commands/help.mjs');
126
- if (!subcommand) showCommandHelp('legal');
127
- else { process.stderr.write(`legal: 未知子指令 ${subcommand}\n`); process.exit(1); }
128
- }
129
- }
130
- break;
131
- }
132
-
133
- case 'dag': {
134
- const { cmdDag } = await import('./commands/dag-cmd.mjs');
135
- await cmdDag(subcommand, flags);
136
- break;
137
- }
138
-
139
- case 'search': {
140
- const { cmdSearch } = await import('./commands/search.mjs');
141
- await cmdSearch(subcommand, positionals, flags);
142
- break;
143
- }
144
-
145
- case 'db': {
146
- const { cmdDb } = await import('./commands/db-cmd.mjs');
147
- await cmdDb(subcommand, flags);
148
- break;
149
- }
150
-
151
- case 'commands': {
152
- const format = flags.format || 'json';
153
- if (format === 'json') {
154
- process.stdout.write(JSON.stringify({
155
- _meta: { tool: 'bh', version: VERSION, description: 'botrun-horse 多專案文件處理系統' },
156
- commands: COMMANDS,
157
- }, null, 2) + '\n');
158
- } else {
159
- process.stdout.write(`botrun-horse v${VERSION} — 可用指令:\n\n`);
160
- for (const [name, cmd] of Object.entries(COMMANDS)) {
161
- const sqlite = cmd.requires_sqlite ? ' [需 --experimental-sqlite]' : '';
162
- process.stdout.write(` ${name.padEnd(12)} ${cmd.description}${sqlite}\n`);
163
- }
164
- process.stdout.write(`\n各指令皆支援 --help、--format=json、--project=<名稱>、--quiet、--print0\n`);
37
+ // ===== commands schema =====
38
+ if (command === 'commands') {
39
+ const format = flags.format || 'json';
40
+ if (format === 'json') {
41
+ process.stdout.write(JSON.stringify({
42
+ _meta: { tool: 'bh', version: VERSION, description: 'botrun-horse 多專案文件處理系統' },
43
+ commands: COMMANDS,
44
+ }, null, 2) + '\n');
45
+ } else {
46
+ process.stdout.write(`botrun-horse v${VERSION} 可用指令:\n\n`);
47
+ for (const [name, cmd] of Object.entries(COMMANDS)) {
48
+ const sqlite = cmd.requires_sqlite ? ' [需 --experimental-sqlite]' : '';
49
+ process.stdout.write(` ${name.padEnd(12)} ${cmd.description}${sqlite}\n`);
165
50
  }
166
- break;
167
- }
168
-
169
- case 'skill': {
170
- const { cmdSkill } = await import('./commands/skill.mjs');
171
- await cmdSkill(subcommand, positionals, flags);
172
- break;
173
- }
174
-
175
- case 'portal':
176
- process.stdout.write('portal 模組尚在開發中\n');
177
- break;
178
-
179
- case 'ocr':
180
- process.stdout.write('ocr 模組尚在開發中\n');
181
- break;
182
-
183
- case 'help':
184
- case '--help':
185
- case '-h':
186
- case undefined: {
187
- const { showHelp } = await import('./commands/help.mjs');
188
- showHelp(flags);
189
- break;
51
+ process.stdout.write(`\n各指令皆支援 --help、--format=json、--project=<名稱>、--quiet、--print0\n`);
190
52
  }
53
+ process.exit(0);
54
+ }
191
55
 
192
- default: {
193
- process.stderr.write(`未知指令: ${command}\n`);
194
- const { showHelp } = await import('./commands/help.mjs');
195
- showHelp();
196
- process.exit(1);
197
- }
56
+ // ===== 模組自動路由 =====
57
+ const mod = _modules.get(command);
58
+ if (mod) {
59
+ await mod.handler(subcommand, positionals, flags);
60
+ } else {
61
+ process.stderr.write(`未知指令: ${command}\n`);
62
+ const { showHelp } = await import('./commands/help.mjs');
63
+ showHelp(flags, COMMANDS);
64
+ process.exit(1);
198
65
  }
@@ -1,8 +1,7 @@
1
1
  // bin/commands/help.mjs — 說明輸出(showHelp / showCommandHelp)
2
- import { parseArgs, VERSION } from '../../lib/core/cli-utils.mjs';
3
- import { COMMANDS } from './schema.mjs';
2
+ import { parseArgs, VERSION } from '../../modules/_core/cli-utils.mjs';
4
3
 
5
- export function showCommandHelp(cmdName) {
4
+ export function showCommandHelp(cmdName, COMMANDS = {}) {
6
5
  const cmd = COMMANDS[cmdName];
7
6
  if (!cmd) return;
8
7
 
@@ -20,7 +19,7 @@ export function showCommandHelp(cmdName) {
20
19
  lines.push('');
21
20
  }
22
21
  lines.push('用法:');
23
- const prefix = cmd.requires_sqlite ? 'node --experimental-sqlite bin/bh.mjs' : 'node bin/bh.mjs';
22
+ const prefix = cmd.requires_sqlite ? 'node --experimental-sqlite bin/bh.mjs' : 'bh';
24
23
  if (cmd.subcommands) {
25
24
  lines.push(` ${prefix} ${cmd.name} <子指令> [選項]`);
26
25
  lines.push('');
@@ -46,7 +45,7 @@ export function showCommandHelp(cmdName) {
46
45
  process.stdout.write(lines.join('\n') + '\n');
47
46
  }
48
47
 
49
- export function showHelp(flags = {}) {
48
+ export function showHelp(flags = {}, COMMANDS = {}) {
50
49
  if (flags.format === 'json') {
51
50
  process.stdout.write(JSON.stringify({
52
51
  _meta: { tool: 'bh', version: VERSION, description: 'botrun-horse 多專案文件處理系統' },
@@ -63,26 +62,27 @@ export function showHelp(flags = {}) {
63
62
  return;
64
63
  }
65
64
 
65
+ // 從 COMMANDS 動態產生指令列表
66
+ const cmdLines = [];
67
+ for (const [name, cmd] of Object.entries(COMMANDS)) {
68
+ const sqlite = cmd.requires_sqlite ? ' [需 --experimental-sqlite]' : '';
69
+ const subs = cmd.subcommands
70
+ ? Object.keys(cmd.subcommands).filter(s => !s.startsWith('(') && !s.startsWith('<')).join('|')
71
+ : '';
72
+ const suffix = subs ? ` (${subs})` : '';
73
+ cmdLines.push(` ${name.padEnd(20)} ${cmd.description}${suffix}${sqlite}`);
74
+ }
75
+
66
76
  process.stdout.write(`
67
77
  botrun-horse — 多專案文件處理系統 CLI v${VERSION}
68
78
  ===================================================
69
79
 
70
80
  用法:
71
- node bin/bh.mjs <指令群組> [子指令] [選項]
72
- node --experimental-sqlite bin/bh.mjs <指令> (SQLite 相關功能)
81
+ bh <指令群組> [子指令] [選項]
82
+ npx -y botrun-horse <指令群組> [子指令] [選項]
73
83
 
74
84
  指令群組:
75
- doc <子指令> 文件處理 (split|text|ingest)
76
- writing <子指令> 公文撰寫 (generate)
77
- gemini <子指令> Gemini AI 提問 (ask) — thinking + grounding + url context
78
- nchc <子指令> 國網 GenAI 提問 (ask|agent|code|models) — Mistral 系列
79
- dag <子指令> DAG 依賴追蹤 (init|status|ready|list)
80
- search <子指令> 全文檢索 (query) [需 --experimental-sqlite]
81
- db <子指令> 資料庫管理 (stats|docs|pages) [需 --experimental-sqlite]
82
- skill [關鍵字] 技能管理(無參數=全列出,帶關鍵字=模糊搜尋)
83
- portal <子指令> 智慧入口 (預留)
84
- ocr <子指令> OCR 辨識 (預留)
85
- commands 所有指令的結構化 JSON schema
85
+ ${cmdLines.join('\n')}
86
86
 
87
87
  共通選項:
88
88
  --help 顯示說明
@@ -92,18 +92,18 @@ botrun-horse — 多專案文件處理系統 CLI v${VERSION}
92
92
  --quiet 靜默模式(不輸出進度到 stderr,GNU parallel 友善)
93
93
  --print0 NUL 分隔路徑輸出(與 xargs -0 相容)
94
94
 
95
- 組合範例:
96
- # GNU parallel 批次處理
97
- find . -name "*.pdf" -print0 | xargs -0 -P 8 node bin/bh.mjs doc text --quiet
98
-
99
- # 文件處理(PDF + Office 全系列)
100
- node --experimental-sqlite bin/bh.mjs doc ingest --dir=pdfs/ --project=nstc
101
-
102
- # Gemini AI 提問
103
- node bin/bh.mjs gemini ask "量子糾纏的原理是什麼?"
104
- echo "解釋 AI" | node bin/bh.mjs gemini ask --format=json
95
+ 快速開始 — AI 繪圖:
96
+ 1. 設定環境變數: export GEMINI_API_KEY=你的金鑰
97
+ (到 https://aistudio.google.com/apikey 申請)
98
+ 2. 生圖: bh imagen generate "一隻貓坐在月亮上"
99
+ 3. 進階: bh imagen generate "科幻城市" --size=2K --aspect=16:9
105
100
 
106
- # AI/LLM schema 探索
107
- node bin/bh.mjs commands --format=json | jq 'keys'
101
+ 更多範例:
102
+ bh imagen generate "logo 設計" --output=logo.png
103
+ echo "水彩風格的台北101" | bh imagen generate
104
+ bh imagen edit photo.png "把背景換成日落海灘"
105
+ bh imagen serve --port=3000
106
+ bh gemini ask "量子糾纏的原理是什麼?"
107
+ bh commands --format=json | jq 'keys'
108
108
  `);
109
109
  }
@@ -1,7 +1,7 @@
1
1
  // lib/flows/draft-writing.mjs — 公文撰寫業務流程
2
2
  // 串接:config → DAG → writing/generate → 更新狀態
3
3
 
4
- import { loadDag, initState, saveState, loadState } from '../core/dag.mjs';
4
+ import { loadDag, initState, saveState, loadState } from './dag.mjs';
5
5
  import { generateAll } from '../writing/generate.mjs';
6
6
 
7
7
  /**
@@ -2,7 +2,7 @@
2
2
  // 職責: 組裝 adapter + 格式化輸出 + 效能測量
3
3
  // 原則: KISS — 流程越簡單越好,複雜邏輯在 adapter
4
4
 
5
- import { createLLM } from '../core/llm.mjs';
5
+ import { createLLM } from './llm.mjs';
6
6
 
7
7
  /**
8
8
  * 取得臺灣當前時間字串,自動注入 system prompt
@@ -15,10 +15,10 @@
15
15
  // { question, fromCache, cacheId, tags, step1Laws, step2Answer, sources,
16
16
  // model, routerDecision, perf }
17
17
 
18
- import { createLLM } from '../core/llm.mjs';
19
- import { AiCache } from '../core/ai-cache.mjs';
20
- import { AiRouter } from '../core/ai-router.mjs';
21
- import { dbPath as resolveDbPath } from '../core/paths.mjs';
18
+ import { createLLM } from './llm.mjs';
19
+ import { AiCache } from './ai-cache.mjs';
20
+ import { AiRouter } from './ai-router.mjs';
21
+ import { dbPath as resolveDbPath } from './paths.mjs';
22
22
 
23
23
  // ── 合併提示詞(單次 request 完成搜尋 + 分析) ─────────────────────────────
24
24
 
@@ -43,7 +43,7 @@ export {
43
43
  CODING_SYSTEM_PROMPT,
44
44
  executeTool,
45
45
  executeCodeTool,
46
- } from '../tools/fs-tools.mjs';
46
+ } from './tools/fs-tools.mjs';
47
47
 
48
48
  import {
49
49
  BUILT_IN_TOOLS,
@@ -52,7 +52,7 @@ import {
52
52
  CODING_SYSTEM_PROMPT,
53
53
  executeTool,
54
54
  executeCodeTool,
55
- } from '../tools/fs-tools.mjs';
55
+ } from './tools/fs-tools.mjs';
56
56
 
57
57
  // ══════════════════════════════════════════════════════════════════════════
58
58
  // NchcAgent — 通用代理(唯讀工具)
@@ -2,7 +2,7 @@
2
2
  // 職責: 組裝 adapter + 格式化輸出
3
3
  // 原則: KISS — 流程越簡單越好,複雜邏輯在 adapter
4
4
 
5
- import { createLLM } from '../core/llm.mjs';
5
+ import { createLLM } from './llm.mjs';
6
6
 
7
7
  /**
8
8
  * 執行 OpenRouter 提問流程(非串流)
@@ -1,5 +1,5 @@
1
1
  // bin/commands/dag-cmd.mjs — dag 指令群組(init / status / ready / list)
2
- import { timer, jsonOut, emitError } from '../../lib/core/cli-utils.mjs';
2
+ import { timer, jsonOut, emitError } from '../_core/cli-utils.mjs';
3
3
 
4
4
  export async function cmdDag(subcommand, flags) {
5
5
  if (!subcommand) {
@@ -9,7 +9,7 @@ export async function cmdDag(subcommand, flags) {
9
9
  const {
10
10
  loadDag, loadState, saveState, initState,
11
11
  getReady, formatStatus,
12
- } = await import('../../lib/core/dag.mjs');
12
+ } = await import('../_core/dag.mjs');
13
13
  const format = flags.format || 'text';
14
14
  const project = flags.project || 'nstc';
15
15
 
@@ -0,0 +1,30 @@
1
+ // modules/dag/index.mjs — DAG 依賴追蹤模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'dag';
5
+
6
+ export const schema = {
7
+ name: 'dag',
8
+ description: 'DAG 依賴追蹤管理',
9
+ requires_sqlite: false,
10
+ subcommands: {
11
+ init: '初始化 DAG 狀態',
12
+ status: '顯示整體 DAG 進度摘要',
13
+ ready: '列出目前可執行的任務',
14
+ list: '列出所有任務及其狀態',
15
+ },
16
+ options: {
17
+ '--project=<名稱>': { type: 'string', default: 'nstc', description: '專案名稱' },
18
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式' },
19
+ },
20
+ examples: [
21
+ 'bh dag init --project=nstc',
22
+ 'bh dag status --project=nstc',
23
+ 'bh dag ready --format=json --project=nstc',
24
+ ],
25
+ };
26
+
27
+ export async function handler(subcommand, positionals, flags) {
28
+ const { cmdDag } = await import('./command.mjs');
29
+ await cmdDag(subcommand, flags);
30
+ }
@@ -1,13 +1,13 @@
1
1
  // bin/commands/db-cmd.mjs — db 指令群組(stats / docs / pages)
2
- import * as paths from '../../lib/core/paths.mjs';
3
- import { timer, jsonOut, emitError } from '../../lib/core/cli-utils.mjs';
2
+ import * as paths from '../_core/paths.mjs';
3
+ import { timer, jsonOut, emitError } from '../_core/cli-utils.mjs';
4
4
 
5
5
  export async function cmdDb(subcommand, flags) {
6
6
  if (!subcommand) {
7
7
  const { showCommandHelp } = await import('./help.mjs');
8
8
  showCommandHelp('db'); return;
9
9
  }
10
- const { DocStore } = await import('../../lib/core/db.mjs');
10
+ const { DocStore } = await import('../_core/db.mjs');
11
11
  const project = flags.project || 'nstc';
12
12
  const dbPathVal = flags.db || paths.dbPath(project);
13
13
  const format = flags.format || 'text';
@@ -0,0 +1,26 @@
1
+ // modules/db/index.mjs — SQLite 資料庫管理模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'db';
5
+
6
+ export const schema = {
7
+ name: 'db',
8
+ description: 'SQLite 資料庫管理',
9
+ requires_sqlite: true,
10
+ subcommands: {
11
+ stats: '顯示 DB 統計',
12
+ docs: '列出所有文件 metadata',
13
+ 'pages <doc_id>': '列出指定文件的所有頁面',
14
+ },
15
+ options: {
16
+ '--project=<名稱>': { type: 'string', default: 'nstc', description: '專案名稱' },
17
+ '--db=<DB路徑>': { type: 'string', description: 'SQLite 路徑' },
18
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式' },
19
+ },
20
+ examples: ['bh db stats --project=nstc', 'bh db docs --format=json --project=nstc'],
21
+ };
22
+
23
+ export async function handler(subcommand, positionals, flags) {
24
+ const { cmdDb } = await import('./command.mjs');
25
+ await cmdDb(subcommand, flags);
26
+ }
@@ -0,0 +1,43 @@
1
+ // modules/discover.mjs — 自動掃描 modules/*/index.mjs,回傳模組註冊表
2
+ // Convention over Configuration:放了 index.mjs 就自動生效
3
+
4
+ import fs from 'fs';
5
+ import path from 'path';
6
+ import { fileURLToPath } from 'url';
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+
10
+ /**
11
+ * 掃描 modules/ 下所有子目錄的 index.mjs,載入模組定義
12
+ * @returns {Promise<Map<string, { name, schema, handler }>>}
13
+ */
14
+ export async function discoverModules() {
15
+ const modules = new Map();
16
+ const entries = fs.readdirSync(__dirname, { withFileTypes: true });
17
+
18
+ for (const entry of entries) {
19
+ if (!entry.isDirectory() || entry.name.startsWith('_')) continue;
20
+ const indexPath = path.join(__dirname, entry.name, 'index.mjs');
21
+ if (!fs.existsSync(indexPath)) continue;
22
+
23
+ const mod = await import(indexPath);
24
+ if (mod.name && mod.handler) {
25
+ modules.set(mod.name, mod);
26
+ }
27
+ }
28
+
29
+ return modules;
30
+ }
31
+
32
+ /**
33
+ * 收集所有模組的 schema,回傳 { [name]: schema } 物件
34
+ * @param {Map} modules - discoverModules() 的結果
35
+ * @returns {object}
36
+ */
37
+ export function collectSchemas(modules) {
38
+ const schemas = {};
39
+ for (const [name, mod] of modules) {
40
+ if (mod.schema) schemas[name] = mod.schema;
41
+ }
42
+ return schemas;
43
+ }
@@ -1,15 +1,15 @@
1
1
  // bin/commands/doc.mjs — doc 指令群組(split / text / ingest)
2
2
  import path from 'path';
3
- import * as paths from '../../lib/core/paths.mjs';
3
+ import * as paths from '../_core/paths.mjs';
4
4
  import {
5
5
  resolveFiles, parallelBatch, timer, jsonOut, emitError,
6
- } from '../../lib/core/cli-utils.mjs';
6
+ } from '../_core/cli-utils.mjs';
7
7
 
8
8
  export async function cmdDocSplit(positionals, flags) {
9
9
  const elapsed = timer();
10
10
  const format = flags.format || 'text';
11
11
  const project = flags.project || 'nstc';
12
- const { splitPdf } = await import('../../lib/doc/split.mjs');
12
+ const { splitPdf } = await import('./split.mjs');
13
13
  const outdir = flags.outdir || path.join(paths.projectOutput(project), 'split');
14
14
  const concurrency = parseInt(flags.concurrency) || 5;
15
15
  const files = await resolveFiles(positionals, flags);
@@ -61,7 +61,7 @@ export async function cmdDocSplit(positionals, flags) {
61
61
  export async function cmdDocText(positionals, flags) {
62
62
  const elapsed = timer();
63
63
  const format = flags.format || 'text';
64
- const { extractAllPages, extractPage } = await import('../../lib/doc/pdf2text.mjs');
64
+ const { extractAllPages, extractPage } = await import('./pdf2text.mjs');
65
65
  const files = await resolveFiles(positionals, flags);
66
66
  const pageNum = flags.page ? parseInt(flags.page) : null;
67
67
  const concurrency = parseInt(flags.concurrency) || 5;
@@ -115,7 +115,7 @@ export async function cmdDocIngest(positionals, flags) {
115
115
  const elapsed = timer();
116
116
  const format = flags.format || 'text';
117
117
  const project = flags.project || 'nstc';
118
- const { ingestOne, ingestDir, ingestBatch } = await import('../../lib/doc/index.mjs');
118
+ const { ingestOne, ingestDir, ingestBatch } = await import('./ingest.mjs');
119
119
  const dbPathVal = flags.db || paths.dbPath(project);
120
120
  const concurrency = parseInt(flags.concurrency) || 5;
121
121
  const recursive = !!flags.recursive;
@@ -0,0 +1,55 @@
1
+ // modules/doc/index.mjs — 文件處理模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'doc';
5
+
6
+ export const schema = {
7
+ name: 'doc',
8
+ description: '文件處理(拆頁、轉文字、入庫)— 支援 PDF 與 Office 全系列',
9
+ requires_sqlite: false,
10
+ subcommands: {
11
+ split: '通用 PDF 拆頁(每頁輸出為獨立 PDF)',
12
+ text: 'PDF 轉純文字(保留頁碼與排版,不需先拆頁)',
13
+ ingest: 'PDF/Office 入庫流水線(轉文字 → SQLite FTS5)[需 --experimental-sqlite]',
14
+ },
15
+ options: {
16
+ '--project=<名稱>': { type: 'string', default: 'nstc', description: '專案名稱' },
17
+ '--dir=<路徑>': { type: 'string', description: '掃描單一目錄內所有文件' },
18
+ '--dirs=<路徑1,路徑2>': { type: 'string', description: '掃描多個目錄(逗號分隔)' },
19
+ '--outdir=<路徑>': { type: 'string', description: '拆頁輸出目錄(split 指令用)' },
20
+ '--split-pdf': { type: 'boolean', default: false, description: '[ingest] 同時拆頁成獨立 PDF' },
21
+ '--recursive': { type: 'boolean', default: false, description: '遞迴掃描子目錄' },
22
+ '--force': { type: 'boolean', default: false, description: '強制重新入庫(忽略斷點續作紀錄)' },
23
+ '--concurrency=N': { type: 'integer', default: 5, description: '平行處理數' },
24
+ '--quiet': { type: 'boolean', default: false, description: '靜默模式(不輸出進度到 stderr,GNU parallel 友善)' },
25
+ '--print0': { type: 'boolean', default: false, description: 'NUL 分隔路徑輸出(與 xargs -0 相容)' },
26
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式' },
27
+ },
28
+ examples: [
29
+ 'bh doc split file1.pdf file2.pdf --project=nstc',
30
+ 'bh doc text --dir=projects/nstc/output/pdfs',
31
+ 'node --experimental-sqlite bin/bh.mjs doc ingest --dir=projects/nstc/pdfs --project=nstc',
32
+ 'node --experimental-sqlite bin/bh.mjs doc ingest --dirs=pdfs/,docs/ --project=nstc --recursive',
33
+ 'node --experimental-sqlite bin/bh.mjs doc ingest file.docx report.xlsx --project=nstc',
34
+ 'node --experimental-sqlite bin/bh.mjs doc ingest --dir=pdfs/ --force --split-pdf --project=nstc',
35
+ 'ls pdfs/*.pdf | node --experimental-sqlite bin/bh.mjs doc ingest --project=nstc',
36
+ 'find . -name "*.pdf" -print0 | xargs -0 -P 4 node bin/bh.mjs doc text --quiet',
37
+ ],
38
+ };
39
+
40
+ export async function handler(subcommand, positionals, flags) {
41
+ const { cmdDocSplit, cmdDocText, cmdDocIngest } = await import('./command.mjs');
42
+ switch (subcommand) {
43
+ case 'split': await cmdDocSplit(positionals, flags); break;
44
+ case 'text': await cmdDocText(positionals, flags); break;
45
+ case 'ingest': await cmdDocIngest(positionals, flags); break;
46
+ default:
47
+ if (!subcommand) {
48
+ const { showCommandHelp } = await import('../../bin/commands/help.mjs');
49
+ showCommandHelp('doc', { doc: schema });
50
+ } else {
51
+ process.stderr.write(`doc: 未知子指令 ${subcommand}\n`);
52
+ process.exit(1);
53
+ }
54
+ }
55
+ }
@@ -21,7 +21,7 @@ import path from 'path';
21
21
  import { splitPdf, getPdfPageCount } from './split.mjs';
22
22
  import { extractAllPages } from './pdf2text.mjs';
23
23
  import { extractOfficePages, extractTextFilePages, isOfficeFile, isTextFile } from './office2text.mjs';
24
- import { DocStore } from '../core/db.mjs';
24
+ import { DocStore } from '../_core/db.mjs';
25
25
 
26
26
  // ─────────────────────────────────────────────────────────
27
27
  // 核心入庫函式
@@ -24,7 +24,7 @@ import { promisify } from 'node:util';
24
24
  import { mkdtemp, rm, readdir, readFile } from 'node:fs/promises';
25
25
  import os from 'node:os';
26
26
  import path from 'node:path';
27
- import { toolBin } from '../core/paths.mjs';
27
+ import { toolBin } from '../_core/paths.mjs';
28
28
 
29
29
  const execFileAsync = promisify(execFile);
30
30