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
@@ -0,0 +1,56 @@
1
+ // modules/legal/index.mjs — 法律查詢模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'legal';
5
+
6
+ export const schema = {
7
+ name: 'legal',
8
+ description: '法律查詢(AI Router + 兩步驟提示工程 + SQLite 快取)[需 --experimental-sqlite]',
9
+ requires_sqlite: true,
10
+ subcommands: {
11
+ ask: '法律問題查詢(Mistral 14B 路由 → 快取命中或 Gemini Pro 搜尋法規 → 法律分析)',
12
+ cache: '快取管理(list: 列出快取, stats: 統計)',
13
+ },
14
+ options: {
15
+ '--project=<名稱>': { type: 'string', default: 'legal-cache', description: '專案名稱(決定 SQLite 路徑)' },
16
+ '--skip-cache': { type: 'boolean', default: false, description: '強制跳過快取,直接呼叫大模型' },
17
+ '--skip-save': { type: 'boolean', default: false, description: '不將結果存入快取' },
18
+ '--limit=N': { type: 'integer', default: 20, description: '[cache list] 顯示筆數上限' },
19
+ '--quiet': { type: 'boolean', default: false, description: '靜默模式(不輸出進度到 stderr)' },
20
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式' },
21
+ },
22
+ examples: [
23
+ 'node --experimental-sqlite bin/bh.mjs legal ask "房東可以隨意趕走我嗎?"',
24
+ 'node --experimental-sqlite bin/bh.mjs legal ask "勞工被無故解雇有哪些保護?" --format=json',
25
+ 'echo "我的房東說要漲租金,我有辦法拒絕嗎?" | node --experimental-sqlite bin/bh.mjs legal ask',
26
+ 'node --experimental-sqlite bin/bh.mjs legal cache list --project=legal-cache',
27
+ 'node --experimental-sqlite bin/bh.mjs legal cache stats',
28
+ 'node --experimental-sqlite bin/bh.mjs legal ask "問題" --skip-cache --project=legal-cache',
29
+ ],
30
+ };
31
+
32
+ export async function handler(subcommand, positionals, flags) {
33
+ const { cmdLegalAsk, cmdLegalCacheList, cmdLegalCacheStats } = await import('./command.mjs');
34
+ switch (subcommand) {
35
+ case 'ask': await cmdLegalAsk(positionals, flags); break;
36
+ case 'cache': {
37
+ const cacheSubcmd = positionals[0];
38
+ switch (cacheSubcmd) {
39
+ case 'list': await cmdLegalCacheList(flags); break;
40
+ case 'stats': await cmdLegalCacheStats(flags); break;
41
+ default:
42
+ process.stderr.write(`legal cache: 未知子指令 ${cacheSubcmd}(可用: list, stats)\n`);
43
+ process.exit(1);
44
+ }
45
+ break;
46
+ }
47
+ default:
48
+ if (!subcommand) {
49
+ const { showCommandHelp } = await import('../../bin/commands/help.mjs');
50
+ showCommandHelp('legal', { legal: schema });
51
+ } else {
52
+ process.stderr.write(`legal: 未知子指令 ${subcommand}\n`);
53
+ process.exit(1);
54
+ }
55
+ }
56
+ }
@@ -1,5 +1,5 @@
1
1
  // bin/commands/nchc.mjs — nchc 指令群組(ask / agent / code / models)
2
- import { timer, emitError, readStdin } from '../../lib/core/cli-utils.mjs';
2
+ import { timer, emitError, readStdin } from '../_core/cli-utils.mjs';
3
3
 
4
4
  export async function cmdNchcAsk(positionals, flags) {
5
5
  const elapsed = timer();
@@ -12,7 +12,7 @@ export async function cmdNchcAsk(positionals, flags) {
12
12
  process.exit(1);
13
13
  }
14
14
 
15
- const { NchcAdapter } = await import('../../lib/core/adapters/nchc.mjs');
15
+ const { NchcAdapter } = await import('../_core/adapters/nchc.mjs');
16
16
  const adapter = new NchcAdapter({
17
17
  model: flags.model || 'Mistral-Large-3-675B-Instruct-2512',
18
18
  maxTokens: parseInt(flags['max-tokens']) || 8192,
@@ -89,7 +89,7 @@ export async function cmdNchcAgent(positionals, flags) {
89
89
  process.exit(1);
90
90
  }
91
91
 
92
- const { NchcAgent } = await import('../../lib/flows/openai-agent.mjs');
92
+ const { NchcAgent } = await import('../_core/openai-agent.mjs');
93
93
  const agent = new NchcAgent({
94
94
  model: flags.model || 'Mistral-Large-3-675B-Instruct-2512',
95
95
  maxTurns: parseInt(flags['max-turns']) || 20,
@@ -149,7 +149,7 @@ export async function cmdNchcCode(positionals, flags) {
149
149
  process.exit(1);
150
150
  }
151
151
 
152
- const { OpencodeAgent } = await import('../../lib/flows/opencode-agent.mjs');
152
+ const { OpencodeAgent } = await import('../_core/opencode-agent.mjs');
153
153
  const agent = new OpencodeAgent({
154
154
  modelID: flags.model || 'Mistral-Large-3-675B-Instruct-2512',
155
155
  serverUrl: flags['server-url'] || undefined,
@@ -0,0 +1,48 @@
1
+ // modules/nchc/index.mjs — 國網 GenAI 提問模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'nchc';
5
+
6
+ export const schema = {
7
+ name: 'nchc',
8
+ description: '國網 GenAI AI 提問(Mistral 系列,OpenAI 相容介面)',
9
+ requires_sqlite: false,
10
+ subcommands: {
11
+ ask: '向國網 GenAI 提問(支援串流輸出)',
12
+ agent: '啟動 Agentic AI 代理(工具呼叫、多輪對話)',
13
+ code: '啟動 Agentic Coding 代理(@opencode-ai/sdk + 675B,需 opencode CLI)',
14
+ models: '列出可用模型',
15
+ },
16
+ options: {
17
+ '--model=<名稱>': { type: 'string', default: 'Mistral-Large-3-675B-Instruct-2512', description: '模型名稱' },
18
+ '--system-prompt=<文字>': { type: 'string', default: '', description: '系統提示詞' },
19
+ '--max-tokens=N': { type: 'integer', default: 8192, description: '最大輸出 tokens' },
20
+ '--temperature=N': { type: 'number', default: 0.7, description: '溫度(0.0~1.0)' },
21
+ '--no-stream': { type: 'boolean', default: false, description: '停用串流' },
22
+ '--max-turns=N': { type: 'integer', default: 20, description: '[agent] 最大迴圈次數' },
23
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式' },
24
+ },
25
+ examples: [
26
+ 'bh nchc ask "台灣半導體產業分析"',
27
+ 'bh nchc agent "列出 lib/ 目錄下所有 .mjs 檔案並說明架構"',
28
+ 'bh nchc models',
29
+ ],
30
+ };
31
+
32
+ export async function handler(subcommand, positionals, flags) {
33
+ const { cmdNchcAsk, cmdNchcAgent, cmdNchcCode, cmdNchcModels } = await import('./command.mjs');
34
+ switch (subcommand) {
35
+ case 'ask': await cmdNchcAsk(positionals, flags); break;
36
+ case 'agent': await cmdNchcAgent(positionals, flags); break;
37
+ case 'code': await cmdNchcCode(positionals, flags); break;
38
+ case 'models': cmdNchcModels(flags); break;
39
+ default:
40
+ if (!subcommand) {
41
+ const { showCommandHelp } = await import('../../bin/commands/help.mjs');
42
+ showCommandHelp('nchc', { nchc: schema });
43
+ } else {
44
+ process.stderr.write(`nchc: 未知子指令 ${subcommand}\n`);
45
+ process.exit(1);
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,17 @@
1
+ // modules/ocr/index.mjs — OCR 辨識模組自動註冊介面(預留)
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'ocr';
5
+
6
+ export const schema = {
7
+ name: 'ocr',
8
+ description: 'OCR 辨識(預留)',
9
+ requires_sqlite: false,
10
+ subcommands: { scan: '掃描文件' },
11
+ options: {},
12
+ examples: ['bh ocr scan file.pdf'],
13
+ };
14
+
15
+ export async function handler(subcommand, positionals, flags) {
16
+ process.stdout.write('ocr 模組尚在開發中\n');
17
+ }
@@ -6,7 +6,7 @@
6
6
  // - Agentic AI 友善:--format=json 回傳結構化 LlmResponse(含 sources、usage、perf)
7
7
  // - KISS:指令層只做 I/O 與格式化,業務邏輯委派至 adapter
8
8
 
9
- import { timer, emitError, readStdin } from '../../lib/core/cli-utils.mjs';
9
+ import { timer, emitError, readStdin } from '../_core/cli-utils.mjs';
10
10
 
11
11
  /**
12
12
  * openrouter ask — 向 OpenRouter 任意模型提問
@@ -28,7 +28,7 @@ export async function cmdOpenrouterAsk(positionals, flags) {
28
28
  }
29
29
 
30
30
  // ── 組裝 adapter(直接使用,不經 createLLM factory,保留完整選項控制)──
31
- const { OpenRouterAdapter } = await import('../../lib/core/adapters/openrouter.mjs');
31
+ const { OpenRouterAdapter } = await import('../_core/adapters/openrouter.mjs');
32
32
  const adapter = new OpenRouterAdapter({
33
33
  model: flags.model || undefined, // 預設由 adapter DEFAULTS 決定
34
34
  maxTokens: flags['max-tokens'] ? parseInt(flags['max-tokens']) : undefined,
@@ -47,10 +47,10 @@ export async function cmdOpenrouterAsk(positionals, flags) {
47
47
  // ── 非串流模式:等待完整回應 ──
48
48
  const result = await adapter.generateContent(askParams);
49
49
  if (format === 'json') {
50
- const { formatJsonOutput } = await import('../../lib/flows/openrouter-ask.mjs');
50
+ const { formatJsonOutput } = await import('../_core/openrouter-ask.mjs');
51
51
  process.stdout.write(formatJsonOutput(result, adapter.model, elapsed()) + '\n');
52
52
  } else {
53
- const { formatTextOutput } = await import('../../lib/flows/openrouter-ask.mjs');
53
+ const { formatTextOutput } = await import('../_core/openrouter-ask.mjs');
54
54
  process.stdout.write(formatTextOutput(result) + '\n');
55
55
  if (!flags.quiet) {
56
56
  const p = result.perf || {};
@@ -86,7 +86,7 @@ export async function cmdOpenrouterAsk(positionals, flags) {
86
86
  }
87
87
 
88
88
  if (format === 'json') {
89
- const { formatJsonOutput } = await import('../../lib/flows/openrouter-ask.mjs');
89
+ const { formatJsonOutput } = await import('../_core/openrouter-ask.mjs');
90
90
  process.stdout.write(formatJsonOutput(meta || {}, adapter.model, elapsed()) + '\n');
91
91
  } else {
92
92
  process.stdout.write('\n');
@@ -0,0 +1,49 @@
1
+ // modules/openrouter/index.mjs — OpenRouter AI 提問模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'openrouter';
5
+
6
+ export const schema = {
7
+ name: 'openrouter',
8
+ description: 'OpenRouter AI 提問(400+ 模型,支援網路搜尋)',
9
+ requires_sqlite: false,
10
+ subcommands: {
11
+ ask: '向 OpenRouter 任意模型提問(支援串流 + 網路搜尋)',
12
+ models: '列出常用模型(含網路搜尋支援說明)',
13
+ },
14
+ options: {
15
+ '--model=<名稱>': { type: 'string', default: 'openai/gpt-4o-mini', description: '模型名稱(任意 OpenRouter 模型 ID,可加 :online 後綴)' },
16
+ '--web-search': { type: 'boolean', default: false, description: '啟用網路搜尋(plugins: web,適用所有模型)' },
17
+ '--max-results=N': { type: 'integer', default: 5, description: '搜尋最大結果數(--web-search 時有效)' },
18
+ '--system-prompt=<文字>': { type: 'string', default: '', description: '系統提示詞' },
19
+ '--max-tokens=N': { type: 'integer', default: 8192, description: '最大輸出 tokens' },
20
+ '--temperature=N': { type: 'number', default: 0.7, description: '溫度(0.0~2.0)' },
21
+ '--no-stream': { type: 'boolean', default: false, description: '停用串流(等待完整回應)' },
22
+ '--quiet': { type: 'boolean', default: false, description: '靜默模式(不輸出進度到 stderr,GNU parallel 友善)' },
23
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式(json 含 sources、usage、perf,適合 Agentic AI)' },
24
+ },
25
+ examples: [
26
+ 'bh openrouter ask "台灣今日重要新聞" --web-search',
27
+ 'bh openrouter ask "分析 React vs Vue" --model=anthropic/claude-sonnet-4-6',
28
+ 'bh openrouter ask "最新 AI 研究" --model=perplexity/sonar-pro --format=json',
29
+ 'echo "解釋量子糾纏" | bh openrouter ask --model=openai/gpt-4o',
30
+ 'bh openrouter ask "整理今天新聞" --web-search --quiet --format=json | jq .text',
31
+ 'bh openrouter models',
32
+ ],
33
+ };
34
+
35
+ export async function handler(subcommand, positionals, flags) {
36
+ const { cmdOpenrouterAsk, cmdOpenrouterModels } = await import('./command.mjs');
37
+ switch (subcommand) {
38
+ case 'ask': await cmdOpenrouterAsk(positionals, flags); break;
39
+ case 'models': cmdOpenrouterModels(flags); break;
40
+ default:
41
+ if (!subcommand) {
42
+ const { showCommandHelp } = await import('../../bin/commands/help.mjs');
43
+ showCommandHelp('openrouter', { openrouter: schema });
44
+ } else {
45
+ process.stderr.write(`openrouter: 未知子指令 ${subcommand}\n`);
46
+ process.exit(1);
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,17 @@
1
+ // modules/portal/index.mjs — 智慧入口模組自動註冊介面(預留)
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'portal';
5
+
6
+ export const schema = {
7
+ name: 'portal',
8
+ description: '智慧入口(預留)',
9
+ requires_sqlite: false,
10
+ subcommands: { status: '顯示入口狀態' },
11
+ options: {},
12
+ examples: ['bh portal status'],
13
+ };
14
+
15
+ export async function handler(subcommand, positionals, flags) {
16
+ process.stdout.write('portal 模組尚在開發中\n');
17
+ }
@@ -1,12 +1,12 @@
1
1
  // bin/commands/search.mjs — search 指令群組(query)
2
- import * as paths from '../../lib/core/paths.mjs';
3
- import { timer, jsonOut, emitError, readStdin } from '../../lib/core/cli-utils.mjs';
2
+ import * as paths from '../_core/paths.mjs';
3
+ import { timer, jsonOut, emitError, readStdin } from '../_core/cli-utils.mjs';
4
4
 
5
5
  export async function cmdSearch(subcommand, positionals, flags) {
6
6
  const elapsed = timer();
7
7
  const format = flags.format || 'text';
8
8
  const project = flags.project || 'nstc';
9
- const { DocStore } = await import('../../lib/core/db.mjs');
9
+ const { DocStore } = await import('../_core/db.mjs');
10
10
  const dbPathVal = flags.db || paths.dbPath(project);
11
11
  const limit = flags.limit ? parseInt(flags.limit) : null;
12
12
 
@@ -0,0 +1,23 @@
1
+ // modules/search/index.mjs — FTS5 全文檢索模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'search';
5
+
6
+ export const schema = {
7
+ name: 'search',
8
+ description: 'FTS5 trigram 全文檢索',
9
+ requires_sqlite: true,
10
+ subcommands: { query: '搜尋關鍵字' },
11
+ options: {
12
+ '--project=<名稱>': { type: 'string', default: 'nstc', description: '專案名稱' },
13
+ '--db=<DB路徑>': { type: 'string', description: 'SQLite 資料庫路徑' },
14
+ '--limit=N': { type: 'integer', description: '限制結果數量' },
15
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式' },
16
+ },
17
+ examples: ['bh search query "研究計畫" --project=nstc'],
18
+ };
19
+
20
+ export async function handler(subcommand, positionals, flags) {
21
+ const { cmdSearch } = await import('./command.mjs');
22
+ await cmdSearch(subcommand, positionals, flags);
23
+ }
@@ -1,7 +1,7 @@
1
1
  // lib/search/index.mjs — 搜尋模組入口
2
2
  // 整合 FTS5 全文檢索與聯網搜尋
3
3
 
4
- export { DocStore } from '../core/db.mjs';
4
+ export { DocStore } from '../_core/db.mjs';
5
5
  export { crawl } from './crawler.mjs';
6
6
 
7
7
  // TODO: 實作統一搜尋介面
@@ -1,7 +1,7 @@
1
- // bin/commands/skill.mjs — skill 指令群組(list / show / search)
1
+ // modules/skill/command.mjs — skill 指令群組(list / show / search)
2
2
  // 無參數 → 列出全部技能
3
3
  // 不認識的子指令 → 當關鍵字做全文模糊搜尋
4
- import { timer, jsonOut, emitError, logProgress } from '../../lib/core/cli-utils.mjs';
4
+ import { timer, jsonOut, emitError, logProgress, VERSION } from '../_core/cli-utils.mjs';
5
5
 
6
6
  /**
7
7
  * skill 指令主路由
@@ -20,7 +20,7 @@ export async function cmdSkill(subcommand, positionals, flags) {
20
20
  // --help(可能被 parseArgs 當成 subcommand)
21
21
  if (!subcommand || subcommand === '--help' || subcommand === '-h') {
22
22
  if (subcommand === '--help' || subcommand === '-h' || flags.help) {
23
- const { showCommandHelp } = await import('./help.mjs');
23
+ const { showCommandHelp } = await import('../../bin/commands/help.mjs');
24
24
  showCommandHelp('skill'); return;
25
25
  }
26
26
  // 無參數 → 列出全部
@@ -38,14 +38,50 @@ export async function cmdSkill(subcommand, positionals, flags) {
38
38
  }
39
39
  }
40
40
 
41
- /** list — 列出所有技能(依系列分組) */
41
+ /**
42
+ * 簡易 semver 比較:a > b 回傳 1,a < b 回傳 -1,相等回傳 0
43
+ */
44
+ function semverCompare(a, b) {
45
+ const pa = a.split('.').map(Number);
46
+ const pb = b.split('.').map(Number);
47
+ for (let i = 0; i < 3; i++) {
48
+ if ((pa[i] || 0) > (pb[i] || 0)) return 1;
49
+ if ((pa[i] || 0) < (pb[i] || 0)) return -1;
50
+ }
51
+ return 0;
52
+ }
53
+
54
+ /**
55
+ * 非阻塞檢查 npm registry 最新版本,本地較舊時在 stderr 提醒
56
+ * @param {string} currentVersion - 目前版本
57
+ */
58
+ function checkLatestVersion(currentVersion) {
59
+ const url = 'https://registry.npmjs.org/botrun-horse/latest';
60
+ fetch(url, { signal: AbortSignal.timeout(3000) })
61
+ .then(r => r.ok ? r.json() : null)
62
+ .then(data => {
63
+ if (!data?.version) return;
64
+ if (semverCompare(data.version, currentVersion) > 0) {
65
+ process.stderr.write(
66
+ `\n⬆ 有新版本 v${data.version}(目前 v${currentVersion})\n` +
67
+ ` 更新指令: npx -y botrun-horse@latest skill\n\n`,
68
+ );
69
+ }
70
+ })
71
+ .catch(() => {}); // 網路失敗靜默忽略
72
+ }
73
+
74
+ /** list — 列出所有技能(依建立時間排序) */
42
75
  async function cmdSkillList(flags) {
43
76
  const elapsed = timer();
44
77
  const format = flags.format || 'text';
45
- const { listPrompts } = await import('../../lib/prompt/prompt-store.mjs');
78
+ const { listPrompts } = await import('./prompt-store.mjs');
46
79
 
47
80
  const all = listPrompts();
48
81
 
82
+ // 非阻塞版本檢查
83
+ checkLatestVersion(VERSION);
84
+
49
85
  if (format === 'json') {
50
86
  const data = all.map(p => ({
51
87
  slug: p.slug,
@@ -57,6 +93,7 @@ async function cmdSkillList(flags) {
57
93
  return;
58
94
  }
59
95
 
96
+ process.stdout.write(`botrun-horse v${VERSION} — ${all.length} 個技能\n\n`);
60
97
  for (let i = 0; i < all.length; i++) {
61
98
  if (i > 0) process.stdout.write('\n');
62
99
  process.stdout.write(all[i].rawContent + '\n');
@@ -74,12 +111,12 @@ async function cmdSkillShow(positionals, flags) {
74
111
  process.exit(1);
75
112
  }
76
113
 
77
- const { getPrompt, listPrompts } = await import('../../lib/prompt/prompt-store.mjs');
114
+ const { getPrompt, listPrompts } = await import('./prompt-store.mjs');
78
115
  let skill = getPrompt(slug);
79
116
 
80
117
  // 智慧 fallback:精確 slug 找不到 → 自動轉搜尋
81
118
  if (!skill) {
82
- const { searchPrompts } = await import('../../lib/prompt/prompt-search.mjs');
119
+ const { searchPrompts } = await import('./prompt-search.mjs');
83
120
  const all = listPrompts();
84
121
  const results = searchPrompts(all, slug);
85
122
 
@@ -131,8 +168,8 @@ async function cmdSkillSearch(positionals, flags) {
131
168
  process.exit(1);
132
169
  }
133
170
 
134
- const { listPrompts } = await import('../../lib/prompt/prompt-store.mjs');
135
- const { searchPrompts } = await import('../../lib/prompt/prompt-search.mjs');
171
+ const { listPrompts } = await import('./prompt-store.mjs');
172
+ const { searchPrompts } = await import('./prompt-search.mjs');
136
173
 
137
174
  const all = listPrompts();
138
175
  const results = searchPrompts(all, query);
@@ -0,0 +1,35 @@
1
+ // modules/skill/index.mjs — 技能模組自動註冊介面
2
+ // Convention: 每個 modules/<name>/index.mjs 都 export { name, schema, handler }
3
+
4
+ export const name = 'skill';
5
+
6
+ export const schema = {
7
+ name: 'skill',
8
+ description: '技能管理(無參數=全列出,帶關鍵字=模糊搜尋)— 零框架技能系列',
9
+ requires_sqlite: false,
10
+ subcommands: {
11
+ '(無)': '列出所有技能(依系列分組)',
12
+ '<關鍵字>': '模糊搜尋技能(加權全文比對)',
13
+ list: '列出所有技能(同無參數)',
14
+ show: '顯示指定技能全文(支援智慧 fallback 搜尋)',
15
+ search: '模糊搜尋技能(同 <關鍵字>)',
16
+ },
17
+ options: {
18
+ '--format=json|text': { type: 'string', default: 'text', description: '輸出格式' },
19
+ '--quiet': { type: 'boolean', default: false, description: '靜默模式' },
20
+ },
21
+ examples: [
22
+ 'bh skill # 列出全部技能',
23
+ 'bh skill 零幻覺 # 模糊搜尋「零幻覺」',
24
+ 'bh skill show botrun-horse-coding',
25
+ 'bh skill show botrun-horse-coding | pbcopy',
26
+ 'bh skill show botrun-horse-coding --format=json',
27
+ 'bh skill search 換位思考',
28
+ 'bh skill show 切片 # 智慧 fallback:slug 不存在 → 自動搜尋',
29
+ ],
30
+ };
31
+
32
+ export async function handler(subcommand, positionals, flags) {
33
+ const { cmdSkill } = await import('./command.mjs');
34
+ await cmdSkill(subcommand, positionals, flags);
35
+ }
@@ -1,4 +1,4 @@
1
- // lib/prompt/prompt-search.mjs — 加權評分模糊搜尋
1
+ // modules/skill/prompt-search.mjs — 加權評分模糊搜尋
2
2
  // 依 slug/name → description → content 順序加權比對
3
3
  // SKILL.md 標準 frontmatter(name, description)
4
4
 
@@ -1,12 +1,14 @@
1
- // lib/prompt/prompt-store.mjs — 技能 Repository 層
2
- // 掃描 lib/prompt/prompts/ 目錄,解析 YAML frontmatter,提供 listPrompts / getPrompt
1
+ // modules/skill/prompt-store.mjs — 技能 Repository 層
2
+ // 掃描 modules/skill/prompts/ 目錄,解析 YAML frontmatter,提供 listPrompts / getPrompt
3
3
 
4
4
  import fs from 'fs';
5
5
  import path from 'path';
6
- import { root } from '../core/paths.mjs';
6
+ import { fileURLToPath } from 'url';
7
7
 
8
- /** 技能目錄(相對於專案根目錄) */
9
- const PROMPTS_DIR = () => path.join(root(), 'lib', 'prompt', 'prompts');
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+
10
+ /** 技能目錄(相對於本模組目錄) */
11
+ const PROMPTS_DIR = () => path.join(__dirname, 'prompts');
10
12
 
11
13
  /**
12
14
  * 零依賴 YAML frontmatter 解析
@@ -29,23 +31,38 @@ export function parseFrontmatter(content) {
29
31
  }
30
32
 
31
33
  /**
32
- * 遞迴掃描目錄下所有 .md 檔案
34
+ * 遞迴收集目錄下所有 .md 檔案(含建立時間)
33
35
  * @param {string} dir - 起始目錄
34
36
  * @param {string} baseDir - 根目錄(用於計算相對路徑)
35
- * @returns {string[]} 相對路徑陣列
37
+ * @returns {{ relPath: string, birthMs: number }[]}
36
38
  */
37
- function scanMarkdownFiles(dir, baseDir) {
39
+ function collectMarkdownFiles(dir, baseDir) {
38
40
  const results = [];
39
41
  if (!fs.existsSync(dir)) return results;
40
42
  for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
41
43
  const fullPath = path.join(dir, entry.name);
42
44
  if (entry.isDirectory()) {
43
- results.push(...scanMarkdownFiles(fullPath, baseDir));
45
+ results.push(...collectMarkdownFiles(fullPath, baseDir));
44
46
  } else if (entry.name.endsWith('.md') && entry.name !== 'README.md') {
45
- results.push(path.relative(baseDir, fullPath));
47
+ results.push({
48
+ relPath: path.relative(baseDir, fullPath),
49
+ birthMs: fs.statSync(fullPath).birthtimeMs,
50
+ });
46
51
  }
47
52
  }
48
- return results.sort();
53
+ return results;
54
+ }
55
+
56
+ /**
57
+ * 掃描目錄下所有 .md 檔案,依建立時間排序
58
+ * @param {string} dir - 起始目錄
59
+ * @param {string} baseDir - 根目錄(用於計算相對路徑)
60
+ * @returns {string[]} 相對路徑陣列(依建立時間排序,同時間依檔名字母序)
61
+ */
62
+ function scanMarkdownFiles(dir, baseDir) {
63
+ return collectMarkdownFiles(dir, baseDir)
64
+ .sort((a, b) => a.birthMs - b.birthMs || a.relPath.localeCompare(b.relPath))
65
+ .map(r => r.relPath);
49
66
  }
50
67
 
51
68
  /**
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: botrun-horse-address-matching
3
+ description: 零框架地址比對 — 母體地址正規化 JSONL、雜湊表 O(1) 快速比對、AI 大腦判斷 top 5、處理缺路名難字全半形門牌不符
4
+ ---
5
+
6
+ 地址比對分三階段,避免全中華民國 2300 萬筆母體地址 token 爆漿:
7
+
8
+ 階段一:母體地址正規化
9
+ 用 MJS 程式碼將母體地址 CSV 正規化成 JSONL 格式,拆解成程式碼比對需要的結構欄位(縣市、鄉鎮市區、里、鄰、路街、段、巷、弄、號、樓)。
10
+
11
+ 階段二:程式碼快速比對
12
+ 建立雜湊表(Hash Map),用地址標準化後的 key 做 O(1) 查詢。對來源地址做相同正規化後比對,輸出相似度最高的 top 5 候選結果。程式碼比對速度約 0.1 秒。
13
+
14
+ 階段三:AI 大腦精準判斷
15
+ 將 top 5 候選結果交給大模型,用自然語言理解判斷最終匹配結果。程式碼幫你過濾掉一大堆,大腦就輕鬆了。
16
+
17
+ 常見地址問題處理:
18
+ - 缺路名、缺里鄰資訊
19
+ - 難字(UTF-8/UTF-16 編碼問題)
20
+ - 全形半形不一致
21
+ - 門牌號碼與實際地址不符
22
+ - 停用字與冗餘字元清理
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: botrun-horse-data-integrity
3
+ description: 零框架數據完整性檢查 — MJS 程式碼缺值偵測、格式一致性驗證、缺失比例統計、異常代碼列表、HTML 結果報告
4
+ ---
5
+
6
+ 我要做程式碼 MJS,然後要做數據完整性檢查,幫我做完之後輸出 HTML 結果報告說明。
7
+
8
+ 檢查項目:
9
+ 1. 缺值偵測:逐欄位統計缺失筆數與缺失比例,標示大於 5% 缺失的欄位
10
+ 2. 格式一致性驗證:各欄位資料型別是否一致、日期格式是否統一、編碼是否正確
11
+ 3. 異常代碼列表:列出不在預期代碼集合內的異常值
12
+ 4. 視覺化分佈:使用 Plotly 繪製各欄位分佈圖(不要用其他視覺化套件,Plotly 最穩定)
13
+
14
+ 資料量大時先抽樣(預設 5 萬筆),也可指定不抽樣跑全部。
15
+ 最終輸出為可直接開啟的 HTML 結果報告。
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: botrun-horse-data-reasonability
3
+ description: 零框架數據合理性檢查 — MJS 程式碼值域範圍驗證、時間分佈異常偵測、年增率趨勢統計、統計顯著性門檻、HTML 結果報告
4
+ ---
5
+
6
+ 幫我執行此任務用 MJS,然後啟動 HTML 技能生成結論報告給我。
7
+
8
+ 合理性檢查項目:
9
+ 1. 值域範圍:各欄位最大值與最小值是否在合理區間,標示超出範圍的異常值(例如年份出現 2076 年)
10
+ 2. 時間分佈:第一筆與最後一筆的時間範圍、是否存在未來日期或過早日期
11
+ 3. 趨勢統計:年增率是否異常跳動
12
+ 4. 統計顯著性:資料筆數是否小於 30(統計顯著性門檻)
13
+ 5. 邏輯交叉驗證:欄位之間的邏輯關係是否合理(例如出生年份不應晚於登記年份)
14
+
15
+ 分級呈現:嚴重問題、警告項目、合邏輯比例
16
+ 資料量大時先抽樣(預設 5 萬筆),也可指定不抽樣跑全部。
17
+ 視覺化使用 Plotly。最終輸出為可直接開啟的 HTML 結果報告。
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: botrun-horse-gemini-image-gen
3
+ description: 零框架 Gemini 繪圖 — Nano Banana 2 (`gemini-3.1-flash-image-preview`) 繪圖模組,CLI + Hono API、Session 修改、繁體中文 Prompt
4
+ ---
5
+
6
+ 幫我查 modules 是否已經包含 Gemini 繪圖模組,若尚未有,建立一個 new module 在 ./modules/ 底下。
7
+
8
+ 上網查 Gemini Nano Banana 2(模型 ID: `gemini-3.1-flash-image-preview`)該怎麼繪圖,上網查清楚最新 API 之後才開始製作。
9
+
10
+ 利用這個模型製作一個繪圖專用的 MJS API,放在 modules 底下,並且:
11
+ - 要支援繁體中文下達 prompt
12
+ - 要支援 Hono API 產生圖片
13
+ - 要支援 CLI 直接產生圖片
14
+ - 要支援 session 改變既有圖片
15
+
16
+ 同時支援 CLI 和 Hono API,分開做也要弄,統整也要弄,整合到現有的 npm 可以調用的 CLI 和 Hono API 統整。
17
+
18
+ 然後用 ./parallel-dag-todo-list/ 檔案追蹤平行做。
19
+
20
+ 驗證採用 BDD TDD SOLID DRY KISS DDD 製作。
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: botrun-horse-gemini-search-cli
3
+ description: 零框架 Gemini Search 動態搜尋 CLI — Gemini-3-Flash-Preview 即時上網搜尋、Grounding Search、URL Context、本地快取加速、串流 TTFT 最佳化
4
+ ---
5
+
6
+ 我們現在要去做出一個檢索是輸入自然語言的 MJS 的 CLI,你幫我放在適當的位置。自然語言提問以後,我要你呼叫的是 Gemini-3-Flash-Preview 這個大模型。這大模型它可以做上網搜尋,所以它可以做 Grounding Search。它可以做 URL Context Fetch,兩個工具都可以用,你就可以上網去抓資料了。但是它有一個 Thinking Budget,反正它的 Thinking Budget 肯定把它設定到最低最低,最少最少。
7
+
8
+ 然後接下來,在最快的時間之內,因為它是即時問答,所以你要越短的描述越好,不能想太久。一問、一搜、一答,就趕快答出來了。然後已經回答的答案你就把它存在快取裡面。下一次你再提問的時候你可以從快取,快取的做法是這樣:你在 ./CACHE 裡面,你把每一次回答的都有一個標題,然後有一個 .txt。所以當你在提問的時候你先把你有過的檔案的 TXT 檔名列表先丟給 MJS。如果大模型發現快取裡面有的,就直接調快取就不用上網搜尋也不用問大模型了,直接出來了。如果沒有的,在快取裡面的檔案列表都沒有的,那你就透過真實呼叫 Gemini-3-Flash-Preview 上網搜尋把它給回答掉。
9
+
10
+ 你回答的時候 Max Token 的數量,因為這應用場景是人類問答,回答的數量也不用太多,最多 2K 就好了。你要先上網搜尋最新的 SDK API,我會給你一個 Gemini API Key,你就用 Gemini 的 Direct API,然後利用它在 .env 裡面去完成這個 MJS 的 command line 的撰寫,然後把它透過 BDD、TDD、SOLID、DRY、KISS 還有 DDD 的方式去設計它,然後驗證測試到過關為止,謝謝你。
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: botrun-horse-html-report
3
+ description: 零框架 HTML 報告 — 數據分析結果生成可直接開啟的 HTML 結果報告、Plotly 視覺化圖表、分級摘要、專業排版
4
+ ---
5
+
6
+ 請啟動 HTML 技能生成結論報告給我。
7
+
8
+ 報告規格:
9
+ 1. 輸出為單一 HTML 檔案,可直接用瀏覽器開啟,不需額外伺服器
10
+ 2. 視覺化圖表使用 Plotly(CDN 載入),不要用其他視覺化套件
11
+ 3. 報告結構:摘要總覽 → 分級問題清單(嚴重/警告/正常)→ 詳細數據表格 → 視覺化圖表
12
+ 4. 排版專業清晰,適合列印或簡報使用
13
+ 5. 所有數據必須是真正執行程式碼計算出來的結果,禁止模擬或捏造數字
14
+
15
+ 注意:請你真的去執行程式碼以後給我真的 HTML 報告,不要產出模擬資料的報告。