roadmapsmith 0.9.16 → 0.9.22
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 +34 -0
- package/.codex-plugin/plugin.json +55 -0
- package/README.md +55 -18
- package/assets/palette.png +0 -0
- package/assets/roadmapsmith-logo.png +0 -0
- package/bin/cli.js +75 -17
- package/package.json +20 -4
- package/skills/roadmap/SKILL.md +33 -0
- package/skills/roadmap-audit/SKILL.md +16 -0
- package/skills/roadmap-generate/SKILL.md +18 -0
- package/skills/roadmap-init/SKILL.md +16 -0
- package/skills/roadmap-maintain/SKILL.md +18 -0
- package/skills/roadmap-setup/SKILL.md +17 -0
- package/skills/roadmap-status/SKILL.md +17 -0
- package/skills/roadmap-sync/SKILL.md +20 -0
- package/skills/roadmap-sync/agents/openai.yaml +7 -0
- package/skills/roadmap-update/SKILL.md +17 -0
- package/skills/roadmap-validate/SKILL.md +16 -0
- package/skills/roadmap-zero/SKILL.md +17 -0
- package/skills.json +95 -0
- package/src/classifier/index.js +35 -0
- package/src/generator/index.js +219 -19
- package/src/host.js +446 -58
- package/src/io.js +45 -4
- package/src/match.js +18 -2
- package/src/parser/index.js +13 -0
- package/src/slash.js +148 -69
- package/src/utils.js +1 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "roadmapsmith",
|
|
3
|
+
"version": "0.9.22",
|
|
4
|
+
"description": "One-command evidence-backed ROADMAP.md generator and sync tool for AI coding agents, with shared RoadmapSmith plugin skills for Codex and Claude.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "PapiScholz"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/PapiScholz/roadmapsmith#readme",
|
|
9
|
+
"repository": "https://github.com/PapiScholz/roadmapsmith",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"roadmap",
|
|
13
|
+
"planning",
|
|
14
|
+
"agent",
|
|
15
|
+
"cli",
|
|
16
|
+
"validation",
|
|
17
|
+
"sync",
|
|
18
|
+
"task-tracking",
|
|
19
|
+
"evidence-based",
|
|
20
|
+
"deterministic",
|
|
21
|
+
"monorepo",
|
|
22
|
+
"claude-code",
|
|
23
|
+
"ai-agent",
|
|
24
|
+
"project-management",
|
|
25
|
+
"coding-agents",
|
|
26
|
+
"agent-skills",
|
|
27
|
+
"roadmap-generator",
|
|
28
|
+
"roadmap-sync",
|
|
29
|
+
"task-validation",
|
|
30
|
+
"developer-tools",
|
|
31
|
+
"markdown",
|
|
32
|
+
"agent-workflow"
|
|
33
|
+
]
|
|
34
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "roadmapsmith",
|
|
3
|
+
"version": "0.9.22",
|
|
4
|
+
"description": "One-command evidence-backed ROADMAP.md generator and sync tool for AI coding agents, with shared RoadmapSmith plugin skills for Codex and Claude.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "PapiScholz"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/PapiScholz/roadmapsmith#readme",
|
|
9
|
+
"repository": "https://github.com/PapiScholz/roadmapsmith",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"roadmap",
|
|
13
|
+
"planning",
|
|
14
|
+
"agent",
|
|
15
|
+
"cli",
|
|
16
|
+
"validation",
|
|
17
|
+
"sync",
|
|
18
|
+
"task-tracking",
|
|
19
|
+
"evidence-based",
|
|
20
|
+
"deterministic",
|
|
21
|
+
"monorepo",
|
|
22
|
+
"claude-code",
|
|
23
|
+
"ai-agent",
|
|
24
|
+
"project-management",
|
|
25
|
+
"coding-agents",
|
|
26
|
+
"agent-skills",
|
|
27
|
+
"roadmap-generator",
|
|
28
|
+
"roadmap-sync",
|
|
29
|
+
"task-validation",
|
|
30
|
+
"developer-tools",
|
|
31
|
+
"markdown",
|
|
32
|
+
"agent-workflow"
|
|
33
|
+
],
|
|
34
|
+
"skills": "./skills/",
|
|
35
|
+
"interface": {
|
|
36
|
+
"displayName": "RoadmapSmith",
|
|
37
|
+
"shortDescription": "Evidence-backed roadmap workflows for AI coding agents",
|
|
38
|
+
"longDescription": "Install RoadmapSmith in Codex to expose the shared skills bundle for zero-mode onboarding, existing-repo maintenance, roadmap discovery, and evidence-backed validation while keeping the CLI and Claude bundle surfaces aligned.",
|
|
39
|
+
"developerName": "PapiScholz",
|
|
40
|
+
"category": "Developer Tools",
|
|
41
|
+
"capabilities": [
|
|
42
|
+
"Interactive",
|
|
43
|
+
"Read",
|
|
44
|
+
"Write"
|
|
45
|
+
],
|
|
46
|
+
"websiteURL": "https://github.com/PapiScholz/roadmapsmith#readme",
|
|
47
|
+
"defaultPrompt": [
|
|
48
|
+
"Help me bootstrap or maintain this repository roadmap with RoadmapSmith."
|
|
49
|
+
],
|
|
50
|
+
"brandColor": "#2B6CB0",
|
|
51
|
+
"composerIcon": "./assets/palette.png",
|
|
52
|
+
"logo": "./assets/roadmapsmith-logo.png",
|
|
53
|
+
"screenshots": []
|
|
54
|
+
}
|
|
55
|
+
}
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ roadmapsmith zero
|
|
|
17
17
|
roadmapsmith maintain
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
Slash entrypoints are also supported from the CLI and launcher, for example: `roadmapsmith /
|
|
20
|
+
Slash entrypoints are also supported from the CLI and launcher, for example: `roadmapsmith /roadmap`, `roadmapsmith /roadmap-zero`, `roadmapsmith /roadmap-maintain`, `roadmapsmith /roadmap-update`, and the deprecated legacy router form `roadmapsmith /roadmap-sync validate`.
|
|
21
21
|
The generated VS Code task layer now resolves Node automatically where possible; if it cannot, RoadmapSmith prints a readable runtime diagnostic instead of a dead task.
|
|
22
22
|
`RoadmapSmith: Status` now treats "ready" as runnable task UX, not merely generated files.
|
|
23
23
|
|
|
@@ -27,9 +27,10 @@ The generated VS Code task layer now resolves Node automatically where possible;
|
|
|
27
27
|
npx skills add PapiScholz/roadmapsmith --skill '*' -a claude-code
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
This is the recommended Claude Code install path for native GUI slash commands such as `/
|
|
30
|
+
This is the recommended Claude Code install path for native GUI slash commands such as `/roadmap`, `/roadmap-zero`, `/roadmap-maintain`, `/roadmap-status`, `/roadmap-init`, `/roadmap-generate`, `/roadmap-validate`, `/roadmap-update`, `/roadmap-audit`, and `/roadmap-setup`.
|
|
31
31
|
If you install only `--skill roadmap-sync`, Claude GUI will expose only `/roadmap-sync`.
|
|
32
32
|
The skill bundle does not install the CLI and it does not create visible VS Code actions by itself.
|
|
33
|
+
The published `roadmapsmith` package/plugin surface now also ships the shared bundle files for both hosts (`skills.json`, `skills/*`, `.codex-plugin/plugin.json`, `.claude-plugin/plugin.json`) for downstream host installers, but consuming the CLI alone still does not auto-register native Codex or Claude GUI commands.
|
|
33
34
|
|
|
34
35
|
## Updating
|
|
35
36
|
|
|
@@ -53,9 +54,9 @@ npx skills add PapiScholz/roadmapsmith --skill '*' -a claude-code
|
|
|
53
54
|
```
|
|
54
55
|
|
|
55
56
|
After updating the Claude skill bundle, run `/reload-skills` and, if applicable, `/reload-plugins`.
|
|
56
|
-
After updating the CLI, rerun `roadmapsmith setup` in repositories where you want the latest VS Code tasks, task wrappers, launcher behavior, or Claude hook template.
|
|
57
|
+
After updating the CLI, rerun `roadmapsmith setup` in repositories where you want the latest VS Code tasks, task wrappers, launcher behavior, or Claude hook template. Published npm/plugin artifacts now include the Codex and Claude bundle files for downstream host loaders, but native UX still depends on the host loading the correct surface.
|
|
57
58
|
|
|
58
|
-
Fixes are available through `@latest`
|
|
59
|
+
Fixes are available through `@latest` after the automated release path completes on `main`. In this repo, a successful push to `main` now opens or refreshes an automated `release/vX.Y.Z` PR, that PR squashes back into `main` as the bot release commit `chore(release): vX.Y.Z`, and the follow-up `main` run publishes the new patch version. Before that completes, install from a local checkout or a packed tarball for testing.
|
|
59
60
|
|
|
60
61
|
## Operating Modes
|
|
61
62
|
|
|
@@ -96,7 +97,7 @@ Use the lower-level commands only when you want manual control over generation,
|
|
|
96
97
|
| Host | Current support |
|
|
97
98
|
|---|---|
|
|
98
99
|
| Claude Code | Supported through the full RoadmapSmith skill bundle for native GUI slash commands, plus `roadmapsmith setup` for visible VS Code tasks and the optional repo-local Claude hook. |
|
|
99
|
-
| Codex / Codex CLI | Supported through
|
|
100
|
+
| Codex / Codex CLI | Supported through the native Codex plugin surface (`.codex-plugin/plugin.json` + repo marketplace) and the visible VS Code task workflow after `roadmapsmith setup`. |
|
|
100
101
|
| CI | Use disposable checkouts if you run `sync --audit`, because it still mutates the roadmap today. |
|
|
101
102
|
| Other hosts | Use the skill plus manual CLI commands. |
|
|
102
103
|
|
|
@@ -107,15 +108,16 @@ If Node is installed outside PATH, set `ROADMAPSMITH_NODE` to a working `node` e
|
|
|
107
108
|
## Commands
|
|
108
109
|
|
|
109
110
|
```bash
|
|
110
|
-
roadmapsmith /
|
|
111
|
-
roadmapsmith /zero
|
|
112
|
-
roadmapsmith /maintain
|
|
113
|
-
roadmapsmith /roadmap-
|
|
111
|
+
roadmapsmith /roadmap
|
|
112
|
+
roadmapsmith /roadmap-zero
|
|
113
|
+
roadmapsmith /roadmap-maintain
|
|
114
|
+
roadmapsmith /roadmap-update
|
|
115
|
+
roadmapsmith /roadmap-sync validate
|
|
114
116
|
roadmapsmith setup [--project-root <path>] [--config <path>] [--editor vscode] [--hosts <codex,claude>] [--dry-run]
|
|
115
117
|
roadmapsmith zero [--project-root <path>] [--config <path>]
|
|
116
|
-
roadmapsmith maintain [--project-root <path>] [--config <path>] [--roadmap-file <path>]
|
|
118
|
+
roadmapsmith maintain [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--full-regen]
|
|
117
119
|
roadmapsmith init [--roadmap-file <path>] [--agents-file <path>] [--dry-run]
|
|
118
|
-
roadmapsmith generate [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--dry-run] [--audit]
|
|
120
|
+
roadmapsmith generate [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--dry-run] [--audit] [--full-regen]
|
|
119
121
|
roadmapsmith sync [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--dry-run] [--audit]
|
|
120
122
|
roadmapsmith validate [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--task <id|text>] [--json]
|
|
121
123
|
roadmapsmith doctor [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--json]
|
|
@@ -133,9 +135,39 @@ Then reload the session:
|
|
|
133
135
|
|
|
134
136
|
1. Run `/reload-skills`
|
|
135
137
|
2. If RoadmapSmith was installed through a Claude plugin, also run `/reload-plugins`
|
|
136
|
-
3. Confirm the slash menu shows `/
|
|
138
|
+
3. Confirm the slash menu shows `/roadmap`, `/roadmap-zero`, `/roadmap-maintain`, `/roadmap-status`, `/roadmap-init`, `/roadmap-generate`, `/roadmap-validate`, `/roadmap-update`, `/roadmap-audit`, and `/roadmap-setup`
|
|
137
139
|
|
|
138
|
-
Native Claude GUI slash commands come from the installed skill bundle. CLI slash routing such as `roadmapsmith /
|
|
140
|
+
Native Claude GUI slash commands come from the installed skill bundle. CLI slash routing such as `roadmapsmith /roadmap` is a separate surface and does not populate the Claude GUI menu by itself. The packed npm artifact now mirrors that bundle on disk so published plugin/distribution flows can expose the same slash set without depending on a source checkout.
|
|
141
|
+
|
|
142
|
+
## Codex native plugin install
|
|
143
|
+
|
|
144
|
+
RoadmapSmith now exposes a native Codex plugin manifest at `.codex-plugin/plugin.json` and a repo-local marketplace at `.agents/plugins/marketplace.json`.
|
|
145
|
+
|
|
146
|
+
From the repository root:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
codex plugin marketplace add .
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Then restart Codex, open the plugin directory, install `roadmapsmith` from the `RoadmapSmith Local Plugins` marketplace, and confirm the plugin resolves the shared `./skills/` bundle.
|
|
153
|
+
|
|
154
|
+
Codex native plugin support means install/enable discovery inside Codex. It is separate from Claude-specific `/reload-skills` behavior, and the VS Code task layer remains the fallback/manual workflow when you are not using the plugin directory.
|
|
155
|
+
|
|
156
|
+
`roadmapsmith doctor --json` now reports native slash surfaces separately from the VS Code task layer:
|
|
157
|
+
|
|
158
|
+
- `claudeGui`
|
|
159
|
+
- `claudeCli`
|
|
160
|
+
- `codexGui`
|
|
161
|
+
- `codexCli`
|
|
162
|
+
|
|
163
|
+
Each surface includes the detected source, expected slash commands, missing commands, and duplicate registrations such as a second `/roadmap-sync` coming from a legacy user skill install.
|
|
164
|
+
|
|
165
|
+
If Codex shows `Roadmap Sync` twice, the usual cause is a collision between:
|
|
166
|
+
|
|
167
|
+
- `~/.agents/skills/roadmap-sync`
|
|
168
|
+
- the installed `roadmapsmith` Codex plugin
|
|
169
|
+
|
|
170
|
+
The repo does not remove user-global skills automatically. Use the `doctor` output to confirm the duplicate and then disable or remove the legacy skill if you want a single `/roadmap-sync` entry.
|
|
139
171
|
|
|
140
172
|
## Behavior
|
|
141
173
|
|
|
@@ -306,6 +338,8 @@ roadmapsmith sync --dry-run
|
|
|
306
338
|
|
|
307
339
|
```bash
|
|
308
340
|
npm test
|
|
341
|
+
npm run validate:qa-regression
|
|
342
|
+
npm run validate:functional-smoke
|
|
309
343
|
```
|
|
310
344
|
|
|
311
345
|
If `npm test` fails in your shell with "`node` is not recognized", treat that as a local PATH/runtime issue first and rerun the suite with an explicit Node executable.
|
|
@@ -313,17 +347,20 @@ If `npm test` fails in your shell with "`node` is not recognized", treat that as
|
|
|
313
347
|
## Publishing
|
|
314
348
|
|
|
315
349
|
```bash
|
|
350
|
+
npm run validate:qa-regression
|
|
351
|
+
npm run validate:functional-smoke
|
|
316
352
|
npm test
|
|
317
|
-
npm version patch # or minor / major
|
|
318
|
-
npm publish --access public
|
|
319
|
-
git push origin main --follow-tags
|
|
320
353
|
```
|
|
321
354
|
|
|
322
355
|
Repository-specific release note:
|
|
323
356
|
|
|
324
357
|
- The canonical release automation lives in `.github/workflows/ci.yml`.
|
|
325
|
-
-
|
|
326
|
-
-
|
|
358
|
+
- Every successful push to `main` now bumps `PATCH` through an automated `release/vX.Y.Z` PR, writes the version back with the squashed bot commit `chore(release): vX.Y.Z`, and then the follow-up `main` run publishes npm plus the GitHub Release.
|
|
359
|
+
- Repair reruns on the bot release commit do not bump again; they only publish/create any missing artifacts left behind by a partial failure.
|
|
360
|
+
- On repos where GitHub blocks `GITHUB_TOKEN` from creating or merging PRs, provide a dedicated secret such as `RELEASE_BOT_TOKEN` so the protected-branch release PR flow can complete.
|
|
361
|
+
- Before any push, run the dual validation gate with separate owners: `QA/Regression` uses `npm run validate:qa-regression` and `Functional/Smoke` uses `npm run validate:functional-smoke`.
|
|
362
|
+
- The release gate now includes packed-artifact verification for `skills.json`, `skills/*`, `.codex-plugin/plugin.json`, `.claude-plugin/plugin.json`, and the referenced Codex assets so the published surface matches the GitHub-source bundle for both hosts.
|
|
363
|
+
- Before merging to `main`, verify the UX/release gate in `docs/release-ux-gate.md` and keep `CHANGELOG.md` ready for CI-managed version section generation.
|
|
327
364
|
|
|
328
365
|
## Versioning Strategy
|
|
329
366
|
|
|
Binary file
|
|
Binary file
|
package/bin/cli.js
CHANGED
|
@@ -11,7 +11,7 @@ const { buildSetupFiles, applySetupFiles, inspectHostSetup, parseHosts, assertSu
|
|
|
11
11
|
const { getSlashAction, renderSlashPalette, resolveSlashInvocation } = require('../src/slash');
|
|
12
12
|
const { renderRoadmapTemplate, renderAgentsTemplate } = require('../src/templates');
|
|
13
13
|
const { generateRoadmapDocument } = require('../src/generator');
|
|
14
|
-
const { parseRoadmap } = require('../src/parser');
|
|
14
|
+
const { parseRoadmap, tasksInManagedBlock } = require('../src/parser');
|
|
15
15
|
const { buildValidationContext, validateTasks, auditValidation, CONFIDENCE_RANK, applyMinimumConfidence } = require('../src/validator');
|
|
16
16
|
const { applySync } = require('../src/sync');
|
|
17
17
|
const { buildZeroModeConfigPatch, buildZeroModeDefaults, collectZeroModeAnswers, isInteractiveTerminal } = require('../src/zero');
|
|
@@ -20,14 +20,15 @@ function printHelp() {
|
|
|
20
20
|
console.log([
|
|
21
21
|
'Usage:',
|
|
22
22
|
' roadmapsmith zero [--project-root <path>] [--config <path>]',
|
|
23
|
-
' roadmapsmith maintain [--project-root <path>] [--config <path>] [--roadmap-file <path>]',
|
|
24
|
-
' roadmapsmith /
|
|
25
|
-
' roadmapsmith /
|
|
26
|
-
' roadmapsmith /roadmap-
|
|
27
|
-
' roadmapsmith /
|
|
23
|
+
' roadmapsmith maintain [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--full-regen]',
|
|
24
|
+
' roadmapsmith /roadmap',
|
|
25
|
+
' roadmapsmith /roadmap <action>',
|
|
26
|
+
' roadmapsmith /roadmap-zero | /roadmap-maintain | /roadmap-status | /roadmap-init | /roadmap-generate | /roadmap-validate | /roadmap-update | /roadmap-audit | /roadmap-setup',
|
|
27
|
+
' roadmapsmith /road <action> # deprecated compatibility alias',
|
|
28
|
+
' roadmapsmith /roadmap-sync <action> # deprecated legacy compatibility root',
|
|
28
29
|
' roadmapsmith init [--roadmap-file <path>] [--agents-file <path>] [--dry-run]',
|
|
29
30
|
' roadmapsmith setup [--project-root <path>] [--config <path>] [--editor vscode] [--hosts <codex,claude>] [--dry-run]',
|
|
30
|
-
' roadmapsmith generate [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--dry-run] [--audit]',
|
|
31
|
+
' roadmapsmith generate [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--dry-run] [--audit] [--full-regen]',
|
|
31
32
|
' roadmapsmith sync [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--dry-run] [--audit]',
|
|
32
33
|
' roadmapsmith validate [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--task <id|text>] [--json]',
|
|
33
34
|
' roadmapsmith doctor [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--json]'
|
|
@@ -55,14 +56,6 @@ function maybeFilterTasks(tasks, filterValue) {
|
|
|
55
56
|
});
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
function tasksInManagedBlock(parsedRoadmap) {
|
|
59
|
-
if (!parsedRoadmap.managedRange) {
|
|
60
|
-
return parsedRoadmap.tasks;
|
|
61
|
-
}
|
|
62
|
-
const { start, end } = parsedRoadmap.managedRange;
|
|
63
|
-
return parsedRoadmap.tasks.filter((task) => task.lineIndex > start && task.lineIndex < end);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
59
|
function printAudit(audit) {
|
|
67
60
|
console.log(`Audit summary: ${audit.checkedWithoutEvidence.length} checked-without-evidence, ${audit.readyButUnchecked.length} ready-but-unchecked.`);
|
|
68
61
|
if (audit.checkedWithoutEvidence.length > 0) {
|
|
@@ -79,6 +72,35 @@ function printAudit(audit) {
|
|
|
79
72
|
}
|
|
80
73
|
}
|
|
81
74
|
|
|
75
|
+
function formatSurfaceLabel(surfaceKey) {
|
|
76
|
+
return surfaceKey
|
|
77
|
+
.replace(/([A-Z])/g, ' $1')
|
|
78
|
+
.replace(/^./, (character) => character.toUpperCase());
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function printNativeSurfaceStatus(surfaces) {
|
|
82
|
+
if (!surfaces || typeof surfaces !== 'object') {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
console.log('\nNative slash surfaces:');
|
|
87
|
+
for (const [surfaceKey, surface] of Object.entries(surfaces)) {
|
|
88
|
+
const label = formatSurfaceLabel(surfaceKey);
|
|
89
|
+
console.log(`- ${label}: ${surface.ready ? 'ready' : 'needs attention'} (${surface.message})`);
|
|
90
|
+
console.log(` Source: ${surface.source}`);
|
|
91
|
+
console.log(` Verification: ${surface.verification}`);
|
|
92
|
+
if (Array.isArray(surface.missingCommands) && surface.missingCommands.length > 0) {
|
|
93
|
+
console.log(` Missing commands: ${surface.missingCommands.join(', ')}`);
|
|
94
|
+
}
|
|
95
|
+
if (Array.isArray(surface.duplicates) && surface.duplicates.length > 0) {
|
|
96
|
+
const duplicateSummary = surface.duplicates
|
|
97
|
+
.map((duplicate) => `${duplicate.command}${duplicate.reason ? ` (${duplicate.reason})` : ''}`)
|
|
98
|
+
.join(', ');
|
|
99
|
+
console.log(` Duplicates: ${duplicateSummary}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
82
104
|
function formatSetupVerb(result, dryRun) {
|
|
83
105
|
if (dryRun) {
|
|
84
106
|
return result.before == null ? 'Would create' : 'Would update';
|
|
@@ -128,7 +150,9 @@ function runGenerateCommand(projectRoot, config, flags, options = {}) {
|
|
|
128
150
|
roadmapPath: roadmapFile,
|
|
129
151
|
existingContent,
|
|
130
152
|
config,
|
|
131
|
-
plugins
|
|
153
|
+
plugins,
|
|
154
|
+
preserveManagedBlock: options.preserveManagedBlock === true,
|
|
155
|
+
forceFullRegenerate: options.forceFullRegenerate === true || isEnabled(flags['full-regen'])
|
|
132
156
|
});
|
|
133
157
|
|
|
134
158
|
const writeResult = writeText(roadmapFile, document, { dryRun });
|
|
@@ -151,6 +175,13 @@ function runGenerateCommand(projectRoot, config, flags, options = {}) {
|
|
|
151
175
|
}
|
|
152
176
|
}
|
|
153
177
|
|
|
178
|
+
function runRegenerateCommand(projectRoot, config, flags, options = {}) {
|
|
179
|
+
runGenerateCommand(projectRoot, config, flags, {
|
|
180
|
+
...options,
|
|
181
|
+
forceFullRegenerate: true
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
154
185
|
function runSyncCommand(projectRoot, config, flags, options = {}) {
|
|
155
186
|
const roadmapFile = resolveRoadmapFile(projectRoot, config, flags['roadmap-file']);
|
|
156
187
|
const content = readTextIfExists(roadmapFile);
|
|
@@ -201,6 +232,7 @@ function printHumanStatus(payload) {
|
|
|
201
232
|
}
|
|
202
233
|
console.log(`Codex readiness: ${payload.hosts.codex.ready ? 'ready' : 'needs setup'} (${payload.hosts.codex.message})`);
|
|
203
234
|
console.log(`Claude readiness: ${payload.hosts.claude.ready ? 'ready' : 'needs setup'} (${payload.hosts.claude.message})`);
|
|
235
|
+
printNativeSurfaceStatus(payload.surfaces);
|
|
204
236
|
console.log('\nRecommended entrypoints: roadmapsmith zero (empty repo), roadmapsmith maintain (existing repo).');
|
|
205
237
|
if (!payload.cli.ready) {
|
|
206
238
|
console.log('\nInstalling the skill alone does not expose the CLI in VS Code. Install the CLI and rerun roadmapsmith setup.');
|
|
@@ -258,7 +290,11 @@ async function runZeroCommand(projectRoot, flags) {
|
|
|
258
290
|
|
|
259
291
|
function runMaintainCommand(projectRoot, flags) {
|
|
260
292
|
const config = loadConfig({ projectRoot, configPath: flags.config });
|
|
261
|
-
|
|
293
|
+
const fullRegen = isEnabled(flags['full-regen']);
|
|
294
|
+
runGenerateCommand(projectRoot, config, flags, {
|
|
295
|
+
preserveManagedBlock: !fullRegen,
|
|
296
|
+
forceFullRegenerate: fullRegen
|
|
297
|
+
});
|
|
262
298
|
runSyncCommand(projectRoot, config, { ...flags, audit: true }, { audit: true });
|
|
263
299
|
}
|
|
264
300
|
|
|
@@ -292,6 +328,10 @@ async function run() {
|
|
|
292
328
|
return;
|
|
293
329
|
}
|
|
294
330
|
|
|
331
|
+
if (slashInvocation.deprecated && slashInvocation.deprecationMessage) {
|
|
332
|
+
process.stderr.write(`${slashInvocation.deprecationMessage}\n`);
|
|
333
|
+
}
|
|
334
|
+
|
|
295
335
|
if (slashAction.id === 'status') {
|
|
296
336
|
const projectRoot = path.resolve(String(flags['project-root'] || process.cwd()));
|
|
297
337
|
const config = loadConfig({ projectRoot, configPath: flags.config });
|
|
@@ -333,6 +373,13 @@ async function run() {
|
|
|
333
373
|
return;
|
|
334
374
|
}
|
|
335
375
|
|
|
376
|
+
if (effectiveCommand === 'regenerate') {
|
|
377
|
+
const projectRoot = path.resolve(String(flags['project-root'] || process.cwd()));
|
|
378
|
+
const config = loadConfig({ projectRoot, configPath: flags.config });
|
|
379
|
+
runRegenerateCommand(projectRoot, config, flags);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
|
|
336
383
|
if (effectiveCommand === 'setup') {
|
|
337
384
|
const projectRoot = path.resolve(String(flags['project-root'] || process.cwd()));
|
|
338
385
|
loadConfig({ projectRoot, configPath: flags.config });
|
|
@@ -484,6 +531,17 @@ async function run() {
|
|
|
484
531
|
logError(`[fail] Claude hook incomplete: ${hostStatus.hosts.claude.message}`);
|
|
485
532
|
ok = false;
|
|
486
533
|
}
|
|
534
|
+
|
|
535
|
+
if (hostStatus.surfaces) {
|
|
536
|
+
Object.entries(hostStatus.surfaces).forEach(([surfaceKey, surface]) => {
|
|
537
|
+
const prefix = surface.ready ? '[ok]' : '[warn]';
|
|
538
|
+
log(`${prefix} ${formatSurfaceLabel(surfaceKey)}: ${surface.message}`);
|
|
539
|
+
if (Array.isArray(surface.duplicates) && surface.duplicates.length > 0) {
|
|
540
|
+
const duplicateSummary = surface.duplicates.map((duplicate) => duplicate.command).join(', ');
|
|
541
|
+
log(`[warn] ${formatSurfaceLabel(surfaceKey)} duplicates: ${duplicateSummary}`);
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
}
|
|
487
545
|
}
|
|
488
546
|
|
|
489
547
|
if (jsonMode) {
|
package/package.json
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "roadmapsmith",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "One-command evidence-backed ROADMAP.md generator and sync tool for AI coding agents.",
|
|
3
|
+
"version": "0.9.22",
|
|
4
|
+
"description": "One-command evidence-backed ROADMAP.md generator and sync tool for AI coding agents, with shared RoadmapSmith plugin skills for Codex and Claude.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"roadmapsmith": "bin/cli.js"
|
|
8
8
|
},
|
|
9
9
|
"type": "commonjs",
|
|
10
10
|
"scripts": {
|
|
11
|
-
"test": "node
|
|
11
|
+
"test": "node scripts/run-tests.js",
|
|
12
|
+
"validate:qa-regression": "node scripts/pre-push-gate.js qa-regression",
|
|
13
|
+
"validate:functional-smoke": "node scripts/pre-push-gate.js functional-smoke",
|
|
14
|
+
"validate:pre-push": "node scripts/pre-push-gate.js all",
|
|
15
|
+
"release:auto": "node scripts/auto-release.js",
|
|
16
|
+
"release:version": "node scripts/release-version.js --write",
|
|
17
|
+
"release:changelog": "node scripts/generate-changelog.js",
|
|
18
|
+
"sync-bundle-metadata": "node scripts/sync-bundle-metadata.js --write",
|
|
19
|
+
"check-bundle-metadata": "node scripts/sync-bundle-metadata.js",
|
|
20
|
+
"verify-pack-surface": "node scripts/verify-pack-surface.js",
|
|
21
|
+
"prepack": "node scripts/sync-bundle-metadata.js && node scripts/stage-claude-bundle.js",
|
|
22
|
+
"postpack": "node scripts/clean-staged-claude-bundle.js"
|
|
12
23
|
},
|
|
13
24
|
"keywords": [
|
|
14
25
|
"roadmap",
|
|
@@ -51,6 +62,11 @@
|
|
|
51
62
|
"bin",
|
|
52
63
|
"src",
|
|
53
64
|
"templates",
|
|
54
|
-
"README.md"
|
|
65
|
+
"README.md",
|
|
66
|
+
"skills",
|
|
67
|
+
"skills.json",
|
|
68
|
+
".claude-plugin",
|
|
69
|
+
".codex-plugin",
|
|
70
|
+
"assets"
|
|
55
71
|
]
|
|
56
72
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap
|
|
3
|
+
description: Show the RoadmapSmith native slash palette without side effects.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Palette
|
|
7
|
+
|
|
8
|
+
Use this command as the native discovery entrypoint for the shared RoadmapSmith slash bundle.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Treat `/roadmap` as a no-side-effects palette. Do not run mutating commands from this skill.
|
|
13
|
+
2. When working inside the RoadmapSmith repository itself and `roadmap-skill/bin/cli.js` exists, prefer the local engine:
|
|
14
|
+
- `node roadmap-skill/bin/cli.js /roadmap`
|
|
15
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js /roadmap` if `node` is not in PATH
|
|
16
|
+
3. Otherwise, if the `roadmapsmith` CLI is available, you may run `roadmapsmith /roadmap` from the project root and use that output directly.
|
|
17
|
+
4. If the CLI is missing, provide the palette manually and explain the install path:
|
|
18
|
+
- `npm install -g roadmapsmith`
|
|
19
|
+
- `npx skills add PapiScholz/roadmapsmith --skill '*' -a claude-code`
|
|
20
|
+
- run `/reload-skills`
|
|
21
|
+
- if RoadmapSmith was installed as a Claude plugin, also run `/reload-plugins`
|
|
22
|
+
5. Explain the preferred native host entrypoints:
|
|
23
|
+
- `/roadmap-zero`
|
|
24
|
+
- `/roadmap-maintain`
|
|
25
|
+
- `/roadmap-status`
|
|
26
|
+
- `/roadmap-init`, `/roadmap-generate`, `/roadmap-validate`, `/roadmap-update`, `/roadmap-audit`, and `/roadmap-setup`
|
|
27
|
+
6. Mention that `/roadmap-sync <action>` remains a deprecated legacy CLI compatibility root, and `/road` plus `/road <action>` remain deprecated CLI compatibility aliases.
|
|
28
|
+
|
|
29
|
+
## Output contract
|
|
30
|
+
|
|
31
|
+
- Show what each command does in one sentence.
|
|
32
|
+
- Include namespaced slash examples plus CLI equivalents.
|
|
33
|
+
- Do not modify files or generate a roadmap from this command alone.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-audit
|
|
3
|
+
description: Run the sync-plus-audit workflow through the RoadmapSmith CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Audit
|
|
7
|
+
|
|
8
|
+
Use this command when the user wants the post-sync mismatch summary after applying evidence-backed checklist updates.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Prefer the local engine inside this repository:
|
|
13
|
+
- `node roadmap-skill/bin/cli.js sync --audit --project-root .`
|
|
14
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js sync --audit --project-root .` if `node` is not in PATH
|
|
15
|
+
2. Otherwise prefer `roadmapsmith sync --audit --project-root .`.
|
|
16
|
+
3. Explain that this is the current sync-plus-audit flow, not a standalone read-only audit engine.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-generate
|
|
3
|
+
description: Run the preserve-first roadmap update flow through the RoadmapSmith CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Generate
|
|
7
|
+
|
|
8
|
+
Use this command when the user wants the managed roadmap block updated from repository evidence without replacing substantive existing domain content.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Prefer the local engine inside this repository:
|
|
13
|
+
- `node roadmap-skill/bin/cli.js generate --project-root .`
|
|
14
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js generate --project-root .` if `node` is not in PATH
|
|
15
|
+
2. Otherwise prefer `roadmapsmith generate --project-root .`.
|
|
16
|
+
3. Explain that `generate` is preserve-first when a substantive managed block already exists.
|
|
17
|
+
4. When the user explicitly wants the destructive path, use `roadmapsmith generate --project-root . --full-regen`.
|
|
18
|
+
5. Summarize what stayed preserved, whether generation refused, and what new additions, if any, were inserted.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-init
|
|
3
|
+
description: Create ROADMAP.md and AGENTS.md through the RoadmapSmith CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Init
|
|
7
|
+
|
|
8
|
+
Use this command when the governance files are missing and the user wants them created without running the full Zero Mode interview.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Prefer the local engine inside this repository:
|
|
13
|
+
- `node roadmap-skill/bin/cli.js init --project-root .`
|
|
14
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js init --project-root .` if `node` is not in PATH
|
|
15
|
+
2. Otherwise prefer `roadmapsmith init`.
|
|
16
|
+
3. Treat this command as CLI-backed and summarize whether files were created or skipped.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-maintain
|
|
3
|
+
description: Run the preserve-first existing-repository maintenance workflow through the RoadmapSmith CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Maintain
|
|
7
|
+
|
|
8
|
+
Use this command when the repository already has code, tests, docs, or an existing roadmap and the user wants the default maintenance flow.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Prefer the local engine inside this repository:
|
|
13
|
+
- `node roadmap-skill/bin/cli.js maintain --project-root .`
|
|
14
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js maintain --project-root .` if `node` is not in PATH
|
|
15
|
+
2. Otherwise prefer `roadmapsmith maintain --project-root .`.
|
|
16
|
+
3. Treat this command as CLI-backed. Do not silently replace it with manual reasoning when the CLI is unavailable.
|
|
17
|
+
4. Mention that maintain runs preserve-first generate, sync, and audit in one invocation.
|
|
18
|
+
5. Mention that `roadmapsmith maintain --full-regen` or `roadmapsmith generate --full-regen` is the explicit destructive rebuild path when the user truly wants a full managed-block replacement.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-setup
|
|
3
|
+
description: Generate RoadmapSmith host integration files through the CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Setup
|
|
7
|
+
|
|
8
|
+
Use this command when the user wants RoadmapSmith host integration files generated or refreshed for the current repository.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Prefer the local engine inside this repository:
|
|
13
|
+
- `node roadmap-skill/bin/cli.js setup --project-root . --hosts codex,claude`
|
|
14
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js setup --project-root . --hosts codex,claude` if `node` is not in PATH
|
|
15
|
+
2. Otherwise prefer `roadmapsmith setup --project-root . --hosts codex,claude`.
|
|
16
|
+
3. Explain that setup affects the repository host layer: VS Code tasks, launcher/wrappers, and the optional repo-local Claude hook.
|
|
17
|
+
4. Do not claim that setup alone creates native host slash commands; those come from the installed bundle/plugin.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-status
|
|
3
|
+
description: Inspect RoadmapSmith readiness through doctor JSON and summarize the result.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Status
|
|
7
|
+
|
|
8
|
+
Use this command to inspect whether the shared bundle, native host surfaces, CLI, roadmap files, VS Code task UX, runtime, and Claude hook are ready.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Prefer the local engine inside this repository:
|
|
13
|
+
- `node roadmap-skill/bin/cli.js doctor --json --project-root .`
|
|
14
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js doctor --json --project-root .` if `node` is not in PATH
|
|
15
|
+
2. Otherwise prefer `roadmapsmith doctor --json --project-root .`.
|
|
16
|
+
3. Parse and summarize the JSON output in plain language.
|
|
17
|
+
4. Explicitly call out missing commands or duplicate `/roadmap-sync` registration when doctor reports them.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-sync
|
|
3
|
+
description: Legacy namespaced root and policy guidance for RoadmapSmith slash workflows.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Legacy Root
|
|
7
|
+
|
|
8
|
+
Use this skill when the host exposes or the user invokes `/roadmap-sync`, or when the agent needs the RoadmapSmith operating rules for roadmap maintenance.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Treat bare `/roadmap-sync` as legacy palette/help, and treat `/roadmap-sync <action>` as the deprecated compatibility root.
|
|
13
|
+
2. Prefer the namespaced native commands for new guidance:
|
|
14
|
+
- `/roadmap` for discovery
|
|
15
|
+
- `/roadmap-zero`
|
|
16
|
+
- `/roadmap-maintain`
|
|
17
|
+
- `/roadmap-status`
|
|
18
|
+
- `/roadmap-init`, `/roadmap-generate`, `/roadmap-validate`, `/roadmap-update`, `/roadmap-audit`, and `/roadmap-setup`
|
|
19
|
+
3. When the user explicitly invokes `/roadmap-sync <action>`, route to the matching CLI-backed action without changing semantics and mention the migration path to `/roadmap <action>` or the direct `/roadmap-*` command.
|
|
20
|
+
4. Preserve the operating rules for evidence-backed roadmap maintenance and checklist synchronization.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"interface": {
|
|
3
|
+
"display_name": "Roadmap Sync",
|
|
4
|
+
"short_description": "Legacy root plus policy for evidence-backed ROADMAP.md slash workflows.",
|
|
5
|
+
"default_prompt": "Prefer /roadmap for discovery, /roadmap-maintain for existing repos, and /roadmap-update for direct sync."
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: roadmap-update
|
|
3
|
+
description: Apply evidence-backed checklist sync through the RoadmapSmith CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# RoadmapSmith Update
|
|
7
|
+
|
|
8
|
+
Use this command when the user wants the direct sync surface without routing through the legacy `/roadmap-sync <action>` root.
|
|
9
|
+
|
|
10
|
+
## Required behavior
|
|
11
|
+
|
|
12
|
+
1. Prefer the local engine inside this repository:
|
|
13
|
+
- `node roadmap-skill/bin/cli.js sync --project-root .`
|
|
14
|
+
- on this Windows machine, prefer `C:\Program Files\nodejs\node.exe roadmap-skill/bin/cli.js sync --project-root .` if `node` is not in PATH
|
|
15
|
+
2. Otherwise prefer `roadmapsmith sync --project-root .`.
|
|
16
|
+
3. Explain that `/roadmap-update` is the visible namespaced sync command, while `/roadmap-sync <action>` remains legacy compatibility.
|
|
17
|
+
4. Keep the evidence-backed sync semantics unchanged: sync updates checklist state from repository evidence; it is not a full regeneration path.
|