@wipcomputer/wip-ai-devops-toolbox 1.9.20

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 (146) hide show
  1. package/.license-guard.json +7 -0
  2. package/.publish-skill.json +4 -0
  3. package/CHANGELOG.md +1120 -0
  4. package/CLA.md +19 -0
  5. package/DEV-GUIDE-GENERAL-PUBLIC.md +882 -0
  6. package/LICENSE +52 -0
  7. package/README.md +238 -0
  8. package/SKILL.md +728 -0
  9. package/TECHNICAL.md +282 -0
  10. package/UNIVERSAL-INTERFACE.md +180 -0
  11. package/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
  12. package/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
  13. package/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
  14. package/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
  15. package/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
  16. package/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
  17. package/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
  18. package/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
  19. package/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
  20. package/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
  21. package/_trash/guide 2/DEV-GUIDE.md +487 -0
  22. package/_trash/guide 2/scripts/deploy-public.sh +152 -0
  23. package/package.json +27 -0
  24. package/scripts/SKILL-deploy-public.md +61 -0
  25. package/scripts/SKILL-post-merge-rename.md +47 -0
  26. package/scripts/deploy-public.sh +264 -0
  27. package/scripts/post-merge-rename.sh +205 -0
  28. package/scripts/publish-skill.sh +134 -0
  29. package/tools/deploy-public/LICENSE +52 -0
  30. package/tools/deploy-public/README.md +31 -0
  31. package/tools/deploy-public/SKILL.md +71 -0
  32. package/tools/deploy-public/deploy-public.sh +264 -0
  33. package/tools/deploy-public/package.json +9 -0
  34. package/tools/ldm-jobs/LICENSE +52 -0
  35. package/tools/ldm-jobs/README.md +46 -0
  36. package/tools/ldm-jobs/backup.sh +16 -0
  37. package/tools/ldm-jobs/branch-protect.sh +39 -0
  38. package/tools/ldm-jobs/crystal-capture.sh +19 -0
  39. package/tools/ldm-jobs/setup-shell.sh +27 -0
  40. package/tools/ldm-jobs/visibility-audit.sh +27 -0
  41. package/tools/post-merge-rename/LICENSE +52 -0
  42. package/tools/post-merge-rename/README.md +29 -0
  43. package/tools/post-merge-rename/SKILL.md +57 -0
  44. package/tools/post-merge-rename/package.json +9 -0
  45. package/tools/post-merge-rename/post-merge-rename.sh +122 -0
  46. package/tools/wip-branch-guard/INSTALL.md +41 -0
  47. package/tools/wip-branch-guard/guard.mjs +259 -0
  48. package/tools/wip-branch-guard/package.json +11 -0
  49. package/tools/wip-file-guard/CHANGELOG.md +6 -0
  50. package/tools/wip-file-guard/LICENSE +52 -0
  51. package/tools/wip-file-guard/README.md +113 -0
  52. package/tools/wip-file-guard/REFERENCE.md +86 -0
  53. package/tools/wip-file-guard/SKILL.md +105 -0
  54. package/tools/wip-file-guard/guard.mjs +128 -0
  55. package/tools/wip-file-guard/openclaw.plugin.json +8 -0
  56. package/tools/wip-file-guard/package.json +27 -0
  57. package/tools/wip-file-guard/test.sh +119 -0
  58. package/tools/wip-license-guard/LICENSE +52 -0
  59. package/tools/wip-license-guard/README.md +32 -0
  60. package/tools/wip-license-guard/SKILL.md +65 -0
  61. package/tools/wip-license-guard/cli.mjs +464 -0
  62. package/tools/wip-license-guard/core.mjs +310 -0
  63. package/tools/wip-license-guard/hook.mjs +146 -0
  64. package/tools/wip-license-guard/package.json +15 -0
  65. package/tools/wip-license-hook/CHANGELOG.md +17 -0
  66. package/tools/wip-license-hook/LICENSE +52 -0
  67. package/tools/wip-license-hook/README.md +200 -0
  68. package/tools/wip-license-hook/SKILL.md +111 -0
  69. package/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
  70. package/tools/wip-license-hook/dist/cli/index.js +170 -0
  71. package/tools/wip-license-hook/dist/cli/index.js.map +1 -0
  72. package/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
  73. package/tools/wip-license-hook/dist/core/detector.js +104 -0
  74. package/tools/wip-license-hook/dist/core/detector.js.map +1 -0
  75. package/tools/wip-license-hook/dist/core/index.d.ts +4 -0
  76. package/tools/wip-license-hook/dist/core/index.js +5 -0
  77. package/tools/wip-license-hook/dist/core/index.js.map +1 -0
  78. package/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
  79. package/tools/wip-license-hook/dist/core/ledger.js +72 -0
  80. package/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
  81. package/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
  82. package/tools/wip-license-hook/dist/core/reporter.js +227 -0
  83. package/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
  84. package/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
  85. package/tools/wip-license-hook/dist/core/scanner.js +325 -0
  86. package/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
  87. package/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
  88. package/tools/wip-license-hook/hooks/pre-push.sh +51 -0
  89. package/tools/wip-license-hook/mcp-server.mjs +119 -0
  90. package/tools/wip-license-hook/package-lock.json +54 -0
  91. package/tools/wip-license-hook/package.json +43 -0
  92. package/tools/wip-license-hook/src/cli/index.ts +189 -0
  93. package/tools/wip-license-hook/src/core/detector.ts +130 -0
  94. package/tools/wip-license-hook/src/core/index.ts +4 -0
  95. package/tools/wip-license-hook/src/core/ledger.ts +116 -0
  96. package/tools/wip-license-hook/src/core/reporter.ts +255 -0
  97. package/tools/wip-license-hook/src/core/scanner.ts +367 -0
  98. package/tools/wip-license-hook/tsconfig.json +16 -0
  99. package/tools/wip-readme-format/README.md +49 -0
  100. package/tools/wip-readme-format/SKILL.md +84 -0
  101. package/tools/wip-readme-format/format.mjs +570 -0
  102. package/tools/wip-readme-format/package.json +15 -0
  103. package/tools/wip-release/CHANGELOG.md +42 -0
  104. package/tools/wip-release/LICENSE +52 -0
  105. package/tools/wip-release/README.md +45 -0
  106. package/tools/wip-release/REFERENCE.md +100 -0
  107. package/tools/wip-release/SKILL.md +139 -0
  108. package/tools/wip-release/cli.js +161 -0
  109. package/tools/wip-release/core.mjs +1174 -0
  110. package/tools/wip-release/mcp-server.mjs +109 -0
  111. package/tools/wip-release/package.json +36 -0
  112. package/tools/wip-repo-init/README.md +38 -0
  113. package/tools/wip-repo-init/SKILL.md +77 -0
  114. package/tools/wip-repo-init/init.mjs +142 -0
  115. package/tools/wip-repo-init/package.json +11 -0
  116. package/tools/wip-repo-permissions-hook/LICENSE +52 -0
  117. package/tools/wip-repo-permissions-hook/README.md +86 -0
  118. package/tools/wip-repo-permissions-hook/SKILL.md +73 -0
  119. package/tools/wip-repo-permissions-hook/cli.js +83 -0
  120. package/tools/wip-repo-permissions-hook/core.mjs +122 -0
  121. package/tools/wip-repo-permissions-hook/guard.mjs +64 -0
  122. package/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
  123. package/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
  124. package/tools/wip-repo-permissions-hook/package.json +31 -0
  125. package/tools/wip-repos/LICENSE +52 -0
  126. package/tools/wip-repos/README.md +77 -0
  127. package/tools/wip-repos/SKILL.md +80 -0
  128. package/tools/wip-repos/cli.mjs +176 -0
  129. package/tools/wip-repos/core.mjs +290 -0
  130. package/tools/wip-repos/mcp-server.mjs +157 -0
  131. package/tools/wip-repos/package.json +34 -0
  132. package/tools/wip-universal-installer/CHANGELOG.md +57 -0
  133. package/tools/wip-universal-installer/LICENSE +52 -0
  134. package/tools/wip-universal-installer/README.md +81 -0
  135. package/tools/wip-universal-installer/REFERENCE.md +122 -0
  136. package/tools/wip-universal-installer/SKILL.md +87 -0
  137. package/tools/wip-universal-installer/SPEC.md +180 -0
  138. package/tools/wip-universal-installer/detect.mjs +130 -0
  139. package/tools/wip-universal-installer/examples/minimal/README.md +20 -0
  140. package/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
  141. package/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
  142. package/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
  143. package/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
  144. package/tools/wip-universal-installer/examples/minimal/package.json +12 -0
  145. package/tools/wip-universal-installer/install.js +930 -0
  146. package/tools/wip-universal-installer/package.json +36 -0
package/TECHNICAL.md ADDED
@@ -0,0 +1,282 @@
1
+ ###### WIP Computer
2
+
3
+ # AI DevOps Toolbox
4
+
5
+ ## Want your AI to dev? Here's the full system.
6
+
7
+ Your AI writes code. But does it know how to release it? Check license compliance? Sync private repos to public ones? Follow a real development process?
8
+
9
+ **AI DevOps Toolbox** is a collection of battle-tested tools for AI-assisted software development. Built by a team of humans and AIs shipping real software together.
10
+
11
+ Used internally to manage 100+ repos, 200+ releases, and daily license compliance across the [wipcomputer](https://github.com/wipcomputer) org. These tools run in production every day.
12
+
13
+ **Real-world example:** [wip-universal-installer](tools/wip-universal-installer/) ships its releases entirely through wip-release. 6 releases, v2.1.5, changelog and GitHub releases all generated automatically.
14
+
15
+ ## Quick Start
16
+
17
+ ```bash
18
+ # Install LDM OS (shared infrastructure for all your AI tools)
19
+ npm install -g @wipcomputer/wip-ldm-os
20
+ ldm init
21
+
22
+ # Preview what will be installed (12 tools, 39+ interfaces)
23
+ ldm install wipcomputer/wip-ai-devops-toolbox --dry-run
24
+
25
+ # Install everything
26
+ ldm install wipcomputer/wip-ai-devops-toolbox
27
+
28
+ # Verify
29
+ ldm doctor
30
+ ```
31
+
32
+ ## Tools
33
+
34
+ ### wip-universal-installer
35
+
36
+ The Universal Interface specification for agent-native software. Defines how every tool ships six interfaces: CLI, importable module, MCP Server, OpenClaw Plugin, Skill, Claude Code Hook. Includes a reference installer and a minimal example template.
37
+
38
+ ```bash
39
+ # Detect what interfaces a repo supports
40
+ wip-install /path/to/repo --dry-run
41
+
42
+ # Install a tool from GitHub
43
+ wip-install wipcomputer/wip-file-guard
44
+ ```
45
+
46
+ **Source:** Pure JavaScript, no build step. [`tools/wip-universal-installer/detect.mjs`](tools/wip-universal-installer/detect.mjs) (detection), [`tools/wip-universal-installer/install.js`](tools/wip-universal-installer/install.js) (installer). Zero dependencies.
47
+
48
+ [README](tools/wip-universal-installer/README.md) ... [SKILL.md](tools/wip-universal-installer/SKILL.md) ... [SPEC.md](tools/wip-universal-installer/SPEC.md) ... [Reference](tools/wip-universal-installer/REFERENCE.md)
49
+
50
+ Also available as `UNIVERSAL-INTERFACE.md` at the repo root.
51
+
52
+ ### Dev Guide
53
+
54
+ Best practices for AI-assisted development teams. Covers release process, repo structure, the `ai/` folder convention, branch protection, private/public repo patterns, post-merge branch renaming, repo directory structure, Cloudflare Workers deploy guards, and more.
55
+
56
+ [Read the Dev Guide](DEV-GUIDE-GENERAL-PUBLIC.md)
57
+
58
+ ### LDM Dev Tools.app
59
+
60
+ macOS automation wrapper. A native `.app` bundle that runs scheduled jobs (backup, branch protection audit, etc.) with Full Disk Access. One app to grant permissions to, one place to add new automation.
61
+
62
+ **Source:** Job scripts are plain shell, committed at [`tools/ldm-jobs/`](tools/ldm-jobs/):
63
+
64
+ | Script | What it does |
65
+ |--------|-------------|
66
+ | [`backup.sh`](tools/ldm-jobs/backup.sh) | Daily backup |
67
+ | [`branch-protect.sh`](tools/ldm-jobs/branch-protect.sh) | Audit and enforce branch protection across all org repos |
68
+ | [`visibility-audit.sh`](tools/ldm-jobs/visibility-audit.sh) | Audit public repos for missing -private counterparts |
69
+
70
+ Scripts can be run standalone without the `.app`. The app provides a Full Disk Access wrapper for scripts that need it.
71
+
72
+ ```bash
73
+ # Run standalone
74
+ bash tools/ldm-jobs/backup.sh
75
+ bash tools/ldm-jobs/branch-protect.sh
76
+ bash tools/ldm-jobs/visibility-audit.sh
77
+
78
+ # Or via the app wrapper
79
+ open -W ~/Applications/LDMDevTools.app --args backup
80
+ open -W ~/Applications/LDMDevTools.app --args branch-protect
81
+ open -W ~/Applications/LDMDevTools.app --args visibility-audit
82
+ ```
83
+
84
+ [README](tools/ldm-jobs/README.md)
85
+
86
+ **Setup:** Drag `LDMDevTools.app` into System Settings > Privacy & Security > Full Disk Access. Then schedule via cron:
87
+
88
+ ```bash
89
+ # Daily backup at midnight, branch protection audit at 1 AM, visibility audit at 2 AM
90
+ 0 0 * * * open -W ~/Applications/LDMDevTools.app --args backup >> /tmp/ldm-dev-tools/cron.log 2>&1
91
+ 0 1 * * * open -W ~/Applications/LDMDevTools.app --args branch-protect >> /tmp/ldm-dev-tools/cron.log 2>&1
92
+ 0 2 * * * open -W ~/Applications/LDMDevTools.app --args visibility-audit >> /tmp/ldm-dev-tools/cron.log 2>&1
93
+ ```
94
+
95
+ Logs: `/tmp/ldm-dev-tools/`
96
+
97
+ ### wip-release
98
+
99
+ One-command release pipeline. Version bump, changelog, SKILL.md sync, npm publish, GitHub release. All in one shot. Release notes live on the branch so you review them in the PR before they go live.
100
+
101
+ ```bash
102
+ wip-release patch --notes="description of what was built and why"
103
+ wip-release minor # auto-detects RELEASE-NOTES-v{version}.md
104
+ wip-release major --dry-run
105
+ ```
106
+
107
+ **Release notes convention:** Write `RELEASE-NOTES-v{version}.md` (e.g. `RELEASE-NOTES-v1-6-0.md`) on your feature branch. It shows up in the PR diff for review. On release, wip-release auto-detects the file and uses it as the GitHub release body. One file, renamed each release. Warns when notes are missing, too short, or look like changelog entries instead of narrative.
108
+
109
+ **Source:** Pure JavaScript, no build step. [`tools/wip-release/cli.js`](tools/wip-release/cli.js) (entry point), [`tools/wip-release/core.mjs`](tools/wip-release/core.mjs) (main logic). Zero dependencies.
110
+
111
+ [README](tools/wip-release/README.md) ... [SKILL.md](tools/wip-release/SKILL.md) ... [Reference](tools/wip-release/REFERENCE.md)
112
+
113
+ ### wip-license-hook
114
+
115
+ License rug-pull detection. Scans every dependency and fork for license changes. Pre-pull hook blocks merges if a license changed upstream. Pre-push hook alerts. Daily cron scan. Generates a public compliance dashboard.
116
+
117
+ ```bash
118
+ wip-license-hook scan
119
+ wip-license-hook audit
120
+ ```
121
+
122
+ **Source:** TypeScript. All source in [`tools/wip-license-hook/src/`](tools/wip-license-hook/src/):
123
+
124
+ | File | What it does |
125
+ |------|-------------|
126
+ | `src/cli/index.ts` | CLI entry point |
127
+ | `src/core/scanner.ts` | Dependency scanning (npm, pip, cargo, go, forks) |
128
+ | `src/core/detector.ts` | License text fingerprinting |
129
+ | `src/core/ledger.ts` | Ledger persistence and snapshots |
130
+ | `src/core/reporter.ts` | Reporting and dashboard HTML generation |
131
+
132
+ [README](tools/wip-license-hook/README.md) ... [SKILL.md](tools/wip-license-hook/SKILL.md)
133
+
134
+ ### wip-repo-permissions-hook
135
+
136
+ Repo visibility guard. Blocks repos from going public without a `-private` counterpart. Works as a CLI, Claude Code hook, and OpenClaw plugin. Catches accidental exposure of internal plans, todos, and development context.
137
+
138
+ ```bash
139
+ # Check a single repo
140
+ wip-repo-permissions check wipcomputer/memory-crystal
141
+ # -> OK: memory-crystal-private exists
142
+
143
+ # Audit all public repos in org
144
+ wip-repo-permissions audit wipcomputer
145
+ # -> Lists violations, exit code 1 if any found
146
+ ```
147
+
148
+ **Source:** Pure JavaScript, no build step. [`tools/wip-repo-permissions-hook/core.mjs`](tools/wip-repo-permissions-hook/core.mjs) (logic), [`tools/wip-repo-permissions-hook/cli.js`](tools/wip-repo-permissions-hook/cli.js) (CLI), [`tools/wip-repo-permissions-hook/guard.mjs`](tools/wip-repo-permissions-hook/guard.mjs) (Claude Code hook). Zero dependencies.
149
+
150
+ [README](tools/wip-repo-permissions-hook/README.md) ... [SKILL.md](tools/wip-repo-permissions-hook/SKILL.md)
151
+
152
+ ### post-merge-rename.sh
153
+
154
+ Post-merge branch renaming. Scans for merged branches that haven't been renamed, appends `--merged-YYYY-MM-DD` to preserve history. Runs automatically as part of `wip-release`, or standalone.
155
+
156
+ **Source:** Plain shell. [`scripts/post-merge-rename.sh`](scripts/post-merge-rename.sh)
157
+
158
+ ```bash
159
+ bash scripts/post-merge-rename.sh # scan + rename all
160
+ bash scripts/post-merge-rename.sh --dry-run # preview only
161
+ bash scripts/post-merge-rename.sh <branch> # rename specific branch
162
+ ```
163
+
164
+ ### wip-file-guard
165
+
166
+ Hook that blocks destructive edits to protected identity files. Works with Claude Code CLI and OpenClaw. Protects CLAUDE.md, SHARED-CONTEXT.md, SOUL.md, IDENTITY.md, MEMORY.md, and pattern-matched memory/journal files.
167
+
168
+ Two rules: block `Write` on protected files entirely, block `Edit` when removing more than 2 lines or replacing more than 4 lines.
169
+
170
+ ```bash
171
+ # List protected files
172
+ wip-file-guard --list
173
+ ```
174
+
175
+ **Source:** Pure JavaScript, no build step. [`tools/wip-file-guard/guard.mjs`](tools/wip-file-guard/guard.mjs) (single file, all logic). Zero dependencies.
176
+
177
+ [README](tools/wip-file-guard/README.md) ... [SKILL.md](tools/wip-file-guard/SKILL.md) ... [Reference](tools/wip-file-guard/REFERENCE.md)
178
+
179
+ ### deploy-public.sh
180
+
181
+ Private-to-public repo sync. Copies everything except `ai/` from your working repo to the public mirror. Creates a PR, merges it. One script for all repos.
182
+
183
+ **Source:** Plain shell. [`scripts/deploy-public.sh`](scripts/deploy-public.sh)
184
+
185
+ ```bash
186
+ bash scripts/deploy-public.sh /path/to/private-repo wipcomputer/public-repo
187
+ ```
188
+
189
+ ### wip-repos
190
+
191
+ Repo manifest reconciler. Makes `repos-manifest.json` the single source of truth for repo organization. Like prettier for folder structure. Move folders around all day; on sync, everything snaps back to where the manifest says.
192
+
193
+ ```bash
194
+ # Check for drift
195
+ wip-repos check
196
+
197
+ # Sync filesystem to match manifest
198
+ wip-repos sync --dry-run
199
+
200
+ # Add a repo
201
+ wip-repos add ldm-os/utilities/my-tool --remote wipcomputer/my-tool
202
+
203
+ # Move a repo in the manifest
204
+ wip-repos move ldm-os/utilities/my-tool --to ldm-os/devops/my-tool
205
+
206
+ # Generate directory tree
207
+ wip-repos tree
208
+ ```
209
+
210
+ **Source:** Pure JavaScript, no build step. [`tools/wip-repos/core.mjs`](tools/wip-repos/core.mjs) (logic), [`tools/wip-repos/cli.mjs`](tools/wip-repos/cli.mjs) (CLI). Zero dependencies.
211
+
212
+ [README](tools/wip-repos/README.md)
213
+
214
+ ## Source Code
215
+
216
+ All implementation source is committed in this repo. No closed binaries, no mystery boxes.
217
+
218
+ | Tool | Language | Source location | Build step? |
219
+ |------|----------|----------------|-------------|
220
+ | Dev Guide | Markdown | `DEV-GUIDE-GENERAL-PUBLIC.md` | None. |
221
+ | LDM Dev Tools jobs | Shell | `tools/ldm-jobs/backup.sh`, `branch-protect.sh`, `visibility-audit.sh` | None. Runnable standalone or via `.app` wrapper. |
222
+ | wip-release | JavaScript (ESM) | `tools/wip-release/cli.js`, `core.mjs`, `mcp-server.mjs` | None. What you see is what runs. |
223
+ | wip-license-hook | TypeScript | `tools/wip-license-hook/src/**/*.ts`, `mcp-server.mjs` | `cd tools/wip-license-hook && npm install && npm run build` |
224
+ | wip-license-guard | JavaScript (ESM) | `tools/wip-license-guard/cli.mjs`, `core.mjs` | None. What you see is what runs. |
225
+ | wip-repo-permissions-hook | JavaScript (ESM) | `tools/wip-repo-permissions-hook/core.mjs`, `cli.js`, `guard.mjs`, `mcp-server.mjs` | None. What you see is what runs. |
226
+ | post-merge-rename.sh | Shell | `scripts/post-merge-rename.sh` | None. |
227
+ | wip-file-guard | JavaScript (ESM) | `tools/wip-file-guard/guard.mjs` | None. What you see is what runs. |
228
+ | wip-branch-guard | JavaScript (ESM) | `tools/wip-branch-guard/guard.mjs` | None. What you see is what runs. |
229
+ | wip-universal-installer | JavaScript (ESM) | `tools/wip-universal-installer/detect.mjs`, `install.js` | None. What you see is what runs. |
230
+ | deploy-public.sh | Shell | `scripts/deploy-public.sh` | None. |
231
+ | wip-repos | JavaScript (ESM) | `tools/wip-repos/core.mjs`, `cli.mjs`, `mcp-server.mjs` | None. What you see is what runs. |
232
+ | wip-repo-init | JavaScript (ESM) | `tools/wip-repo-init/init.mjs` | None. What you see is what runs. |
233
+ | wip-readme-format | JavaScript (ESM) | `tools/wip-readme-format/format.mjs` | None. What you see is what runs. |
234
+
235
+ Previously standalone tools (wip-release, wip-license-hook, wip-file-guard, wip-universal-installer) were merged here. The standalone repos redirect to this one.
236
+
237
+ ### Private/Public Repo Pattern
238
+
239
+ Development happens in private repos (with `ai/` folders for internal notes, plans, dev updates). When publishing, `deploy-public.sh` syncs everything except `ai/` to the public repo. Source files are always committed. Compiled output (`dist/`) is gitignored and only published to npm.
240
+
241
+ ## Development
242
+
243
+ ### wip-license-hook (TypeScript)
244
+
245
+ ```bash
246
+ cd tools/wip-license-hook
247
+ npm install
248
+ npm run build # compiles src/ -> dist/
249
+ node dist/cli/index.js scan # test locally
250
+ ```
251
+
252
+ ### wip-release (JavaScript)
253
+
254
+ No build step needed. Edit `cli.js` or `core.mjs` and test directly:
255
+
256
+ ```bash
257
+ cd tools/wip-release
258
+ node cli.js --dry-run patch --notes="test"
259
+ ```
260
+
261
+ ## Install
262
+
263
+ Tell your AI:
264
+
265
+ ```
266
+ Read the SKILL.md at github.com/wipcomputer/wip-ai-devops-toolbox/blob/main/SKILL.md.
267
+ Then explain what these tools do and help me set them up.
268
+ ```
269
+
270
+ Or install individually:
271
+
272
+ ```bash
273
+ npm install -g @wipcomputer/wip-release
274
+ npm install -g @wipcomputer/wip-license-hook
275
+ npm install -g @wipcomputer/wip-file-guard
276
+ npm install -g @wipcomputer/universal-installer
277
+ npm install -g @wipcomputer/wip-repos
278
+ ```
279
+
280
+ ## License
281
+
282
+ MIT. Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code CLI (Claude Opus 4.6).
@@ -0,0 +1,180 @@
1
+ # The Universal Interface Specification
2
+
3
+ Every tool is a sensor, an actuator, or both. Every tool should be accessible through multiple interfaces. We call this the Universal Interface.
4
+
5
+ This is the spec.
6
+
7
+ ## The Six Interfaces
8
+
9
+ ### 1. CLI
10
+
11
+ A shell command. The most universal interface. If it has a terminal, it works.
12
+
13
+ **Convention:** `package.json` with a `bin` field.
14
+
15
+ **Detection:** `pkg.bin` exists.
16
+
17
+ **Install:** `npm install -g .` or `npm link`.
18
+
19
+ ```json
20
+ {
21
+ "bin": {
22
+ "wip-grok": "./cli.mjs"
23
+ }
24
+ }
25
+ ```
26
+
27
+ ### 2. Module
28
+
29
+ An importable ES module. The programmatic interface. Other tools compose with it.
30
+
31
+ **Convention:** `package.json` with `main` or `exports` field. File is `core.mjs` by convention.
32
+
33
+ **Detection:** `pkg.main` or `pkg.exports` exists.
34
+
35
+ **Install:** `npm install <package>` or import directly from path.
36
+
37
+ ```json
38
+ {
39
+ "type": "module",
40
+ "main": "core.mjs",
41
+ "exports": {
42
+ ".": "./core.mjs",
43
+ "./cli": "./cli.mjs"
44
+ }
45
+ }
46
+ ```
47
+
48
+ ### 3. MCP Server
49
+
50
+ A JSON-RPC server implementing the Model Context Protocol. Any MCP-compatible agent can use it.
51
+
52
+ **Convention:** `mcp-server.mjs` (or `.js`, `.ts`) at the repo root. Uses `@modelcontextprotocol/sdk`.
53
+
54
+ **Detection:** One of `mcp-server.mjs`, `mcp-server.js`, `mcp-server.ts`, `dist/mcp-server.js` exists.
55
+
56
+ **Install:** Add to `.mcp.json`:
57
+
58
+ ```json
59
+ {
60
+ "tool-name": {
61
+ "command": "node",
62
+ "args": ["/path/to/mcp-server.mjs"]
63
+ }
64
+ }
65
+ ```
66
+
67
+ ### 4. OpenClaw Plugin
68
+
69
+ A plugin for OpenClaw agents. Lifecycle hooks, tool registration, settings.
70
+
71
+ **Convention:** `openclaw.plugin.json` at the repo root.
72
+
73
+ **Detection:** `openclaw.plugin.json` exists.
74
+
75
+ **Install:** Copy to `~/.openclaw/extensions/<name>/`, run `npm install --omit=dev`.
76
+
77
+ ### 5. Skill (SKILL.md)
78
+
79
+ A markdown file that teaches agents when and how to use the tool. The instruction interface.
80
+
81
+ **Convention:** `SKILL.md` at the repo root. YAML frontmatter with name, version, description, metadata.
82
+
83
+ **Detection:** `SKILL.md` exists.
84
+
85
+ **Install:** Referenced by path. Agents read it when they need the tool.
86
+
87
+ ```yaml
88
+ ---
89
+ name: wip-grok
90
+ version: 1.0.0
91
+ description: xAI Grok API. Search the web, search X, generate images.
92
+ metadata:
93
+ category: search,media
94
+ capabilities:
95
+ - web-search
96
+ - image-generation
97
+ ---
98
+ ```
99
+
100
+ ### 6. Claude Code Hook
101
+
102
+ A hook that runs during Claude Code's tool lifecycle (PreToolUse, Stop, etc.).
103
+
104
+ **Convention:** `guard.mjs` at repo root, or `claudeCode.hook` in `package.json`.
105
+
106
+ **Detection:** `guard.mjs` exists, or `pkg.claudeCode.hook` is defined.
107
+
108
+ **Install:** Added to `~/.claude/settings.json` under `hooks`.
109
+
110
+ ```json
111
+ {
112
+ "hooks": {
113
+ "PreToolUse": [{
114
+ "matcher": "Edit|Write",
115
+ "hooks": [{
116
+ "type": "command",
117
+ "command": "node /path/to/guard.mjs",
118
+ "timeout": 5
119
+ }]
120
+ }]
121
+ }
122
+ }
123
+ ```
124
+
125
+ ## Architecture
126
+
127
+ Every repo that follows this spec has the same basic structure:
128
+
129
+ ```
130
+ your-tool/
131
+ core.mjs pure logic, zero or minimal deps
132
+ cli.mjs thin CLI wrapper around core
133
+ mcp-server.mjs MCP server wrapping core functions as tools
134
+ SKILL.md agent instructions with YAML frontmatter
135
+ package.json name, bin, main, exports, type: module
136
+ README.md human documentation
137
+ ai/ development process (plans, todos, notes)
138
+ ```
139
+
140
+ Not every tool needs all six interfaces. Build the ones that make sense.
141
+
142
+ The minimum viable agent-native tool has two interfaces: **Module** (importable) and **Skill** (agent instructions). Add CLI for humans. Add MCP for agents that speak MCP. Add OpenClaw/CC Hook for specific platforms.
143
+
144
+ ## The `ai/` Folder
145
+
146
+ Every repo should have an `ai/` folder. This is where agents and humans collaborate on the project ... plans, todos, dev updates, research notes, conversations.
147
+
148
+ ```
149
+ ai/
150
+ plan/ architecture plans, roadmaps
151
+ dev-updates/ what was built, session logs
152
+ todos/
153
+ PUNCHLIST.md blockers to ship
154
+ inboxes/ per-agent action items
155
+ notes/ research, references, raw conversation logs
156
+ ```
157
+
158
+ The `ai/` folder is the development process. It is not part of the published product.
159
+
160
+ **Public/private split:** If a repo is public, the `ai/` folder should not ship. The recommended pattern is to maintain a private working repo (with `ai/`) and a public repo (everything except `ai/`). The public repo has everything an LLM or human needs to understand and use the tool. The `ai/` folder is operational context for the team building it.
161
+
162
+ ## The Reference Installer
163
+
164
+ `wip-install` is the reference implementation. It scans a repo, detects which interfaces exist, and installs them all. One command.
165
+
166
+ ```bash
167
+ wip-install /path/to/repo # local
168
+ wip-install org/repo # from GitHub
169
+ wip-install --dry-run /path/to/repo # detect only
170
+ wip-install --json /path/to/repo # JSON output
171
+ ```
172
+
173
+ ## Examples
174
+
175
+ | Repo | Interfaces | Type |
176
+ |------|------------|------|
177
+ | [wip-grok](https://github.com/wipcomputer/wip-grok) | CLI + Module + MCP + Skill | Sensor + Actuator |
178
+ | [wip-x](https://github.com/wipcomputer/wip-x) | CLI + Module + MCP + Skill | Sensor + Actuator |
179
+ | [wip-file-guard](https://github.com/wipcomputer/wip-file-guard) | CLI + OpenClaw + CC Hook | Actuator |
180
+ | [wip-markdown-viewer](https://github.com/wipcomputer/wip-markdown-viewer) | CLI + Module | Actuator |
@@ -0,0 +1,29 @@
1
+ # v1.8.0: Fix CC Hook duplicates, add GitHub Issues convention
2
+
3
+ ## CC Hook duplicate detection fix
4
+
5
+ `wip-install` was adding duplicate PreToolUse hooks to `~/.claude/settings.json` every time it ran. After a few installs, there were 8 hooks when there should have been 2. The duplicates pointed to repo clones and `/tmp/` paths, violating the "never run tools from repo clones" rule.
6
+
7
+ The root cause: duplicate detection compared exact command strings. The same `guard.mjs` installed from different paths produced different strings, so each install added another entry.
8
+
9
+ The fix:
10
+ - Match existing hooks by tool name in the path, not exact command string
11
+ - Always prefer `~/.ldm/extensions/<tool>/guard.mjs` over source or temp paths
12
+ - If a hook for the same tool exists at a different path, update it instead of adding a duplicate
13
+
14
+ ## GitHub Issues convention added to Dev Guide
15
+
16
+ We were tracking work in `ai/todos/` markdown files. Items got lost. GitHub Issues gives us tracking, cross-referencing, and visibility across agents.
17
+
18
+ Added to the public Dev Guide:
19
+ - When to use GitHub Issues vs `ai/todos/`
20
+ - Filing convention: `filed-by:<agent-id>` labels and attribution lines
21
+ - Public vs private issue routing: public issues are the front door, private issues are the workshop
22
+ - Agent ID naming convention: `[platform]-[agent]-[machine]`
23
+
24
+ Added to the private Dev Guide:
25
+ - `filed-by:cc-mini` (blue) and `filed-by:oc-lesa-mini` (purple) label details
26
+ - Org-wide deployment commands
27
+ - Incident note: Memory Crystal agent ID drift
28
+
29
+ Both labels deployed across all wipcomputer repos.
@@ -0,0 +1,7 @@
1
+ # v1.8.1: Fix CLI install when package name changed
2
+
3
+ When a tool's npm package gets renamed but the binary name stays the same, `npm install -g` fails with EEXIST. The stale symlink from the old package blocks the new one.
4
+
5
+ The installer now detects this: if the binary is a symlink pointing to a different package, it removes the stale link and retries. Only affects symlinks, only when the target doesn't match the package being installed.
6
+
7
+ Found on `wip-license-hook` (renamed from `@wipcomputer/license-hook` to `@wipcomputer/wip-license-hook`).
@@ -0,0 +1,7 @@
1
+ # v1.8.2: Clean up release notes after release
2
+
3
+ RELEASE-NOTES files were piling up in the repo root. `wip-release` consumed them for the GitHub release and CHANGELOG but never cleaned up.
4
+
5
+ Now after consuming the file, `wip-release` moves all `RELEASE-NOTES-v*.md` files to `_trash/` as part of the version bump commit. We never delete anything.
6
+
7
+ `deploy-public.sh` also now excludes `_trash/` so these files stay private.
@@ -0,0 +1,37 @@
1
+ # v1.9.0: README Formatter, Repo Init, Dev Guide overhaul
2
+
3
+ Two new tools, eight SKILL.md fixes, and a major Dev Guide update.
4
+
5
+ ## New: wip-readme-format
6
+
7
+ Auto-generates READMEs following the WIP Computer standard. Detects all six interfaces, reads SKILL.md for tool names, generates badges, "Teach Your AI" block, features, interface coverage table, license block. Works on single repos and toolbox repos.
8
+
9
+ The key design: generates separate section files instead of one monolithic README.
10
+
11
+ ```
12
+ wip-readme-format /path/to/repo # generates README-init-*.md section files
13
+ wip-readme-format /path/to/repo --deploy # assembles sections into README.md
14
+ ```
15
+
16
+ Section files: `README-init-badges.md`, `README-init-title.md`, `README-init-teach.md`, `README-init-features.md`, `README-init-coverage.md`, `README-init-more-info.md`, `README-init-license.md`, `README-init-technical.md`. Edit any section independently, then deploy assembles them in order. Same pattern as release notes: staging, review, deploy.
17
+
18
+ Also supports `--dry-run` (preview) and `--check` (validate existing README against the standard).
19
+
20
+ ## New: wip-repo-init
21
+
22
+ Scaffolds the standard `ai/` directory in any repo. Plans, notes, ideas, dev updates, todos. Every folder has self-documenting READMEs.
23
+
24
+ New repo: creates the full structure. Existing repo: moves old `ai/` contents to `ai/_sort/ai_old/` so you can sort at your own pace. Nothing is deleted.
25
+
26
+ ## Dev Guide: release notes workflow
27
+
28
+ Both Dev Guides (public and private) now explicitly document the `RELEASE-NOTES-v{version}.md` workflow. Write the release notes file on the branch, commit it with the code, review it in the PR, `wip-release` auto-detects it after merge. Both guides cross-reference each other at the top so agents know to read both.
29
+
30
+ ## Fixes
31
+
32
+ - Fixed SKILL.md `name:` frontmatter in all 8 existing tools. Interface coverage table now shows human-readable names ("Release Pipeline", "Identity File Protection") instead of directory names ("wip-release", "wip-file-guard").
33
+ - Fixed interface coverage table: renamed "OpenClaw" column to "OC Plugin", corrected License Guard row (was falsely claiming Module + CC Hook).
34
+ - Skill deployment: `wip-install` now deploys SKILL.md files to `~/.openclaw/skills/<tool>/` so OpenClaw agents can use them.
35
+ - Amalgamated interface system notes, README standard, and Universal Installer vision into one reference document.
36
+ - Dogfooded wip-repo-init on the toolbox itself. Filled in product bible, roadmap, and readme-first with real content.
37
+ - Created plan stubs for all roadmap items (README Formatter, Daily Dev Summary, GitHub Actions Pack, Security Suite).
@@ -0,0 +1,38 @@
1
+ # v1.9.1: Release gates ... product docs and release notes quality enforcement
2
+
3
+ Agents read the Dev Guide, say "got it," and then release with garbage one-liner notes anyway. Documentation doesn't change behavior. Tools do. This release adds two new gates to `wip-release` that block bad releases before they happen.
4
+
5
+ ## Product docs gate
6
+
7
+ Every PR is supposed to include updated product docs: a dev update, roadmap changes, and readme-first updates. This was documented in the Dev Guide as a manual checklist. Nobody followed it.
8
+
9
+ `wip-release` now checks three things before publishing:
10
+
11
+ 1. **Dev update exists.** Looks in `ai/dev-updates/` for a file from the last 3 days. If you did work worth releasing, you should have written about it.
12
+ 2. **Roadmap was updated.** Checks `ai/product/plans-prds/roadmap.md` via `git diff` against the last tag. If the roadmap doesn't reflect what just shipped, it's stale.
13
+ 3. **Readme-first was updated.** Same check on `ai/product/readme-first-product.md`. The product bible should always describe what's actually built.
14
+
15
+ Repos without an `ai/` directory are skipped silently. This only applies to repos that have adopted the `ai/` folder standard.
16
+
17
+ For **patch** releases: warns but doesn't block. Hotfixes shouldn't be held up by docs.
18
+ For **minor/major** releases: blocks the release. You can't ship a meaningful feature with stale product docs.
19
+
20
+ `--skip-product-check` overrides for exceptional cases.
21
+
22
+ ## Release notes quality gate
23
+
24
+ On 2026-03-11, the other CC session released memory-crystal v0.7.4. It read the Dev Guide (which now explicitly says "write a RELEASE-NOTES file on the branch"). It said it understood. Then it ran `wip-release patch --notes="MCP fix and agent ID config"` and published a one-liner to GitHub. The old `warnIfNotesAreThin()` function printed a warning to console. The agent ignored it.
25
+
26
+ The root cause was architectural, not behavioral. The warning ran at step 8 of the pipeline, AFTER the version was already bumped, committed, tagged, and pushed. By the time the warning appeared, the damage was done. And it was a warning, not a gate. Agents don't read warnings.
27
+
28
+ The fix:
29
+ - `checkReleaseNotes()` replaces `warnIfNotesAreThin()`. It runs before the version bump, not after.
30
+ - The CLI now tracks `notesSource`: where the notes came from (`file`, `dev-update`, `flag`, or `none`).
31
+ - For minor/major releases: if notes came from a bare `--notes` flag instead of a `RELEASE-NOTES-v{version}.md` file, the release is **blocked**. The agent gets explicit instructions: "Write RELEASE-NOTES-v{version}.md (dashes not dots), commit it, then release."
32
+ - For patch releases: warns if notes are short, but doesn't block.
33
+
34
+ ## Both gates follow the same pattern
35
+
36
+ The existing license compliance gate (step 0) checks `.license-guard.json` and blocks if licensing is wrong. The new product docs gate (step 0.5) and release notes gate (step 0.75) work the same way: check early, block before any changes, show status in `--dry-run`, give clear instructions on how to fix it.
37
+
38
+ The MCP server was also updated with `skipProductCheck` and `notesSource` passthrough so agents calling wip-release via MCP get the same enforcement.
@@ -0,0 +1,40 @@
1
+ # Release Notes: AI DevOps Toolbox v1.9.10
2
+
3
+ **Fix: Release notes files on disk always beat --notes flag**
4
+
5
+ v1.9.9 shipped with a one-liner on the GitHub release instead of the full narrative release notes. The RELEASE-NOTES-v1-9-9.md file was sitting right there on disk, but `--notes="short text"` took priority because the auto-detect only ran when `--notes` was absent.
6
+
7
+ This is exactly the kind of bug that happens when a rule exists in documentation but not in code. "Write release notes on the branch" is in the Dev Guide. The tool ignored them.
8
+
9
+ ## What changed
10
+
11
+ ### Notes priority is now enforced (highest wins):
12
+
13
+ 1. `--notes-file=path` ... explicit file path (always wins)
14
+ 2. `RELEASE-NOTES-v{ver}.md` ... in repo root (always wins over `--notes` flag)
15
+ 3. `ai/dev-updates/YYYY-MM-DD*` ... today's dev update (wins over `--notes` flag if longer)
16
+ 4. `--notes="text"` ... fallback only. Use for repos without release notes files.
17
+
18
+ If a RELEASE-NOTES file exists on disk, `--notes` is ignored and a warning is printed:
19
+
20
+ ```
21
+ ! --notes flag ignored: RELEASE-NOTES-v1-9-10.md takes priority
22
+ ```
23
+
24
+ Written notes on disk always take priority over a CLI one-liner. The agent wrote the file. The tool should use it.
25
+
26
+ ## Files changed
27
+
28
+ ```
29
+ tools/wip-release/cli.js | ~40 lines rewritten (notes cascade logic)
30
+ ```
31
+
32
+ ## Install
33
+
34
+ ```bash
35
+ git pull origin main
36
+ ```
37
+
38
+ ## Attribution
39
+
40
+ Built by Parker Todd Brooks, Lesa, and Claude Opus 4.6 at WIP.computer.
@@ -0,0 +1,40 @@
1
+ # v1.9.2: Distribution Pipeline Fix
2
+
3
+ The entire distribution pipeline was broken. Tools built but never reached users. 8 of 13 tools weren't on npm. ClawHub publish only shipped the root SKILL.md. deploy-public never ran npm publish. Errors were silent.
4
+
5
+ This release fixes all of it.
6
+
7
+ ## What changed
8
+
9
+ ### Install fixes (#96, #110)
10
+ - CLI binaries now have correct executable permissions (git +x on all bin entry files)
11
+ - wip-license-hook dist/ committed to repo (TypeScript build output was gitignored)
12
+ - Installer auto-detects TypeScript projects and runs build if dist/ missing
13
+ - chmod +x safety net after every npm install -g
14
+ - SSH fallback when HTTPS clone fails (private repos)
15
+
16
+ ### SKILL.md spec compliance (#107, #108)
17
+ - All 12 SKILL.md files conform to agentskills.io spec
18
+ - name field: lowercase-hyphen format matching directory name
19
+ - Display names in metadata.display-name
20
+ - version, homepage, author in metadata block
21
+ - license: MIT on all files
22
+ - metadata.openclaw blocks with install instructions and emoji
23
+ - New SKILL.md created for wip-license-guard (was missing)
24
+
25
+ ### Distribution pipeline (#97, #100, #104)
26
+ - ClawHub publish now iterates all sub-tool SKILL.md files, not just root
27
+ - detectSkillSlug reads the name field from SKILL.md frontmatter
28
+ - deploy-public.sh runs npm publish from the public clone after code sync
29
+ - Handles both single repos and toolbox repos (iterates tools/*)
30
+ - Distribution summary at end of release: shows all targets with pass/fail
31
+ - syncSkillVersion handles quoted version strings in new metadata format
32
+
33
+ ## Install
34
+
35
+ ```bash
36
+ npm install -g @wipcomputer/wip-ai-devops-toolbox
37
+ wip-install wipcomputer/wip-ai-devops-toolbox
38
+ ```
39
+
40
+ Built by Parker Todd Brooks, Lesa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).