botrun-horse 2.31.0 → 2.34.0

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