@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.
- package/.license-guard.json +7 -0
- package/.publish-skill.json +4 -0
- package/CHANGELOG.md +1120 -0
- package/CLA.md +19 -0
- package/DEV-GUIDE-GENERAL-PUBLIC.md +882 -0
- package/LICENSE +52 -0
- package/README.md +238 -0
- package/SKILL.md +728 -0
- package/TECHNICAL.md +282 -0
- package/UNIVERSAL-INTERFACE.md +180 -0
- package/_trash/RELEASE-NOTES-v1-8-0.md +29 -0
- package/_trash/RELEASE-NOTES-v1-8-1.md +7 -0
- package/_trash/RELEASE-NOTES-v1-8-2.md +7 -0
- package/_trash/RELEASE-NOTES-v1-9-0.md +37 -0
- package/_trash/RELEASE-NOTES-v1-9-1.md +38 -0
- package/_trash/RELEASE-NOTES-v1-9-10.md +40 -0
- package/_trash/RELEASE-NOTES-v1-9-2.md +40 -0
- package/_trash/RELEASE-NOTES-v1-9-6.md +72 -0
- package/_trash/RELEASE-NOTES-v1-9-7.md +23 -0
- package/_trash/RELEASE-NOTES-v1-9-9.md +75 -0
- package/_trash/guide 2/DEV-GUIDE.md +487 -0
- package/_trash/guide 2/scripts/deploy-public.sh +152 -0
- package/package.json +27 -0
- package/scripts/SKILL-deploy-public.md +61 -0
- package/scripts/SKILL-post-merge-rename.md +47 -0
- package/scripts/deploy-public.sh +264 -0
- package/scripts/post-merge-rename.sh +205 -0
- package/scripts/publish-skill.sh +134 -0
- package/tools/deploy-public/LICENSE +52 -0
- package/tools/deploy-public/README.md +31 -0
- package/tools/deploy-public/SKILL.md +71 -0
- package/tools/deploy-public/deploy-public.sh +264 -0
- package/tools/deploy-public/package.json +9 -0
- package/tools/ldm-jobs/LICENSE +52 -0
- package/tools/ldm-jobs/README.md +46 -0
- package/tools/ldm-jobs/backup.sh +16 -0
- package/tools/ldm-jobs/branch-protect.sh +39 -0
- package/tools/ldm-jobs/crystal-capture.sh +19 -0
- package/tools/ldm-jobs/setup-shell.sh +27 -0
- package/tools/ldm-jobs/visibility-audit.sh +27 -0
- package/tools/post-merge-rename/LICENSE +52 -0
- package/tools/post-merge-rename/README.md +29 -0
- package/tools/post-merge-rename/SKILL.md +57 -0
- package/tools/post-merge-rename/package.json +9 -0
- package/tools/post-merge-rename/post-merge-rename.sh +122 -0
- package/tools/wip-branch-guard/INSTALL.md +41 -0
- package/tools/wip-branch-guard/guard.mjs +259 -0
- package/tools/wip-branch-guard/package.json +11 -0
- package/tools/wip-file-guard/CHANGELOG.md +6 -0
- package/tools/wip-file-guard/LICENSE +52 -0
- package/tools/wip-file-guard/README.md +113 -0
- package/tools/wip-file-guard/REFERENCE.md +86 -0
- package/tools/wip-file-guard/SKILL.md +105 -0
- package/tools/wip-file-guard/guard.mjs +128 -0
- package/tools/wip-file-guard/openclaw.plugin.json +8 -0
- package/tools/wip-file-guard/package.json +27 -0
- package/tools/wip-file-guard/test.sh +119 -0
- package/tools/wip-license-guard/LICENSE +52 -0
- package/tools/wip-license-guard/README.md +32 -0
- package/tools/wip-license-guard/SKILL.md +65 -0
- package/tools/wip-license-guard/cli.mjs +464 -0
- package/tools/wip-license-guard/core.mjs +310 -0
- package/tools/wip-license-guard/hook.mjs +146 -0
- package/tools/wip-license-guard/package.json +15 -0
- package/tools/wip-license-hook/CHANGELOG.md +17 -0
- package/tools/wip-license-hook/LICENSE +52 -0
- package/tools/wip-license-hook/README.md +200 -0
- package/tools/wip-license-hook/SKILL.md +111 -0
- package/tools/wip-license-hook/dist/cli/index.d.ts +15 -0
- package/tools/wip-license-hook/dist/cli/index.js +170 -0
- package/tools/wip-license-hook/dist/cli/index.js.map +1 -0
- package/tools/wip-license-hook/dist/core/detector.d.ts +12 -0
- package/tools/wip-license-hook/dist/core/detector.js +104 -0
- package/tools/wip-license-hook/dist/core/detector.js.map +1 -0
- package/tools/wip-license-hook/dist/core/index.d.ts +4 -0
- package/tools/wip-license-hook/dist/core/index.js +5 -0
- package/tools/wip-license-hook/dist/core/index.js.map +1 -0
- package/tools/wip-license-hook/dist/core/ledger.d.ts +49 -0
- package/tools/wip-license-hook/dist/core/ledger.js +72 -0
- package/tools/wip-license-hook/dist/core/ledger.js.map +1 -0
- package/tools/wip-license-hook/dist/core/reporter.d.ts +14 -0
- package/tools/wip-license-hook/dist/core/reporter.js +227 -0
- package/tools/wip-license-hook/dist/core/reporter.js.map +1 -0
- package/tools/wip-license-hook/dist/core/scanner.d.ts +39 -0
- package/tools/wip-license-hook/dist/core/scanner.js +325 -0
- package/tools/wip-license-hook/dist/core/scanner.js.map +1 -0
- package/tools/wip-license-hook/hooks/pre-pull.sh +55 -0
- package/tools/wip-license-hook/hooks/pre-push.sh +51 -0
- package/tools/wip-license-hook/mcp-server.mjs +119 -0
- package/tools/wip-license-hook/package-lock.json +54 -0
- package/tools/wip-license-hook/package.json +43 -0
- package/tools/wip-license-hook/src/cli/index.ts +189 -0
- package/tools/wip-license-hook/src/core/detector.ts +130 -0
- package/tools/wip-license-hook/src/core/index.ts +4 -0
- package/tools/wip-license-hook/src/core/ledger.ts +116 -0
- package/tools/wip-license-hook/src/core/reporter.ts +255 -0
- package/tools/wip-license-hook/src/core/scanner.ts +367 -0
- package/tools/wip-license-hook/tsconfig.json +16 -0
- package/tools/wip-readme-format/README.md +49 -0
- package/tools/wip-readme-format/SKILL.md +84 -0
- package/tools/wip-readme-format/format.mjs +570 -0
- package/tools/wip-readme-format/package.json +15 -0
- package/tools/wip-release/CHANGELOG.md +42 -0
- package/tools/wip-release/LICENSE +52 -0
- package/tools/wip-release/README.md +45 -0
- package/tools/wip-release/REFERENCE.md +100 -0
- package/tools/wip-release/SKILL.md +139 -0
- package/tools/wip-release/cli.js +161 -0
- package/tools/wip-release/core.mjs +1174 -0
- package/tools/wip-release/mcp-server.mjs +109 -0
- package/tools/wip-release/package.json +36 -0
- package/tools/wip-repo-init/README.md +38 -0
- package/tools/wip-repo-init/SKILL.md +77 -0
- package/tools/wip-repo-init/init.mjs +142 -0
- package/tools/wip-repo-init/package.json +11 -0
- package/tools/wip-repo-permissions-hook/LICENSE +52 -0
- package/tools/wip-repo-permissions-hook/README.md +86 -0
- package/tools/wip-repo-permissions-hook/SKILL.md +73 -0
- package/tools/wip-repo-permissions-hook/cli.js +83 -0
- package/tools/wip-repo-permissions-hook/core.mjs +122 -0
- package/tools/wip-repo-permissions-hook/guard.mjs +64 -0
- package/tools/wip-repo-permissions-hook/mcp-server.mjs +92 -0
- package/tools/wip-repo-permissions-hook/openclaw.plugin.json +8 -0
- package/tools/wip-repo-permissions-hook/package.json +31 -0
- package/tools/wip-repos/LICENSE +52 -0
- package/tools/wip-repos/README.md +77 -0
- package/tools/wip-repos/SKILL.md +80 -0
- package/tools/wip-repos/cli.mjs +176 -0
- package/tools/wip-repos/core.mjs +290 -0
- package/tools/wip-repos/mcp-server.mjs +157 -0
- package/tools/wip-repos/package.json +34 -0
- package/tools/wip-universal-installer/CHANGELOG.md +57 -0
- package/tools/wip-universal-installer/LICENSE +52 -0
- package/tools/wip-universal-installer/README.md +81 -0
- package/tools/wip-universal-installer/REFERENCE.md +122 -0
- package/tools/wip-universal-installer/SKILL.md +87 -0
- package/tools/wip-universal-installer/SPEC.md +180 -0
- package/tools/wip-universal-installer/detect.mjs +130 -0
- package/tools/wip-universal-installer/examples/minimal/README.md +20 -0
- package/tools/wip-universal-installer/examples/minimal/SKILL.md +28 -0
- package/tools/wip-universal-installer/examples/minimal/cli.mjs +4 -0
- package/tools/wip-universal-installer/examples/minimal/core.mjs +8 -0
- package/tools/wip-universal-installer/examples/minimal/mcp-server.mjs +27 -0
- package/tools/wip-universal-installer/examples/minimal/package.json +12 -0
- package/tools/wip-universal-installer/install.js +930 -0
- 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).
|