pgserve 2.1.3 → 2.2.1
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 +96 -0
- package/README.md +105 -1
- package/bin/autopg-wrapper.cjs +16 -0
- package/bin/pgserve-wrapper.cjs +32 -6
- package/bin/postgres-server.js +56 -0
- package/console/README.md +131 -0
- package/console/api.js +173 -0
- package/console/app.jsx +483 -0
- package/console/colors_and_type.css +227 -0
- package/console/components.jsx +167 -0
- package/console/console.css +1666 -0
- package/console/data.jsx +350 -0
- package/console/index.html +31 -0
- package/console/screens/databases.jsx +5 -0
- package/console/screens/health.jsx +5 -0
- package/console/screens/ingress.jsx +5 -0
- package/console/screens/optimizer.jsx +5 -0
- package/console/screens/rlm-sim.jsx +5 -0
- package/console/screens/rlm-trace.jsx +5 -0
- package/console/screens/security.jsx +5 -0
- package/console/screens/settings.jsx +611 -0
- package/console/screens/sql.jsx +5 -0
- package/console/screens/sync.jsx +5 -0
- package/console/screens/tables.jsx +5 -0
- package/console/tweaks-panel.jsx +425 -0
- package/package.json +14 -2
- package/scripts/postinstall.cjs +60 -0
- package/src/cli-config.cjs +310 -0
- package/src/cli-install.cjs +112 -11
- package/src/cli-restart.cjs +228 -0
- package/src/cli-ui.cjs +580 -0
- package/src/cluster.js +43 -38
- package/src/postgres.js +141 -19
- package/src/settings-loader.cjs +235 -0
- package/src/settings-migrate.cjs +212 -0
- package/src/settings-pg-args.cjs +146 -0
- package/src/settings-schema.cjs +422 -0
- package/src/settings-validator.cjs +416 -0
- package/src/settings-writer.cjs +288 -0
- package/src/upgrade/index.js +65 -0
- package/src/upgrade/runner.js +23 -0
- package/src/upgrade/steps/binary-cache-flush.js +67 -0
- package/src/upgrade/steps/consumer-signal.js +40 -0
- package/src/upgrade/steps/env-refresh.js +89 -0
- package/src/upgrade/steps/health-validate.js +53 -0
- package/src/upgrade/steps/plpgsql-resolve.js +66 -0
- package/src/upgrade/steps/port-reconcile.js +52 -0
- package/.claude/context/windows-debug.md +0 -119
- package/.genie/AGENTS.md +0 -15
- package/.genie/agents/README.md +0 -110
- package/.genie/agents/analyze.md +0 -176
- package/.genie/agents/forge.md +0 -290
- package/.genie/agents/garbage-cleaner.md +0 -324
- package/.genie/agents/garbage-collector.md +0 -596
- package/.genie/agents/github-issue-gc.md +0 -618
- package/.genie/agents/review.md +0 -380
- package/.genie/agents/semantic-analyzer/find-duplicates.md +0 -90
- package/.genie/agents/semantic-analyzer/find-orphans.md +0 -99
- package/.genie/agents/semantic-analyzer.md +0 -101
- package/.genie/agents/update.md +0 -182
- package/.genie/agents/wish.md +0 -357
- package/.genie/brainstorms/pgserve-v2/DESIGN.md +0 -174
- package/.genie/code/AGENTS.md +0 -694
- package/.genie/code/agents/audit/risk.md +0 -173
- package/.genie/code/agents/audit/security.md +0 -189
- package/.genie/code/agents/audit.md +0 -145
- package/.genie/code/agents/challenge.md +0 -230
- package/.genie/code/agents/change-reviewer.md +0 -295
- package/.genie/code/agents/code-garbage-collector.md +0 -425
- package/.genie/code/agents/code-quality.md +0 -410
- package/.genie/code/agents/commit-suggester.md +0 -255
- package/.genie/code/agents/commit.md +0 -124
- package/.genie/code/agents/consensus.md +0 -204
- package/.genie/code/agents/daily-standup.md +0 -722
- package/.genie/code/agents/docgen.md +0 -48
- package/.genie/code/agents/explore.md +0 -79
- package/.genie/code/agents/fix.md +0 -100
- package/.genie/code/agents/git/commit-advisory.md +0 -219
- package/.genie/code/agents/git/workflows/issue.md +0 -244
- package/.genie/code/agents/git/workflows/pr.md +0 -179
- package/.genie/code/agents/git/workflows/release.md +0 -460
- package/.genie/code/agents/git/workflows/report.md +0 -342
- package/.genie/code/agents/git.md +0 -432
- package/.genie/code/agents/implementor.md +0 -161
- package/.genie/code/agents/install.md +0 -515
- package/.genie/code/agents/issue-creator.md +0 -344
- package/.genie/code/agents/polish.md +0 -116
- package/.genie/code/agents/qa.md +0 -653
- package/.genie/code/agents/refactor.md +0 -294
- package/.genie/code/agents/release.md +0 -1129
- package/.genie/code/agents/roadmap.md +0 -885
- package/.genie/code/agents/tests.md +0 -557
- package/.genie/code/agents/tracer.md +0 -50
- package/.genie/code/agents/update/upstream-update.md +0 -85
- package/.genie/code/agents/update/versions/generic-update.md +0 -305
- package/.genie/code/agents/vibe.md +0 -1317
- package/.genie/code/spells/agent-configuration.md +0 -58
- package/.genie/code/spells/automated-rc-publishing.md +0 -106
- package/.genie/code/spells/branch-tracker-guidance.md +0 -28
- package/.genie/code/spells/debug.md +0 -320
- package/.genie/code/spells/emoji-naming-convention.md +0 -303
- package/.genie/code/spells/evidence-storage.md +0 -26
- package/.genie/code/spells/file-naming-rules.md +0 -35
- package/.genie/code/spells/forge-code-blueprints.md +0 -195
- package/.genie/code/spells/genie-integration.md +0 -153
- package/.genie/code/spells/publishing-protocol.md +0 -61
- package/.genie/code/spells/team-consultation-protocol.md +0 -284
- package/.genie/code/spells/tool-requirements.md +0 -20
- package/.genie/code/spells/triad-maintenance-protocol.md +0 -154
- package/.genie/code/teams/tech-council/council.md +0 -328
- package/.genie/code/teams/tech-council/jt.md +0 -352
- package/.genie/code/teams/tech-council/nayr.md +0 -305
- package/.genie/code/teams/tech-council/oettam.md +0 -375
- package/.genie/neurons/README.md +0 -193
- package/.genie/neurons/forge.md +0 -106
- package/.genie/neurons/genie.md +0 -63
- package/.genie/neurons/review.md +0 -106
- package/.genie/neurons/wish.md +0 -104
- package/.genie/product/README.md +0 -20
- package/.genie/product/cli-automation.md +0 -359
- package/.genie/product/environment.md +0 -60
- package/.genie/product/mission.md +0 -60
- package/.genie/product/roadmap.md +0 -44
- package/.genie/product/tech-stack.md +0 -34
- package/.genie/product/templates/context-template.md +0 -218
- package/.genie/product/templates/qa-done-report-template.md +0 -68
- package/.genie/product/templates/review-report-template.md +0 -89
- package/.genie/product/templates/wish-template.md +0 -120
- package/.genie/scripts/helpers/analyze-commit.js +0 -195
- package/.genie/scripts/helpers/bullet-counter.js +0 -194
- package/.genie/scripts/helpers/bullet-find.js +0 -289
- package/.genie/scripts/helpers/bullet-id.js +0 -244
- package/.genie/scripts/helpers/check-secrets.js +0 -237
- package/.genie/scripts/helpers/count-tokens.js +0 -200
- package/.genie/scripts/helpers/create-frontmatter.js +0 -456
- package/.genie/scripts/helpers/detect-markers.js +0 -293
- package/.genie/scripts/helpers/detect-todos.js +0 -267
- package/.genie/scripts/helpers/detect-unlabeled-blocks.js +0 -135
- package/.genie/scripts/helpers/embeddings.js +0 -344
- package/.genie/scripts/helpers/find-empty-sections.js +0 -158
- package/.genie/scripts/helpers/index.js +0 -319
- package/.genie/scripts/helpers/validate-frontmatter.js +0 -578
- package/.genie/scripts/helpers/validate-links.js +0 -207
- package/.genie/scripts/helpers/validate-paths.js +0 -373
- package/.genie/spells/README.md +0 -9
- package/.genie/spells/ace-protocol.md +0 -118
- package/.genie/spells/ask-one-at-a-time.md +0 -175
- package/.genie/spells/backup-analyzer.md +0 -542
- package/.genie/spells/blocker.md +0 -12
- package/.genie/spells/break-things-move-fast.md +0 -56
- package/.genie/spells/context-candidates.md +0 -72
- package/.genie/spells/context-critic.md +0 -51
- package/.genie/spells/defer-to-expertise.md +0 -278
- package/.genie/spells/delegate-dont-do.md +0 -292
- package/.genie/spells/error-investigation-protocol.md +0 -328
- package/.genie/spells/evidence-based-completion.md +0 -273
- package/.genie/spells/experiment.md +0 -65
- package/.genie/spells/file-creation-protocol.md +0 -229
- package/.genie/spells/forge-integration.md +0 -281
- package/.genie/spells/forge-orchestration.md +0 -514
- package/.genie/spells/gather-context.md +0 -18
- package/.genie/spells/global-health-check.md +0 -34
- package/.genie/spells/global-noop-roundtrip.md +0 -25
- package/.genie/spells/install-genie.md +0 -1232
- package/.genie/spells/install.md +0 -82
- package/.genie/spells/investigate-before-commit.md +0 -112
- package/.genie/spells/know-yourself.md +0 -288
- package/.genie/spells/learn.md +0 -828
- package/.genie/spells/mcp-diagnostic-protocol.md +0 -246
- package/.genie/spells/mcp-first.md +0 -124
- package/.genie/spells/multi-step-execution.md +0 -67
- package/.genie/spells/orchestration-boundary-protocol.md +0 -256
- package/.genie/spells/orchestrator-not-implementor.md +0 -189
- package/.genie/spells/prompt.md +0 -746
- package/.genie/spells/reflect.md +0 -404
- package/.genie/spells/routing-decision-matrix.md +0 -368
- package/.genie/spells/run-in-parallel.md +0 -12
- package/.genie/spells/session-state-updater-example.md +0 -196
- package/.genie/spells/session-state-updater.md +0 -220
- package/.genie/spells/track-long-running-tasks.md +0 -133
- package/.genie/spells/troubleshoot-infrastructure.md +0 -176
- package/.genie/spells/upgrade-genie.md +0 -415
- package/.genie/spells/url-presentation-protocol.md +0 -301
- package/.genie/spells/wish-initiation.md +0 -158
- package/.genie/spells/wish-issue-linkage.md +0 -410
- package/.genie/spells/wish-lifecycle.md +0 -100
- package/.genie/state/provider-status.json +0 -3
- package/.genie/state/version.json +0 -16
- package/.genie/wishes/canonical-pgserve-pm2-supervision/WISH.md +0 -290
- package/.genie/wishes/pgserve-v2/BRIEF-from-genie-pgserve.md +0 -99
- package/.genie/wishes/pgserve-v2/WISH.md +0 -442
- package/.genie/wishes/release-system-genie-pattern/WISH.md +0 -268
- package/.genie/wishes/release-system-genie-pattern/validation.md +0 -205
- package/.gitguardian.yaml +0 -29
- package/.gitguardianignore +0 -16
- package/.github/workflows/ci.yml +0 -122
- package/.github/workflows/release.yml +0 -289
- package/.github/workflows/version.yml +0 -228
- package/.husky/pre-commit +0 -2
- package/AGENTS.md +0 -433
- package/CLAUDE.md +0 -1
- package/Makefile +0 -285
- package/assets/icon.ico +0 -0
- package/bun.lock +0 -435
- package/bunfig.toml +0 -28
- package/ecosystem.config.cjs +0 -23
- package/eslint.config.js +0 -63
- package/examples/multi-tenant-demo.js +0 -104
- package/install.sh +0 -123
- package/knip.json +0 -9
- package/tests/audit.test.js +0 -189
- package/tests/backpressure.test.js +0 -167
- package/tests/benchmarks/runner.js +0 -1197
- package/tests/benchmarks/vector-generator.js +0 -368
- package/tests/cli-install.test.js +0 -322
- package/tests/control-db.test.js +0 -285
- package/tests/daemon-args.test.js +0 -86
- package/tests/daemon-control.test.js +0 -171
- package/tests/daemon-fingerprint-integration.test.js +0 -111
- package/tests/daemon-pr24-regression.test.js +0 -198
- package/tests/fingerprint.test.js +0 -263
- package/tests/fixtures/240-orphan-seed.sql +0 -30
- package/tests/multi-tenant.test.js +0 -374
- package/tests/orphan-cleanup.test.js +0 -390
- package/tests/pg-version-regex.test.js +0 -129
- package/tests/quick-bench.js +0 -135
- package/tests/router-handshake-retry.test.js +0 -119
- package/tests/router-handshake-watchdog.test.js +0 -110
- package/tests/sdk.test.js +0 -71
- package/tests/stale-postmaster-pid.test.js +0 -85
- package/tests/stress-test.js +0 -439
- package/tests/sync-perf-test.js +0 -150
- package/tests/tcp-listen.test.js +0 -368
- package/tests/tenancy.test.js +0 -403
- package/tests/wrapper-supervision.test.js +0 -107
|
@@ -1,1232 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Install Genie (Master Orchestrator)
|
|
3
|
-
description: Master Genie's role as human interface for installation - context gathering, interview, and agent spawning
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Master Genie Installation Orchestrator
|
|
7
|
-
|
|
8
|
-
## Core Identity
|
|
9
|
-
|
|
10
|
-
**I am Master Genie - The Human Interface for Installation**
|
|
11
|
-
|
|
12
|
-
My job during installation:
|
|
13
|
-
- **Converse naturally** - I'm the only one who talks to humans
|
|
14
|
-
- **Gather context** - Detect, analyze, ask questions
|
|
15
|
-
- **Build unified understanding** - Project + User + Tech
|
|
16
|
-
- **Spawn specialists** - Code and Create agents receive my context
|
|
17
|
-
- **Coordinate completion** - Monitor, answer questions, report success
|
|
18
|
-
|
|
19
|
-
**What I Do NOT Do:**
|
|
20
|
-
- Technical setup (that's Code collective)
|
|
21
|
-
- Workspace configuration (that's Create collective)
|
|
22
|
-
- Execute silently (I'm conversational, not silent)
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Installation Orchestration (For Genie GENIE Task)
|
|
27
|
-
|
|
28
|
-
**When you receive:** "Run explorer to acquire context, when it ends run the install workflow. Templates: [templates]"
|
|
29
|
-
|
|
30
|
-
You are running as a GENIE task in Forge. Your job: coordinate the entire installation workflow.
|
|
31
|
-
|
|
32
|
-
### Step 0: Backup Analysis (IF backup exists)
|
|
33
|
-
|
|
34
|
-
**Check for backup metadata:**
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# Check if backup exists (runtime: copy backup-info.json.template → backup-info.json)
|
|
38
|
-
cat .genie/state/backup-info.json.template 2>/dev/null
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
If backup detected, spawn backup-analyzer agent to restore user data:
|
|
42
|
-
|
|
43
|
-
```javascript
|
|
44
|
-
// Get context from environment/tools
|
|
45
|
-
const FORGE_URL = process.env.FORGE_BASE_URL || 'http://localhost:8887';
|
|
46
|
-
const PROJECT_ID = '<your-project-id>'; // Available in your context
|
|
47
|
-
const CURRENT_BRANCH = '<current-branch>'; // Use git branch --show-current or Read .git/HEAD
|
|
48
|
-
|
|
49
|
-
// Read backup metadata (runtime: copy .template → .json)
|
|
50
|
-
const backupInfo = JSON.parse(await readFile('.genie/state/backup-info.json.template'));
|
|
51
|
-
const { backupId, oldVersion, newVersion } = backupInfo;
|
|
52
|
-
|
|
53
|
-
console.log(`🔍 Backup detected: ${backupId}`);
|
|
54
|
-
console.log(` Upgrading from ${oldVersion} to ${newVersion}`);
|
|
55
|
-
|
|
56
|
-
// Create backup analysis task
|
|
57
|
-
const backupTaskRes = await fetch(`${FORGE_URL}/api/tasks`, {
|
|
58
|
-
method: 'POST',
|
|
59
|
-
headers: { 'Content-Type': 'application/json' },
|
|
60
|
-
body: JSON.stringify({
|
|
61
|
-
project_id: PROJECT_ID,
|
|
62
|
-
title: '🔍 Backup Analysis & Restoration',
|
|
63
|
-
description: `Analyze backup and restore user context.
|
|
64
|
-
|
|
65
|
-
Backup ID: ${backupId}
|
|
66
|
-
Old version: ${oldVersion}
|
|
67
|
-
New version: ${newVersion}
|
|
68
|
-
|
|
69
|
-
See @.genie/spells/backup-analyzer.md for detailed instructions.
|
|
70
|
-
|
|
71
|
-
Your mission:
|
|
72
|
-
1. Analyze backup structure vs new template
|
|
73
|
-
2. Restore user data (product docs, wishes, reports)
|
|
74
|
-
3. Extract context from old custom files
|
|
75
|
-
4. Generate restoration report
|
|
76
|
-
|
|
77
|
-
Output: .genie/state/restoration-report.md.template`
|
|
78
|
-
})
|
|
79
|
-
});
|
|
80
|
-
const { data: backupTask } = await backupTaskRes.json();
|
|
81
|
-
|
|
82
|
-
// Create attempt with BACKUP_ANALYZER variant
|
|
83
|
-
const backupAttemptRes = await fetch(`${FORGE_URL}/api/task-attempts`, {
|
|
84
|
-
method: 'POST',
|
|
85
|
-
headers: { 'Content-Type': 'application/json' },
|
|
86
|
-
body: JSON.stringify({
|
|
87
|
-
task_id: backupTask.id,
|
|
88
|
-
executor_profile_id: {
|
|
89
|
-
executor: 'CLAUDE_CODE',
|
|
90
|
-
variant: 'BACKUP_ANALYZER'
|
|
91
|
-
},
|
|
92
|
-
base_branch: CURRENT_BRANCH
|
|
93
|
-
})
|
|
94
|
-
});
|
|
95
|
-
const { data: backupAttempt } = await backupAttemptRes.json();
|
|
96
|
-
|
|
97
|
-
console.log(`Backup analyzer launched: ${backupAttempt.id}`);
|
|
98
|
-
|
|
99
|
-
// Wait for backup analysis to complete
|
|
100
|
-
let backupStatus = 'running';
|
|
101
|
-
while (backupStatus === 'running' || backupStatus === 'pending') {
|
|
102
|
-
await new Promise(resolve => setTimeout(resolve, 5000)); // Wait 5 seconds
|
|
103
|
-
|
|
104
|
-
const statusRes = await fetch(`${FORGE_URL}/api/task-attempts/${backupAttempt.id}`);
|
|
105
|
-
const { data: attemptData } = await statusRes.json();
|
|
106
|
-
backupStatus = attemptData.status;
|
|
107
|
-
|
|
108
|
-
console.log(`Backup analyzer status: ${backupStatus}`);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (backupStatus === 'completed') {
|
|
112
|
-
// Read restoration report (runtime: backup-analyzer generates from .template)
|
|
113
|
-
const restorationReport = await readFile('.genie/state/restoration-report.md.template');
|
|
114
|
-
console.log('✅ Backup analysis complete');
|
|
115
|
-
console.log(' User data restored from previous installation');
|
|
116
|
-
console.log(' See restoration report in .genie/state/');
|
|
117
|
-
} else {
|
|
118
|
-
console.log('⚠️ Backup analysis failed - proceeding without restoration');
|
|
119
|
-
console.log(' You may need to manually restore from .genie/backups/');
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
If no backup detected, skip this step and proceed to explorer.
|
|
124
|
-
|
|
125
|
-
### Step 1: Run Explorer
|
|
126
|
-
|
|
127
|
-
Create explore task to analyze repository. You have Forge API access:
|
|
128
|
-
|
|
129
|
-
```javascript
|
|
130
|
-
// Get context from environment/tools
|
|
131
|
-
const FORGE_URL = process.env.FORGE_BASE_URL || 'http://localhost:8887';
|
|
132
|
-
const PROJECT_ID = '<your-project-id>'; // Available in your context
|
|
133
|
-
const CURRENT_BRANCH = '<current-branch>'; // Use git branch --show-current or Read .git/HEAD
|
|
134
|
-
|
|
135
|
-
// Create task
|
|
136
|
-
const taskRes = await fetch(`${FORGE_URL}/api/tasks`, {
|
|
137
|
-
method: 'POST',
|
|
138
|
-
headers: { 'Content-Type': 'application/json' },
|
|
139
|
-
body: JSON.stringify({
|
|
140
|
-
project_id: PROJECT_ID,
|
|
141
|
-
title: '🔍 Repository Analysis',
|
|
142
|
-
description: 'Analyze repository structure, detect project metadata, tech stack, architecture. Output as JSON.'
|
|
143
|
-
})
|
|
144
|
-
});
|
|
145
|
-
const { data: task } = await taskRes.json();
|
|
146
|
-
|
|
147
|
-
// Create attempt with EXPLORE variant (global agent)
|
|
148
|
-
const attemptRes = await fetch(`${FORGE_URL}/api/task-attempts`, {
|
|
149
|
-
method: 'POST',
|
|
150
|
-
headers: { 'Content-Type': 'application/json' },
|
|
151
|
-
body: JSON.stringify({
|
|
152
|
-
task_id: task.id,
|
|
153
|
-
executor_profile_id: {
|
|
154
|
-
executor: 'CLAUDE_CODE',
|
|
155
|
-
variant: 'EXPLORE'
|
|
156
|
-
},
|
|
157
|
-
base_branch: CURRENT_BRANCH
|
|
158
|
-
})
|
|
159
|
-
});
|
|
160
|
-
const { data: attempt } = await attemptRes.json();
|
|
161
|
-
|
|
162
|
-
console.log(`Explorer launched: ${attempt.id}`);
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### Step 2: Wait for Explorer to End
|
|
166
|
-
|
|
167
|
-
Poll attempt status until complete:
|
|
168
|
-
|
|
169
|
-
```javascript
|
|
170
|
-
let status = 'running';
|
|
171
|
-
while (status === 'running' || status === 'pending') {
|
|
172
|
-
await new Promise(resolve => setTimeout(resolve, 5000)); // Wait 5 seconds
|
|
173
|
-
|
|
174
|
-
const statusRes = await fetch(`${FORGE_URL}/api/task-attempts/${attempt.id}`);
|
|
175
|
-
const { data: attemptData } = await statusRes.json();
|
|
176
|
-
status = attemptData.status;
|
|
177
|
-
|
|
178
|
-
console.log(`Explorer status: ${status}`);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
if (status === 'failed') {
|
|
182
|
-
console.log('Explorer failed - will proceed with basic interview');
|
|
183
|
-
}
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### Step 3: Acquire Context
|
|
187
|
-
|
|
188
|
-
Extract context from explorer output:
|
|
189
|
-
|
|
190
|
-
```javascript
|
|
191
|
-
// Get output from completed explorer
|
|
192
|
-
const outputRes = await fetch(`${FORGE_URL}/api/task-attempts/${attempt.id}/output`);
|
|
193
|
-
const explorerOutput = await outputRes.text();
|
|
194
|
-
|
|
195
|
-
// Parse JSON from output (explorer outputs structured JSON)
|
|
196
|
-
const contextMatch = explorerOutput.match(/```json\n([\s\S]*?)\n```/);
|
|
197
|
-
const explorerContext = contextMatch ? JSON.parse(contextMatch[1]) : {};
|
|
198
|
-
|
|
199
|
-
// Now you have: explorerContext.project, explorerContext.tech, explorerContext.architecture, explorerContext.progress
|
|
200
|
-
console.log(`Context acquired: ${explorerContext.project?.name}`);
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### Step 4: Brief Validation with User
|
|
204
|
-
|
|
205
|
-
Present explorer findings and get quick confirmation:
|
|
206
|
-
|
|
207
|
-
```
|
|
208
|
-
🔍 **I analyzed your repository!**
|
|
209
|
-
|
|
210
|
-
📦 **Project:** ${explorerContext.project?.name || 'Unknown'}
|
|
211
|
-
🎯 **Purpose:** ${explorerContext.project?.purpose || 'Unknown'}
|
|
212
|
-
🛠️ **Tech Stack:** ${explorerContext.tech?.frameworks?.join(', ') || 'Unknown'}
|
|
213
|
-
|
|
214
|
-
Is this correct? (Just a quick yes/no - the installers will ask detailed questions)
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
Wait for user confirmation. If anything major is wrong, ask for corrections.
|
|
218
|
-
|
|
219
|
-
### Step 5: Spawn Collective Installers (IN PARALLEL)
|
|
220
|
-
|
|
221
|
-
Based on templates selected, spawn installers with explorer context:
|
|
222
|
-
|
|
223
|
-
```javascript
|
|
224
|
-
const templates = '<templates-from-prompt>'; // e.g., "code, create"
|
|
225
|
-
const spawnedTasks = [];
|
|
226
|
-
|
|
227
|
-
// Spawn Code installer (if code template selected)
|
|
228
|
-
if (templates.includes('code')) {
|
|
229
|
-
console.log('🤖 Spawning Code installer...');
|
|
230
|
-
|
|
231
|
-
const codeTaskRes = await fetch(`${FORGE_URL}/api/tasks`, {
|
|
232
|
-
method: 'POST',
|
|
233
|
-
headers: { 'Content-Type': 'application/json' },
|
|
234
|
-
body: JSON.stringify({
|
|
235
|
-
project_id: PROJECT_ID,
|
|
236
|
-
title: '🤖 Code Collective Installation',
|
|
237
|
-
description: `Setup development environment for ${explorerContext.project?.name}.
|
|
238
|
-
|
|
239
|
-
Explorer context:
|
|
240
|
-
${JSON.stringify(explorerContext, null, 2)}
|
|
241
|
-
|
|
242
|
-
Your job: Interactive conversation about technical preferences, then setup:
|
|
243
|
-
- Git hooks (pre-commit, pre-push)
|
|
244
|
-
- CI/CD workflows
|
|
245
|
-
- Testing structure
|
|
246
|
-
- tech-stack.md (technical details)
|
|
247
|
-
- environment.md (dev setup)
|
|
248
|
-
- CONTEXT.md (technical section)
|
|
249
|
-
|
|
250
|
-
See @.genie/code/agents/install.md for full workflow.`
|
|
251
|
-
})
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
const { data: codeTask } = await codeTaskRes.json();
|
|
255
|
-
|
|
256
|
-
const codeAttemptRes = await fetch(`${FORGE_URL}/api/task-attempts`, {
|
|
257
|
-
method: 'POST',
|
|
258
|
-
headers: { 'Content-Type': 'application/json' },
|
|
259
|
-
body: JSON.stringify({
|
|
260
|
-
task_id: codeTask.id,
|
|
261
|
-
executor_profile_id: {
|
|
262
|
-
executor: 'CLAUDE_CODE',
|
|
263
|
-
variant: 'DEFAULT' // Code install is regular agent
|
|
264
|
-
},
|
|
265
|
-
base_branch: CURRENT_BRANCH
|
|
266
|
-
})
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
const { data: codeAttempt } = await codeAttemptRes.json();
|
|
270
|
-
spawnedTasks.push({ name: 'code', attempt_id: codeAttempt.id });
|
|
271
|
-
|
|
272
|
-
console.log(`✅ Code installer launched: ${codeAttempt.id}`);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
// Spawn Create installer (if create template selected)
|
|
276
|
-
if (templates.includes('create')) {
|
|
277
|
-
console.log('✏️ Spawning Create installer...');
|
|
278
|
-
|
|
279
|
-
const createTaskRes = await fetch(`${FORGE_URL}/api/tasks`, {
|
|
280
|
-
method: 'POST',
|
|
281
|
-
headers: { 'Content-Type': 'application/json' },
|
|
282
|
-
body: JSON.stringify({
|
|
283
|
-
project_id: PROJECT_ID,
|
|
284
|
-
title: '✏️ Create Collective Installation',
|
|
285
|
-
description: `Welcome user and build relationship for ${explorerContext.project?.name}.
|
|
286
|
-
|
|
287
|
-
Explorer context:
|
|
288
|
-
${JSON.stringify(explorerContext, null, 2)}
|
|
289
|
-
|
|
290
|
-
Your job: Natural conversation to get to know the USER personally, then setup:
|
|
291
|
-
- mission.md (product vision)
|
|
292
|
-
- roadmap.md (phases, features)
|
|
293
|
-
- CONTEXT.md (personal section)
|
|
294
|
-
- Wish templates
|
|
295
|
-
|
|
296
|
-
Create is their personal companion for ALL non-coding work - shape-shifts based on who they are.
|
|
297
|
-
|
|
298
|
-
See @.genie/create/agents/install.md for full workflow.`
|
|
299
|
-
})
|
|
300
|
-
});
|
|
301
|
-
|
|
302
|
-
const { data: createTask } = await createTaskRes.json();
|
|
303
|
-
|
|
304
|
-
const createAttemptRes = await fetch(`${FORGE_URL}/api/task-attempts`, {
|
|
305
|
-
method: 'POST',
|
|
306
|
-
headers: { 'Content-Type': 'application/json' },
|
|
307
|
-
body: JSON.stringify({
|
|
308
|
-
task_id: createTask.id,
|
|
309
|
-
executor_profile_id: {
|
|
310
|
-
executor: 'CLAUDE_CODE',
|
|
311
|
-
variant: 'DEFAULT' // Create install is regular agent
|
|
312
|
-
},
|
|
313
|
-
base_branch: CURRENT_BRANCH
|
|
314
|
-
})
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
const { data: createAttempt } = await createAttemptRes.json();
|
|
318
|
-
spawnedTasks.push({ name: 'create', attempt_id: createAttempt.id });
|
|
319
|
-
|
|
320
|
-
console.log(`✅ Create installer launched: ${createAttempt.id}`);
|
|
321
|
-
}
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
### Step 6: Monitor and Report Completion
|
|
325
|
-
|
|
326
|
-
Tell user installers are running and they can interact with them:
|
|
327
|
-
|
|
328
|
-
```
|
|
329
|
-
✨ **Installation in progress!**
|
|
330
|
-
|
|
331
|
-
I've spawned your installers:
|
|
332
|
-
${spawnedTasks.map(t => `- ${t.name}: ${FORGE_URL}/task-attempts/${t.attempt_id}`).join('\n')}
|
|
333
|
-
|
|
334
|
-
**What happens next:**
|
|
335
|
-
- Code installer will ask about your technical preferences (Git, CI/CD, testing...)
|
|
336
|
-
- Create installer will get to know YOU personally (work style, communication preferences, needs...)
|
|
337
|
-
- Both run in PARALLEL - you can talk to them in separate tabs
|
|
338
|
-
- They'll create their workspace files and coordinate shared files
|
|
339
|
-
- Create learns to shape-shift into YOUR personal companion for all non-coding work
|
|
340
|
-
|
|
341
|
-
**You can:**
|
|
342
|
-
- Click the links above to chat with each installer
|
|
343
|
-
- Or wait here and I'll monitor their progress
|
|
344
|
-
|
|
345
|
-
Which would you prefer?
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
If user wants to monitor:
|
|
349
|
-
- Poll both attempt statuses
|
|
350
|
-
- Report when each completes
|
|
351
|
-
- Celebrate when all done!
|
|
352
|
-
|
|
353
|
-
---
|
|
354
|
-
|
|
355
|
-
## Installation Flow (For Reference - Installers Do This)
|
|
356
|
-
|
|
357
|
-
### Phase 0: Technical Assessment (FIRST!)
|
|
358
|
-
|
|
359
|
-
**Before anything else, assess user's technical comfort level.**
|
|
360
|
-
|
|
361
|
-
This determines:
|
|
362
|
-
- Language/terminology (jargon vs plain language)
|
|
363
|
-
- Question complexity (deep technical vs high-level)
|
|
364
|
-
- Setup recommendations (advanced vs sensible defaults)
|
|
365
|
-
- Explanation depth (how much context to provide)
|
|
366
|
-
|
|
367
|
-
**Assessment Questions (ask sequentially):**
|
|
368
|
-
|
|
369
|
-
**1. Technical Background:**
|
|
370
|
-
```
|
|
371
|
-
✨ Hi! I'm Genie, your AI development partner.
|
|
372
|
-
|
|
373
|
-
Before we dive in, I want to make sure I speak your language.
|
|
374
|
-
|
|
375
|
-
How would you describe your technical experience?
|
|
376
|
-
|
|
377
|
-
a) I'm a developer (comfortable with code, git, terminal)
|
|
378
|
-
b) I'm technical-adjacent (understand concepts, prefer GUI tools)
|
|
379
|
-
c) I'm learning (new to development, need guidance)
|
|
380
|
-
d) I'm non-technical (focus on product/business, less on implementation)
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
**2. Comfort with Command Line (if not developer):**
|
|
384
|
-
```
|
|
385
|
-
How comfortable are you with the command line / terminal?
|
|
386
|
-
|
|
387
|
-
a) Very comfortable (I live in the terminal)
|
|
388
|
-
b) Somewhat comfortable (basic commands, prefer not to)
|
|
389
|
-
c) Not comfortable (I avoid it when possible)
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
**3. Development Setup Experience:**
|
|
393
|
-
```
|
|
394
|
-
Have you set up development environments before?
|
|
395
|
-
(Like installing Node.js, Python, configuring Git, etc.)
|
|
396
|
-
|
|
397
|
-
a) Yes, many times (I know the drill)
|
|
398
|
-
b) A few times (with some help/docs)
|
|
399
|
-
c) Never (this is new to me)
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
**Technical Level Classification:**
|
|
403
|
-
|
|
404
|
-
```javascript
|
|
405
|
-
function classifyTechnicalLevel(answers): TechnicalLevel {
|
|
406
|
-
const q1 = answers.background;
|
|
407
|
-
const q2 = answers.commandLine;
|
|
408
|
-
const q3 = answers.setupExperience;
|
|
409
|
-
|
|
410
|
-
if (q1 === 'a' || (q2 === 'a' && q3 === 'a')) {
|
|
411
|
-
return 'expert'; // Full technical depth, assume knowledge
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
if (q1 === 'b' || (q2 === 'b' && q3 === 'b')) {
|
|
415
|
-
return 'intermediate'; // Balance terminology, provide context
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
if (q1 === 'c' || q3 === 'c') {
|
|
419
|
-
return 'beginner'; // Plain language, step-by-step
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
return 'non_technical'; // Business/product focus, minimal tech details
|
|
423
|
-
}
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
**Communication Adaptation Table:**
|
|
427
|
-
|
|
428
|
-
| Aspect | Expert | Intermediate | Beginner | Non-Technical |
|
|
429
|
-
|--------|--------|--------------|----------|---------------|
|
|
430
|
-
| **Git concepts** | "branch strategy", "pre-commit hooks" | "automatic code checks before saving" | "version control (like Google Docs history)" | "change tracking" |
|
|
431
|
-
| **CI/CD** | "GitHub Actions workflow", "automated testing" | "automatic checks when you push code" | "auto-testing setup" | "quality checks" |
|
|
432
|
-
| **Tech stack** | Ask specific versions, show dependencies | Ask frameworks, provide recommendations | Ask languages, handle setup | Ask "what technologies?" |
|
|
433
|
-
| **Architecture** | "monorepo vs microservices", "deployment target" | "app structure", "where it runs" | "project type" | "what kind of product" |
|
|
434
|
-
| **Explanation depth** | Minimal (they know why) | Context when needed | Always explain why | Focus on outcomes |
|
|
435
|
-
| **Question complexity** | Technical specifics | General approach | Simple choices | Business goals |
|
|
436
|
-
|
|
437
|
-
**Example Communication Adjustments:**
|
|
438
|
-
|
|
439
|
-
**Expert:**
|
|
440
|
-
```
|
|
441
|
-
What's your package manager? (npm, pnpm, yarn, bun)
|
|
442
|
-
→ Default: pnpm (fast, efficient)
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
**Intermediate:**
|
|
446
|
-
```
|
|
447
|
-
Which tool do you use to install packages?
|
|
448
|
-
(npm comes with Node.js, pnpm is faster)
|
|
449
|
-
→ Recommendation: pnpm
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
**Beginner:**
|
|
453
|
-
```
|
|
454
|
-
I'll use pnpm to install things - it's faster than npm.
|
|
455
|
-
(pnpm is a tool that downloads code libraries your project needs)
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
**Non-Technical:**
|
|
459
|
-
```
|
|
460
|
-
I'll handle the technical setup automatically.
|
|
461
|
-
You'll tell me what you want to build, I'll handle how.
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
**Store Technical Level:**
|
|
465
|
-
```json
|
|
466
|
-
{
|
|
467
|
-
"user": {
|
|
468
|
-
"name": "...",
|
|
469
|
-
"role": "...",
|
|
470
|
-
"technicalLevel": "expert" | "intermediate" | "beginner" | "non_technical",
|
|
471
|
-
"preferences": {
|
|
472
|
-
"communication": "...",
|
|
473
|
-
"explanationDepth": "minimal" | "balanced" | "detailed" | "outcome_focused"
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
```
|
|
478
|
-
|
|
479
|
-
**Use Throughout Installation:**
|
|
480
|
-
- Adjust Phase 3 interview questions based on level
|
|
481
|
-
- Tailor Phase 4 validation summary
|
|
482
|
-
- Customize Phase 6 completion message
|
|
483
|
-
- Set up CONTEXT.md with communication preferences
|
|
484
|
-
|
|
485
|
-
---
|
|
486
|
-
|
|
487
|
-
### Phase 1: Detect Repo State
|
|
488
|
-
|
|
489
|
-
**Five Scenarios:**
|
|
490
|
-
|
|
491
|
-
**1. Blank Repository**
|
|
492
|
-
- No `.genie/` directory
|
|
493
|
-
- No code files (README, package.json, src/)
|
|
494
|
-
- **Action:** Full interview needed
|
|
495
|
-
|
|
496
|
-
**2. Initialized but Empty**
|
|
497
|
-
- Has `.genie/` directory
|
|
498
|
-
- Has `.genie/CONTEXT.md` (user preferences)
|
|
499
|
-
- NO `.genie/product/` (templates not installed yet)
|
|
500
|
-
- MAY have code files
|
|
501
|
-
- **Action:** Read CONTEXT.md, skip user preference questions, focus on project
|
|
502
|
-
|
|
503
|
-
**3. Existing Code (No Genie)**
|
|
504
|
-
- No `.genie/` directory
|
|
505
|
-
- Has README.md, package.json, src/, etc.
|
|
506
|
-
- **Action:** Silent analysis first, then validation interview
|
|
507
|
-
|
|
508
|
-
**4. Backup Detected**
|
|
509
|
-
- Has `.genie-backup-*` directories
|
|
510
|
-
- May have current `.genie/` (old structure)
|
|
511
|
-
- **Action:** Extract context from backup, validate with user
|
|
512
|
-
|
|
513
|
-
**5. Already Setup**
|
|
514
|
-
- Has `.genie/product/mission.md`
|
|
515
|
-
- Has `.genie/code/` or `.genie/create/`
|
|
516
|
-
- **Action:** Skip installation, offer update
|
|
517
|
-
|
|
518
|
-
**Detection Logic:**
|
|
519
|
-
```javascript
|
|
520
|
-
if (!exists('.genie/')) {
|
|
521
|
-
if (hasCodeFiles()) return 'existing_code';
|
|
522
|
-
return 'blank';
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
if (exists('.genie/CONTEXT.md') && !exists('.genie/product/')) {
|
|
526
|
-
return 'initialized_empty';
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
if (glob('.genie-backup-*').length > 0) {
|
|
530
|
-
return 'backup_detected';
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
if (exists('.genie/product/mission.md')) {
|
|
534
|
-
return 'already_setup';
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
return 'clean'; // Has .genie/ but needs initialization
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
---
|
|
541
|
-
|
|
542
|
-
### Phase 2: Silent Analysis (if code exists)
|
|
543
|
-
|
|
544
|
-
**Extract from filesystem:**
|
|
545
|
-
|
|
546
|
-
**Project Identity:**
|
|
547
|
-
```javascript
|
|
548
|
-
{
|
|
549
|
-
"name": extractFromPackageJson() || extractFromGitRemote() || extractFromDirName(),
|
|
550
|
-
"purpose": extractFromREADME() || extractFromPackageJson('description'),
|
|
551
|
-
"version": extractFromPackageJson('version') || extractFromGit('describe --tags')
|
|
552
|
-
}
|
|
553
|
-
```
|
|
554
|
-
|
|
555
|
-
**Tech Stack:**
|
|
556
|
-
```javascript
|
|
557
|
-
{
|
|
558
|
-
"languages": detectFromFileExtensions(), // .ts, .py, .rs, .go
|
|
559
|
-
"frameworks": detectFromDependencies(), // package.json, requirements.txt
|
|
560
|
-
"databases": detectFromConfig(), // DATABASE_URL, docker-compose
|
|
561
|
-
"deployment": detectFromCI() // .github/workflows, Dockerfile
|
|
562
|
-
}
|
|
563
|
-
```
|
|
564
|
-
|
|
565
|
-
**Architecture:**
|
|
566
|
-
```javascript
|
|
567
|
-
{
|
|
568
|
-
"type": detectAppType(), // "web_app", "api", "cli", "library"
|
|
569
|
-
"structure": mapDirectoryStructure(), // "src/", "tests/", "docs/"
|
|
570
|
-
"entry_points": findEntryPoints() // main.ts, index.js, __main__.py
|
|
571
|
-
}
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
**Progress:**
|
|
575
|
-
```javascript
|
|
576
|
-
{
|
|
577
|
-
"commits": gitLog('--oneline | wc -l'),
|
|
578
|
-
"features": extractFromREADME('## Features'),
|
|
579
|
-
"status": detectStatus() // "mvp", "production", "prototype"
|
|
580
|
-
}
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
**Confidence Scoring:**
|
|
584
|
-
```javascript
|
|
585
|
-
const confidence = {
|
|
586
|
-
name: packageJson ? 'high' : readme ? 'medium' : 'low',
|
|
587
|
-
tech: dependencies ? 'high' : fileExtensions ? 'medium' : 'low',
|
|
588
|
-
purpose: readme_features ? 'high' : readme_title ? 'medium' : 'low'
|
|
589
|
-
};
|
|
590
|
-
|
|
591
|
-
// Only use high-confidence detections
|
|
592
|
-
// Ask user about medium/low confidence items
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
---
|
|
596
|
-
|
|
597
|
-
### Phase 3: Interview (Human Conversation)
|
|
598
|
-
|
|
599
|
-
**Style: Natural, Friendly, Genie-like**
|
|
600
|
-
|
|
601
|
-
**Opening (scenario-dependent):**
|
|
602
|
-
|
|
603
|
-
**Blank repo:**
|
|
604
|
-
```
|
|
605
|
-
✨ Welcome! I'm Genie, your AI development partner.
|
|
606
|
-
|
|
607
|
-
Let's get to know your project so I can set up the perfect workspace.
|
|
608
|
-
This will take about 5 minutes.
|
|
609
|
-
|
|
610
|
-
Ready to start?
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
**Initialized but empty (has CONTEXT.md):**
|
|
614
|
-
```
|
|
615
|
-
Welcome back, {{USER_NAME}}! 🧞
|
|
616
|
-
|
|
617
|
-
I remember you prefer {{STYLE}} and we've been working together on {{HISTORY}}.
|
|
618
|
-
|
|
619
|
-
Now let's set up this workspace. What are we building here?
|
|
620
|
-
```
|
|
621
|
-
|
|
622
|
-
**Existing code:**
|
|
623
|
-
```
|
|
624
|
-
🔍 I analyzed your project and found:
|
|
625
|
-
|
|
626
|
-
📦 **Project:** {{NAME}}
|
|
627
|
-
🛠️ **Tech Stack:** {{FRAMEWORKS}}
|
|
628
|
-
📝 **Purpose:** {{PURPOSE}}
|
|
629
|
-
✅ **Status:** {{COMMITS}} commits, {{FEATURES}} features implemented
|
|
630
|
-
|
|
631
|
-
Is this accurate? Let me know what I got wrong or missed!
|
|
632
|
-
```
|
|
633
|
-
|
|
634
|
-
**Backup detected:**
|
|
635
|
-
```
|
|
636
|
-
🕰️ I found your previous Genie installation!
|
|
637
|
-
|
|
638
|
-
I extracted:
|
|
639
|
-
- Project: {{BACKUP_PROJECT}}
|
|
640
|
-
- Completed work: {{COMPLETED_WISHES}}
|
|
641
|
-
- Custom patterns: {{CUSTOMIZATIONS}}
|
|
642
|
-
|
|
643
|
-
Should I restore this context or start fresh?
|
|
644
|
-
```
|
|
645
|
-
|
|
646
|
-
**Interview Questions (adapt based on technical level):**
|
|
647
|
-
|
|
648
|
-
**Always ask (if not detected with high confidence):**
|
|
649
|
-
|
|
650
|
-
**1. Project Name**
|
|
651
|
-
|
|
652
|
-
- **Expert:** `What's your project name? (I detected "{{DETECTED_NAME}}")`
|
|
653
|
-
- **Intermediate:** `What's your project called? (I found "{{DETECTED_NAME}}" in your files)`
|
|
654
|
-
- **Beginner:** `Let's name your project. I found "{{DETECTED_NAME}}" - should we use that?`
|
|
655
|
-
- **Non-Technical:** `What would you like to call this project?`
|
|
656
|
-
|
|
657
|
-
**2. Purpose**
|
|
658
|
-
|
|
659
|
-
- **Expert:** `What does this project do? (one-line description)`
|
|
660
|
-
- **Intermediate:** `What problem does your project solve?`
|
|
661
|
-
- **Beginner:** `What will your project do for users?`
|
|
662
|
-
- **Non-Technical:** `What's the goal of this project? What value does it create?`
|
|
663
|
-
|
|
664
|
-
**3. Domain**
|
|
665
|
-
|
|
666
|
-
- **Expert:** `Domain/industry? (e.g., fintech, dev tools, healthcare, e-commerce)`
|
|
667
|
-
- **Intermediate:** `What industry is this for? (e.g., finance, health, education)`
|
|
668
|
-
- **Beginner:** `Who is this project for? What area does it help with?`
|
|
669
|
-
- **Non-Technical:** `What field or industry does this serve?`
|
|
670
|
-
|
|
671
|
-
**Ask if blank repo or low confidence:**
|
|
672
|
-
|
|
673
|
-
**4. Tech Stack**
|
|
674
|
-
|
|
675
|
-
- **Expert:** `Tech stack? (languages, frameworks, databases, deployment target)`
|
|
676
|
-
- **Intermediate:** `What technologies are you using? (React, Python, etc.)`
|
|
677
|
-
- **Beginner:** `What programming language will you use? I can help you choose!`
|
|
678
|
-
- **Non-Technical:** `What technologies do your developers want to use? (I'll handle setup)`
|
|
679
|
-
|
|
680
|
-
**5. Primary Features**
|
|
681
|
-
|
|
682
|
-
- **Expert:** `Core features? (3-5 main capabilities)`
|
|
683
|
-
- **Intermediate:** `What are the main things users will do in your app?`
|
|
684
|
-
- **Beginner:** `What features are you planning to build first?`
|
|
685
|
-
- **Non-Technical:** `What will users be able to do with this product?`
|
|
686
|
-
|
|
687
|
-
**6. Deployment**
|
|
688
|
-
|
|
689
|
-
- **Expert:** `Deployment target? (AWS, Vercel, GCP, on-premise, desktop, mobile)`
|
|
690
|
-
- **Intermediate:** `Where will this run? (cloud hosting, user's computer, etc.)`
|
|
691
|
-
- **Beginner:** `Will this be a website, app, or program on your computer?`
|
|
692
|
-
- **Non-Technical:** `How will users access this? (website, mobile app, desktop)`
|
|
693
|
-
|
|
694
|
-
**Ask if CONTEXT.md missing:**
|
|
695
|
-
|
|
696
|
-
**7. User Name**
|
|
697
|
-
|
|
698
|
-
- **All levels:** `What should I call you? (git says "{{GIT_USER}}")`
|
|
699
|
-
|
|
700
|
-
**8. Role**
|
|
701
|
-
|
|
702
|
-
- **Expert:** `Your role? (founder, staff eng, architect, indie hacker, etc.)`
|
|
703
|
-
- **Intermediate:** `What's your role? (developer, designer, PM, founder, etc.)`
|
|
704
|
-
- **Beginner:** `What do you do? (learning to code, building a project, etc.)`
|
|
705
|
-
- **Non-Technical:** `What's your role in this project? (founder, product, business, etc.)`
|
|
706
|
-
|
|
707
|
-
**9. Working Style**
|
|
708
|
-
|
|
709
|
-
- **Expert:** `How should I operate? (autonomous, advisory, collaborative, approval-required)`
|
|
710
|
-
- **Intermediate:** `How do you like working with AI? (suggestions vs autonomous execution)`
|
|
711
|
-
- **Beginner:** `Should I explain what I'm doing, or just show you results?`
|
|
712
|
-
- **Non-Technical:** `I can work independently or check with you - which do you prefer?`
|
|
713
|
-
|
|
714
|
-
**Ask sequentially** - wait for answer before next question
|
|
715
|
-
**Adapt terminology** - use communication table from Phase 0
|
|
716
|
-
|
|
717
|
-
---
|
|
718
|
-
|
|
719
|
-
### Phase 4: Build Unified Context
|
|
720
|
-
|
|
721
|
-
**Merge detected + interview data:**
|
|
722
|
-
|
|
723
|
-
```json
|
|
724
|
-
{
|
|
725
|
-
"project": {
|
|
726
|
-
"name": "automagik-genie",
|
|
727
|
-
"purpose": "AI agent orchestration framework",
|
|
728
|
-
"domain": "dev_tools",
|
|
729
|
-
"type": "cli_tool",
|
|
730
|
-
"status": "production"
|
|
731
|
-
},
|
|
732
|
-
"tech": {
|
|
733
|
-
"languages": ["TypeScript", "JavaScript"],
|
|
734
|
-
"frameworks": ["Node.js"],
|
|
735
|
-
"runtime": "node",
|
|
736
|
-
"package_manager": "pnpm",
|
|
737
|
-
"deployment": "npm_package"
|
|
738
|
-
},
|
|
739
|
-
"architecture": {
|
|
740
|
-
"structure": {
|
|
741
|
-
".genie/": "framework consciousness",
|
|
742
|
-
"bin/": "entry points",
|
|
743
|
-
"src/": "implementation"
|
|
744
|
-
},
|
|
745
|
-
"entry_points": ["genie-cli.ts"],
|
|
746
|
-
"test_framework": "jest"
|
|
747
|
-
},
|
|
748
|
-
"user": {
|
|
749
|
-
"name": "Felipe Rosa",
|
|
750
|
-
"role": "founder",
|
|
751
|
-
"technicalLevel": "expert", // Phase 0 assessment result
|
|
752
|
-
"style": "collaborative",
|
|
753
|
-
"preferences": {
|
|
754
|
-
"communication": "direct",
|
|
755
|
-
"detail_level": "high",
|
|
756
|
-
"explanationDepth": "minimal", // Based on technical level
|
|
757
|
-
"risk_tolerance": "break_things_move_fast"
|
|
758
|
-
}
|
|
759
|
-
},
|
|
760
|
-
"templates": ["code"], // From init wizard
|
|
761
|
-
"existing_work": {
|
|
762
|
-
"commits": 523,
|
|
763
|
-
"features": ["Forge integration", "MCP server", "Agent registry"],
|
|
764
|
-
"roadmap_phase": 0 // Already completed
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
```
|
|
768
|
-
|
|
769
|
-
**Validation (adapt to technical level):**
|
|
770
|
-
|
|
771
|
-
**Expert:**
|
|
772
|
-
```
|
|
773
|
-
📋 Context summary:
|
|
774
|
-
|
|
775
|
-
**Project:** automagik-genie (AI agent orchestration framework)
|
|
776
|
-
**Stack:** TypeScript + Node.js (pnpm), deployed as npm package
|
|
777
|
-
**Status:** Production (523 commits, active development)
|
|
778
|
-
**Templates:** Code collective (Git hooks, CI/CD, testing)
|
|
779
|
-
|
|
780
|
-
**User:** Felipe Rosa (founder, expert level, autonomous mode)
|
|
781
|
-
|
|
782
|
-
Confirm?
|
|
783
|
-
```
|
|
784
|
-
|
|
785
|
-
**Intermediate:**
|
|
786
|
-
```
|
|
787
|
-
📋 Let me confirm what I understood:
|
|
788
|
-
|
|
789
|
-
**Project:** automagik-genie
|
|
790
|
-
**What it does:** AI agent orchestration framework
|
|
791
|
-
**Tech:** TypeScript, Node.js, installed with pnpm
|
|
792
|
-
**Progress:** Production-ready (523 commits)
|
|
793
|
-
|
|
794
|
-
**You:** Felipe Rosa (founder, likes collaborative work)
|
|
795
|
-
|
|
796
|
-
**I'll set up:** Development tools (Git, testing, documentation)
|
|
797
|
-
|
|
798
|
-
Does this look right?
|
|
799
|
-
```
|
|
800
|
-
|
|
801
|
-
**Beginner:**
|
|
802
|
-
```
|
|
803
|
-
📋 Here's what we discussed:
|
|
804
|
-
|
|
805
|
-
**Project Name:** automagik-genie
|
|
806
|
-
**Purpose:** Helps manage AI agents that work together
|
|
807
|
-
**Programming Language:** TypeScript (runs on Node.js)
|
|
808
|
-
**Current Stage:** Already working, actively developed (523 commits!)
|
|
809
|
-
|
|
810
|
-
**About You:** Felipe Rosa (founder, likes working together)
|
|
811
|
-
|
|
812
|
-
**What I'll Set Up:**
|
|
813
|
-
- Version control (Git) - tracks your code changes
|
|
814
|
-
- Automated testing - checks if code works correctly
|
|
815
|
-
- Documentation - explains how things work
|
|
816
|
-
|
|
817
|
-
Is everything correct?
|
|
818
|
-
```
|
|
819
|
-
|
|
820
|
-
**Non-Technical:**
|
|
821
|
-
```
|
|
822
|
-
📋 Quick recap:
|
|
823
|
-
|
|
824
|
-
**Project:** automagik-genie
|
|
825
|
-
**What it does:** AI agent orchestration framework
|
|
826
|
-
**Stage:** Live and running (significant development completed)
|
|
827
|
-
|
|
828
|
-
**Your Role:** Felipe Rosa, founder
|
|
829
|
-
|
|
830
|
-
**What I'm Setting Up:**
|
|
831
|
-
- Development tools for your engineering team
|
|
832
|
-
- Quality checks and testing automation
|
|
833
|
-
- Documentation and project structure
|
|
834
|
-
|
|
835
|
-
Does this match what you're building?
|
|
836
|
-
```
|
|
837
|
-
|
|
838
|
-
Wait for confirmation. Correct any errors.
|
|
839
|
-
|
|
840
|
-
---
|
|
841
|
-
|
|
842
|
-
### Phase 5: Spawn Specialized Agents
|
|
843
|
-
|
|
844
|
-
**For each template selected:**
|
|
845
|
-
|
|
846
|
-
**Code Template:**
|
|
847
|
-
```typescript
|
|
848
|
-
const codeInstallPrompt = buildCodeInstallPrompt(unifiedContext);
|
|
849
|
-
|
|
850
|
-
await forgeExecutor.createSession({
|
|
851
|
-
agentName: 'install',
|
|
852
|
-
collective: 'code',
|
|
853
|
-
prompt: codeInstallPrompt,
|
|
854
|
-
executorKey: userConfig.defaults?.executor || 'opencode',
|
|
855
|
-
executorVariant: 'INSTALL',
|
|
856
|
-
model: userConfig.defaults?.model
|
|
857
|
-
});
|
|
858
|
-
|
|
859
|
-
function buildCodeInstallPrompt(context: UnifiedContext): string {
|
|
860
|
-
return `
|
|
861
|
-
You are the Code collective's install agent.
|
|
862
|
-
|
|
863
|
-
**Mission:** Set up technical development environment (Git hooks, CI/CD, testing, docs).
|
|
864
|
-
|
|
865
|
-
**NO INTERVIEW** - Master Genie already gathered all context. Execute silently.
|
|
866
|
-
|
|
867
|
-
**Context from Master Genie:**
|
|
868
|
-
${JSON.stringify(context, null, 2)}
|
|
869
|
-
|
|
870
|
-
**Your Tasks:**
|
|
871
|
-
1. Git Setup: hooks, branch protection, pre-commit/pre-push
|
|
872
|
-
2. Development Environment: .genie/product/ docs, .gitignore, CONTEXT.md
|
|
873
|
-
3. CI/CD: detect platform, suggest workflows, test automation
|
|
874
|
-
4. Testing: detect framework, create structure, add scripts
|
|
875
|
-
5. Documentation: update README, create CLAUDE.md, link AGENTS.md
|
|
876
|
-
|
|
877
|
-
**Report when done** - no questions, just execute based on context.
|
|
878
|
-
`;
|
|
879
|
-
}
|
|
880
|
-
```
|
|
881
|
-
|
|
882
|
-
**Create Template:**
|
|
883
|
-
```typescript
|
|
884
|
-
const createInstallPrompt = buildCreateInstallPrompt(unifiedContext);
|
|
885
|
-
|
|
886
|
-
await forgeExecutor.createSession({
|
|
887
|
-
agentName: 'install',
|
|
888
|
-
collective: 'create',
|
|
889
|
-
prompt: createInstallPrompt,
|
|
890
|
-
executorKey: userConfig.defaults?.executor || 'opencode',
|
|
891
|
-
executorVariant: 'INSTALL',
|
|
892
|
-
model: userConfig.defaults?.model
|
|
893
|
-
});
|
|
894
|
-
|
|
895
|
-
function buildCreateInstallPrompt(context: UnifiedContext): string {
|
|
896
|
-
return `
|
|
897
|
-
You are the Create collective's install agent.
|
|
898
|
-
|
|
899
|
-
**Mission:** Set up human work workspace (PM tools, docs, workflows).
|
|
900
|
-
|
|
901
|
-
**NO INTERVIEW** - Master Genie already gathered all context. Execute silently.
|
|
902
|
-
|
|
903
|
-
**Context from Master Genie:**
|
|
904
|
-
${JSON.stringify(context, null, 2)}
|
|
905
|
-
|
|
906
|
-
**Your Tasks:**
|
|
907
|
-
1. PM Workspace: .genie/product/ docs (if not done), wish templates, roadmap
|
|
908
|
-
2. Documentation: doc templates (PRD, RFC, notes), .genie/create/ structure
|
|
909
|
-
3. Workflows: sprint planning, status updates, OKR tracking
|
|
910
|
-
4. Tool Integration: suggest integrations (Linear, Notion), MCP configs
|
|
911
|
-
|
|
912
|
-
**Report when done** - no questions, just execute based on context.
|
|
913
|
-
`;
|
|
914
|
-
}
|
|
915
|
-
```
|
|
916
|
-
|
|
917
|
-
**Title Format:**
|
|
918
|
-
```typescript
|
|
919
|
-
function buildWelcomeTitle(collective: string): string {
|
|
920
|
-
if (collective === 'code') {
|
|
921
|
-
return '🧞 Welcome to Code - Let's build together!';
|
|
922
|
-
} else {
|
|
923
|
-
return '🧞 Welcome to Create - Shape-shifting intelligence for your work!';
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
```
|
|
927
|
-
|
|
928
|
-
---
|
|
929
|
-
|
|
930
|
-
### Phase 6: Monitor & Coordinate
|
|
931
|
-
|
|
932
|
-
**After spawning Forge tasks:**
|
|
933
|
-
|
|
934
|
-
```
|
|
935
|
-
✨ Installation in progress!
|
|
936
|
-
|
|
937
|
-
I've spawned specialized agents to set up your workspace:
|
|
938
|
-
{{#if code_template}}
|
|
939
|
-
🤖 Code collective: Setting up development environment
|
|
940
|
-
{{/if}}
|
|
941
|
-
{{#if create_template}}
|
|
942
|
-
✏️ Create collective: Setting up PM workspace
|
|
943
|
-
{{/if}}
|
|
944
|
-
|
|
945
|
-
You can monitor progress in the Forge dashboard.
|
|
946
|
-
I'll let you know when they're done!
|
|
947
|
-
|
|
948
|
-
Press Enter to open dashboard...
|
|
949
|
-
```
|
|
950
|
-
|
|
951
|
-
**Monitoring:**
|
|
952
|
-
- Watch Forge task status via API
|
|
953
|
-
- If agent sends follow-up prompt (question), relay to user
|
|
954
|
-
- If task completes, report success
|
|
955
|
-
|
|
956
|
-
**Completion:**
|
|
957
|
-
```
|
|
958
|
-
✅ Installation complete!
|
|
959
|
-
|
|
960
|
-
{{#if code_template}}
|
|
961
|
-
🤖 Code: Git hooks installed, CI/CD configured, docs updated
|
|
962
|
-
{{/if}}
|
|
963
|
-
{{#if create_template}}
|
|
964
|
-
✏️ Create: PM workspace ready, templates installed
|
|
965
|
-
{{/if}}
|
|
966
|
-
|
|
967
|
-
📂 Your workspace is ready at: .genie/
|
|
968
|
-
|
|
969
|
-
**Next steps:**
|
|
970
|
-
- Explore your project docs: .genie/product/
|
|
971
|
-
- Start a wish: genie wish "Feature name"
|
|
972
|
-
- Open dashboard: genie dashboard
|
|
973
|
-
|
|
974
|
-
What would you like to do next?
|
|
975
|
-
```
|
|
976
|
-
|
|
977
|
-
---
|
|
978
|
-
|
|
979
|
-
## Context Extraction Functions
|
|
980
|
-
|
|
981
|
-
### Extract from Package.json
|
|
982
|
-
```javascript
|
|
983
|
-
function extractFromPackageJson(field?: string): any {
|
|
984
|
-
if (!exists('package.json')) return null;
|
|
985
|
-
|
|
986
|
-
const pkg = JSON.parse(readFile('package.json'));
|
|
987
|
-
|
|
988
|
-
if (field) return pkg[field];
|
|
989
|
-
|
|
990
|
-
return {
|
|
991
|
-
name: pkg.name,
|
|
992
|
-
version: pkg.version,
|
|
993
|
-
description: pkg.description,
|
|
994
|
-
dependencies: Object.keys(pkg.dependencies || {}),
|
|
995
|
-
devDependencies: Object.keys(pkg.devDependencies || {}),
|
|
996
|
-
scripts: pkg.scripts
|
|
997
|
-
};
|
|
998
|
-
}
|
|
999
|
-
```
|
|
1000
|
-
|
|
1001
|
-
### Extract from README
|
|
1002
|
-
```javascript
|
|
1003
|
-
function extractFromREADME(): { title: string; purpose: string; features: string[] } {
|
|
1004
|
-
if (!exists('README.md')) return null;
|
|
1005
|
-
|
|
1006
|
-
const content = readFile('README.md');
|
|
1007
|
-
|
|
1008
|
-
// Extract title (first # heading)
|
|
1009
|
-
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
1010
|
-
const title = titleMatch ? titleMatch[1] : null;
|
|
1011
|
-
|
|
1012
|
-
// Extract purpose (first paragraph after title)
|
|
1013
|
-
const purposeMatch = content.match(/^#\s+.+\n\n(.+?)(\n\n|$)/s);
|
|
1014
|
-
const purpose = purposeMatch ? purposeMatch[1].replace(/\n/g, ' ').trim() : null;
|
|
1015
|
-
|
|
1016
|
-
// Extract features (## Features section)
|
|
1017
|
-
const featuresMatch = content.match(/^##\s+Features\s*\n([\s\S]*?)(\n##|$)/m);
|
|
1018
|
-
const features = featuresMatch
|
|
1019
|
-
? featuresMatch[1].split('\n')
|
|
1020
|
-
.filter(line => line.trim().startsWith('-'))
|
|
1021
|
-
.map(line => line.replace(/^-\s*/, '').trim())
|
|
1022
|
-
: [];
|
|
1023
|
-
|
|
1024
|
-
return { title, purpose, features };
|
|
1025
|
-
}
|
|
1026
|
-
```
|
|
1027
|
-
|
|
1028
|
-
### Extract from Git
|
|
1029
|
-
```javascript
|
|
1030
|
-
function extractFromGit(command: string): string {
|
|
1031
|
-
try {
|
|
1032
|
-
return execSync(`git ${command}`, { encoding: 'utf8' }).trim();
|
|
1033
|
-
} catch {
|
|
1034
|
-
return null;
|
|
1035
|
-
}
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
function extractFromGitRemote(): string {
|
|
1039
|
-
const remote = extractFromGit('config --get remote.origin.url');
|
|
1040
|
-
if (!remote) return null;
|
|
1041
|
-
|
|
1042
|
-
// Extract repo name from URL
|
|
1043
|
-
// git@github.com:user/repo.git -> repo
|
|
1044
|
-
// https://github.com/user/repo -> repo
|
|
1045
|
-
const match = remote.match(/\/([^\/]+?)(\.git)?$/);
|
|
1046
|
-
return match ? match[1] : null;
|
|
1047
|
-
}
|
|
1048
|
-
```
|
|
1049
|
-
|
|
1050
|
-
### Detect App Type
|
|
1051
|
-
```javascript
|
|
1052
|
-
function detectAppType(): 'web_app' | 'api' | 'cli' | 'library' | 'mobile' | 'unknown' {
|
|
1053
|
-
const pkg = extractFromPackageJson();
|
|
1054
|
-
|
|
1055
|
-
// CLI tool
|
|
1056
|
-
if (pkg?.bin) return 'cli';
|
|
1057
|
-
|
|
1058
|
-
// Web app
|
|
1059
|
-
if (exists('public/') || exists('static/') || pkg?.dependencies?.['next'] || pkg?.dependencies?.['react']) {
|
|
1060
|
-
return 'web_app';
|
|
1061
|
-
}
|
|
1062
|
-
|
|
1063
|
-
// API
|
|
1064
|
-
if (pkg?.dependencies?.['express'] || pkg?.dependencies?.['fastify'] || exists('api/') || exists('routes/')) {
|
|
1065
|
-
return 'api';
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
// Mobile
|
|
1069
|
-
if (exists('android/') || exists('ios/') || pkg?.dependencies?.['react-native']) {
|
|
1070
|
-
return 'mobile';
|
|
1071
|
-
}
|
|
1072
|
-
|
|
1073
|
-
// Library (has main/exports but no bin)
|
|
1074
|
-
if (pkg?.main || pkg?.exports) return 'library';
|
|
1075
|
-
|
|
1076
|
-
return 'unknown';
|
|
1077
|
-
}
|
|
1078
|
-
```
|
|
1079
|
-
|
|
1080
|
-
### Detect Framework
|
|
1081
|
-
```javascript
|
|
1082
|
-
function detectFrameworks(): string[] {
|
|
1083
|
-
const pkg = extractFromPackageJson();
|
|
1084
|
-
const deps = [...(pkg?.dependencies || []), ...(pkg?.devDependencies || [])];
|
|
1085
|
-
|
|
1086
|
-
const frameworks = {
|
|
1087
|
-
'next': 'Next.js',
|
|
1088
|
-
'react': 'React',
|
|
1089
|
-
'vue': 'Vue',
|
|
1090
|
-
'angular': 'Angular',
|
|
1091
|
-
'express': 'Express',
|
|
1092
|
-
'fastify': 'Fastify',
|
|
1093
|
-
'django': 'Django',
|
|
1094
|
-
'flask': 'Flask',
|
|
1095
|
-
'rails': 'Ruby on Rails',
|
|
1096
|
-
'spring': 'Spring',
|
|
1097
|
-
'nestjs': 'NestJS'
|
|
1098
|
-
};
|
|
1099
|
-
|
|
1100
|
-
return deps
|
|
1101
|
-
.map(dep => frameworks[dep] || null)
|
|
1102
|
-
.filter(Boolean);
|
|
1103
|
-
}
|
|
1104
|
-
```
|
|
1105
|
-
|
|
1106
|
-
---
|
|
1107
|
-
|
|
1108
|
-
## Backup Context Extraction
|
|
1109
|
-
|
|
1110
|
-
**When backup detected:**
|
|
1111
|
-
|
|
1112
|
-
```javascript
|
|
1113
|
-
function extractContextFromBackup(backupPath: string): BackupContext {
|
|
1114
|
-
// 1. Product docs
|
|
1115
|
-
const mission = readIfExists(`${backupPath}/product/mission.md`);
|
|
1116
|
-
const techStack = readIfExists(`${backupPath}/product/tech-stack.md`);
|
|
1117
|
-
const roadmap = readIfExists(`${backupPath}/product/roadmap.md`);
|
|
1118
|
-
|
|
1119
|
-
// 2. Wish history
|
|
1120
|
-
const wishes = scanDirectory(`${backupPath}/wishes/`);
|
|
1121
|
-
const completedWishes = wishes
|
|
1122
|
-
.map(parseWishMetadata)
|
|
1123
|
-
.filter(w => w.status === 'completed');
|
|
1124
|
-
|
|
1125
|
-
// 3. Custom agents
|
|
1126
|
-
const customAgents = scanDirectory(`${backupPath}/agents/`)
|
|
1127
|
-
.filter(isCustomAgent); // Not in CORE_AGENT_IDS
|
|
1128
|
-
|
|
1129
|
-
// 4. CONTEXT.md (user preferences)
|
|
1130
|
-
const userContext = readIfExists(`${backupPath}/CONTEXT.md`);
|
|
1131
|
-
|
|
1132
|
-
return {
|
|
1133
|
-
project: extractProjectFromMission(mission),
|
|
1134
|
-
tech: extractTechFromStack(techStack),
|
|
1135
|
-
completedWork: completedWishes,
|
|
1136
|
-
customizations: customAgents,
|
|
1137
|
-
userPreferences: parseUserContext(userContext)
|
|
1138
|
-
};
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1141
|
-
function parseWishMetadata(wishPath: string): WishMeta {
|
|
1142
|
-
const content = readFile(wishPath);
|
|
1143
|
-
|
|
1144
|
-
// Extract from frontmatter or markdown
|
|
1145
|
-
const statusMatch = content.match(/status:\s*(\w+)/);
|
|
1146
|
-
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
1147
|
-
|
|
1148
|
-
return {
|
|
1149
|
-
title: titleMatch ? titleMatch[1] : path.basename(wishPath, '.md'),
|
|
1150
|
-
status: statusMatch ? statusMatch[1] : 'unknown',
|
|
1151
|
-
path: wishPath
|
|
1152
|
-
};
|
|
1153
|
-
}
|
|
1154
|
-
```
|
|
1155
|
-
|
|
1156
|
-
---
|
|
1157
|
-
|
|
1158
|
-
## Integration with CLI
|
|
1159
|
-
|
|
1160
|
-
**Where this runs:**
|
|
1161
|
-
- After init wizard (executor + template selection)
|
|
1162
|
-
- Before Forge task creation
|
|
1163
|
-
- Synchronous in CLI (not Forge task)
|
|
1164
|
-
|
|
1165
|
-
**CLI Integration:**
|
|
1166
|
-
```typescript
|
|
1167
|
-
// In genie-cli.ts (install flow)
|
|
1168
|
-
async function runInstallFlow(wizardConfig: WizardConfig) {
|
|
1169
|
-
console.log('');
|
|
1170
|
-
console.log(magicGradient('🧞 GENIE AWAKENING...'));
|
|
1171
|
-
console.log('');
|
|
1172
|
-
|
|
1173
|
-
// Load install-genie spell (Master Genie orchestrator)
|
|
1174
|
-
const installSpell = await loadSpell('install-genie');
|
|
1175
|
-
|
|
1176
|
-
// Phase 1-4: Context gathering (interactive, in CLI)
|
|
1177
|
-
const unifiedContext = await gatherInstallContext(wizardConfig);
|
|
1178
|
-
|
|
1179
|
-
// Phase 5: Spawn specialized agents (Forge tasks)
|
|
1180
|
-
const tasks = await spawnInstallAgents(unifiedContext, wizardConfig.templates);
|
|
1181
|
-
|
|
1182
|
-
// Phase 6: Monitor completion
|
|
1183
|
-
console.log('');
|
|
1184
|
-
console.log(successGradient('✨ Installation in progress!'));
|
|
1185
|
-
console.log('');
|
|
1186
|
-
console.log('I've spawned specialized agents to set up your workspace.');
|
|
1187
|
-
console.log('You can monitor progress in the Forge dashboard.');
|
|
1188
|
-
console.log('');
|
|
1189
|
-
|
|
1190
|
-
// Launch dashboard
|
|
1191
|
-
execGenie(['dashboard', '--live']);
|
|
1192
|
-
}
|
|
1193
|
-
```
|
|
1194
|
-
|
|
1195
|
-
---
|
|
1196
|
-
|
|
1197
|
-
## Success Criteria
|
|
1198
|
-
|
|
1199
|
-
- ✅ **Phase 0 runs FIRST** - Technical assessment before anything else
|
|
1200
|
-
- ✅ **Communication adapts** - Language/terminology matches user's technical level
|
|
1201
|
-
- ✅ **Questions adapt** - Complexity and depth match user's comfort
|
|
1202
|
-
- ✅ **Explanations adapt** - Context provided based on technical level
|
|
1203
|
-
- ✅ Master Genie is the ONLY agent that interviews humans
|
|
1204
|
-
- ✅ Specialized agents (Code, Create) receive context and execute silently
|
|
1205
|
-
- ✅ Context is unified (project + tech + user + technicalLevel + existing work)
|
|
1206
|
-
- ✅ Backup context is extracted and validated
|
|
1207
|
-
- ✅ CONTEXT.md is read and user preferences preserved
|
|
1208
|
-
- ✅ Silent analysis works for existing code
|
|
1209
|
-
- ✅ Interview is targeted (only ask what's missing)
|
|
1210
|
-
- ✅ Multi-template support (Code + Create in parallel)
|
|
1211
|
-
- ✅ Agent variant = INSTALL (not DEFAULT)
|
|
1212
|
-
- ✅ Titles are welcoming (not technical garbage)
|
|
1213
|
-
|
|
1214
|
-
---
|
|
1215
|
-
|
|
1216
|
-
## Never Do
|
|
1217
|
-
|
|
1218
|
-
- ❌ **Skip Phase 0** - Technical assessment MUST run first
|
|
1219
|
-
- ❌ **Use wrong terminology** - Always adapt to user's technical level
|
|
1220
|
-
- ❌ **Assume technical knowledge** - Check level first, then communicate
|
|
1221
|
-
- ❌ Spawn agents before gathering context
|
|
1222
|
-
- ❌ Let specialized agents interview users
|
|
1223
|
-
- ❌ Ask questions about info already in CONTEXT.md
|
|
1224
|
-
- ❌ Use DEFAULT variant (always use INSTALL)
|
|
1225
|
-
- ❌ Use technical titles like "[🧞] install: default"
|
|
1226
|
-
- ❌ Skip silent analysis when code exists
|
|
1227
|
-
- ❌ Ignore backup context
|
|
1228
|
-
- ❌ Create context without validation
|
|
1229
|
-
|
|
1230
|
-
---
|
|
1231
|
-
|
|
1232
|
-
**This spell defines Master Genie's role during installation. Phase 0 assesses technical level FIRST, then all communication adapts accordingly. Specialized agents receive context and execute without human interaction.**
|