agile-context-engineering 0.2.1 → 0.3.0
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/CHANGELOG.md +82 -0
- package/LICENSE +51 -51
- package/README.md +324 -319
- package/agents/ace-research-synthesizer.md +228 -228
- package/agents/ace-technical-application-architect.md +28 -0
- package/agents/ace-wiki-mapper.md +445 -334
- package/agile-context-engineering/src/ace-tools.test.js +1089 -1089
- package/agile-context-engineering/templates/_command.md +53 -53
- package/agile-context-engineering/templates/_workflow.xml +16 -16
- package/agile-context-engineering/templates/product/product-backlog.xml +231 -231
- package/agile-context-engineering/templates/product/story-integration-solution.xml +1 -0
- package/agile-context-engineering/templates/product/story-wiki.xml +4 -0
- package/agile-context-engineering/templates/wiki/coding-standards.xml +38 -0
- package/agile-context-engineering/templates/wiki/decizions.xml +115 -115
- package/agile-context-engineering/templates/wiki/guide.xml +137 -137
- package/agile-context-engineering/templates/wiki/module-discovery.xml +174 -174
- package/agile-context-engineering/templates/wiki/pattern.xml +159 -159
- package/agile-context-engineering/templates/wiki/system-architecture.xml +254 -254
- package/agile-context-engineering/templates/wiki/system-cross-cutting.xml +197 -197
- package/agile-context-engineering/templates/wiki/system.xml +381 -381
- package/agile-context-engineering/templates/wiki/walkthrough.xml +255 -0
- package/agile-context-engineering/templates/wiki/wiki-readme.xml +297 -276
- package/agile-context-engineering/utils/questioning.xml +110 -110
- package/agile-context-engineering/workflows/execute-story.xml +1219 -1145
- package/agile-context-engineering/workflows/help.xml +540 -540
- package/agile-context-engineering/workflows/init-coding-standards.xml +386 -386
- package/agile-context-engineering/workflows/map-story.xml +1046 -797
- package/agile-context-engineering/workflows/map-subsystem.xml +2 -1
- package/agile-context-engineering/workflows/map-walkthrough.xml +457 -0
- package/agile-context-engineering/workflows/plan-feature.xml +1495 -1495
- package/agile-context-engineering/workflows/plan-story.xml +36 -1
- package/agile-context-engineering/workflows/research-integration-solution.xml +1 -0
- package/agile-context-engineering/workflows/research-story-wiki.xml +2 -1
- package/agile-context-engineering/workflows/research-technical-solution.xml +1 -0
- package/agile-context-engineering/workflows/review-story.xml +281 -281
- package/agile-context-engineering/workflows/update.xml +238 -0
- package/bin/install.js +126 -7
- package/commands/ace/execute-story.md +1 -0
- package/commands/ace/help.md +93 -93
- package/commands/ace/init-coding-standards.md +83 -83
- package/commands/ace/map-story.md +165 -156
- package/commands/ace/map-subsystem.md +140 -138
- package/commands/ace/map-system.md +92 -92
- package/commands/ace/map-walkthrough.md +127 -0
- package/commands/ace/plan-feature.md +89 -89
- package/commands/ace/plan-story.md +15 -1
- package/commands/ace/review-story.md +109 -109
- package/commands/ace/update.md +56 -0
- package/hooks/ace-check-update.js +62 -0
- package/hooks/ace-statusline.js +89 -0
- package/package.json +5 -3
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
<workflow>
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Check for ACE updates via npm, display changelog for versions between installed and latest,
|
|
5
|
+
obtain user confirmation, and execute clean installation with cache clearing.
|
|
6
|
+
</purpose>
|
|
7
|
+
|
|
8
|
+
<mandatory-context>
|
|
9
|
+
Read all files referenced by the invoking prompt's execution-context before starting.
|
|
10
|
+
</mandatory-context>
|
|
11
|
+
|
|
12
|
+
<process>
|
|
13
|
+
|
|
14
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
15
|
+
<!-- STEP 1: DETECT INSTALLATION -->
|
|
16
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
17
|
+
|
|
18
|
+
<step name="detect-installation" order="1">
|
|
19
|
+
Detect whether ACE is installed locally or globally, and for which runtime.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
if [ -f "./.claude/agile-context-engineering/VERSION" ]; then
|
|
23
|
+
echo "SCOPE=local"
|
|
24
|
+
echo "RUNTIME=claude"
|
|
25
|
+
echo "VERSION=$(cat ./.claude/agile-context-engineering/VERSION)"
|
|
26
|
+
elif [ -f "$HOME/.claude/agile-context-engineering/VERSION" ]; then
|
|
27
|
+
echo "SCOPE=global"
|
|
28
|
+
echo "RUNTIME=claude"
|
|
29
|
+
echo "VERSION=$(cat $HOME/.claude/agile-context-engineering/VERSION)"
|
|
30
|
+
elif [ -f "./.opencode/agile-context-engineering/VERSION" ]; then
|
|
31
|
+
echo "SCOPE=local"
|
|
32
|
+
echo "RUNTIME=opencode"
|
|
33
|
+
echo "VERSION=$(cat ./.opencode/agile-context-engineering/VERSION)"
|
|
34
|
+
elif [ -f "$HOME/.opencode/agile-context-engineering/VERSION" ]; then
|
|
35
|
+
echo "SCOPE=global"
|
|
36
|
+
echo "RUNTIME=opencode"
|
|
37
|
+
echo "VERSION=$(cat $HOME/.opencode/agile-context-engineering/VERSION)"
|
|
38
|
+
else
|
|
39
|
+
echo "SCOPE=unknown"
|
|
40
|
+
echo "RUNTIME=claude"
|
|
41
|
+
echo "VERSION=0.0.0"
|
|
42
|
+
fi
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Parse SCOPE, RUNTIME, and VERSION from the output.
|
|
46
|
+
|
|
47
|
+
**If SCOPE is "unknown":**
|
|
48
|
+
```
|
|
49
|
+
## ACE Update
|
|
50
|
+
|
|
51
|
+
**Installed version:** Unknown
|
|
52
|
+
|
|
53
|
+
Your installation doesn't include version tracking.
|
|
54
|
+
Running fresh install...
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Proceed with VERSION=0.0.0.
|
|
58
|
+
</step>
|
|
59
|
+
|
|
60
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
61
|
+
<!-- STEP 2: CHECK LATEST VERSION -->
|
|
62
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
63
|
+
|
|
64
|
+
<step name="check-latest-version" order="2">
|
|
65
|
+
Check npm for the latest published version:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npm view agile-context-engineering version 2>/dev/null
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**If npm check fails:**
|
|
72
|
+
```
|
|
73
|
+
Couldn't check for updates (offline or npm unavailable).
|
|
74
|
+
|
|
75
|
+
To update manually: `npx agile-context-engineering --claude --global`
|
|
76
|
+
```
|
|
77
|
+
Exit.
|
|
78
|
+
</step>
|
|
79
|
+
|
|
80
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
81
|
+
<!-- STEP 3: COMPARE VERSIONS -->
|
|
82
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
83
|
+
|
|
84
|
+
<step name="compare-versions" order="3">
|
|
85
|
+
Compare installed vs latest.
|
|
86
|
+
|
|
87
|
+
**If installed == latest:**
|
|
88
|
+
```
|
|
89
|
+
## ACE Update
|
|
90
|
+
|
|
91
|
+
**Installed:** X.Y.Z
|
|
92
|
+
**Latest:** X.Y.Z
|
|
93
|
+
|
|
94
|
+
You're already on the latest version.
|
|
95
|
+
```
|
|
96
|
+
Exit.
|
|
97
|
+
|
|
98
|
+
**If installed > latest:**
|
|
99
|
+
```
|
|
100
|
+
## ACE Update
|
|
101
|
+
|
|
102
|
+
**Installed:** X.Y.Z
|
|
103
|
+
**Latest:** A.B.C
|
|
104
|
+
|
|
105
|
+
You're ahead of the latest release (development version?).
|
|
106
|
+
```
|
|
107
|
+
Exit.
|
|
108
|
+
</step>
|
|
109
|
+
|
|
110
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
111
|
+
<!-- STEP 4: FETCH AND SHOW CHANGELOG -->
|
|
112
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
113
|
+
|
|
114
|
+
<step name="show-changelog-and-confirm" order="4">
|
|
115
|
+
If update is available, fetch the changelog and show what's new BEFORE updating.
|
|
116
|
+
|
|
117
|
+
1. **Try local changelog first** — check if CHANGELOG.md exists in the installation:
|
|
118
|
+
|
|
119
|
+
For SCOPE=local: `./.claude/agile-context-engineering/CHANGELOG.md`
|
|
120
|
+
For SCOPE=global: `~/.claude/agile-context-engineering/CHANGELOG.md`
|
|
121
|
+
(substitute `.opencode` for Crush runtime)
|
|
122
|
+
|
|
123
|
+
If found, read it directly.
|
|
124
|
+
|
|
125
|
+
2. **Fall back to GitHub** — if local file not found, use WebFetch to fetch:
|
|
126
|
+
`https://raw.githubusercontent.com/Quantarcane/ACE/main/CHANGELOG.md`
|
|
127
|
+
|
|
128
|
+
If fetch fails, skip changelog display and proceed without it.
|
|
129
|
+
|
|
130
|
+
3. **Extract relevant entries** — from the fetched/read content, extract all
|
|
131
|
+
changelog sections between the installed version and the latest version.
|
|
132
|
+
|
|
133
|
+
Look for lines matching `## [X.Y.Z]` and extract everything from
|
|
134
|
+
`## [{latest_version}]` down to (but not including) `## [{installed_version}]`.
|
|
135
|
+
|
|
136
|
+
4. **Display preview and ask for confirmation:**
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
## ACE Update Available
|
|
140
|
+
|
|
141
|
+
**Installed:** {installed_version}
|
|
142
|
+
**Latest:** {latest_version}
|
|
143
|
+
|
|
144
|
+
### What's New
|
|
145
|
+
────────────────────────────────────────────────────────────
|
|
146
|
+
|
|
147
|
+
{extracted changelog entries}
|
|
148
|
+
|
|
149
|
+
────────────────────────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
The installer performs a clean install of ACE folders:
|
|
152
|
+
- `commands/ace/` will be wiped and replaced
|
|
153
|
+
- `agile-context-engineering/` will be wiped and replaced
|
|
154
|
+
- `agents/ace-*` files will be replaced
|
|
155
|
+
|
|
156
|
+
Your custom files are preserved:
|
|
157
|
+
- Custom commands not in `commands/ace/`
|
|
158
|
+
- Custom agents not prefixed with `ace-`
|
|
159
|
+
- Your CLAUDE.md files
|
|
160
|
+
- Your .ace/ project artifacts
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Use AskUserQuestion:
|
|
164
|
+
- Question: "Proceed with update?"
|
|
165
|
+
- Options:
|
|
166
|
+
- "Yes, update now"
|
|
167
|
+
- "No, cancel"
|
|
168
|
+
|
|
169
|
+
**If user cancels:** Exit.
|
|
170
|
+
</step>
|
|
171
|
+
|
|
172
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
173
|
+
<!-- STEP 5: RUN UPDATE -->
|
|
174
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
175
|
+
|
|
176
|
+
<step name="run-update" order="5">
|
|
177
|
+
Run the update using detected SCOPE and RUNTIME from step 1.
|
|
178
|
+
|
|
179
|
+
Build the command: `npx agile-context-engineering --{RUNTIME} --{SCOPE}`
|
|
180
|
+
|
|
181
|
+
Examples:
|
|
182
|
+
- Global Claude: `npx agile-context-engineering --claude --global`
|
|
183
|
+
- Local Claude: `npx agile-context-engineering --claude --local`
|
|
184
|
+
- Global Crush: `npx agile-context-engineering --opencode --global`
|
|
185
|
+
- Local Crush: `npx agile-context-engineering --opencode --local`
|
|
186
|
+
|
|
187
|
+
If SCOPE was "unknown", default to `--claude --global`.
|
|
188
|
+
|
|
189
|
+
Capture output. If install fails, show error and exit.
|
|
190
|
+
|
|
191
|
+
Clear the update cache so statusline indicator disappears:
|
|
192
|
+
|
|
193
|
+
**If SCOPE is "local":**
|
|
194
|
+
```bash
|
|
195
|
+
rm -f ./.claude/cache/ace-update-check.json
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**If SCOPE is "global":**
|
|
199
|
+
```bash
|
|
200
|
+
rm -f "$HOME/.claude/cache/ace-update-check.json"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
For Crush runtime, substitute `.opencode` for `.claude` in the cache path.
|
|
204
|
+
</step>
|
|
205
|
+
|
|
206
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
207
|
+
<!-- STEP 6: DISPLAY RESULT -->
|
|
208
|
+
<!-- ══════════════════════════════════════════════════════════════════ -->
|
|
209
|
+
|
|
210
|
+
<step name="display-result" order="6">
|
|
211
|
+
Format completion message (changelog was already shown in confirmation step):
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
============================================================
|
|
215
|
+
ACE Updated: v{old} -> v{new}
|
|
216
|
+
============================================================
|
|
217
|
+
|
|
218
|
+
Restart Claude Code to pick up the new commands.
|
|
219
|
+
|
|
220
|
+
View full changelog: https://github.com/Quantarcane/ACE/blob/main/CHANGELOG.md
|
|
221
|
+
```
|
|
222
|
+
</step>
|
|
223
|
+
|
|
224
|
+
</process>
|
|
225
|
+
|
|
226
|
+
<success_criteria>
|
|
227
|
+
<check>Installed version detected correctly (local/global, claude/crush)</check>
|
|
228
|
+
<check>Latest version checked via npm</check>
|
|
229
|
+
<check>Update skipped if already current</check>
|
|
230
|
+
<check>Changelog fetched and displayed BEFORE update</check>
|
|
231
|
+
<check>Clean install warning shown</check>
|
|
232
|
+
<check>User confirmation obtained before update</check>
|
|
233
|
+
<check>Update executed with correct --runtime and --scope flags</check>
|
|
234
|
+
<check>Update cache cleared</check>
|
|
235
|
+
<check>Restart reminder shown</check>
|
|
236
|
+
</success_criteria>
|
|
237
|
+
|
|
238
|
+
</workflow>
|
package/bin/install.js
CHANGED
|
@@ -5,7 +5,7 @@ const path = require('path');
|
|
|
5
5
|
const readline = require('readline');
|
|
6
6
|
const os = require('os');
|
|
7
7
|
|
|
8
|
-
const VERSION = '
|
|
8
|
+
const VERSION = require('../package.json').version;
|
|
9
9
|
|
|
10
10
|
// ANSI color codes
|
|
11
11
|
const colors = {
|
|
@@ -67,12 +67,31 @@ function parseArgs() {
|
|
|
67
67
|
all: args.includes('--all'),
|
|
68
68
|
global: args.includes('--global'),
|
|
69
69
|
local: args.includes('--local'),
|
|
70
|
+
forceStatusline: args.includes('--force-statusline'),
|
|
70
71
|
help: args.includes('--help') || args.includes('-h'),
|
|
71
72
|
version: args.includes('--version') || args.includes('-v'),
|
|
72
73
|
};
|
|
73
74
|
return flags;
|
|
74
75
|
}
|
|
75
76
|
|
|
77
|
+
// Read or create settings.json
|
|
78
|
+
function readSettings(settingsPath) {
|
|
79
|
+
if (fs.existsSync(settingsPath)) {
|
|
80
|
+
try {
|
|
81
|
+
return JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
82
|
+
} catch (e) {
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return {};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Build hook command with proper quoting for the target directory
|
|
90
|
+
function buildHookCommand(targetDir, hookFile) {
|
|
91
|
+
const hookPath = path.join(targetDir, 'hooks', hookFile);
|
|
92
|
+
return `node "${hookPath.replace(/\\/g, '/')}"`;
|
|
93
|
+
}
|
|
94
|
+
|
|
76
95
|
function showHelp() {
|
|
77
96
|
log(`
|
|
78
97
|
Usage: npx agile-context-engineering [options]
|
|
@@ -82,9 +101,10 @@ Options:
|
|
|
82
101
|
--opencode Install for Crush (formerly OpenCode)
|
|
83
102
|
--all Install for all supported runtimes
|
|
84
103
|
--global Install globally (~/.claude, ~/.opencode)
|
|
85
|
-
--local
|
|
86
|
-
-
|
|
87
|
-
-
|
|
104
|
+
--local Install locally (.claude, .opencode)
|
|
105
|
+
--force-statusline Replace existing statusline configuration
|
|
106
|
+
-h, --help Show this help message
|
|
107
|
+
-v, --version Show version number
|
|
88
108
|
|
|
89
109
|
Examples:
|
|
90
110
|
npx agile-context-engineering # Interactive installation
|
|
@@ -278,6 +298,34 @@ function installForRuntime(runtime, scope, packageDir) {
|
|
|
278
298
|
log(` ✓ Tools installed`, colors.green);
|
|
279
299
|
}
|
|
280
300
|
|
|
301
|
+
// Copy hooks
|
|
302
|
+
const srcHooks = path.join(packageDir, 'hooks');
|
|
303
|
+
const hooksPath = path.join(basePath, 'hooks');
|
|
304
|
+
if (fs.existsSync(srcHooks)) {
|
|
305
|
+
// Only copy ace-* hook files, preserve non-ACE hooks (e.g. GSD)
|
|
306
|
+
if (!fs.existsSync(hooksPath)) {
|
|
307
|
+
fs.mkdirSync(hooksPath, { recursive: true });
|
|
308
|
+
}
|
|
309
|
+
for (const f of fs.readdirSync(srcHooks)) {
|
|
310
|
+
if (f.startsWith('ace-')) {
|
|
311
|
+
fs.copyFileSync(path.join(srcHooks, f), path.join(hooksPath, f));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
log(` ✓ Hooks installed`, colors.green);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Write VERSION file for update checking
|
|
318
|
+
const versionFile = path.join(acePath, 'VERSION');
|
|
319
|
+
fs.writeFileSync(versionFile, VERSION, 'utf-8');
|
|
320
|
+
|
|
321
|
+
// Copy CHANGELOG.md
|
|
322
|
+
const changelogSrc = path.join(packageDir, 'CHANGELOG.md');
|
|
323
|
+
const changelogDest = path.join(acePath, 'CHANGELOG.md');
|
|
324
|
+
if (fs.existsSync(changelogSrc)) {
|
|
325
|
+
fs.copyFileSync(changelogSrc, changelogDest);
|
|
326
|
+
log(` ✓ CHANGELOG.md installed`, colors.green);
|
|
327
|
+
}
|
|
328
|
+
|
|
281
329
|
return basePath;
|
|
282
330
|
}
|
|
283
331
|
|
|
@@ -355,21 +403,92 @@ async function main() {
|
|
|
355
403
|
installedPaths.push({ runtime, name: RUNTIMES[runtime].name, path: installedPath });
|
|
356
404
|
}
|
|
357
405
|
|
|
406
|
+
// Configure hooks and statusline in settings.json (Claude Code only, not Crush)
|
|
407
|
+
for (const { runtime, path: basePath } of installedPaths) {
|
|
408
|
+
if (runtime !== 'claude') continue;
|
|
409
|
+
|
|
410
|
+
const settingsPath = path.join(basePath, 'settings.json');
|
|
411
|
+
const settings = readSettings(settingsPath);
|
|
412
|
+
|
|
413
|
+
const statuslineCommand = buildHookCommand(basePath, 'ace-statusline.js');
|
|
414
|
+
const updateCheckCommand = buildHookCommand(basePath, 'ace-check-update.js');
|
|
415
|
+
|
|
416
|
+
// Register SessionStart hook for background update checking
|
|
417
|
+
if (!settings.hooks) settings.hooks = {};
|
|
418
|
+
if (!settings.hooks.SessionStart) settings.hooks.SessionStart = [];
|
|
419
|
+
|
|
420
|
+
const hasAceUpdateHook = settings.hooks.SessionStart.some(entry =>
|
|
421
|
+
entry.hooks && entry.hooks.some(h => h.command && h.command.includes('ace-check-update'))
|
|
422
|
+
);
|
|
423
|
+
if (!hasAceUpdateHook) {
|
|
424
|
+
settings.hooks.SessionStart.push({
|
|
425
|
+
hooks: [{ type: 'command', command: updateCheckCommand }]
|
|
426
|
+
});
|
|
427
|
+
log(` ✓ Configured update check hook`, colors.green);
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// Handle statusline configuration
|
|
431
|
+
const hasExisting = settings.statusLine != null;
|
|
432
|
+
const isAceStatusline = hasExisting && settings.statusLine.command &&
|
|
433
|
+
settings.statusLine.command.includes('ace-statusline');
|
|
434
|
+
|
|
435
|
+
if (!hasExisting || flags.forceStatusline) {
|
|
436
|
+
// No existing statusline or force flag — install ACE statusline
|
|
437
|
+
settings.statusLine = { type: 'command', command: statuslineCommand };
|
|
438
|
+
log(` ✓ Configured statusline`, colors.green);
|
|
439
|
+
} else if (isAceStatusline) {
|
|
440
|
+
// Already ACE statusline — update path
|
|
441
|
+
settings.statusLine = { type: 'command', command: statuslineCommand };
|
|
442
|
+
log(` ✓ Updated statusline`, colors.green);
|
|
443
|
+
} else if (isInteractive) {
|
|
444
|
+
// Existing non-ACE statusline in interactive mode — ask user
|
|
445
|
+
const existingCmd = settings.statusLine.command || settings.statusLine.url || '(custom)';
|
|
446
|
+
log(`\n ⚠ Existing statusline detected`, colors.yellow);
|
|
447
|
+
log(` Current: ${existingCmd}`, colors.dim);
|
|
448
|
+
log(`\n ACE statusline shows:`, colors.cyan);
|
|
449
|
+
log(` • Model name`, colors.dim);
|
|
450
|
+
log(` • Current task (from todo list)`, colors.dim);
|
|
451
|
+
log(` • Context window usage (color-coded)`, colors.dim);
|
|
452
|
+
log(` • Update notifications`, colors.dim);
|
|
453
|
+
|
|
454
|
+
const rl = createPrompt();
|
|
455
|
+
const choice = await ask(rl, '\n What would you like to do?', [
|
|
456
|
+
{ label: 'Keep existing statusline', value: 'keep' },
|
|
457
|
+
{ label: 'Replace with ACE statusline', value: 'replace' },
|
|
458
|
+
]);
|
|
459
|
+
rl.close();
|
|
460
|
+
|
|
461
|
+
if (choice === 'replace') {
|
|
462
|
+
settings.statusLine = { type: 'command', command: statuslineCommand };
|
|
463
|
+
log(` ✓ Configured statusline`, colors.green);
|
|
464
|
+
} else {
|
|
465
|
+
log(` ⚠ Skipping statusline (kept existing)`, colors.yellow);
|
|
466
|
+
}
|
|
467
|
+
} else {
|
|
468
|
+
// Non-interactive with existing statusline — skip
|
|
469
|
+
log(` ⚠ Skipping statusline (already configured, use --force-statusline to replace)`, colors.yellow);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// Write settings
|
|
473
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
474
|
+
}
|
|
475
|
+
|
|
358
476
|
// Show success message
|
|
359
477
|
log(`\n${'═'.repeat(50)}`, colors.green);
|
|
360
478
|
log(` ACE installed successfully!`, colors.green + colors.bright);
|
|
361
479
|
log(`${'═'.repeat(50)}`, colors.green);
|
|
362
480
|
|
|
363
481
|
log(`\nInstalled locations:`, colors.cyan);
|
|
364
|
-
for (const { name, path: p } of installedPaths) {
|
|
365
|
-
log(` ${
|
|
482
|
+
for (const { name: runtimeName, path: p } of installedPaths) {
|
|
483
|
+
log(` ${runtimeName}: ${p}`, colors.dim);
|
|
366
484
|
}
|
|
367
485
|
|
|
368
486
|
log(`\nInstalled structure:`, colors.cyan);
|
|
369
|
-
for (const {
|
|
487
|
+
for (const { path: p } of installedPaths) {
|
|
370
488
|
log(` ${p}/`, colors.dim);
|
|
371
489
|
log(` commands/ace/ Slash commands`, colors.dim);
|
|
372
490
|
log(` agents/ Agent definitions`, colors.dim);
|
|
491
|
+
log(` hooks/ Statusline & update hooks`, colors.dim);
|
|
373
492
|
log(` ${ACE_DIR_NAME}/`, colors.dim);
|
|
374
493
|
log(` templates/ Project & artifact templates`, colors.dim);
|
|
375
494
|
log(` utils/ Formatting & utility guides`, colors.dim);
|
|
@@ -55,6 +55,7 @@ allowed-tools:
|
|
|
55
55
|
<execution-context>
|
|
56
56
|
<execute-story-workflow>@~/.claude/agile-context-engineering/workflows/execute-story.xml</execute-story-workflow>
|
|
57
57
|
<story-template>@~/.claude/agile-context-engineering/templates/product/story.xml</story-template>
|
|
58
|
+
<walkthrough-template>@~/.claude/agile-context-engineering/templates/wiki/walkthrough.xml</walkthrough-template>
|
|
58
59
|
<questioning>@~/.claude/agile-context-engineering/utils/questioning.xml</questioning>
|
|
59
60
|
<ui-formatting>@~/.claude/agile-context-engineering/utils/ui-formatting.md</ui-formatting>
|
|
60
61
|
</execution-context>
|
package/commands/ace/help.md
CHANGED
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ace:help
|
|
3
|
-
description: Check project initialization status and suggest next steps
|
|
4
|
-
argument-hint: ""
|
|
5
|
-
allowed-tools:
|
|
6
|
-
- Read
|
|
7
|
-
- Bash
|
|
8
|
-
- Write
|
|
9
|
-
- AskUserQuestion
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
```xml
|
|
13
|
-
<command>
|
|
14
|
-
|
|
15
|
-
<execution-time>
|
|
16
|
-
<runs-after>
|
|
17
|
-
<trigger>At any time — to check which ACE documents exist and what to do next</trigger>
|
|
18
|
-
<trigger>At the start of a new project — to see the initialization checklist</trigger>
|
|
19
|
-
</runs-after>
|
|
20
|
-
<use-when>
|
|
21
|
-
<condition>Starting a new project and want to see what needs to be set up</condition>
|
|
22
|
-
<condition>Returning to a project and want to check initialization status</condition>
|
|
23
|
-
<condition>Unsure which ACE command to run next</condition>
|
|
24
|
-
</use-when>
|
|
25
|
-
</execution-time>
|
|
26
|
-
|
|
27
|
-
<input>
|
|
28
|
-
<flags>
|
|
29
|
-
</flags>
|
|
30
|
-
|
|
31
|
-
<parameters>
|
|
32
|
-
<required>
|
|
33
|
-
</required>
|
|
34
|
-
|
|
35
|
-
<optional>
|
|
36
|
-
</optional>
|
|
37
|
-
</parameters>
|
|
38
|
-
</input>
|
|
39
|
-
|
|
40
|
-
<execution-context>
|
|
41
|
-
<help-workflow>@~/.claude/agile-context-engineering/workflows/help.xml</help-workflow>
|
|
42
|
-
<questioning>@~/.claude/agile-context-engineering/utils/questioning.xml</questioning>
|
|
43
|
-
<ui-formatting>@~/.claude/agile-context-engineering/utils/ui-formatting.md</ui-formatting>
|
|
44
|
-
</execution-context>
|
|
45
|
-
|
|
46
|
-
<output>
|
|
47
|
-
<objective>
|
|
48
|
-
Detect which ACE documents exist (product vision, system architecture, system structure,
|
|
49
|
-
coding standards, testing framework). Display a status dashboard showing what's done
|
|
50
|
-
and what's missing. Suggest the next command to run based on gaps.
|
|
51
|
-
</objective>
|
|
52
|
-
|
|
53
|
-
<artifacts>
|
|
54
|
-
- .ace/settings.json (created on first run if missing)
|
|
55
|
-
</artifacts>
|
|
56
|
-
</output>
|
|
57
|
-
|
|
58
|
-
<process>
|
|
59
|
-
Execute the help workflow from
|
|
60
|
-
`@~/.claude/agile-context-engineering/workflows/help.xml` end-to-end.
|
|
61
|
-
This is a lightweight state-check and routing workflow.
|
|
62
|
-
|
|
63
|
-
CRITICAL MANDATORY STEP — DO NOT SKIP:
|
|
64
|
-
Before displaying the status dashboard, you MUST run:
|
|
65
|
-
```bash
|
|
66
|
-
node ~/.claude/agile-context-engineering/src/ace-tools.js sync-agent-teams --raw
|
|
67
|
-
```
|
|
68
|
-
Then you MUST use `AskUserQuestion` to ask the user whether they want to
|
|
69
|
-
enable or disable Claude Code Agent Teams (experimental feature).
|
|
70
|
-
This step is NOT optional. You MUST present this question every time.
|
|
71
|
-
|
|
72
|
-
When the user chooses to enable or disable Agent Teams, you MUST run the
|
|
73
|
-
bash command — NEVER directly edit .ace/settings.json or .claude/settings.json:
|
|
74
|
-
```bash
|
|
75
|
-
node ~/.claude/agile-context-engineering/src/ace-tools.js write-agent-teams true
|
|
76
|
-
```
|
|
77
|
-
or
|
|
78
|
-
```bash
|
|
79
|
-
node ~/.claude/agile-context-engineering/src/ace-tools.js write-agent-teams false
|
|
80
|
-
```
|
|
81
|
-
The write-agent-teams command updates BOTH .ace/settings.json AND .claude/settings.json.
|
|
82
|
-
Direct file edits will cause the two files to go out of sync.
|
|
83
|
-
</process>
|
|
84
|
-
|
|
85
|
-
<next-steps>
|
|
86
|
-
**Specialized commands for each document:**
|
|
87
|
-
- `/ace:plan-product-vision` — Create or update the product vision
|
|
88
|
-
- `/ace:map-system` — Map codebase structure, architecture, and testing framework
|
|
89
|
-
- `/ace:init-coding-standards` — Generate tailored coding standards
|
|
90
|
-
</next-steps>
|
|
91
|
-
|
|
92
|
-
</command>
|
|
93
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: ace:help
|
|
3
|
+
description: Check project initialization status and suggest next steps
|
|
4
|
+
argument-hint: ""
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- Write
|
|
9
|
+
- AskUserQuestion
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
```xml
|
|
13
|
+
<command>
|
|
14
|
+
|
|
15
|
+
<execution-time>
|
|
16
|
+
<runs-after>
|
|
17
|
+
<trigger>At any time — to check which ACE documents exist and what to do next</trigger>
|
|
18
|
+
<trigger>At the start of a new project — to see the initialization checklist</trigger>
|
|
19
|
+
</runs-after>
|
|
20
|
+
<use-when>
|
|
21
|
+
<condition>Starting a new project and want to see what needs to be set up</condition>
|
|
22
|
+
<condition>Returning to a project and want to check initialization status</condition>
|
|
23
|
+
<condition>Unsure which ACE command to run next</condition>
|
|
24
|
+
</use-when>
|
|
25
|
+
</execution-time>
|
|
26
|
+
|
|
27
|
+
<input>
|
|
28
|
+
<flags>
|
|
29
|
+
</flags>
|
|
30
|
+
|
|
31
|
+
<parameters>
|
|
32
|
+
<required>
|
|
33
|
+
</required>
|
|
34
|
+
|
|
35
|
+
<optional>
|
|
36
|
+
</optional>
|
|
37
|
+
</parameters>
|
|
38
|
+
</input>
|
|
39
|
+
|
|
40
|
+
<execution-context>
|
|
41
|
+
<help-workflow>@~/.claude/agile-context-engineering/workflows/help.xml</help-workflow>
|
|
42
|
+
<questioning>@~/.claude/agile-context-engineering/utils/questioning.xml</questioning>
|
|
43
|
+
<ui-formatting>@~/.claude/agile-context-engineering/utils/ui-formatting.md</ui-formatting>
|
|
44
|
+
</execution-context>
|
|
45
|
+
|
|
46
|
+
<output>
|
|
47
|
+
<objective>
|
|
48
|
+
Detect which ACE documents exist (product vision, system architecture, system structure,
|
|
49
|
+
coding standards, testing framework). Display a status dashboard showing what's done
|
|
50
|
+
and what's missing. Suggest the next command to run based on gaps.
|
|
51
|
+
</objective>
|
|
52
|
+
|
|
53
|
+
<artifacts>
|
|
54
|
+
- .ace/settings.json (created on first run if missing)
|
|
55
|
+
</artifacts>
|
|
56
|
+
</output>
|
|
57
|
+
|
|
58
|
+
<process>
|
|
59
|
+
Execute the help workflow from
|
|
60
|
+
`@~/.claude/agile-context-engineering/workflows/help.xml` end-to-end.
|
|
61
|
+
This is a lightweight state-check and routing workflow.
|
|
62
|
+
|
|
63
|
+
CRITICAL MANDATORY STEP — DO NOT SKIP:
|
|
64
|
+
Before displaying the status dashboard, you MUST run:
|
|
65
|
+
```bash
|
|
66
|
+
node ~/.claude/agile-context-engineering/src/ace-tools.js sync-agent-teams --raw
|
|
67
|
+
```
|
|
68
|
+
Then you MUST use `AskUserQuestion` to ask the user whether they want to
|
|
69
|
+
enable or disable Claude Code Agent Teams (experimental feature).
|
|
70
|
+
This step is NOT optional. You MUST present this question every time.
|
|
71
|
+
|
|
72
|
+
When the user chooses to enable or disable Agent Teams, you MUST run the
|
|
73
|
+
bash command — NEVER directly edit .ace/settings.json or .claude/settings.json:
|
|
74
|
+
```bash
|
|
75
|
+
node ~/.claude/agile-context-engineering/src/ace-tools.js write-agent-teams true
|
|
76
|
+
```
|
|
77
|
+
or
|
|
78
|
+
```bash
|
|
79
|
+
node ~/.claude/agile-context-engineering/src/ace-tools.js write-agent-teams false
|
|
80
|
+
```
|
|
81
|
+
The write-agent-teams command updates BOTH .ace/settings.json AND .claude/settings.json.
|
|
82
|
+
Direct file edits will cause the two files to go out of sync.
|
|
83
|
+
</process>
|
|
84
|
+
|
|
85
|
+
<next-steps>
|
|
86
|
+
**Specialized commands for each document:**
|
|
87
|
+
- `/ace:plan-product-vision` — Create or update the product vision
|
|
88
|
+
- `/ace:map-system` — Map codebase structure, architecture, and testing framework
|
|
89
|
+
- `/ace:init-coding-standards` — Generate tailored coding standards
|
|
90
|
+
</next-steps>
|
|
91
|
+
|
|
92
|
+
</command>
|
|
93
|
+
```
|