@lifeaitools/rdc-skills 0.25.3 → 0.25.5
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/.claude-plugin/plugin.json +47 -1
- package/CHANGELOG.md +13 -0
- package/README.md +5 -2
- package/RELEASE.md +26 -2
- package/git-sha.json +1 -1
- package/package.json +1 -1
- package/skills/convert/SKILL.md +11 -22
- package/skills/new-model/SKILL.md +14 -3
- package/tests/curl-surface.test.mjs +4 -2
- package/tests/help-surface.test.mjs +1 -1
- package/tests/install-rdc-skills.test.mjs +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rdc",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.5",
|
|
4
4
|
"description": "RDC typed-agent dispatch skill suite for Claude Code — plan, build, review, overnight unattended builds with work-item tracking and TDD enforcement.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "LIFEAI",
|
|
@@ -1432,6 +1432,52 @@
|
|
|
1432
1432
|
"enabled_default": true,
|
|
1433
1433
|
"codeflow_required": false
|
|
1434
1434
|
},
|
|
1435
|
+
"new-model": {
|
|
1436
|
+
"name": "new-model",
|
|
1437
|
+
"slash": "rdc:new-model",
|
|
1438
|
+
"category": "tooling",
|
|
1439
|
+
"usage": "rdc:new-model <slug-or-model-brief>",
|
|
1440
|
+
"args": {
|
|
1441
|
+
"positional": [
|
|
1442
|
+
{
|
|
1443
|
+
"name": "slug-or-model-brief",
|
|
1444
|
+
"required": true,
|
|
1445
|
+
"description": "Reference model slug or natural-language model request to check/register",
|
|
1446
|
+
"accepts": "string"
|
|
1447
|
+
}
|
|
1448
|
+
],
|
|
1449
|
+
"flags": []
|
|
1450
|
+
},
|
|
1451
|
+
"requires": [
|
|
1452
|
+
"supabase",
|
|
1453
|
+
"git"
|
|
1454
|
+
],
|
|
1455
|
+
"produces": [
|
|
1456
|
+
"work_items",
|
|
1457
|
+
"supabase_writes",
|
|
1458
|
+
"git_commits"
|
|
1459
|
+
],
|
|
1460
|
+
"default_model": "opus",
|
|
1461
|
+
"triggers": [
|
|
1462
|
+
"rdc:new-model",
|
|
1463
|
+
"rdc new model",
|
|
1464
|
+
"create model",
|
|
1465
|
+
"new reference model",
|
|
1466
|
+
"add a model",
|
|
1467
|
+
"register model",
|
|
1468
|
+
"new model for",
|
|
1469
|
+
"model registration check"
|
|
1470
|
+
],
|
|
1471
|
+
"follows": [],
|
|
1472
|
+
"leads_to": [
|
|
1473
|
+
"plan",
|
|
1474
|
+
"build"
|
|
1475
|
+
],
|
|
1476
|
+
"sandbox_aware": false,
|
|
1477
|
+
"output_contract": "guides/output-contract.md",
|
|
1478
|
+
"enabled_default": true,
|
|
1479
|
+
"codeflow_required": true
|
|
1480
|
+
},
|
|
1435
1481
|
"workitems": {
|
|
1436
1482
|
"name": "workitems",
|
|
1437
1483
|
"slash": "rdc:workitems",
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v0.25.5 — MCP catalog release hygiene
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- Synced `.claude-plugin/plugin.json` to the package release version so strict
|
|
14
|
+
self-test passes before publishing the MCP catalog.
|
|
15
|
+
- Added the missing output-contract banner to `new-model`.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Updated `rdc:convert` cloud/CLI guidance to prefer npm `regen.mde` for
|
|
19
|
+
build-corpus instead of stale GitHub-install instructions.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
10
23
|
## v0.25.0 — rdc:onramp Phase-1 enrollment skill
|
|
11
24
|
|
|
12
25
|
### Added
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ From any Claude Code session:
|
|
|
13
13
|
/plugin install rdc-skills
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
The full catalog is available through the MCP as
|
|
16
|
+
The full catalog is available through the MCP as 34 skills. Nineteen common
|
|
17
17
|
workflows also ship as `/rdc:*` command shorthands. Agent playbooks in
|
|
18
18
|
`guides/agents/` are dispatched internally by `rdc:build` and are not
|
|
19
19
|
user-invocable.
|
|
@@ -181,7 +181,7 @@ Throughout the skills, the following substitutions have been made to make them p
|
|
|
181
181
|
|
|
182
182
|
## Skills Overview
|
|
183
183
|
|
|
184
|
-
|
|
184
|
+
34 MCP skills organized into 8 manifest categories. Nineteen of these also have
|
|
185
185
|
`/rdc:*` command shorthands for Claude Code/plugin callers.
|
|
186
186
|
|
|
187
187
|
Use `rdc_skill_list` for the authoritative live catalog, including names,
|
|
@@ -312,6 +312,7 @@ skills/
|
|
|
312
312
|
deploy/SKILL.md (Coolify ops: deploy, new, diagnose, audit)
|
|
313
313
|
design/SKILL.md (RDC/Studio design, Palette Library, Rampa CLI)
|
|
314
314
|
edit/SKILL.md (local website editor launcher)
|
|
315
|
+
env/SKILL.md (environment status, install, repair, update)
|
|
315
316
|
fixit/SKILL.md (quick-fix bypass)
|
|
316
317
|
fs-mcp/SKILL.md (File System MCP bridge guidance)
|
|
317
318
|
regen-media/SKILL.md (primary image generation + Regen Media upload)
|
|
@@ -319,6 +320,8 @@ skills/
|
|
|
319
320
|
help/SKILL.md (manifest-driven skill index)
|
|
320
321
|
housekeeping/SKILL.md (weekly maintenance audit)
|
|
321
322
|
lifeai-brochure-author/SKILL.md (brochure JSX authoring)
|
|
323
|
+
new-model/SKILL.md (reference model registration gate)
|
|
324
|
+
onramp/SKILL.md (Place Fund phase-1 enrollment)
|
|
322
325
|
overnight/SKILL.md (unattended multi-epic supervisor)
|
|
323
326
|
plan/SKILL.md (create architecture + tasks)
|
|
324
327
|
preplan/SKILL.md (research before planning)
|
package/RELEASE.md
CHANGED
|
@@ -26,7 +26,14 @@ npm publish
|
|
|
26
26
|
# 5. Install globally (serves both Claude Code CLI + MCP server)
|
|
27
27
|
npm install -g @lifeaitools/rdc-skills@latest
|
|
28
28
|
|
|
29
|
-
# 6.
|
|
29
|
+
# 6. Refresh the MCP server and verify the catalog
|
|
30
|
+
pm2 restart rdc-skills-mcp --update-env
|
|
31
|
+
curl -s http://127.0.0.1:3110/health
|
|
32
|
+
curl -s https://rdc-skills.regendevcorp.com/health
|
|
33
|
+
REMOTE=1 node tests/mcp.test.mjs
|
|
34
|
+
REMOTE=1 node tests/curl-surface.test.mjs
|
|
35
|
+
|
|
36
|
+
# 7. Verify installed package
|
|
30
37
|
npm list -g @lifeaitools/rdc-skills --depth=0
|
|
31
38
|
```
|
|
32
39
|
|
|
@@ -36,13 +43,30 @@ npm list -g @lifeaitools/rdc-skills --depth=0
|
|
|
36
43
|
rdc:release rdc-skills --patch
|
|
37
44
|
```
|
|
38
45
|
|
|
39
|
-
This runs
|
|
46
|
+
This runs the package release flow. Before calling a release complete, also verify
|
|
47
|
+
that the MCP catalog has refreshed locally and at the public endpoint.
|
|
40
48
|
|
|
41
49
|
## Environment targets
|
|
42
50
|
- **Local dev:** `npm install -g` + PM2 `rdc-skills-mcp` process
|
|
43
51
|
- **Remote MCP:** PM2 on Vultr `64.237.54.189` (auto-deploys via webhook on push to master)
|
|
44
52
|
- **Production:** N/A (npm global install is the distribution mechanism)
|
|
45
53
|
|
|
54
|
+
## MCP release gate
|
|
55
|
+
|
|
56
|
+
Every release that changes skills, manifests, commands, guides, MCP server code,
|
|
57
|
+
or installer behavior must prove the running MCP serves the released package:
|
|
58
|
+
|
|
59
|
+
1. `npm view @lifeaitools/rdc-skills version` equals `package.json`.
|
|
60
|
+
2. Global install is updated with `npm install -g @lifeaitools/rdc-skills@latest`.
|
|
61
|
+
3. PM2 `rdc-skills-mcp` is restarted locally after the global install.
|
|
62
|
+
4. Local `/health` reports the released version and expected skill count.
|
|
63
|
+
5. Public `/health` at `https://rdc-skills.regendevcorp.com/health` reports the released version and expected skill count.
|
|
64
|
+
6. `REMOTE=1 node tests/mcp.test.mjs` and `REMOTE=1 node tests/curl-surface.test.mjs` pass against the public endpoint.
|
|
65
|
+
|
|
66
|
+
The installer also performs this update path in `scripts/install-rdc-skills.js`:
|
|
67
|
+
it registers the MCP endpoint, syncs the global MCP package when PM2 is serving
|
|
68
|
+
from npm, restarts `rdc-skills-mcp`, and verifies the live catalog freshness.
|
|
69
|
+
|
|
46
70
|
## Version policy
|
|
47
71
|
- patch: new skill, skill fix, manifest update
|
|
48
72
|
- minor: new capability, breaking skill interface change
|
package/git-sha.json
CHANGED
package/package.json
CHANGED
package/skills/convert/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rdc:convert
|
|
3
|
-
description: "Usage `rdc:convert <input> [--out <dir>] [--to markdown|word] [--images assets|base64|s3]` — Convert .docx/.pptx/.ppt → Markdown (Word OMML equations as KaTeX TeX, tables, images) or Markdown → Word via the build-corpus CLI
|
|
3
|
+
description: "Usage `rdc:convert <input> [--out <dir>] [--to markdown|word] [--images assets|base64|s3]` — Convert .docx/.pptx/.ppt → Markdown (Word OMML equations as KaTeX TeX, tables, images) or Markdown → Word via the build-corpus CLI from npm `regen.mde`. Portable: runs in any session that can reach npm — Claude Code CLI, Codex, and claude.ai can fetch + run it. Use whenever the user asks to convert an Office document, build a Markdown corpus from .docx/.pptx, turn Markdown into a .docx, or open the report in the regen-mde editor on Windows."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# rdc:convert — Office ↔ Markdown conversion (build-corpus) + regen-mde editor
|
|
@@ -11,7 +11,7 @@ description: "Usage `rdc:convert <input> [--out <dir>] [--to markdown|word] [--i
|
|
|
11
11
|
|
|
12
12
|
`build-corpus` is the conversion CLI; `regen-mde` is the Windows GUI editor. Same
|
|
13
13
|
package, two surfaces. This skill is a **when-to-use + full call/switch reference** —
|
|
14
|
-
it does NOT require a local checkout. Any runtime that can reach npm
|
|
14
|
+
it does NOT require a local checkout. Any runtime that can reach npm can
|
|
15
15
|
fetch and run the tool in its own session (this is how claude.ai uses it).
|
|
16
16
|
|
|
17
17
|
## Working model — stay in Markdown ("MD time"), materialize at the end
|
|
@@ -58,25 +58,16 @@ build-corpus repo (`C:/Dev/build-corpus/AGENTS.md` locally).
|
|
|
58
58
|
The command is always `build-corpus <input> [flags]`. Resolve the binary like this:
|
|
59
59
|
|
|
60
60
|
1. **Already on PATH?** Use it directly: `build-corpus --help`.
|
|
61
|
-
2. **
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
pip install "git+https://github.com/LIFEAI/build-corpus.git"
|
|
66
|
-
# (the feat/dual-package-ubuntu branch is kept in sync with main as an alias)
|
|
67
|
-
```
|
|
68
|
-
This installs the `build-corpus` CLI and its deps (latex2mathml, python-docx,
|
|
69
|
-
Pillow, omml2latex). The MathML→OMML step is an OWNED converter — there is NO
|
|
70
|
-
`mathml2omml` dependency. On Debian/Ubuntu externally-managed Python, add
|
|
71
|
-
`--break-system-packages`, use a venv, or `pipx install "git+https://github.com/LIFEAI/build-corpus.git"`.
|
|
72
|
-
3. **npm (only if you do NOT need the latest fixes — lags GitHub; `build-corpus` is
|
|
73
|
-
NOT on PyPI):** `npx -y -p regen.mde build-corpus <input> [flags]`
|
|
61
|
+
2. **One-off npm run, preferred for claude.ai/sandboxes:** `npx -y -p regen.mde build-corpus <input> [flags]`
|
|
62
|
+
3. **Install npm package when repeated use is expected:** `npm install -g regen.mde`
|
|
63
|
+
then run `build-corpus <input> [flags]`.
|
|
74
64
|
4. **Legacy `.ppt` input** additionally needs LibreOffice (`soffice`) on PATH
|
|
75
65
|
(`sudo apt install libreoffice`). `.docx`/`.pptx` need nothing extra.
|
|
76
|
-
5. **S3/R2 image upload**
|
|
66
|
+
5. **S3/R2 image upload** uses the S3/R2 flags or a `--config` file.
|
|
77
67
|
|
|
78
|
-
claude.ai note:
|
|
79
|
-
|
|
68
|
+
claude.ai note: use the npm one-off command in the analysis/session sandbox. Do not
|
|
69
|
+
ask Claude to install build-corpus from Git unless Dave explicitly requests source
|
|
70
|
+
testing.
|
|
80
71
|
|
|
81
72
|
## Command Reference
|
|
82
73
|
|
|
@@ -150,7 +141,6 @@ build-corpus report.md --inline-images # → report.inli
|
|
|
150
141
|
build-corpus input.docx --images s3 --config build-corpus.config.json
|
|
151
142
|
|
|
152
143
|
# portable one-offs when build-corpus is not yet installed:
|
|
153
|
-
pipx run --spec "git+https://github.com/LIFEAI/build-corpus.git" build-corpus input.docx --out out
|
|
154
144
|
npx -y -p regen.mde build-corpus input.docx --out out
|
|
155
145
|
```
|
|
156
146
|
|
|
@@ -161,7 +151,6 @@ npx -y -p regen.mde build-corpus input.docx --out out
|
|
|
161
151
|
- The `regen-mde` GUI is Windows-only; do not attempt to launch it on Linux/macOS.
|
|
162
152
|
|
|
163
153
|
## Reference
|
|
164
|
-
- Package: npm `regen.mde` (CLI bin `build-corpus`, editor bin `regen-mde`).
|
|
165
|
-
|
|
166
|
-
(no `mathml2omml` dependency).
|
|
154
|
+
- Package: npm `regen.mde` (CLI bin `build-corpus`, editor bin `regen-mde`).
|
|
155
|
+
MathML→OMML is an owned converter (no `mathml2omml` dependency).
|
|
167
156
|
- Source: `github.com/LIFEAI/build-corpus` (`C:/Dev/build-corpus` locally).
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: new-model
|
|
3
|
+
triggers:
|
|
4
|
+
- rdc:new-model
|
|
5
|
+
- rdc new model
|
|
6
|
+
- create model
|
|
7
|
+
- new reference model
|
|
8
|
+
- add a model
|
|
9
|
+
- register model
|
|
10
|
+
- new model for
|
|
11
|
+
- model registration check
|
|
3
12
|
description: >
|
|
4
13
|
Register a new Reference Model completely — the yes/no gate that prevents half-registered models.
|
|
5
14
|
A reference model is DEFINED as registered in all four homes: (1) RPMS project_nodes row
|
|
6
15
|
(node_type=reference_model), (2) apps/vlas route group /models/<slug>, (3) apps/vlas
|
|
7
16
|
src/data/models/<slug> definitions, (4) global-corpus Drive directory. If ANY of the four is
|
|
8
17
|
missing, the model does not exist yet — run this skill.
|
|
9
|
-
|
|
10
|
-
'register model', 'new model for', 'model for conservation easements', 'is this model registered',
|
|
11
|
-
'model registration check'.
|
|
18
|
+
Trigger when asked to create, register, or check whether a reference model exists.
|
|
12
19
|
---
|
|
13
20
|
|
|
21
|
+
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
22
|
+
> Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
|
|
23
|
+
> One checklist upfront, updated in place, shown again at end with a 1-line verdict.
|
|
24
|
+
|
|
14
25
|
# rdc:new-model — Reference Model Registration (complete or not at all)
|
|
15
26
|
|
|
16
27
|
## When to run
|
|
@@ -12,6 +12,7 @@ import { spawn, spawnSync } from 'node:child_process';
|
|
|
12
12
|
import fs from 'node:fs';
|
|
13
13
|
import path from 'node:path';
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { listSkills } from '../lib/catalog.mjs';
|
|
15
16
|
|
|
16
17
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
18
|
const REPO_ROOT = path.resolve(__dirname, '..');
|
|
@@ -20,6 +21,7 @@ const TEST_PORT = parseInt(process.env.TEST_PORT || '3199', 10);
|
|
|
20
21
|
const LOCAL = `http://127.0.0.1:${TEST_PORT}`;
|
|
21
22
|
const REMOTE = 'https://rdc-skills.regendevcorp.com';
|
|
22
23
|
const TARGET = process.env.REMOTE || process.argv.includes('--remote') ? REMOTE : LOCAL;
|
|
24
|
+
const EXPECTED_SKILL_COUNT = listSkills().length;
|
|
23
25
|
const REPORT_DIR = path.join(REPO_ROOT, '.rdc', 'reports');
|
|
24
26
|
const REPORT_FILE = path.join(
|
|
25
27
|
REPORT_DIR,
|
|
@@ -142,7 +144,7 @@ async function main() {
|
|
|
142
144
|
try {
|
|
143
145
|
const health = await waitHealth();
|
|
144
146
|
check('health reports ok', health.status === 'ok');
|
|
145
|
-
check('health reports
|
|
147
|
+
check('health reports catalog skill count', health.skills === EXPECTED_SKILL_COUNT, `skills ${health.skills}`);
|
|
146
148
|
|
|
147
149
|
const init = postMcp({
|
|
148
150
|
jsonrpc: '2.0',
|
|
@@ -168,7 +170,7 @@ async function main() {
|
|
|
168
170
|
check('rdc_skill_list curl exits 0', list.status === 0, list.stderr);
|
|
169
171
|
check('rdc_skill_list returns SSE data line', /^data:/m.test(list.stdout));
|
|
170
172
|
const listed = JSON.parse(resultText(latestEnvelope(list.stdout)));
|
|
171
|
-
check('rdc_skill_list exposes
|
|
173
|
+
check('rdc_skill_list exposes catalog skill count', listed.count === EXPECTED_SKILL_COUNT, `count ${listed.count}`);
|
|
172
174
|
check('rdc_skill_list includes visible slash name', listed.skills.some((s) => s.slash === 'rdc:build'));
|
|
173
175
|
const buildRow = listed.skills.find((s) => s.name === 'build');
|
|
174
176
|
check('rdc_skill_list exposes aliases for slash callers', buildRow?.aliases?.includes('/rdc:build'));
|
|
@@ -35,7 +35,7 @@ for (const [name, text] of Object.entries(docs)) {
|
|
|
35
35
|
assert.doesNotMatch(text, /https:\/\/rdc-skills\.dev\.regendevcorp\.com\/mcp/, `${name} must not point callers at dev MCP`);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
assert.match(docs.readme, /
|
|
38
|
+
assert.match(docs.readme, /34 MCP skills organized into 8 manifest categories/, 'README should use manifest category count');
|
|
39
39
|
assert.match(docs.readme, /Nineteen[\s\S]*\/rdc:\*` command shorthands/i, 'README should distinguish slash-command shorthands from full MCP skills');
|
|
40
40
|
assert.match(docs.readme, /Use `rdc_skill_list` for the authoritative live catalog/, 'README should point callers to live MCP catalog');
|
|
41
41
|
assert.doesNotMatch(docs.readme, /All user-invocable skills become available as slash commands/, 'README must not imply all MCP skills are slash commands');
|
|
@@ -24,7 +24,7 @@ const plugin = JSON.parse(readFileSync(join(REPO_ROOT, '.claude-plugin', 'plugin
|
|
|
24
24
|
const skillCount = Array.isArray(plugin.skills_meta)
|
|
25
25
|
? plugin.skills_meta.length
|
|
26
26
|
: Object.keys(plugin.skills_meta || {}).length;
|
|
27
|
-
assert.equal(skillCount,
|
|
27
|
+
assert.equal(skillCount, 34, 'test fixture should expose all 34 MCP skills from plugin skills_meta');
|
|
28
28
|
assert.match(
|
|
29
29
|
source,
|
|
30
30
|
/Available MCP skills.*\/rdc:\* command shorthands/,
|