@lifeaitools/rdc-skills 0.25.4 → 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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rdc",
3
- "version": "0.25.0",
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 31 skills. Nineteen common
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
- 31 MCP skills organized into 8 manifest categories. Nineteen of these also have
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. Verify
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 steps 1–6 automatically.
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
@@ -1,3 +1,3 @@
1
1
  {
2
- "sha": "8cf6a60d35ad77a755b3309e9a99bbe4328e2e7c"
2
+ "sha": "2b3eea42ba468dc330b7212be01b7739220234b6"
3
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifeaitools/rdc-skills",
3
- "version": "0.25.4",
3
+ "version": "0.25.5",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -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 (npm `regen.mde`, or pip from GitHub). Portable: runs in any session that can reach npm or PyPI — Claude Code CLI and claude.ai both 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 (Windows)."
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 or PyPI can
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. **Install straight from GitHub REQUIRED for current behavior** (native LaTeX→OMML
62
- equations, the fidelity report, and the escaped-currency fix; the PyPI/npm packages
63
- below currently LAG GitHub):
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** needs the extra: append `[s3]` to the package spec.
66
+ 5. **S3/R2 image upload** uses the S3/R2 flags or a `--config` file.
77
67
 
78
- claude.ai note: install from GitHub (step 2) into the analysis/session sandbox and run
79
- `build-corpus` there. GitHub is the source of truth until PyPI/npm are republished.
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`). NOT on
165
- PyPI — install the Python CLI from GitHub (step 2). MathML→OMML is an owned converter
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
- TRIGGER: 'rdc:new-model', 'rdc new model', 'create model', 'new reference model', 'add a model',
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 30 skills', health.skills === 30, `skills ${health.skills}`);
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 30 skills', listed.count === 30, `count ${listed.count}`);
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, /30 MCP skills organized into 8 manifest categories/, 'README should use manifest category count');
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, 30, 'test fixture should expose all 30 MCP skills from plugin skills_meta');
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/,