opencode-repos 0.3.0 → 0.3.2

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 (475) hide show
  1. package/index.ts +25 -11
  2. package/package.json +27 -27
  3. package/src/__tests__/git.test.ts +33 -2
  4. package/src/git.ts +32 -5
  5. package/.sisyphus/boulder.json +0 -8
  6. package/.sisyphus/notepads/opencode-repos/decisions.md +0 -15
  7. package/.sisyphus/notepads/opencode-repos/learnings.md +0 -384
  8. package/.sisyphus/plans/opencode-repos.md +0 -987
  9. package/.tmux-sessionizer +0 -8
  10. package/TODO.md +0 -3
  11. package/oh-my-opencode/.github/FUNDING.yml +0 -15
  12. package/oh-my-opencode/.github/ISSUE_TEMPLATE/bug_report.yml +0 -129
  13. package/oh-my-opencode/.github/ISSUE_TEMPLATE/config.yml +0 -8
  14. package/oh-my-opencode/.github/ISSUE_TEMPLATE/feature_request.yml +0 -100
  15. package/oh-my-opencode/.github/ISSUE_TEMPLATE/general.yml +0 -83
  16. package/oh-my-opencode/.github/assets/google.jpg +0 -0
  17. package/oh-my-opencode/.github/assets/hero.jpg +0 -0
  18. package/oh-my-opencode/.github/assets/indent.jpg +0 -0
  19. package/oh-my-opencode/.github/assets/microsoft.jpg +0 -0
  20. package/oh-my-opencode/.github/assets/omo.png +0 -0
  21. package/oh-my-opencode/.github/assets/orchestrator-atlas.png +0 -0
  22. package/oh-my-opencode/.github/assets/sisyphus.png +0 -0
  23. package/oh-my-opencode/.github/assets/sisyphuslabs.png +0 -0
  24. package/oh-my-opencode/.github/pull_request_template.md +0 -34
  25. package/oh-my-opencode/.github/workflows/ci.yml +0 -138
  26. package/oh-my-opencode/.github/workflows/cla.yml +0 -41
  27. package/oh-my-opencode/.github/workflows/lint-workflows.yml +0 -22
  28. package/oh-my-opencode/.github/workflows/publish.yml +0 -165
  29. package/oh-my-opencode/.github/workflows/sisyphus-agent.yml +0 -500
  30. package/oh-my-opencode/.opencode/background-tasks.json +0 -27
  31. package/oh-my-opencode/.opencode/command/get-unpublished-changes.md +0 -84
  32. package/oh-my-opencode/.opencode/command/omomomo.md +0 -37
  33. package/oh-my-opencode/.opencode/command/publish.md +0 -257
  34. package/oh-my-opencode/AGENTS.md +0 -179
  35. package/oh-my-opencode/CLA.md +0 -58
  36. package/oh-my-opencode/CONTRIBUTING.md +0 -268
  37. package/oh-my-opencode/LICENSE.md +0 -82
  38. package/oh-my-opencode/README.ja.md +0 -370
  39. package/oh-my-opencode/README.md +0 -376
  40. package/oh-my-opencode/README.zh-cn.md +0 -380
  41. package/oh-my-opencode/assets/oh-my-opencode.schema.json +0 -2171
  42. package/oh-my-opencode/bin/oh-my-opencode.js +0 -80
  43. package/oh-my-opencode/bin/platform.js +0 -38
  44. package/oh-my-opencode/bin/platform.test.ts +0 -148
  45. package/oh-my-opencode/bun.lock +0 -314
  46. package/oh-my-opencode/bunfig.toml +0 -2
  47. package/oh-my-opencode/docs/category-skill-guide.md +0 -200
  48. package/oh-my-opencode/docs/cli-guide.md +0 -272
  49. package/oh-my-opencode/docs/configurations.md +0 -654
  50. package/oh-my-opencode/docs/features.md +0 -550
  51. package/oh-my-opencode/docs/guide/installation.md +0 -288
  52. package/oh-my-opencode/docs/guide/overview.md +0 -97
  53. package/oh-my-opencode/docs/guide/understanding-orchestration-system.md +0 -445
  54. package/oh-my-opencode/docs/orchestration-guide.md +0 -152
  55. package/oh-my-opencode/docs/ultrawork-manifesto.md +0 -197
  56. package/oh-my-opencode/package.json +0 -89
  57. package/oh-my-opencode/packages/darwin-arm64/bin/.gitkeep +0 -0
  58. package/oh-my-opencode/packages/darwin-arm64/package.json +0 -22
  59. package/oh-my-opencode/packages/darwin-x64/bin/.gitkeep +0 -0
  60. package/oh-my-opencode/packages/darwin-x64/package.json +0 -22
  61. package/oh-my-opencode/packages/linux-arm64/bin/.gitkeep +0 -0
  62. package/oh-my-opencode/packages/linux-arm64/package.json +0 -25
  63. package/oh-my-opencode/packages/linux-arm64-musl/bin/.gitkeep +0 -0
  64. package/oh-my-opencode/packages/linux-arm64-musl/package.json +0 -25
  65. package/oh-my-opencode/packages/linux-x64/bin/.gitkeep +0 -0
  66. package/oh-my-opencode/packages/linux-x64/package.json +0 -25
  67. package/oh-my-opencode/packages/linux-x64-musl/bin/.gitkeep +0 -0
  68. package/oh-my-opencode/packages/linux-x64-musl/package.json +0 -25
  69. package/oh-my-opencode/packages/windows-x64/bin/.gitkeep +0 -0
  70. package/oh-my-opencode/packages/windows-x64/package.json +0 -22
  71. package/oh-my-opencode/postinstall.mjs +0 -43
  72. package/oh-my-opencode/script/build-binaries.ts +0 -103
  73. package/oh-my-opencode/script/build-schema.ts +0 -28
  74. package/oh-my-opencode/script/generate-changelog.ts +0 -92
  75. package/oh-my-opencode/script/publish.ts +0 -344
  76. package/oh-my-opencode/signatures/cla.json +0 -676
  77. package/oh-my-opencode/src/agents/AGENTS.md +0 -67
  78. package/oh-my-opencode/src/agents/atlas.ts +0 -1383
  79. package/oh-my-opencode/src/agents/dynamic-agent-prompt-builder.ts +0 -400
  80. package/oh-my-opencode/src/agents/explore.ts +0 -122
  81. package/oh-my-opencode/src/agents/index.ts +0 -13
  82. package/oh-my-opencode/src/agents/librarian.ts +0 -326
  83. package/oh-my-opencode/src/agents/metis.ts +0 -315
  84. package/oh-my-opencode/src/agents/momus.test.ts +0 -57
  85. package/oh-my-opencode/src/agents/momus.ts +0 -444
  86. package/oh-my-opencode/src/agents/multimodal-looker.ts +0 -56
  87. package/oh-my-opencode/src/agents/oracle.ts +0 -122
  88. package/oh-my-opencode/src/agents/prometheus-prompt.test.ts +0 -22
  89. package/oh-my-opencode/src/agents/prometheus-prompt.ts +0 -1196
  90. package/oh-my-opencode/src/agents/sisyphus-junior.test.ts +0 -232
  91. package/oh-my-opencode/src/agents/sisyphus-junior.ts +0 -134
  92. package/oh-my-opencode/src/agents/sisyphus.ts +0 -633
  93. package/oh-my-opencode/src/agents/types.ts +0 -80
  94. package/oh-my-opencode/src/agents/utils.test.ts +0 -311
  95. package/oh-my-opencode/src/agents/utils.ts +0 -240
  96. package/oh-my-opencode/src/cli/AGENTS.md +0 -91
  97. package/oh-my-opencode/src/cli/config-manager.test.ts +0 -364
  98. package/oh-my-opencode/src/cli/config-manager.ts +0 -641
  99. package/oh-my-opencode/src/cli/doctor/checks/auth.test.ts +0 -114
  100. package/oh-my-opencode/src/cli/doctor/checks/auth.ts +0 -115
  101. package/oh-my-opencode/src/cli/doctor/checks/config.test.ts +0 -103
  102. package/oh-my-opencode/src/cli/doctor/checks/config.ts +0 -123
  103. package/oh-my-opencode/src/cli/doctor/checks/dependencies.test.ts +0 -152
  104. package/oh-my-opencode/src/cli/doctor/checks/dependencies.ts +0 -163
  105. package/oh-my-opencode/src/cli/doctor/checks/gh.test.ts +0 -151
  106. package/oh-my-opencode/src/cli/doctor/checks/gh.ts +0 -171
  107. package/oh-my-opencode/src/cli/doctor/checks/index.ts +0 -34
  108. package/oh-my-opencode/src/cli/doctor/checks/lsp.test.ts +0 -134
  109. package/oh-my-opencode/src/cli/doctor/checks/lsp.ts +0 -77
  110. package/oh-my-opencode/src/cli/doctor/checks/mcp.test.ts +0 -115
  111. package/oh-my-opencode/src/cli/doctor/checks/mcp.ts +0 -128
  112. package/oh-my-opencode/src/cli/doctor/checks/opencode.test.ts +0 -227
  113. package/oh-my-opencode/src/cli/doctor/checks/opencode.ts +0 -178
  114. package/oh-my-opencode/src/cli/doctor/checks/plugin.test.ts +0 -109
  115. package/oh-my-opencode/src/cli/doctor/checks/plugin.ts +0 -124
  116. package/oh-my-opencode/src/cli/doctor/checks/version.test.ts +0 -148
  117. package/oh-my-opencode/src/cli/doctor/checks/version.ts +0 -135
  118. package/oh-my-opencode/src/cli/doctor/constants.ts +0 -72
  119. package/oh-my-opencode/src/cli/doctor/formatter.test.ts +0 -218
  120. package/oh-my-opencode/src/cli/doctor/formatter.ts +0 -140
  121. package/oh-my-opencode/src/cli/doctor/index.ts +0 -11
  122. package/oh-my-opencode/src/cli/doctor/runner.test.ts +0 -153
  123. package/oh-my-opencode/src/cli/doctor/runner.ts +0 -132
  124. package/oh-my-opencode/src/cli/doctor/types.ts +0 -113
  125. package/oh-my-opencode/src/cli/get-local-version/formatter.ts +0 -66
  126. package/oh-my-opencode/src/cli/get-local-version/index.ts +0 -106
  127. package/oh-my-opencode/src/cli/get-local-version/types.ts +0 -14
  128. package/oh-my-opencode/src/cli/index.ts +0 -153
  129. package/oh-my-opencode/src/cli/install.ts +0 -523
  130. package/oh-my-opencode/src/cli/model-fallback.ts +0 -246
  131. package/oh-my-opencode/src/cli/run/completion.test.ts +0 -170
  132. package/oh-my-opencode/src/cli/run/completion.ts +0 -79
  133. package/oh-my-opencode/src/cli/run/events.test.ts +0 -155
  134. package/oh-my-opencode/src/cli/run/events.ts +0 -325
  135. package/oh-my-opencode/src/cli/run/index.ts +0 -2
  136. package/oh-my-opencode/src/cli/run/runner.ts +0 -159
  137. package/oh-my-opencode/src/cli/run/types.ts +0 -76
  138. package/oh-my-opencode/src/cli/types.ts +0 -40
  139. package/oh-my-opencode/src/config/index.ts +0 -26
  140. package/oh-my-opencode/src/config/schema.test.ts +0 -444
  141. package/oh-my-opencode/src/config/schema.ts +0 -339
  142. package/oh-my-opencode/src/features/AGENTS.md +0 -77
  143. package/oh-my-opencode/src/features/background-agent/concurrency.test.ts +0 -418
  144. package/oh-my-opencode/src/features/background-agent/concurrency.ts +0 -137
  145. package/oh-my-opencode/src/features/background-agent/index.ts +0 -3
  146. package/oh-my-opencode/src/features/background-agent/manager.test.ts +0 -1928
  147. package/oh-my-opencode/src/features/background-agent/manager.ts +0 -1335
  148. package/oh-my-opencode/src/features/background-agent/types.ts +0 -66
  149. package/oh-my-opencode/src/features/boulder-state/constants.ts +0 -13
  150. package/oh-my-opencode/src/features/boulder-state/index.ts +0 -3
  151. package/oh-my-opencode/src/features/boulder-state/storage.test.ts +0 -250
  152. package/oh-my-opencode/src/features/boulder-state/storage.ts +0 -150
  153. package/oh-my-opencode/src/features/boulder-state/types.ts +0 -26
  154. package/oh-my-opencode/src/features/builtin-commands/commands.ts +0 -89
  155. package/oh-my-opencode/src/features/builtin-commands/index.ts +0 -2
  156. package/oh-my-opencode/src/features/builtin-commands/templates/init-deep.ts +0 -300
  157. package/oh-my-opencode/src/features/builtin-commands/templates/ralph-loop.ts +0 -38
  158. package/oh-my-opencode/src/features/builtin-commands/templates/refactor.ts +0 -619
  159. package/oh-my-opencode/src/features/builtin-commands/templates/start-work.ts +0 -72
  160. package/oh-my-opencode/src/features/builtin-commands/types.ts +0 -9
  161. package/oh-my-opencode/src/features/builtin-skills/frontend-ui-ux/SKILL.md +0 -78
  162. package/oh-my-opencode/src/features/builtin-skills/git-master/SKILL.md +0 -1105
  163. package/oh-my-opencode/src/features/builtin-skills/index.ts +0 -2
  164. package/oh-my-opencode/src/features/builtin-skills/skills.ts +0 -1203
  165. package/oh-my-opencode/src/features/builtin-skills/types.ts +0 -16
  166. package/oh-my-opencode/src/features/claude-code-agent-loader/index.ts +0 -2
  167. package/oh-my-opencode/src/features/claude-code-agent-loader/loader.ts +0 -90
  168. package/oh-my-opencode/src/features/claude-code-agent-loader/types.ts +0 -17
  169. package/oh-my-opencode/src/features/claude-code-command-loader/index.ts +0 -2
  170. package/oh-my-opencode/src/features/claude-code-command-loader/loader.ts +0 -144
  171. package/oh-my-opencode/src/features/claude-code-command-loader/types.ts +0 -46
  172. package/oh-my-opencode/src/features/claude-code-mcp-loader/env-expander.ts +0 -27
  173. package/oh-my-opencode/src/features/claude-code-mcp-loader/index.ts +0 -11
  174. package/oh-my-opencode/src/features/claude-code-mcp-loader/loader.test.ts +0 -162
  175. package/oh-my-opencode/src/features/claude-code-mcp-loader/loader.ts +0 -113
  176. package/oh-my-opencode/src/features/claude-code-mcp-loader/transformer.ts +0 -53
  177. package/oh-my-opencode/src/features/claude-code-mcp-loader/types.ts +0 -42
  178. package/oh-my-opencode/src/features/claude-code-plugin-loader/index.ts +0 -3
  179. package/oh-my-opencode/src/features/claude-code-plugin-loader/loader.ts +0 -486
  180. package/oh-my-opencode/src/features/claude-code-plugin-loader/types.ts +0 -210
  181. package/oh-my-opencode/src/features/claude-code-session-state/index.ts +0 -1
  182. package/oh-my-opencode/src/features/claude-code-session-state/state.test.ts +0 -126
  183. package/oh-my-opencode/src/features/claude-code-session-state/state.ts +0 -37
  184. package/oh-my-opencode/src/features/context-injector/collector.test.ts +0 -330
  185. package/oh-my-opencode/src/features/context-injector/collector.ts +0 -85
  186. package/oh-my-opencode/src/features/context-injector/index.ts +0 -14
  187. package/oh-my-opencode/src/features/context-injector/injector.test.ts +0 -122
  188. package/oh-my-opencode/src/features/context-injector/injector.ts +0 -167
  189. package/oh-my-opencode/src/features/context-injector/types.ts +0 -91
  190. package/oh-my-opencode/src/features/hook-message-injector/constants.ts +0 -6
  191. package/oh-my-opencode/src/features/hook-message-injector/index.ts +0 -4
  192. package/oh-my-opencode/src/features/hook-message-injector/injector.ts +0 -195
  193. package/oh-my-opencode/src/features/hook-message-injector/types.ts +0 -47
  194. package/oh-my-opencode/src/features/opencode-skill-loader/async-loader.test.ts +0 -448
  195. package/oh-my-opencode/src/features/opencode-skill-loader/async-loader.ts +0 -180
  196. package/oh-my-opencode/src/features/opencode-skill-loader/blocking.test.ts +0 -210
  197. package/oh-my-opencode/src/features/opencode-skill-loader/blocking.ts +0 -62
  198. package/oh-my-opencode/src/features/opencode-skill-loader/discover-worker.ts +0 -59
  199. package/oh-my-opencode/src/features/opencode-skill-loader/index.ts +0 -4
  200. package/oh-my-opencode/src/features/opencode-skill-loader/loader.test.ts +0 -273
  201. package/oh-my-opencode/src/features/opencode-skill-loader/loader.ts +0 -259
  202. package/oh-my-opencode/src/features/opencode-skill-loader/merger.ts +0 -267
  203. package/oh-my-opencode/src/features/opencode-skill-loader/skill-content.test.ts +0 -267
  204. package/oh-my-opencode/src/features/opencode-skill-loader/skill-content.ts +0 -206
  205. package/oh-my-opencode/src/features/opencode-skill-loader/types.ts +0 -38
  206. package/oh-my-opencode/src/features/skill-mcp-manager/env-cleaner.test.ts +0 -201
  207. package/oh-my-opencode/src/features/skill-mcp-manager/env-cleaner.ts +0 -27
  208. package/oh-my-opencode/src/features/skill-mcp-manager/index.ts +0 -2
  209. package/oh-my-opencode/src/features/skill-mcp-manager/manager.test.ts +0 -611
  210. package/oh-my-opencode/src/features/skill-mcp-manager/manager.ts +0 -520
  211. package/oh-my-opencode/src/features/skill-mcp-manager/types.ts +0 -14
  212. package/oh-my-opencode/src/features/task-toast-manager/index.ts +0 -2
  213. package/oh-my-opencode/src/features/task-toast-manager/manager.test.ts +0 -249
  214. package/oh-my-opencode/src/features/task-toast-manager/manager.ts +0 -215
  215. package/oh-my-opencode/src/features/task-toast-manager/types.ts +0 -24
  216. package/oh-my-opencode/src/hooks/AGENTS.md +0 -73
  217. package/oh-my-opencode/src/hooks/agent-usage-reminder/constants.ts +0 -54
  218. package/oh-my-opencode/src/hooks/agent-usage-reminder/index.ts +0 -109
  219. package/oh-my-opencode/src/hooks/agent-usage-reminder/storage.ts +0 -42
  220. package/oh-my-opencode/src/hooks/agent-usage-reminder/types.ts +0 -6
  221. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/executor.test.ts +0 -307
  222. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/executor.ts +0 -485
  223. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/index.ts +0 -151
  224. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/parser.ts +0 -201
  225. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.test.ts +0 -33
  226. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.ts +0 -184
  227. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/pruning-types.ts +0 -44
  228. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/storage.test.ts +0 -77
  229. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/storage.ts +0 -250
  230. package/oh-my-opencode/src/hooks/anthropic-context-window-limit-recovery/types.ts +0 -42
  231. package/oh-my-opencode/src/hooks/atlas/index.test.ts +0 -953
  232. package/oh-my-opencode/src/hooks/atlas/index.ts +0 -771
  233. package/oh-my-opencode/src/hooks/auto-slash-command/constants.ts +0 -12
  234. package/oh-my-opencode/src/hooks/auto-slash-command/detector.test.ts +0 -296
  235. package/oh-my-opencode/src/hooks/auto-slash-command/detector.ts +0 -65
  236. package/oh-my-opencode/src/hooks/auto-slash-command/executor.ts +0 -205
  237. package/oh-my-opencode/src/hooks/auto-slash-command/index.test.ts +0 -254
  238. package/oh-my-opencode/src/hooks/auto-slash-command/index.ts +0 -89
  239. package/oh-my-opencode/src/hooks/auto-slash-command/types.ts +0 -23
  240. package/oh-my-opencode/src/hooks/auto-update-checker/cache.ts +0 -93
  241. package/oh-my-opencode/src/hooks/auto-update-checker/checker.test.ts +0 -24
  242. package/oh-my-opencode/src/hooks/auto-update-checker/checker.ts +0 -284
  243. package/oh-my-opencode/src/hooks/auto-update-checker/constants.ts +0 -64
  244. package/oh-my-opencode/src/hooks/auto-update-checker/index.test.ts +0 -254
  245. package/oh-my-opencode/src/hooks/auto-update-checker/index.ts +0 -260
  246. package/oh-my-opencode/src/hooks/auto-update-checker/types.ts +0 -29
  247. package/oh-my-opencode/src/hooks/background-compaction/index.ts +0 -87
  248. package/oh-my-opencode/src/hooks/background-notification/index.ts +0 -28
  249. package/oh-my-opencode/src/hooks/background-notification/types.ts +0 -5
  250. package/oh-my-opencode/src/hooks/claude-code-hooks/AGENTS.md +0 -70
  251. package/oh-my-opencode/src/hooks/claude-code-hooks/config-loader.ts +0 -107
  252. package/oh-my-opencode/src/hooks/claude-code-hooks/config.ts +0 -103
  253. package/oh-my-opencode/src/hooks/claude-code-hooks/index.ts +0 -401
  254. package/oh-my-opencode/src/hooks/claude-code-hooks/plugin-config.ts +0 -12
  255. package/oh-my-opencode/src/hooks/claude-code-hooks/post-tool-use.ts +0 -199
  256. package/oh-my-opencode/src/hooks/claude-code-hooks/pre-compact.ts +0 -109
  257. package/oh-my-opencode/src/hooks/claude-code-hooks/pre-tool-use.ts +0 -172
  258. package/oh-my-opencode/src/hooks/claude-code-hooks/stop.ts +0 -118
  259. package/oh-my-opencode/src/hooks/claude-code-hooks/todo.ts +0 -76
  260. package/oh-my-opencode/src/hooks/claude-code-hooks/tool-input-cache.ts +0 -47
  261. package/oh-my-opencode/src/hooks/claude-code-hooks/transcript.ts +0 -252
  262. package/oh-my-opencode/src/hooks/claude-code-hooks/types.ts +0 -204
  263. package/oh-my-opencode/src/hooks/claude-code-hooks/user-prompt-submit.ts +0 -117
  264. package/oh-my-opencode/src/hooks/comment-checker/cli.test.ts +0 -68
  265. package/oh-my-opencode/src/hooks/comment-checker/cli.ts +0 -221
  266. package/oh-my-opencode/src/hooks/comment-checker/downloader.ts +0 -196
  267. package/oh-my-opencode/src/hooks/comment-checker/index.ts +0 -171
  268. package/oh-my-opencode/src/hooks/comment-checker/types.ts +0 -33
  269. package/oh-my-opencode/src/hooks/compaction-context-injector/index.ts +0 -61
  270. package/oh-my-opencode/src/hooks/context-window-monitor.ts +0 -99
  271. package/oh-my-opencode/src/hooks/delegate-task-retry/index.test.ts +0 -119
  272. package/oh-my-opencode/src/hooks/delegate-task-retry/index.ts +0 -136
  273. package/oh-my-opencode/src/hooks/directory-agents-injector/constants.ts +0 -9
  274. package/oh-my-opencode/src/hooks/directory-agents-injector/index.ts +0 -182
  275. package/oh-my-opencode/src/hooks/directory-agents-injector/storage.ts +0 -48
  276. package/oh-my-opencode/src/hooks/directory-agents-injector/types.ts +0 -5
  277. package/oh-my-opencode/src/hooks/directory-readme-injector/constants.ts +0 -9
  278. package/oh-my-opencode/src/hooks/directory-readme-injector/index.ts +0 -177
  279. package/oh-my-opencode/src/hooks/directory-readme-injector/storage.ts +0 -48
  280. package/oh-my-opencode/src/hooks/directory-readme-injector/types.ts +0 -5
  281. package/oh-my-opencode/src/hooks/edit-error-recovery/index.test.ts +0 -126
  282. package/oh-my-opencode/src/hooks/edit-error-recovery/index.ts +0 -57
  283. package/oh-my-opencode/src/hooks/empty-task-response-detector.ts +0 -27
  284. package/oh-my-opencode/src/hooks/index.ts +0 -32
  285. package/oh-my-opencode/src/hooks/interactive-bash-session/constants.ts +0 -15
  286. package/oh-my-opencode/src/hooks/interactive-bash-session/index.ts +0 -262
  287. package/oh-my-opencode/src/hooks/interactive-bash-session/storage.ts +0 -59
  288. package/oh-my-opencode/src/hooks/interactive-bash-session/types.ts +0 -11
  289. package/oh-my-opencode/src/hooks/keyword-detector/constants.ts +0 -300
  290. package/oh-my-opencode/src/hooks/keyword-detector/detector.ts +0 -52
  291. package/oh-my-opencode/src/hooks/keyword-detector/index.test.ts +0 -529
  292. package/oh-my-opencode/src/hooks/keyword-detector/index.ts +0 -100
  293. package/oh-my-opencode/src/hooks/keyword-detector/types.ts +0 -4
  294. package/oh-my-opencode/src/hooks/non-interactive-env/constants.ts +0 -70
  295. package/oh-my-opencode/src/hooks/non-interactive-env/detector.ts +0 -19
  296. package/oh-my-opencode/src/hooks/non-interactive-env/index.test.ts +0 -323
  297. package/oh-my-opencode/src/hooks/non-interactive-env/index.ts +0 -63
  298. package/oh-my-opencode/src/hooks/non-interactive-env/types.ts +0 -3
  299. package/oh-my-opencode/src/hooks/prometheus-md-only/constants.ts +0 -32
  300. package/oh-my-opencode/src/hooks/prometheus-md-only/index.test.ts +0 -488
  301. package/oh-my-opencode/src/hooks/prometheus-md-only/index.ts +0 -136
  302. package/oh-my-opencode/src/hooks/ralph-loop/constants.ts +0 -5
  303. package/oh-my-opencode/src/hooks/ralph-loop/index.test.ts +0 -835
  304. package/oh-my-opencode/src/hooks/ralph-loop/index.ts +0 -417
  305. package/oh-my-opencode/src/hooks/ralph-loop/storage.ts +0 -115
  306. package/oh-my-opencode/src/hooks/ralph-loop/types.ts +0 -19
  307. package/oh-my-opencode/src/hooks/rules-injector/constants.ts +0 -30
  308. package/oh-my-opencode/src/hooks/rules-injector/finder.test.ts +0 -381
  309. package/oh-my-opencode/src/hooks/rules-injector/finder.ts +0 -263
  310. package/oh-my-opencode/src/hooks/rules-injector/index.ts +0 -223
  311. package/oh-my-opencode/src/hooks/rules-injector/matcher.ts +0 -63
  312. package/oh-my-opencode/src/hooks/rules-injector/parser.test.ts +0 -226
  313. package/oh-my-opencode/src/hooks/rules-injector/parser.ts +0 -211
  314. package/oh-my-opencode/src/hooks/rules-injector/storage.ts +0 -59
  315. package/oh-my-opencode/src/hooks/rules-injector/types.ts +0 -57
  316. package/oh-my-opencode/src/hooks/session-notification-utils.ts +0 -140
  317. package/oh-my-opencode/src/hooks/session-notification.test.ts +0 -361
  318. package/oh-my-opencode/src/hooks/session-notification.ts +0 -330
  319. package/oh-my-opencode/src/hooks/session-recovery/constants.ts +0 -10
  320. package/oh-my-opencode/src/hooks/session-recovery/index.test.ts +0 -223
  321. package/oh-my-opencode/src/hooks/session-recovery/index.ts +0 -435
  322. package/oh-my-opencode/src/hooks/session-recovery/storage.ts +0 -390
  323. package/oh-my-opencode/src/hooks/session-recovery/types.ts +0 -98
  324. package/oh-my-opencode/src/hooks/start-work/index.test.ts +0 -402
  325. package/oh-my-opencode/src/hooks/start-work/index.ts +0 -242
  326. package/oh-my-opencode/src/hooks/task-resume-info/index.ts +0 -36
  327. package/oh-my-opencode/src/hooks/think-mode/detector.ts +0 -57
  328. package/oh-my-opencode/src/hooks/think-mode/index.test.ts +0 -353
  329. package/oh-my-opencode/src/hooks/think-mode/index.ts +0 -89
  330. package/oh-my-opencode/src/hooks/think-mode/switcher.test.ts +0 -461
  331. package/oh-my-opencode/src/hooks/think-mode/switcher.ts +0 -222
  332. package/oh-my-opencode/src/hooks/think-mode/types.ts +0 -21
  333. package/oh-my-opencode/src/hooks/thinking-block-validator/index.ts +0 -171
  334. package/oh-my-opencode/src/hooks/todo-continuation-enforcer.test.ts +0 -876
  335. package/oh-my-opencode/src/hooks/todo-continuation-enforcer.ts +0 -480
  336. package/oh-my-opencode/src/hooks/tool-output-truncator.test.ts +0 -168
  337. package/oh-my-opencode/src/hooks/tool-output-truncator.ts +0 -61
  338. package/oh-my-opencode/src/index.ts +0 -589
  339. package/oh-my-opencode/src/mcp/AGENTS.md +0 -70
  340. package/oh-my-opencode/src/mcp/context7.ts +0 -6
  341. package/oh-my-opencode/src/mcp/grep-app.ts +0 -6
  342. package/oh-my-opencode/src/mcp/index.test.ts +0 -86
  343. package/oh-my-opencode/src/mcp/index.ts +0 -32
  344. package/oh-my-opencode/src/mcp/types.ts +0 -9
  345. package/oh-my-opencode/src/mcp/websearch.ts +0 -10
  346. package/oh-my-opencode/src/plugin-config.test.ts +0 -119
  347. package/oh-my-opencode/src/plugin-config.ts +0 -135
  348. package/oh-my-opencode/src/plugin-handlers/config-handler.test.ts +0 -103
  349. package/oh-my-opencode/src/plugin-handlers/config-handler.ts +0 -399
  350. package/oh-my-opencode/src/plugin-handlers/index.ts +0 -1
  351. package/oh-my-opencode/src/plugin-state.ts +0 -30
  352. package/oh-my-opencode/src/shared/AGENTS.md +0 -63
  353. package/oh-my-opencode/src/shared/agent-tool-restrictions.ts +0 -44
  354. package/oh-my-opencode/src/shared/agent-variant.test.ts +0 -83
  355. package/oh-my-opencode/src/shared/agent-variant.ts +0 -40
  356. package/oh-my-opencode/src/shared/claude-config-dir.test.ts +0 -60
  357. package/oh-my-opencode/src/shared/claude-config-dir.ts +0 -11
  358. package/oh-my-opencode/src/shared/command-executor.ts +0 -225
  359. package/oh-my-opencode/src/shared/config-errors.ts +0 -18
  360. package/oh-my-opencode/src/shared/config-path.ts +0 -47
  361. package/oh-my-opencode/src/shared/data-path.ts +0 -22
  362. package/oh-my-opencode/src/shared/deep-merge.test.ts +0 -336
  363. package/oh-my-opencode/src/shared/deep-merge.ts +0 -53
  364. package/oh-my-opencode/src/shared/dynamic-truncator.ts +0 -193
  365. package/oh-my-opencode/src/shared/external-plugin-detector.test.ts +0 -133
  366. package/oh-my-opencode/src/shared/external-plugin-detector.ts +0 -132
  367. package/oh-my-opencode/src/shared/file-reference-resolver.ts +0 -85
  368. package/oh-my-opencode/src/shared/file-utils.ts +0 -40
  369. package/oh-my-opencode/src/shared/first-message-variant.test.ts +0 -32
  370. package/oh-my-opencode/src/shared/first-message-variant.ts +0 -28
  371. package/oh-my-opencode/src/shared/frontmatter.test.ts +0 -262
  372. package/oh-my-opencode/src/shared/frontmatter.ts +0 -31
  373. package/oh-my-opencode/src/shared/hook-disabled.ts +0 -22
  374. package/oh-my-opencode/src/shared/index.ts +0 -29
  375. package/oh-my-opencode/src/shared/jsonc-parser.test.ts +0 -266
  376. package/oh-my-opencode/src/shared/jsonc-parser.ts +0 -66
  377. package/oh-my-opencode/src/shared/logger.ts +0 -20
  378. package/oh-my-opencode/src/shared/migration.test.ts +0 -602
  379. package/oh-my-opencode/src/shared/migration.ts +0 -191
  380. package/oh-my-opencode/src/shared/model-resolver.test.ts +0 -101
  381. package/oh-my-opencode/src/shared/model-resolver.ts +0 -35
  382. package/oh-my-opencode/src/shared/model-sanitizer.ts +0 -12
  383. package/oh-my-opencode/src/shared/opencode-config-dir.test.ts +0 -318
  384. package/oh-my-opencode/src/shared/opencode-config-dir.ts +0 -142
  385. package/oh-my-opencode/src/shared/opencode-version.test.ts +0 -223
  386. package/oh-my-opencode/src/shared/opencode-version.ts +0 -72
  387. package/oh-my-opencode/src/shared/pattern-matcher.ts +0 -29
  388. package/oh-my-opencode/src/shared/permission-compat.test.ts +0 -134
  389. package/oh-my-opencode/src/shared/permission-compat.ts +0 -77
  390. package/oh-my-opencode/src/shared/session-cursor.test.ts +0 -66
  391. package/oh-my-opencode/src/shared/session-cursor.ts +0 -85
  392. package/oh-my-opencode/src/shared/shell-env.test.ts +0 -278
  393. package/oh-my-opencode/src/shared/shell-env.ts +0 -111
  394. package/oh-my-opencode/src/shared/snake-case.ts +0 -49
  395. package/oh-my-opencode/src/shared/system-directive.ts +0 -40
  396. package/oh-my-opencode/src/shared/tool-name.ts +0 -26
  397. package/oh-my-opencode/src/shared/zip-extractor.ts +0 -83
  398. package/oh-my-opencode/src/tools/AGENTS.md +0 -74
  399. package/oh-my-opencode/src/tools/ast-grep/cli.ts +0 -230
  400. package/oh-my-opencode/src/tools/ast-grep/constants.ts +0 -261
  401. package/oh-my-opencode/src/tools/ast-grep/downloader.ts +0 -128
  402. package/oh-my-opencode/src/tools/ast-grep/index.ts +0 -13
  403. package/oh-my-opencode/src/tools/ast-grep/tools.ts +0 -112
  404. package/oh-my-opencode/src/tools/ast-grep/types.ts +0 -61
  405. package/oh-my-opencode/src/tools/ast-grep/utils.ts +0 -102
  406. package/oh-my-opencode/src/tools/background-task/constants.ts +0 -7
  407. package/oh-my-opencode/src/tools/background-task/index.ts +0 -7
  408. package/oh-my-opencode/src/tools/background-task/tools.ts +0 -479
  409. package/oh-my-opencode/src/tools/background-task/types.ts +0 -16
  410. package/oh-my-opencode/src/tools/call-omo-agent/constants.ts +0 -7
  411. package/oh-my-opencode/src/tools/call-omo-agent/index.ts +0 -3
  412. package/oh-my-opencode/src/tools/call-omo-agent/tools.ts +0 -338
  413. package/oh-my-opencode/src/tools/call-omo-agent/types.ts +0 -27
  414. package/oh-my-opencode/src/tools/delegate-task/constants.ts +0 -205
  415. package/oh-my-opencode/src/tools/delegate-task/index.ts +0 -3
  416. package/oh-my-opencode/src/tools/delegate-task/tools.test.ts +0 -1575
  417. package/oh-my-opencode/src/tools/delegate-task/tools.ts +0 -885
  418. package/oh-my-opencode/src/tools/delegate-task/types.ts +0 -9
  419. package/oh-my-opencode/src/tools/glob/cli.test.ts +0 -158
  420. package/oh-my-opencode/src/tools/glob/cli.ts +0 -191
  421. package/oh-my-opencode/src/tools/glob/constants.ts +0 -12
  422. package/oh-my-opencode/src/tools/glob/index.ts +0 -3
  423. package/oh-my-opencode/src/tools/glob/tools.ts +0 -41
  424. package/oh-my-opencode/src/tools/glob/types.ts +0 -22
  425. package/oh-my-opencode/src/tools/glob/utils.ts +0 -26
  426. package/oh-my-opencode/src/tools/grep/cli.ts +0 -229
  427. package/oh-my-opencode/src/tools/grep/constants.ts +0 -127
  428. package/oh-my-opencode/src/tools/grep/downloader.test.ts +0 -103
  429. package/oh-my-opencode/src/tools/grep/downloader.ts +0 -145
  430. package/oh-my-opencode/src/tools/grep/index.ts +0 -3
  431. package/oh-my-opencode/src/tools/grep/tools.ts +0 -40
  432. package/oh-my-opencode/src/tools/grep/types.ts +0 -39
  433. package/oh-my-opencode/src/tools/grep/utils.ts +0 -53
  434. package/oh-my-opencode/src/tools/index.ts +0 -72
  435. package/oh-my-opencode/src/tools/interactive-bash/constants.ts +0 -18
  436. package/oh-my-opencode/src/tools/interactive-bash/index.ts +0 -4
  437. package/oh-my-opencode/src/tools/interactive-bash/tools.ts +0 -126
  438. package/oh-my-opencode/src/tools/interactive-bash/utils.ts +0 -71
  439. package/oh-my-opencode/src/tools/look-at/constants.ts +0 -3
  440. package/oh-my-opencode/src/tools/look-at/index.ts +0 -3
  441. package/oh-my-opencode/src/tools/look-at/tools.test.ts +0 -73
  442. package/oh-my-opencode/src/tools/look-at/tools.ts +0 -173
  443. package/oh-my-opencode/src/tools/look-at/types.ts +0 -4
  444. package/oh-my-opencode/src/tools/lsp/client.ts +0 -596
  445. package/oh-my-opencode/src/tools/lsp/config.test.ts +0 -130
  446. package/oh-my-opencode/src/tools/lsp/config.ts +0 -285
  447. package/oh-my-opencode/src/tools/lsp/constants.ts +0 -390
  448. package/oh-my-opencode/src/tools/lsp/index.ts +0 -7
  449. package/oh-my-opencode/src/tools/lsp/tools.ts +0 -261
  450. package/oh-my-opencode/src/tools/lsp/types.ts +0 -124
  451. package/oh-my-opencode/src/tools/lsp/utils.ts +0 -406
  452. package/oh-my-opencode/src/tools/session-manager/constants.ts +0 -97
  453. package/oh-my-opencode/src/tools/session-manager/index.ts +0 -3
  454. package/oh-my-opencode/src/tools/session-manager/storage.test.ts +0 -315
  455. package/oh-my-opencode/src/tools/session-manager/storage.ts +0 -238
  456. package/oh-my-opencode/src/tools/session-manager/tools.test.ts +0 -124
  457. package/oh-my-opencode/src/tools/session-manager/tools.ts +0 -146
  458. package/oh-my-opencode/src/tools/session-manager/types.ts +0 -99
  459. package/oh-my-opencode/src/tools/session-manager/utils.test.ts +0 -160
  460. package/oh-my-opencode/src/tools/session-manager/utils.ts +0 -199
  461. package/oh-my-opencode/src/tools/skill/constants.ts +0 -8
  462. package/oh-my-opencode/src/tools/skill/index.ts +0 -3
  463. package/oh-my-opencode/src/tools/skill/tools.test.ts +0 -239
  464. package/oh-my-opencode/src/tools/skill/tools.ts +0 -200
  465. package/oh-my-opencode/src/tools/skill/types.ts +0 -31
  466. package/oh-my-opencode/src/tools/skill-mcp/constants.ts +0 -3
  467. package/oh-my-opencode/src/tools/skill-mcp/index.ts +0 -3
  468. package/oh-my-opencode/src/tools/skill-mcp/tools.test.ts +0 -215
  469. package/oh-my-opencode/src/tools/skill-mcp/tools.ts +0 -172
  470. package/oh-my-opencode/src/tools/skill-mcp/types.ts +0 -8
  471. package/oh-my-opencode/src/tools/slashcommand/index.ts +0 -2
  472. package/oh-my-opencode/src/tools/slashcommand/tools.ts +0 -252
  473. package/oh-my-opencode/src/tools/slashcommand/types.ts +0 -28
  474. package/oh-my-opencode/test-setup.ts +0 -6
  475. package/oh-my-opencode/tsconfig.json +0 -20
@@ -1,221 +0,0 @@
1
- import { spawn } from "bun"
2
- import { createRequire } from "module"
3
- import { dirname, join } from "path"
4
- import { existsSync } from "fs"
5
- import * as fs from "fs"
6
- import { tmpdir } from "os"
7
- import { getCachedBinaryPath, ensureCommentCheckerBinary } from "./downloader"
8
-
9
- const DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1"
10
- const DEBUG_FILE = join(tmpdir(), "comment-checker-debug.log")
11
-
12
- function debugLog(...args: unknown[]) {
13
- if (DEBUG) {
14
- const msg = `[${new Date().toISOString()}] [comment-checker:cli] ${args.map(a => typeof a === 'object' ? JSON.stringify(a, null, 2) : String(a)).join(' ')}\n`
15
- fs.appendFileSync(DEBUG_FILE, msg)
16
- }
17
- }
18
-
19
- function getBinaryName(): string {
20
- return process.platform === "win32" ? "comment-checker.exe" : "comment-checker"
21
- }
22
-
23
- function findCommentCheckerPathSync(): string | null {
24
- const binaryName = getBinaryName()
25
-
26
- // Check cached binary first (safest path - no module resolution needed)
27
- const cachedPath = getCachedBinaryPath()
28
- if (cachedPath) {
29
- debugLog("found binary in cache:", cachedPath)
30
- return cachedPath
31
- }
32
-
33
- // Guard against undefined import.meta.url (can happen on Windows during plugin loading)
34
- if (!import.meta.url) {
35
- debugLog("import.meta.url is undefined, skipping package resolution")
36
- return null
37
- }
38
-
39
- try {
40
- const require = createRequire(import.meta.url)
41
- const cliPkgPath = require.resolve("@code-yeongyu/comment-checker/package.json")
42
- const cliDir = dirname(cliPkgPath)
43
- const binaryPath = join(cliDir, "bin", binaryName)
44
-
45
- if (existsSync(binaryPath)) {
46
- debugLog("found binary in main package:", binaryPath)
47
- return binaryPath
48
- }
49
- } catch (err) {
50
- debugLog("main package not installed or resolution failed:", err)
51
- }
52
-
53
- debugLog("no binary found in known locations")
54
- return null
55
- }
56
-
57
- // Cached resolved path
58
- let resolvedCliPath: string | null = null
59
- let initPromise: Promise<string | null> | null = null
60
-
61
- /**
62
- * Asynchronously get comment-checker binary path.
63
- * Will trigger lazy download if binary not found.
64
- */
65
- export async function getCommentCheckerPath(): Promise<string | null> {
66
- // Return cached path if already resolved
67
- if (resolvedCliPath !== null) {
68
- return resolvedCliPath
69
- }
70
-
71
- // Return existing promise if initialization is in progress
72
- if (initPromise) {
73
- return initPromise
74
- }
75
-
76
- initPromise = (async () => {
77
- // First try sync path resolution
78
- const syncPath = findCommentCheckerPathSync()
79
- if (syncPath && existsSync(syncPath)) {
80
- resolvedCliPath = syncPath
81
- debugLog("using sync-resolved path:", syncPath)
82
- return syncPath
83
- }
84
-
85
- // Lazy download if not found
86
- debugLog("triggering lazy download...")
87
- const downloadedPath = await ensureCommentCheckerBinary()
88
- if (downloadedPath) {
89
- resolvedCliPath = downloadedPath
90
- debugLog("using downloaded path:", downloadedPath)
91
- return downloadedPath
92
- }
93
-
94
- debugLog("no binary available")
95
- return null
96
- })()
97
-
98
- return initPromise
99
- }
100
-
101
- /**
102
- * Synchronously get comment-checker path (no download).
103
- * Returns cached path or searches known locations.
104
- */
105
- export function getCommentCheckerPathSync(): string | null {
106
- return resolvedCliPath ?? findCommentCheckerPathSync()
107
- }
108
-
109
- /**
110
- * Start background initialization.
111
- * Call this early to trigger download while other init happens.
112
- */
113
- export function startBackgroundInit(): void {
114
- if (!initPromise) {
115
- initPromise = getCommentCheckerPath()
116
- initPromise.then(path => {
117
- debugLog("background init complete:", path || "no binary")
118
- }).catch(err => {
119
- debugLog("background init error:", err)
120
- })
121
- }
122
- }
123
-
124
- export interface HookInput {
125
- session_id: string
126
- tool_name: string
127
- transcript_path: string
128
- cwd: string
129
- hook_event_name: string
130
- tool_input: {
131
- file_path?: string
132
- content?: string
133
- old_string?: string
134
- new_string?: string
135
- edits?: Array<{ old_string: string; new_string: string }>
136
- }
137
- tool_response?: unknown
138
- }
139
-
140
- export interface CheckResult {
141
- hasComments: boolean
142
- message: string
143
- }
144
-
145
- /**
146
- * Run comment-checker CLI with given input.
147
- * @param input Hook input to check
148
- * @param cliPath Optional explicit path to CLI binary
149
- * @param customPrompt Optional custom prompt to replace default warning message
150
- */
151
- export async function runCommentChecker(input: HookInput, cliPath?: string, customPrompt?: string): Promise<CheckResult> {
152
- const binaryPath = cliPath ?? resolvedCliPath ?? getCommentCheckerPathSync()
153
-
154
- if (!binaryPath) {
155
- debugLog("comment-checker binary not found")
156
- return { hasComments: false, message: "" }
157
- }
158
-
159
- if (!existsSync(binaryPath)) {
160
- debugLog("comment-checker binary does not exist:", binaryPath)
161
- return { hasComments: false, message: "" }
162
- }
163
-
164
- const jsonInput = JSON.stringify(input)
165
- debugLog("running comment-checker with input:", jsonInput.substring(0, 200))
166
-
167
- try {
168
- const args = [binaryPath]
169
- if (customPrompt) {
170
- args.push("--prompt", customPrompt)
171
- }
172
-
173
- const proc = spawn(args, {
174
- stdin: "pipe",
175
- stdout: "pipe",
176
- stderr: "pipe",
177
- })
178
-
179
- // Write JSON to stdin
180
- proc.stdin.write(jsonInput)
181
- proc.stdin.end()
182
-
183
- const stdout = await new Response(proc.stdout).text()
184
- const stderr = await new Response(proc.stderr).text()
185
- const exitCode = await proc.exited
186
-
187
- debugLog("exit code:", exitCode, "stdout length:", stdout.length, "stderr length:", stderr.length)
188
-
189
- if (exitCode === 0) {
190
- return { hasComments: false, message: "" }
191
- }
192
-
193
- if (exitCode === 2) {
194
- // Comments detected - message is in stderr
195
- return { hasComments: true, message: stderr }
196
- }
197
-
198
- // Error case
199
- debugLog("unexpected exit code:", exitCode, "stderr:", stderr)
200
- return { hasComments: false, message: "" }
201
- } catch (err) {
202
- debugLog("failed to run comment-checker:", err)
203
- return { hasComments: false, message: "" }
204
- }
205
- }
206
-
207
- /**
208
- * Check if CLI is available (sync check, no download).
209
- */
210
- export function isCliAvailable(): boolean {
211
- const path = getCommentCheckerPathSync()
212
- return path !== null && existsSync(path)
213
- }
214
-
215
- /**
216
- * Check if CLI will be available (async, may trigger download).
217
- */
218
- export async function ensureCliAvailable(): Promise<boolean> {
219
- const path = await getCommentCheckerPath()
220
- return path !== null && existsSync(path)
221
- }
@@ -1,196 +0,0 @@
1
- import { spawn } from "bun"
2
- import { existsSync, mkdirSync, chmodSync, unlinkSync, appendFileSync } from "fs"
3
- import { join } from "path"
4
- import { homedir, tmpdir } from "os"
5
- import { createRequire } from "module"
6
- import { extractZip } from "../../shared"
7
-
8
- const DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1"
9
- const DEBUG_FILE = join(tmpdir(), "comment-checker-debug.log")
10
-
11
- function debugLog(...args: unknown[]) {
12
- if (DEBUG) {
13
- const msg = `[${new Date().toISOString()}] [comment-checker:downloader] ${args.map(a => typeof a === 'object' ? JSON.stringify(a, null, 2) : String(a)).join(' ')}\n`
14
- appendFileSync(DEBUG_FILE, msg)
15
- }
16
- }
17
-
18
- const REPO = "code-yeongyu/go-claude-code-comment-checker"
19
-
20
- interface PlatformInfo {
21
- os: string
22
- arch: string
23
- ext: "tar.gz" | "zip"
24
- }
25
-
26
- const PLATFORM_MAP: Record<string, PlatformInfo> = {
27
- "darwin-arm64": { os: "darwin", arch: "arm64", ext: "tar.gz" },
28
- "darwin-x64": { os: "darwin", arch: "amd64", ext: "tar.gz" },
29
- "linux-arm64": { os: "linux", arch: "arm64", ext: "tar.gz" },
30
- "linux-x64": { os: "linux", arch: "amd64", ext: "tar.gz" },
31
- "win32-x64": { os: "windows", arch: "amd64", ext: "zip" },
32
- }
33
-
34
- /**
35
- * Get the cache directory for oh-my-opencode binaries.
36
- * On Windows: Uses %LOCALAPPDATA% or %APPDATA% (Windows conventions)
37
- * On Unix: Follows XDG Base Directory Specification
38
- */
39
- export function getCacheDir(): string {
40
- if (process.platform === "win32") {
41
- const localAppData = process.env.LOCALAPPDATA || process.env.APPDATA
42
- const base = localAppData || join(homedir(), "AppData", "Local")
43
- return join(base, "oh-my-opencode", "bin")
44
- }
45
-
46
- const xdgCache = process.env.XDG_CACHE_HOME
47
- const base = xdgCache || join(homedir(), ".cache")
48
- return join(base, "oh-my-opencode", "bin")
49
- }
50
-
51
- /**
52
- * Get the binary name based on platform.
53
- */
54
- export function getBinaryName(): string {
55
- return process.platform === "win32" ? "comment-checker.exe" : "comment-checker"
56
- }
57
-
58
- /**
59
- * Get the cached binary path if it exists.
60
- */
61
- export function getCachedBinaryPath(): string | null {
62
- const binaryPath = join(getCacheDir(), getBinaryName())
63
- return existsSync(binaryPath) ? binaryPath : null
64
- }
65
-
66
- /**
67
- * Get the version from the installed @code-yeongyu/comment-checker package.
68
- */
69
- function getPackageVersion(): string {
70
- try {
71
- const require = createRequire(import.meta.url)
72
- const pkg = require("@code-yeongyu/comment-checker/package.json")
73
- return pkg.version
74
- } catch {
75
- // Fallback to hardcoded version if package not found
76
- return "0.4.1"
77
- }
78
- }
79
-
80
- /**
81
- * Extract tar.gz archive using system tar command.
82
- */
83
- async function extractTarGz(archivePath: string, destDir: string): Promise<void> {
84
- debugLog("Extracting tar.gz:", archivePath, "to", destDir)
85
-
86
- const proc = spawn(["tar", "-xzf", archivePath, "-C", destDir], {
87
- stdout: "pipe",
88
- stderr: "pipe",
89
- })
90
-
91
- const exitCode = await proc.exited
92
-
93
- if (exitCode !== 0) {
94
- const stderr = await new Response(proc.stderr).text()
95
- throw new Error(`tar extraction failed (exit ${exitCode}): ${stderr}`)
96
- }
97
- }
98
-
99
-
100
-
101
- /**
102
- * Download the comment-checker binary from GitHub Releases.
103
- * Returns the path to the downloaded binary, or null on failure.
104
- */
105
- export async function downloadCommentChecker(): Promise<string | null> {
106
- const platformKey = `${process.platform}-${process.arch}`
107
- const platformInfo = PLATFORM_MAP[platformKey]
108
-
109
- if (!platformInfo) {
110
- debugLog(`Unsupported platform: ${platformKey}`)
111
- return null
112
- }
113
-
114
- const cacheDir = getCacheDir()
115
- const binaryName = getBinaryName()
116
- const binaryPath = join(cacheDir, binaryName)
117
-
118
- // Already exists in cache
119
- if (existsSync(binaryPath)) {
120
- debugLog("Binary already cached at:", binaryPath)
121
- return binaryPath
122
- }
123
-
124
- const version = getPackageVersion()
125
- const { os, arch, ext } = platformInfo
126
- const assetName = `comment-checker_v${version}_${os}_${arch}.${ext}`
127
- const downloadUrl = `https://github.com/${REPO}/releases/download/v${version}/${assetName}`
128
-
129
- debugLog(`Downloading from: ${downloadUrl}`)
130
- console.log(`[oh-my-opencode] Downloading comment-checker binary...`)
131
-
132
- try {
133
- // Ensure cache directory exists
134
- if (!existsSync(cacheDir)) {
135
- mkdirSync(cacheDir, { recursive: true })
136
- }
137
-
138
- // Download with fetch() - Bun handles redirects automatically
139
- const response = await fetch(downloadUrl, { redirect: "follow" })
140
-
141
- if (!response.ok) {
142
- throw new Error(`HTTP ${response.status}: ${response.statusText}`)
143
- }
144
-
145
- const archivePath = join(cacheDir, assetName)
146
- const arrayBuffer = await response.arrayBuffer()
147
- await Bun.write(archivePath, arrayBuffer)
148
-
149
- debugLog(`Downloaded archive to: ${archivePath}`)
150
-
151
- // Extract based on file type
152
- if (ext === "tar.gz") {
153
- await extractTarGz(archivePath, cacheDir)
154
- } else {
155
- await extractZip(archivePath, cacheDir)
156
- }
157
-
158
- // Clean up archive
159
- if (existsSync(archivePath)) {
160
- unlinkSync(archivePath)
161
- }
162
-
163
- // Set execute permission on Unix
164
- if (process.platform !== "win32" && existsSync(binaryPath)) {
165
- chmodSync(binaryPath, 0o755)
166
- }
167
-
168
- debugLog(`Successfully downloaded binary to: ${binaryPath}`)
169
- console.log(`[oh-my-opencode] comment-checker binary ready.`)
170
-
171
- return binaryPath
172
-
173
- } catch (err) {
174
- debugLog(`Failed to download: ${err}`)
175
- console.error(`[oh-my-opencode] Failed to download comment-checker: ${err instanceof Error ? err.message : err}`)
176
- console.error(`[oh-my-opencode] Comment checking disabled.`)
177
- return null
178
- }
179
- }
180
-
181
- /**
182
- * Ensure the comment-checker binary is available.
183
- * First checks cache, then downloads if needed.
184
- * Returns the binary path or null if unavailable.
185
- */
186
- export async function ensureCommentCheckerBinary(): Promise<string | null> {
187
- // Check cache first
188
- const cachedPath = getCachedBinaryPath()
189
- if (cachedPath) {
190
- debugLog("Using cached binary:", cachedPath)
191
- return cachedPath
192
- }
193
-
194
- // Download if not cached
195
- return downloadCommentChecker()
196
- }
@@ -1,171 +0,0 @@
1
- import type { PendingCall } from "./types"
2
- import { runCommentChecker, getCommentCheckerPath, startBackgroundInit, type HookInput } from "./cli"
3
- import type { CommentCheckerConfig } from "../../config/schema"
4
-
5
- import * as fs from "fs"
6
- import { existsSync } from "fs"
7
- import { tmpdir } from "os"
8
- import { join } from "path"
9
-
10
- const DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1"
11
- const DEBUG_FILE = join(tmpdir(), "comment-checker-debug.log")
12
-
13
- function debugLog(...args: unknown[]) {
14
- if (DEBUG) {
15
- const msg = `[${new Date().toISOString()}] [comment-checker:hook] ${args.map(a => typeof a === 'object' ? JSON.stringify(a, null, 2) : String(a)).join(' ')}\n`
16
- fs.appendFileSync(DEBUG_FILE, msg)
17
- }
18
- }
19
-
20
- const pendingCalls = new Map<string, PendingCall>()
21
- const PENDING_CALL_TTL = 60_000
22
-
23
- let cliPathPromise: Promise<string | null> | null = null
24
- let cleanupIntervalStarted = false
25
-
26
- function cleanupOldPendingCalls(): void {
27
- const now = Date.now()
28
- for (const [callID, call] of pendingCalls) {
29
- if (now - call.timestamp > PENDING_CALL_TTL) {
30
- pendingCalls.delete(callID)
31
- }
32
- }
33
- }
34
-
35
- export function createCommentCheckerHooks(config?: CommentCheckerConfig) {
36
- debugLog("createCommentCheckerHooks called", { config })
37
-
38
- if (!cleanupIntervalStarted) {
39
- cleanupIntervalStarted = true
40
- setInterval(cleanupOldPendingCalls, 10_000)
41
- }
42
-
43
- // Start background CLI initialization (may trigger lazy download)
44
- startBackgroundInit()
45
- cliPathPromise = getCommentCheckerPath()
46
- cliPathPromise.then(path => {
47
- debugLog("CLI path resolved:", path || "disabled (no binary)")
48
- }).catch(err => {
49
- debugLog("CLI path resolution error:", err)
50
- })
51
-
52
- return {
53
- "tool.execute.before": async (
54
- input: { tool: string; sessionID: string; callID: string },
55
- output: { args: Record<string, unknown> }
56
- ): Promise<void> => {
57
- debugLog("tool.execute.before:", { tool: input.tool, callID: input.callID, args: output.args })
58
-
59
- const toolLower = input.tool.toLowerCase()
60
- if (toolLower !== "write" && toolLower !== "edit" && toolLower !== "multiedit") {
61
- debugLog("skipping non-write/edit tool:", toolLower)
62
- return
63
- }
64
-
65
- const filePath = (output.args.filePath ?? output.args.file_path ?? output.args.path) as string | undefined
66
- const content = output.args.content as string | undefined
67
- const oldString = output.args.oldString ?? output.args.old_string as string | undefined
68
- const newString = output.args.newString ?? output.args.new_string as string | undefined
69
- const edits = output.args.edits as Array<{ old_string: string; new_string: string }> | undefined
70
-
71
- debugLog("extracted filePath:", filePath)
72
-
73
- if (!filePath) {
74
- debugLog("no filePath found")
75
- return
76
- }
77
-
78
- debugLog("registering pendingCall:", { callID: input.callID, filePath, tool: toolLower })
79
- pendingCalls.set(input.callID, {
80
- filePath,
81
- content,
82
- oldString: oldString as string | undefined,
83
- newString: newString as string | undefined,
84
- edits,
85
- tool: toolLower as "write" | "edit" | "multiedit",
86
- sessionID: input.sessionID,
87
- timestamp: Date.now(),
88
- })
89
- },
90
-
91
- "tool.execute.after": async (
92
- input: { tool: string; sessionID: string; callID: string },
93
- output: { title: string; output: string; metadata: unknown }
94
- ): Promise<void> => {
95
- debugLog("tool.execute.after:", { tool: input.tool, callID: input.callID })
96
-
97
- const pendingCall = pendingCalls.get(input.callID)
98
- if (!pendingCall) {
99
- debugLog("no pendingCall found for:", input.callID)
100
- return
101
- }
102
-
103
- pendingCalls.delete(input.callID)
104
- debugLog("processing pendingCall:", pendingCall)
105
-
106
- // Only skip if the output indicates a tool execution failure
107
- const outputLower = output.output.toLowerCase()
108
- const isToolFailure =
109
- outputLower.includes("error:") ||
110
- outputLower.includes("failed to") ||
111
- outputLower.includes("could not") ||
112
- outputLower.startsWith("error")
113
-
114
- if (isToolFailure) {
115
- debugLog("skipping due to tool failure in output")
116
- return
117
- }
118
-
119
- try {
120
- // Wait for CLI path resolution
121
- const cliPath = await cliPathPromise
122
-
123
- if (!cliPath || !existsSync(cliPath)) {
124
- // CLI not available - silently skip comment checking
125
- debugLog("CLI not available, skipping comment check")
126
- return
127
- }
128
-
129
- // CLI mode only
130
- debugLog("using CLI:", cliPath)
131
- await processWithCli(input, pendingCall, output, cliPath, config?.custom_prompt)
132
- } catch (err) {
133
- debugLog("tool.execute.after failed:", err)
134
- }
135
- },
136
- }
137
- }
138
-
139
- async function processWithCli(
140
- input: { tool: string; sessionID: string; callID: string },
141
- pendingCall: PendingCall,
142
- output: { output: string },
143
- cliPath: string,
144
- customPrompt?: string
145
- ): Promise<void> {
146
- debugLog("using CLI mode with path:", cliPath)
147
-
148
- const hookInput: HookInput = {
149
- session_id: pendingCall.sessionID,
150
- tool_name: pendingCall.tool.charAt(0).toUpperCase() + pendingCall.tool.slice(1),
151
- transcript_path: "",
152
- cwd: process.cwd(),
153
- hook_event_name: "PostToolUse",
154
- tool_input: {
155
- file_path: pendingCall.filePath,
156
- content: pendingCall.content,
157
- old_string: pendingCall.oldString,
158
- new_string: pendingCall.newString,
159
- edits: pendingCall.edits,
160
- },
161
- }
162
-
163
- const result = await runCommentChecker(hookInput, cliPath, customPrompt)
164
-
165
- if (result.hasComments && result.message) {
166
- debugLog("CLI detected comments, appending message")
167
- output.output += `\n\n${result.message}`
168
- } else {
169
- debugLog("CLI: no comments detected")
170
- }
171
- }
@@ -1,33 +0,0 @@
1
- export type CommentType = "line" | "block" | "docstring"
2
-
3
- export interface CommentInfo {
4
- text: string
5
- lineNumber: number
6
- filePath: string
7
- commentType: CommentType
8
- isDocstring: boolean
9
- metadata?: Record<string, string>
10
- }
11
-
12
- export interface PendingCall {
13
- filePath: string
14
- content?: string
15
- oldString?: string
16
- newString?: string
17
- edits?: Array<{ old_string: string; new_string: string }>
18
- tool: "write" | "edit" | "multiedit"
19
- sessionID: string
20
- timestamp: number
21
- }
22
-
23
- export interface FileComments {
24
- filePath: string
25
- comments: CommentInfo[]
26
- }
27
-
28
- export interface FilterResult {
29
- shouldSkip: boolean
30
- reason?: string
31
- }
32
-
33
- export type CommentFilter = (comment: CommentInfo) => FilterResult
@@ -1,61 +0,0 @@
1
- import { injectHookMessage } from "../../features/hook-message-injector"
2
- import { log } from "../../shared/logger"
3
- import { createSystemDirective, SystemDirectiveTypes } from "../../shared/system-directive"
4
-
5
- export interface SummarizeContext {
6
- sessionID: string
7
- providerID: string
8
- modelID: string
9
- usageRatio: number
10
- directory: string
11
- }
12
-
13
- const SUMMARIZE_CONTEXT_PROMPT = `${createSystemDirective(SystemDirectiveTypes.COMPACTION_CONTEXT)}
14
-
15
- When summarizing this session, you MUST include the following sections in your summary:
16
-
17
- ## 1. User Requests (As-Is)
18
- - List all original user requests exactly as they were stated
19
- - Preserve the user's exact wording and intent
20
-
21
- ## 2. Final Goal
22
- - What the user ultimately wanted to achieve
23
- - The end result or deliverable expected
24
-
25
- ## 3. Work Completed
26
- - What has been done so far
27
- - Files created/modified
28
- - Features implemented
29
- - Problems solved
30
-
31
- ## 4. Remaining Tasks
32
- - What still needs to be done
33
- - Pending items from the original request
34
- - Follow-up tasks identified during the work
35
-
36
- ## 5. MUST NOT Do (Critical Constraints)
37
- - Things that were explicitly forbidden
38
- - Approaches that failed and should not be retried
39
- - User's explicit restrictions or preferences
40
- - Anti-patterns identified during the session
41
-
42
- This context is critical for maintaining continuity after compaction.
43
- `
44
-
45
- export function createCompactionContextInjector() {
46
- return async (ctx: SummarizeContext): Promise<void> => {
47
- log("[compaction-context-injector] injecting context", { sessionID: ctx.sessionID })
48
-
49
- const success = injectHookMessage(ctx.sessionID, SUMMARIZE_CONTEXT_PROMPT, {
50
- agent: "general",
51
- model: { providerID: ctx.providerID, modelID: ctx.modelID },
52
- path: { cwd: ctx.directory },
53
- })
54
-
55
- if (success) {
56
- log("[compaction-context-injector] context injected", { sessionID: ctx.sessionID })
57
- } else {
58
- log("[compaction-context-injector] injection failed", { sessionID: ctx.sessionID })
59
- }
60
- }
61
- }