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.
Files changed (42) hide show
  1. package/.blueprint/agents/AGENT_SPECIFICATION_ALEX.md +33 -3
  2. package/.blueprint/features/feature_config-factory/FEATURE_SPEC.md +138 -0
  3. package/.blueprint/features/feature_config-factory/IMPLEMENTATION_PLAN.md +187 -0
  4. package/.blueprint/features/feature_config-factory/handoff-nigel.md +57 -0
  5. package/.blueprint/features/feature_extract-prompt-util/FEATURE_SPEC.md +42 -0
  6. package/.blueprint/features/feature_fix-status-icons/FEATURE_SPEC.md +37 -0
  7. package/.blueprint/features/feature_murm-subagent/FEATURE_SPEC.md +137 -0
  8. package/.blueprint/features/feature_murm-subagent/SKILL_CHANGES.md +345 -0
  9. package/.blueprint/features/feature_split-cli-commands/FEATURE_SPEC.md +125 -0
  10. package/.blueprint/features/feature_split-cli-commands/IMPLEMENTATION_PLAN.md +119 -0
  11. package/.blueprint/features/feature_split-cli-commands/handoff-nigel.md +45 -0
  12. package/.blueprint/features/feature_theme-adoption/FEATURE_SPEC.md +143 -0
  13. package/.blueprint/features/feature_theme-adoption/IMPLEMENTATION_PLAN.md +68 -0
  14. package/.blueprint/features/feature_theme-adoption/handoff-nigel.md +35 -0
  15. package/.blueprint/templates/BACKLOG_TEMPLATE.md +46 -0
  16. package/README.md +19 -10
  17. package/SKILL.md +377 -3
  18. package/bin/cli.js +20 -411
  19. package/package.json +1 -1
  20. package/src/commands/feedback-config.js +32 -0
  21. package/src/commands/help.js +81 -0
  22. package/src/commands/history.js +42 -0
  23. package/src/commands/init.js +12 -0
  24. package/src/commands/insights.js +23 -0
  25. package/src/commands/murm-config.js +52 -0
  26. package/src/commands/murm.js +109 -0
  27. package/src/commands/queue.js +19 -0
  28. package/src/commands/retry-config.js +28 -0
  29. package/src/commands/stack-config.js +32 -0
  30. package/src/commands/update.js +12 -0
  31. package/src/commands/utils.js +24 -0
  32. package/src/commands/validate.js +15 -0
  33. package/src/config-factory.js +190 -0
  34. package/src/feedback.js +5 -2
  35. package/src/init.js +1 -15
  36. package/src/insights.js +19 -16
  37. package/src/retry.js +5 -2
  38. package/src/stack.js +4 -1
  39. package/src/theme.js +4 -4
  40. package/src/update.js +2 -15
  41. package/src/utils.js +26 -0
  42. 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
- console.log('\nRetry Configuration\n');
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
- console.log('\nStack Configuration\n');
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
- 'parallel_queued': '\u00b7', // ·
46
+ 'murm_queued': '\u00b7', // ·
47
47
  'worktree_created': '\u25cb', // ○
48
- 'parallel_running': '\u25d4', // ◔
48
+ 'murm_running': '\u25d4', // ◔
49
49
  'merge_pending': '\u25d1', // ◑
50
- 'parallel_complete': '\u2713', // ✓
51
- 'parallel_failed': '\u2717', // ✗
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
- const readline = require('readline');
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 green = useColor ? '\x1b[32m' : '';
139
- const red = useColor ? '\x1b[31m' : '';
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');