@wipcomputer/wip-ai-devops-toolbox 1.9.54 → 1.9.56
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.
- package/.worktrees/toolbox--release-notes/.license-guard.json +7 -0
- package/.worktrees/toolbox--release-notes/.publish-skill.json +4 -0
- package/.worktrees/toolbox--release-notes/CHANGELOG.md +1875 -0
- package/.worktrees/toolbox--release-notes/CLA.md +19 -0
- package/.worktrees/toolbox--release-notes/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
- package/.worktrees/toolbox--release-notes/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/README.md +238 -0
- package/.worktrees/toolbox--release-notes/RELEASE-NOTES-v1-9-56.md +42 -0
- package/.worktrees/toolbox--release-notes/SKILL.md +821 -0
- package/.worktrees/toolbox--release-notes/TECHNICAL.md +416 -0
- package/.worktrees/toolbox--release-notes/UNIVERSAL-INTERFACE.md +180 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
- package/.worktrees/toolbox--release-notes/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
- package/.worktrees/toolbox--release-notes/_trash/guide 2/DEV-GUIDE.md +487 -0
- package/.worktrees/toolbox--release-notes/_trash/guide 2/scripts/deploy-public.sh +152 -0
- package/.worktrees/toolbox--release-notes/package.json +27 -0
- package/.worktrees/toolbox--release-notes/scripts/SKILL-deploy-public.md +61 -0
- package/.worktrees/toolbox--release-notes/scripts/SKILL-post-merge-rename.md +47 -0
- package/.worktrees/toolbox--release-notes/scripts/deploy-public.sh +345 -0
- package/.worktrees/toolbox--release-notes/scripts/post-merge-rename.sh +210 -0
- package/.worktrees/toolbox--release-notes/scripts/publish-skill.sh +134 -0
- package/.worktrees/toolbox--release-notes/templates/global-claude-md.md +73 -0
- package/.worktrees/toolbox--release-notes/templates/repo-claude-md.template +24 -0
- package/.worktrees/toolbox--release-notes/tools/deploy-public/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/deploy-public/README.md +31 -0
- package/.worktrees/toolbox--release-notes/tools/deploy-public/SKILL.md +71 -0
- package/.worktrees/toolbox--release-notes/tools/deploy-public/deploy-public.sh +264 -0
- package/.worktrees/toolbox--release-notes/tools/deploy-public/package.json +9 -0
- package/.worktrees/toolbox--release-notes/tools/ldm-jobs/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/ldm-jobs/README.md +46 -0
- package/.worktrees/toolbox--release-notes/tools/ldm-jobs/backup.sh +16 -0
- package/.worktrees/toolbox--release-notes/tools/ldm-jobs/branch-protect.sh +39 -0
- package/.worktrees/toolbox--release-notes/tools/ldm-jobs/crystal-capture.sh +19 -0
- package/.worktrees/toolbox--release-notes/tools/ldm-jobs/setup-shell.sh +27 -0
- package/.worktrees/toolbox--release-notes/tools/ldm-jobs/visibility-audit.sh +27 -0
- package/.worktrees/toolbox--release-notes/tools/post-merge-rename/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/post-merge-rename/README.md +29 -0
- package/.worktrees/toolbox--release-notes/tools/post-merge-rename/SKILL.md +57 -0
- package/.worktrees/toolbox--release-notes/tools/post-merge-rename/package.json +9 -0
- package/.worktrees/toolbox--release-notes/tools/post-merge-rename/post-merge-rename.sh +122 -0
- package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/INSTALL.md +41 -0
- package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/guard.mjs +459 -0
- package/.worktrees/toolbox--release-notes/tools/wip-branch-guard/package.json +18 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/CHANGELOG.md +6 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/README.md +113 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/REFERENCE.md +86 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/SKILL.md +105 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/guard.mjs +161 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/openclaw.plugin.json +8 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/package.json +27 -0
- package/.worktrees/toolbox--release-notes/tools/wip-file-guard/test.sh +119 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-guard/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-guard/README.md +69 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-guard/SKILL.md +65 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-guard/cli.mjs +472 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-guard/core.mjs +310 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-guard/guard.mjs +146 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-guard/package.json +22 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/CHANGELOG.md +17 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/README.md +200 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/SKILL.md +111 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js +170 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/cli/index.js.map +1 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js +104 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/detector.js.map +1 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.d.ts +4 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js +5 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/index.js.map +1 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js +72 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js +227 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js +325 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/hooks/pre-push.sh +51 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/mcp-server.mjs +119 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package-lock.json +54 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/package.json +43 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/cli/index.ts +189 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/detector.ts +130 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/index.ts +4 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/ledger.ts +116 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/reporter.ts +255 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/src/core/scanner.ts +367 -0
- package/.worktrees/toolbox--release-notes/tools/wip-license-hook/tsconfig.json +16 -0
- package/.worktrees/toolbox--release-notes/tools/wip-readme-format/README.md +49 -0
- package/.worktrees/toolbox--release-notes/tools/wip-readme-format/SKILL.md +84 -0
- package/.worktrees/toolbox--release-notes/tools/wip-readme-format/format.mjs +597 -0
- package/.worktrees/toolbox--release-notes/tools/wip-readme-format/package.json +15 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/CHANGELOG.md +42 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/README.md +45 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/REFERENCE.md +100 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/SKILL.md +139 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/cli.js +175 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/core.mjs +1664 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/mcp-server.mjs +113 -0
- package/.worktrees/toolbox--release-notes/tools/wip-release/package.json +36 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/README.md +38 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/SKILL.md +77 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/init.mjs +148 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/package.json +11 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_sort/README.md +15 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/_trash/README.md +16 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/notes/README.md +26 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-init/templates/read-me-first.md +80 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/README.md +86 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/SKILL.md +73 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/cli.js +93 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/core.mjs +122 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/guard.mjs +64 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repo-permissions-hook/package.json +31 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/README.md +77 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/SKILL.md +80 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/claude.mjs +248 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/cli.mjs +191 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/core.mjs +290 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/mcp-server.mjs +157 -0
- package/.worktrees/toolbox--release-notes/tools/wip-repos/package.json +34 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/CHANGELOG.md +57 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/LICENSE +52 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/README.md +81 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/REFERENCE.md +122 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SKILL.md +87 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/SPEC.md +206 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/detect.mjs +130 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/README.md +20 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/examples/minimal/package.json +12 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/install.js +930 -0
- package/.worktrees/toolbox--release-notes/tools/wip-universal-installer/package.json +32 -0
- package/.worktrees/toolbox--save-stale/.license-guard.json +7 -0
- package/.worktrees/toolbox--save-stale/.publish-skill.json +4 -0
- package/.worktrees/toolbox--save-stale/CHANGELOG.md +1875 -0
- package/.worktrees/toolbox--save-stale/CLA.md +19 -0
- package/.worktrees/toolbox--save-stale/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
- package/.worktrees/toolbox--save-stale/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/README.md +238 -0
- package/.worktrees/toolbox--save-stale/SKILL.md +821 -0
- package/.worktrees/toolbox--save-stale/TECHNICAL.md +416 -0
- package/.worktrees/toolbox--save-stale/UNIVERSAL-INTERFACE.md +180 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
- package/.worktrees/toolbox--save-stale/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
- package/.worktrees/toolbox--save-stale/_trash/guide 2/DEV-GUIDE.md +487 -0
- package/.worktrees/toolbox--save-stale/_trash/guide 2/scripts/deploy-public.sh +152 -0
- package/.worktrees/toolbox--save-stale/package.json +27 -0
- package/.worktrees/toolbox--save-stale/scripts/SKILL-deploy-public.md +61 -0
- package/.worktrees/toolbox--save-stale/scripts/SKILL-post-merge-rename.md +47 -0
- package/.worktrees/toolbox--save-stale/scripts/deploy-public.sh +345 -0
- package/.worktrees/toolbox--save-stale/scripts/post-merge-rename.sh +210 -0
- package/.worktrees/toolbox--save-stale/scripts/publish-skill.sh +134 -0
- package/.worktrees/toolbox--save-stale/templates/global-claude-md.md +73 -0
- package/.worktrees/toolbox--save-stale/templates/repo-claude-md.template +24 -0
- package/.worktrees/toolbox--save-stale/tools/deploy-public/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/deploy-public/README.md +31 -0
- package/.worktrees/toolbox--save-stale/tools/deploy-public/SKILL.md +71 -0
- package/.worktrees/toolbox--save-stale/tools/deploy-public/deploy-public.sh +264 -0
- package/.worktrees/toolbox--save-stale/tools/deploy-public/package.json +9 -0
- package/.worktrees/toolbox--save-stale/tools/ldm-jobs/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/ldm-jobs/README.md +46 -0
- package/.worktrees/toolbox--save-stale/tools/ldm-jobs/backup.sh +16 -0
- package/.worktrees/toolbox--save-stale/tools/ldm-jobs/branch-protect.sh +39 -0
- package/.worktrees/toolbox--save-stale/tools/ldm-jobs/crystal-capture.sh +19 -0
- package/.worktrees/toolbox--save-stale/tools/ldm-jobs/setup-shell.sh +27 -0
- package/.worktrees/toolbox--save-stale/tools/ldm-jobs/visibility-audit.sh +27 -0
- package/.worktrees/toolbox--save-stale/tools/post-merge-rename/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/post-merge-rename/README.md +29 -0
- package/.worktrees/toolbox--save-stale/tools/post-merge-rename/SKILL.md +57 -0
- package/.worktrees/toolbox--save-stale/tools/post-merge-rename/package.json +9 -0
- package/.worktrees/toolbox--save-stale/tools/post-merge-rename/post-merge-rename.sh +122 -0
- package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/INSTALL.md +41 -0
- package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/guard.mjs +459 -0
- package/.worktrees/toolbox--save-stale/tools/wip-branch-guard/package.json +18 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/CHANGELOG.md +6 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/README.md +113 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/REFERENCE.md +86 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/SKILL.md +105 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/guard.mjs +161 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/openclaw.plugin.json +8 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/package.json +27 -0
- package/.worktrees/toolbox--save-stale/tools/wip-file-guard/test.sh +119 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-guard/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-guard/README.md +69 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-guard/SKILL.md +65 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-guard/cli.mjs +472 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-guard/core.mjs +310 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-guard/guard.mjs +146 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-guard/package.json +22 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/CHANGELOG.md +17 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/README.md +200 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/SKILL.md +111 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js +170 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/cli/index.js.map +1 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js +104 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/detector.js.map +1 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.d.ts +4 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js +5 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/index.js.map +1 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js +72 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js +227 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js +325 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/hooks/pre-push.sh +51 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/mcp-server.mjs +119 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package-lock.json +54 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/package.json +43 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/cli/index.ts +189 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/detector.ts +130 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/index.ts +4 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/ledger.ts +116 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/reporter.ts +255 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/src/core/scanner.ts +367 -0
- package/.worktrees/toolbox--save-stale/tools/wip-license-hook/tsconfig.json +16 -0
- package/.worktrees/toolbox--save-stale/tools/wip-readme-format/README.md +49 -0
- package/.worktrees/toolbox--save-stale/tools/wip-readme-format/SKILL.md +84 -0
- package/.worktrees/toolbox--save-stale/tools/wip-readme-format/format.mjs +597 -0
- package/.worktrees/toolbox--save-stale/tools/wip-readme-format/package.json +15 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/CHANGELOG.md +42 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/README.md +45 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/REFERENCE.md +100 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/SKILL.md +139 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/cli.js +175 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/core.mjs +1664 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/mcp-server.mjs +113 -0
- package/.worktrees/toolbox--save-stale/tools/wip-release/package.json +36 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/README.md +38 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/SKILL.md +77 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/init.mjs +148 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/package.json +11 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_sort/README.md +15 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/_trash/README.md +16 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/notes/README.md +26 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-init/templates/read-me-first.md +80 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/README.md +86 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/SKILL.md +73 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/cli.js +93 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/core.mjs +122 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/guard.mjs +64 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repo-permissions-hook/package.json +31 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/README.md +77 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/SKILL.md +80 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/claude.mjs +248 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/cli.mjs +191 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/core.mjs +290 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/mcp-server.mjs +157 -0
- package/.worktrees/toolbox--save-stale/tools/wip-repos/package.json +34 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/CHANGELOG.md +57 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/LICENSE +52 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/README.md +81 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/REFERENCE.md +122 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SKILL.md +87 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/SPEC.md +206 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/detect.mjs +130 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/README.md +20 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/examples/minimal/package.json +12 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/install.js +930 -0
- package/.worktrees/toolbox--save-stale/tools/wip-universal-installer/package.json +32 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.license-guard.json +7 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/.publish-skill.json +4 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CHANGELOG.md +1875 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/CLA.md +19 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/DEV-GUIDE-GENERAL-PUBLIC.md +949 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/README.md +238 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/SKILL.md +821 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/TECHNICAL.md +416 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/UNIVERSAL-INTERFACE.md +180 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-31.md +26 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-32.md +18 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-41.md +28 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-45.md +25 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-46.md +38 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-47.md +42 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-48.md +22 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-49.md +31 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-50.md +24 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-51.md +11 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-52.md +25 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-53.md +22 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-54.md +13 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/DEV-GUIDE.md +487 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/_trash/guide 2/scripts/deploy-public.sh +152 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/package.json +27 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-deploy-public.md +61 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/SKILL-post-merge-rename.md +47 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/deploy-public.sh +345 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/post-merge-rename.sh +210 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/scripts/publish-skill.sh +134 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/global-claude-md.md +73 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/templates/repo-claude-md.template +24 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/README.md +31 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/SKILL.md +71 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/deploy-public.sh +264 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/deploy-public/package.json +9 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/README.md +46 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/backup.sh +16 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/branch-protect.sh +39 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/crystal-capture.sh +19 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/setup-shell.sh +27 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/ldm-jobs/visibility-audit.sh +27 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/README.md +29 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/SKILL.md +57 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/package.json +9 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/post-merge-rename/post-merge-rename.sh +122 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/INSTALL.md +41 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/guard.mjs +418 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-branch-guard/package.json +18 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/CHANGELOG.md +6 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/README.md +113 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/REFERENCE.md +86 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/SKILL.md +105 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/guard.mjs +161 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/openclaw.plugin.json +8 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/package.json +27 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-file-guard/test.sh +119 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/README.md +69 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/SKILL.md +65 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/cli.mjs +472 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/core.mjs +310 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/guard.mjs +146 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-guard/package.json +22 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/CHANGELOG.md +17 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/README.md +200 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/SKILL.md +111 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js +170 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/cli/index.js.map +1 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js +104 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/detector.js.map +1 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.d.ts +4 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js +5 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/index.js.map +1 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js +72 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js +227 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js +325 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/hooks/pre-push.sh +51 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/mcp-server.mjs +119 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package-lock.json +54 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/package.json +43 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/cli/index.ts +189 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/detector.ts +130 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/index.ts +4 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/ledger.ts +116 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/reporter.ts +255 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/src/core/scanner.ts +367 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-license-hook/tsconfig.json +16 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/README.md +49 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/SKILL.md +84 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/format.mjs +597 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-readme-format/package.json +15 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/CHANGELOG.md +42 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/README.md +45 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/REFERENCE.md +100 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/SKILL.md +139 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/cli.js +175 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/core.mjs +1664 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/mcp-server.mjs +113 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-release/package.json +36 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/README.md +38 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/SKILL.md +77 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/init.mjs +148 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/package.json +11 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_sort/README.md +15 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/_trash/README.md +16 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/dev-updates/README.md +50 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/notes/README.md +26 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/roadmap.md +77 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/plans-prds/todos/README.md +63 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/product-ideas/README.md +24 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/product/readme-first-product.md +128 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-init/templates/read-me-first.md +80 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/README.md +86 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/SKILL.md +73 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/cli.js +93 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/core.mjs +122 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/guard.mjs +64 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repo-permissions-hook/package.json +31 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/README.md +77 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/SKILL.md +80 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/claude.mjs +248 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/cli.mjs +191 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/core.mjs +290 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/mcp-server.mjs +157 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-repos/package.json +34 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/CHANGELOG.md +57 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/LICENSE +52 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/README.md +81 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/REFERENCE.md +122 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SKILL.md +87 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/SPEC.md +206 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/detect.mjs +130 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/README.md +20 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/examples/minimal/package.json +12 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/install.js +930 -0
- package/.worktrees/wip-ai-devops-toolbox-private--cc-mini--dot-worktrees/tools/wip-universal-installer/package.json +32 -0
- package/CHANGELOG.md +59 -0
- package/DEV-GUIDE-GENERAL-PUBLIC.md +6 -6
- package/SKILL.md +1 -1
- package/_trash/RELEASE-NOTES-v1-9-55.md +11 -0
- package/_trash/RELEASE-NOTES-v1-9-56.md +42 -0
- package/package.json +1 -1
- package/tools/deploy-public/package.json +1 -1
- package/tools/post-merge-rename/package.json +1 -1
- package/tools/wip-branch-guard/guard.mjs +46 -5
- package/tools/wip-branch-guard/package.json +1 -1
- package/tools/wip-file-guard/package.json +1 -1
- package/tools/wip-license-guard/package.json +1 -1
- package/tools/wip-license-hook/package.json +1 -1
- package/tools/wip-readme-format/package.json +1 -1
- package/tools/wip-release/core.mjs +3 -3
- package/tools/wip-release/package.json +1 -1
- package/tools/wip-repo-init/package.json +1 -1
- package/tools/wip-repo-permissions-hook/package.json +1 -1
- package/tools/wip-repos/package.json +1 -1
- package/tools/wip-universal-installer/package.json +1 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Dual License: MIT + AGPLv3
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 WIP Computer, Inc.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
1. MIT License (local and personal use)
|
|
7
|
+
---------------------------------------
|
|
8
|
+
|
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
11
|
+
in the Software without restriction, including without limitation the rights
|
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
13
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
14
|
+
furnished to do so, subject to the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be included in all
|
|
17
|
+
copies or substantial portions of the Software.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
24
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
25
|
+
SOFTWARE.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
2. GNU Affero General Public License v3.0 (commercial and cloud use)
|
|
29
|
+
--------------------------------------------------------------------
|
|
30
|
+
|
|
31
|
+
If you run this software as part of a hosted service, cloud platform,
|
|
32
|
+
marketplace listing, or any network-accessible offering for commercial
|
|
33
|
+
purposes, the AGPLv3 terms apply. You must either:
|
|
34
|
+
|
|
35
|
+
a) Release your complete source code under AGPLv3, or
|
|
36
|
+
b) Obtain a commercial license.
|
|
37
|
+
|
|
38
|
+
This program is free software: you can redistribute it and/or modify
|
|
39
|
+
it under the terms of the GNU Affero General Public License as published
|
|
40
|
+
by the Free Software Foundation, either version 3 of the License, or
|
|
41
|
+
(at your option) any later version.
|
|
42
|
+
|
|
43
|
+
This program is distributed in the hope that it will be useful,
|
|
44
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
45
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
46
|
+
GNU Affero General Public License for more details.
|
|
47
|
+
|
|
48
|
+
You should have received a copy of the GNU Affero General Public License
|
|
49
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
AGPLv3 for personal use is free. Commercial licenses available.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
###### WIP Computer
|
|
2
|
+
|
|
3
|
+
# License Guard
|
|
4
|
+
|
|
5
|
+
Enforce licensing on every repo. Copyright, dual-license, CLA, README license section. Checked automatically on every release.
|
|
6
|
+
|
|
7
|
+
## Commands
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
wip-license-guard check # audit current repo
|
|
11
|
+
wip-license-guard check --fix # audit and auto-fix issues
|
|
12
|
+
wip-license-guard init # interactive first-run setup
|
|
13
|
+
wip-license-guard init --from-standard # apply WIP Computer defaults without prompting
|
|
14
|
+
wip-license-guard readme-license # audit license blocks across all repos
|
|
15
|
+
wip-license-guard readme-license --fix # apply standard license block to all READMEs
|
|
16
|
+
wip-license-guard readme-license --dry-run # preview changes without writing
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## What it checks
|
|
20
|
+
|
|
21
|
+
- LICENSE file exists and matches configured license type
|
|
22
|
+
- Copyright line is correct and current year
|
|
23
|
+
- CLA.md exists (if configured)
|
|
24
|
+
- README has a `## License` section with the standard block
|
|
25
|
+
- For toolbox repos: checks every sub-tool in `tools/`
|
|
26
|
+
|
|
27
|
+
## Config
|
|
28
|
+
|
|
29
|
+
`.license-guard.json` in repo root. Created by `init`. Contains copyright holder, license type, year, and what to enforce.
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"copyright": "WIP Computer, Inc.",
|
|
34
|
+
"license": "MIT+AGPL",
|
|
35
|
+
"year": 2026,
|
|
36
|
+
"enforceCLA": true,
|
|
37
|
+
"enforceReadmeLicense": true
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## wip-release gate
|
|
42
|
+
|
|
43
|
+
Step 0 of wip-release reads `.license-guard.json` and runs the same checks. If compliance fails, the release is blocked.
|
|
44
|
+
|
|
45
|
+
## `--from-standard` generates
|
|
46
|
+
|
|
47
|
+
- `.license-guard.json` with WIP Computer defaults
|
|
48
|
+
- `LICENSE` file (dual MIT+AGPL)
|
|
49
|
+
- `CLA.md`
|
|
50
|
+
|
|
51
|
+
## readme-license
|
|
52
|
+
|
|
53
|
+
Scans all repos in a directory and applies a standard license block to every README. Removes duplicate license sections from sub-tool READMEs. Reads templates from `ai/wip-templates/readme/`.
|
|
54
|
+
|
|
55
|
+
## Source
|
|
56
|
+
|
|
57
|
+
Pure JavaScript, no build step. Zero dependencies.
|
|
58
|
+
|
|
59
|
+
- `cli.mjs` ... CLI entry point
|
|
60
|
+
- `core.mjs` ... license checking and generation logic
|
|
61
|
+
- `hook.mjs` ... wip-release gate integration
|
|
62
|
+
|
|
63
|
+
## Interfaces
|
|
64
|
+
|
|
65
|
+
- **CLI**: `wip-license-guard`
|
|
66
|
+
|
|
67
|
+
## Part of [AI DevOps Toolbox](https://github.com/wipcomputer/wip-ai-devops-toolbox)
|
|
68
|
+
|
|
69
|
+
Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wip-license-guard
|
|
3
|
+
description: License compliance for your own repos. Ensures correct copyright headers, dual-license blocks, and LICENSE files across all source files.
|
|
4
|
+
license: MIT
|
|
5
|
+
interface: [cli, skill]
|
|
6
|
+
metadata:
|
|
7
|
+
display-name: "License Guard"
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
homepage: "https://github.com/wipcomputer/wip-ai-devops-toolbox"
|
|
10
|
+
author: "Parker Todd Brooks"
|
|
11
|
+
category: dev-tools
|
|
12
|
+
capabilities:
|
|
13
|
+
- copyright-enforcement
|
|
14
|
+
- license-compliance
|
|
15
|
+
- license-file-check
|
|
16
|
+
requires:
|
|
17
|
+
bins: [node, git]
|
|
18
|
+
openclaw:
|
|
19
|
+
requires:
|
|
20
|
+
bins: [node, git]
|
|
21
|
+
install:
|
|
22
|
+
- id: node
|
|
23
|
+
kind: node
|
|
24
|
+
package: "@wipcomputer/wip-license-guard"
|
|
25
|
+
bins: [wip-license-guard]
|
|
26
|
+
label: "Install via npm"
|
|
27
|
+
emoji: "📜"
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# wip-license-guard
|
|
31
|
+
|
|
32
|
+
License compliance for your own repos. Ensures correct copyright, dual-license blocks, LICENSE files, and README license sections.
|
|
33
|
+
|
|
34
|
+
## When to Use This Skill
|
|
35
|
+
|
|
36
|
+
- Before a release, to verify all files have correct license headers
|
|
37
|
+
- After adding new source files to a repo
|
|
38
|
+
- To enforce the MIT/AGPL dual-license pattern
|
|
39
|
+
- To standardize README license sections across all your repos
|
|
40
|
+
|
|
41
|
+
## CLI
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
wip-license-guard check [path] # audit repo against config
|
|
45
|
+
wip-license-guard check --fix [path] # auto-fix LICENSE, CLA, copyright issues
|
|
46
|
+
wip-license-guard init [path] # interactive setup
|
|
47
|
+
wip-license-guard init --from-standard # apply WIP Computer defaults (no prompts)
|
|
48
|
+
wip-license-guard readme-license [path] # audit README license sections
|
|
49
|
+
wip-license-guard readme-license --dry-run # preview what would change
|
|
50
|
+
wip-license-guard readme-license --fix # apply standard block to all READMEs
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### readme-license
|
|
54
|
+
|
|
55
|
+
Scans all repos for README license sections. Three modes:
|
|
56
|
+
|
|
57
|
+
- **No flags**: audit only. Reports non-standard, missing, and sub-tool READMEs that shouldn't have license sections.
|
|
58
|
+
- **--dry-run**: preview. Shows what each README has now and what would change. No files touched.
|
|
59
|
+
- **--fix**: apply. Replaces non-standard sections with the standard dual MIT/AGPLv3 block. Removes license sections from sub-tool READMEs.
|
|
60
|
+
|
|
61
|
+
Works on a single repo or a directory of repos:
|
|
62
|
+
```bash
|
|
63
|
+
wip-license-guard readme-license /path/to/one-repo
|
|
64
|
+
wip-license-guard readme-license /path/to/directory-of-repos
|
|
65
|
+
```
|
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// wip-license-guard
|
|
3
|
+
// License compliance for your own repos.
|
|
4
|
+
// Ensures correct copyright, dual-license blocks, and LICENSE files.
|
|
5
|
+
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';
|
|
7
|
+
import { join, dirname } from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { createInterface } from 'node:readline';
|
|
10
|
+
import { generateLicense, generateCLA, generateReadmeBlock, replaceReadmeLicenseSection, removeReadmeLicenseSection } from './core.mjs';
|
|
11
|
+
|
|
12
|
+
if (process.argv.includes('--version') || process.argv.includes('-v')) {
|
|
13
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf8'));
|
|
15
|
+
console.log(pkg.version);
|
|
16
|
+
process.exit(0);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const args = process.argv.slice(2);
|
|
20
|
+
const HELP_FLAGS = ['--help', '-h', 'help'];
|
|
21
|
+
const command = HELP_FLAGS.some(f => args.includes(f)) ? 'help' : (args.find(a => !a.startsWith('--')) || 'check');
|
|
22
|
+
const target = args.find((a, i) => i > 0 && !a.startsWith('--')) || '.';
|
|
23
|
+
const FIX = args.includes('--fix');
|
|
24
|
+
const DRY_RUN = args.includes('--dry-run');
|
|
25
|
+
const QUIET = args.includes('--quiet');
|
|
26
|
+
const FROM_STANDARD = args.includes('--from-standard');
|
|
27
|
+
|
|
28
|
+
function log(msg) { if (!QUIET) console.log(msg); }
|
|
29
|
+
function ok(msg) { if (!QUIET) console.log(` \u2713 ${msg}`); }
|
|
30
|
+
function warn(msg) { console.log(` \u2717 ${msg}`); }
|
|
31
|
+
|
|
32
|
+
function ask(question) {
|
|
33
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
34
|
+
return new Promise(resolve => {
|
|
35
|
+
rl.question(question, answer => {
|
|
36
|
+
rl.close();
|
|
37
|
+
resolve(answer.trim());
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// WIP Computer standard defaults
|
|
43
|
+
const WIP_STANDARD = {
|
|
44
|
+
copyright: 'WIP Computer, Inc.',
|
|
45
|
+
license: 'MIT+AGPL',
|
|
46
|
+
year: String(new Date().getFullYear()),
|
|
47
|
+
attribution: 'Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).',
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
async function init(repoPath) {
|
|
51
|
+
const configPath = join(repoPath, '.license-guard.json');
|
|
52
|
+
|
|
53
|
+
// --from-standard: apply WIP Computer defaults without prompting
|
|
54
|
+
if (FROM_STANDARD) {
|
|
55
|
+
log('\n wip-license-guard init --from-standard\n');
|
|
56
|
+
|
|
57
|
+
const config = { ...WIP_STANDARD, created: new Date().toISOString() };
|
|
58
|
+
|
|
59
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
60
|
+
ok(`Config saved to .license-guard.json`);
|
|
61
|
+
|
|
62
|
+
const licensePath = join(repoPath, 'LICENSE');
|
|
63
|
+
writeFileSync(licensePath, generateLicense(config, repoPath));
|
|
64
|
+
ok(`LICENSE file generated (dual MIT+AGPLv3)`);
|
|
65
|
+
|
|
66
|
+
const claPath = join(repoPath, 'CLA.md');
|
|
67
|
+
if (!existsSync(claPath)) {
|
|
68
|
+
writeFileSync(claPath, generateCLA(repoPath));
|
|
69
|
+
ok(`CLA.md generated`);
|
|
70
|
+
} else {
|
|
71
|
+
ok(`CLA.md already exists`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
log(`\n Standard: ${config.copyright}, ${config.license}, ${config.year}`);
|
|
75
|
+
log(` Done. Run \`wip-license-guard check\` to audit.\n`);
|
|
76
|
+
return config;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (existsSync(configPath)) {
|
|
80
|
+
const existing = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
81
|
+
log(`\nLicense guard already configured:`);
|
|
82
|
+
log(` Copyright: ${existing.copyright}`);
|
|
83
|
+
log(` License: ${existing.license}`);
|
|
84
|
+
log(` Year: ${existing.year}`);
|
|
85
|
+
const update = await ask('\nUpdate? (y/N) ');
|
|
86
|
+
if (update.toLowerCase() !== 'y') {
|
|
87
|
+
log('Keeping existing config.');
|
|
88
|
+
return existing;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
log('\n wip-license-guard init\n');
|
|
93
|
+
|
|
94
|
+
const copyright = await ask(' Copyright holder (e.g. WIP Computer, Inc.): ');
|
|
95
|
+
if (!copyright) {
|
|
96
|
+
console.error('Copyright holder is required.');
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
log('\n License types:');
|
|
101
|
+
log(' 1. MIT only');
|
|
102
|
+
log(' 2. AGPLv3 only');
|
|
103
|
+
log(' 3. MIT + AGPLv3 dual-license (recommended for WIP repos)');
|
|
104
|
+
const licenseChoice = await ask('\n Choose (1/2/3): ');
|
|
105
|
+
|
|
106
|
+
const licenseMap = { '1': 'MIT', '2': 'AGPL-3.0', '3': 'MIT+AGPL' };
|
|
107
|
+
const license = licenseMap[licenseChoice] || 'MIT+AGPL';
|
|
108
|
+
|
|
109
|
+
const currentYear = new Date().getFullYear();
|
|
110
|
+
const yearInput = await ask(` Copyright year (${currentYear}): `);
|
|
111
|
+
const year = yearInput || String(currentYear);
|
|
112
|
+
|
|
113
|
+
const attribution = await ask(' Attribution (e.g. Built by Parker Todd Brooks, ...): ');
|
|
114
|
+
|
|
115
|
+
const config = { copyright, license, year, attribution, created: new Date().toISOString() };
|
|
116
|
+
|
|
117
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
118
|
+
ok(`Config saved to .license-guard.json`);
|
|
119
|
+
|
|
120
|
+
const licensePath = join(repoPath, 'LICENSE');
|
|
121
|
+
const licenseText = generateLicense(config, repoPath);
|
|
122
|
+
writeFileSync(licensePath, licenseText);
|
|
123
|
+
ok(`LICENSE file generated`);
|
|
124
|
+
|
|
125
|
+
// Generate CLA.md if it doesn't exist
|
|
126
|
+
const claPath = join(repoPath, 'CLA.md');
|
|
127
|
+
if (!existsSync(claPath)) {
|
|
128
|
+
writeFileSync(claPath, generateCLA(repoPath));
|
|
129
|
+
ok(`CLA.md generated`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
log(`\nDone. Run \`wip-license-guard check\` to audit.`);
|
|
133
|
+
return config;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
async function check(repoPath) {
|
|
137
|
+
const configPath = join(repoPath, '.license-guard.json');
|
|
138
|
+
|
|
139
|
+
if (!existsSync(configPath)) {
|
|
140
|
+
log('\n No .license-guard.json found.');
|
|
141
|
+
const doInit = await ask(' Initialize license guard? (Y/n) ');
|
|
142
|
+
if (doInit.toLowerCase() !== 'n') {
|
|
143
|
+
await init(repoPath);
|
|
144
|
+
return 0;
|
|
145
|
+
}
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const config = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
150
|
+
let issues = 0;
|
|
151
|
+
|
|
152
|
+
log(`\n wip-license-guard check\n`);
|
|
153
|
+
log(` Copyright: ${config.copyright}`);
|
|
154
|
+
log(` License: ${config.license}\n`);
|
|
155
|
+
|
|
156
|
+
// Check LICENSE file
|
|
157
|
+
const licensePath = join(repoPath, 'LICENSE');
|
|
158
|
+
if (!existsSync(licensePath)) {
|
|
159
|
+
warn('LICENSE file missing');
|
|
160
|
+
issues++;
|
|
161
|
+
if (FIX) {
|
|
162
|
+
writeFileSync(licensePath, generateLicense(config, repoPath));
|
|
163
|
+
ok('LICENSE file created (--fix)');
|
|
164
|
+
issues--;
|
|
165
|
+
}
|
|
166
|
+
} else {
|
|
167
|
+
const licenseText = readFileSync(licensePath, 'utf8');
|
|
168
|
+
|
|
169
|
+
if (!licenseText.includes(config.copyright)) {
|
|
170
|
+
warn(`LICENSE copyright does not match "${config.copyright}"`);
|
|
171
|
+
issues++;
|
|
172
|
+
if (FIX) {
|
|
173
|
+
writeFileSync(licensePath, generateLicense(config, repoPath));
|
|
174
|
+
ok('LICENSE file updated (--fix)');
|
|
175
|
+
issues--;
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
ok('LICENSE copyright correct');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (config.license === 'MIT+AGPL') {
|
|
182
|
+
if (!licenseText.includes('AGPL') && !licenseText.includes('GNU Affero')) {
|
|
183
|
+
warn('LICENSE file is MIT-only but config says MIT+AGPL');
|
|
184
|
+
issues++;
|
|
185
|
+
if (FIX) {
|
|
186
|
+
writeFileSync(licensePath, generateLicense(config, repoPath));
|
|
187
|
+
ok('LICENSE file updated to dual-license (--fix)');
|
|
188
|
+
issues--;
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
ok('LICENSE includes AGPLv3 terms');
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Check CLA.md
|
|
197
|
+
const claPath = join(repoPath, 'CLA.md');
|
|
198
|
+
if (!existsSync(claPath)) {
|
|
199
|
+
warn('CLA.md missing');
|
|
200
|
+
issues++;
|
|
201
|
+
if (FIX) {
|
|
202
|
+
writeFileSync(claPath, generateCLA(repoPath));
|
|
203
|
+
ok('CLA.md created (--fix)');
|
|
204
|
+
issues--;
|
|
205
|
+
}
|
|
206
|
+
} else {
|
|
207
|
+
ok('CLA.md exists');
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Check README (license + structure standard)
|
|
211
|
+
const readmePath = join(repoPath, 'README.md');
|
|
212
|
+
if (existsSync(readmePath)) {
|
|
213
|
+
const readme = readFileSync(readmePath, 'utf8');
|
|
214
|
+
|
|
215
|
+
// License checks
|
|
216
|
+
if (!readme.includes('## License')) {
|
|
217
|
+
warn('README.md missing ## License section');
|
|
218
|
+
issues++;
|
|
219
|
+
} else {
|
|
220
|
+
ok('README.md has License section');
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (config.license === 'MIT+AGPL' && !readme.includes('AGPL')) {
|
|
224
|
+
warn('README.md License section missing AGPL reference');
|
|
225
|
+
issues++;
|
|
226
|
+
} else if (config.license === 'MIT+AGPL') {
|
|
227
|
+
ok('README.md references AGPL');
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// README structure standard checks
|
|
231
|
+
if (!readme.match(/^#\s+\S/m)) {
|
|
232
|
+
warn('README.md missing # title');
|
|
233
|
+
issues++;
|
|
234
|
+
} else {
|
|
235
|
+
ok('README.md has title');
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (config.attribution && !readme.includes(config.attribution.split(',')[0])) {
|
|
239
|
+
warn('README.md missing attribution');
|
|
240
|
+
issues++;
|
|
241
|
+
} else if (config.attribution) {
|
|
242
|
+
ok('README.md has attribution');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Warn if README contains content that belongs in TECHNICAL.md
|
|
246
|
+
const technicalPatterns = [
|
|
247
|
+
/## (Architecture|API|Config|Configuration|Build|Development Setup|Quick Start)/i,
|
|
248
|
+
/```json\s*\n\s*\{[\s\S]*?"command"/, // MCP config blocks
|
|
249
|
+
/npm install -g /, // install commands belong in TECHNICAL.md
|
|
250
|
+
];
|
|
251
|
+
for (const pattern of technicalPatterns) {
|
|
252
|
+
if (pattern.test(readme)) {
|
|
253
|
+
warn('README.md contains technical content (move to TECHNICAL.md)');
|
|
254
|
+
issues++;
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
} else {
|
|
259
|
+
warn('README.md not found');
|
|
260
|
+
issues++;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Check sub-tools (toolbox mode)
|
|
264
|
+
const toolsDir = join(repoPath, 'tools');
|
|
265
|
+
if (existsSync(toolsDir)) {
|
|
266
|
+
try {
|
|
267
|
+
const entries = readdirSync(toolsDir, { withFileTypes: true });
|
|
268
|
+
for (const entry of entries) {
|
|
269
|
+
if (!entry.isDirectory()) continue;
|
|
270
|
+
const toolPath = join(toolsDir, entry.name);
|
|
271
|
+
const toolLicense = join(toolPath, 'LICENSE');
|
|
272
|
+
|
|
273
|
+
if (!existsSync(toolLicense)) {
|
|
274
|
+
warn(`tools/${entry.name}/LICENSE missing`);
|
|
275
|
+
issues++;
|
|
276
|
+
if (FIX) {
|
|
277
|
+
writeFileSync(toolLicense, generateLicense(config, repoPath));
|
|
278
|
+
ok(`tools/${entry.name}/LICENSE created (--fix)`);
|
|
279
|
+
issues--;
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
const text = readFileSync(toolLicense, 'utf8');
|
|
283
|
+
if (!text.includes(config.copyright)) {
|
|
284
|
+
warn(`tools/${entry.name}/LICENSE wrong copyright`);
|
|
285
|
+
issues++;
|
|
286
|
+
if (FIX) {
|
|
287
|
+
writeFileSync(toolLicense, generateLicense(config, repoPath));
|
|
288
|
+
ok(`tools/${entry.name}/LICENSE updated (--fix)`);
|
|
289
|
+
issues--;
|
|
290
|
+
}
|
|
291
|
+
} else {
|
|
292
|
+
ok(`tools/${entry.name}/LICENSE correct`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
} catch {}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
log('');
|
|
300
|
+
if (issues === 0) {
|
|
301
|
+
log(' All checks passed.\n');
|
|
302
|
+
} else {
|
|
303
|
+
log(` ${issues} issue(s) found. Run with --fix to auto-repair.\n`);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return issues;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
async function readmeLicense(targetPath) {
|
|
310
|
+
const mode = FIX ? '--fix' : DRY_RUN ? '--dry-run' : '';
|
|
311
|
+
log(`\n wip-license-guard readme-license${mode ? ' ' + mode : ''}\n`);
|
|
312
|
+
|
|
313
|
+
// Detect if targetPath is a single repo or a directory of repos
|
|
314
|
+
const repos = [];
|
|
315
|
+
const configPath = join(targetPath, '.license-guard.json');
|
|
316
|
+
if (existsSync(configPath)) {
|
|
317
|
+
// Single repo
|
|
318
|
+
repos.push(targetPath);
|
|
319
|
+
} else {
|
|
320
|
+
// Directory of repos (or nested categories like ldm-os/components/)
|
|
321
|
+
const scanDir = (dir) => {
|
|
322
|
+
try {
|
|
323
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
324
|
+
if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === '_trash') continue;
|
|
325
|
+
const sub = join(dir, entry.name);
|
|
326
|
+
if (existsSync(join(sub, '.license-guard.json'))) {
|
|
327
|
+
repos.push(sub);
|
|
328
|
+
} else if (existsSync(join(sub, 'package.json')) || existsSync(join(sub, 'README.md'))) {
|
|
329
|
+
repos.push(sub);
|
|
330
|
+
} else {
|
|
331
|
+
scanDir(sub); // recurse into category folders
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
} catch {}
|
|
335
|
+
};
|
|
336
|
+
scanDir(targetPath);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (repos.length === 0) {
|
|
340
|
+
warn('No repos found. Point at a repo or a directory containing repos.');
|
|
341
|
+
return 1;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
log(` Found ${repos.length} repo(s)\n`);
|
|
345
|
+
|
|
346
|
+
let totalIssues = 0;
|
|
347
|
+
|
|
348
|
+
for (const repoPath of repos) {
|
|
349
|
+
const repoName = repoPath.split('/').pop();
|
|
350
|
+
const repoConfig = join(repoPath, '.license-guard.json');
|
|
351
|
+
const config = existsSync(repoConfig)
|
|
352
|
+
? JSON.parse(readFileSync(repoConfig, 'utf8'))
|
|
353
|
+
: WIP_STANDARD;
|
|
354
|
+
|
|
355
|
+
// 1. Check main README
|
|
356
|
+
const readmePath = join(repoPath, 'README.md');
|
|
357
|
+
if (existsSync(readmePath)) {
|
|
358
|
+
const content = readFileSync(readmePath, 'utf8');
|
|
359
|
+
const expected = generateReadmeBlock(config);
|
|
360
|
+
|
|
361
|
+
if (content.includes('### Can I use this?') && content.includes('Dual-license model')) {
|
|
362
|
+
ok(`${repoName}/README.md ... standard license block`);
|
|
363
|
+
} else if (content.includes('## License')) {
|
|
364
|
+
warn(`${repoName}/README.md ... non-standard license section`);
|
|
365
|
+
totalIssues++;
|
|
366
|
+
if (DRY_RUN) {
|
|
367
|
+
// Extract current license section for preview
|
|
368
|
+
const match = content.match(/## License[\s\S]*?(?=\n## [^#]|$)/);
|
|
369
|
+
if (match) {
|
|
370
|
+
log(` current: ${match[0].split('\n').slice(0, 3).join(' | ').substring(0, 80)}...`);
|
|
371
|
+
}
|
|
372
|
+
log(` would replace with: standard dual MIT/AGPLv3 block`);
|
|
373
|
+
}
|
|
374
|
+
if (FIX) {
|
|
375
|
+
const updated = replaceReadmeLicenseSection(content, config, repoPath);
|
|
376
|
+
writeFileSync(readmePath, updated);
|
|
377
|
+
ok(`${repoName}/README.md ... updated to standard (--fix)`);
|
|
378
|
+
totalIssues--;
|
|
379
|
+
}
|
|
380
|
+
} else {
|
|
381
|
+
warn(`${repoName}/README.md ... missing ## License`);
|
|
382
|
+
totalIssues++;
|
|
383
|
+
if (DRY_RUN) {
|
|
384
|
+
log(` would add: standard dual MIT/AGPLv3 block at end of README`);
|
|
385
|
+
}
|
|
386
|
+
if (FIX) {
|
|
387
|
+
const updated = replaceReadmeLicenseSection(content, config, repoPath);
|
|
388
|
+
writeFileSync(readmePath, updated);
|
|
389
|
+
ok(`${repoName}/README.md ... added standard block (--fix)`);
|
|
390
|
+
totalIssues--;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
} else {
|
|
394
|
+
warn(`${repoName}/README.md ... not found`);
|
|
395
|
+
totalIssues++;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// 2. Check sub-tool READMEs (should NOT have license sections)
|
|
399
|
+
const toolsDir = join(repoPath, 'tools');
|
|
400
|
+
if (existsSync(toolsDir)) {
|
|
401
|
+
try {
|
|
402
|
+
for (const tool of readdirSync(toolsDir, { withFileTypes: true })) {
|
|
403
|
+
if (!tool.isDirectory()) continue;
|
|
404
|
+
const subReadme = join(toolsDir, tool.name, 'README.md');
|
|
405
|
+
if (!existsSync(subReadme)) continue;
|
|
406
|
+
|
|
407
|
+
const subContent = readFileSync(subReadme, 'utf8');
|
|
408
|
+
if (subContent.includes('## License')) {
|
|
409
|
+
warn(`${repoName}/tools/${tool.name}/README.md ... has license section (should be removed)`);
|
|
410
|
+
totalIssues++;
|
|
411
|
+
if (DRY_RUN) {
|
|
412
|
+
log(` would remove: ## License section from sub-tool README`);
|
|
413
|
+
}
|
|
414
|
+
if (FIX) {
|
|
415
|
+
const cleaned = removeReadmeLicenseSection(subContent);
|
|
416
|
+
writeFileSync(subReadme, cleaned);
|
|
417
|
+
ok(`${repoName}/tools/${tool.name}/README.md ... license section removed (--fix)`);
|
|
418
|
+
totalIssues--;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
} catch {}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
log('');
|
|
427
|
+
if (totalIssues === 0) {
|
|
428
|
+
log(' All README license sections are correct.\n');
|
|
429
|
+
} else if (DRY_RUN) {
|
|
430
|
+
log(` ${totalIssues} issue(s) found. Dry run complete. No changes made.`);
|
|
431
|
+
log(` Run with --fix to apply changes.\n`);
|
|
432
|
+
} else {
|
|
433
|
+
log(` ${totalIssues} issue(s) found. Run with --dry-run to preview or --fix to apply.\n`);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
return totalIssues;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// Main
|
|
440
|
+
if (command === 'init') {
|
|
441
|
+
await init(target === 'init' ? '.' : target);
|
|
442
|
+
} else if (command === 'check') {
|
|
443
|
+
const repoPath = (target === 'check') ? '.' : target;
|
|
444
|
+
const issues = await check(repoPath);
|
|
445
|
+
process.exit(issues > 0 ? 1 : 0);
|
|
446
|
+
} else if (command === 'readme-license') {
|
|
447
|
+
const repoPath = (target === 'readme-license') ? '.' : target;
|
|
448
|
+
const issues = await readmeLicense(repoPath);
|
|
449
|
+
process.exit(issues > 0 ? 1 : 0);
|
|
450
|
+
} else if (command === '--help' || command === '-h' || command === 'help') {
|
|
451
|
+
console.log(`
|
|
452
|
+
wip-license-guard
|
|
453
|
+
|
|
454
|
+
Commands:
|
|
455
|
+
init [path] Interactive setup. Asks license type, copyright, year.
|
|
456
|
+
init --from-standard Apply WIP Computer defaults (MIT+AGPL, CLA, attribution).
|
|
457
|
+
check [path] Audit repo against saved config. Exit 1 if issues found.
|
|
458
|
+
check --fix [path] Auto-fix issues (update LICENSE files, wrong copyright).
|
|
459
|
+
readme-license [path] Scan README license sections. Works on one repo or a directory of repos.
|
|
460
|
+
readme-license --dry-run Preview what would change. Shows current vs standard for each README.
|
|
461
|
+
readme-license --fix Apply standard license block to all READMEs. Remove from sub-tools.
|
|
462
|
+
help Show this help.
|
|
463
|
+
|
|
464
|
+
On first run, if no config exists, check will offer to run init.
|
|
465
|
+
Use --from-standard for new WIP Computer repos (no prompts, just works).
|
|
466
|
+
|
|
467
|
+
Config file: .license-guard.json (commit this to your repo)
|
|
468
|
+
`);
|
|
469
|
+
} else {
|
|
470
|
+
console.error(`Unknown command: ${command}. Run wip-license-guard help.`);
|
|
471
|
+
process.exit(1);
|
|
472
|
+
}
|