murmur8 4.2.0 → 4.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/.blueprint/agents/AGENT_SPECIFICATION_ALEX.md +33 -3
- package/.blueprint/features/feature_config-factory/FEATURE_SPEC.md +138 -0
- package/.blueprint/features/feature_config-factory/IMPLEMENTATION_PLAN.md +187 -0
- package/.blueprint/features/feature_config-factory/handoff-nigel.md +57 -0
- package/.blueprint/features/feature_extract-prompt-util/FEATURE_SPEC.md +42 -0
- package/.blueprint/features/feature_fix-status-icons/FEATURE_SPEC.md +37 -0
- package/.blueprint/features/feature_murm-subagent/FEATURE_SPEC.md +137 -0
- package/.blueprint/features/feature_murm-subagent/SKILL_CHANGES.md +345 -0
- package/.blueprint/features/feature_split-cli-commands/FEATURE_SPEC.md +125 -0
- package/.blueprint/features/feature_split-cli-commands/IMPLEMENTATION_PLAN.md +119 -0
- package/.blueprint/features/feature_split-cli-commands/handoff-nigel.md +45 -0
- package/.blueprint/features/feature_theme-adoption/FEATURE_SPEC.md +143 -0
- package/.blueprint/features/feature_theme-adoption/IMPLEMENTATION_PLAN.md +68 -0
- package/.blueprint/features/feature_theme-adoption/handoff-nigel.md +35 -0
- package/.blueprint/templates/BACKLOG_TEMPLATE.md +46 -0
- package/README.md +19 -10
- package/SKILL.md +377 -3
- package/bin/cli.js +20 -411
- package/package.json +1 -1
- package/src/commands/feedback-config.js +32 -0
- package/src/commands/help.js +81 -0
- package/src/commands/history.js +42 -0
- package/src/commands/init.js +12 -0
- package/src/commands/insights.js +23 -0
- package/src/commands/murm-config.js +52 -0
- package/src/commands/murm.js +109 -0
- package/src/commands/queue.js +19 -0
- package/src/commands/retry-config.js +28 -0
- package/src/commands/stack-config.js +32 -0
- package/src/commands/update.js +12 -0
- package/src/commands/utils.js +24 -0
- package/src/commands/validate.js +15 -0
- package/src/config-factory.js +190 -0
- package/src/feedback.js +5 -2
- package/src/init.js +1 -15
- package/src/insights.js +19 -16
- package/src/retry.js +5 -2
- package/src/stack.js +4 -1
- package/src/theme.js +4 -4
- package/src/update.js +2 -15
- package/src/utils.js +26 -0
- package/src/validate.js +5 -12
package/src/retry.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const { readHistoryFile } = require('./history');
|
|
4
|
+
const { colorize } = require('./theme');
|
|
4
5
|
|
|
5
6
|
const CONFIG_FILE = '.claude/retry-config.json';
|
|
6
7
|
|
|
@@ -179,11 +180,13 @@ function shouldRetry(stage, featureSlug, history, config, attemptCount) {
|
|
|
179
180
|
*/
|
|
180
181
|
function displayConfig() {
|
|
181
182
|
const config = readConfig();
|
|
182
|
-
|
|
183
|
+
const useColor = process.stdout.isTTY;
|
|
184
|
+
|
|
185
|
+
console.log('\n' + colorize('Retry Configuration', 'cyan', useColor) + '\n');
|
|
183
186
|
console.log(` Max retries: ${config.maxRetries}`);
|
|
184
187
|
console.log(` Window size: ${config.windowSize}`);
|
|
185
188
|
console.log(` High failure threshold: ${config.highFailureThreshold}`);
|
|
186
|
-
console.log('\n Stage Strategies:');
|
|
189
|
+
console.log('\n ' + colorize('Stage Strategies:', 'cyan', useColor));
|
|
187
190
|
for (const [stage, strategies] of Object.entries(config.strategies)) {
|
|
188
191
|
console.log(` ${stage.padEnd(16)}: ${strategies.join(' -> ')}`);
|
|
189
192
|
}
|
package/src/stack.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const { colorize } = require('./theme');
|
|
3
4
|
|
|
4
5
|
const CONFIG_FILE = '.claude/stack-config.json';
|
|
5
6
|
|
|
@@ -296,7 +297,9 @@ function detectStackConfig(projectDir) {
|
|
|
296
297
|
*/
|
|
297
298
|
function displayStackConfig() {
|
|
298
299
|
const config = readStackConfig();
|
|
299
|
-
|
|
300
|
+
const useColor = process.stdout.isTTY;
|
|
301
|
+
|
|
302
|
+
console.log('\n' + colorize('Stack Configuration', 'cyan', useColor) + '\n');
|
|
300
303
|
console.log(` language: ${config.language || '(not set)'}`);
|
|
301
304
|
console.log(` runtime: ${config.runtime || '(not set)'}`);
|
|
302
305
|
console.log(` packageManager: ${config.packageManager || '(not set)'}`);
|
package/src/theme.js
CHANGED
|
@@ -43,12 +43,12 @@ const STAGE_NAMES = {
|
|
|
43
43
|
// --- Status Icons (replacing emoji) ---
|
|
44
44
|
|
|
45
45
|
const STATUS_ICONS = {
|
|
46
|
-
'
|
|
46
|
+
'murm_queued': '\u00b7', // ·
|
|
47
47
|
'worktree_created': '\u25cb', // ○
|
|
48
|
-
'
|
|
48
|
+
'murm_running': '\u25d4', // ◔
|
|
49
49
|
'merge_pending': '\u25d1', // ◑
|
|
50
|
-
'
|
|
51
|
-
'
|
|
50
|
+
'murm_complete': '\u2713', // ✓
|
|
51
|
+
'murm_failed': '\u2717', // ✗
|
|
52
52
|
'merge_conflict': '\u26a0', // ⚠
|
|
53
53
|
'aborted': '\u25a0' // ■
|
|
54
54
|
};
|
package/src/update.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
const { prompt } = require('./utils');
|
|
4
5
|
|
|
5
6
|
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
6
7
|
const TARGET_DIR = process.cwd();
|
|
@@ -18,20 +19,6 @@ const UPDATABLE = [
|
|
|
18
19
|
'ways_of_working'
|
|
19
20
|
];
|
|
20
21
|
|
|
21
|
-
async function prompt(question) {
|
|
22
|
-
const rl = readline.createInterface({
|
|
23
|
-
input: process.stdin,
|
|
24
|
-
output: process.stdout
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
return new Promise((resolve) => {
|
|
28
|
-
rl.question(question, (answer) => {
|
|
29
|
-
rl.close();
|
|
30
|
-
resolve(answer.toLowerCase().trim());
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
22
|
function copyDir(src, dest) {
|
|
36
23
|
fs.mkdirSync(dest, { recursive: true });
|
|
37
24
|
|
package/src/utils.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const readline = require('readline');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Prompts the user with a question and returns the answer.
|
|
7
|
+
* @param {string} question - The question to ask
|
|
8
|
+
* @returns {Promise<string>} The answer, lowercased and trimmed
|
|
9
|
+
*/
|
|
10
|
+
async function prompt(question) {
|
|
11
|
+
const rl = readline.createInterface({
|
|
12
|
+
input: process.stdin,
|
|
13
|
+
output: process.stdout
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
|
+
rl.question(question, (answer) => {
|
|
18
|
+
rl.close();
|
|
19
|
+
resolve(answer.toLowerCase().trim());
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = {
|
|
25
|
+
prompt
|
|
26
|
+
};
|
package/src/validate.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const { colorize } = require('./theme');
|
|
3
4
|
|
|
4
5
|
const REQUIRED_DIRS = ['.blueprint', '.business_context', '.claude/commands'];
|
|
5
6
|
const AGENT_FILES = [
|
|
@@ -135,12 +136,8 @@ async function validate() {
|
|
|
135
136
|
function formatOutput(result, useColor = false) {
|
|
136
137
|
const lines = [];
|
|
137
138
|
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
const reset = useColor ? '\x1b[0m' : '';
|
|
141
|
-
|
|
142
|
-
const passIndicator = useColor ? `${green}\u2713${reset}` : '[PASS]';
|
|
143
|
-
const failIndicator = useColor ? `${red}\u2717${reset}` : '[FAIL]';
|
|
139
|
+
const passIndicator = useColor ? colorize('\u2713', 'green', useColor) : '[PASS]';
|
|
140
|
+
const failIndicator = useColor ? colorize('\u2717', 'red', useColor) : '[FAIL]';
|
|
144
141
|
|
|
145
142
|
for (const check of result.checks) {
|
|
146
143
|
const indicator = check.passed ? passIndicator : failIndicator;
|
|
@@ -152,14 +149,10 @@ function formatOutput(result, useColor = false) {
|
|
|
152
149
|
|
|
153
150
|
lines.push('');
|
|
154
151
|
if (result.success) {
|
|
155
|
-
lines.push(useColor
|
|
156
|
-
? `${green}All checks passed. Project is ready.${reset}`
|
|
157
|
-
: 'All checks passed. Project is ready.');
|
|
152
|
+
lines.push(colorize('All checks passed. Project is ready.', 'green', useColor));
|
|
158
153
|
} else {
|
|
159
154
|
const failedCount = result.checks.filter(c => !c.passed).length;
|
|
160
|
-
lines.push(useColor
|
|
161
|
-
? `${red}${failedCount} check(s) failed.${reset}`
|
|
162
|
-
: `${failedCount} check(s) failed.`);
|
|
155
|
+
lines.push(colorize(`${failedCount} check(s) failed.`, 'red', useColor));
|
|
163
156
|
}
|
|
164
157
|
|
|
165
158
|
return lines.join('\n');
|