@wipcomputer/wip-ai-devops-toolbox 1.9.55 → 1.9.57

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 (538) hide show
  1. package/.worktrees/toolbox--release-notes/.license-guard.json +7 -0
  2. package/.worktrees/toolbox--release-notes/.publish-skill.json +4 -0
  3. package/.worktrees/toolbox--release-notes/CHANGELOG.md +1875 -0
  4. package/.worktrees/toolbox--release-notes/CLA.md +19 -0
  5. package/.worktrees/toolbox--release-notes/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
  6. package/.worktrees/toolbox--release-notes/LICENSE +52 -0
  7. package/.worktrees/toolbox--release-notes/README.md +238 -0
  8. package/.worktrees/toolbox--release-notes/RELEASE-NOTES-v1-9-56.md +42 -0
  9. package/.worktrees/toolbox--release-notes/SKILL.md +821 -0
  10. package/.worktrees/toolbox--release-notes/TECHNICAL.md +416 -0
  11. package/.worktrees/toolbox--release-notes/UNIVERSAL-INTERFACE.md +180 -0
  12. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  13. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  14. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  15. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  16. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  17. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  18. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  19. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
  20. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
  21. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
  22. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
  23. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
  24. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
  25. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
  26. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
  27. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
  28. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
  29. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
  30. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
  31. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
  32. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
  33. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  34. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  35. package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  36. package/.worktrees/toolbox--release-notes/_trash/guide 2/DEV-GUIDE.md +487 -0
  37. package/.worktrees/toolbox--release-notes/_trash/guide 2/scripts/deploy-public.sh +152 -0
  38. package/.worktrees/toolbox--release-notes/package.json +27 -0
  39. package/.worktrees/toolbox--release-notes/scripts/SKILL-deploy-public.md +61 -0
  40. package/.worktrees/toolbox--release-notes/scripts/SKILL-post-merge-rename.md +47 -0
  41. package/.worktrees/toolbox--release-notes/scripts/deploy-public.sh +345 -0
  42. package/.worktrees/toolbox--release-notes/scripts/post-merge-rename.sh +210 -0
  43. package/.worktrees/toolbox--release-notes/scripts/publish-skill.sh +134 -0
  44. package/.worktrees/toolbox--release-notes/templates/global-claude-md.md +73 -0
  45. package/.worktrees/toolbox--release-notes/templates/repo-claude-md.template +24 -0
  46. package/.worktrees/toolbox--release-notes/tools/deploy-public/LICENSE +52 -0
  47. package/.worktrees/toolbox--release-notes/tools/deploy-public/README.md +31 -0
  48. package/.worktrees/toolbox--release-notes/tools/deploy-public/SKILL.md +71 -0
  49. package/.worktrees/toolbox--release-notes/tools/deploy-public/deploy-public.sh +264 -0
  50. package/.worktrees/toolbox--release-notes/tools/deploy-public/package.json +9 -0
  51. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/LICENSE +52 -0
  52. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/README.md +46 -0
  53. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/backup.sh +16 -0
  54. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/branch-protect.sh +39 -0
  55. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/crystal-capture.sh +19 -0
  56. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/setup-shell.sh +27 -0
  57. package/.worktrees/toolbox--release-notes/tools/ldm-jobs/visibility-audit.sh +27 -0
  58. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/LICENSE +52 -0
  59. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/README.md +29 -0
  60. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/SKILL.md +57 -0
  61. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/package.json +9 -0
  62. package/.worktrees/toolbox--release-notes/tools/post-merge-rename/post-merge-rename.sh +122 -0
  63. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/INSTALL.md +41 -0
  64. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/guard.mjs +459 -0
  65. package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/package.json +18 -0
  66. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/CHANGELOG.md +6 -0
  67. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/LICENSE +52 -0
  68. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/README.md +113 -0
  69. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/REFERENCE.md +86 -0
  70. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/SKILL.md +105 -0
  71. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/guard.mjs +161 -0
  72. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/openclaw.plugin.json +8 -0
  73. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/package.json +27 -0
  74. package/.worktrees/toolbox--release-notes/tools/wip-file-guard/test.sh +119 -0
  75. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/LICENSE +52 -0
  76. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/README.md +69 -0
  77. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/SKILL.md +65 -0
  78. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/cli.mjs +472 -0
  79. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/core.mjs +310 -0
  80. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/guard.mjs +146 -0
  81. package/.worktrees/toolbox--release-notes/tools/wip-license-guard/package.json +22 -0
  82. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/CHANGELOG.md +17 -0
  83. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/LICENSE +52 -0
  84. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/README.md +200 -0
  85. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/SKILL.md +111 -0
  86. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  87. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js +170 -0
  88. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  89. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  90. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js +104 -0
  91. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  92. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  93. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js +5 -0
  94. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js.map +1 -0
  95. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  96. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js +72 -0
  97. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  98. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  99. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js +227 -0
  100. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  101. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  102. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js +325 -0
  103. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  104. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  105. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  106. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/mcp-server.mjs +119 -0
  107. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package-lock.json +54 -0
  108. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package.json +43 -0
  109. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/cli/index.ts +189 -0
  110. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/detector.ts +130 -0
  111. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/index.ts +4 -0
  112. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/ledger.ts +116 -0
  113. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/reporter.ts +255 -0
  114. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/scanner.ts +367 -0
  115. package/.worktrees/toolbox--release-notes/tools/wip-license-hook/tsconfig.json +16 -0
  116. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/README.md +49 -0
  117. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/SKILL.md +84 -0
  118. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/format.mjs +597 -0
  119. package/.worktrees/toolbox--release-notes/tools/wip-readme-format/package.json +15 -0
  120. package/.worktrees/toolbox--release-notes/tools/wip-release/CHANGELOG.md +42 -0
  121. package/.worktrees/toolbox--release-notes/tools/wip-release/LICENSE +52 -0
  122. package/.worktrees/toolbox--release-notes/tools/wip-release/README.md +45 -0
  123. package/.worktrees/toolbox--release-notes/tools/wip-release/REFERENCE.md +100 -0
  124. package/.worktrees/toolbox--release-notes/tools/wip-release/SKILL.md +139 -0
  125. package/.worktrees/toolbox--release-notes/tools/wip-release/cli.js +175 -0
  126. package/.worktrees/toolbox--release-notes/tools/wip-release/core.mjs +1664 -0
  127. package/.worktrees/toolbox--release-notes/tools/wip-release/mcp-server.mjs +113 -0
  128. package/.worktrees/toolbox--release-notes/tools/wip-release/package.json +36 -0
  129. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/README.md +38 -0
  130. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/SKILL.md +77 -0
  131. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/init.mjs +148 -0
  132. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/package.json +11 -0
  133. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_sort/README.md +15 -0
  134. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_trash/README.md +16 -0
  135. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
  136. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/notes/README.md +26 -0
  137. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
  138. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
  139. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
  140. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
  141. package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/read-me-first.md +80 -0
  142. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/LICENSE +52 -0
  143. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/README.md +86 -0
  144. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  145. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/cli.js +93 -0
  146. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/core.mjs +122 -0
  147. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  148. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  149. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  150. package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/package.json +31 -0
  151. package/.worktrees/toolbox--release-notes/tools/wip-repos/LICENSE +52 -0
  152. package/.worktrees/toolbox--release-notes/tools/wip-repos/README.md +77 -0
  153. package/.worktrees/toolbox--release-notes/tools/wip-repos/SKILL.md +80 -0
  154. package/.worktrees/toolbox--release-notes/tools/wip-repos/claude.mjs +248 -0
  155. package/.worktrees/toolbox--release-notes/tools/wip-repos/cli.mjs +191 -0
  156. package/.worktrees/toolbox--release-notes/tools/wip-repos/core.mjs +290 -0
  157. package/.worktrees/toolbox--release-notes/tools/wip-repos/mcp-server.mjs +157 -0
  158. package/.worktrees/toolbox--release-notes/tools/wip-repos/package.json +34 -0
  159. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/CHANGELOG.md +57 -0
  160. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/LICENSE +52 -0
  161. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/README.md +81 -0
  162. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/REFERENCE.md +122 -0
  163. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SKILL.md +87 -0
  164. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SPEC.md +206 -0
  165. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/detect.mjs +130 -0
  166. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  167. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  168. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  169. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  170. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  171. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  172. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/install.js +930 -0
  173. package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/package.json +32 -0
  174. package/.worktrees/toolbox--save-stale/.license-guard.json +7 -0
  175. package/.worktrees/toolbox--save-stale/.publish-skill.json +4 -0
  176. package/.worktrees/toolbox--save-stale/CHANGELOG.md +1875 -0
  177. package/.worktrees/toolbox--save-stale/CLA.md +19 -0
  178. package/.worktrees/toolbox--save-stale/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
  179. package/.worktrees/toolbox--save-stale/LICENSE +52 -0
  180. package/.worktrees/toolbox--save-stale/README.md +238 -0
  181. package/.worktrees/toolbox--save-stale/SKILL.md +821 -0
  182. package/.worktrees/toolbox--save-stale/TECHNICAL.md +416 -0
  183. package/.worktrees/toolbox--save-stale/UNIVERSAL-INTERFACE.md +180 -0
  184. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  185. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  186. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  187. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  188. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  189. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  190. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  191. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
  192. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
  193. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
  194. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
  195. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
  196. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
  197. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
  198. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
  199. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
  200. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
  201. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
  202. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
  203. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
  204. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
  205. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  206. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  207. package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  208. package/.worktrees/toolbox--save-stale/_trash/guide 2/DEV-GUIDE.md +487 -0
  209. package/.worktrees/toolbox--save-stale/_trash/guide 2/scripts/deploy-public.sh +152 -0
  210. package/.worktrees/toolbox--save-stale/package.json +27 -0
  211. package/.worktrees/toolbox--save-stale/scripts/SKILL-deploy-public.md +61 -0
  212. package/.worktrees/toolbox--save-stale/scripts/SKILL-post-merge-rename.md +47 -0
  213. package/.worktrees/toolbox--save-stale/scripts/deploy-public.sh +345 -0
  214. package/.worktrees/toolbox--save-stale/scripts/post-merge-rename.sh +210 -0
  215. package/.worktrees/toolbox--save-stale/scripts/publish-skill.sh +134 -0
  216. package/.worktrees/toolbox--save-stale/templates/global-claude-md.md +73 -0
  217. package/.worktrees/toolbox--save-stale/templates/repo-claude-md.template +24 -0
  218. package/.worktrees/toolbox--save-stale/tools/deploy-public/LICENSE +52 -0
  219. package/.worktrees/toolbox--save-stale/tools/deploy-public/README.md +31 -0
  220. package/.worktrees/toolbox--save-stale/tools/deploy-public/SKILL.md +71 -0
  221. package/.worktrees/toolbox--save-stale/tools/deploy-public/deploy-public.sh +264 -0
  222. package/.worktrees/toolbox--save-stale/tools/deploy-public/package.json +9 -0
  223. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/LICENSE +52 -0
  224. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/README.md +46 -0
  225. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/backup.sh +16 -0
  226. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/branch-protect.sh +39 -0
  227. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/crystal-capture.sh +19 -0
  228. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/setup-shell.sh +27 -0
  229. package/.worktrees/toolbox--save-stale/tools/ldm-jobs/visibility-audit.sh +27 -0
  230. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/LICENSE +52 -0
  231. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/README.md +29 -0
  232. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/SKILL.md +57 -0
  233. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/package.json +9 -0
  234. package/.worktrees/toolbox--save-stale/tools/post-merge-rename/post-merge-rename.sh +122 -0
  235. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/INSTALL.md +41 -0
  236. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/guard.mjs +459 -0
  237. package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/package.json +18 -0
  238. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/CHANGELOG.md +6 -0
  239. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/LICENSE +52 -0
  240. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/README.md +113 -0
  241. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/REFERENCE.md +86 -0
  242. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/SKILL.md +105 -0
  243. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/guard.mjs +161 -0
  244. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/openclaw.plugin.json +8 -0
  245. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/package.json +27 -0
  246. package/.worktrees/toolbox--save-stale/tools/wip-file-guard/test.sh +119 -0
  247. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/LICENSE +52 -0
  248. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/README.md +69 -0
  249. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/SKILL.md +65 -0
  250. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/cli.mjs +472 -0
  251. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/core.mjs +310 -0
  252. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/guard.mjs +146 -0
  253. package/.worktrees/toolbox--save-stale/tools/wip-license-guard/package.json +22 -0
  254. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/CHANGELOG.md +17 -0
  255. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/LICENSE +52 -0
  256. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/README.md +200 -0
  257. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/SKILL.md +111 -0
  258. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  259. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js +170 -0
  260. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  261. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  262. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js +104 -0
  263. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  264. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  265. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js +5 -0
  266. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js.map +1 -0
  267. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  268. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js +72 -0
  269. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  270. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  271. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js +227 -0
  272. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  273. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  274. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js +325 -0
  275. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  276. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  277. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  278. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/mcp-server.mjs +119 -0
  279. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package-lock.json +54 -0
  280. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package.json +43 -0
  281. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/cli/index.ts +189 -0
  282. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/detector.ts +130 -0
  283. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/index.ts +4 -0
  284. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/ledger.ts +116 -0
  285. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/reporter.ts +255 -0
  286. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/scanner.ts +367 -0
  287. package/.worktrees/toolbox--save-stale/tools/wip-license-hook/tsconfig.json +16 -0
  288. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/README.md +49 -0
  289. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/SKILL.md +84 -0
  290. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/format.mjs +597 -0
  291. package/.worktrees/toolbox--save-stale/tools/wip-readme-format/package.json +15 -0
  292. package/.worktrees/toolbox--save-stale/tools/wip-release/CHANGELOG.md +42 -0
  293. package/.worktrees/toolbox--save-stale/tools/wip-release/LICENSE +52 -0
  294. package/.worktrees/toolbox--save-stale/tools/wip-release/README.md +45 -0
  295. package/.worktrees/toolbox--save-stale/tools/wip-release/REFERENCE.md +100 -0
  296. package/.worktrees/toolbox--save-stale/tools/wip-release/SKILL.md +139 -0
  297. package/.worktrees/toolbox--save-stale/tools/wip-release/cli.js +175 -0
  298. package/.worktrees/toolbox--save-stale/tools/wip-release/core.mjs +1664 -0
  299. package/.worktrees/toolbox--save-stale/tools/wip-release/mcp-server.mjs +113 -0
  300. package/.worktrees/toolbox--save-stale/tools/wip-release/package.json +36 -0
  301. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/README.md +38 -0
  302. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/SKILL.md +77 -0
  303. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/init.mjs +148 -0
  304. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/package.json +11 -0
  305. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_sort/README.md +15 -0
  306. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_trash/README.md +16 -0
  307. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
  308. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/notes/README.md +26 -0
  309. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
  310. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
  311. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
  312. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
  313. package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/read-me-first.md +80 -0
  314. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/LICENSE +52 -0
  315. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/README.md +86 -0
  316. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  317. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/cli.js +93 -0
  318. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/core.mjs +122 -0
  319. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  320. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  321. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  322. package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/package.json +31 -0
  323. package/.worktrees/toolbox--save-stale/tools/wip-repos/LICENSE +52 -0
  324. package/.worktrees/toolbox--save-stale/tools/wip-repos/README.md +77 -0
  325. package/.worktrees/toolbox--save-stale/tools/wip-repos/SKILL.md +80 -0
  326. package/.worktrees/toolbox--save-stale/tools/wip-repos/claude.mjs +248 -0
  327. package/.worktrees/toolbox--save-stale/tools/wip-repos/cli.mjs +191 -0
  328. package/.worktrees/toolbox--save-stale/tools/wip-repos/core.mjs +290 -0
  329. package/.worktrees/toolbox--save-stale/tools/wip-repos/mcp-server.mjs +157 -0
  330. package/.worktrees/toolbox--save-stale/tools/wip-repos/package.json +34 -0
  331. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/CHANGELOG.md +57 -0
  332. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/LICENSE +52 -0
  333. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/README.md +81 -0
  334. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/REFERENCE.md +122 -0
  335. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SKILL.md +87 -0
  336. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SPEC.md +206 -0
  337. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/detect.mjs +130 -0
  338. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  339. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  340. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  341. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  342. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  343. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  344. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/install.js +930 -0
  345. package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/package.json +32 -0
  346. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.license-guard.json +7 -0
  347. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.publish-skill.json +4 -0
  348. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CHANGELOG.md +1875 -0
  349. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CLA.md +19 -0
  350. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
  351. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/LICENSE +52 -0
  352. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/README.md +238 -0
  353. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/SKILL.md +821 -0
  354. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/TECHNICAL.md +416 -0
  355. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/UNIVERSAL-INTERFACE.md +180 -0
  356. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  357. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  358. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  359. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  360. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  361. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  362. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  363. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
  364. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
  365. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
  366. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
  367. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
  368. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
  369. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
  370. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
  371. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
  372. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
  373. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
  374. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
  375. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
  376. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
  377. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  378. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  379. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  380. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/DEV-GUIDE.md +487 -0
  381. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/scripts/deploy-public.sh +152 -0
  382. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/package.json +27 -0
  383. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-deploy-public.md +61 -0
  384. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-post-merge-rename.md +47 -0
  385. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/deploy-public.sh +345 -0
  386. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/post-merge-rename.sh +210 -0
  387. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/publish-skill.sh +134 -0
  388. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/global-claude-md.md +73 -0
  389. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/repo-claude-md.template +24 -0
  390. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/LICENSE +52 -0
  391. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/README.md +31 -0
  392. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/SKILL.md +71 -0
  393. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/deploy-public.sh +264 -0
  394. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/package.json +9 -0
  395. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/LICENSE +52 -0
  396. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/README.md +46 -0
  397. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/backup.sh +16 -0
  398. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/branch-protect.sh +39 -0
  399. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/crystal-capture.sh +19 -0
  400. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/setup-shell.sh +27 -0
  401. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/visibility-audit.sh +27 -0
  402. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/LICENSE +52 -0
  403. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/README.md +29 -0
  404. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/SKILL.md +57 -0
  405. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/package.json +9 -0
  406. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/post-merge-rename.sh +122 -0
  407. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/INSTALL.md +41 -0
  408. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/guard.mjs +418 -0
  409. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/package.json +18 -0
  410. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/CHANGELOG.md +6 -0
  411. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/LICENSE +52 -0
  412. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/README.md +113 -0
  413. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/REFERENCE.md +86 -0
  414. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/SKILL.md +105 -0
  415. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/guard.mjs +161 -0
  416. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/openclaw.plugin.json +8 -0
  417. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/package.json +27 -0
  418. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/test.sh +119 -0
  419. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/LICENSE +52 -0
  420. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/README.md +69 -0
  421. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/SKILL.md +65 -0
  422. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/cli.mjs +472 -0
  423. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/core.mjs +310 -0
  424. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/guard.mjs +146 -0
  425. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/package.json +22 -0
  426. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/CHANGELOG.md +17 -0
  427. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/LICENSE +52 -0
  428. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/README.md +200 -0
  429. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/SKILL.md +111 -0
  430. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  431. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js +170 -0
  432. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  433. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  434. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js +104 -0
  435. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  436. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  437. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js +5 -0
  438. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js.map +1 -0
  439. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  440. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js +72 -0
  441. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  442. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  443. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js +227 -0
  444. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  445. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  446. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js +325 -0
  447. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  448. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  449. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  450. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/mcp-server.mjs +119 -0
  451. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package-lock.json +54 -0
  452. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package.json +43 -0
  453. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/cli/index.ts +189 -0
  454. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/detector.ts +130 -0
  455. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/index.ts +4 -0
  456. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/ledger.ts +116 -0
  457. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/reporter.ts +255 -0
  458. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/scanner.ts +367 -0
  459. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/tsconfig.json +16 -0
  460. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/README.md +49 -0
  461. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/SKILL.md +84 -0
  462. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/format.mjs +597 -0
  463. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/package.json +15 -0
  464. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/CHANGELOG.md +42 -0
  465. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/LICENSE +52 -0
  466. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/README.md +45 -0
  467. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/REFERENCE.md +100 -0
  468. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/SKILL.md +139 -0
  469. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/cli.js +175 -0
  470. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/core.mjs +1664 -0
  471. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/mcp-server.mjs +113 -0
  472. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/package.json +36 -0
  473. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/README.md +38 -0
  474. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/SKILL.md +77 -0
  475. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/init.mjs +148 -0
  476. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/package.json +11 -0
  477. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_sort/README.md +15 -0
  478. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_trash/README.md +16 -0
  479. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
  480. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/notes/README.md +26 -0
  481. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
  482. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
  483. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
  484. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
  485. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/read-me-first.md +80 -0
  486. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/LICENSE +52 -0
  487. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/README.md +86 -0
  488. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  489. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/cli.js +93 -0
  490. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/core.mjs +122 -0
  491. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  492. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  493. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  494. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/package.json +31 -0
  495. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/LICENSE +52 -0
  496. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/README.md +77 -0
  497. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/SKILL.md +80 -0
  498. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/claude.mjs +248 -0
  499. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/cli.mjs +191 -0
  500. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/core.mjs +290 -0
  501. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/mcp-server.mjs +157 -0
  502. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/package.json +34 -0
  503. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/CHANGELOG.md +57 -0
  504. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/LICENSE +52 -0
  505. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/README.md +81 -0
  506. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/REFERENCE.md +122 -0
  507. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SKILL.md +87 -0
  508. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SPEC.md +206 -0
  509. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/detect.mjs +130 -0
  510. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  511. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  512. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  513. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  514. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  515. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  516. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/install.js +930 -0
  517. package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/package.json +32 -0
  518. package/CHANGELOG.md +66 -0
  519. package/DEV-GUIDE-GENERAL-PUBLIC.md +6 -6
  520. package/SKILL.md +1 -1
  521. package/_trash/RELEASE-NOTES-v1-9-56.md +42 -0
  522. package/_trash/RELEASE-NOTES-v1-9-57.md +18 -0
  523. package/package.json +1 -1
  524. package/scripts/deploy-public.sh +3 -1
  525. package/tools/deploy-public/package.json +1 -1
  526. package/tools/post-merge-rename/package.json +1 -1
  527. package/tools/wip-branch-guard/guard.mjs +46 -5
  528. package/tools/wip-branch-guard/package.json +1 -1
  529. package/tools/wip-file-guard/package.json +1 -1
  530. package/tools/wip-license-guard/package.json +1 -1
  531. package/tools/wip-license-hook/package.json +1 -1
  532. package/tools/wip-readme-format/package.json +1 -1
  533. package/tools/wip-release/core.mjs +3 -3
  534. package/tools/wip-release/package.json +1 -1
  535. package/tools/wip-repo-init/package.json +1 -1
  536. package/tools/wip-repo-permissions-hook/package.json +1 -1
  537. package/tools/wip-repos/package.json +1 -1
  538. package/tools/wip-universal-installer/package.json +1 -1
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * wip-repos CLI ... repo manifest reconciler
5
+ *
6
+ * Commands:
7
+ * check - Diff filesystem against manifest, flag drift
8
+ * sync - Move local folders to match the manifest
9
+ * add - Add a repo to the manifest
10
+ * move - Move a repo to a different category in the manifest
11
+ * tree - Generate directory tree from manifest
12
+ */
13
+
14
+ import { check, planSync, executeSync, addRepo, moveRepo, generateReadmeTree, loadManifest } from './core.mjs';
15
+ import { runClaude } from './claude.mjs';
16
+ import { resolve, dirname, join } from 'node:path';
17
+ import { readFileSync } from 'node:fs';
18
+ import { fileURLToPath } from 'node:url';
19
+
20
+ if (process.argv.includes('--version') || process.argv.includes('-v')) {
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ const pkg = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf8'));
23
+ console.log(pkg.version);
24
+ process.exit(0);
25
+ }
26
+
27
+ const args = process.argv.slice(2);
28
+ const command = args[0];
29
+
30
+ function usage() {
31
+ console.log(`wip-repos ... repo manifest reconciler
32
+
33
+ Usage:
34
+ wip-repos check [--manifest path] [--root path]
35
+ wip-repos sync [--manifest path] [--root path] [--dry-run]
36
+ wip-repos add <path> --remote <org/repo> [--category cat] [--description desc]
37
+ wip-repos move <path> --to <new-path>
38
+ wip-repos tree [--manifest path]
39
+
40
+ Options:
41
+ --manifest Path to repos-manifest.json (default: ./repos-manifest.json)
42
+ --root Path to repos root directory (default: directory containing manifest)
43
+ --dry-run Show what would happen without making changes
44
+ --json Output as JSON`);
45
+ }
46
+
47
+ function getFlag(flag) {
48
+ const idx = args.indexOf(flag);
49
+ if (idx === -1) return undefined;
50
+ return args[idx + 1];
51
+ }
52
+
53
+ function hasFlag(flag) {
54
+ return args.includes(flag);
55
+ }
56
+
57
+ const manifestPath = resolve(getFlag('--manifest') || 'repos-manifest.json');
58
+ const reposRoot = resolve(getFlag('--root') || dirname(manifestPath));
59
+ const dryRun = hasFlag('--dry-run');
60
+ const jsonOutput = hasFlag('--json');
61
+
62
+ try {
63
+ switch (command) {
64
+ case 'check': {
65
+ const result = check(manifestPath, reposRoot);
66
+
67
+ if (jsonOutput) {
68
+ console.log(JSON.stringify(result, null, 2));
69
+ break;
70
+ }
71
+
72
+ console.log(`Manifest: ${result.total.manifest} repos`);
73
+ console.log(`On disk: ${result.total.disk} repos`);
74
+ console.log(`Matched: ${result.total.matched}`);
75
+ console.log();
76
+
77
+ if (result.onDiskOnly.length > 0) {
78
+ console.log(`On disk but NOT in manifest (${result.onDiskOnly.length}):`);
79
+ for (const p of result.onDiskOnly) {
80
+ console.log(` + ${p}`);
81
+ }
82
+ console.log();
83
+ }
84
+
85
+ if (result.inManifestOnly.length > 0) {
86
+ console.log(`In manifest but NOT on disk (${result.inManifestOnly.length}):`);
87
+ for (const p of result.inManifestOnly) {
88
+ console.log(` - ${p}`);
89
+ }
90
+ console.log();
91
+ }
92
+
93
+ if (result.onDiskOnly.length === 0 && result.inManifestOnly.length === 0) {
94
+ console.log('No drift. Manifest and filesystem are in sync.');
95
+ }
96
+
97
+ // Exit code 1 if drift detected
98
+ if (result.onDiskOnly.length > 0 || result.inManifestOnly.length > 0) {
99
+ process.exit(1);
100
+ }
101
+ break;
102
+ }
103
+
104
+ case 'sync': {
105
+ const moves = planSync(manifestPath, reposRoot);
106
+
107
+ if (moves.length === 0) {
108
+ console.log('Nothing to sync. All repos are in the right place.');
109
+ break;
110
+ }
111
+
112
+ if (jsonOutput) {
113
+ console.log(JSON.stringify(moves, null, 2));
114
+ break;
115
+ }
116
+
117
+ console.log(`Found ${moves.length} repo(s) to move:\n`);
118
+ for (const m of moves) {
119
+ console.log(` ${m.from} -> ${m.to}`);
120
+ console.log(` (remote: ${m.remote})`);
121
+ console.log();
122
+ }
123
+
124
+ if (dryRun) {
125
+ console.log('Dry run. No changes made.');
126
+ break;
127
+ }
128
+
129
+ const results = executeSync(moves, reposRoot);
130
+ for (const r of results) {
131
+ if (r.status === 'moved') {
132
+ console.log(` Moved: ${r.from} -> ${r.to}`);
133
+ } else if (r.status === 'skipped') {
134
+ console.log(` Skipped: ${r.from} (${r.reason})`);
135
+ } else {
136
+ console.log(` Error: ${r.from} (${r.reason})`);
137
+ }
138
+ }
139
+ break;
140
+ }
141
+
142
+ case 'add': {
143
+ const repoPath = args[1];
144
+ const remote = getFlag('--remote');
145
+ if (!repoPath || !remote) {
146
+ console.error('Usage: wip-repos add <path> --remote <org/repo>');
147
+ process.exit(1);
148
+ }
149
+ const entry = addRepo(manifestPath, repoPath, remote, {
150
+ category: getFlag('--category'),
151
+ description: getFlag('--description'),
152
+ });
153
+ console.log(`Added: ${repoPath} -> ${remote}`);
154
+ if (jsonOutput) console.log(JSON.stringify(entry, null, 2));
155
+ break;
156
+ }
157
+
158
+ case 'move': {
159
+ const fromPath = args[1];
160
+ const toPath = getFlag('--to');
161
+ if (!fromPath || !toPath) {
162
+ console.error('Usage: wip-repos move <path> --to <new-path>');
163
+ process.exit(1);
164
+ }
165
+ const entry = moveRepo(manifestPath, fromPath, toPath);
166
+ console.log(`Moved in manifest: ${fromPath} -> ${toPath}`);
167
+ if (jsonOutput) console.log(JSON.stringify(entry, null, 2));
168
+ break;
169
+ }
170
+
171
+ case 'tree': {
172
+ const tree = generateReadmeTree(manifestPath);
173
+ console.log(tree);
174
+ break;
175
+ }
176
+
177
+ case 'claude': {
178
+ runClaude(manifestPath, args.slice(1));
179
+ break;
180
+ }
181
+
182
+ default:
183
+ usage();
184
+ if (command && command !== '--help' && command !== '-h') {
185
+ process.exit(1);
186
+ }
187
+ }
188
+ } catch (err) {
189
+ console.error(`Error: ${err.message}`);
190
+ process.exit(1);
191
+ }
@@ -0,0 +1,290 @@
1
+ /**
2
+ * wip-repos core ... repo manifest reconciler
3
+ *
4
+ * The manifest is the source of truth. The filesystem adapts to it.
5
+ * Like prettier for folder structure.
6
+ */
7
+
8
+ import { readFileSync, writeFileSync, existsSync, readdirSync, statSync, mkdirSync, renameSync } from 'node:fs';
9
+ import { join, dirname, relative, resolve } from 'node:path';
10
+
11
+ /**
12
+ * Load and parse a repos-manifest.json file.
13
+ * Supports both v1 (flat key-value) and v2 (rich objects) formats.
14
+ */
15
+ export function loadManifest(manifestPath) {
16
+ if (!existsSync(manifestPath)) {
17
+ throw new Error(`Manifest not found: ${manifestPath}`);
18
+ }
19
+ const raw = JSON.parse(readFileSync(manifestPath, 'utf8'));
20
+
21
+ // Detect format
22
+ const meta = {};
23
+ const repos = {};
24
+
25
+ for (const [key, value] of Object.entries(raw)) {
26
+ if (key.startsWith('_')) {
27
+ meta[key] = value;
28
+ continue;
29
+ }
30
+ if (typeof value === 'string') {
31
+ // v1 flat format: path -> remote
32
+ repos[key] = { remote: value };
33
+ } else if (typeof value === 'object' && value !== null) {
34
+ // v2 rich format
35
+ repos[key] = value;
36
+ }
37
+ }
38
+
39
+ return { meta, repos, format: meta._format || 'v1', path: manifestPath };
40
+ }
41
+
42
+ /**
43
+ * Save manifest back to disk.
44
+ */
45
+ export function saveManifest(manifestPath, meta, repos) {
46
+ const out = {};
47
+ for (const [key, value] of Object.entries(meta)) {
48
+ out[key] = value;
49
+ }
50
+ for (const [key, value] of Object.entries(repos)) {
51
+ // v1: just write the remote string
52
+ if (Object.keys(value).length === 1 && value.remote) {
53
+ out[key] = value.remote;
54
+ } else {
55
+ out[key] = value;
56
+ }
57
+ }
58
+ writeFileSync(manifestPath, JSON.stringify(out, null, 2) + '\n', 'utf8');
59
+ }
60
+
61
+ /**
62
+ * Walk a directory tree and find all git repos (directories containing .git/).
63
+ * Returns array of relative paths from the root.
64
+ */
65
+ export function walkRepos(rootDir, prefix = '') {
66
+ const results = [];
67
+ if (!existsSync(rootDir)) return results;
68
+
69
+ const entries = readdirSync(rootDir, { withFileTypes: true });
70
+ for (const entry of entries) {
71
+ if (!entry.isDirectory()) continue;
72
+ if (entry.name === '.git' || entry.name === 'node_modules') continue;
73
+ if (entry.name === '.DS_Store') continue;
74
+
75
+ const fullPath = join(rootDir, entry.name);
76
+ const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
77
+
78
+ // If this directory has a .git, it's a repo
79
+ if (existsSync(join(fullPath, '.git'))) {
80
+ results.push(relPath);
81
+ } else {
82
+ // Recurse into non-repo directories (organizational folders)
83
+ results.push(...walkRepos(fullPath, relPath));
84
+ }
85
+ }
86
+ return results;
87
+ }
88
+
89
+ /**
90
+ * Check: diff the filesystem against the manifest.
91
+ * Returns { inManifestOnly, onDiskOnly, matched }
92
+ */
93
+ export function check(manifestPath, reposRoot) {
94
+ const manifest = loadManifest(manifestPath);
95
+ const manifestPaths = new Set(Object.keys(manifest.repos));
96
+ const diskPaths = new Set(walkRepos(reposRoot));
97
+
98
+ const inManifestOnly = [];
99
+ const onDiskOnly = [];
100
+ const matched = [];
101
+
102
+ for (const p of manifestPaths) {
103
+ if (diskPaths.has(p)) {
104
+ matched.push(p);
105
+ } else {
106
+ inManifestOnly.push(p);
107
+ }
108
+ }
109
+
110
+ for (const p of diskPaths) {
111
+ if (!manifestPaths.has(p)) {
112
+ onDiskOnly.push(p);
113
+ }
114
+ }
115
+
116
+ return {
117
+ inManifestOnly: inManifestOnly.sort(),
118
+ onDiskOnly: onDiskOnly.sort(),
119
+ matched: matched.sort(),
120
+ total: {
121
+ manifest: manifestPaths.size,
122
+ disk: diskPaths.size,
123
+ matched: matched.length,
124
+ },
125
+ };
126
+ }
127
+
128
+ /**
129
+ * Sync: move local folders to match the manifest.
130
+ * Returns array of { from, to } moves that were performed.
131
+ *
132
+ * Only handles repos that exist on disk but at the wrong path.
133
+ * Matches by remote URL (git remote -v) against manifest remotes.
134
+ */
135
+ export function planSync(manifestPath, reposRoot) {
136
+ const manifest = loadManifest(manifestPath);
137
+ const diskPaths = walkRepos(reposRoot);
138
+ const moves = [];
139
+
140
+ // Build a map of remote -> manifest path
141
+ const remoteToManifest = new Map();
142
+ for (const [mPath, info] of Object.entries(manifest.repos)) {
143
+ if (info.remote) {
144
+ remoteToManifest.set(info.remote, mPath);
145
+ }
146
+ }
147
+
148
+ // For each repo on disk, check if its remote matches a manifest entry at a different path
149
+ for (const diskPath of diskPaths) {
150
+ const fullPath = join(reposRoot, diskPath);
151
+ const gitConfig = join(fullPath, '.git', 'config');
152
+ if (!existsSync(gitConfig)) continue;
153
+
154
+ const configText = readFileSync(gitConfig, 'utf8');
155
+ // Extract remote URL
156
+ const match = configText.match(/url\s*=\s*.*[:/]([^/]+\/[^/\s.]+?)(?:\.git)?\s*$/m);
157
+ if (!match) continue;
158
+
159
+ const remote = match[1];
160
+ const expectedPath = remoteToManifest.get(remote);
161
+
162
+ if (expectedPath && expectedPath !== diskPath) {
163
+ moves.push({
164
+ from: diskPath,
165
+ to: expectedPath,
166
+ remote,
167
+ fromFull: fullPath,
168
+ toFull: join(reposRoot, expectedPath),
169
+ });
170
+ }
171
+ }
172
+
173
+ return moves;
174
+ }
175
+
176
+ /**
177
+ * Execute sync moves. Creates parent directories as needed.
178
+ */
179
+ export function executeSync(moves, reposRoot) {
180
+ const results = [];
181
+ for (const move of moves) {
182
+ const parentDir = dirname(move.toFull);
183
+ if (!existsSync(parentDir)) {
184
+ mkdirSync(parentDir, { recursive: true });
185
+ }
186
+ if (existsSync(move.toFull)) {
187
+ results.push({ ...move, status: 'skipped', reason: 'target exists' });
188
+ continue;
189
+ }
190
+ try {
191
+ renameSync(move.fromFull, move.toFull);
192
+ results.push({ ...move, status: 'moved' });
193
+ } catch (err) {
194
+ results.push({ ...move, status: 'error', reason: err.message });
195
+ }
196
+ }
197
+ return results;
198
+ }
199
+
200
+ /**
201
+ * Add a repo to the manifest.
202
+ */
203
+ export function addRepo(manifestPath, repoPath, remote, opts = {}) {
204
+ const manifest = loadManifest(manifestPath);
205
+
206
+ if (manifest.repos[repoPath]) {
207
+ throw new Error(`Already in manifest: ${repoPath}`);
208
+ }
209
+
210
+ const entry = { remote };
211
+ if (opts.description) entry.description = opts.description;
212
+ if (opts.category) entry.category = opts.category;
213
+ if (opts.public) entry.public = opts.public;
214
+ if (opts.privatized !== undefined) entry.privatized = opts.privatized;
215
+
216
+ manifest.repos[repoPath] = entry;
217
+ saveManifest(manifestPath, manifest.meta, manifest.repos);
218
+
219
+ return entry;
220
+ }
221
+
222
+ /**
223
+ * Move a repo in the manifest from one path to another.
224
+ */
225
+ export function moveRepo(manifestPath, fromPath, toPath) {
226
+ const manifest = loadManifest(manifestPath);
227
+
228
+ if (!manifest.repos[fromPath]) {
229
+ throw new Error(`Not in manifest: ${fromPath}`);
230
+ }
231
+ if (manifest.repos[toPath]) {
232
+ throw new Error(`Target already exists in manifest: ${toPath}`);
233
+ }
234
+
235
+ manifest.repos[toPath] = manifest.repos[fromPath];
236
+ delete manifest.repos[fromPath];
237
+ saveManifest(manifestPath, manifest.meta, manifest.repos);
238
+
239
+ return manifest.repos[toPath];
240
+ }
241
+
242
+ /**
243
+ * Generate a markdown directory tree from the manifest.
244
+ */
245
+ export function generateReadmeTree(manifestPath) {
246
+ const manifest = loadManifest(manifestPath);
247
+ const paths = Object.keys(manifest.repos).sort();
248
+
249
+ // Build tree structure
250
+ const tree = {};
251
+ for (const p of paths) {
252
+ const parts = p.split('/');
253
+ let node = tree;
254
+ for (const part of parts) {
255
+ if (!node[part]) node[part] = {};
256
+ node = node[part];
257
+ }
258
+ }
259
+
260
+ // Render tree
261
+ const lines = ['repos/'];
262
+ function render(node, prefix, isLast) {
263
+ const entries = Object.keys(node).sort((a, b) => {
264
+ // underscore-prefixed folders sort to top
265
+ const aUnder = a.startsWith('_');
266
+ const bUnder = b.startsWith('_');
267
+ if (aUnder && !bUnder) return 1;
268
+ if (!aUnder && bUnder) return -1;
269
+ return a.localeCompare(b);
270
+ });
271
+
272
+ for (let i = 0; i < entries.length; i++) {
273
+ const name = entries[i];
274
+ const last = i === entries.length - 1;
275
+ const connector = last ? '└── ' : '├── ';
276
+ const childPrefix = last ? ' ' : '│ ';
277
+ const children = Object.keys(node[name]);
278
+
279
+ if (children.length > 0) {
280
+ lines.push(`${prefix}${connector}${name}/`);
281
+ render(node[name], prefix + childPrefix, last);
282
+ } else {
283
+ lines.push(`${prefix}${connector}${name}`);
284
+ }
285
+ }
286
+ }
287
+
288
+ render(tree, '', false);
289
+ return lines.join('\n');
290
+ }
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env node
2
+ // wip-repos/mcp-server.mjs
3
+ // MCP server exposing repo manifest reconciler as tools.
4
+ // Wraps core.mjs. Registered via .mcp.json.
5
+
6
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
9
+ import {
10
+ check, planSync, addRepo, moveRepo, generateReadmeTree,
11
+ } from './core.mjs';
12
+
13
+ const server = new Server(
14
+ { name: 'wip-repos', version: '0.1.0' },
15
+ { capabilities: { tools: {} } }
16
+ );
17
+
18
+ // ── Tool Definitions ──
19
+
20
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
21
+ tools: [
22
+ {
23
+ name: 'repos_check',
24
+ description: 'Diff the filesystem against the manifest. Shows repos in manifest but not on disk, on disk but not in manifest, and matched.',
25
+ inputSchema: {
26
+ type: 'object',
27
+ properties: {
28
+ manifestPath: { type: 'string', description: 'Path to repos-manifest.json' },
29
+ reposRoot: { type: 'string', description: 'Root directory containing repos' },
30
+ },
31
+ required: ['manifestPath', 'reposRoot'],
32
+ },
33
+ },
34
+ {
35
+ name: 'repos_sync_plan',
36
+ description: 'Plan moves to reconcile filesystem with manifest. Matches repos by git remote URL. Returns planned moves without executing.',
37
+ inputSchema: {
38
+ type: 'object',
39
+ properties: {
40
+ manifestPath: { type: 'string', description: 'Path to repos-manifest.json' },
41
+ reposRoot: { type: 'string', description: 'Root directory containing repos' },
42
+ },
43
+ required: ['manifestPath', 'reposRoot'],
44
+ },
45
+ },
46
+ {
47
+ name: 'repos_add',
48
+ description: 'Add a repo to the manifest.',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ manifestPath: { type: 'string', description: 'Path to repos-manifest.json' },
53
+ repoPath: { type: 'string', description: 'Relative path in the manifest (e.g. ldm-os/utilities/my-tool)' },
54
+ remote: { type: 'string', description: 'GitHub remote (e.g. wipcomputer/my-tool)' },
55
+ description: { type: 'string', description: 'Short description' },
56
+ },
57
+ required: ['manifestPath', 'repoPath', 'remote'],
58
+ },
59
+ },
60
+ {
61
+ name: 'repos_move',
62
+ description: 'Move a repo in the manifest from one path to another.',
63
+ inputSchema: {
64
+ type: 'object',
65
+ properties: {
66
+ manifestPath: { type: 'string', description: 'Path to repos-manifest.json' },
67
+ fromPath: { type: 'string', description: 'Current manifest path' },
68
+ toPath: { type: 'string', description: 'New manifest path' },
69
+ },
70
+ required: ['manifestPath', 'fromPath', 'toPath'],
71
+ },
72
+ },
73
+ {
74
+ name: 'repos_tree',
75
+ description: 'Generate a markdown directory tree from the manifest.',
76
+ inputSchema: {
77
+ type: 'object',
78
+ properties: {
79
+ manifestPath: { type: 'string', description: 'Path to repos-manifest.json' },
80
+ },
81
+ required: ['manifestPath'],
82
+ },
83
+ },
84
+ ],
85
+ }));
86
+
87
+ // ── Tool Handlers ──
88
+
89
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
90
+ const { name, arguments: args } = req.params;
91
+
92
+ try {
93
+ if (name === 'repos_check') {
94
+ const result = check(args.manifestPath, args.reposRoot);
95
+ return {
96
+ content: [{
97
+ type: 'text',
98
+ text: JSON.stringify(result, null, 2),
99
+ }],
100
+ };
101
+ }
102
+
103
+ if (name === 'repos_sync_plan') {
104
+ const moves = planSync(args.manifestPath, args.reposRoot);
105
+ return {
106
+ content: [{
107
+ type: 'text',
108
+ text: moves.length === 0
109
+ ? 'No moves needed. Filesystem matches manifest.'
110
+ : JSON.stringify(moves.map(m => ({ from: m.from, to: m.to, remote: m.remote })), null, 2),
111
+ }],
112
+ };
113
+ }
114
+
115
+ if (name === 'repos_add') {
116
+ const entry = addRepo(args.manifestPath, args.repoPath, args.remote, {
117
+ description: args.description,
118
+ });
119
+ return {
120
+ content: [{
121
+ type: 'text',
122
+ text: `Added ${args.repoPath} -> ${args.remote}`,
123
+ }],
124
+ };
125
+ }
126
+
127
+ if (name === 'repos_move') {
128
+ moveRepo(args.manifestPath, args.fromPath, args.toPath);
129
+ return {
130
+ content: [{
131
+ type: 'text',
132
+ text: `Moved ${args.fromPath} -> ${args.toPath}`,
133
+ }],
134
+ };
135
+ }
136
+
137
+ if (name === 'repos_tree') {
138
+ const tree = generateReadmeTree(args.manifestPath);
139
+ return {
140
+ content: [{ type: 'text', text: tree }],
141
+ };
142
+ }
143
+
144
+ return {
145
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
146
+ isError: true,
147
+ };
148
+ } catch (err) {
149
+ return {
150
+ content: [{ type: 'text', text: `Error: ${err.message}` }],
151
+ isError: true,
152
+ };
153
+ }
154
+ });
155
+
156
+ const transport = new StdioServerTransport();
157
+ await server.connect(transport);
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@wipcomputer/wip-repos",
3
+ "version": "1.9.15",
4
+ "type": "module",
5
+ "description": "Repo manifest reconciler. Single source of truth for repo organization. Like prettier for folder structure.",
6
+ "main": "core.mjs",
7
+ "bin": {
8
+ "wip-repos": "./cli.mjs"
9
+ },
10
+ "exports": {
11
+ ".": "./core.mjs"
12
+ },
13
+ "scripts": {
14
+ "test": "node cli.mjs --help"
15
+ },
16
+ "keywords": [
17
+ "repo-manifest",
18
+ "monorepo",
19
+ "toolbox",
20
+ "organization",
21
+ "enterprise",
22
+ "ai-dev-tools"
23
+ ],
24
+ "author": "Parker Todd Brooks",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/wipcomputer/wip-ai-devops-toolbox.git",
29
+ "directory": "tools/wip-repos"
30
+ },
31
+ "dependencies": {
32
+ "@modelcontextprotocol/sdk": "^1.0.0"
33
+ }
34
+ }