superacli 1.1.0 → 1.1.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 (261) hide show
  1. package/.beads/.br_history/issues.20260308_235202_180577215.jsonl +57 -0
  2. package/.beads/.br_history/issues.20260308_235202_387414163.jsonl +57 -0
  3. package/.beads/.br_history/issues.20260308_235202_564422794.jsonl +57 -0
  4. package/.beads/.br_history/issues.20260308_235202_742600597.jsonl +57 -0
  5. package/.beads/.br_history/issues.20260308_235208_133360069.jsonl +57 -0
  6. package/.beads/.br_history/issues.20260308_235505_473406307.jsonl +57 -0
  7. package/.beads/.br_history/issues.20260308_235505_662360489.jsonl +57 -0
  8. package/.beads/.br_history/issues.20260308_235505_843935624.jsonl +57 -0
  9. package/.beads/.br_history/issues.20260308_235506_044530221.jsonl +57 -0
  10. package/.beads/.br_history/issues.20260309_002618_115728731.jsonl +57 -0
  11. package/.beads/.br_history/issues.20260309_003748_878174586.jsonl +57 -0
  12. package/.beads/.br_history/issues.20260309_004057_868755623.jsonl +57 -0
  13. package/.beads/.br_history/issues.20260309_004058_512842163.jsonl +57 -0
  14. package/.beads/.br_history/issues.20260309_004058_994445226.jsonl +57 -0
  15. package/.beads/.br_history/issues.20260309_004059_475988596.jsonl +57 -0
  16. package/.beads/.br_history/issues.20260309_161902_566857851.jsonl +57 -0
  17. package/.beads/.br_history/issues.20260309_170512_277017739.jsonl +57 -0
  18. package/.beads/.br_history/issues.20260309_170512_477876921.jsonl +57 -0
  19. package/.beads/.br_history/issues.20260309_170512_664382701.jsonl +57 -0
  20. package/.beads/.br_history/issues.20260309_170512_859400333.jsonl +57 -0
  21. package/.beads/.br_history/issues.20260309_212326_082771164.jsonl +57 -0
  22. package/.beads/.br_history/issues.20260309_212326_245619716.jsonl +58 -0
  23. package/.beads/.br_history/issues.20260309_212326_403198317.jsonl +59 -0
  24. package/.beads/.br_history/issues.20260309_212332_539197678.jsonl +60 -0
  25. package/.beads/.br_history/issues.20260309_212332_731373599.jsonl +60 -0
  26. package/.beads/.br_history/issues.20260309_212332_928710953.jsonl +60 -0
  27. package/.beads/.br_history/issues.20260309_213021_341505240.jsonl +60 -0
  28. package/.beads/.br_history/issues.20260309_213022_023136934.jsonl +60 -0
  29. package/.beads/.br_history/issues.20260309_213022_400050719.jsonl +60 -0
  30. package/.beads/issues.jsonl +20 -17
  31. package/README.md +1 -1
  32. package/__tests__/adapter-schema.test.js +3 -0
  33. package/__tests__/aws-plugin.test.js +84 -0
  34. package/__tests__/az-plugin.test.js +84 -0
  35. package/__tests__/builtin-adapter.test.js +29 -0
  36. package/__tests__/cline-plugin.test.js +109 -0
  37. package/__tests__/cline-skill.test.js +49 -0
  38. package/__tests__/docker-plugin.test.js +3 -1
  39. package/__tests__/eza-plugin.test.js +81 -0
  40. package/__tests__/gcloud-plugin.test.js +86 -0
  41. package/__tests__/gh-plugin.test.js +86 -0
  42. package/__tests__/helm-plugin.test.js +81 -0
  43. package/__tests__/http-adapter.test.js +118 -0
  44. package/__tests__/just-plugin.test.js +82 -0
  45. package/__tests__/kubectl-plugin.test.js +83 -0
  46. package/__tests__/linear-plugin.test.js +81 -0
  47. package/__tests__/mcp-adapter.test.js +187 -0
  48. package/__tests__/nextest-plugin.test.js +82 -0
  49. package/__tests__/npm-plugin.test.js +81 -0
  50. package/__tests__/nullclaw-plugin.test.js +157 -0
  51. package/__tests__/openapi-adapter.test.js +199 -0
  52. package/__tests__/plugin-agency-agents.test.js +6 -6
  53. package/__tests__/plugin-nullclaw.test.js +78 -0
  54. package/__tests__/plugin-visual-explainer.test.js +62 -0
  55. package/__tests__/plugins-manager.test.js +59 -10
  56. package/__tests__/pnpm-plugin.test.js +81 -0
  57. package/__tests__/poetry-plugin.test.js +83 -0
  58. package/__tests__/process-adapter.test.js +124 -90
  59. package/__tests__/pulumi-plugin.test.js +81 -0
  60. package/__tests__/railway-plugin.test.js +84 -0
  61. package/__tests__/server-app.test.js +67 -0
  62. package/__tests__/server-config-service.test.js +79 -0
  63. package/__tests__/server-routes-ask.test.js +89 -0
  64. package/__tests__/server-routes-commands.test.js +55 -0
  65. package/__tests__/server-routes-config.test.js +87 -0
  66. package/__tests__/server-routes-jobs.test.js +53 -0
  67. package/__tests__/server-routes-misc.test.js +112 -0
  68. package/__tests__/server-storage-adapter.test.js +40 -0
  69. package/__tests__/server-storage-file.test.js +73 -0
  70. package/__tests__/server-storage-mongo.test.js +74 -0
  71. package/__tests__/shell-adapter.test.js +81 -22
  72. package/__tests__/stripe-plugin.test.js +3 -1
  73. package/__tests__/supabase-plugin.test.js +86 -0
  74. package/__tests__/terraform-plugin.test.js +83 -0
  75. package/__tests__/uv-plugin.test.js +81 -0
  76. package/__tests__/vercel-plugin.test.js +81 -0
  77. package/__tests__/watchexec-plugin.test.js +80 -0
  78. package/cli/adapter-schema.js +5 -0
  79. package/cli/adapters/process.js +53 -2
  80. package/cli/plugin-install-guidance.js +320 -0
  81. package/cli/plugins-manager.js +272 -212
  82. package/cli/skills.js +16 -5
  83. package/cli/supercli.js +26 -2
  84. package/docs/plugins.md +2 -0
  85. package/docs/skills/cline-non-interactive/SKILL.md +59 -0
  86. package/docs/skills-catalog.md +35 -0
  87. package/docs/visual-overview.md +21 -0
  88. package/jest.config.js +4 -1
  89. package/package.json +4 -3
  90. package/plugins/agency-agents/plugin.json +5 -0
  91. package/{cli/plugin-agency-agents.js → plugins/agency-agents/scripts/post-install.js} +13 -3
  92. package/plugins/aws/README.md +46 -0
  93. package/plugins/aws/plugin.json +42 -0
  94. package/plugins/az/README.md +46 -0
  95. package/plugins/az/plugin.json +42 -0
  96. package/plugins/clickup/plugin.json +38 -0
  97. package/plugins/clickup/scripts/post-install.js +107 -0
  98. package/plugins/clickup/scripts/post-uninstall.js +30 -0
  99. package/plugins/cline/README.md +48 -0
  100. package/plugins/cline/plugin.json +92 -0
  101. package/plugins/eza/README.md +40 -0
  102. package/plugins/eza/plugin.json +42 -0
  103. package/plugins/gcloud/README.md +46 -0
  104. package/plugins/gcloud/plugin.json +42 -0
  105. package/plugins/gh/README.md +46 -0
  106. package/plugins/gh/plugin.json +43 -0
  107. package/plugins/helm/README.md +42 -0
  108. package/plugins/helm/plugin.json +42 -0
  109. package/plugins/just/README.md +42 -0
  110. package/plugins/just/plugin.json +42 -0
  111. package/plugins/kubectl/README.md +46 -0
  112. package/plugins/kubectl/plugin.json +42 -0
  113. package/plugins/linear/README.md +60 -0
  114. package/plugins/linear/plugin.json +42 -0
  115. package/plugins/nextest/README.md +42 -0
  116. package/plugins/nextest/plugin.json +42 -0
  117. package/plugins/npm/README.md +46 -0
  118. package/plugins/npm/plugin.json +42 -0
  119. package/plugins/nullclaw/README.md +45 -0
  120. package/plugins/nullclaw/plugin.json +64 -0
  121. package/plugins/nullclaw/scripts/post-install.js +189 -0
  122. package/plugins/nullclaw/scripts/post-uninstall.js +25 -0
  123. package/plugins/openfang/plugin.json +37 -0
  124. package/plugins/openfang/scripts/post-install.js +163 -0
  125. package/plugins/openfang/scripts/post-uninstall.js +30 -0
  126. package/plugins/plugins.json +234 -0
  127. package/plugins/pnpm/README.md +46 -0
  128. package/plugins/pnpm/plugin.json +42 -0
  129. package/plugins/poetry/README.md +46 -0
  130. package/plugins/poetry/plugin.json +42 -0
  131. package/plugins/pulumi/README.md +46 -0
  132. package/plugins/pulumi/plugin.json +42 -0
  133. package/plugins/railway/README.md +58 -0
  134. package/plugins/railway/plugin.json +43 -0
  135. package/plugins/supabase/README.md +55 -0
  136. package/plugins/supabase/plugin.json +42 -0
  137. package/plugins/superpowers/plugin.json +22 -0
  138. package/plugins/superpowers/scripts/post-install.js +124 -0
  139. package/plugins/superpowers/scripts/post-uninstall.js +30 -0
  140. package/plugins/terraform/README.md +46 -0
  141. package/plugins/terraform/plugin.json +42 -0
  142. package/plugins/uv/README.md +46 -0
  143. package/plugins/uv/plugin.json +42 -0
  144. package/plugins/vercel/README.md +47 -0
  145. package/plugins/vercel/plugin.json +42 -0
  146. package/plugins/visual-explainer/plugin.json +15 -0
  147. package/plugins/visual-explainer/scripts/post-install.js +111 -0
  148. package/plugins/watchexec/README.md +40 -0
  149. package/plugins/watchexec/plugin.json +42 -0
  150. package/tests/test-aws-smoke.sh +56 -0
  151. package/tests/test-az-smoke.sh +56 -0
  152. package/tests/test-cline-smoke.sh +37 -0
  153. package/tests/test-eza-smoke.sh +33 -0
  154. package/tests/test-gcloud-smoke.sh +56 -0
  155. package/tests/test-gh-smoke.sh +56 -0
  156. package/tests/test-helm-smoke.sh +33 -0
  157. package/tests/test-just-smoke.sh +40 -0
  158. package/tests/test-kubectl-smoke.sh +37 -0
  159. package/tests/test-linear-smoke.sh +97 -0
  160. package/tests/test-nextest-smoke.sh +33 -0
  161. package/tests/test-npm-smoke.sh +32 -0
  162. package/tests/test-nullclaw-smoke.sh +51 -0
  163. package/tests/test-plugins-registry.js +110 -0
  164. package/tests/test-pnpm-smoke.sh +33 -0
  165. package/tests/test-poetry-smoke.sh +33 -0
  166. package/tests/test-pulumi-smoke.sh +33 -0
  167. package/tests/test-railway-smoke.sh +95 -0
  168. package/tests/test-supabase-smoke.sh +95 -0
  169. package/tests/test-terraform-smoke.sh +33 -0
  170. package/tests/test-uv-smoke.sh +33 -0
  171. package/tests/test-vercel-smoke.sh +55 -0
  172. package/tests/test-watchexec-smoke.sh +33 -0
  173. package/.beads/.br_history/issues.20260308_180927_477542428.jsonl +0 -12
  174. package/.beads/.br_history/issues.20260308_181032_020230108.jsonl +0 -12
  175. package/.beads/.br_history/issues.20260308_181032_180539413.jsonl +0 -12
  176. package/.beads/.br_history/issues.20260308_181032_372621506.jsonl +0 -12
  177. package/.beads/.br_history/issues.20260308_181032_565142225.jsonl +0 -12
  178. package/.beads/.br_history/issues.20260308_181311_336346464.jsonl +0 -12
  179. package/.beads/.br_history/issues.20260308_181444_039234498.jsonl +0 -13
  180. package/.beads/.br_history/issues.20260308_181503_794764403.jsonl +0 -13
  181. package/.beads/.br_history/issues.20260308_181503_950163105.jsonl +0 -13
  182. package/.beads/.br_history/issues.20260308_192031_852553505.jsonl +0 -13
  183. package/.beads/.br_history/issues.20260308_193552_846920518.jsonl +0 -14
  184. package/.beads/.br_history/issues.20260308_194054_394884833.jsonl +0 -14
  185. package/.beads/.br_history/issues.20260308_194209_440472460.jsonl +0 -15
  186. package/.beads/.br_history/issues.20260308_195319_099391899.jsonl +0 -15
  187. package/.beads/.br_history/issues.20260308_195324_176987204.jsonl +0 -16
  188. package/.beads/.br_history/issues.20260308_195436_929114019.jsonl +0 -16
  189. package/.beads/.br_history/issues.20260308_195437_055808298.jsonl +0 -17
  190. package/.beads/.br_history/issues.20260308_195437_304297399.jsonl +0 -18
  191. package/.beads/.br_history/issues.20260308_195437_556007332.jsonl +0 -19
  192. package/.beads/.br_history/issues.20260308_195444_987209695.jsonl +0 -20
  193. package/.beads/.br_history/issues.20260308_195445_133350193.jsonl +0 -20
  194. package/.beads/.br_history/issues.20260308_195445_400185615.jsonl +0 -20
  195. package/.beads/.br_history/issues.20260308_195445_689886334.jsonl +0 -20
  196. package/.beads/.br_history/issues.20260308_195445_949947727.jsonl +0 -20
  197. package/.beads/.br_history/issues.20260308_195745_580473297.jsonl +0 -20
  198. package/.beads/.br_history/issues.20260308_195745_725920532.jsonl +0 -20
  199. package/.beads/.br_history/issues.20260308_195745_968227911.jsonl +0 -20
  200. package/.beads/.br_history/issues.20260308_195746_224276322.jsonl +0 -20
  201. package/.beads/.br_history/issues.20260308_200018_386890807.jsonl +0 -20
  202. package/ref-btcbot/.env.example +0 -19
  203. package/ref-btcbot/README.md +0 -3
  204. package/ref-btcbot/docs/bot.md +0 -72
  205. package/ref-btcbot/docs/skills/btcbot.backtest/SKILL.md +0 -70
  206. package/ref-btcbot/docs/skills/btcbot.config/SKILL.md +0 -79
  207. package/ref-btcbot/docs/skills/btcbot.orders/SKILL.md +0 -60
  208. package/ref-btcbot/docs/skills/btcbot.positions/SKILL.md +0 -54
  209. package/ref-btcbot/docs/skills/btcbot.risk/SKILL.md +0 -69
  210. package/ref-btcbot/docs/skills/btcbot.run-loop/SKILL.md +0 -63
  211. package/ref-btcbot/docs/skills/btcbot.run-once/SKILL.md +0 -63
  212. package/ref-btcbot/docs/skills/btcbot.status/SKILL.md +0 -59
  213. package/ref-btcbot/examples/sample-candles.json +0 -52
  214. package/ref-btcbot/package.json +0 -18
  215. package/ref-btcbot/plugin/plugin.json +0 -146
  216. package/ref-btcbot/src/cli.js +0 -104
  217. package/ref-btcbot/src/config.js +0 -80
  218. package/ref-btcbot/src/core/bot-runner.js +0 -78
  219. package/ref-btcbot/src/core/exchange-factory.js +0 -19
  220. package/ref-btcbot/src/core/live-exchange.js +0 -12
  221. package/ref-btcbot/src/core/paper-exchange.js +0 -82
  222. package/ref-btcbot/src/core/risk-engine.js +0 -42
  223. package/ref-btcbot/src/core/state-repository.js +0 -47
  224. package/ref-btcbot/src/services/backtest-service.js +0 -44
  225. package/ref-btcbot/src/services/market-data.js +0 -32
  226. package/ref-btcbot/src/storage/json-store.js +0 -45
  227. package/ref-btcbot/src/strategy/hedge-strategy.js +0 -65
  228. package/ref-btcbot/src/strategy/indicators.js +0 -56
  229. package/ref-btcbot/src/web/api.js +0 -50
  230. package/ref-btcbot/src/web/app.js +0 -51
  231. package/ref-btcbot/src/web/index.html +0 -70
  232. package/ref-btcbot/src/web/server.js +0 -33
  233. /package/.beads/.br_history/{issues.20260308_180927_477542428.jsonl.meta.json → issues.20260308_235202_180577215.jsonl.meta.json} +0 -0
  234. /package/.beads/.br_history/{issues.20260308_181032_020230108.jsonl.meta.json → issues.20260308_235202_387414163.jsonl.meta.json} +0 -0
  235. /package/.beads/.br_history/{issues.20260308_181032_180539413.jsonl.meta.json → issues.20260308_235202_564422794.jsonl.meta.json} +0 -0
  236. /package/.beads/.br_history/{issues.20260308_181032_372621506.jsonl.meta.json → issues.20260308_235202_742600597.jsonl.meta.json} +0 -0
  237. /package/.beads/.br_history/{issues.20260308_181032_565142225.jsonl.meta.json → issues.20260308_235208_133360069.jsonl.meta.json} +0 -0
  238. /package/.beads/.br_history/{issues.20260308_181311_336346464.jsonl.meta.json → issues.20260308_235505_473406307.jsonl.meta.json} +0 -0
  239. /package/.beads/.br_history/{issues.20260308_181444_039234498.jsonl.meta.json → issues.20260308_235505_662360489.jsonl.meta.json} +0 -0
  240. /package/.beads/.br_history/{issues.20260308_181503_794764403.jsonl.meta.json → issues.20260308_235505_843935624.jsonl.meta.json} +0 -0
  241. /package/.beads/.br_history/{issues.20260308_181503_950163105.jsonl.meta.json → issues.20260308_235506_044530221.jsonl.meta.json} +0 -0
  242. /package/.beads/.br_history/{issues.20260308_192031_852553505.jsonl.meta.json → issues.20260309_002618_115728731.jsonl.meta.json} +0 -0
  243. /package/.beads/.br_history/{issues.20260308_193552_846920518.jsonl.meta.json → issues.20260309_003748_878174586.jsonl.meta.json} +0 -0
  244. /package/.beads/.br_history/{issues.20260308_194054_394884833.jsonl.meta.json → issues.20260309_004057_868755623.jsonl.meta.json} +0 -0
  245. /package/.beads/.br_history/{issues.20260308_194209_440472460.jsonl.meta.json → issues.20260309_004058_512842163.jsonl.meta.json} +0 -0
  246. /package/.beads/.br_history/{issues.20260308_195319_099391899.jsonl.meta.json → issues.20260309_004058_994445226.jsonl.meta.json} +0 -0
  247. /package/.beads/.br_history/{issues.20260308_195324_176987204.jsonl.meta.json → issues.20260309_004059_475988596.jsonl.meta.json} +0 -0
  248. /package/.beads/.br_history/{issues.20260308_195436_929114019.jsonl.meta.json → issues.20260309_161902_566857851.jsonl.meta.json} +0 -0
  249. /package/.beads/.br_history/{issues.20260308_195437_055808298.jsonl.meta.json → issues.20260309_170512_277017739.jsonl.meta.json} +0 -0
  250. /package/.beads/.br_history/{issues.20260308_195437_304297399.jsonl.meta.json → issues.20260309_170512_477876921.jsonl.meta.json} +0 -0
  251. /package/.beads/.br_history/{issues.20260308_195437_556007332.jsonl.meta.json → issues.20260309_170512_664382701.jsonl.meta.json} +0 -0
  252. /package/.beads/.br_history/{issues.20260308_195444_987209695.jsonl.meta.json → issues.20260309_170512_859400333.jsonl.meta.json} +0 -0
  253. /package/.beads/.br_history/{issues.20260308_195445_133350193.jsonl.meta.json → issues.20260309_212326_082771164.jsonl.meta.json} +0 -0
  254. /package/.beads/.br_history/{issues.20260308_195445_400185615.jsonl.meta.json → issues.20260309_212326_245619716.jsonl.meta.json} +0 -0
  255. /package/.beads/.br_history/{issues.20260308_195445_689886334.jsonl.meta.json → issues.20260309_212326_403198317.jsonl.meta.json} +0 -0
  256. /package/.beads/.br_history/{issues.20260308_195445_949947727.jsonl.meta.json → issues.20260309_212332_539197678.jsonl.meta.json} +0 -0
  257. /package/.beads/.br_history/{issues.20260308_195745_580473297.jsonl.meta.json → issues.20260309_212332_731373599.jsonl.meta.json} +0 -0
  258. /package/.beads/.br_history/{issues.20260308_195745_725920532.jsonl.meta.json → issues.20260309_212332_928710953.jsonl.meta.json} +0 -0
  259. /package/.beads/.br_history/{issues.20260308_195745_968227911.jsonl.meta.json → issues.20260309_213021_341505240.jsonl.meta.json} +0 -0
  260. /package/.beads/.br_history/{issues.20260308_195746_224276322.jsonl.meta.json → issues.20260309_213022_023136934.jsonl.meta.json} +0 -0
  261. /package/.beads/.br_history/{issues.20260308_200018_386890807.jsonl.meta.json → issues.20260309_213022_400050719.jsonl.meta.json} +0 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "visual-explainer",
3
+ "version": "0.1.0",
4
+ "description": "Remote skills index for javimosch/visual-explainer normalized markdown skills",
5
+ "source": "https://github.com/javimosch/visual-explainer",
6
+ "checks": [
7
+ { "type": "binary", "name": "curl" }
8
+ ],
9
+ "post_install": {
10
+ "script": "scripts/post-install.js",
11
+ "runtime": "node",
12
+ "timeout_ms": 15000
13
+ },
14
+ "commands": []
15
+ }
@@ -0,0 +1,111 @@
1
+ const { spawnSync } = require("child_process")
2
+ const { addProvider, syncCatalog } = require("../../../cli/skills-catalog")
3
+
4
+ const OWNER = "javimosch"
5
+ const REPO = "visual-explainer"
6
+ const REF = "main"
7
+ const SOURCE_REPO = `https://github.com/${OWNER}/${REPO}`
8
+ const TREE_URL = `https://api.github.com/repos/${OWNER}/${REPO}/git/trees/${REF}?recursive=1`
9
+ const RAW_BASE_URL = `https://raw.githubusercontent.com/${OWNER}/${REPO}/${REF}`
10
+ const NORMALIZED_PREFIX = "plugins/visual-explainer-normalized/"
11
+
12
+ function integrationError(message, suggestions = []) {
13
+ return Object.assign(new Error(message), {
14
+ code: 105,
15
+ type: "integration_error",
16
+ recoverable: true,
17
+ suggestions
18
+ })
19
+ }
20
+
21
+ function fetchJson(url) {
22
+ const res = spawnSync("curl", ["-fsSL", url], { encoding: "utf-8", timeout: 15000 })
23
+ if (res.error) {
24
+ throw integrationError(`Failed to fetch visual-explainer metadata: ${res.error.message}`, ["Check internet connectivity", "Retry: supercli plugins install visual-explainer"])
25
+ }
26
+ if (res.status !== 0) {
27
+ throw integrationError(`Failed to fetch visual-explainer metadata: ${(res.stderr || "").trim() || `exit ${res.status}`}`, ["Check internet connectivity", "Retry: supercli plugins install visual-explainer"])
28
+ }
29
+ try {
30
+ return JSON.parse((res.stdout || "").trim() || "{}")
31
+ } catch (err) {
32
+ throw integrationError(`Invalid visual-explainer metadata response: ${err.message}`)
33
+ }
34
+ }
35
+
36
+ function isNormalizedSkillFile(filePath) {
37
+ return filePath.startsWith(NORMALIZED_PREFIX) && filePath.endsWith(".md")
38
+ }
39
+
40
+ function toSkillId(relativePath) {
41
+ if (relativePath === "SKILL.md") return "visual-explainer.skill"
42
+ return `visual-explainer.${relativePath.replace(/\.md$/, "").replace(/\//g, ".")}`
43
+ }
44
+
45
+ function toSkillName(relativePath) {
46
+ const base = relativePath.split("/").pop() || relativePath
47
+ return base
48
+ .replace(/\.md$/, "")
49
+ .split("-")
50
+ .map(part => (part ? part[0].toUpperCase() + part.slice(1) : part))
51
+ .join(" ")
52
+ }
53
+
54
+ function buildRemoteEntriesFromTree(treeResponse) {
55
+ const tree = Array.isArray(treeResponse.tree) ? treeResponse.tree : []
56
+ const entries = []
57
+
58
+ for (const node of tree) {
59
+ if (!node || node.type !== "blob" || typeof node.path !== "string") continue
60
+ if (!isNormalizedSkillFile(node.path)) continue
61
+ const relativePath = node.path.slice(NORMALIZED_PREFIX.length)
62
+ entries.push({
63
+ id: toSkillId(relativePath),
64
+ name: toSkillName(relativePath),
65
+ path: node.path,
66
+ source_url: `${RAW_BASE_URL}/${node.path}`
67
+ })
68
+ }
69
+
70
+ entries.sort((a, b) => a.id.localeCompare(b.id))
71
+ return entries
72
+ }
73
+
74
+ function run() {
75
+ const treeResponse = fetchJson(TREE_URL)
76
+ const entries = buildRemoteEntriesFromTree(treeResponse)
77
+ if (entries.length === 0) {
78
+ throw integrationError("visual-explainer plugin found no normalized remote skill files to index")
79
+ }
80
+
81
+ addProvider({
82
+ name: "visual-explainer",
83
+ type: "remote_static",
84
+ enabled: true,
85
+ source_repo: SOURCE_REPO,
86
+ ref: REF,
87
+ entries
88
+ })
89
+
90
+ const index = syncCatalog()
91
+ return {
92
+ provider: "visual-explainer",
93
+ entries: entries.length,
94
+ synced_skills: Array.isArray(index.skills) ? index.skills.length : 0
95
+ }
96
+ }
97
+
98
+ if (require.main === module) {
99
+ try {
100
+ const result = run()
101
+ process.stdout.write(JSON.stringify(result))
102
+ } catch (err) {
103
+ process.stderr.write(err.message)
104
+ process.exit(1)
105
+ }
106
+ }
107
+
108
+ module.exports = {
109
+ run,
110
+ buildRemoteEntriesFromTree
111
+ }
@@ -0,0 +1,40 @@
1
+ # watchexec Plugin Harness
2
+
3
+ This plugin integrates the watchexec CLI into dcli with one wrapped core command and full namespace passthrough.
4
+
5
+ ## Prerequisites
6
+
7
+ Ensure watchexec is available on your machine:
8
+
9
+ ```bash
10
+ watchexec --version
11
+ ```
12
+
13
+ ## Available Commands
14
+
15
+ ### CLI Version (Wrapped)
16
+
17
+ Returns the watchexec CLI version via `watchexec --version`.
18
+
19
+ ```bash
20
+ dcli watchexec cli version --json
21
+ ```
22
+
23
+ ### Full Passthrough
24
+
25
+ You can run any watchexec command through the `watchexec` namespace.
26
+
27
+ ```bash
28
+ # Show help
29
+ dcli watchexec --help
30
+
31
+ # Print the manual
32
+ dcli watchexec --manual
33
+
34
+ # Run a watcher command directly
35
+ dcli watchexec -e js -- echo changed
36
+ ```
37
+
38
+ ## Output
39
+
40
+ Wrapped commands and passthrough responses are returned in dcli envelope format when `--json` is used with dcli-level commands.
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "watchexec",
3
+ "version": "0.1.0",
4
+ "description": "watchexec CLI plugin for dcli",
5
+ "source": "https://github.com/watchexec/watchexec",
6
+ "checks": [
7
+ {
8
+ "type": "binary",
9
+ "name": "watchexec"
10
+ }
11
+ ],
12
+ "commands": [
13
+ {
14
+ "namespace": "watchexec",
15
+ "resource": "cli",
16
+ "action": "version",
17
+ "description": "Show watchexec CLI version",
18
+ "adapter": "process",
19
+ "adapterConfig": {
20
+ "command": "watchexec",
21
+ "baseArgs": ["--version"],
22
+ "parseJson": false,
23
+ "missingDependencyHelp": "Please install watchexec to use this command."
24
+ },
25
+ "args": []
26
+ },
27
+ {
28
+ "namespace": "watchexec",
29
+ "resource": "_",
30
+ "action": "_",
31
+ "description": "Passthrough command to execute any watchexec CLI command",
32
+ "adapter": "process",
33
+ "adapterConfig": {
34
+ "command": "watchexec",
35
+ "passthrough": true,
36
+ "parseJson": true,
37
+ "missingDependencyHelp": "Please install watchexec to use this command."
38
+ },
39
+ "args": []
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== AWS CLI smoke test (interactive) =="
9
+
10
+ if ! command -v aws >/dev/null 2>&1; then
11
+ echo "AWS CLI not found in PATH."
12
+ echo "Install it first: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing aws plugin..."
22
+ node "${CLI}" plugins install aws --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking AWS authentication (aws sts get-caller-identity)..."
25
+ if ! aws sts get-caller-identity >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "No working AWS credentials found and no TTY available. Run 'aws configure' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "AWS credentials are required for live smoke tests."
32
+ read -r -p "Run 'aws configure' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ aws configure
36
+ else
37
+ echo "Cancelled. Run 'aws configure' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! aws sts get-caller-identity >/dev/null 2>&1; then
42
+ echo "AWS authentication check still failed after configure."
43
+ echo "Verify with: aws sts get-caller-identity"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "AWS CLI is already authenticated. Skipping configuration."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" aws account identity --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" aws s3api list-buckets
55
+
56
+ echo "Smoke test completed."
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== Azure CLI smoke test (interactive) =="
9
+
10
+ if ! command -v az >/dev/null 2>&1; then
11
+ echo "Azure CLI not found in PATH."
12
+ echo "Install it first: https://learn.microsoft.com/cli/azure/install-azure-cli"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing az plugin..."
22
+ node "${CLI}" plugins install az --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking Azure authentication (az account show)..."
25
+ if ! az account show >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "No working Azure login found and no TTY available. Run 'az login' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "Azure authentication is required for live smoke tests."
32
+ read -r -p "Run 'az login' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ az login
36
+ else
37
+ echo "Cancelled. Run 'az login' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! az account show >/dev/null 2>&1; then
42
+ echo "Azure authentication check still failed after login."
43
+ echo "Verify with: az account show"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "Azure CLI is already authenticated. Skipping login."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" az account show --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" az group list
55
+
56
+ echo "Smoke test completed."
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== cline smoke test (interactive) =="
9
+
10
+ if ! command -v cline >/dev/null 2>&1; then
11
+ echo "cline not found in PATH."
12
+ echo "Install it first and verify with: cline --version"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing cline plugin..."
22
+ node "${CLI}" plugins install cline --on-conflict replace --json >/dev/null
23
+
24
+ echo "Running wrapped version command..."
25
+ node "${CLI}" cline cli version --json
26
+
27
+ echo "Running wrapped non-interactive task command..."
28
+ node "${CLI}" cline task run --prompt "List files with more LOC in cwd" --cwd . --timeout 30 --json
29
+
30
+ echo "Running passthrough smoke test..."
31
+ node "${CLI}" cline --help
32
+
33
+ echo "Syncing and checking local skill catalog..."
34
+ node "${CLI}" skills sync --json >/dev/null
35
+ node "${CLI}" skills get repo:cline-non-interactive >/dev/null
36
+
37
+ echo "Smoke test completed."
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== eza smoke test (interactive) =="
9
+
10
+ if ! command -v eza >/dev/null 2>&1; then
11
+ echo "eza not found in PATH."
12
+ echo "Install it first: https://eza.rocks"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing eza plugin..."
22
+ node "${CLI}" plugins install eza --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking eza CLI availability (eza --version)..."
25
+ eza --version >/dev/null
26
+
27
+ echo "Running wrapped command smoke test..."
28
+ node "${CLI}" eza cli version --json
29
+
30
+ echo "Running passthrough smoke test..."
31
+ node "${CLI}" eza --oneline --color=never
32
+
33
+ echo "Smoke test completed."
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== Google Cloud CLI smoke test (interactive) =="
9
+
10
+ if ! command -v gcloud >/dev/null 2>&1; then
11
+ echo "gcloud not found in PATH."
12
+ echo "Install it first: https://cloud.google.com/sdk/docs/install"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing gcloud plugin..."
22
+ node "${CLI}" plugins install gcloud --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking Google Cloud authentication (gcloud auth list --format=json)..."
25
+ if ! gcloud auth list --format=json >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "No working gcloud auth found and no TTY available. Run 'gcloud auth login' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "Google Cloud authentication is required for live smoke tests."
32
+ read -r -p "Run 'gcloud auth login' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ gcloud auth login
36
+ else
37
+ echo "Cancelled. Run 'gcloud auth login' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! gcloud auth list --format=json >/dev/null 2>&1; then
42
+ echo "Google Cloud authentication check still failed after login."
43
+ echo "Verify with: gcloud auth list --format=json"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "Google Cloud CLI is already authenticated. Skipping login."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" gcloud account list --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" gcloud projects list --format=json
55
+
56
+ echo "Smoke test completed."
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== GitHub CLI smoke test (interactive) =="
9
+
10
+ if ! command -v gh >/dev/null 2>&1; then
11
+ echo "GitHub CLI not found in PATH (expected binary: gh)."
12
+ echo "Install it first: https://cli.github.com/"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing gh plugin..."
22
+ node "${CLI}" plugins install gh --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking GitHub authentication (gh auth status)..."
25
+ if ! gh auth status >/dev/null 2>&1; then
26
+ if [[ ! -t 0 ]]; then
27
+ echo "Not authenticated and no TTY available. Run 'gh auth login' manually, then rerun this script."
28
+ exit 1
29
+ fi
30
+
31
+ echo "GitHub login is required for live smoke tests."
32
+ read -r -p "Run 'gh auth login' now? [Y/n] " ANSWER
33
+ ANSWER="${ANSWER:-Y}"
34
+ if [[ "${ANSWER}" =~ ^[Yy]$ ]]; then
35
+ gh auth login
36
+ else
37
+ echo "Cancelled. Run 'gh auth login' and retry when ready."
38
+ exit 1
39
+ fi
40
+
41
+ if ! gh auth status >/dev/null 2>&1; then
42
+ echo "GitHub authentication check still failed after login."
43
+ echo "Verify with: gh auth status"
44
+ exit 1
45
+ fi
46
+ else
47
+ echo "GitHub CLI is already authenticated. Skipping login."
48
+ fi
49
+
50
+ echo "Running wrapped command smoke test..."
51
+ node "${CLI}" gh account status --json
52
+
53
+ echo "Running passthrough smoke test..."
54
+ node "${CLI}" gh repo list --limit 1 --json name,nameWithOwner,url
55
+
56
+ echo "Smoke test completed."
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== Helm smoke test (interactive) =="
9
+
10
+ if ! command -v helm >/dev/null 2>&1; then
11
+ echo "Helm not found in PATH."
12
+ echo "Install it first: https://helm.sh/docs/intro/install/"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing helm plugin..."
22
+ node "${CLI}" plugins install helm --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking Helm CLI availability (helm version --short)..."
25
+ helm version --short >/dev/null
26
+
27
+ echo "Running wrapped command smoke test..."
28
+ node "${CLI}" helm cli version --json
29
+
30
+ echo "Running passthrough smoke test..."
31
+ node "${CLI}" helm version --short
32
+
33
+ echo "Smoke test completed."
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+ TMP_DIR="$(mktemp -d)"
8
+ trap 'rm -rf "${TMP_DIR}"' EXIT
9
+
10
+ echo "== just smoke test (interactive) =="
11
+
12
+ if ! command -v just >/dev/null 2>&1; then
13
+ echo "just not found in PATH."
14
+ echo "Install it first: https://just.systems"
15
+ exit 1
16
+ fi
17
+
18
+ if ! command -v node >/dev/null 2>&1; then
19
+ echo "Node.js not found in PATH"
20
+ exit 1
21
+ fi
22
+
23
+ cat > "${TMP_DIR}/justfile" <<'EOF'
24
+ default:
25
+ @echo smoke-ok
26
+ EOF
27
+
28
+ echo "Installing/refreshing just plugin..."
29
+ node "${CLI}" plugins install just --on-conflict replace --json >/dev/null
30
+
31
+ echo "Checking just CLI availability (just --version)..."
32
+ just --version >/dev/null
33
+
34
+ echo "Running wrapped command smoke test..."
35
+ node "${CLI}" just cli version --json
36
+
37
+ echo "Running passthrough smoke test..."
38
+ node "${CLI}" just --list --justfile "${TMP_DIR}/justfile"
39
+
40
+ echo "Smoke test completed."
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ CLI="${ROOT_DIR}/cli/supercli.js"
7
+
8
+ echo "== kubectl smoke test (interactive) =="
9
+
10
+ if ! command -v kubectl >/dev/null 2>&1; then
11
+ echo "kubectl not found in PATH."
12
+ echo "Install it first: https://kubernetes.io/docs/tasks/tools/"
13
+ exit 1
14
+ fi
15
+
16
+ if ! command -v node >/dev/null 2>&1; then
17
+ echo "Node.js not found in PATH"
18
+ exit 1
19
+ fi
20
+
21
+ echo "Installing/refreshing kubectl plugin..."
22
+ node "${CLI}" plugins install kubectl --on-conflict replace --json >/dev/null
23
+
24
+ echo "Checking Kubernetes context (kubectl config current-context)..."
25
+ if ! kubectl config current-context >/dev/null 2>&1; then
26
+ echo "No active kubectl context found. Configure kubeconfig first, then rerun this script."
27
+ echo "Verify with: kubectl config current-context"
28
+ exit 1
29
+ fi
30
+
31
+ echo "Running wrapped command smoke test..."
32
+ node "${CLI}" kubectl config current-context --json
33
+
34
+ echo "Running passthrough smoke test..."
35
+ node "${CLI}" kubectl get pods -o json
36
+
37
+ echo "Smoke test completed."