oh-my-claude-sisyphus 3.7.2 → 3.7.3

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 (325) hide show
  1. package/dist/__tests__/compatibility-security.test.d.ts +13 -0
  2. package/dist/__tests__/compatibility-security.test.d.ts.map +1 -0
  3. package/dist/__tests__/compatibility-security.test.js +403 -0
  4. package/dist/__tests__/compatibility-security.test.js.map +1 -0
  5. package/dist/__tests__/compatibility.test.d.ts +7 -0
  6. package/dist/__tests__/compatibility.test.d.ts.map +1 -0
  7. package/dist/__tests__/compatibility.test.js +484 -0
  8. package/dist/__tests__/compatibility.test.js.map +1 -0
  9. package/dist/__tests__/hud/analytics-display.test.js +4 -0
  10. package/dist/__tests__/hud/analytics-display.test.js.map +1 -1
  11. package/dist/cli/analytics.js +0 -0
  12. package/dist/cli/index.js +0 -0
  13. package/dist/compatibility/discovery.d.ts +58 -0
  14. package/dist/compatibility/discovery.d.ts.map +1 -0
  15. package/dist/compatibility/discovery.js +619 -0
  16. package/dist/compatibility/discovery.js.map +1 -0
  17. package/dist/compatibility/index.d.ts +51 -0
  18. package/dist/compatibility/index.d.ts.map +1 -0
  19. package/dist/compatibility/index.js +72 -0
  20. package/dist/compatibility/index.js.map +1 -0
  21. package/dist/compatibility/mcp-bridge.d.ts +138 -0
  22. package/dist/compatibility/mcp-bridge.d.ts.map +1 -0
  23. package/dist/compatibility/mcp-bridge.js +524 -0
  24. package/dist/compatibility/mcp-bridge.js.map +1 -0
  25. package/dist/compatibility/permission-adapter.d.ts +79 -0
  26. package/dist/compatibility/permission-adapter.d.ts.map +1 -0
  27. package/dist/compatibility/permission-adapter.js +369 -0
  28. package/dist/compatibility/permission-adapter.js.map +1 -0
  29. package/dist/compatibility/registry.d.ts +161 -0
  30. package/dist/compatibility/registry.d.ts.map +1 -0
  31. package/dist/compatibility/registry.js +389 -0
  32. package/dist/compatibility/registry.js.map +1 -0
  33. package/dist/compatibility/types.d.ts +249 -0
  34. package/dist/compatibility/types.d.ts.map +1 -0
  35. package/dist/compatibility/types.js +8 -0
  36. package/dist/compatibility/types.js.map +1 -0
  37. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
  38. package/dist/features/rate-limit-wait/daemon.js +3 -0
  39. package/dist/features/rate-limit-wait/daemon.js.map +1 -1
  40. package/dist/hud/analytics-display.d.ts +1 -1
  41. package/dist/hud/analytics-display.d.ts.map +1 -1
  42. package/dist/hud/analytics-display.js +24 -7
  43. package/dist/hud/analytics-display.js.map +1 -1
  44. package/docs/COMPATIBILITY.md +1051 -0
  45. package/package.json +3 -1
  46. package/dist/__tests__/analytics/analytics-summary.test.d.ts +0 -2
  47. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +0 -1
  48. package/dist/__tests__/analytics/analytics-summary.test.js +0 -267
  49. package/dist/__tests__/analytics/analytics-summary.test.js.map +0 -1
  50. package/dist/__tests__/analytics/cost-estimator.test.d.ts +0 -2
  51. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +0 -1
  52. package/dist/__tests__/analytics/cost-estimator.test.js +0 -212
  53. package/dist/__tests__/analytics/cost-estimator.test.js.map +0 -1
  54. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +0 -7
  55. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +0 -1
  56. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +0 -374
  57. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +0 -1
  58. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +0 -2
  59. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +0 -1
  60. package/dist/__tests__/hud/auto-tracking.integration.test.js +0 -12
  61. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +0 -1
  62. package/dist/__tests__/learned-skills/config.test.d.ts +0 -2
  63. package/dist/__tests__/learned-skills/config.test.d.ts.map +0 -1
  64. package/dist/__tests__/learned-skills/config.test.js +0 -37
  65. package/dist/__tests__/learned-skills/config.test.js.map +0 -1
  66. package/dist/__tests__/learned-skills/detector.test.d.ts +0 -2
  67. package/dist/__tests__/learned-skills/detector.test.d.ts.map +0 -1
  68. package/dist/__tests__/learned-skills/detector.test.js +0 -99
  69. package/dist/__tests__/learned-skills/detector.test.js.map +0 -1
  70. package/dist/__tests__/learned-skills/finder.test.d.ts +0 -2
  71. package/dist/__tests__/learned-skills/finder.test.d.ts.map +0 -1
  72. package/dist/__tests__/learned-skills/finder.test.js +0 -59
  73. package/dist/__tests__/learned-skills/finder.test.js.map +0 -1
  74. package/dist/__tests__/learned-skills/loader.test.d.ts +0 -2
  75. package/dist/__tests__/learned-skills/loader.test.d.ts.map +0 -1
  76. package/dist/__tests__/learned-skills/loader.test.js +0 -69
  77. package/dist/__tests__/learned-skills/loader.test.js.map +0 -1
  78. package/dist/__tests__/learned-skills/parser.test.d.ts +0 -2
  79. package/dist/__tests__/learned-skills/parser.test.d.ts.map +0 -1
  80. package/dist/__tests__/learned-skills/parser.test.js +0 -81
  81. package/dist/__tests__/learned-skills/parser.test.js.map +0 -1
  82. package/dist/__tests__/learned-skills/validator.test.d.ts +0 -2
  83. package/dist/__tests__/learned-skills/validator.test.d.ts.map +0 -1
  84. package/dist/__tests__/learned-skills/validator.test.js +0 -85
  85. package/dist/__tests__/learned-skills/validator.test.js.map +0 -1
  86. package/dist/agents/codex-agents.d.ts +0 -20
  87. package/dist/agents/codex-agents.d.ts.map +0 -1
  88. package/dist/agents/codex-agents.js +0 -36
  89. package/dist/agents/codex-agents.js.map +0 -1
  90. package/dist/agents/document-writer.d.ts +0 -11
  91. package/dist/agents/document-writer.d.ts.map +0 -1
  92. package/dist/agents/document-writer.js +0 -209
  93. package/dist/agents/document-writer.js.map +0 -1
  94. package/dist/agents/frontend-engineer.d.ts +0 -11
  95. package/dist/agents/frontend-engineer.d.ts.map +0 -1
  96. package/dist/agents/frontend-engineer.js +0 -115
  97. package/dist/agents/frontend-engineer.js.map +0 -1
  98. package/dist/agents/librarian.d.ts +0 -12
  99. package/dist/agents/librarian.d.ts.map +0 -1
  100. package/dist/agents/librarian.js +0 -103
  101. package/dist/agents/librarian.js.map +0 -1
  102. package/dist/agents/metis.d.ts +0 -12
  103. package/dist/agents/metis.d.ts.map +0 -1
  104. package/dist/agents/metis.js +0 -117
  105. package/dist/agents/metis.js.map +0 -1
  106. package/dist/agents/momus.d.ts +0 -12
  107. package/dist/agents/momus.d.ts.map +0 -1
  108. package/dist/agents/momus.js +0 -128
  109. package/dist/agents/momus.js.map +0 -1
  110. package/dist/agents/multimodal-looker.d.ts +0 -11
  111. package/dist/agents/multimodal-looker.d.ts.map +0 -1
  112. package/dist/agents/multimodal-looker.js +0 -70
  113. package/dist/agents/multimodal-looker.js.map +0 -1
  114. package/dist/agents/oracle.d.ts +0 -13
  115. package/dist/agents/oracle.d.ts.map +0 -1
  116. package/dist/agents/oracle.js +0 -191
  117. package/dist/agents/oracle.js.map +0 -1
  118. package/dist/agents/orchestrator-sisyphus.d.ts +0 -11
  119. package/dist/agents/orchestrator-sisyphus.d.ts.map +0 -1
  120. package/dist/agents/orchestrator-sisyphus.js +0 -115
  121. package/dist/agents/orchestrator-sisyphus.js.map +0 -1
  122. package/dist/agents/prometheus.d.ts +0 -12
  123. package/dist/agents/prometheus.d.ts.map +0 -1
  124. package/dist/agents/prometheus.js +0 -195
  125. package/dist/agents/prometheus.js.map +0 -1
  126. package/dist/agents/sisyphus-junior.d.ts +0 -12
  127. package/dist/agents/sisyphus-junior.d.ts.map +0 -1
  128. package/dist/agents/sisyphus-junior.js +0 -93
  129. package/dist/agents/sisyphus-junior.js.map +0 -1
  130. package/dist/cli/components/CostDashboard.d.ts +0 -15
  131. package/dist/cli/components/CostDashboard.d.ts.map +0 -1
  132. package/dist/cli/components/CostDashboard.js +0 -15
  133. package/dist/cli/components/CostDashboard.js.map +0 -1
  134. package/dist/cli/components/LiveStats.d.ts +0 -16
  135. package/dist/cli/components/LiveStats.d.ts.map +0 -1
  136. package/dist/cli/components/LiveStats.js +0 -16
  137. package/dist/cli/components/LiveStats.js.map +0 -1
  138. package/dist/cli/components/SessionBrowser.d.ts +0 -14
  139. package/dist/cli/components/SessionBrowser.d.ts.map +0 -1
  140. package/dist/cli/components/SessionBrowser.js +0 -14
  141. package/dist/cli/components/SessionBrowser.js.map +0 -1
  142. package/dist/cli/tui.d.ts +0 -21
  143. package/dist/cli/tui.d.ts.map +0 -1
  144. package/dist/cli/tui.js +0 -21
  145. package/dist/cli/tui.js.map +0 -1
  146. package/dist/hooks/autopilot/signals.d.ts +0 -20
  147. package/dist/hooks/autopilot/signals.d.ts.map +0 -1
  148. package/dist/hooks/autopilot/signals.js +0 -75
  149. package/dist/hooks/autopilot/signals.js.map +0 -1
  150. package/dist/hooks/autopilot/summary.d.ts +0 -27
  151. package/dist/hooks/autopilot/summary.d.ts.map +0 -1
  152. package/dist/hooks/autopilot/summary.js +0 -160
  153. package/dist/hooks/autopilot/summary.js.map +0 -1
  154. package/dist/hooks/autopilot/transition.d.ts +0 -39
  155. package/dist/hooks/autopilot/transition.d.ts.map +0 -1
  156. package/dist/hooks/autopilot/transition.js +0 -216
  157. package/dist/hooks/autopilot/transition.js.map +0 -1
  158. package/dist/hooks/context-window-limit-recovery/constants.d.ts +0 -28
  159. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +0 -1
  160. package/dist/hooks/context-window-limit-recovery/constants.js +0 -85
  161. package/dist/hooks/context-window-limit-recovery/constants.js.map +0 -1
  162. package/dist/hooks/context-window-limit-recovery/index.d.ts +0 -62
  163. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +0 -1
  164. package/dist/hooks/context-window-limit-recovery/index.js +0 -201
  165. package/dist/hooks/context-window-limit-recovery/index.js.map +0 -1
  166. package/dist/hooks/context-window-limit-recovery/parser.d.ts +0 -31
  167. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +0 -1
  168. package/dist/hooks/context-window-limit-recovery/parser.js +0 -241
  169. package/dist/hooks/context-window-limit-recovery/parser.js.map +0 -1
  170. package/dist/hooks/context-window-limit-recovery/types.d.ts +0 -84
  171. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +0 -1
  172. package/dist/hooks/context-window-limit-recovery/types.js +0 -34
  173. package/dist/hooks/context-window-limit-recovery/types.js.map +0 -1
  174. package/dist/hooks/edit-error-recovery/index.d.ts +0 -62
  175. package/dist/hooks/edit-error-recovery/index.d.ts.map +0 -1
  176. package/dist/hooks/edit-error-recovery/index.js +0 -89
  177. package/dist/hooks/edit-error-recovery/index.js.map +0 -1
  178. package/dist/hooks/learned-skills/config.d.ts +0 -53
  179. package/dist/hooks/learned-skills/config.d.ts.map +0 -1
  180. package/dist/hooks/learned-skills/config.js +0 -103
  181. package/dist/hooks/learned-skills/config.js.map +0 -1
  182. package/dist/hooks/learned-skills/constants.d.ts +0 -24
  183. package/dist/hooks/learned-skills/constants.d.ts.map +0 -1
  184. package/dist/hooks/learned-skills/constants.js +0 -26
  185. package/dist/hooks/learned-skills/constants.js.map +0 -1
  186. package/dist/hooks/learned-skills/detection-hook.d.ts +0 -39
  187. package/dist/hooks/learned-skills/detection-hook.d.ts.map +0 -1
  188. package/dist/hooks/learned-skills/detection-hook.js +0 -83
  189. package/dist/hooks/learned-skills/detection-hook.js.map +0 -1
  190. package/dist/hooks/learned-skills/detector.d.ts +0 -30
  191. package/dist/hooks/learned-skills/detector.d.ts.map +0 -1
  192. package/dist/hooks/learned-skills/detector.js +0 -150
  193. package/dist/hooks/learned-skills/detector.js.map +0 -1
  194. package/dist/hooks/learned-skills/finder.d.ts +0 -21
  195. package/dist/hooks/learned-skills/finder.d.ts.map +0 -1
  196. package/dist/hooks/learned-skills/finder.js +0 -117
  197. package/dist/hooks/learned-skills/finder.js.map +0 -1
  198. package/dist/hooks/learned-skills/index.d.ts +0 -62
  199. package/dist/hooks/learned-skills/index.d.ts.map +0 -1
  200. package/dist/hooks/learned-skills/index.js +0 -137
  201. package/dist/hooks/learned-skills/index.js.map +0 -1
  202. package/dist/hooks/learned-skills/loader.d.ts +0 -20
  203. package/dist/hooks/learned-skills/loader.d.ts.map +0 -1
  204. package/dist/hooks/learned-skills/loader.js +0 -107
  205. package/dist/hooks/learned-skills/loader.js.map +0 -1
  206. package/dist/hooks/learned-skills/parser.d.ts +0 -21
  207. package/dist/hooks/learned-skills/parser.d.ts.map +0 -1
  208. package/dist/hooks/learned-skills/parser.js +0 -190
  209. package/dist/hooks/learned-skills/parser.js.map +0 -1
  210. package/dist/hooks/learned-skills/promotion.d.ts +0 -29
  211. package/dist/hooks/learned-skills/promotion.d.ts.map +0 -1
  212. package/dist/hooks/learned-skills/promotion.js +0 -87
  213. package/dist/hooks/learned-skills/promotion.js.map +0 -1
  214. package/dist/hooks/learned-skills/types.d.ts +0 -109
  215. package/dist/hooks/learned-skills/types.d.ts.map +0 -1
  216. package/dist/hooks/learned-skills/types.js +0 -8
  217. package/dist/hooks/learned-skills/types.js.map +0 -1
  218. package/dist/hooks/learned-skills/validator.d.ts +0 -15
  219. package/dist/hooks/learned-skills/validator.d.ts.map +0 -1
  220. package/dist/hooks/learned-skills/validator.js +0 -87
  221. package/dist/hooks/learned-skills/validator.js.map +0 -1
  222. package/dist/hooks/learned-skills/writer.d.ts +0 -27
  223. package/dist/hooks/learned-skills/writer.d.ts.map +0 -1
  224. package/dist/hooks/learned-skills/writer.js +0 -126
  225. package/dist/hooks/learned-skills/writer.js.map +0 -1
  226. package/dist/hooks/mnemosyne/config.d.ts +0 -53
  227. package/dist/hooks/mnemosyne/config.d.ts.map +0 -1
  228. package/dist/hooks/mnemosyne/config.js +0 -103
  229. package/dist/hooks/mnemosyne/config.js.map +0 -1
  230. package/dist/hooks/mnemosyne/constants.d.ts +0 -24
  231. package/dist/hooks/mnemosyne/constants.d.ts.map +0 -1
  232. package/dist/hooks/mnemosyne/constants.js +0 -26
  233. package/dist/hooks/mnemosyne/constants.js.map +0 -1
  234. package/dist/hooks/mnemosyne/detection-hook.d.ts +0 -39
  235. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +0 -1
  236. package/dist/hooks/mnemosyne/detection-hook.js +0 -83
  237. package/dist/hooks/mnemosyne/detection-hook.js.map +0 -1
  238. package/dist/hooks/mnemosyne/detector.d.ts +0 -30
  239. package/dist/hooks/mnemosyne/detector.d.ts.map +0 -1
  240. package/dist/hooks/mnemosyne/detector.js +0 -150
  241. package/dist/hooks/mnemosyne/detector.js.map +0 -1
  242. package/dist/hooks/mnemosyne/finder.d.ts +0 -21
  243. package/dist/hooks/mnemosyne/finder.d.ts.map +0 -1
  244. package/dist/hooks/mnemosyne/finder.js +0 -117
  245. package/dist/hooks/mnemosyne/finder.js.map +0 -1
  246. package/dist/hooks/mnemosyne/index.d.ts +0 -62
  247. package/dist/hooks/mnemosyne/index.d.ts.map +0 -1
  248. package/dist/hooks/mnemosyne/index.js +0 -137
  249. package/dist/hooks/mnemosyne/index.js.map +0 -1
  250. package/dist/hooks/mnemosyne/loader.d.ts +0 -20
  251. package/dist/hooks/mnemosyne/loader.d.ts.map +0 -1
  252. package/dist/hooks/mnemosyne/loader.js +0 -113
  253. package/dist/hooks/mnemosyne/loader.js.map +0 -1
  254. package/dist/hooks/mnemosyne/parser.d.ts +0 -21
  255. package/dist/hooks/mnemosyne/parser.d.ts.map +0 -1
  256. package/dist/hooks/mnemosyne/parser.js +0 -190
  257. package/dist/hooks/mnemosyne/parser.js.map +0 -1
  258. package/dist/hooks/mnemosyne/promotion.d.ts +0 -29
  259. package/dist/hooks/mnemosyne/promotion.d.ts.map +0 -1
  260. package/dist/hooks/mnemosyne/promotion.js +0 -87
  261. package/dist/hooks/mnemosyne/promotion.js.map +0 -1
  262. package/dist/hooks/mnemosyne/types.d.ts +0 -109
  263. package/dist/hooks/mnemosyne/types.d.ts.map +0 -1
  264. package/dist/hooks/mnemosyne/types.js +0 -8
  265. package/dist/hooks/mnemosyne/types.js.map +0 -1
  266. package/dist/hooks/mnemosyne/validator.d.ts +0 -15
  267. package/dist/hooks/mnemosyne/validator.d.ts.map +0 -1
  268. package/dist/hooks/mnemosyne/validator.js +0 -87
  269. package/dist/hooks/mnemosyne/validator.js.map +0 -1
  270. package/dist/hooks/mnemosyne/writer.d.ts +0 -27
  271. package/dist/hooks/mnemosyne/writer.d.ts.map +0 -1
  272. package/dist/hooks/mnemosyne/writer.js +0 -126
  273. package/dist/hooks/mnemosyne/writer.js.map +0 -1
  274. package/dist/hooks/ralph-loop/index.d.ts +0 -116
  275. package/dist/hooks/ralph-loop/index.d.ts.map +0 -1
  276. package/dist/hooks/ralph-loop/index.js +0 -322
  277. package/dist/hooks/ralph-loop/index.js.map +0 -1
  278. package/dist/hooks/ralph-prd/index.d.ts +0 -130
  279. package/dist/hooks/ralph-prd/index.d.ts.map +0 -1
  280. package/dist/hooks/ralph-prd/index.js +0 -310
  281. package/dist/hooks/ralph-prd/index.js.map +0 -1
  282. package/dist/hooks/ralph-progress/index.d.ts +0 -102
  283. package/dist/hooks/ralph-progress/index.d.ts.map +0 -1
  284. package/dist/hooks/ralph-progress/index.js +0 -408
  285. package/dist/hooks/ralph-progress/index.js.map +0 -1
  286. package/dist/hooks/ralph-verifier/index.d.ts +0 -72
  287. package/dist/hooks/ralph-verifier/index.d.ts.map +0 -1
  288. package/dist/hooks/ralph-verifier/index.js +0 -223
  289. package/dist/hooks/ralph-verifier/index.js.map +0 -1
  290. package/dist/hooks/session-recovery/constants.d.ts +0 -56
  291. package/dist/hooks/session-recovery/constants.d.ts.map +0 -1
  292. package/dist/hooks/session-recovery/constants.js +0 -78
  293. package/dist/hooks/session-recovery/constants.js.map +0 -1
  294. package/dist/hooks/session-recovery/index.d.ts +0 -53
  295. package/dist/hooks/session-recovery/index.d.ts.map +0 -1
  296. package/dist/hooks/session-recovery/index.js +0 -321
  297. package/dist/hooks/session-recovery/index.js.map +0 -1
  298. package/dist/hooks/session-recovery/storage.d.ts +0 -76
  299. package/dist/hooks/session-recovery/storage.d.ts.map +0 -1
  300. package/dist/hooks/session-recovery/storage.js +0 -383
  301. package/dist/hooks/session-recovery/storage.js.map +0 -1
  302. package/dist/hooks/session-recovery/types.d.ts +0 -145
  303. package/dist/hooks/session-recovery/types.d.ts.map +0 -1
  304. package/dist/hooks/session-recovery/types.js +0 -8
  305. package/dist/hooks/session-recovery/types.js.map +0 -1
  306. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +0 -23
  307. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +0 -1
  308. package/dist/hooks/sisyphus-orchestrator/constants.js +0 -142
  309. package/dist/hooks/sisyphus-orchestrator/constants.js.map +0 -1
  310. package/dist/hooks/sisyphus-orchestrator/index.d.ts +0 -113
  311. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +0 -1
  312. package/dist/hooks/sisyphus-orchestrator/index.js +0 -309
  313. package/dist/hooks/sisyphus-orchestrator/index.js.map +0 -1
  314. package/dist/hooks/ultraqa-loop/index.d.ts +0 -94
  315. package/dist/hooks/ultraqa-loop/index.d.ts.map +0 -1
  316. package/dist/hooks/ultraqa-loop/index.js +0 -216
  317. package/dist/hooks/ultraqa-loop/index.js.map +0 -1
  318. package/dist/hooks/ultrawork-state/index.d.ts +0 -62
  319. package/dist/hooks/ultrawork-state/index.d.ts.map +0 -1
  320. package/dist/hooks/ultrawork-state/index.js +0 -208
  321. package/dist/hooks/ultrawork-state/index.js.map +0 -1
  322. package/dist/hud/sisyphus-state.d.ts +0 -31
  323. package/dist/hud/sisyphus-state.d.ts.map +0 -1
  324. package/dist/hud/sisyphus-state.js +0 -163
  325. package/dist/hud/sisyphus-state.js.map +0 -1
@@ -0,0 +1,619 @@
1
+ /**
2
+ * Plugin and MCP Server Discovery
3
+ *
4
+ * Discovers external plugins, MCP servers, and tools from:
5
+ * - ~/.claude/plugins/ (Claude Code plugins)
6
+ * - ~/.claude/settings.json (MCP servers config)
7
+ * - ~/.claude/claude_desktop_config.json (Desktop app MCP config)
8
+ * - Project-local .claude-plugin/ directories
9
+ */
10
+ import { existsSync, readdirSync, readFileSync, realpathSync } from 'fs';
11
+ import { join, basename, resolve, normalize } from 'path';
12
+ import { homedir } from 'os';
13
+ import Ajv from 'ajv';
14
+ /**
15
+ * Security Error for discovery operations
16
+ */
17
+ export class DiscoverySecurityError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = 'DiscoverySecurityError';
21
+ }
22
+ }
23
+ /**
24
+ * JSON Schema for plugin manifest validation
25
+ */
26
+ const pluginManifestSchema = {
27
+ type: 'object',
28
+ required: ['name', 'version'],
29
+ properties: {
30
+ name: { type: 'string', pattern: '^[a-zA-Z0-9_-]+$', maxLength: 100 },
31
+ version: { type: 'string', maxLength: 50 },
32
+ description: { type: 'string', maxLength: 500 },
33
+ namespace: { type: 'string', pattern: '^[a-zA-Z0-9_-]+$', maxLength: 100 },
34
+ skills: {
35
+ oneOf: [
36
+ { type: 'string', maxLength: 200 },
37
+ { type: 'array', items: { type: 'string', maxLength: 200 }, maxItems: 50 },
38
+ ],
39
+ },
40
+ agents: {
41
+ oneOf: [
42
+ { type: 'string', maxLength: 200 },
43
+ { type: 'array', items: { type: 'string', maxLength: 200 }, maxItems: 50 },
44
+ ],
45
+ },
46
+ tools: {
47
+ type: 'array',
48
+ maxItems: 100,
49
+ items: {
50
+ type: 'object',
51
+ required: ['name'],
52
+ properties: {
53
+ name: { type: 'string', pattern: '^[a-zA-Z0-9_-]+$', maxLength: 100 },
54
+ description: { type: 'string', maxLength: 500 },
55
+ inputSchema: { type: 'object' },
56
+ },
57
+ additionalProperties: false,
58
+ },
59
+ },
60
+ permissions: {
61
+ type: 'array',
62
+ maxItems: 100,
63
+ items: {
64
+ type: 'object',
65
+ properties: {
66
+ tool: { type: 'string', maxLength: 200 },
67
+ scope: { type: 'string', enum: ['read', 'write', 'execute'] },
68
+ patterns: { type: 'array', items: { type: 'string', maxLength: 500 }, maxItems: 50 },
69
+ reason: { type: 'string', maxLength: 500 },
70
+ },
71
+ },
72
+ },
73
+ mcpServers: {
74
+ type: 'object',
75
+ additionalProperties: {
76
+ type: 'object',
77
+ required: ['command'],
78
+ properties: {
79
+ command: { type: 'string', maxLength: 500 },
80
+ args: { type: 'array', items: { type: 'string', maxLength: 500 }, maxItems: 50 },
81
+ env: { type: 'object', additionalProperties: { type: 'string', maxLength: 1000 } },
82
+ enabled: { type: 'boolean' },
83
+ },
84
+ },
85
+ },
86
+ },
87
+ additionalProperties: true,
88
+ };
89
+ /**
90
+ * JSON Schema for MCP server config validation
91
+ */
92
+ const mcpServerConfigSchema = {
93
+ type: 'object',
94
+ required: ['command'],
95
+ properties: {
96
+ command: { type: 'string', minLength: 1, maxLength: 500 },
97
+ args: { type: 'array', items: { type: 'string', maxLength: 500 }, maxItems: 50 },
98
+ env: { type: 'object', additionalProperties: { type: 'string', maxLength: 1000 } },
99
+ enabled: { type: 'boolean' },
100
+ },
101
+ additionalProperties: false,
102
+ };
103
+ // Compile schemas
104
+ const ajv = new Ajv.default({ allErrors: true, strict: false });
105
+ const validatePluginManifest = ajv.compile(pluginManifestSchema);
106
+ const validateMcpServerConfig = ajv.compile(mcpServerConfigSchema);
107
+ /**
108
+ * SECURITY: Validate that a path stays within a base directory
109
+ * Prevents path traversal attacks like ../../../../etc/passwd
110
+ */
111
+ function isPathWithinDirectory(basePath, targetPath) {
112
+ try {
113
+ // Resolve both paths to absolute form
114
+ const resolvedBase = resolve(basePath);
115
+ const resolvedTarget = resolve(basePath, targetPath);
116
+ // Normalize paths to handle ../ sequences
117
+ const normalizedBase = normalize(resolvedBase);
118
+ const normalizedTarget = normalize(resolvedTarget);
119
+ // Check if target is within base (starts with base path)
120
+ if (!normalizedTarget.startsWith(normalizedBase)) {
121
+ return false;
122
+ }
123
+ // Additional check: verify the path actually exists within base
124
+ // by checking real path (follows symlinks)
125
+ if (existsSync(normalizedTarget)) {
126
+ const realTarget = realpathSync(normalizedTarget);
127
+ const realBase = existsSync(normalizedBase) ? realpathSync(normalizedBase) : normalizedBase;
128
+ if (!realTarget.startsWith(realBase)) {
129
+ return false;
130
+ }
131
+ }
132
+ return true;
133
+ }
134
+ catch {
135
+ return false;
136
+ }
137
+ }
138
+ /**
139
+ * Default paths for discovery
140
+ */
141
+ const DEFAULT_PLUGIN_PATHS = [
142
+ join(homedir(), '.claude', 'plugins'),
143
+ join(homedir(), '.claude', 'installed-plugins'),
144
+ ];
145
+ const DEFAULT_MCP_CONFIG_PATH = join(homedir(), '.claude', 'claude_desktop_config.json');
146
+ const DEFAULT_SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
147
+ /**
148
+ * Infer capabilities from tool name and description
149
+ */
150
+ function inferCapabilities(name, description) {
151
+ const capabilities = [];
152
+ const text = `${name} ${description || ''}`.toLowerCase();
153
+ if (text.includes('read') || text.includes('get') || text.includes('fetch') || text.includes('list')) {
154
+ capabilities.push('read');
155
+ }
156
+ if (text.includes('write') || text.includes('create') || text.includes('update') || text.includes('edit')) {
157
+ capabilities.push('write');
158
+ }
159
+ if (text.includes('exec') || text.includes('run') || text.includes('bash') || text.includes('command')) {
160
+ capabilities.push('execute');
161
+ }
162
+ if (text.includes('search') || text.includes('find') || text.includes('query') || text.includes('grep')) {
163
+ capabilities.push('search');
164
+ }
165
+ if (text.includes('http') || text.includes('fetch') || text.includes('web') || text.includes('api')) {
166
+ capabilities.push('network');
167
+ }
168
+ if (text.includes('analyz') || text.includes('inspect') || text.includes('check') || text.includes('review')) {
169
+ capabilities.push('analyze');
170
+ }
171
+ if (text.includes('generat') || text.includes('creat') || text.includes('build') || text.includes('make')) {
172
+ capabilities.push('generate');
173
+ }
174
+ return capabilities.length > 0 ? capabilities : ['unknown'];
175
+ }
176
+ /**
177
+ * Parse and validate a plugin manifest file
178
+ */
179
+ function parsePluginManifest(manifestPath) {
180
+ try {
181
+ const content = readFileSync(manifestPath, 'utf-8');
182
+ const parsed = JSON.parse(content);
183
+ // SECURITY: Validate manifest against schema
184
+ if (!validatePluginManifest(parsed)) {
185
+ const errors = validatePluginManifest.errors
186
+ ?.map((e) => `${e.instancePath}: ${e.message}`)
187
+ .join(', ');
188
+ console.warn(`[Security] Invalid plugin manifest at ${manifestPath}: ${errors}`);
189
+ return null;
190
+ }
191
+ return parsed;
192
+ }
193
+ catch (error) {
194
+ return null;
195
+ }
196
+ }
197
+ /**
198
+ * Discover skills from a plugin directory
199
+ */
200
+ function discoverPluginSkills(pluginPath, manifest) {
201
+ const tools = [];
202
+ const namespace = manifest.namespace || manifest.name;
203
+ // Handle skills directory
204
+ let skillsPaths = [];
205
+ if (typeof manifest.skills === 'string') {
206
+ // SECURITY: Validate path stays within plugin directory
207
+ if (!isPathWithinDirectory(pluginPath, manifest.skills)) {
208
+ console.warn(`[Security] Path traversal detected in plugin ${manifest.name}: skills path "${manifest.skills}" escapes plugin directory`);
209
+ return tools;
210
+ }
211
+ skillsPaths = [join(pluginPath, manifest.skills)];
212
+ }
213
+ else if (Array.isArray(manifest.skills)) {
214
+ skillsPaths = [];
215
+ for (const s of manifest.skills) {
216
+ // SECURITY: Validate each path
217
+ if (!isPathWithinDirectory(pluginPath, s)) {
218
+ console.warn(`[Security] Path traversal detected in plugin ${manifest.name}: skills path "${s}" escapes plugin directory`);
219
+ continue;
220
+ }
221
+ skillsPaths.push(join(pluginPath, s));
222
+ }
223
+ }
224
+ for (const skillsPath of skillsPaths) {
225
+ if (!existsSync(skillsPath))
226
+ continue;
227
+ try {
228
+ const entries = readdirSync(skillsPath, { withFileTypes: true });
229
+ for (const entry of entries) {
230
+ if (!entry.isDirectory())
231
+ continue;
232
+ const skillMdPath = join(skillsPath, entry.name, 'SKILL.md');
233
+ if (!existsSync(skillMdPath))
234
+ continue;
235
+ // Parse skill metadata from SKILL.md frontmatter
236
+ const skillContent = readFileSync(skillMdPath, 'utf-8');
237
+ const frontmatterMatch = skillContent.match(/^---\r?\n([\s\S]*?)\r?\n---/);
238
+ const metadata = {};
239
+ if (frontmatterMatch) {
240
+ for (const line of frontmatterMatch[1].split('\n')) {
241
+ const colonIdx = line.indexOf(':');
242
+ if (colonIdx > 0) {
243
+ const key = line.slice(0, colonIdx).trim();
244
+ let value = line.slice(colonIdx + 1).trim();
245
+ // Remove quotes
246
+ if ((value.startsWith('"') && value.endsWith('"')) ||
247
+ (value.startsWith("'") && value.endsWith("'"))) {
248
+ value = value.slice(1, -1);
249
+ }
250
+ metadata[key] = value;
251
+ }
252
+ }
253
+ }
254
+ tools.push({
255
+ name: `${namespace}:${entry.name}`,
256
+ type: 'skill',
257
+ source: manifest.name,
258
+ description: metadata.description || `Skill from ${manifest.name}`,
259
+ commands: [entry.name],
260
+ capabilities: inferCapabilities(entry.name, metadata.description),
261
+ enabled: true,
262
+ priority: 50, // Default priority for external skills
263
+ });
264
+ }
265
+ }
266
+ catch {
267
+ // Skip directories we can't read
268
+ }
269
+ }
270
+ return tools;
271
+ }
272
+ /**
273
+ * Discover agents from a plugin directory
274
+ */
275
+ function discoverPluginAgents(pluginPath, manifest) {
276
+ const tools = [];
277
+ const namespace = manifest.namespace || manifest.name;
278
+ // Handle agents directory
279
+ let agentsPaths = [];
280
+ if (typeof manifest.agents === 'string') {
281
+ // SECURITY: Validate path stays within plugin directory
282
+ if (!isPathWithinDirectory(pluginPath, manifest.agents)) {
283
+ console.warn(`[Security] Path traversal detected in plugin ${manifest.name}: agents path "${manifest.agents}" escapes plugin directory`);
284
+ return tools;
285
+ }
286
+ agentsPaths = [join(pluginPath, manifest.agents)];
287
+ }
288
+ else if (Array.isArray(manifest.agents)) {
289
+ agentsPaths = [];
290
+ for (const a of manifest.agents) {
291
+ // SECURITY: Validate each path
292
+ if (!isPathWithinDirectory(pluginPath, a)) {
293
+ console.warn(`[Security] Path traversal detected in plugin ${manifest.name}: agents path "${a}" escapes plugin directory`);
294
+ continue;
295
+ }
296
+ agentsPaths.push(join(pluginPath, a));
297
+ }
298
+ }
299
+ for (const agentsPath of agentsPaths) {
300
+ if (!existsSync(agentsPath))
301
+ continue;
302
+ try {
303
+ const entries = readdirSync(agentsPath);
304
+ for (const entry of entries) {
305
+ if (!entry.endsWith('.md'))
306
+ continue;
307
+ const agentPath = join(agentsPath, entry);
308
+ const agentContent = readFileSync(agentPath, 'utf-8');
309
+ const agentName = basename(entry, '.md');
310
+ // Parse agent metadata from frontmatter
311
+ const frontmatterMatch = agentContent.match(/^---\r?\n([\s\S]*?)\r?\n---/);
312
+ const metadata = {};
313
+ if (frontmatterMatch) {
314
+ for (const line of frontmatterMatch[1].split('\n')) {
315
+ const colonIdx = line.indexOf(':');
316
+ if (colonIdx > 0) {
317
+ const key = line.slice(0, colonIdx).trim();
318
+ let value = line.slice(colonIdx + 1).trim();
319
+ if ((value.startsWith('"') && value.endsWith('"')) ||
320
+ (value.startsWith("'") && value.endsWith("'"))) {
321
+ value = value.slice(1, -1);
322
+ }
323
+ metadata[key] = value;
324
+ }
325
+ }
326
+ }
327
+ tools.push({
328
+ name: `${namespace}:${agentName}`,
329
+ type: 'agent',
330
+ source: manifest.name,
331
+ description: metadata.description || `Agent from ${manifest.name}`,
332
+ capabilities: ['analyze', 'generate'],
333
+ enabled: true,
334
+ priority: 50,
335
+ });
336
+ }
337
+ }
338
+ catch {
339
+ // Skip directories we can't read
340
+ }
341
+ }
342
+ return tools;
343
+ }
344
+ /**
345
+ * Discover a single plugin from a directory
346
+ */
347
+ function discoverPlugin(pluginPath) {
348
+ // Look for plugin.json in the directory or in .claude-plugin subdirectory
349
+ let manifestPath = join(pluginPath, 'plugin.json');
350
+ if (!existsSync(manifestPath)) {
351
+ manifestPath = join(pluginPath, '.claude-plugin', 'plugin.json');
352
+ }
353
+ if (!existsSync(manifestPath)) {
354
+ return null;
355
+ }
356
+ const manifest = parsePluginManifest(manifestPath);
357
+ if (!manifest) {
358
+ return {
359
+ name: basename(pluginPath),
360
+ version: 'unknown',
361
+ path: pluginPath,
362
+ manifest: { name: basename(pluginPath), version: 'unknown' },
363
+ loaded: false,
364
+ error: 'Failed to parse plugin manifest',
365
+ tools: [],
366
+ };
367
+ }
368
+ // Discover tools from this plugin
369
+ const tools = [
370
+ ...discoverPluginSkills(pluginPath, manifest),
371
+ ...discoverPluginAgents(pluginPath, manifest),
372
+ ];
373
+ // Add tool definitions from manifest
374
+ if (manifest.tools) {
375
+ for (const toolDef of manifest.tools) {
376
+ tools.push({
377
+ name: `${manifest.namespace || manifest.name}:${toolDef.name}`,
378
+ type: 'plugin',
379
+ source: manifest.name,
380
+ description: toolDef.description,
381
+ capabilities: inferCapabilities(toolDef.name, toolDef.description),
382
+ enabled: true,
383
+ schema: toolDef.inputSchema,
384
+ priority: 50,
385
+ });
386
+ }
387
+ }
388
+ return {
389
+ name: manifest.name,
390
+ version: manifest.version,
391
+ path: pluginPath,
392
+ manifest,
393
+ loaded: true,
394
+ tools,
395
+ };
396
+ }
397
+ /**
398
+ * Discover all plugins from configured paths
399
+ */
400
+ export function discoverPlugins(options) {
401
+ const plugins = [];
402
+ const paths = options?.pluginPaths || DEFAULT_PLUGIN_PATHS;
403
+ for (const basePath of paths) {
404
+ if (!existsSync(basePath))
405
+ continue;
406
+ try {
407
+ const entries = readdirSync(basePath, { withFileTypes: true });
408
+ for (const entry of entries) {
409
+ if (!entry.isDirectory())
410
+ continue;
411
+ // Skip our own plugin
412
+ if (entry.name === 'oh-my-claudecode')
413
+ continue;
414
+ const pluginPath = join(basePath, entry.name);
415
+ const plugin = discoverPlugin(pluginPath);
416
+ if (plugin) {
417
+ plugins.push(plugin);
418
+ }
419
+ }
420
+ }
421
+ catch {
422
+ // Skip paths we can't read
423
+ }
424
+ }
425
+ return plugins;
426
+ }
427
+ /**
428
+ * Parse MCP servers from Claude Desktop config format
429
+ */
430
+ function parseMcpDesktopConfig(configPath) {
431
+ const servers = [];
432
+ if (!existsSync(configPath)) {
433
+ return servers;
434
+ }
435
+ try {
436
+ const content = readFileSync(configPath, 'utf-8');
437
+ const config = JSON.parse(content);
438
+ if (!config.mcpServers) {
439
+ return servers;
440
+ }
441
+ for (const [name, serverConfig] of Object.entries(config.mcpServers)) {
442
+ // SECURITY: Validate server config against schema
443
+ if (!validateMcpServerConfig(serverConfig)) {
444
+ const errors = validateMcpServerConfig.errors
445
+ ?.map((e) => `${e.instancePath}: ${e.message}`)
446
+ .join(', ');
447
+ console.warn(`[Security] Invalid MCP server config for "${name}": ${errors}`);
448
+ continue;
449
+ }
450
+ servers.push({
451
+ name,
452
+ config: serverConfig,
453
+ source: 'claude_desktop_config',
454
+ connected: false,
455
+ tools: [], // Tools discovered after connection
456
+ });
457
+ }
458
+ }
459
+ catch {
460
+ // Ignore parse errors
461
+ }
462
+ return servers;
463
+ }
464
+ /**
465
+ * Parse MCP servers from Claude Code settings.json
466
+ */
467
+ function parseMcpSettings(settingsPath) {
468
+ const servers = [];
469
+ if (!existsSync(settingsPath)) {
470
+ return servers;
471
+ }
472
+ try {
473
+ const content = readFileSync(settingsPath, 'utf-8');
474
+ const settings = JSON.parse(content);
475
+ if (!settings.mcpServers) {
476
+ return servers;
477
+ }
478
+ for (const [name, serverConfig] of Object.entries(settings.mcpServers)) {
479
+ // SECURITY: Validate server config against schema
480
+ if (!validateMcpServerConfig(serverConfig)) {
481
+ const errors = validateMcpServerConfig.errors
482
+ ?.map((e) => `${e.instancePath}: ${e.message}`)
483
+ .join(', ');
484
+ console.warn(`[Security] Invalid MCP server config for "${name}": ${errors}`);
485
+ continue;
486
+ }
487
+ servers.push({
488
+ name,
489
+ config: serverConfig,
490
+ source: 'settings.json',
491
+ connected: false,
492
+ tools: [],
493
+ });
494
+ }
495
+ }
496
+ catch {
497
+ // Ignore parse errors
498
+ }
499
+ return servers;
500
+ }
501
+ /**
502
+ * Discover all MCP servers from configuration files
503
+ */
504
+ export function discoverMcpServers(options) {
505
+ const servers = [];
506
+ const seen = new Set();
507
+ // Check settings.json first (higher priority)
508
+ const settingsPath = options?.settingsPath || DEFAULT_SETTINGS_PATH;
509
+ const settingsServers = parseMcpSettings(settingsPath);
510
+ for (const server of settingsServers) {
511
+ if (!seen.has(server.name)) {
512
+ servers.push(server);
513
+ seen.add(server.name);
514
+ }
515
+ }
516
+ // Check claude_desktop_config.json
517
+ const mcpConfigPath = options?.mcpConfigPath || DEFAULT_MCP_CONFIG_PATH;
518
+ const desktopServers = parseMcpDesktopConfig(mcpConfigPath);
519
+ for (const server of desktopServers) {
520
+ if (!seen.has(server.name)) {
521
+ servers.push(server);
522
+ seen.add(server.name);
523
+ }
524
+ }
525
+ return servers;
526
+ }
527
+ /**
528
+ * Discover MCP servers from plugin manifests
529
+ */
530
+ export function discoverPluginMcpServers(plugins) {
531
+ const servers = [];
532
+ for (const plugin of plugins) {
533
+ if (!plugin.manifest.mcpServers)
534
+ continue;
535
+ for (const [name, serverConfig] of Object.entries(plugin.manifest.mcpServers)) {
536
+ servers.push({
537
+ name: `${plugin.name}:${name}`,
538
+ config: serverConfig,
539
+ source: plugin.name,
540
+ connected: false,
541
+ tools: [],
542
+ });
543
+ }
544
+ }
545
+ return servers;
546
+ }
547
+ /**
548
+ * Perform full discovery of plugins and MCP servers
549
+ */
550
+ export function discoverAll(options) {
551
+ // Discover plugins
552
+ const plugins = discoverPlugins(options);
553
+ // Discover MCP servers from config files
554
+ const configMcpServers = discoverMcpServers(options);
555
+ // Discover MCP servers from plugin manifests
556
+ const pluginMcpServers = discoverPluginMcpServers(plugins);
557
+ // Merge MCP servers (config takes priority)
558
+ const mcpServers = [...configMcpServers];
559
+ const seenServers = new Set(configMcpServers.map(s => s.name));
560
+ for (const server of pluginMcpServers) {
561
+ if (!seenServers.has(server.name)) {
562
+ mcpServers.push(server);
563
+ }
564
+ }
565
+ // Collect all tools
566
+ const allTools = [];
567
+ for (const plugin of plugins) {
568
+ allTools.push(...plugin.tools);
569
+ }
570
+ return {
571
+ plugins,
572
+ mcpServers,
573
+ allTools,
574
+ timestamp: Date.now(),
575
+ };
576
+ }
577
+ /**
578
+ * Get paths being scanned for plugins
579
+ */
580
+ export function getPluginPaths() {
581
+ return DEFAULT_PLUGIN_PATHS.filter(p => existsSync(p));
582
+ }
583
+ /**
584
+ * Get path to MCP config file if it exists
585
+ */
586
+ export function getMcpConfigPath() {
587
+ if (existsSync(DEFAULT_MCP_CONFIG_PATH)) {
588
+ return DEFAULT_MCP_CONFIG_PATH;
589
+ }
590
+ if (existsSync(DEFAULT_SETTINGS_PATH)) {
591
+ return DEFAULT_SETTINGS_PATH;
592
+ }
593
+ return null;
594
+ }
595
+ /**
596
+ * Check if a specific plugin is installed
597
+ */
598
+ export function isPluginInstalled(pluginName) {
599
+ for (const basePath of DEFAULT_PLUGIN_PATHS) {
600
+ const pluginPath = join(basePath, pluginName);
601
+ if (existsSync(pluginPath)) {
602
+ return true;
603
+ }
604
+ }
605
+ return false;
606
+ }
607
+ /**
608
+ * Get plugin info by name
609
+ */
610
+ export function getPluginInfo(pluginName) {
611
+ for (const basePath of DEFAULT_PLUGIN_PATHS) {
612
+ const pluginPath = join(basePath, pluginName);
613
+ if (existsSync(pluginPath)) {
614
+ return discoverPlugin(pluginPath);
615
+ }
616
+ }
617
+ return null;
618
+ }
619
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/compatibility/discovery.ts"],"names":[],"mappings":"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"}