orchestr8 2.8.0 → 3.1.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 +22 -34
- package/.blueprint/agents/AGENT_DEVELOPER_CODEY.md +25 -28
- package/.blueprint/agents/AGENT_SPECIFICATION_ALEX.md +10 -0
- package/.blueprint/agents/AGENT_TESTER_NIGEL.md +9 -3
- package/.blueprint/agents/WHAT_WE_STAND_FOR.md +64 -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/prompts/codey-implement-runtime.md +1 -1
- package/.blueprint/prompts/nigel-runtime.md +1 -1
- package/.blueprint/ways_of_working/DEVELOPMENT_RITUAL.md +4 -4
- package/README.md +31 -0
- package/SKILL.md +35 -1
- package/bin/cli.js +28 -0
- package/package.json +2 -2
- package/src/index.js +61 -1
- package/src/init.js +21 -3
- package/src/interactive.js +338 -0
- package/src/stack.js +320 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# User Story: Interactive System Spec Creation
|
|
2
|
+
|
|
3
|
+
## Story
|
|
4
|
+
|
|
5
|
+
**As a** developer initializing a new project without a system specification,
|
|
6
|
+
**I want** Alex to guide me through creating a SYSTEM_SPEC.md interactively,
|
|
7
|
+
**so that** I establish the project's boundaries and constraints before creating feature specs.
|
|
8
|
+
|
|
9
|
+
## Acceptance Criteria
|
|
10
|
+
|
|
11
|
+
### AC-1: System Spec Auto-Detection
|
|
12
|
+
|
|
13
|
+
**Given** a user invokes `/implement-feature "my-feature"`
|
|
14
|
+
**And** `.blueprint/system_specification/SYSTEM_SPEC.md` does not exist
|
|
15
|
+
**When** the pipeline checks prerequisites
|
|
16
|
+
**Then** interactive mode activates for system spec creation (not feature spec)
|
|
17
|
+
|
|
18
|
+
### AC-2: System Spec Session Flow
|
|
19
|
+
|
|
20
|
+
**Given** interactive system spec mode is active
|
|
21
|
+
**When** Alex starts the session
|
|
22
|
+
**Then** Alex asks about: purpose, actors, system boundaries, and governing rules
|
|
23
|
+
**And** Alex drafts SYSTEM_SPEC.md sections incrementally
|
|
24
|
+
**And** the same session commands apply (`/approve`, `/change`, `/skip`, `/restart`, `/abort`, `/done`)
|
|
25
|
+
|
|
26
|
+
### AC-3: System Spec Output Location
|
|
27
|
+
|
|
28
|
+
**Given** an interactive system spec session completes successfully
|
|
29
|
+
**When** Alex writes the spec
|
|
30
|
+
**Then** the file is written to `.blueprint/system_specification/SYSTEM_SPEC.md`
|
|
31
|
+
**And** the file follows the SYSTEM_SPEC template structure
|
|
32
|
+
|
|
33
|
+
### AC-4: Pipeline Gate Satisfied
|
|
34
|
+
|
|
35
|
+
**Given** SYSTEM_SPEC.md is created via interactive session
|
|
36
|
+
**When** the user re-invokes `/implement-feature "my-feature"`
|
|
37
|
+
**Then** the system spec gate passes
|
|
38
|
+
**And** the pipeline proceeds to feature spec creation (interactive or autonomous)
|
|
39
|
+
|
|
40
|
+
### AC-5: System Spec Before Feature Spec
|
|
41
|
+
|
|
42
|
+
**Given** a user invokes `/implement-feature "my-feature" --interactive`
|
|
43
|
+
**And** SYSTEM_SPEC.md does not exist
|
|
44
|
+
**When** the pipeline routing logic runs
|
|
45
|
+
**Then** system spec interactive session runs first
|
|
46
|
+
**And** only after system spec is complete does feature spec interactive session begin
|
|
47
|
+
|
|
48
|
+
## Out of Scope
|
|
49
|
+
|
|
50
|
+
- Updating existing SYSTEM_SPEC.md interactively (only creation)
|
|
51
|
+
- Skipping system spec gate entirely
|
|
52
|
+
- System spec versioning or change tracking
|
|
53
|
+
|
|
54
|
+
## References
|
|
55
|
+
|
|
56
|
+
- Feature Spec: `.blueprint/features/feature_interactive-alex/FEATURE_SPEC.md` (Section 4.1, Open Question 2)
|
|
57
|
+
- System Spec: `.blueprint/system_specification/SYSTEM_SPEC.md` (Section 7 - System spec gate)
|
|
@@ -11,7 +11,7 @@ Implement the feature according to the plan. Work incrementally, making tests pa
|
|
|
11
11
|
|
|
12
12
|
## Process (INCREMENTAL - one file at a time)
|
|
13
13
|
|
|
14
|
-
1. Run tests
|
|
14
|
+
1. Run tests using the project's test command (see `.claude/stack-config.json`)
|
|
15
15
|
2. For each failing test group:
|
|
16
16
|
a. Identify the minimal code needed
|
|
17
17
|
b. Write or edit ONE file
|
|
@@ -17,7 +17,7 @@ Step 1: Write {TEST_DIR}/test-spec.md containing:
|
|
|
17
17
|
- Key assumptions (bullet list)
|
|
18
18
|
|
|
19
19
|
Step 2: Write {TEST_FILE} containing:
|
|
20
|
-
- Executable tests
|
|
20
|
+
- Executable tests using the project's test runner (see `.claude/stack-config.json`)
|
|
21
21
|
- One describe block per story
|
|
22
22
|
- One test per acceptance criterion
|
|
23
23
|
|
|
@@ -41,7 +41,7 @@ Before writing tests:
|
|
|
41
41
|
[ ] Ambiguities identified
|
|
42
42
|
[ ] Assumptions written down
|
|
43
43
|
|
|
44
|
-
Before handover to
|
|
44
|
+
Before handover to the human to pass to Claude:
|
|
45
45
|
[ ] Understanding summary written
|
|
46
46
|
[ ] Test plan created
|
|
47
47
|
[ ] Happy path tests written
|
|
@@ -50,7 +50,7 @@ Before handover to Steve to pass to Claude:
|
|
|
50
50
|
[ ] Traceability table complete
|
|
51
51
|
[ ] Open questions listed
|
|
52
52
|
|
|
53
|
-
If any box is unchecked → raise it with
|
|
53
|
+
If any box is unchecked → raise it with the human that its not ready to hand over. If all boxes are checked, let the human know that its ready to handover to Claude.
|
|
54
54
|
|
|
55
55
|
🧑💻 Developer CLI Ritual (Claude)
|
|
56
56
|
Before coding:
|
|
@@ -64,7 +64,7 @@ During coding:
|
|
|
64
64
|
[ ] Ran relevant tests after each change
|
|
65
65
|
[ ] Did not weaken or delete tests
|
|
66
66
|
|
|
67
|
-
Before handover to
|
|
67
|
+
Before handover to the human:
|
|
68
68
|
[ ] All tests passing
|
|
69
69
|
[ ] Lint passing
|
|
70
70
|
[ ] No unexplained skip/todo
|
|
@@ -139,4 +139,4 @@ Outcome:
|
|
|
139
139
|
❗ Green builds are necessary, not sufficient
|
|
140
140
|
❗ Assumptions must be written down
|
|
141
141
|
❗ No silent changes
|
|
142
|
-
❗ When in doubt, slow down and ask
|
|
142
|
+
❗ When in doubt, slow down and ask the human
|
package/README.md
CHANGED
|
@@ -19,6 +19,32 @@ npx orchestr8 init
|
|
|
19
19
|
|
|
20
20
|
This installs the `.blueprint/` directory, `.business_context/`, and the `/implement-feature` skill to `.claude/commands/`. If files already exist, you'll be prompted before overwriting. It also adds the workflow queue to `.gitignore`.
|
|
21
21
|
|
|
22
|
+
During initialization, orchestr8 **auto-detects your project's tech stack** from manifest files (`package.json`, `pyproject.toml`, `go.mod`, etc.) and writes the result to `.claude/stack-config.json`. The agents (Nigel and Codey) read this file at runtime to adapt their testing and implementation approach to your stack.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Review what was detected
|
|
26
|
+
npx orchestr8 stack-config
|
|
27
|
+
|
|
28
|
+
# Adjust if needed
|
|
29
|
+
npx orchestr8 stack-config set language TypeScript
|
|
30
|
+
npx orchestr8 stack-config set frameworks '["next","react"]'
|
|
31
|
+
npx orchestr8 stack-config set testRunner vitest
|
|
32
|
+
npx orchestr8 stack-config set testCommand "npx vitest run"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If you're working with a non-JavaScript project, set the stack config before running the pipeline:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Python/Django example
|
|
39
|
+
npx orchestr8 stack-config set language Python
|
|
40
|
+
npx orchestr8 stack-config set runtime "Python 3.12"
|
|
41
|
+
npx orchestr8 stack-config set packageManager pip
|
|
42
|
+
npx orchestr8 stack-config set frameworks '["django"]'
|
|
43
|
+
npx orchestr8 stack-config set testRunner pytest
|
|
44
|
+
npx orchestr8 stack-config set testCommand "pytest"
|
|
45
|
+
npx orchestr8 stack-config set linter ruff
|
|
46
|
+
```
|
|
47
|
+
|
|
22
48
|
## Keeping Up to Date
|
|
23
49
|
|
|
24
50
|
**Modules** (history, insights, feedback, retry, validate) are part of the npm package and update automatically when you use `npx` - no action needed.
|
|
@@ -70,6 +96,9 @@ This updates `.blueprint/agents/`, `.blueprint/templates/`, `.blueprint/ways_of_
|
|
|
70
96
|
|
|
71
97
|
| Command | Description |
|
|
72
98
|
|---------|-------------|
|
|
99
|
+
| `npx orchestr8 stack-config` | View detected tech stack |
|
|
100
|
+
| `npx orchestr8 stack-config set <key> <value>` | Modify stack settings (language, frameworks, testRunner, etc.) |
|
|
101
|
+
| `npx orchestr8 stack-config reset` | Reset to empty defaults |
|
|
73
102
|
| `npx orchestr8 retry-config` | View retry configuration |
|
|
74
103
|
| `npx orchestr8 retry-config set <key> <value>` | Modify retry settings |
|
|
75
104
|
| `npx orchestr8 retry-config reset` | Reset to defaults |
|
|
@@ -197,6 +226,7 @@ orchestr8 includes these built-in modules for observability and self-improvement
|
|
|
197
226
|
| **business-context** | Lazy loading of business context based on feature needs |
|
|
198
227
|
| **tools** | Tool schemas and validation for Claude native features |
|
|
199
228
|
| **parallel** | Parallel pipeline execution using git worktrees |
|
|
229
|
+
| **stack** | Configurable tech stack detection and configuration |
|
|
200
230
|
|
|
201
231
|
### How They Work Together
|
|
202
232
|
|
|
@@ -260,6 +290,7 @@ your-project/
|
|
|
260
290
|
│ ├── feedback-config.json # Feedback thresholds (gitignored)
|
|
261
291
|
│ ├── parallel-config.json # Parallel execution config (gitignored)
|
|
262
292
|
│ ├── parallel-queue.json # Parallel pipeline state (gitignored)
|
|
293
|
+
│ ├── stack-config.json # Tech stack configuration (gitignored)
|
|
263
294
|
│ └── implement-queue.json # Pipeline queue state (gitignored)
|
|
264
295
|
└── test/
|
|
265
296
|
├── artifacts/ # Test specs per feature
|
package/SKILL.md
CHANGED
|
@@ -28,8 +28,9 @@ description: Run the Alex → Cass → Nigel → Codey pipeline using Task tool
|
|
|
28
28
|
## Invocation
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
/implement-feature # Interactive
|
|
31
|
+
/implement-feature # Interactive slug prompt
|
|
32
32
|
/implement-feature "user-auth" # New feature
|
|
33
|
+
/implement-feature "user-auth" --interactive # Force interactive spec creation
|
|
33
34
|
/implement-feature "user-auth" --pause-after=alex|cass|nigel|codey-plan
|
|
34
35
|
/implement-feature "user-auth" --no-commit
|
|
35
36
|
/implement-feature "user-auth" --no-feedback # Skip feedback collection
|
|
@@ -113,6 +114,39 @@ If not provided: Ask user, convert to slug format (lowercase, hyphens), confirm.
|
|
|
113
114
|
### Step 3: System Spec Gate
|
|
114
115
|
Check `{SYS_SPEC}` exists. If not: run Alex to create it, then **stop for review**.
|
|
115
116
|
|
|
117
|
+
### Step 3a: Interactive Mode Detection
|
|
118
|
+
|
|
119
|
+
**Module:** `src/interactive.js`
|
|
120
|
+
|
|
121
|
+
The pipeline automatically enters interactive mode when:
|
|
122
|
+
1. `--interactive` flag is explicitly passed
|
|
123
|
+
2. System spec (`{SYS_SPEC}`) is missing - creates system spec interactively
|
|
124
|
+
3. Feature spec (`{FEAT_SPEC}`) is missing - creates feature spec interactively
|
|
125
|
+
|
|
126
|
+
**Interactive Session Flow:**
|
|
127
|
+
```
|
|
128
|
+
idle → gathering → questioning → drafting → finalizing
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Available Commands During Session:**
|
|
132
|
+
| Command | Action |
|
|
133
|
+
|---------|--------|
|
|
134
|
+
| `/approve` or `yes` | Mark section complete, proceed to next |
|
|
135
|
+
| `/change <feedback>` | Revise current section with feedback |
|
|
136
|
+
| `/skip` | Mark section TBD, proceed to next |
|
|
137
|
+
| `/restart` | Discard draft, restart current section |
|
|
138
|
+
| `/abort` | Exit without writing spec |
|
|
139
|
+
| `/done` | Finalize spec (if min sections complete) |
|
|
140
|
+
|
|
141
|
+
**Minimum Required Sections:**
|
|
142
|
+
- Feature spec: Intent, Scope, Actors
|
|
143
|
+
- System spec: Purpose, Actors, Boundaries
|
|
144
|
+
|
|
145
|
+
**On Interactive Completion:**
|
|
146
|
+
- Writes spec to appropriate path
|
|
147
|
+
- Generates `handoff-alex.md` with session metrics
|
|
148
|
+
- Records `mode: "interactive"` in history entry
|
|
149
|
+
|
|
116
150
|
### Step 3.5: Insights Preview (NEW)
|
|
117
151
|
|
|
118
152
|
**Module:** `src/insights.js`
|
package/bin/cli.js
CHANGED
|
@@ -12,6 +12,11 @@ const {
|
|
|
12
12
|
setConfigValue: setFeedbackConfigValue,
|
|
13
13
|
resetConfig: resetFeedbackConfig
|
|
14
14
|
} = require('../src/feedback');
|
|
15
|
+
const {
|
|
16
|
+
displayStackConfig,
|
|
17
|
+
setStackConfigValue,
|
|
18
|
+
resetStackConfig
|
|
19
|
+
} = require('../src/stack');
|
|
15
20
|
const { displayFeedbackInsights } = require('../src/insights');
|
|
16
21
|
const {
|
|
17
22
|
formatStatus,
|
|
@@ -145,6 +150,26 @@ const commands = {
|
|
|
145
150
|
},
|
|
146
151
|
description: 'Manage feedback loop configuration'
|
|
147
152
|
},
|
|
153
|
+
'stack-config': {
|
|
154
|
+
fn: () => {
|
|
155
|
+
if (subArg === 'set') {
|
|
156
|
+
const key = args[2];
|
|
157
|
+
const value = args[3];
|
|
158
|
+
if (!key || !value) {
|
|
159
|
+
console.error('Usage: stack-config set <key> <value>');
|
|
160
|
+
console.error('Valid keys: language, runtime, packageManager, frameworks, testRunner, testCommand, linter, tools');
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
setStackConfigValue(key, value);
|
|
164
|
+
} else if (subArg === 'reset') {
|
|
165
|
+
resetStackConfig();
|
|
166
|
+
console.log('Stack configuration reset to defaults.');
|
|
167
|
+
} else {
|
|
168
|
+
displayStackConfig();
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
description: 'View or modify project tech stack configuration'
|
|
172
|
+
},
|
|
148
173
|
'parallel-config': {
|
|
149
174
|
fn: () => {
|
|
150
175
|
if (subArg === 'set') {
|
|
@@ -307,6 +332,9 @@ Commands:
|
|
|
307
332
|
feedback-config View current feedback loop configuration
|
|
308
333
|
feedback-config set <key> <value> Modify a config value (minRatingThreshold, enabled)
|
|
309
334
|
feedback-config reset Reset feedback configuration to defaults
|
|
335
|
+
stack-config View current tech stack configuration
|
|
336
|
+
stack-config set <key> <value> Modify a config value (language, runtime, frameworks, etc.)
|
|
337
|
+
stack-config reset Reset tech stack configuration to defaults
|
|
310
338
|
parallel <slugs...> Run multiple feature pipelines in parallel
|
|
311
339
|
parallel <slugs...> --dry-run Show execution plan without running
|
|
312
340
|
parallel <slugs...> --yes Skip confirmation prompt
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orchestr8",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Multi-agent workflow framework for automated feature development",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"author": "NewmanJustice",
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/NewmanJustice/
|
|
23
|
+
"url": "git+https://github.com/NewmanJustice/agent-workflow.git"
|
|
24
24
|
},
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"engines": {
|
package/src/index.js
CHANGED
|
@@ -50,6 +50,37 @@ const {
|
|
|
50
50
|
TECHNICAL_KEYWORDS,
|
|
51
51
|
USER_FACING_KEYWORDS
|
|
52
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');
|
|
53
84
|
const tools = require('./tools');
|
|
54
85
|
|
|
55
86
|
module.exports = {
|
|
@@ -105,6 +136,35 @@ module.exports = {
|
|
|
105
136
|
logClassification,
|
|
106
137
|
TECHNICAL_KEYWORDS,
|
|
107
138
|
USER_FACING_KEYWORDS,
|
|
139
|
+
// Stack config exports
|
|
140
|
+
getDefaultStackConfig,
|
|
141
|
+
readStackConfig,
|
|
142
|
+
writeStackConfig,
|
|
143
|
+
resetStackConfig,
|
|
144
|
+
setStackConfigValue,
|
|
145
|
+
detectStackConfig,
|
|
146
|
+
displayStackConfig,
|
|
108
147
|
// Tools module (model native features)
|
|
109
|
-
tools
|
|
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
|
|
110
170
|
};
|
package/src/init.js
CHANGED
|
@@ -2,6 +2,8 @@ const fs = require('fs');
|
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const readline = require('readline');
|
|
4
4
|
|
|
5
|
+
const { detectStackConfig, writeStackConfig, CONFIG_FILE: STACK_CONFIG_FILE } = require('./stack');
|
|
6
|
+
|
|
5
7
|
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
6
8
|
const TARGET_DIR = process.cwd();
|
|
7
9
|
|
|
@@ -41,7 +43,8 @@ function updateGitignore() {
|
|
|
41
43
|
const entriesToAdd = [
|
|
42
44
|
'# agent-workflow',
|
|
43
45
|
'.claude/implement-queue.json',
|
|
44
|
-
'.claude/pipeline-history.json'
|
|
46
|
+
'.claude/pipeline-history.json',
|
|
47
|
+
'.claude/stack-config.json'
|
|
45
48
|
];
|
|
46
49
|
|
|
47
50
|
let content = '';
|
|
@@ -109,12 +112,27 @@ async function init() {
|
|
|
109
112
|
// Update .gitignore
|
|
110
113
|
updateGitignore();
|
|
111
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
|
+
|
|
112
129
|
console.log(`
|
|
113
130
|
orchestr8 initialized successfully!
|
|
114
131
|
|
|
115
132
|
Next steps:
|
|
116
|
-
1.
|
|
117
|
-
2.
|
|
133
|
+
1. Review your tech stack with \`npx orchestr8 stack-config\`
|
|
134
|
+
2. Add business context documents to .business_context/
|
|
135
|
+
3. Run /implement-feature in Claude Code to start your first feature
|
|
118
136
|
`);
|
|
119
137
|
}
|
|
120
138
|
|