@lifeaitools/rdc-skills 0.24.12 → 0.24.13

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.24.12",
3
+ "version": "0.24.13",
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",
package/README.md CHANGED
@@ -66,6 +66,61 @@ node scripts/install-rdc-skills.js --project-root /path/to/project --write-start
66
66
 
67
67
  This writes `.rdc/guides/rdc-skills-startup.md` and managed RDC sections in `CLAUDE.md` and `AGENTS.md`.
68
68
 
69
+ ### MCP endpoint and direct curl access
70
+
71
+ The shared MCP endpoint is:
72
+
73
+ ```text
74
+ https://rdc-skills.regendevcorp.com/mcp
75
+ ```
76
+
77
+ Health check:
78
+
79
+ ```bash
80
+ curl -s https://rdc-skills.regendevcorp.com/health
81
+ ```
82
+
83
+ Streamable HTTP MCP calls must use `POST` and include the SSE-compatible
84
+ `Accept` header:
85
+
86
+ ```bash
87
+ curl -s -X POST https://rdc-skills.regendevcorp.com/mcp \
88
+ -H 'Content-Type: application/json' \
89
+ -H 'Accept: application/json, text/event-stream' \
90
+ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
91
+ ```
92
+
93
+ List tools:
94
+
95
+ ```bash
96
+ curl -s -X POST https://rdc-skills.regendevcorp.com/mcp \
97
+ -H 'Content-Type: application/json' \
98
+ -H 'Accept: application/json, text/event-stream' \
99
+ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
100
+ ```
101
+
102
+ List skills:
103
+
104
+ ```bash
105
+ curl -s -X POST https://rdc-skills.regendevcorp.com/mcp \
106
+ -H 'Content-Type: application/json' \
107
+ -H 'Accept: application/json, text/event-stream' \
108
+ -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"rdc_skill_list","arguments":{}}}'
109
+ ```
110
+
111
+ Fetch a skill body for a specific caller surface:
112
+
113
+ ```bash
114
+ curl -s -X POST https://rdc-skills.regendevcorp.com/mcp \
115
+ -H 'Content-Type: application/json' \
116
+ -H 'Accept: application/json, text/event-stream' \
117
+ -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"rdc_skill_get","arguments":{"name":"build","variant":"cli"}}}'
118
+ ```
119
+
120
+ Use `variant:"cli"` for Claude Code/Codex/local terminal instructions. Use
121
+ `variant:"cloud"` for claude.ai web sessions where local daemon, shell, or
122
+ filesystem steps need cloud-safe wording.
123
+
69
124
  ### Legacy install scripts (deprecated since v0.6.0)
70
125
 
71
126
  `scripts/install.sh` and `scripts/install.ps1` copy files into `~/.claude/skills/user/`. These exist only for environments that cannot use the plugin system. Running them alongside the plugin creates duplicates. Do not use them if you have the plugin installed.
@@ -84,7 +139,7 @@ Throughout the skills, the following substitutions have been made to make them p
84
139
 
85
140
  ## Skills Overview
86
141
 
87
- 23 skills organized into 5 categories:
142
+ 29 skills organized into 6 categories:
88
143
 
89
144
  ### Orchestration Skills (workflow drivers)
90
145
  - rdc:build, rdc:plan, rdc:preplan, rdc:review, rdc:overnight, rdc:fixit, rdc:status, rdc:report
@@ -98,13 +153,25 @@ Located in `guides/agents/` — plain markdown playbooks spawned as sub-agents:
98
153
 
99
154
  ### Utility Skills
100
155
  - rdc:collab
156
+ - rdc:co-develop — peer-aware Claude/Codex co-development over clauth
157
+ - rdc:fs-mcp — File System MCP bridge guidance for live repo reads/writes
158
+ - rdc:terminal-config — Windows Terminal and hidden-launch policy audit
159
+ - rdc:watch — session-log viewer initialization for attended sessions
101
160
  - rdc:channel-formatter — channel-native formatting and content repurposing for LinkedIn, Twitter/X, Slack/Teams, email, decks, Word/PDF structure, web copy, and content packs
102
161
 
103
162
  ### Design Skills
104
163
  - rdc:design — RDC/Studio design, tokens, palettes, themes, and Rampa CLI-assisted color systems
105
164
 
165
+ ### Document and Brochure Skills
166
+ - rdc:convert — Office/Markdown conversion via build-corpus
167
+ - rdc:brochure — HTML/folder/zip/URL/Markdown to print-quality PDF
168
+ - rdc:brochurify — six-wave Brochurify orchestration contract
169
+ - lifeai-brochure-author — brochure JSX authoring contract for @lifeai/brochure-kit
170
+ - rdc:extract-verifier-rules — verifier-rule candidates from enhancement logs
171
+ - rpms-filemap — canonical RPMS file-map lookup
172
+
106
173
  ### Reference
107
- - rdc:help
174
+ - rdc:help, rdc:self-test
108
175
 
109
176
  ## Channel Formatting and Content Packs
110
177
 
@@ -203,6 +270,13 @@ skills/
203
270
  release/SKILL.md (atomic package/app release)
204
271
  self-test/SKILL.md (skill suite health check)
205
272
  watch/SKILL.md (session log watcher)
273
+ channel-formatter/SKILL.md (channel-native formatting and content packs)
274
+ convert/SKILL.md (Office/Markdown conversion)
275
+ brochure/SKILL.md (print-quality PDF rendering)
276
+ rdc-brochurify/SKILL.md (Brochurify orchestration)
277
+ lifeai-brochure-author/SKILL.md (brochure JSX authoring)
278
+ rdc-extract-verifier-rules/SKILL.md (verifier rule extraction)
279
+ rpms-filemap/SKILL.md (canonical RPMS file map)
206
280
 
207
281
  guides/agents/ (agent-only playbooks — dispatched by rdc:build, not user-invocable)
208
282
  frontend.md (React, UI, Tailwind)
@@ -224,18 +298,16 @@ scripts/
224
298
  ## Check installed version
225
299
 
226
300
  ```bash
227
- # See version in rdc:help skill
228
- head -4 ~/.claude/skills/user/rdc-help.md # if using manual install
301
+ # Published package
302
+ npm view @lifeaitools/rdc-skills version
229
303
 
230
- # Or check source directly
231
- python3 -c "import json; print(json.load(open('package.json'))['version'])"
304
+ # Installed global package
305
+ npm list -g @lifeaitools/rdc-skills --depth=0
232
306
 
233
- # Or invoke the skill
234
- /rdc:help
307
+ # Running MCP service
308
+ curl -s https://rdc-skills.regendevcorp.com/health
235
309
  ```
236
310
 
237
- Current version: **v0.9.36**
238
-
239
311
  ## Quick Start
240
312
 
241
313
  1. Copy this directory to your project
package/git-sha.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "sha": "c95d7a8fedd016e9bb42eba86c106af7c976a3c5"
2
+ "sha": "855a6b20f3ed897365cb835a6e7ad4a92b793d7a"
3
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifeaitools/rdc-skills",
3
- "version": "0.24.12",
3
+ "version": "0.24.13",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -35,7 +35,7 @@
35
35
  "rdc-design": "node scripts/rdc-design-cli.mjs",
36
36
  "test:hooks": "node scripts/test-rdc-hooks.mjs",
37
37
  "test:truth-gate": "node tests/run-evidence-gate.test.mjs && node tests/work-item-exit-gate-l2.test.mjs && node tests/work-item-exit-gate-l3.test.mjs && node tests/require-work-item-on-commit.test.mjs && node tests/harness-gates.test.mjs",
38
- "test:acceptance": "node tests/acceptance.test.mjs",
38
+ "test:acceptance": "node tests/acceptance.test.mjs && node tests/install-rdc-skills.test.mjs",
39
39
  "acceptance": "node scripts/acceptance.mjs --changed",
40
40
  "test:mcp": "node tests/mcp.test.mjs",
41
41
  "test:mcp:remote": "node tests/mcp.test.mjs --remote",
@@ -102,6 +102,48 @@ function run(cmd, options = {}) {
102
102
  return execSync(cmd, { encoding: 'utf8', stdio: 'pipe', ...options }).trim();
103
103
  }
104
104
 
105
+ function updateCodexMcpToml(toml, mcpUrl) {
106
+ const blockRe = /(^|\n)(\[mcp_servers\.rdc-skills\]\n)([\s\S]*?)(?=\n\[|\s*$)/;
107
+ const desiredLine = `url = '${mcpUrl}'`;
108
+ if (blockRe.test(toml)) {
109
+ return toml.replace(blockRe, (match, prefix, header, body) => {
110
+ if (/^url\s*=.*$/m.test(body)) {
111
+ return `${prefix}${header}${body.replace(/^url\s*=.*$/m, desiredLine)}`;
112
+ }
113
+ const trimmed = body.replace(/\s*$/, '');
114
+ return `${prefix}${header}${trimmed}${trimmed ? '\n' : ''}${desiredLine}\n`;
115
+ });
116
+ }
117
+ return toml.replace(/\s*$/, '\n') + `\n[mcp_servers.rdc-skills]\n${desiredLine}\n`;
118
+ }
119
+
120
+ function selfTestCodexMcpToml() {
121
+ const url = 'https://rdc-skills.regendevcorp.com/mcp';
122
+ const stale = "[mcp_servers.clauth]\nurl = 'https://clauth.regendevcorp.com/mcp'\n\n[mcp_servers.rdc-skills]\nurl = 'https://rdc-skills.dev.regendevcorp.com/mcp'\n\n[mcp_servers.web-research]\nurl = 'https://research.regendevcorp.com/mcp'\n";
123
+ const updated = updateCodexMcpToml(stale, url);
124
+ if (!updated.includes(`url = '${url}'`)) throw new Error('did not write production rdc-skills URL');
125
+ if (updated.includes('rdc-skills.dev.regendevcorp.com')) throw new Error('stale dev URL survived');
126
+ if (!updated.includes('[mcp_servers.clauth]') || !updated.includes('[mcp_servers.web-research]')) throw new Error('neighbor MCP blocks were damaged');
127
+
128
+ const missing = updateCodexMcpToml("[mcp_servers.clauth]\nurl = 'https://clauth.regendevcorp.com/mcp'\n", url);
129
+ if (!missing.includes('[mcp_servers.rdc-skills]')) throw new Error('missing block was not appended');
130
+
131
+ const noUrl = updateCodexMcpToml('[mcp_servers.rdc-skills]\nstartup_timeout_sec = 30\n', url);
132
+ if (!noUrl.includes("startup_timeout_sec = 30") || !noUrl.includes(`url = '${url}'`)) throw new Error('url-less block was not repaired');
133
+
134
+ console.log('install-rdc-skills codex MCP TOML self-test — PASS');
135
+ }
136
+
137
+ if (args.includes('--self-test-codex-mcp-toml')) {
138
+ try {
139
+ selfTestCodexMcpToml();
140
+ process.exit(0);
141
+ } catch (e) {
142
+ console.error(e.message || e);
143
+ process.exit(1);
144
+ }
145
+ }
146
+
105
147
  // ── Filesystem helpers ────────────────────────────────────────────────────────
106
148
  function copyDir(src, dst, ext) {
107
149
  if (!fs.existsSync(src)) { warn(`Source not found: ${src}`); return 0; }
@@ -624,14 +666,14 @@ function registerMcpEndpoints() {
624
666
  }
625
667
  } catch (e) { out.push(`claude WARN:${e.message}`); }
626
668
 
627
- // Codex — append [mcp_servers.rdc-skills] to ~/.codex/config.toml if absent.
669
+ // Codex — ensure [mcp_servers.rdc-skills] exists and points at the live shared endpoint.
628
670
  try {
629
671
  const codexToml = path.join(os.homedir(), '.codex', 'config.toml');
630
672
  if (fs.existsSync(codexToml)) {
631
673
  const toml = fs.readFileSync(codexToml, 'utf8');
632
- if (!/\[mcp_servers\.rdc-skills\]/.test(toml)) {
633
- const block = `\n[mcp_servers.rdc-skills]\nurl = '${MCP_URL}'\n`;
634
- fs.writeFileSync(codexToml, toml.replace(/\s*$/, '\n') + block);
674
+ const next = updateCodexMcpToml(toml, MCP_URL);
675
+ if (next !== toml) {
676
+ fs.writeFileSync(codexToml, next);
635
677
  out.push('codex(~/.codex/config.toml)');
636
678
  }
637
679
  }
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import assert from 'node:assert/strict';
3
+ import { spawnSync } from 'node:child_process';
4
+ import { dirname, join, resolve } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ const REPO_ROOT = resolve(__dirname, '..');
9
+ const script = join(REPO_ROOT, 'scripts', 'install-rdc-skills.js');
10
+
11
+ const syntax = spawnSync(process.execPath, ['--check', script], { encoding: 'utf8' });
12
+ assert.equal(syntax.status, 0, syntax.stderr);
13
+
14
+ const toml = spawnSync(process.execPath, [script, '--self-test-codex-mcp-toml'], {
15
+ cwd: REPO_ROOT,
16
+ encoding: 'utf8',
17
+ });
18
+ assert.equal(toml.status, 0, `${toml.stdout}\n${toml.stderr}`);
19
+ assert.match(toml.stdout, /PASS/);
20
+
21
+ console.log('install-rdc-skills tests — PASS');