@chief-clancy/plan 0.5.0 → 0.5.1
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/README.md +1 -1
- package/bin/plan.js +80 -36
- package/dist/installer/install.d.ts +4 -0
- package/dist/installer/install.d.ts.map +1 -1
- package/dist/installer/install.js +37 -2
- package/dist/installer/install.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -111,7 +111,7 @@ Clancy also tries to update the brief file's `<!-- planned:1,2 -->` marker to `<
|
|
|
111
111
|
|
|
112
112
|
The argument decides which path runs:
|
|
113
113
|
|
|
114
|
-
- **Plan-file stem** (e.g. `add-dark-mode-2`): writes the local marker. The board push
|
|
114
|
+
- **Plan-file stem** (e.g. `add-dark-mode-2`): writes the local marker, then optionally pushes the approved plan to the source board ticket as a comment. The push is interactive by default — `/clancy:approve-plan add-dark-mode-2` prompts `Push approved plan to {KEY} as a comment? [y/N]` (default No, never surprise-write to a board). Use `--push` to skip the prompt and push immediately, `--ticket KEY` to override the auto-detected key from the plan file's `**Source:**` header, and `--afk` to combine with `--push` for unattended automation. If the push fails (HTTP error, network issue, key/board mismatch), the local marker stays in place and an exact retry command is printed
|
|
115
115
|
- **Board ticket key** (e.g. `PROJ-123`): runs the full board comment-to-description transport flow — fetches the plan comment, appends it to the ticket description, edits the plan comment with an approval note, swaps the ticket labels (`CLANCY_LABEL_PLAN` → `CLANCY_LABEL_BUILD`, both with sensible defaults), and — only if `CLANCY_STATUS_PLANNED` is configured — transitions the ticket status. Label swaps are mandatory; status transitions are opt-in via the `CLANCY_STATUS_PLANNED` env var
|
|
116
116
|
|
|
117
117
|
The plan-file lookup runs first, so plan stems win on collision (`PROJ-123.md` exists locally AND `PROJ-123` is a valid ticket key → the local plan wins).
|
package/bin/plan.js
CHANGED
|
@@ -39,6 +39,9 @@ const require = createRequire(import.meta.url);
|
|
|
39
39
|
const pkg = require('../package.json');
|
|
40
40
|
|
|
41
41
|
const planRoot = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
42
|
+
const scanRoot = join(
|
|
43
|
+
dirname(require.resolve('@chief-clancy/scan/package.json')),
|
|
44
|
+
);
|
|
42
45
|
|
|
43
46
|
const sources = {
|
|
44
47
|
commandsDir: join(planRoot, 'src', 'commands'),
|
|
@@ -85,6 +88,15 @@ const ask = (label) => new Promise((resolve) => rl.question(label, resolve));
|
|
|
85
88
|
|
|
86
89
|
const COMMAND_FILES = ['approve-plan.md', 'board-setup.md', 'plan.md'];
|
|
87
90
|
const WORKFLOW_FILES = ['approve-plan.md', 'board-setup.md', 'plan.md'];
|
|
91
|
+
const SCAN_AGENT_FILES = [
|
|
92
|
+
'arch-agent.md',
|
|
93
|
+
'concerns-agent.md',
|
|
94
|
+
'design-agent.md',
|
|
95
|
+
'quality-agent.md',
|
|
96
|
+
'tech-agent.md',
|
|
97
|
+
];
|
|
98
|
+
const SCAN_COMMAND_FILES = ['map-codebase.md', 'update-docs.md'];
|
|
99
|
+
const SCAN_WORKFLOW_FILES = ['map-codebase.md', 'update-docs.md'];
|
|
88
100
|
|
|
89
101
|
// ---------------------------------------------------------------------------
|
|
90
102
|
// Installer
|
|
@@ -111,11 +123,12 @@ function copyChecked(src, dest) {
|
|
|
111
123
|
function inlineWorkflows(commandsDest, workflowsDest) {
|
|
112
124
|
const WORKFLOW_REF = /^@\.claude\/clancy\/workflows\/([^/\\]+\.md)\r?$/gm;
|
|
113
125
|
|
|
114
|
-
COMMAND_FILES.forEach((file) => {
|
|
126
|
+
[...COMMAND_FILES, ...SCAN_COMMAND_FILES].forEach((file) => {
|
|
115
127
|
const cmdPath = join(commandsDest, file);
|
|
116
128
|
const content = readFileSync(cmdPath, 'utf8');
|
|
117
129
|
const resolved = content.replace(WORKFLOW_REF, (match, fileName) => {
|
|
118
130
|
const wfPath = join(workflowsDest, fileName);
|
|
131
|
+
rejectSymlink(wfPath);
|
|
119
132
|
if (!existsSync(wfPath)) return match;
|
|
120
133
|
return readFileSync(wfPath, 'utf8');
|
|
121
134
|
});
|
|
@@ -154,37 +167,14 @@ async function chooseMode() {
|
|
|
154
167
|
}
|
|
155
168
|
|
|
156
169
|
// ---------------------------------------------------------------------------
|
|
157
|
-
//
|
|
170
|
+
// Install helpers
|
|
158
171
|
// ---------------------------------------------------------------------------
|
|
159
172
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
console.log(
|
|
164
|
-
` ${bold(`v${pkg.version}`)}${dim(' Implementation planner for Claude Code.')}`,
|
|
165
|
-
);
|
|
166
|
-
console.log('');
|
|
167
|
-
|
|
168
|
-
const mode = flag ?? (await chooseMode());
|
|
169
|
-
|
|
170
|
-
if (flag) {
|
|
171
|
-
console.log(dim(` Mode: ${flag} (--${flag} flag)`));
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
const cwd = process.cwd();
|
|
175
|
-
const baseDir =
|
|
176
|
-
mode === 'global' ? join(homeDir, '.claude') : join(cwd, '.claude');
|
|
173
|
+
/** Copy all plan + scan files and write version marker. */
|
|
174
|
+
function installFiles(dest, mode) {
|
|
175
|
+
const { commandsDest, workflowsDest, agentsDest } = dest;
|
|
177
176
|
|
|
178
|
-
|
|
179
|
-
const workflowsDest = join(baseDir, 'clancy', 'workflows');
|
|
180
|
-
|
|
181
|
-
console.log(dim(` Installing to: ${commandsDest}`));
|
|
182
|
-
|
|
183
|
-
// Create directories
|
|
184
|
-
mkdirSync(commandsDest, { recursive: true });
|
|
185
|
-
mkdirSync(workflowsDest, { recursive: true });
|
|
186
|
-
|
|
187
|
-
// Copy files
|
|
177
|
+
// Plan files
|
|
188
178
|
COMMAND_FILES.forEach((f) =>
|
|
189
179
|
copyChecked(join(sources.commandsDir, f), join(commandsDest, f)),
|
|
190
180
|
);
|
|
@@ -192,17 +182,26 @@ async function main() {
|
|
|
192
182
|
copyChecked(join(sources.workflowsDir, f), join(workflowsDest, f)),
|
|
193
183
|
);
|
|
194
184
|
|
|
195
|
-
//
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
185
|
+
// Scan files (agents, commands, workflows from @chief-clancy/scan)
|
|
186
|
+
SCAN_AGENT_FILES.forEach((f) =>
|
|
187
|
+
copyChecked(join(scanRoot, 'src', 'agents', f), join(agentsDest, f)),
|
|
188
|
+
);
|
|
189
|
+
SCAN_COMMAND_FILES.forEach((f) =>
|
|
190
|
+
copyChecked(join(scanRoot, 'src', 'commands', f), join(commandsDest, f)),
|
|
191
|
+
);
|
|
192
|
+
SCAN_WORKFLOW_FILES.forEach((f) =>
|
|
193
|
+
copyChecked(join(scanRoot, 'src', 'workflows', f), join(workflowsDest, f)),
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
if (mode === 'global') inlineWorkflows(commandsDest, workflowsDest);
|
|
199
197
|
|
|
200
|
-
// Write version marker
|
|
201
198
|
const versionPath = join(commandsDest, 'VERSION.plan');
|
|
202
199
|
rejectSymlink(versionPath);
|
|
203
200
|
writeFileSync(versionPath, pkg.version);
|
|
201
|
+
}
|
|
204
202
|
|
|
205
|
-
|
|
203
|
+
/** Print the install success output. */
|
|
204
|
+
function printSuccess() {
|
|
206
205
|
console.log('');
|
|
207
206
|
console.log(green(' ✓ Clancy Plan installed successfully.'));
|
|
208
207
|
console.log('');
|
|
@@ -216,10 +215,19 @@ async function main() {
|
|
|
216
215
|
console.log(
|
|
217
216
|
` ${cyan('/clancy:board-setup')} ${dim('Configure board credentials (optional)')}`,
|
|
218
217
|
);
|
|
218
|
+
console.log(
|
|
219
|
+
` ${cyan('/clancy:map-codebase')} ${dim('Scan codebase and generate .clancy/docs/')}`,
|
|
220
|
+
);
|
|
221
|
+
console.log(
|
|
222
|
+
` ${cyan('/clancy:update-docs')} ${dim('Refresh .clancy/docs/ incrementally')}`,
|
|
223
|
+
);
|
|
219
224
|
console.log('');
|
|
220
225
|
console.log(' Next steps:');
|
|
221
226
|
console.log(` 1. Open a project in Claude Code`);
|
|
222
|
-
console.log(
|
|
227
|
+
console.log(
|
|
228
|
+
` 2. Optional: ${cyan('/clancy:map-codebase')} ${dim('for better plans')}`,
|
|
229
|
+
);
|
|
230
|
+
console.log(` 3. Run: ${cyan('/clancy:plan TICKET-123')}`);
|
|
223
231
|
console.log('');
|
|
224
232
|
console.log(dim(' Want to plan board tickets?'));
|
|
225
233
|
console.log(dim(` Run: ${cyan('/clancy:board-setup')}`));
|
|
@@ -229,6 +237,42 @@ async function main() {
|
|
|
229
237
|
);
|
|
230
238
|
console.log(dim(` npx chief-clancy`));
|
|
231
239
|
console.log('');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// ---------------------------------------------------------------------------
|
|
243
|
+
// Main
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
|
|
246
|
+
async function main() {
|
|
247
|
+
console.log('');
|
|
248
|
+
console.log(blue(' Clancy Plan'));
|
|
249
|
+
console.log(
|
|
250
|
+
` ${bold(`v${pkg.version}`)}${dim(' Implementation planner for Claude Code.')}`,
|
|
251
|
+
);
|
|
252
|
+
console.log('');
|
|
253
|
+
|
|
254
|
+
const mode = flag ?? (await chooseMode());
|
|
255
|
+
|
|
256
|
+
if (flag) {
|
|
257
|
+
console.log(dim(` Mode: ${flag} (--${flag} flag)`));
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const cwd = process.cwd();
|
|
261
|
+
const baseDir =
|
|
262
|
+
mode === 'global' ? join(homeDir, '.claude') : join(cwd, '.claude');
|
|
263
|
+
|
|
264
|
+
const commandsDest = join(baseDir, 'commands', 'clancy');
|
|
265
|
+
const workflowsDest = join(baseDir, 'clancy', 'workflows');
|
|
266
|
+
const agentsDest = join(baseDir, 'clancy', 'agents');
|
|
267
|
+
|
|
268
|
+
console.log(dim(` Installing to: ${commandsDest}`));
|
|
269
|
+
|
|
270
|
+
mkdirSync(commandsDest, { recursive: true });
|
|
271
|
+
mkdirSync(workflowsDest, { recursive: true });
|
|
272
|
+
mkdirSync(agentsDest, { recursive: true });
|
|
273
|
+
|
|
274
|
+
installFiles({ commandsDest, workflowsDest, agentsDest }, mode);
|
|
275
|
+
printSuccess();
|
|
232
276
|
|
|
233
277
|
rl.close();
|
|
234
278
|
}
|
|
@@ -4,11 +4,15 @@ export type PlanInstallMode = 'global' | 'local';
|
|
|
4
4
|
export type PlanInstallPaths = {
|
|
5
5
|
readonly commandsDest: string;
|
|
6
6
|
readonly workflowsDest: string;
|
|
7
|
+
readonly agentsDest: string;
|
|
7
8
|
};
|
|
8
9
|
/** Source directories within the npm package. */
|
|
9
10
|
type PlanInstallSources = {
|
|
10
11
|
readonly commandsDir: string;
|
|
11
12
|
readonly workflowsDir: string;
|
|
13
|
+
readonly scanAgentsDir: string;
|
|
14
|
+
readonly scanCommandsDir: string;
|
|
15
|
+
readonly scanWorkflowsDir: string;
|
|
12
16
|
};
|
|
13
17
|
/**
|
|
14
18
|
* File system operations the installer performs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"AAaA,wEAAwE;AACxE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjD,8DAA8D;AAC9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"AAaA,wEAAwE;AACxE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjD,8DAA8D;AAC9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,iDAAiD;AACjD,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF;;;;GAIG;AACH,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;CAC9B,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,SAAS,MAAM,EAAE,KACtB,eAAe,GAAG,IAKpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,MAAM,eAAe,EACrB,SAAS,MAAM,EACf,KAAK,MAAM,KACV,gBASF,CAAC;AA+EF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,qBAAqB,KAAG,IAyC/D,CAAC"}
|
|
@@ -17,6 +17,18 @@ const WORKFLOW_FILES = [
|
|
|
17
17
|
'board-setup.md',
|
|
18
18
|
'plan.md',
|
|
19
19
|
];
|
|
20
|
+
/** Scan agent files from @chief-clancy/scan. */
|
|
21
|
+
const SCAN_AGENT_FILES = [
|
|
22
|
+
'arch-agent.md',
|
|
23
|
+
'concerns-agent.md',
|
|
24
|
+
'design-agent.md',
|
|
25
|
+
'quality-agent.md',
|
|
26
|
+
'tech-agent.md',
|
|
27
|
+
];
|
|
28
|
+
/** Scan command files from @chief-clancy/scan. */
|
|
29
|
+
const SCAN_COMMAND_FILES = ['map-codebase.md', 'update-docs.md'];
|
|
30
|
+
/** Scan workflow files from @chief-clancy/scan. */
|
|
31
|
+
const SCAN_WORKFLOW_FILES = ['map-codebase.md', 'update-docs.md'];
|
|
20
32
|
/** Matches `@.claude/clancy/workflows/<filename>.md` on its own line. */
|
|
21
33
|
const WORKFLOW_REF = /^@\.claude\/clancy\/workflows\/([^/\\]+\.md)\r?$/gm;
|
|
22
34
|
// ---------------------------------------------------------------------------
|
|
@@ -48,6 +60,7 @@ export const resolvePlanInstallPaths = (mode, homeDir, cwd) => {
|
|
|
48
60
|
return {
|
|
49
61
|
commandsDest: join(baseDir, 'commands', 'clancy'),
|
|
50
62
|
workflowsDest: join(baseDir, 'clancy', 'workflows'),
|
|
63
|
+
agentsDest: join(baseDir, 'clancy', 'agents'),
|
|
51
64
|
};
|
|
52
65
|
};
|
|
53
66
|
// ---------------------------------------------------------------------------
|
|
@@ -62,6 +75,7 @@ const rejectSymlink = (path, isSymlink) => {
|
|
|
62
75
|
/** Copy a list of files from src dir to dest dir with symlink protection. */
|
|
63
76
|
const copyFiles = (options) => {
|
|
64
77
|
const { files, srcDir, destDir, fs } = options;
|
|
78
|
+
rejectSymlink(destDir, fs.isSymlink);
|
|
65
79
|
fs.mkdir(destDir);
|
|
66
80
|
files.forEach((file) => {
|
|
67
81
|
const src = join(srcDir, file);
|
|
@@ -81,12 +95,15 @@ const copyFiles = (options) => {
|
|
|
81
95
|
* @-file resolution.
|
|
82
96
|
*/
|
|
83
97
|
const inlineWorkflow = (commandsDest, workflowsDest, fs) => {
|
|
84
|
-
COMMAND_FILES.forEach((file) => {
|
|
98
|
+
[...COMMAND_FILES, ...SCAN_COMMAND_FILES].forEach((file) => {
|
|
85
99
|
const cmdPath = join(commandsDest, file);
|
|
86
100
|
const content = fs.readFile(cmdPath);
|
|
87
101
|
const resolved = content.replace(WORKFLOW_REF, (match, fileName) => {
|
|
88
102
|
const wfPath = join(workflowsDest, fileName);
|
|
89
|
-
|
|
103
|
+
rejectSymlink(wfPath, fs.isSymlink);
|
|
104
|
+
if (!fs.exists(wfPath))
|
|
105
|
+
return match;
|
|
106
|
+
return fs.readFile(wfPath);
|
|
90
107
|
});
|
|
91
108
|
if (resolved !== content) {
|
|
92
109
|
rejectSymlink(cmdPath, fs.isSymlink);
|
|
@@ -120,6 +137,24 @@ export const runPlanInstall = (options) => {
|
|
|
120
137
|
destDir: paths.workflowsDest,
|
|
121
138
|
fs,
|
|
122
139
|
});
|
|
140
|
+
copyFiles({
|
|
141
|
+
files: SCAN_AGENT_FILES,
|
|
142
|
+
srcDir: sources.scanAgentsDir,
|
|
143
|
+
destDir: paths.agentsDest,
|
|
144
|
+
fs,
|
|
145
|
+
});
|
|
146
|
+
copyFiles({
|
|
147
|
+
files: SCAN_COMMAND_FILES,
|
|
148
|
+
srcDir: sources.scanCommandsDir,
|
|
149
|
+
destDir: paths.commandsDest,
|
|
150
|
+
fs,
|
|
151
|
+
});
|
|
152
|
+
copyFiles({
|
|
153
|
+
files: SCAN_WORKFLOW_FILES,
|
|
154
|
+
srcDir: sources.scanWorkflowsDir,
|
|
155
|
+
destDir: paths.workflowsDest,
|
|
156
|
+
fs,
|
|
157
|
+
});
|
|
123
158
|
if (mode === 'global') {
|
|
124
159
|
inlineWorkflow(paths.commandsDest, paths.workflowsDest, fs);
|
|
125
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chief-clancy/plan",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Implementation planner for Claude Code — decompose briefs into actionable plans",
|
|
6
6
|
"author": "Alex Clapperton",
|
|
@@ -39,6 +39,9 @@
|
|
|
39
39
|
"src/commands",
|
|
40
40
|
"src/workflows"
|
|
41
41
|
],
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@chief-clancy/scan": "0.2.0"
|
|
44
|
+
},
|
|
42
45
|
"scripts": {
|
|
43
46
|
"build": "rm -rf dist tsconfig.build.tsbuildinfo && tsc --project tsconfig.build.json && tsc-alias --project tsconfig.build.json",
|
|
44
47
|
"test": "vitest run",
|