@lifeaitools/rdc-skills 0.24.12 → 0.24.14
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 +1 -1
- package/README.md +82 -10
- package/commands/help.md +49 -67
- package/git-sha.json +1 -1
- package/package.json +2 -2
- package/scripts/install-rdc-skills.js +46 -4
- package/skills/help/SKILL.md +22 -1
- package/tests/help-surface.test.mjs +33 -0
- package/tests/install-rdc-skills.test.mjs +21 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rdc",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.14",
|
|
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
|
-
|
|
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
|
-
#
|
|
228
|
-
|
|
301
|
+
# Published package
|
|
302
|
+
npm view @lifeaitools/rdc-skills version
|
|
229
303
|
|
|
230
|
-
#
|
|
231
|
-
|
|
304
|
+
# Installed global package
|
|
305
|
+
npm list -g @lifeaitools/rdc-skills --depth=0
|
|
232
306
|
|
|
233
|
-
#
|
|
234
|
-
/
|
|
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/commands/help.md
CHANGED
|
@@ -1,90 +1,72 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rdc:help
|
|
3
3
|
description: >-
|
|
4
|
-
Usage `rdc:help` or `rdc` —
|
|
4
|
+
Usage `rdc:help` or `rdc` — manifest-driven menu of all rdc:* skills with
|
|
5
|
+
argument syntax, requirements, decision hints, and direct MCP/curl access.
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
>
|
|
8
|
-
> Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
|
|
8
|
+
> **Output contract:** Checklist/table output only. No raw MCP/JSON/log dumps.
|
|
9
9
|
|
|
10
|
+
# rdc:help — Manifest-Driven Command Reference
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Print a concise command reference from the plugin manifest, then stop. Do not
|
|
13
|
+
ask which command to run unless the user explicitly asks for a recommendation.
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
## Source Of Truth
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
Resolve the manifest in this order and use the first existing file:
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
| `rdc:plan` | `rdc:plan <topic> [--unattended]` — architecture + epic/tasks |
|
|
21
|
-
| `rdc:build` | `rdc:build <epic-id\|topic> [--unattended]` — dispatch agents, commit, close items |
|
|
22
|
-
| `rdc:review` | `rdc:review [--unattended]` — typecheck, tests, fix, commit |
|
|
23
|
-
| `rdc:report` | `rdc:report [--unattended]` — write `.rdc/reports/YYYY-MM-DD.md` |
|
|
24
|
-
| `rdc:overnight` | `rdc:overnight [epic-id\|label=X]` — chain preplan→plan→build→review→report |
|
|
25
|
-
| `rdc:status` | `rdc:status` — read-only dashboard |
|
|
26
|
-
| `rdc:fixit` | `rdc:fixit <description>` — bypass the loop, <5 files / <30 min |
|
|
19
|
+
1. `{PLUGIN_ROOT}/.claude-plugin/plugin.json`
|
|
20
|
+
2. `C:/Dev/rdc-skills/.claude-plugin/plugin.json`
|
|
21
|
+
3. `~/.claude/plugins/cache/rdc-skills/rdc-skills/latest/.claude-plugin/plugin.json`
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
Read `skills_meta` from the manifest. Group entries by `category` in this order:
|
|
24
|
+
`planning`, `build`, `deploy`, `release`, `dev-loop`, `reporting`, `tooling`,
|
|
25
|
+
`infra`.
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|---|---|
|
|
32
|
-
| `rdc:deploy` | `rdc:deploy <slug> [build-id]` · `rdc:deploy new <slug>` · `rdc:deploy diagnose <slug>` · `rdc:deploy audit [--fix]` |
|
|
33
|
-
| `rdc:release` | `rdc:release <repo> [version]` · `rdc:release <repo> --patch\|--minor\|--major` · `rdc:release <repo> --dry-run` |
|
|
27
|
+
For each row, show:
|
|
34
28
|
|
|
35
|
-
|
|
29
|
+
```text
|
|
30
|
+
{slash} — {usage} — needs: {requires or "(none)"} — cf: {yes|no}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
At the end, render a short decision tree from `skills_meta[].triggers`.
|
|
36
34
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
| `rdc:handoff` | `rdc:handoff <topic>` — finalize plan → work items for CLI |
|
|
40
|
-
| `rdc:prototype` | `rdc:prototype <description>` — JSX mock for review |
|
|
41
|
-
| `rdc:workitems` | `rdc:workitems <add\|update\|done\|list\|epics> [args]` |
|
|
42
|
-
| `rdc:collab` | `rdc:collab --session <id>` — claude.ai bidirectional relay |
|
|
43
|
-
| `rdc:design` | `rdc:design <command\|brief>` — RDC/Studio design, tokens, palettes, themes, Rampa CLI |
|
|
35
|
+
If the manifest is unreachable, say `manifest fallback used` and render the
|
|
36
|
+
static fallback table from `skills/help/SKILL.md`.
|
|
44
37
|
|
|
45
|
-
##
|
|
38
|
+
## Direct MCP / curl Access
|
|
46
39
|
|
|
47
|
-
|
|
40
|
+
Show this block after the command table so non-Claude callers have the same
|
|
41
|
+
entry point:
|
|
48
42
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- `guides/agents/viz.md` — [agent-only — dispatched by rdc:build, not user-invocable]
|
|
57
|
-
- `guides/agents/setup.md` — [agent-only — dispatched by rdc:build, not user-invocable]
|
|
58
|
-
- `guides/agents/verify.md` — [agent-only — dispatched by rdc:build, not user-invocable]
|
|
43
|
+
```text
|
|
44
|
+
MCP endpoint: https://rdc-skills.regendevcorp.com/mcp
|
|
45
|
+
Health: curl -s https://rdc-skills.regendevcorp.com/health
|
|
46
|
+
Header: Accept: application/json, text/event-stream
|
|
47
|
+
Tools: rdc_skill_list, rdc_skill_search, rdc_skill_get
|
|
48
|
+
Variants: cli for Claude Code/Codex/local terminal; cloud for claude.ai
|
|
49
|
+
```
|
|
59
50
|
|
|
60
|
-
|
|
51
|
+
Minimal curl examples:
|
|
61
52
|
|
|
62
|
-
|
|
53
|
+
```bash
|
|
54
|
+
curl -s -X POST https://rdc-skills.regendevcorp.com/mcp \
|
|
55
|
+
-H 'Content-Type: application/json' \
|
|
56
|
+
-H 'Accept: application/json, text/event-stream' \
|
|
57
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"rdc_skill_list","arguments":{}}}'
|
|
63
58
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"plan this out" / "architect" → rdc:plan <topic>
|
|
69
|
-
"build it" / "go" / "execute" → rdc:build <topic>
|
|
70
|
-
"run overnight" / "while I sleep" → rdc:overnight
|
|
71
|
-
"quick fix" / "hotfix" / "typo" → rdc:fixit <desc>
|
|
72
|
-
"review" / "is it clean" → rdc:review
|
|
73
|
-
"report" / "summarize" → rdc:report
|
|
74
|
-
"status" / "where are we" → rdc:status
|
|
75
|
-
"deploy" / "ship" → rdc:deploy <slug>
|
|
76
|
-
"release" / "publish" → rdc:release <repo>
|
|
77
|
-
"hand this off" / "give to agents" → rdc:handoff
|
|
78
|
-
"show me what it looks like" → rdc:prototype
|
|
79
|
-
"add to backlog" / "create a ticket" → rdc:workitems
|
|
80
|
-
"design/tokens/palette/theme" → rdc:design <command>
|
|
81
|
-
"what commands" / "what skills" → rdc:help
|
|
59
|
+
curl -s -X POST https://rdc-skills.regendevcorp.com/mcp \
|
|
60
|
+
-H 'Content-Type: application/json' \
|
|
61
|
+
-H 'Accept: application/json, text/event-stream' \
|
|
62
|
+
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"rdc_skill_get","arguments":{"name":"build","variant":"cli"}}}'
|
|
82
63
|
```
|
|
83
64
|
|
|
84
|
-
## Hard
|
|
65
|
+
## Hard Rules
|
|
85
66
|
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
67
|
+
- `cf: yes` skills must consult CodeFlow before acting.
|
|
68
|
+
- Never run `pnpm build` at monorepo root. Use scoped typecheck/tests.
|
|
69
|
+
- Never commit to `main` without explicit approval.
|
|
70
|
+
- Never overlap agents on the same files.
|
|
71
|
+
- Update work items in real time for skills that require work-items RPCs.
|
|
72
|
+
- Credentials come from clauth: `curl -s http://127.0.0.1:52437/v/<service>`.
|
package/git-sha.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifeaitools/rdc-skills",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.14",
|
|
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 && node tests/help-surface.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 —
|
|
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
|
-
|
|
633
|
-
|
|
634
|
-
fs.writeFileSync(codexToml,
|
|
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
|
}
|
package/skills/help/SKILL.md
CHANGED
|
@@ -21,7 +21,8 @@ description: "Usage `rdc:help` — Show all rdc:* skills with usage, requirement
|
|
|
21
21
|
3. Group entries by `category` in this order: `planning, build, deploy, release, dev-loop, reporting, tooling, infra`.
|
|
22
22
|
4. For each entry render one row: `{slash} — {usage} — needs: {requires.join(',')} — cf: {codeflow_required ? 'yes' : 'no'}`.
|
|
23
23
|
5. Print a Decision Tree at the end that maps natural-language phrases to skills, derived from each entry's `triggers[]`.
|
|
24
|
-
6.
|
|
24
|
+
6. Print the Direct MCP / curl Access block so non-Claude callers have the same entry point.
|
|
25
|
+
7. Hard rules section at the bottom (see below — verbatim).
|
|
25
26
|
|
|
26
27
|
## Required output format
|
|
27
28
|
|
|
@@ -86,6 +87,26 @@ RDC SKILLS — manifest: .claude-plugin/plugin.json @ v{version}
|
|
|
86
87
|
"claude.ai relay" / "collab session" → /rdc:collab
|
|
87
88
|
"palette" / "studio design" / "tokens" → /rdc:design
|
|
88
89
|
|
|
90
|
+
## Direct MCP / curl Access
|
|
91
|
+
|
|
92
|
+
MCP endpoint: https://rdc-skills.regendevcorp.com/mcp
|
|
93
|
+
Health: curl -s https://rdc-skills.regendevcorp.com/health
|
|
94
|
+
Header: Accept: application/json, text/event-stream
|
|
95
|
+
Tools: rdc_skill_list, rdc_skill_search, rdc_skill_get
|
|
96
|
+
Variants: cli for Claude Code/Codex/local terminal; cloud for claude.ai
|
|
97
|
+
|
|
98
|
+
List skills:
|
|
99
|
+
curl -s -X POST https://rdc-skills.regendevcorp.com/mcp \
|
|
100
|
+
-H 'Content-Type: application/json' \
|
|
101
|
+
-H 'Accept: application/json, text/event-stream' \
|
|
102
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"rdc_skill_list","arguments":{}}}'
|
|
103
|
+
|
|
104
|
+
Fetch a skill:
|
|
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":2,"method":"tools/call","params":{"name":"rdc_skill_get","arguments":{"name":"build","variant":"cli"}}}'
|
|
109
|
+
|
|
89
110
|
## Hard rules
|
|
90
111
|
|
|
91
112
|
- `cf: yes` skills MUST consult CodeFlow before acting. Hooks fail-closed on unreachable CodeFlow for these.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
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 root = resolve(__dirname, '..');
|
|
9
|
+
|
|
10
|
+
const files = {
|
|
11
|
+
readme: join(root, 'README.md'),
|
|
12
|
+
skillHelp: join(root, 'skills', 'help', 'SKILL.md'),
|
|
13
|
+
commandHelp: join(root, 'commands', 'help.md'),
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const docs = Object.fromEntries(
|
|
17
|
+
Object.entries(files).map(([key, file]) => [key, readFileSync(file, 'utf8')]),
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
for (const [name, text] of Object.entries(docs)) {
|
|
21
|
+
assert.match(text, /https:\/\/rdc-skills\.regendevcorp\.com\/mcp/, `${name} must expose production MCP endpoint`);
|
|
22
|
+
assert.match(text, /Accept: application\/json, text\/event-stream/, `${name} must show Streamable HTTP Accept header`);
|
|
23
|
+
assert.match(text, /rdc_skill_list/, `${name} must mention rdc_skill_list`);
|
|
24
|
+
assert.match(text, /rdc_skill_get/, `${name} must mention rdc_skill_get`);
|
|
25
|
+
assert.doesNotMatch(text, /https:\/\/rdc-skills\.dev\.regendevcorp\.com\/mcp/, `${name} must not point callers at dev MCP`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
assert.match(docs.skillHelp, /manifest-driven/i, 'skill help should be manifest-driven');
|
|
29
|
+
assert.match(docs.commandHelp, /manifest-driven/i, 'command help should be manifest-driven');
|
|
30
|
+
assert.doesNotMatch(docs.commandHelp, /Print the full usage menu below verbatim/, 'command help must not use stale static menu wording');
|
|
31
|
+
assert.doesNotMatch(docs.commandHelp, /get\/<service>/, 'command help must use current clauth /v/<service> wording');
|
|
32
|
+
|
|
33
|
+
console.log('help surface tests — PASS');
|
|
@@ -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');
|