@lifeaitools/rdc-skills 0.24.13 → 0.24.15
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 +4 -4
- package/commands/help.md +49 -67
- package/git-sha.json +1 -1
- package/package.json +2 -2
- package/skills/co-develop/SKILL.md +1 -0
- package/skills/help/SKILL.md +22 -1
- package/tests/help-surface.test.mjs +33 -0
- package/tests/manifest-contract-fields.test.mjs +44 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rdc",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.15",
|
|
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",
|
|
@@ -382,7 +382,7 @@
|
|
|
382
382
|
"follows": [],
|
|
383
383
|
"leads_to": [],
|
|
384
384
|
"sandbox_aware": false,
|
|
385
|
-
"output_contract":
|
|
385
|
+
"output_contract": "guides/output-contract.md",
|
|
386
386
|
"enabled_default": true,
|
|
387
387
|
"codeflow_required": false
|
|
388
388
|
},
|
|
@@ -1005,7 +1005,7 @@
|
|
|
1005
1005
|
],
|
|
1006
1006
|
"follows": [],
|
|
1007
1007
|
"leads_to": [],
|
|
1008
|
-
"sandbox_aware":
|
|
1008
|
+
"sandbox_aware": true,
|
|
1009
1009
|
"output_contract": "guides/output-contract.md",
|
|
1010
1010
|
"enabled_default": true,
|
|
1011
1011
|
"codeflow_required": false
|
|
@@ -1135,7 +1135,7 @@
|
|
|
1135
1135
|
],
|
|
1136
1136
|
"follows": [],
|
|
1137
1137
|
"leads_to": [],
|
|
1138
|
-
"sandbox_aware":
|
|
1138
|
+
"sandbox_aware": true,
|
|
1139
1139
|
"output_contract": "guides/output-contract.md",
|
|
1140
1140
|
"enabled_default": true,
|
|
1141
1141
|
"codeflow_required": false
|
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.15",
|
|
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 && node tests/install-rdc-skills.test.mjs",
|
|
38
|
+
"test:acceptance": "node tests/acceptance.test.mjs && node tests/install-rdc-skills.test.mjs && node tests/help-surface.test.mjs && node tests/manifest-contract-fields.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",
|
|
@@ -6,6 +6,7 @@ description: "Usage `rdc:co-develop <ask|reply|inbox|start|resume|status>` — p
|
|
|
6
6
|
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
7
7
|
> Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
|
|
8
8
|
> One checklist upfront, updated in place, shown again at end with a 1-line verdict.
|
|
9
|
+
> **Sandbox contract:** This skill honors `RDC_TEST=1` per `guides/agent-bootstrap.md` § RDC_TEST Sandbox Contract. Under the flag, do not create/send/reply to live co-development turns; report the intended clauth command and mark the external relay action as skipped.
|
|
9
10
|
|
|
10
11
|
# rdc:co-develop — Peer-Aware Co-Development
|
|
11
12
|
|
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,44 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { existsSync, 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
|
+
const manifest = JSON.parse(readFileSync(join(root, '.claude-plugin', 'plugin.json'), 'utf8'));
|
|
10
|
+
|
|
11
|
+
function skillPath(name) {
|
|
12
|
+
const direct = join(root, 'skills', name, 'SKILL.md');
|
|
13
|
+
if (existsSync(direct)) return direct;
|
|
14
|
+
const prefixed = join(root, 'skills', `rdc-${name}`, 'SKILL.md');
|
|
15
|
+
if (existsSync(prefixed)) return prefixed;
|
|
16
|
+
return direct;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
for (const [name, meta] of Object.entries(manifest.skills_meta)) {
|
|
20
|
+
const file = skillPath(name);
|
|
21
|
+
assert.equal(existsSync(file), true, `${name} must have a SKILL.md`);
|
|
22
|
+
const body = readFileSync(file, 'utf8');
|
|
23
|
+
|
|
24
|
+
const hasOutputContract = body.includes('guides/output-contract.md') || body.includes('OUTPUT CONTRACT');
|
|
25
|
+
assert.equal(
|
|
26
|
+
Boolean(meta.output_contract),
|
|
27
|
+
hasOutputContract,
|
|
28
|
+
`${name} manifest output_contract must match SKILL.md banner`,
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
if (body.includes('RDC_TEST=1')) {
|
|
32
|
+
assert.equal(meta.sandbox_aware, true, `${name} mentions RDC_TEST=1 and must be sandbox_aware`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (meta.sandbox_aware) {
|
|
36
|
+
assert.match(
|
|
37
|
+
body,
|
|
38
|
+
/Sandbox contract|RDC_TEST=1/,
|
|
39
|
+
`${name} is sandbox_aware and must explain the sandbox contract in SKILL.md`,
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
console.log('manifest contract field tests — PASS');
|