murmur8 3.5.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_BA_CASS.md +239 -0
- package/.blueprint/agents/AGENT_DEVELOPER_CODEY.md +308 -0
- package/.blueprint/agents/AGENT_SPECIFICATION_ALEX.md +183 -0
- package/.blueprint/agents/AGENT_TESTER_NIGEL.md +159 -0
- package/.blueprint/agents/GUARDRAILS.md +83 -0
- package/.blueprint/agents/TEAM_MANIFESTO.md +91 -0
- package/.blueprint/features/.gitkeep +0 -0
- package/.blueprint/features/feature_adaptive-retry/FEATURE_SPEC.md +239 -0
- package/.blueprint/features/feature_adaptive-retry/IMPLEMENTATION_PLAN.md +48 -0
- package/.blueprint/features/feature_adaptive-retry/story-prompt-modification.md +85 -0
- package/.blueprint/features/feature_adaptive-retry/story-retry-config.md +89 -0
- package/.blueprint/features/feature_adaptive-retry/story-should-retry.md +98 -0
- package/.blueprint/features/feature_adaptive-retry/story-strategy-recommendation.md +85 -0
- package/.blueprint/features/feature_agent-guardrails/FEATURE_SPEC.md +328 -0
- package/.blueprint/features/feature_agent-guardrails/IMPLEMENTATION_PLAN.md +90 -0
- package/.blueprint/features/feature_agent-guardrails/story-citation-requirements.md +50 -0
- package/.blueprint/features/feature_agent-guardrails/story-confidentiality.md +50 -0
- package/.blueprint/features/feature_agent-guardrails/story-escalation-protocol.md +55 -0
- package/.blueprint/features/feature_agent-guardrails/story-source-restrictions.md +50 -0
- package/.blueprint/features/feature_compressed-feedback/FEATURE_SPEC.md +136 -0
- package/.blueprint/features/feature_compressed-feedback/IMPLEMENTATION_PLAN.md +40 -0
- package/.blueprint/features/feature_feedback-loop/FEATURE_SPEC.md +347 -0
- package/.blueprint/features/feature_feedback-loop/IMPLEMENTATION_PLAN.md +71 -0
- package/.blueprint/features/feature_feedback-loop/story-feedback-collection.md +63 -0
- package/.blueprint/features/feature_feedback-loop/story-feedback-config.md +61 -0
- package/.blueprint/features/feature_feedback-loop/story-feedback-insights.md +63 -0
- package/.blueprint/features/feature_feedback-loop/story-quality-gates.md +57 -0
- package/.blueprint/features/feature_interactive-alex/FEATURE_SPEC.md +263 -0
- package/.blueprint/features/feature_interactive-alex/IMPLEMENTATION_PLAN.md +69 -0
- package/.blueprint/features/feature_interactive-alex/handoff-alex.md +19 -0
- package/.blueprint/features/feature_interactive-alex/handoff-cass.md +21 -0
- package/.blueprint/features/feature_interactive-alex/handoff-nigel.md +19 -0
- package/.blueprint/features/feature_interactive-alex/story-flag-routing.md +54 -0
- package/.blueprint/features/feature_interactive-alex/story-iterative-drafting.md +65 -0
- package/.blueprint/features/feature_interactive-alex/story-pipeline-integration.md +66 -0
- package/.blueprint/features/feature_interactive-alex/story-session-lifecycle.md +75 -0
- package/.blueprint/features/feature_interactive-alex/story-system-spec-creation.md +57 -0
- package/.blueprint/features/feature_lazy-business-context/FEATURE_SPEC.md +140 -0
- package/.blueprint/features/feature_lazy-business-context/IMPLEMENTATION_PLAN.md +54 -0
- package/.blueprint/features/feature_model-native-features/FEATURE_SPEC.md +174 -0
- package/.blueprint/features/feature_model-native-features/IMPLEMENTATION_PLAN.md +45 -0
- package/.blueprint/features/feature_parallel-abort/FEATURE_SPEC.md +117 -0
- package/.blueprint/features/feature_parallel-confirm/FEATURE_SPEC.md +90 -0
- package/.blueprint/features/feature_parallel-features/FEATURE_SPEC.md +291 -0
- package/.blueprint/features/feature_parallel-features/IMPLEMENTATION_PLAN.md +73 -0
- package/.blueprint/features/feature_parallel-lock/FEATURE_SPEC.md +119 -0
- package/.blueprint/features/feature_parallel-logging/FEATURE_SPEC.md +105 -0
- package/.blueprint/features/feature_parallel-preflight/FEATURE_SPEC.md +141 -0
- package/.blueprint/features/feature_pipeline-history/FEATURE_SPEC.md +239 -0
- package/.blueprint/features/feature_pipeline-history/IMPLEMENTATION_PLAN.md +71 -0
- package/.blueprint/features/feature_pipeline-history/story-clear-history.md +73 -0
- package/.blueprint/features/feature_pipeline-history/story-display-history.md +75 -0
- package/.blueprint/features/feature_pipeline-history/story-record-execution.md +76 -0
- package/.blueprint/features/feature_pipeline-history/story-show-statistics.md +85 -0
- package/.blueprint/features/feature_pipeline-insights/FEATURE_SPEC.md +288 -0
- package/.blueprint/features/feature_pipeline-insights/IMPLEMENTATION_PLAN.md +65 -0
- package/.blueprint/features/feature_pipeline-insights/story-anomaly-detection.md +71 -0
- package/.blueprint/features/feature_pipeline-insights/story-bottleneck-analysis.md +75 -0
- package/.blueprint/features/feature_pipeline-insights/story-failure-patterns.md +75 -0
- package/.blueprint/features/feature_pipeline-insights/story-json-output.md +75 -0
- package/.blueprint/features/feature_pipeline-insights/story-trend-analysis.md +78 -0
- package/.blueprint/features/feature_shared-guardrails/FEATURE_SPEC.md +119 -0
- package/.blueprint/features/feature_shared-guardrails/IMPLEMENTATION_PLAN.md +34 -0
- package/.blueprint/features/feature_shared-guardrails/story-extract-guardrails.md +60 -0
- package/.blueprint/features/feature_shared-guardrails/story-update-init-commands.md +63 -0
- package/.blueprint/features/feature_slim-agent-prompts/FEATURE_SPEC.md +145 -0
- package/.blueprint/features/feature_slim-agent-prompts/IMPLEMENTATION_PLAN.md +87 -0
- package/.blueprint/features/feature_slim-agent-prompts/story-create-runtime-prompt-template.md +59 -0
- package/.blueprint/features/feature_slim-agent-prompts/story-create-slim-agent-prompts.md +65 -0
- package/.blueprint/features/feature_slim-agent-prompts/story-skill-integration.md +53 -0
- package/.blueprint/features/feature_smart-story-routing/FEATURE_SPEC.md +147 -0
- package/.blueprint/features/feature_smart-story-routing/IMPLEMENTATION_PLAN.md +73 -0
- package/.blueprint/features/feature_template-extraction/FEATURE_SPEC.md +134 -0
- package/.blueprint/features/feature_template-extraction/IMPLEMENTATION_PLAN.md +46 -0
- package/.blueprint/features/feature_upstream-summaries/FEATURE_SPEC.md +150 -0
- package/.blueprint/features/feature_upstream-summaries/IMPLEMENTATION_PLAN.md +70 -0
- package/.blueprint/features/feature_validate-command/FEATURE_SPEC.md +209 -0
- package/.blueprint/features/feature_validate-command/IMPLEMENTATION_PLAN.md +59 -0
- package/.blueprint/features/feature_validate-command/story-failure-output.md +61 -0
- package/.blueprint/features/feature_validate-command/story-node-version-check.md +52 -0
- package/.blueprint/features/feature_validate-command/story-run-validation.md +59 -0
- package/.blueprint/features/feature_validate-command/story-success-output.md +50 -0
- package/.blueprint/prompts/TEMPLATE.md +65 -0
- package/.blueprint/prompts/alex-runtime.md +49 -0
- package/.blueprint/prompts/cass-runtime.md +46 -0
- package/.blueprint/prompts/codey-implement-runtime.md +52 -0
- package/.blueprint/prompts/codey-plan-runtime.md +47 -0
- package/.blueprint/prompts/nigel-runtime.md +47 -0
- package/.blueprint/system_specification/.gitkeep +0 -0
- package/.blueprint/system_specification/SYSTEM_SPEC.md +248 -0
- package/.blueprint/templates/FEATURE_SPEC.md +125 -0
- package/.blueprint/templates/STORY_TEMPLATE.md +96 -0
- package/.blueprint/templates/SYSTEM_SPEC.md +128 -0
- package/.blueprint/templates/TEST_TEMPLATE.md +76 -0
- package/.blueprint/ways_of_working/DEVELOPMENT_RITUAL.md +178 -0
- package/.business_context/README.md +27 -0
- package/LICENSE +21 -0
- package/README.md +564 -0
- package/SKILL.md +840 -0
- package/bin/cli.js +388 -0
- package/package.json +36 -0
- package/src/business-context.js +91 -0
- package/src/classifier.js +173 -0
- package/src/feedback.js +201 -0
- package/src/handoff.js +148 -0
- package/src/history.js +306 -0
- package/src/index.js +170 -0
- package/src/init.js +139 -0
- package/src/insights.js +504 -0
- package/src/interactive.js +338 -0
- package/src/orchestrator.js +217 -0
- package/src/parallel.js +1544 -0
- package/src/retry.js +274 -0
- package/src/stack.js +320 -0
- package/src/tools/index.js +27 -0
- package/src/tools/prompts.js +45 -0
- package/src/tools/schemas.js +38 -0
- package/src/tools/validation.js +83 -0
- package/src/update.js +112 -0
- package/src/validate.js +172 -0
package/src/index.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
const { init } = require('./init');
|
|
2
|
+
const { update } = require('./update');
|
|
3
|
+
const { validate, formatOutput, checkNodeVersion } = require('./validate');
|
|
4
|
+
const { recordHistory, displayHistory, showStats, clearHistory, storeStageFeedback } = require('./history');
|
|
5
|
+
const {
|
|
6
|
+
readConfig,
|
|
7
|
+
writeConfig,
|
|
8
|
+
resetConfig,
|
|
9
|
+
calculateFailureRate,
|
|
10
|
+
recommendStrategy,
|
|
11
|
+
applyStrategy,
|
|
12
|
+
shouldRetry,
|
|
13
|
+
mapIssuesToStrategies
|
|
14
|
+
} = require('./retry');
|
|
15
|
+
const {
|
|
16
|
+
validateFeedback,
|
|
17
|
+
shouldPause,
|
|
18
|
+
getDefaultConfig: getFeedbackDefaultConfig,
|
|
19
|
+
readConfig: readFeedbackConfig,
|
|
20
|
+
writeConfig: writeFeedbackConfig
|
|
21
|
+
} = require('./feedback');
|
|
22
|
+
const {
|
|
23
|
+
calculateCalibration,
|
|
24
|
+
correlateIssues,
|
|
25
|
+
recommendThreshold,
|
|
26
|
+
displayFeedbackInsights
|
|
27
|
+
} = require('./insights');
|
|
28
|
+
const {
|
|
29
|
+
parseHandoffSummary,
|
|
30
|
+
extractSection,
|
|
31
|
+
countBulletItems,
|
|
32
|
+
extractFilePaths,
|
|
33
|
+
validateHandoffSummary,
|
|
34
|
+
getHandoffPath,
|
|
35
|
+
getHandoffTemplate
|
|
36
|
+
} = require('./handoff');
|
|
37
|
+
const {
|
|
38
|
+
needsBusinessContext,
|
|
39
|
+
parseIncludeBusinessContextFlag,
|
|
40
|
+
shouldIncludeBusinessContext,
|
|
41
|
+
buildQueueState,
|
|
42
|
+
generateBusinessContextDirective
|
|
43
|
+
} = require('./business-context');
|
|
44
|
+
const {
|
|
45
|
+
classifyFeature,
|
|
46
|
+
parseStoryFlags,
|
|
47
|
+
shouldIncludeStories,
|
|
48
|
+
buildClassifiedQueueState,
|
|
49
|
+
logClassification,
|
|
50
|
+
TECHNICAL_KEYWORDS,
|
|
51
|
+
USER_FACING_KEYWORDS
|
|
52
|
+
} = require('./classifier');
|
|
53
|
+
const {
|
|
54
|
+
parseFlags: parseInteractiveFlags,
|
|
55
|
+
shouldEnterInteractiveMode,
|
|
56
|
+
createSession,
|
|
57
|
+
getSessionProgress,
|
|
58
|
+
handleCommand,
|
|
59
|
+
getNextSection,
|
|
60
|
+
markSectionComplete,
|
|
61
|
+
markSectionTBD,
|
|
62
|
+
gatherContext,
|
|
63
|
+
identifyGaps,
|
|
64
|
+
generateQuestions,
|
|
65
|
+
canFinalize,
|
|
66
|
+
generateSpec,
|
|
67
|
+
writeSpec,
|
|
68
|
+
generateHandoff,
|
|
69
|
+
getOutputPath,
|
|
70
|
+
SESSION_STATES,
|
|
71
|
+
SECTION_ORDER,
|
|
72
|
+
MIN_REQUIRED_SECTIONS,
|
|
73
|
+
SYSTEM_SPEC_QUESTIONS
|
|
74
|
+
} = require('./interactive');
|
|
75
|
+
const {
|
|
76
|
+
getDefaultStackConfig,
|
|
77
|
+
readStackConfig,
|
|
78
|
+
writeStackConfig,
|
|
79
|
+
resetStackConfig,
|
|
80
|
+
setStackConfigValue,
|
|
81
|
+
detectStackConfig,
|
|
82
|
+
displayStackConfig
|
|
83
|
+
} = require('./stack');
|
|
84
|
+
const tools = require('./tools');
|
|
85
|
+
|
|
86
|
+
module.exports = {
|
|
87
|
+
init,
|
|
88
|
+
update,
|
|
89
|
+
validate,
|
|
90
|
+
formatOutput,
|
|
91
|
+
checkNodeVersion,
|
|
92
|
+
recordHistory,
|
|
93
|
+
displayHistory,
|
|
94
|
+
showStats,
|
|
95
|
+
clearHistory,
|
|
96
|
+
storeStageFeedback,
|
|
97
|
+
// Retry module exports
|
|
98
|
+
readConfig,
|
|
99
|
+
writeConfig,
|
|
100
|
+
resetConfig,
|
|
101
|
+
calculateFailureRate,
|
|
102
|
+
recommendStrategy,
|
|
103
|
+
applyStrategy,
|
|
104
|
+
shouldRetry,
|
|
105
|
+
mapIssuesToStrategies,
|
|
106
|
+
// Feedback module exports
|
|
107
|
+
validateFeedback,
|
|
108
|
+
shouldPause,
|
|
109
|
+
getFeedbackDefaultConfig,
|
|
110
|
+
readFeedbackConfig,
|
|
111
|
+
writeFeedbackConfig,
|
|
112
|
+
// Feedback insights exports
|
|
113
|
+
calculateCalibration,
|
|
114
|
+
correlateIssues,
|
|
115
|
+
recommendThreshold,
|
|
116
|
+
displayFeedbackInsights,
|
|
117
|
+
// Handoff summary exports
|
|
118
|
+
parseHandoffSummary,
|
|
119
|
+
extractSection,
|
|
120
|
+
countBulletItems,
|
|
121
|
+
extractFilePaths,
|
|
122
|
+
validateHandoffSummary,
|
|
123
|
+
getHandoffPath,
|
|
124
|
+
getHandoffTemplate,
|
|
125
|
+
// Business context exports
|
|
126
|
+
needsBusinessContext,
|
|
127
|
+
parseIncludeBusinessContextFlag,
|
|
128
|
+
shouldIncludeBusinessContext,
|
|
129
|
+
buildQueueState,
|
|
130
|
+
generateBusinessContextDirective,
|
|
131
|
+
// Classifier module exports (smart story routing)
|
|
132
|
+
classifyFeature,
|
|
133
|
+
parseStoryFlags,
|
|
134
|
+
shouldIncludeStories,
|
|
135
|
+
buildClassifiedQueueState,
|
|
136
|
+
logClassification,
|
|
137
|
+
TECHNICAL_KEYWORDS,
|
|
138
|
+
USER_FACING_KEYWORDS,
|
|
139
|
+
// Stack config exports
|
|
140
|
+
getDefaultStackConfig,
|
|
141
|
+
readStackConfig,
|
|
142
|
+
writeStackConfig,
|
|
143
|
+
resetStackConfig,
|
|
144
|
+
setStackConfigValue,
|
|
145
|
+
detectStackConfig,
|
|
146
|
+
displayStackConfig,
|
|
147
|
+
// Tools module (model native features)
|
|
148
|
+
tools,
|
|
149
|
+
// Interactive mode exports
|
|
150
|
+
parseInteractiveFlags,
|
|
151
|
+
shouldEnterInteractiveMode,
|
|
152
|
+
createSession,
|
|
153
|
+
getSessionProgress,
|
|
154
|
+
handleCommand,
|
|
155
|
+
getNextSection,
|
|
156
|
+
markSectionComplete,
|
|
157
|
+
markSectionTBD,
|
|
158
|
+
gatherContext,
|
|
159
|
+
identifyGaps,
|
|
160
|
+
generateQuestions,
|
|
161
|
+
canFinalize,
|
|
162
|
+
generateSpec,
|
|
163
|
+
writeSpec,
|
|
164
|
+
generateHandoff,
|
|
165
|
+
getOutputPath,
|
|
166
|
+
SESSION_STATES,
|
|
167
|
+
SECTION_ORDER,
|
|
168
|
+
MIN_REQUIRED_SECTIONS,
|
|
169
|
+
SYSTEM_SPEC_QUESTIONS
|
|
170
|
+
};
|
package/src/init.js
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const readline = require('readline');
|
|
4
|
+
|
|
5
|
+
const { detectStackConfig, writeStackConfig, CONFIG_FILE: STACK_CONFIG_FILE } = require('./stack');
|
|
6
|
+
|
|
7
|
+
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
8
|
+
const TARGET_DIR = process.cwd();
|
|
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
|
+
function copyDir(src, dest) {
|
|
25
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
26
|
+
|
|
27
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
28
|
+
|
|
29
|
+
for (const entry of entries) {
|
|
30
|
+
const srcPath = path.join(src, entry.name);
|
|
31
|
+
const destPath = path.join(dest, entry.name);
|
|
32
|
+
|
|
33
|
+
if (entry.isDirectory()) {
|
|
34
|
+
copyDir(srcPath, destPath);
|
|
35
|
+
} else {
|
|
36
|
+
fs.copyFileSync(srcPath, destPath);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function updateGitignore() {
|
|
42
|
+
const gitignorePath = path.join(TARGET_DIR, '.gitignore');
|
|
43
|
+
const entriesToAdd = [
|
|
44
|
+
'# agent-workflow',
|
|
45
|
+
'.claude/implement-queue.json',
|
|
46
|
+
'.claude/pipeline-history.json',
|
|
47
|
+
'.claude/stack-config.json'
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
let content = '';
|
|
51
|
+
if (fs.existsSync(gitignorePath)) {
|
|
52
|
+
content = fs.readFileSync(gitignorePath, 'utf8');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const newEntries = entriesToAdd.filter(entry => !content.includes(entry));
|
|
56
|
+
|
|
57
|
+
if (newEntries.length > 0) {
|
|
58
|
+
const addition = '\n' + newEntries.join('\n') + '\n';
|
|
59
|
+
fs.appendFileSync(gitignorePath, addition);
|
|
60
|
+
console.log('Updated .gitignore');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function init() {
|
|
65
|
+
const blueprintSrc = path.join(PACKAGE_ROOT, '.blueprint');
|
|
66
|
+
const blueprintDest = path.join(TARGET_DIR, '.blueprint');
|
|
67
|
+
const businessContextSrc = path.join(PACKAGE_ROOT, '.business_context');
|
|
68
|
+
const businessContextDest = path.join(TARGET_DIR, '.business_context');
|
|
69
|
+
const skillSrc = path.join(PACKAGE_ROOT, 'SKILL.md');
|
|
70
|
+
const claudeCommandsDir = path.join(TARGET_DIR, '.claude', 'commands');
|
|
71
|
+
const skillCommandDest = path.join(claudeCommandsDir, 'implement-feature.md');
|
|
72
|
+
|
|
73
|
+
// Check if .blueprint already exists
|
|
74
|
+
if (fs.existsSync(blueprintDest)) {
|
|
75
|
+
const answer = await prompt('.blueprint directory already exists. Overwrite? (y/N): ');
|
|
76
|
+
if (answer !== 'y' && answer !== 'yes') {
|
|
77
|
+
console.log('Aborted. Use "agent-workflow update" to update existing installation.');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
fs.rmSync(blueprintDest, { recursive: true });
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Copy skill to .claude/commands/ for Claude Code discovery
|
|
84
|
+
fs.mkdirSync(claudeCommandsDir, { recursive: true });
|
|
85
|
+
if (fs.existsSync(skillCommandDest)) {
|
|
86
|
+
const answer = await prompt('.claude/commands/implement-feature.md already exists. Overwrite? (y/N): ');
|
|
87
|
+
if (answer !== 'y' && answer !== 'yes') {
|
|
88
|
+
console.log('Skipping skill command');
|
|
89
|
+
} else {
|
|
90
|
+
fs.copyFileSync(skillSrc, skillCommandDest);
|
|
91
|
+
console.log('Copied skill to .claude/commands/implement-feature.md');
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
fs.copyFileSync(skillSrc, skillCommandDest);
|
|
95
|
+
console.log('Copied skill to .claude/commands/implement-feature.md');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Copy .blueprint directory
|
|
99
|
+
console.log('Copying .blueprint directory...');
|
|
100
|
+
copyDir(blueprintSrc, blueprintDest);
|
|
101
|
+
console.log('Copied .blueprint directory');
|
|
102
|
+
|
|
103
|
+
// Copy .business_context directory
|
|
104
|
+
if (!fs.existsSync(businessContextDest)) {
|
|
105
|
+
console.log('Copying .business_context directory...');
|
|
106
|
+
copyDir(businessContextSrc, businessContextDest);
|
|
107
|
+
console.log('Copied .business_context directory');
|
|
108
|
+
} else {
|
|
109
|
+
console.log('.business_context directory already exists, skipping');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Update .gitignore
|
|
113
|
+
updateGitignore();
|
|
114
|
+
|
|
115
|
+
// Auto-detect tech stack
|
|
116
|
+
const stackConfigPath = path.join(TARGET_DIR, STACK_CONFIG_FILE);
|
|
117
|
+
if (!fs.existsSync(stackConfigPath)) {
|
|
118
|
+
const detected = detectStackConfig(TARGET_DIR);
|
|
119
|
+
const hasValues = detected.language || detected.runtime;
|
|
120
|
+
if (hasValues) {
|
|
121
|
+
writeStackConfig(detected);
|
|
122
|
+
const parts = [detected.language, detected.runtime, ...detected.frameworks, detected.testRunner].filter(Boolean);
|
|
123
|
+
console.log(`Detected tech stack: ${parts.join(', ')}`);
|
|
124
|
+
}
|
|
125
|
+
} else {
|
|
126
|
+
console.log('Stack config already exists, skipping detection');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
console.log(`
|
|
130
|
+
murmur8 initialized successfully!
|
|
131
|
+
|
|
132
|
+
Next steps:
|
|
133
|
+
1. Review your tech stack with \`npx murmur8 stack-config\`
|
|
134
|
+
2. Add business context documents to .business_context/
|
|
135
|
+
3. Run /implement-feature in Claude Code to start your first feature
|
|
136
|
+
`);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
module.exports = { init };
|