@wipcomputer/wip-ai-devops-toolbox 1.9.59 → 1.9.61

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 (742) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/SKILL.md +1 -1
  3. package/package.json +1 -1
  4. package/tools/deploy-public/package.json +1 -1
  5. package/tools/post-merge-rename/package.json +1 -1
  6. package/tools/wip-branch-guard/guard.mjs +1 -1
  7. package/tools/wip-branch-guard/package.json +1 -1
  8. package/tools/wip-branch-guard/test.sh +117 -0
  9. package/tools/wip-file-guard/package.json +1 -1
  10. package/tools/wip-license-guard/package.json +1 -1
  11. package/tools/wip-license-hook/package.json +1 -1
  12. package/tools/wip-readme-format/package.json +1 -1
  13. package/tools/wip-release/core.mjs +38 -0
  14. package/tools/wip-release/package.json +1 -1
  15. package/tools/wip-repo-init/package.json +1 -1
  16. package/tools/wip-repo-permissions-hook/package.json +1 -1
  17. package/tools/wip-repos/package.json +1 -1
  18. package/tools/wip-universal-installer/package.json +1 -1
  19. package/.worktrees/toolbox--guard-plan/.license-guard.json +0 -7
  20. package/.worktrees/toolbox--guard-plan/.publish-skill.json +0 -4
  21. package/.worktrees/toolbox--guard-plan/CHANGELOG.md +0 -1965
  22. package/.worktrees/toolbox--guard-plan/CLA.md +0 -19
  23. package/.worktrees/toolbox--guard-plan/DEV-GUIDE-GENERAL-PUBLIC.md +0 -949
  24. package/.worktrees/toolbox--guard-plan/LICENSE +0 -52
  25. package/.worktrees/toolbox--guard-plan/README.md +0 -238
  26. package/.worktrees/toolbox--guard-plan/RELEASE-NOTES-v1-9-59.md +0 -28
  27. package/.worktrees/toolbox--guard-plan/SKILL.md +0 -821
  28. package/.worktrees/toolbox--guard-plan/TECHNICAL.md +0 -416
  29. package/.worktrees/toolbox--guard-plan/UNIVERSAL-INTERFACE.md +0 -180
  30. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-8-0.md +0 -29
  31. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-8-1.md +0 -7
  32. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-8-2.md +0 -7
  33. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-0.md +0 -37
  34. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-1.md +0 -38
  35. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-10.md +0 -40
  36. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-2.md +0 -40
  37. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-31.md +0 -26
  38. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-32.md +0 -18
  39. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-41.md +0 -28
  40. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-45.md +0 -25
  41. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-46.md +0 -38
  42. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-47.md +0 -42
  43. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-48.md +0 -22
  44. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-49.md +0 -31
  45. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-50.md +0 -24
  46. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-51.md +0 -11
  47. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-52.md +0 -25
  48. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-53.md +0 -22
  49. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-54.md +0 -13
  50. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-55.md +0 -11
  51. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-56.md +0 -42
  52. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-57.md +0 -18
  53. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-58.md +0 -21
  54. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-6.md +0 -72
  55. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-7.md +0 -23
  56. package/.worktrees/toolbox--guard-plan/_trash/RELEASE-NOTES-v1-9-9.md +0 -75
  57. package/.worktrees/toolbox--guard-plan/_trash/guide 2/DEV-GUIDE.md +0 -487
  58. package/.worktrees/toolbox--guard-plan/_trash/guide 2/scripts/deploy-public.sh +0 -152
  59. package/.worktrees/toolbox--guard-plan/package.json +0 -27
  60. package/.worktrees/toolbox--guard-plan/scripts/SKILL-deploy-public.md +0 -61
  61. package/.worktrees/toolbox--guard-plan/scripts/SKILL-post-merge-rename.md +0 -47
  62. package/.worktrees/toolbox--guard-plan/scripts/deploy-public.sh +0 -350
  63. package/.worktrees/toolbox--guard-plan/scripts/post-merge-rename.sh +0 -210
  64. package/.worktrees/toolbox--guard-plan/scripts/publish-skill.sh +0 -134
  65. package/.worktrees/toolbox--guard-plan/templates/global-claude-md.md +0 -73
  66. package/.worktrees/toolbox--guard-plan/templates/repo-claude-md.template +0 -24
  67. package/.worktrees/toolbox--guard-plan/tools/deploy-public/LICENSE +0 -52
  68. package/.worktrees/toolbox--guard-plan/tools/deploy-public/README.md +0 -31
  69. package/.worktrees/toolbox--guard-plan/tools/deploy-public/SKILL.md +0 -71
  70. package/.worktrees/toolbox--guard-plan/tools/deploy-public/deploy-public.sh +0 -264
  71. package/.worktrees/toolbox--guard-plan/tools/deploy-public/package.json +0 -9
  72. package/.worktrees/toolbox--guard-plan/tools/ldm-jobs/LICENSE +0 -52
  73. package/.worktrees/toolbox--guard-plan/tools/ldm-jobs/README.md +0 -46
  74. package/.worktrees/toolbox--guard-plan/tools/ldm-jobs/backup.sh +0 -16
  75. package/.worktrees/toolbox--guard-plan/tools/ldm-jobs/branch-protect.sh +0 -39
  76. package/.worktrees/toolbox--guard-plan/tools/ldm-jobs/crystal-capture.sh +0 -19
  77. package/.worktrees/toolbox--guard-plan/tools/ldm-jobs/setup-shell.sh +0 -27
  78. package/.worktrees/toolbox--guard-plan/tools/ldm-jobs/visibility-audit.sh +0 -27
  79. package/.worktrees/toolbox--guard-plan/tools/post-merge-rename/LICENSE +0 -52
  80. package/.worktrees/toolbox--guard-plan/tools/post-merge-rename/README.md +0 -29
  81. package/.worktrees/toolbox--guard-plan/tools/post-merge-rename/SKILL.md +0 -57
  82. package/.worktrees/toolbox--guard-plan/tools/post-merge-rename/package.json +0 -9
  83. package/.worktrees/toolbox--guard-plan/tools/post-merge-rename/post-merge-rename.sh +0 -122
  84. package/.worktrees/toolbox--guard-plan/tools/wip-branch-guard/INSTALL.md +0 -41
  85. package/.worktrees/toolbox--guard-plan/tools/wip-branch-guard/guard.mjs +0 -477
  86. package/.worktrees/toolbox--guard-plan/tools/wip-branch-guard/package.json +0 -18
  87. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/CHANGELOG.md +0 -6
  88. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/LICENSE +0 -52
  89. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/README.md +0 -113
  90. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/REFERENCE.md +0 -86
  91. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/SKILL.md +0 -105
  92. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/guard.mjs +0 -161
  93. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/openclaw.plugin.json +0 -8
  94. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/package.json +0 -27
  95. package/.worktrees/toolbox--guard-plan/tools/wip-file-guard/test.sh +0 -119
  96. package/.worktrees/toolbox--guard-plan/tools/wip-license-guard/LICENSE +0 -52
  97. package/.worktrees/toolbox--guard-plan/tools/wip-license-guard/README.md +0 -69
  98. package/.worktrees/toolbox--guard-plan/tools/wip-license-guard/SKILL.md +0 -65
  99. package/.worktrees/toolbox--guard-plan/tools/wip-license-guard/cli.mjs +0 -472
  100. package/.worktrees/toolbox--guard-plan/tools/wip-license-guard/core.mjs +0 -310
  101. package/.worktrees/toolbox--guard-plan/tools/wip-license-guard/guard.mjs +0 -146
  102. package/.worktrees/toolbox--guard-plan/tools/wip-license-guard/package.json +0 -22
  103. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/CHANGELOG.md +0 -17
  104. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/LICENSE +0 -52
  105. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/README.md +0 -200
  106. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/SKILL.md +0 -111
  107. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/cli/index.d.ts +0 -15
  108. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/cli/index.js +0 -170
  109. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/cli/index.js.map +0 -1
  110. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/detector.d.ts +0 -12
  111. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/detector.js +0 -104
  112. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/detector.js.map +0 -1
  113. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/index.d.ts +0 -4
  114. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/index.js +0 -5
  115. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/index.js.map +0 -1
  116. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/ledger.d.ts +0 -49
  117. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/ledger.js +0 -72
  118. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/ledger.js.map +0 -1
  119. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/reporter.d.ts +0 -14
  120. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/reporter.js +0 -227
  121. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/reporter.js.map +0 -1
  122. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/scanner.d.ts +0 -39
  123. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/scanner.js +0 -325
  124. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/dist/core/scanner.js.map +0 -1
  125. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/hooks/pre-pull.sh +0 -55
  126. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/hooks/pre-push.sh +0 -51
  127. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/mcp-server.mjs +0 -119
  128. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/package-lock.json +0 -54
  129. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/package.json +0 -43
  130. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/src/cli/index.ts +0 -189
  131. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/src/core/detector.ts +0 -130
  132. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/src/core/index.ts +0 -4
  133. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/src/core/ledger.ts +0 -116
  134. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/src/core/reporter.ts +0 -255
  135. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/src/core/scanner.ts +0 -367
  136. package/.worktrees/toolbox--guard-plan/tools/wip-license-hook/tsconfig.json +0 -16
  137. package/.worktrees/toolbox--guard-plan/tools/wip-readme-format/README.md +0 -49
  138. package/.worktrees/toolbox--guard-plan/tools/wip-readme-format/SKILL.md +0 -84
  139. package/.worktrees/toolbox--guard-plan/tools/wip-readme-format/format.mjs +0 -597
  140. package/.worktrees/toolbox--guard-plan/tools/wip-readme-format/package.json +0 -15
  141. package/.worktrees/toolbox--guard-plan/tools/wip-release/CHANGELOG.md +0 -42
  142. package/.worktrees/toolbox--guard-plan/tools/wip-release/LICENSE +0 -52
  143. package/.worktrees/toolbox--guard-plan/tools/wip-release/README.md +0 -45
  144. package/.worktrees/toolbox--guard-plan/tools/wip-release/REFERENCE.md +0 -100
  145. package/.worktrees/toolbox--guard-plan/tools/wip-release/SKILL.md +0 -139
  146. package/.worktrees/toolbox--guard-plan/tools/wip-release/cli.js +0 -175
  147. package/.worktrees/toolbox--guard-plan/tools/wip-release/core.mjs +0 -1664
  148. package/.worktrees/toolbox--guard-plan/tools/wip-release/mcp-server.mjs +0 -113
  149. package/.worktrees/toolbox--guard-plan/tools/wip-release/package.json +0 -36
  150. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/README.md +0 -38
  151. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/SKILL.md +0 -77
  152. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/init.mjs +0 -148
  153. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/package.json +0 -11
  154. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/_sort/README.md +0 -15
  155. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/_trash/README.md +0 -16
  156. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/dev-updates/README.md +0 -50
  157. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/product/notes/README.md +0 -26
  158. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +0 -77
  159. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +0 -63
  160. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/product/product-ideas/README.md +0 -24
  161. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/product/readme-first-product.md +0 -128
  162. package/.worktrees/toolbox--guard-plan/tools/wip-repo-init/templates/read-me-first.md +0 -80
  163. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/LICENSE +0 -52
  164. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/README.md +0 -86
  165. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/SKILL.md +0 -73
  166. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/cli.js +0 -93
  167. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/core.mjs +0 -122
  168. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/guard.mjs +0 -64
  169. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/mcp-server.mjs +0 -92
  170. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/openclaw.plugin.json +0 -8
  171. package/.worktrees/toolbox--guard-plan/tools/wip-repo-permissions-hook/package.json +0 -31
  172. package/.worktrees/toolbox--guard-plan/tools/wip-repos/LICENSE +0 -52
  173. package/.worktrees/toolbox--guard-plan/tools/wip-repos/README.md +0 -77
  174. package/.worktrees/toolbox--guard-plan/tools/wip-repos/SKILL.md +0 -80
  175. package/.worktrees/toolbox--guard-plan/tools/wip-repos/claude.mjs +0 -248
  176. package/.worktrees/toolbox--guard-plan/tools/wip-repos/cli.mjs +0 -191
  177. package/.worktrees/toolbox--guard-plan/tools/wip-repos/core.mjs +0 -290
  178. package/.worktrees/toolbox--guard-plan/tools/wip-repos/mcp-server.mjs +0 -157
  179. package/.worktrees/toolbox--guard-plan/tools/wip-repos/package.json +0 -34
  180. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/CHANGELOG.md +0 -57
  181. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/LICENSE +0 -52
  182. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/README.md +0 -81
  183. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/REFERENCE.md +0 -122
  184. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/SKILL.md +0 -87
  185. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/SPEC.md +0 -206
  186. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/detect.mjs +0 -130
  187. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/examples/minimal/README.md +0 -20
  188. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/examples/minimal/SKILL.md +0 -28
  189. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/examples/minimal/cli.mjs +0 -4
  190. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/examples/minimal/core.mjs +0 -8
  191. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +0 -27
  192. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/examples/minimal/package.json +0 -12
  193. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/install.js +0 -930
  194. package/.worktrees/toolbox--guard-plan/tools/wip-universal-installer/package.json +0 -32
  195. package/.worktrees/toolbox--release-notes/.license-guard.json +0 -7
  196. package/.worktrees/toolbox--release-notes/.publish-skill.json +0 -4
  197. package/.worktrees/toolbox--release-notes/CHANGELOG.md +0 -1875
  198. package/.worktrees/toolbox--release-notes/CLA.md +0 -19
  199. package/.worktrees/toolbox--release-notes/DEV-GUIDE-GENERAL-PUBLIC.md +0 -949
  200. package/.worktrees/toolbox--release-notes/LICENSE +0 -52
  201. package/.worktrees/toolbox--release-notes/README.md +0 -238
  202. package/.worktrees/toolbox--release-notes/RELEASE-NOTES-v1-9-56.md +0 -42
  203. package/.worktrees/toolbox--release-notes/SKILL.md +0 -821
  204. package/.worktrees/toolbox--release-notes/TECHNICAL.md +0 -416
  205. package/.worktrees/toolbox--release-notes/UNIVERSAL-INTERFACE.md +0 -180
  206. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-0.md +0 -29
  207. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-1.md +0 -7
  208. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-2.md +0 -7
  209. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-0.md +0 -37
  210. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-1.md +0 -38
  211. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-10.md +0 -40
  212. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-2.md +0 -40
  213. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-31.md +0 -26
  214. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-32.md +0 -18
  215. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-41.md +0 -28
  216. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-45.md +0 -25
  217. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-46.md +0 -38
  218. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-47.md +0 -42
  219. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-48.md +0 -22
  220. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-49.md +0 -31
  221. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-50.md +0 -24
  222. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-51.md +0 -11
  223. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-52.md +0 -25
  224. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-53.md +0 -22
  225. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-54.md +0 -13
  226. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-55.md +0 -11
  227. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-6.md +0 -72
  228. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-7.md +0 -23
  229. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-9.md +0 -75
  230. package/.worktrees/toolbox--release-notes/_trash/guide 2/DEV-GUIDE.md +0 -487
  231. package/.worktrees/toolbox--release-notes/_trash/guide 2/scripts/deploy-public.sh +0 -152
  232. package/.worktrees/toolbox--release-notes/package.json +0 -27
  233. package/.worktrees/toolbox--release-notes/scripts/SKILL-deploy-public.md +0 -61
  234. package/.worktrees/toolbox--release-notes/scripts/SKILL-post-merge-rename.md +0 -47
  235. package/.worktrees/toolbox--release-notes/scripts/deploy-public.sh +0 -345
  236. package/.worktrees/toolbox--release-notes/scripts/post-merge-rename.sh +0 -210
  237. package/.worktrees/toolbox--release-notes/scripts/publish-skill.sh +0 -134
  238. package/.worktrees/toolbox--release-notes/templates/global-claude-md.md +0 -73
  239. package/.worktrees/toolbox--release-notes/templates/repo-claude-md.template +0 -24
  240. package/.worktrees/toolbox--release-notes/tools/deploy-public/LICENSE +0 -52
  241. package/.worktrees/toolbox--release-notes/tools/deploy-public/README.md +0 -31
  242. package/.worktrees/toolbox--release-notes/tools/deploy-public/SKILL.md +0 -71
  243. package/.worktrees/toolbox--release-notes/tools/deploy-public/deploy-public.sh +0 -264
  244. package/.worktrees/toolbox--release-notes/tools/deploy-public/package.json +0 -9
  245. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/LICENSE +0 -52
  246. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/README.md +0 -46
  247. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/backup.sh +0 -16
  248. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/branch-protect.sh +0 -39
  249. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/crystal-capture.sh +0 -19
  250. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/setup-shell.sh +0 -27
  251. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/visibility-audit.sh +0 -27
  252. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/LICENSE +0 -52
  253. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/README.md +0 -29
  254. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/SKILL.md +0 -57
  255. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/package.json +0 -9
  256. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/post-merge-rename.sh +0 -122
  257. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/INSTALL.md +0 -41
  258. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/guard.mjs +0 -459
  259. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/package.json +0 -18
  260. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/CHANGELOG.md +0 -6
  261. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/LICENSE +0 -52
  262. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/README.md +0 -113
  263. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/REFERENCE.md +0 -86
  264. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/SKILL.md +0 -105
  265. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/guard.mjs +0 -161
  266. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/openclaw.plugin.json +0 -8
  267. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/package.json +0 -27
  268. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/test.sh +0 -119
  269. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/LICENSE +0 -52
  270. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/README.md +0 -69
  271. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/SKILL.md +0 -65
  272. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/cli.mjs +0 -472
  273. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/core.mjs +0 -310
  274. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/guard.mjs +0 -146
  275. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/package.json +0 -22
  276. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/CHANGELOG.md +0 -17
  277. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/LICENSE +0 -52
  278. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/README.md +0 -200
  279. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/SKILL.md +0 -111
  280. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.d.ts +0 -15
  281. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js +0 -170
  282. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js.map +0 -1
  283. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.d.ts +0 -12
  284. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js +0 -104
  285. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js.map +0 -1
  286. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.d.ts +0 -4
  287. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js +0 -5
  288. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js.map +0 -1
  289. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.d.ts +0 -49
  290. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js +0 -72
  291. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js.map +0 -1
  292. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.d.ts +0 -14
  293. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js +0 -227
  294. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js.map +0 -1
  295. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.d.ts +0 -39
  296. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js +0 -325
  297. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js.map +0 -1
  298. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-pull.sh +0 -55
  299. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-push.sh +0 -51
  300. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/mcp-server.mjs +0 -119
  301. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package-lock.json +0 -54
  302. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package.json +0 -43
  303. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/cli/index.ts +0 -189
  304. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/detector.ts +0 -130
  305. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/index.ts +0 -4
  306. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/ledger.ts +0 -116
  307. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/reporter.ts +0 -255
  308. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/scanner.ts +0 -367
  309. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/tsconfig.json +0 -16
  310. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/README.md +0 -49
  311. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/SKILL.md +0 -84
  312. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/format.mjs +0 -597
  313. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/package.json +0 -15
  314. package/.worktrees/toolbox--release-notes/tools/wip-release/CHANGELOG.md +0 -42
  315. package/.worktrees/toolbox--release-notes/tools/wip-release/LICENSE +0 -52
  316. package/.worktrees/toolbox--release-notes/tools/wip-release/README.md +0 -45
  317. package/.worktrees/toolbox--release-notes/tools/wip-release/REFERENCE.md +0 -100
  318. package/.worktrees/toolbox--release-notes/tools/wip-release/SKILL.md +0 -139
  319. package/.worktrees/toolbox--release-notes/tools/wip-release/cli.js +0 -175
  320. package/.worktrees/toolbox--release-notes/tools/wip-release/core.mjs +0 -1664
  321. package/.worktrees/toolbox--release-notes/tools/wip-release/mcp-server.mjs +0 -113
  322. package/.worktrees/toolbox--release-notes/tools/wip-release/package.json +0 -36
  323. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/README.md +0 -38
  324. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/SKILL.md +0 -77
  325. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/init.mjs +0 -148
  326. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/package.json +0 -11
  327. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_sort/README.md +0 -15
  328. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_trash/README.md +0 -16
  329. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/dev-updates/README.md +0 -50
  330. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/notes/README.md +0 -26
  331. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +0 -77
  332. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +0 -63
  333. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/product-ideas/README.md +0 -24
  334. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/readme-first-product.md +0 -128
  335. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/read-me-first.md +0 -80
  336. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/LICENSE +0 -52
  337. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/README.md +0 -86
  338. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/SKILL.md +0 -73
  339. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/cli.js +0 -93
  340. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/core.mjs +0 -122
  341. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/guard.mjs +0 -64
  342. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/mcp-server.mjs +0 -92
  343. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/openclaw.plugin.json +0 -8
  344. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/package.json +0 -31
  345. package/.worktrees/toolbox--release-notes/tools/wip-repos/LICENSE +0 -52
  346. package/.worktrees/toolbox--release-notes/tools/wip-repos/README.md +0 -77
  347. package/.worktrees/toolbox--release-notes/tools/wip-repos/SKILL.md +0 -80
  348. package/.worktrees/toolbox--release-notes/tools/wip-repos/claude.mjs +0 -248
  349. package/.worktrees/toolbox--release-notes/tools/wip-repos/cli.mjs +0 -191
  350. package/.worktrees/toolbox--release-notes/tools/wip-repos/core.mjs +0 -290
  351. package/.worktrees/toolbox--release-notes/tools/wip-repos/mcp-server.mjs +0 -157
  352. package/.worktrees/toolbox--release-notes/tools/wip-repos/package.json +0 -34
  353. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/CHANGELOG.md +0 -57
  354. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/LICENSE +0 -52
  355. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/README.md +0 -81
  356. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/REFERENCE.md +0 -122
  357. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SKILL.md +0 -87
  358. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SPEC.md +0 -206
  359. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/detect.mjs +0 -130
  360. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/README.md +0 -20
  361. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/SKILL.md +0 -28
  362. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/cli.mjs +0 -4
  363. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/core.mjs +0 -8
  364. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +0 -27
  365. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/package.json +0 -12
  366. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/install.js +0 -930
  367. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/package.json +0 -32
  368. package/.worktrees/toolbox--save-stale/.license-guard.json +0 -7
  369. package/.worktrees/toolbox--save-stale/.publish-skill.json +0 -4
  370. package/.worktrees/toolbox--save-stale/CHANGELOG.md +0 -1875
  371. package/.worktrees/toolbox--save-stale/CLA.md +0 -19
  372. package/.worktrees/toolbox--save-stale/DEV-GUIDE-GENERAL-PUBLIC.md +0 -949
  373. package/.worktrees/toolbox--save-stale/LICENSE +0 -52
  374. package/.worktrees/toolbox--save-stale/README.md +0 -238
  375. package/.worktrees/toolbox--save-stale/SKILL.md +0 -821
  376. package/.worktrees/toolbox--save-stale/TECHNICAL.md +0 -416
  377. package/.worktrees/toolbox--save-stale/UNIVERSAL-INTERFACE.md +0 -180
  378. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-0.md +0 -29
  379. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-1.md +0 -7
  380. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-2.md +0 -7
  381. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-0.md +0 -37
  382. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-1.md +0 -38
  383. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-10.md +0 -40
  384. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-2.md +0 -40
  385. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-31.md +0 -26
  386. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-32.md +0 -18
  387. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-41.md +0 -28
  388. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-45.md +0 -25
  389. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-46.md +0 -38
  390. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-47.md +0 -42
  391. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-48.md +0 -22
  392. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-49.md +0 -31
  393. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-50.md +0 -24
  394. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-51.md +0 -11
  395. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-52.md +0 -25
  396. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-53.md +0 -22
  397. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-54.md +0 -13
  398. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-55.md +0 -11
  399. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-6.md +0 -72
  400. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-7.md +0 -23
  401. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-9.md +0 -75
  402. package/.worktrees/toolbox--save-stale/_trash/guide 2/DEV-GUIDE.md +0 -487
  403. package/.worktrees/toolbox--save-stale/_trash/guide 2/scripts/deploy-public.sh +0 -152
  404. package/.worktrees/toolbox--save-stale/package.json +0 -27
  405. package/.worktrees/toolbox--save-stale/scripts/SKILL-deploy-public.md +0 -61
  406. package/.worktrees/toolbox--save-stale/scripts/SKILL-post-merge-rename.md +0 -47
  407. package/.worktrees/toolbox--save-stale/scripts/deploy-public.sh +0 -345
  408. package/.worktrees/toolbox--save-stale/scripts/post-merge-rename.sh +0 -210
  409. package/.worktrees/toolbox--save-stale/scripts/publish-skill.sh +0 -134
  410. package/.worktrees/toolbox--save-stale/templates/global-claude-md.md +0 -73
  411. package/.worktrees/toolbox--save-stale/templates/repo-claude-md.template +0 -24
  412. package/.worktrees/toolbox--save-stale/tools/deploy-public/LICENSE +0 -52
  413. package/.worktrees/toolbox--save-stale/tools/deploy-public/README.md +0 -31
  414. package/.worktrees/toolbox--save-stale/tools/deploy-public/SKILL.md +0 -71
  415. package/.worktrees/toolbox--save-stale/tools/deploy-public/deploy-public.sh +0 -264
  416. package/.worktrees/toolbox--save-stale/tools/deploy-public/package.json +0 -9
  417. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/LICENSE +0 -52
  418. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/README.md +0 -46
  419. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/backup.sh +0 -16
  420. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/branch-protect.sh +0 -39
  421. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/crystal-capture.sh +0 -19
  422. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/setup-shell.sh +0 -27
  423. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/visibility-audit.sh +0 -27
  424. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/LICENSE +0 -52
  425. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/README.md +0 -29
  426. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/SKILL.md +0 -57
  427. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/package.json +0 -9
  428. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/post-merge-rename.sh +0 -122
  429. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/INSTALL.md +0 -41
  430. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/guard.mjs +0 -459
  431. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/package.json +0 -18
  432. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/CHANGELOG.md +0 -6
  433. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/LICENSE +0 -52
  434. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/README.md +0 -113
  435. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/REFERENCE.md +0 -86
  436. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/SKILL.md +0 -105
  437. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/guard.mjs +0 -161
  438. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/openclaw.plugin.json +0 -8
  439. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/package.json +0 -27
  440. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/test.sh +0 -119
  441. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/LICENSE +0 -52
  442. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/README.md +0 -69
  443. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/SKILL.md +0 -65
  444. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/cli.mjs +0 -472
  445. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/core.mjs +0 -310
  446. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/guard.mjs +0 -146
  447. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/package.json +0 -22
  448. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/CHANGELOG.md +0 -17
  449. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/LICENSE +0 -52
  450. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/README.md +0 -200
  451. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/SKILL.md +0 -111
  452. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.d.ts +0 -15
  453. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js +0 -170
  454. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js.map +0 -1
  455. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.d.ts +0 -12
  456. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js +0 -104
  457. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js.map +0 -1
  458. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.d.ts +0 -4
  459. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js +0 -5
  460. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js.map +0 -1
  461. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.d.ts +0 -49
  462. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js +0 -72
  463. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js.map +0 -1
  464. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.d.ts +0 -14
  465. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js +0 -227
  466. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js.map +0 -1
  467. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.d.ts +0 -39
  468. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js +0 -325
  469. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js.map +0 -1
  470. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-pull.sh +0 -55
  471. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-push.sh +0 -51
  472. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/mcp-server.mjs +0 -119
  473. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package-lock.json +0 -54
  474. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package.json +0 -43
  475. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/cli/index.ts +0 -189
  476. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/detector.ts +0 -130
  477. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/index.ts +0 -4
  478. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/ledger.ts +0 -116
  479. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/reporter.ts +0 -255
  480. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/scanner.ts +0 -367
  481. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/tsconfig.json +0 -16
  482. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/README.md +0 -49
  483. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/SKILL.md +0 -84
  484. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/format.mjs +0 -597
  485. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/package.json +0 -15
  486. package/.worktrees/toolbox--save-stale/tools/wip-release/CHANGELOG.md +0 -42
  487. package/.worktrees/toolbox--save-stale/tools/wip-release/LICENSE +0 -52
  488. package/.worktrees/toolbox--save-stale/tools/wip-release/README.md +0 -45
  489. package/.worktrees/toolbox--save-stale/tools/wip-release/REFERENCE.md +0 -100
  490. package/.worktrees/toolbox--save-stale/tools/wip-release/SKILL.md +0 -139
  491. package/.worktrees/toolbox--save-stale/tools/wip-release/cli.js +0 -175
  492. package/.worktrees/toolbox--save-stale/tools/wip-release/core.mjs +0 -1664
  493. package/.worktrees/toolbox--save-stale/tools/wip-release/mcp-server.mjs +0 -113
  494. package/.worktrees/toolbox--save-stale/tools/wip-release/package.json +0 -36
  495. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/README.md +0 -38
  496. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/SKILL.md +0 -77
  497. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/init.mjs +0 -148
  498. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/package.json +0 -11
  499. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_sort/README.md +0 -15
  500. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_trash/README.md +0 -16
  501. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/dev-updates/README.md +0 -50
  502. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/notes/README.md +0 -26
  503. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +0 -77
  504. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +0 -63
  505. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/product-ideas/README.md +0 -24
  506. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/readme-first-product.md +0 -128
  507. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/read-me-first.md +0 -80
  508. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/LICENSE +0 -52
  509. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/README.md +0 -86
  510. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/SKILL.md +0 -73
  511. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/cli.js +0 -93
  512. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/core.mjs +0 -122
  513. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/guard.mjs +0 -64
  514. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/mcp-server.mjs +0 -92
  515. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/openclaw.plugin.json +0 -8
  516. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/package.json +0 -31
  517. package/.worktrees/toolbox--save-stale/tools/wip-repos/LICENSE +0 -52
  518. package/.worktrees/toolbox--save-stale/tools/wip-repos/README.md +0 -77
  519. package/.worktrees/toolbox--save-stale/tools/wip-repos/SKILL.md +0 -80
  520. package/.worktrees/toolbox--save-stale/tools/wip-repos/claude.mjs +0 -248
  521. package/.worktrees/toolbox--save-stale/tools/wip-repos/cli.mjs +0 -191
  522. package/.worktrees/toolbox--save-stale/tools/wip-repos/core.mjs +0 -290
  523. package/.worktrees/toolbox--save-stale/tools/wip-repos/mcp-server.mjs +0 -157
  524. package/.worktrees/toolbox--save-stale/tools/wip-repos/package.json +0 -34
  525. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/CHANGELOG.md +0 -57
  526. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/LICENSE +0 -52
  527. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/README.md +0 -81
  528. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/REFERENCE.md +0 -122
  529. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SKILL.md +0 -87
  530. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SPEC.md +0 -206
  531. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/detect.mjs +0 -130
  532. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/README.md +0 -20
  533. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/SKILL.md +0 -28
  534. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/cli.mjs +0 -4
  535. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/core.mjs +0 -8
  536. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +0 -27
  537. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/package.json +0 -12
  538. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/install.js +0 -930
  539. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/package.json +0 -32
  540. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.license-guard.json +0 -7
  541. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.publish-skill.json +0 -4
  542. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CHANGELOG.md +0 -1875
  543. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CLA.md +0 -19
  544. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/DEV-GUIDE-GENERAL-PUBLIC.md +0 -949
  545. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/LICENSE +0 -52
  546. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/README.md +0 -238
  547. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/SKILL.md +0 -821
  548. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/TECHNICAL.md +0 -416
  549. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/UNIVERSAL-INTERFACE.md +0 -180
  550. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-0.md +0 -29
  551. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-1.md +0 -7
  552. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-2.md +0 -7
  553. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-0.md +0 -37
  554. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-1.md +0 -38
  555. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-10.md +0 -40
  556. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-2.md +0 -40
  557. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-31.md +0 -26
  558. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-32.md +0 -18
  559. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-41.md +0 -28
  560. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-45.md +0 -25
  561. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-46.md +0 -38
  562. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-47.md +0 -42
  563. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-48.md +0 -22
  564. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-49.md +0 -31
  565. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-50.md +0 -24
  566. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-51.md +0 -11
  567. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-52.md +0 -25
  568. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-53.md +0 -22
  569. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-54.md +0 -13
  570. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-55.md +0 -11
  571. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-6.md +0 -72
  572. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-7.md +0 -23
  573. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-9.md +0 -75
  574. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/DEV-GUIDE.md +0 -487
  575. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/scripts/deploy-public.sh +0 -152
  576. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/package.json +0 -27
  577. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-deploy-public.md +0 -61
  578. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-post-merge-rename.md +0 -47
  579. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/deploy-public.sh +0 -345
  580. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/post-merge-rename.sh +0 -210
  581. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/publish-skill.sh +0 -134
  582. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/global-claude-md.md +0 -73
  583. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/repo-claude-md.template +0 -24
  584. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/LICENSE +0 -52
  585. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/README.md +0 -31
  586. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/SKILL.md +0 -71
  587. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/deploy-public.sh +0 -264
  588. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/package.json +0 -9
  589. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/LICENSE +0 -52
  590. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/README.md +0 -46
  591. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/backup.sh +0 -16
  592. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/branch-protect.sh +0 -39
  593. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/crystal-capture.sh +0 -19
  594. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/setup-shell.sh +0 -27
  595. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/visibility-audit.sh +0 -27
  596. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/LICENSE +0 -52
  597. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/README.md +0 -29
  598. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/SKILL.md +0 -57
  599. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/package.json +0 -9
  600. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/post-merge-rename.sh +0 -122
  601. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/INSTALL.md +0 -41
  602. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/guard.mjs +0 -418
  603. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/package.json +0 -18
  604. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/CHANGELOG.md +0 -6
  605. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/LICENSE +0 -52
  606. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/README.md +0 -113
  607. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/REFERENCE.md +0 -86
  608. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/SKILL.md +0 -105
  609. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/guard.mjs +0 -161
  610. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/openclaw.plugin.json +0 -8
  611. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/package.json +0 -27
  612. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/test.sh +0 -119
  613. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/LICENSE +0 -52
  614. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/README.md +0 -69
  615. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/SKILL.md +0 -65
  616. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/cli.mjs +0 -472
  617. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/core.mjs +0 -310
  618. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/guard.mjs +0 -146
  619. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/package.json +0 -22
  620. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/CHANGELOG.md +0 -17
  621. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/LICENSE +0 -52
  622. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/README.md +0 -200
  623. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/SKILL.md +0 -111
  624. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.d.ts +0 -15
  625. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js +0 -170
  626. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js.map +0 -1
  627. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.d.ts +0 -12
  628. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js +0 -104
  629. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js.map +0 -1
  630. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.d.ts +0 -4
  631. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js +0 -5
  632. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js.map +0 -1
  633. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.d.ts +0 -49
  634. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js +0 -72
  635. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js.map +0 -1
  636. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.d.ts +0 -14
  637. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js +0 -227
  638. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js.map +0 -1
  639. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.d.ts +0 -39
  640. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js +0 -325
  641. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js.map +0 -1
  642. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-pull.sh +0 -55
  643. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-push.sh +0 -51
  644. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/mcp-server.mjs +0 -119
  645. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package-lock.json +0 -54
  646. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package.json +0 -43
  647. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/cli/index.ts +0 -189
  648. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/detector.ts +0 -130
  649. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/index.ts +0 -4
  650. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/ledger.ts +0 -116
  651. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/reporter.ts +0 -255
  652. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/scanner.ts +0 -367
  653. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/tsconfig.json +0 -16
  654. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/README.md +0 -49
  655. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/SKILL.md +0 -84
  656. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/format.mjs +0 -597
  657. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/package.json +0 -15
  658. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/CHANGELOG.md +0 -42
  659. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/LICENSE +0 -52
  660. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/README.md +0 -45
  661. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/REFERENCE.md +0 -100
  662. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/SKILL.md +0 -139
  663. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/cli.js +0 -175
  664. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/core.mjs +0 -1664
  665. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/mcp-server.mjs +0 -113
  666. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/package.json +0 -36
  667. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/README.md +0 -38
  668. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/SKILL.md +0 -77
  669. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/init.mjs +0 -148
  670. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/package.json +0 -11
  671. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_sort/README.md +0 -15
  672. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_trash/README.md +0 -16
  673. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/dev-updates/README.md +0 -50
  674. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/notes/README.md +0 -26
  675. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +0 -77
  676. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +0 -63
  677. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/product-ideas/README.md +0 -24
  678. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/readme-first-product.md +0 -128
  679. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/read-me-first.md +0 -80
  680. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/LICENSE +0 -52
  681. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/README.md +0 -86
  682. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/SKILL.md +0 -73
  683. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/cli.js +0 -93
  684. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/core.mjs +0 -122
  685. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/guard.mjs +0 -64
  686. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/mcp-server.mjs +0 -92
  687. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/openclaw.plugin.json +0 -8
  688. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/package.json +0 -31
  689. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/LICENSE +0 -52
  690. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/README.md +0 -77
  691. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/SKILL.md +0 -80
  692. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/claude.mjs +0 -248
  693. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/cli.mjs +0 -191
  694. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/core.mjs +0 -290
  695. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/mcp-server.mjs +0 -157
  696. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/package.json +0 -34
  697. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/CHANGELOG.md +0 -57
  698. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/LICENSE +0 -52
  699. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/README.md +0 -81
  700. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/REFERENCE.md +0 -122
  701. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SKILL.md +0 -87
  702. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SPEC.md +0 -206
  703. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/detect.mjs +0 -130
  704. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/README.md +0 -20
  705. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/SKILL.md +0 -28
  706. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/cli.mjs +0 -4
  707. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/core.mjs +0 -8
  708. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +0 -27
  709. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/package.json +0 -12
  710. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/install.js +0 -930
  711. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/package.json +0 -32
  712. package/_trash/RELEASE-NOTES-v1-8-0.md +0 -29
  713. package/_trash/RELEASE-NOTES-v1-8-1.md +0 -7
  714. package/_trash/RELEASE-NOTES-v1-8-2.md +0 -7
  715. package/_trash/RELEASE-NOTES-v1-9-0.md +0 -37
  716. package/_trash/RELEASE-NOTES-v1-9-1.md +0 -38
  717. package/_trash/RELEASE-NOTES-v1-9-10.md +0 -40
  718. package/_trash/RELEASE-NOTES-v1-9-2.md +0 -40
  719. package/_trash/RELEASE-NOTES-v1-9-31.md +0 -26
  720. package/_trash/RELEASE-NOTES-v1-9-32.md +0 -18
  721. package/_trash/RELEASE-NOTES-v1-9-41.md +0 -28
  722. package/_trash/RELEASE-NOTES-v1-9-45.md +0 -25
  723. package/_trash/RELEASE-NOTES-v1-9-46.md +0 -38
  724. package/_trash/RELEASE-NOTES-v1-9-47.md +0 -42
  725. package/_trash/RELEASE-NOTES-v1-9-48.md +0 -22
  726. package/_trash/RELEASE-NOTES-v1-9-49.md +0 -31
  727. package/_trash/RELEASE-NOTES-v1-9-50.md +0 -24
  728. package/_trash/RELEASE-NOTES-v1-9-51.md +0 -11
  729. package/_trash/RELEASE-NOTES-v1-9-52.md +0 -25
  730. package/_trash/RELEASE-NOTES-v1-9-53.md +0 -22
  731. package/_trash/RELEASE-NOTES-v1-9-54.md +0 -13
  732. package/_trash/RELEASE-NOTES-v1-9-55.md +0 -11
  733. package/_trash/RELEASE-NOTES-v1-9-56.md +0 -42
  734. package/_trash/RELEASE-NOTES-v1-9-57.md +0 -18
  735. package/_trash/RELEASE-NOTES-v1-9-58.md +0 -21
  736. package/_trash/RELEASE-NOTES-v1-9-59.md +0 -28
  737. package/_trash/RELEASE-NOTES-v1-9-6.md +0 -72
  738. package/_trash/RELEASE-NOTES-v1-9-7.md +0 -23
  739. package/_trash/RELEASE-NOTES-v1-9-9.md +0 -75
  740. package/_trash/guide 2/DEV-GUIDE.md +0 -487
  741. package/_trash/guide 2/scripts/deploy-public.sh +0 -152
  742. package/tools/wip-repo-init/templates/_trash/README.md +0 -16
@@ -1,930 +0,0 @@
1
- #!/usr/bin/env node
2
- // wip-universal-installer/install.js
3
- // Reference installer for agent-native software.
4
- // Reads a repo, detects available interfaces, installs them all.
5
- // Deploys to LDM OS (~/.ldm/extensions/) and OpenClaw (~/.openclaw/extensions/).
6
- // Registers MCP servers at user scope via `claude mcp add --scope user`.
7
- // Maintains a registry at ~/.ldm/extensions/registry.json.
8
-
9
- import { execSync } from 'node:child_process';
10
- import { existsSync, readFileSync, writeFileSync, cpSync, mkdirSync, lstatSync, readlinkSync, unlinkSync, chmodSync, readdirSync } from 'node:fs';
11
- import { join, basename, resolve } from 'node:path';
12
- import { detectInterfaces, describeInterfaces, detectInterfacesJSON, detectToolbox } from './detect.mjs';
13
-
14
- const HOME = process.env.HOME || '';
15
- const LDM_ROOT = join(HOME, '.ldm');
16
- const LDM_EXTENSIONS = join(LDM_ROOT, 'extensions');
17
- const OC_ROOT = join(HOME, '.openclaw');
18
- const OC_EXTENSIONS = join(OC_ROOT, 'extensions');
19
- const OC_MCP = join(OC_ROOT, '.mcp.json');
20
- const REGISTRY_PATH = join(LDM_EXTENSIONS, 'registry.json');
21
-
22
- // Flags
23
- const args = process.argv.slice(2);
24
- const DRY_RUN = args.includes('--dry-run');
25
- const JSON_OUTPUT = args.includes('--json');
26
- const target = args.find(a => !a.startsWith('--'));
27
-
28
- function log(msg) { if (!JSON_OUTPUT) console.log(` ${msg}`); }
29
- function ok(msg) { if (!JSON_OUTPUT) console.log(` ✓ ${msg}`); }
30
- function skip(msg) { if (!JSON_OUTPUT) console.log(` - ${msg}`); }
31
- function fail(msg) { if (!JSON_OUTPUT) console.error(` ✗ ${msg}`); }
32
-
33
- function ensureBinExecutable(binNames) {
34
- try {
35
- const npmPrefix = execSync('npm config get prefix', { encoding: 'utf8' }).trim();
36
- for (const bin of binNames) {
37
- const binPath = join(npmPrefix, 'bin', bin);
38
- try { chmodSync(binPath, 0o755); } catch {}
39
- }
40
- } catch {}
41
- }
42
-
43
- function readJSON(path) {
44
- try {
45
- return JSON.parse(readFileSync(path, 'utf8'));
46
- } catch {
47
- return null;
48
- }
49
- }
50
-
51
- function writeJSON(path, data) {
52
- mkdirSync(join(path, '..'), { recursive: true });
53
- writeFileSync(path, JSON.stringify(data, null, 2) + '\n');
54
- }
55
-
56
- // ── Registry ──
57
-
58
- function loadRegistry() {
59
- return readJSON(REGISTRY_PATH) || { _format: 'v1', extensions: {} };
60
- }
61
-
62
- function saveRegistry(registry) {
63
- writeJSON(REGISTRY_PATH, registry);
64
- }
65
-
66
- function updateRegistry(name, info) {
67
- const registry = loadRegistry();
68
- registry.extensions[name] = {
69
- ...registry.extensions[name],
70
- ...info,
71
- updatedAt: new Date().toISOString(),
72
- };
73
- saveRegistry(registry);
74
- }
75
-
76
- // ── Migration detection ──
77
-
78
- /**
79
- * Scan existing extension directories for installs that match this tool
80
- * but live under a different directory name. Matches on:
81
- * 1. Same package name in package.json
82
- * 2. Same plugin id in openclaw.plugin.json
83
- * Returns array of { dirName, matchType, path } for each match.
84
- */
85
- function findExistingInstalls(toolName, pkg, ocPluginConfig) {
86
- const matches = [];
87
- const packageName = pkg?.name;
88
- const pluginId = ocPluginConfig?.id;
89
-
90
- // Scan both LDM and OC extension dirs
91
- for (const extDir of [LDM_EXTENSIONS, OC_EXTENSIONS]) {
92
- if (!existsSync(extDir)) continue;
93
- let entries;
94
- try {
95
- entries = readdirSync(extDir, { withFileTypes: true });
96
- } catch { continue; }
97
-
98
- for (const entry of entries) {
99
- if (!entry.isDirectory() && !entry.isSymbolicLink()) continue;
100
- const dirName = entry.name;
101
- // Skip if it's already the target name
102
- if (dirName === toolName) continue;
103
- // Skip registry.json
104
- if (dirName === 'registry.json') continue;
105
-
106
- const dirPath = join(extDir, dirName);
107
-
108
- // Check package.json name match
109
- if (packageName) {
110
- const dirPkg = readJSON(join(dirPath, 'package.json'));
111
- if (dirPkg?.name === packageName) {
112
- if (!matches.some(m => m.dirName === dirName)) {
113
- matches.push({ dirName, matchType: 'package', path: dirPath });
114
- }
115
- continue;
116
- }
117
- }
118
-
119
- // Check openclaw.plugin.json id match
120
- if (pluginId) {
121
- const dirPlugin = readJSON(join(dirPath, 'openclaw.plugin.json'));
122
- if (dirPlugin?.id === pluginId) {
123
- if (!matches.some(m => m.dirName === dirName)) {
124
- matches.push({ dirName, matchType: 'plugin-id', path: dirPath });
125
- }
126
- continue;
127
- }
128
- }
129
- }
130
- }
131
-
132
- return matches;
133
- }
134
-
135
- /**
136
- * Migrate an existing install from an old directory name to the new one.
137
- * Removes old extension dirs (LDM + OC), old MCP registrations, old skills.
138
- */
139
- function migrateExistingInstall(oldName, newName) {
140
- // 1. Remove old extension directories (check lstat too for broken symlinks)
141
- for (const extDir of [LDM_EXTENSIONS, OC_EXTENSIONS]) {
142
- const oldPath = join(extDir, oldName);
143
- let pathExists = existsSync(oldPath);
144
- if (!pathExists) {
145
- try { lstatSync(oldPath); pathExists = true; } catch {}
146
- }
147
- if (pathExists) {
148
- try {
149
- execSync(`rm -rf "${oldPath}"`, { stdio: 'pipe' });
150
- ok(`Migrated: removed ${oldPath}`);
151
- } catch (e) {
152
- fail(`Migration: could not remove ${oldPath}. ${e.message}`);
153
- }
154
- }
155
- }
156
-
157
- // 2. Remove old MCP registrations (Claude Code)
158
- try {
159
- execSync(`claude mcp remove ${oldName} --scope user`, { stdio: 'pipe' });
160
- ok(`Migrated: removed MCP registration "${oldName}" from Claude Code`);
161
- } catch {}
162
-
163
- // Also clean ~/.claude/.mcp.json fallback
164
- const ccMcpPath = join(HOME, '.claude', '.mcp.json');
165
- const ccMcp = readJSON(ccMcpPath);
166
- if (ccMcp?.mcpServers?.[oldName]) {
167
- delete ccMcp.mcpServers[oldName];
168
- writeJSON(ccMcpPath, ccMcp);
169
- }
170
-
171
- // Also clean ~/.claude.json (user-level MCP)
172
- const ccUserPath = join(HOME, '.claude.json');
173
- const ccUser = readJSON(ccUserPath);
174
- if (ccUser?.mcpServers?.[oldName]) {
175
- delete ccUser.mcpServers[oldName];
176
- writeJSON(ccUserPath, ccUser);
177
- ok(`Migrated: removed MCP registration "${oldName}" from ~/.claude.json`);
178
- }
179
-
180
- // 3. Remove old OpenClaw MCP registration
181
- if (existsSync(OC_MCP)) {
182
- const ocMcp = readJSON(OC_MCP);
183
- if (ocMcp?.mcpServers?.[oldName]) {
184
- delete ocMcp.mcpServers[oldName];
185
- writeJSON(OC_MCP, ocMcp);
186
- ok(`Migrated: removed MCP registration "${oldName}" from OpenClaw`);
187
- }
188
- }
189
-
190
- // 4. Remove old skill directory
191
- const oldSkillDir = join(OC_ROOT, 'skills', oldName);
192
- if (existsSync(oldSkillDir)) {
193
- try {
194
- execSync(`rm -rf "${oldSkillDir}"`, { stdio: 'pipe' });
195
- ok(`Migrated: removed old skill at ${oldSkillDir}`);
196
- } catch {}
197
- }
198
-
199
- // 5. Remove old registry entry
200
- const registry = loadRegistry();
201
- if (registry.extensions[oldName]) {
202
- delete registry.extensions[oldName];
203
- saveRegistry(registry);
204
- }
205
- }
206
-
207
- // ── Install functions ──
208
-
209
- function installCLI(repoPath, door) {
210
- const pkg = readJSON(join(repoPath, 'package.json'));
211
- const binNames = typeof door.bin === 'string' ? [basename(repoPath)] : Object.keys(door.bin || {});
212
- const newVersion = pkg?.version;
213
-
214
- // Check if already installed at this version
215
- if (newVersion && binNames.length > 0) {
216
- try {
217
- const installed = execSync(`npm list -g ${pkg.name} --json 2>/dev/null`, { encoding: 'utf8' });
218
- const data = JSON.parse(installed);
219
- const deps = data.dependencies || {};
220
- if (deps[pkg.name]?.version === newVersion) {
221
- // Still ensure bins are executable (git doesn't preserve +x)
222
- ensureBinExecutable(binNames);
223
- skip(`CLI: ${binNames.join(', ')} already at v${newVersion}`);
224
- return true;
225
- }
226
- } catch {}
227
- }
228
-
229
- if (DRY_RUN) {
230
- ok(`CLI: would install ${binNames.join(', ')} globally (dry run)`);
231
- return true;
232
- }
233
-
234
- // If the package has a build script and dist/ is missing, build first
235
- if (pkg?.scripts?.build && !existsSync(join(repoPath, 'dist'))) {
236
- try {
237
- log(`CLI: building ${binNames.join(', ')} (TypeScript)...`);
238
- execSync('npm run build', { cwd: repoPath, stdio: 'pipe' });
239
- } catch (e) {
240
- fail(`CLI: build failed. ${e.stderr?.toString()?.slice(0, 200) || e.message}`);
241
- }
242
- }
243
-
244
- try {
245
- execSync('npm install -g .', { cwd: repoPath, stdio: 'pipe' });
246
- // Safety net: ensure bin files are executable (git doesn't always preserve +x)
247
- ensureBinExecutable(binNames);
248
- ok(`CLI: ${binNames.join(', ')} installed globally`);
249
- return true;
250
- } catch (e) {
251
- const stderr = e.stderr?.toString() || '';
252
- // EEXIST: a binary with the same name exists from a different package.
253
- // Remove the stale symlink and retry.
254
- if (stderr.includes('EEXIST')) {
255
- for (const bin of binNames) {
256
- try {
257
- const binPath = execSync(`npm config get prefix`, { encoding: 'utf8' }).trim() + '/bin/' + bin;
258
- if (existsSync(binPath) && lstatSync(binPath).isSymbolicLink()) {
259
- const target = readlinkSync(binPath);
260
- // Only remove if it points to a different package
261
- if (!target.includes(pkg.name.replace(/^@[^/]+\//, ''))) {
262
- unlinkSync(binPath);
263
- }
264
- }
265
- } catch {}
266
- }
267
- try {
268
- execSync('npm install -g .', { cwd: repoPath, stdio: 'pipe' });
269
- ensureBinExecutable(binNames);
270
- ok(`CLI: ${binNames.join(', ')} installed globally (replaced stale symlink)`);
271
- return true;
272
- } catch {}
273
- }
274
- try {
275
- execSync('npm link', { cwd: repoPath, stdio: 'pipe' });
276
- ensureBinExecutable(binNames);
277
- ok(`CLI: linked globally via npm link`);
278
- return true;
279
- } catch {
280
- fail(`CLI: install failed. Run manually: cd "${repoPath}" && npm install -g .`);
281
- return false;
282
- }
283
- }
284
- }
285
-
286
- function deployExtension(repoPath, name) {
287
- const ldmDest = join(LDM_EXTENSIONS, name);
288
- const ocDest = join(OC_EXTENSIONS, name);
289
-
290
- // Check if already deployed at the same version
291
- const sourcePkg = readJSON(join(repoPath, 'package.json'));
292
- const installedPkg = readJSON(join(ldmDest, 'package.json'));
293
- const newVersion = sourcePkg?.version;
294
- const currentVersion = installedPkg?.version;
295
-
296
- if (newVersion && currentVersion && newVersion === currentVersion) {
297
- skip(`LDM: ${name} already at v${currentVersion}`);
298
- // Still check OpenClaw copy exists
299
- if (existsSync(ocDest)) {
300
- skip(`OpenClaw: ${name} already at v${currentVersion}`);
301
- } else if (!DRY_RUN) {
302
- // LDM has it but OpenClaw doesn't. Copy it over.
303
- mkdirSync(ocDest, { recursive: true });
304
- cpSync(ldmDest, ocDest, { recursive: true });
305
- ok(`OpenClaw: deployed to ${ocDest} (synced from LDM)`);
306
- }
307
- return true;
308
- }
309
-
310
- if (DRY_RUN) {
311
- if (currentVersion) {
312
- ok(`LDM: would upgrade ${name} v${currentVersion} -> v${newVersion} (dry run)`);
313
- } else {
314
- ok(`LDM: would deploy ${name} v${newVersion || 'unknown'} to ${ldmDest} (dry run)`);
315
- }
316
- ok(`OpenClaw: would deploy to ${ocDest} (dry run)`);
317
- return true;
318
- }
319
-
320
- try {
321
- // LDM path (remove existing to get clean copy)
322
- if (existsSync(ldmDest)) {
323
- execSync(`rm -rf "${ldmDest}"`, { stdio: 'pipe' });
324
- }
325
- mkdirSync(ldmDest, { recursive: true });
326
- cpSync(repoPath, ldmDest, {
327
- recursive: true,
328
- filter: (src) => !src.includes('.git') && !src.includes('node_modules') && !src.includes('ai/')
329
- });
330
- if (currentVersion) {
331
- ok(`LDM: upgraded ${name} v${currentVersion} -> v${newVersion}`);
332
- } else {
333
- ok(`LDM: deployed to ${ldmDest}`);
334
- }
335
-
336
- // Install deps in LDM
337
- if (existsSync(join(ldmDest, 'package.json'))) {
338
- try {
339
- execSync('npm install --omit=dev', { cwd: ldmDest, stdio: 'pipe' });
340
- ok(`LDM: dependencies installed`);
341
- } catch {
342
- skip(`LDM: no deps needed`);
343
- }
344
- }
345
-
346
- // OpenClaw path (copy from LDM to keep them identical)
347
- if (existsSync(ocDest)) {
348
- execSync(`rm -rf "${ocDest}"`, { stdio: 'pipe' });
349
- }
350
- mkdirSync(ocDest, { recursive: true });
351
- cpSync(ldmDest, ocDest, { recursive: true });
352
- ok(`OpenClaw: deployed to ${ocDest}`);
353
-
354
- return true;
355
- } catch (e) {
356
- fail(`Deploy failed: ${e.message}`);
357
- return false;
358
- }
359
- }
360
-
361
- function installOpenClaw(repoPath, door, toolName) {
362
- // Use toolName (from package.json name, stripped of scope) for the directory.
363
- // Never use door.config.name (display name) ... it can have spaces.
364
- const name = toolName || door.config?.id || basename(repoPath);
365
- return deployExtension(repoPath, name);
366
- }
367
-
368
- function registerMCP(repoPath, door, toolName) {
369
- // Use toolName for the MCP registration name and LDM path lookup.
370
- // Strip npm scope (@org/) from name for claude mcp add compatibility.
371
- const rawName = toolName || door.name || basename(repoPath);
372
- const name = rawName.replace(/^@[\w-]+\//, '');
373
- const serverPath = join(repoPath, door.file);
374
- // Use LDM-deployed path if it exists, otherwise repo path.
375
- // Try toolName first (correct), then basename(repoPath) as fallback.
376
- const ldmServerPath = join(LDM_EXTENSIONS, name, door.file);
377
- const ldmFallbackPath = join(LDM_EXTENSIONS, basename(repoPath), door.file);
378
- const mcpPath = existsSync(ldmServerPath) ? ldmServerPath
379
- : existsSync(ldmFallbackPath) ? ldmFallbackPath
380
- : serverPath;
381
-
382
- // Check if already registered with the same path
383
- const ccMcpPath = join(HOME, '.claude', '.mcp.json');
384
- const ccMcp = readJSON(ccMcpPath);
385
- const ccAlreadyRegistered = ccMcp?.mcpServers?.[name]?.args?.includes(mcpPath);
386
-
387
- let ocAlreadyRegistered = false;
388
- if (existsSync(OC_MCP)) {
389
- const ocMcp = readJSON(OC_MCP);
390
- ocAlreadyRegistered = ocMcp?.mcpServers?.[name]?.args?.includes(mcpPath);
391
- }
392
-
393
- if (ccAlreadyRegistered && (ocAlreadyRegistered || !existsSync(OC_MCP))) {
394
- skip(`MCP: ${name} already registered at ${mcpPath}`);
395
- return true;
396
- }
397
-
398
- if (DRY_RUN) {
399
- if (!ccAlreadyRegistered) ok(`MCP (CC): would register ${name} at user scope (dry run)`);
400
- if (!ocAlreadyRegistered && existsSync(OC_MCP)) ok(`MCP (OC): would add to ${OC_MCP} (dry run)`);
401
- return true;
402
- }
403
-
404
- // 1. Register with Claude Code CLI at user scope
405
- let ccRegistered = ccAlreadyRegistered;
406
- if (!ccAlreadyRegistered) {
407
- try {
408
- // Remove first if exists (update behavior)
409
- try {
410
- execSync(`claude mcp remove ${name} --scope user`, { stdio: 'pipe' });
411
- } catch {}
412
- const envFlag = existsSync(OC_ROOT) ? ` -e OPENCLAW_HOME="${OC_ROOT}"` : '';
413
- execSync(`claude mcp add --scope user ${name}${envFlag} -- node "${mcpPath}"`, { stdio: 'pipe' });
414
- ok(`MCP (CC): registered ${name} at user scope`);
415
- ccRegistered = true;
416
- } catch (e) {
417
- // Fallback: write to ~/.claude/.mcp.json
418
- try {
419
- const mcpConfig = readJSON(ccMcpPath) || { mcpServers: {} };
420
- mcpConfig.mcpServers[name] = {
421
- command: 'node',
422
- args: [mcpPath],
423
- };
424
- writeJSON(ccMcpPath, mcpConfig);
425
- ok(`MCP (CC): registered ${name} in ~/.claude/.mcp.json (fallback)`);
426
- ccRegistered = true;
427
- } catch (e2) {
428
- fail(`MCP (CC): registration failed. ${e.message}`);
429
- }
430
- }
431
- } else {
432
- skip(`MCP (CC): ${name} already registered`);
433
- }
434
-
435
- // 2. Register in OpenClaw's .mcp.json (only if the file already exists)
436
- if (existsSync(OC_MCP) && !ocAlreadyRegistered) {
437
- try {
438
- const ocMcp = readJSON(OC_MCP) || { mcpServers: {} };
439
- ocMcp.mcpServers[name] = {
440
- command: 'node',
441
- args: [mcpPath],
442
- };
443
- if (existsSync(OC_ROOT)) {
444
- ocMcp.mcpServers[name].env = { OPENCLAW_HOME: OC_ROOT };
445
- }
446
- writeJSON(OC_MCP, ocMcp);
447
- ok(`MCP (OC): registered ${name} in ${OC_MCP}`);
448
- } catch (e) {
449
- fail(`MCP (OC): registration failed. ${e.message}`);
450
- }
451
- } else if (existsSync(OC_MCP) && ocAlreadyRegistered) {
452
- skip(`MCP (OC): ${name} already registered`);
453
- }
454
-
455
- return ccRegistered;
456
- }
457
-
458
- function installClaudeCodeHook(repoPath, door) {
459
- const settingsPath = join(HOME, '.claude', 'settings.json');
460
- let settings = readJSON(settingsPath);
461
-
462
- if (!settings) {
463
- skip(`Claude Code: no settings.json found at ${settingsPath}`);
464
- return false;
465
- }
466
-
467
- // Always use the installed extension path, never repo clones or /tmp/
468
- const toolName = basename(repoPath);
469
- const installedGuard = join(LDM_EXTENSIONS, toolName, 'guard.mjs');
470
- const hookCommand = existsSync(installedGuard)
471
- ? `node ${installedGuard}`
472
- : (door.command || `node "${join(repoPath, 'guard.mjs')}"`);
473
-
474
- if (DRY_RUN) {
475
- ok(`Claude Code: would add ${door.event || 'PreToolUse'} hook (dry run)`);
476
- return true;
477
- }
478
-
479
- if (!settings.hooks) settings.hooks = {};
480
- const event = door.event || 'PreToolUse';
481
-
482
- if (!settings.hooks[event]) settings.hooks[event] = [];
483
-
484
- // Match by tool name in the command path, not exact string.
485
- // This prevents duplicates when the same tool is installed from different paths.
486
- const guardFile = basename(door.command || 'guard.mjs').replace(/^node\s+/, '').replace(/"/g, '');
487
- const existingIdx = settings.hooks[event].findIndex(entry =>
488
- entry.hooks?.some(h => {
489
- const cmd = h.command || '';
490
- return cmd.includes(`/${toolName}/`) || cmd === hookCommand;
491
- })
492
- );
493
-
494
- if (existingIdx !== -1) {
495
- const existingCmd = settings.hooks[event][existingIdx].hooks?.[0]?.command || '';
496
- if (existingCmd === hookCommand) {
497
- skip(`Claude Code: ${event} hook already configured`);
498
- return true;
499
- }
500
- // Update the existing hook to point to the installed location
501
- settings.hooks[event][existingIdx].hooks[0].command = hookCommand;
502
- settings.hooks[event][existingIdx].hooks[0].timeout = door.timeout || 10;
503
- try {
504
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
505
- ok(`Claude Code: ${event} hook updated to installed path`);
506
- return true;
507
- } catch (e) {
508
- fail(`Claude Code: failed to update settings.json. ${e.message}`);
509
- return false;
510
- }
511
- }
512
-
513
- settings.hooks[event].push({
514
- matcher: door.matcher || undefined,
515
- hooks: [{
516
- type: 'command',
517
- command: hookCommand,
518
- timeout: door.timeout || 10
519
- }]
520
- });
521
-
522
- try {
523
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
524
- ok(`Claude Code: ${event} hook added to settings.json`);
525
- return true;
526
- } catch (e) {
527
- fail(`Claude Code: failed to update settings.json. ${e.message}`);
528
- return false;
529
- }
530
- }
531
-
532
- function installSkill(repoPath, toolName) {
533
- const skillSrc = join(repoPath, 'SKILL.md');
534
- const ocSkillDir = join(OC_ROOT, 'skills', toolName);
535
- const ocSkillDest = join(ocSkillDir, 'SKILL.md');
536
-
537
- // Check if already deployed with same content
538
- if (existsSync(ocSkillDest)) {
539
- try {
540
- const srcContent = readFileSync(skillSrc, 'utf8');
541
- const destContent = readFileSync(ocSkillDest, 'utf8');
542
- if (srcContent === destContent) {
543
- skip(`Skill: ${toolName} already deployed to OpenClaw`);
544
- return true;
545
- }
546
- } catch {}
547
- }
548
-
549
- if (DRY_RUN) {
550
- ok(`Skill: would deploy ${toolName}/SKILL.md to ${ocSkillDir} (dry run)`);
551
- return true;
552
- }
553
-
554
- try {
555
- mkdirSync(ocSkillDir, { recursive: true });
556
- cpSync(skillSrc, ocSkillDest);
557
- ok(`Skill: deployed to ${ocSkillDir}`);
558
- return true;
559
- } catch (e) {
560
- fail(`Skill: deploy failed. ${e.message}`);
561
- return false;
562
- }
563
- }
564
-
565
- // ── Worktree gitignore ──
566
-
567
- function ensureWorktreeGitignore(repoPath) {
568
- // Only for local repos, not /tmp/ clones
569
- if (repoPath.startsWith('/tmp/')) return;
570
- if (!existsSync(join(repoPath, '.git'))) return;
571
-
572
- const gitignorePath = join(repoPath, '.gitignore');
573
- const entry = '.claude/worktrees/';
574
-
575
- if (existsSync(gitignorePath)) {
576
- const content = readFileSync(gitignorePath, 'utf8');
577
- if (content.includes(entry)) return; // already present
578
- if (DRY_RUN) {
579
- ok(`Gitignore: would add ${entry} to ${gitignorePath} (dry run)`);
580
- return;
581
- }
582
- const separator = content.endsWith('\n') ? '' : '\n';
583
- writeFileSync(gitignorePath, content + separator + entry + '\n');
584
- } else {
585
- if (DRY_RUN) {
586
- ok(`Gitignore: would create ${gitignorePath} with ${entry} (dry run)`);
587
- return;
588
- }
589
- writeFileSync(gitignorePath, entry + '\n');
590
- }
591
- ok(`Gitignore: added ${entry} to .gitignore`);
592
- }
593
-
594
- // ── Single tool install ──
595
-
596
- function installSingleTool(toolPath) {
597
- const { interfaces, pkg } = detectInterfaces(toolPath);
598
- const ifaceNames = Object.keys(interfaces);
599
-
600
- if (ifaceNames.length === 0) return 0;
601
-
602
- const toolName = pkg?.name?.replace(/^@\w+\//, '') || basename(toolPath);
603
-
604
- if (!JSON_OUTPUT) {
605
- console.log('');
606
- console.log(` Installing: ${toolName}${DRY_RUN ? ' (dry run)' : ''}`);
607
- console.log(` ${'─'.repeat(40)}`);
608
- log(`Detected ${ifaceNames.length} interface(s): ${ifaceNames.join(', ')}`);
609
- console.log('');
610
- }
611
-
612
- if (DRY_RUN && !JSON_OUTPUT) {
613
- console.log(describeInterfaces(interfaces));
614
-
615
- // Show migration preview in dry run
616
- const existing = findExistingInstalls(toolName, pkg, interfaces.openclaw?.config);
617
- if (existing.length > 0) {
618
- console.log('');
619
- for (const m of existing) {
620
- log(`Migration: would rename "${m.dirName}" -> "${toolName}" (matched by ${m.matchType})`);
621
- }
622
- }
623
-
624
- return ifaceNames.length;
625
- }
626
-
627
- // Detect and migrate existing installs under different names
628
- const existing = findExistingInstalls(toolName, pkg, interfaces.openclaw?.config);
629
- if (existing.length > 0) {
630
- console.log('');
631
- const migrated = new Set();
632
- for (const m of existing) {
633
- if (!migrated.has(m.dirName)) {
634
- log(`Found existing install: "${m.dirName}" (matched by ${m.matchType}). Migrating to "${toolName}"...`);
635
- migrateExistingInstall(m.dirName, toolName);
636
- migrated.add(m.dirName);
637
- }
638
- }
639
- console.log('');
640
- }
641
-
642
- let installed = 0;
643
- const registryInfo = {
644
- name: toolName,
645
- version: pkg?.version || 'unknown',
646
- source: toolPath,
647
- interfaces: ifaceNames,
648
- };
649
-
650
- if (interfaces.cli) {
651
- if (installCLI(toolPath, interfaces.cli)) installed++;
652
- }
653
-
654
- // Deploy to LDM + OpenClaw (for plugins or any extension with MCP)
655
- if (interfaces.openclaw) {
656
- if (installOpenClaw(toolPath, interfaces.openclaw, toolName)) {
657
- installed++;
658
- registryInfo.ldmPath = join(LDM_EXTENSIONS, toolName);
659
- registryInfo.ocPath = join(OC_EXTENSIONS, toolName);
660
- }
661
- } else if (interfaces.mcp) {
662
- // Even without openclaw.plugin.json, deploy to LDM for MCP server access
663
- const extName = basename(toolPath);
664
- if (deployExtension(toolPath, extName)) {
665
- registryInfo.ldmPath = join(LDM_EXTENSIONS, extName);
666
- registryInfo.ocPath = join(OC_EXTENSIONS, extName);
667
- }
668
- }
669
-
670
- if (interfaces.mcp) {
671
- if (registerMCP(toolPath, interfaces.mcp, toolName)) installed++;
672
- }
673
-
674
- if (interfaces.claudeCodeHook) {
675
- if (installClaudeCodeHook(toolPath, interfaces.claudeCodeHook)) installed++;
676
- }
677
-
678
- if (interfaces.skill) {
679
- if (installSkill(toolPath, toolName)) installed++;
680
- }
681
-
682
- if (interfaces.module) {
683
- ok(`Module: import from "${interfaces.module.main}"`);
684
- installed++;
685
- }
686
-
687
- // Update registry
688
- if (!DRY_RUN) {
689
- try {
690
- mkdirSync(LDM_EXTENSIONS, { recursive: true });
691
- updateRegistry(toolName, registryInfo);
692
- ok(`Registry: updated`);
693
- } catch (e) {
694
- fail(`Registry: update failed. ${e.message}`);
695
- }
696
- }
697
-
698
- // Ensure .claude/worktrees/ is in the repo's .gitignore
699
- ensureWorktreeGitignore(toolPath);
700
-
701
- return installed;
702
- }
703
-
704
- // ── Main ──
705
-
706
- async function main() {
707
- if (!target || target === '--help' || target === '-h') {
708
- console.log('');
709
- console.log(' wip-install ... the reference installer for agent-native software');
710
- console.log('');
711
- console.log(' Usage:');
712
- console.log(' wip-install /path/to/repo');
713
- console.log(' wip-install https://github.com/org/repo');
714
- console.log(' wip-install org/repo');
715
- console.log('');
716
- console.log(' Flags:');
717
- console.log(' --dry-run Detect interfaces without installing anything');
718
- console.log(' --json Output detection results as JSON');
719
- console.log('');
720
- console.log(' Interfaces it detects and installs:');
721
- console.log(' CLI ... package.json bin entry -> npm install -g');
722
- console.log(' Module ... ESM main/exports -> importable');
723
- console.log(' MCP Server ... mcp-server.mjs -> claude mcp add --scope user');
724
- console.log(' OpenClaw ... openclaw.plugin.json -> ~/.ldm/extensions/ + ~/.openclaw/extensions/');
725
- console.log(' Skill ... SKILL.md -> ~/.openclaw/skills/<tool>/');
726
- console.log(' CC Hook ... guard.mjs or claudeCode.hook -> ~/.claude/settings.json');
727
- console.log('');
728
- console.log(' Modes:');
729
- console.log(' Single repo ... installs one tool');
730
- console.log(' Toolbox ... detects tools/ subdirectories, installs each sub-tool');
731
- console.log('');
732
- console.log(' Paths:');
733
- console.log(' LDM: ~/.ldm/extensions/<name>/ (primary, for Claude Code)');
734
- console.log(' OpenClaw: ~/.openclaw/extensions/<name>/ (for Lesa/OpenClaw)');
735
- console.log(' Registry: ~/.ldm/extensions/registry.json');
736
- console.log('');
737
- process.exit(0);
738
- }
739
-
740
- // ── LDM bootstrap ──
741
- // If ldm is not on PATH, try to install it silently before falling back.
742
- function bootstrapLdmOs() {
743
- try {
744
- execSync('npm install -g @wipcomputer/wip-ldm-os', { stdio: 'pipe', timeout: 120000 });
745
- execSync('ldm --version', { stdio: 'pipe', timeout: 5000 });
746
- return true;
747
- } catch {
748
- return false;
749
- }
750
- }
751
-
752
- // ── LDM delegation ──
753
- // If the ldm CLI is on PATH, delegate the entire install to it.
754
- // ldm install understands all the same interfaces and adds LDM OS orchestration.
755
- // Check early, before URL/path resolution, so we don't clone unnecessarily.
756
- let ldmAvailable = false;
757
- try {
758
- execSync('ldm --version', { stdio: 'pipe' });
759
- ldmAvailable = true;
760
-
761
- // ldm is available, delegate
762
- if (!JSON_OUTPUT) {
763
- console.log('');
764
- console.log(' LDM OS detected. Delegating to ldm install...');
765
- console.log('');
766
- }
767
-
768
- const flags = args.filter(a => a.startsWith('--'));
769
- const rawTarget = process.argv[2];
770
-
771
- execSync(`ldm install ${rawTarget} ${flags.join(' ')}`, { stdio: 'inherit' });
772
-
773
- if (!JSON_OUTPUT) {
774
- console.log('');
775
- console.log(' Tip: Run "ldm install" to see more components you can add.');
776
- }
777
- process.exit(0);
778
-
779
- } catch (e) {
780
- if (!ldmAvailable) {
781
- // ldm not on PATH, try bootstrap
782
- if (!JSON_OUTPUT) {
783
- console.log('');
784
- console.log(' Installing LDM OS infrastructure...');
785
- console.log('');
786
- }
787
- if (bootstrapLdmOs()) {
788
- ldmAvailable = true;
789
- if (!JSON_OUTPUT) {
790
- console.log(' LDM OS installed. Delegating to ldm install...');
791
- console.log('');
792
- }
793
- // Now delegate
794
- const flags = args.filter(a => a.startsWith('--'));
795
- const rawTarget = process.argv[2];
796
- try {
797
- execSync(`ldm install ${rawTarget} ${flags.join(' ')}`, { stdio: 'inherit' });
798
- process.exit(0);
799
- } catch (delegateErr) {
800
- if (!JSON_OUTPUT) console.error(' ldm install failed. Falling back to standalone installer.');
801
- }
802
- } else {
803
- if (!JSON_OUTPUT) {
804
- console.log(' LDM OS install skipped (npm offline or permissions issue). Using standalone.');
805
- console.log('');
806
- }
807
- }
808
- } else {
809
- // ldm exists but install command failed
810
- if (!JSON_OUTPUT) console.error(' ldm install failed. Falling back to standalone installer.');
811
- }
812
- }
813
-
814
- // Resolve target: GitHub URL, org/repo shorthand, or local path
815
- let repoPath;
816
-
817
- if (target.startsWith('http') || target.startsWith('git@') || target.match(/^[\w-]+\/[\w.-]+$/)) {
818
- const isShorthand = target.match(/^[\w-]+\/[\w.-]+$/);
819
- const httpsUrl = isShorthand
820
- ? `https://github.com/${target}.git`
821
- : target;
822
- const sshUrl = isShorthand
823
- ? `git@github.com:${target}.git`
824
- : target.replace(/^https:\/\/github\.com\//, 'git@github.com:');
825
- const repoName = basename(httpsUrl).replace('.git', '');
826
- repoPath = join('/tmp', `wip-install-${repoName}`);
827
-
828
- log('');
829
- log(`Cloning ${httpsUrl}...`);
830
- try {
831
- if (existsSync(repoPath)) {
832
- execSync(`rm -rf "${repoPath}"`);
833
- }
834
- try {
835
- execSync(`git clone "${httpsUrl}" "${repoPath}"`, { stdio: 'pipe' });
836
- } catch {
837
- // HTTPS failed (private repo or no auth). Fall back to SSH.
838
- log(`HTTPS clone failed. Trying SSH...`);
839
- if (existsSync(repoPath)) execSync(`rm -rf "${repoPath}"`);
840
- execSync(`git clone "${sshUrl}" "${repoPath}"`, { stdio: 'pipe' });
841
- }
842
- ok(`Cloned to ${repoPath}`);
843
- } catch (e) {
844
- fail(`Clone failed (tried HTTPS + SSH): ${e.message}`);
845
- process.exit(1);
846
- }
847
- } else {
848
- repoPath = resolve(target);
849
- if (!existsSync(repoPath)) {
850
- fail(`Path not found: ${repoPath}`);
851
- process.exit(1);
852
- }
853
- }
854
-
855
- // Check for toolbox mode (tools/ subdirectories with package.json)
856
- const subTools = detectToolbox(repoPath);
857
-
858
- if (subTools.length > 0) {
859
- // Toolbox mode: install each sub-tool
860
- const toolboxPkg = readJSON(join(repoPath, 'package.json'));
861
- const toolboxName = toolboxPkg?.name?.replace(/^@\w+\//, '') || basename(repoPath);
862
-
863
- if (!JSON_OUTPUT) {
864
- console.log('');
865
- console.log(` Toolbox: ${toolboxName}`);
866
- console.log(` ${'═'.repeat(50)}`);
867
- log(`Found ${subTools.length} sub-tool(s): ${subTools.map(t => t.name).join(', ')}`);
868
- }
869
-
870
- let totalInstalled = 0;
871
- let toolsProcessed = 0;
872
-
873
- for (const subTool of subTools) {
874
- const count = installSingleTool(subTool.path);
875
- totalInstalled += count;
876
- if (count > 0) toolsProcessed++;
877
- }
878
-
879
- if (!JSON_OUTPUT) {
880
- console.log('');
881
- console.log(` ${'═'.repeat(50)}`);
882
- if (DRY_RUN) {
883
- console.log(` Dry run complete. ${toolsProcessed} tool(s) scanned, ${totalInstalled} interface(s) detected.`);
884
- } else {
885
- console.log(` Done. ${toolsProcessed} tool(s), ${totalInstalled} interface(s) processed.`);
886
- }
887
- console.log('');
888
- }
889
- } else {
890
- // Single repo mode
891
- if (JSON_OUTPUT) {
892
- const result = detectInterfacesJSON(repoPath);
893
- console.log(JSON.stringify(result, null, 2));
894
- if (DRY_RUN) process.exit(0);
895
- }
896
-
897
- const installed = installSingleTool(repoPath);
898
-
899
- if (installed === 0) {
900
- skip('No installable interfaces detected.');
901
- process.exit(0);
902
- }
903
-
904
- if (!JSON_OUTPUT) {
905
- console.log('');
906
- if (DRY_RUN) {
907
- console.log(' Dry run complete. No changes made.');
908
- } else {
909
- console.log(` Done. ${installed} interface(s) processed.`);
910
- }
911
- console.log('');
912
- }
913
- }
914
-
915
- // ── LDM OS tip (standalone install only) ──
916
- // We only reach here if ldm was not available or ldm install failed.
917
- if (!JSON_OUTPUT && !DRY_RUN) {
918
- if (ldmAvailable) {
919
- console.log(' Tip: Run "ldm install" to see more components you can add.');
920
- } else {
921
- console.log(' Tip: LDM OS could not be installed automatically. Try: npm install -g @wipcomputer/wip-ldm-os');
922
- }
923
- console.log('');
924
- }
925
- }
926
-
927
- main().catch(e => {
928
- fail(e.message);
929
- process.exit(1);
930
- });