seed-qwen-ai 1.0.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/README.md ADDED
@@ -0,0 +1,309 @@
1
+ # SEED-Qwen
2
+
3
+ **Typed Project Incubator** for Qwen CLI — guided ideation through graduation into buildable projects.
4
+
5
+ ---
6
+
7
+ ## What is SEED?
8
+
9
+ SEED takes raw ideas through structured, type-aware exploration and produces comprehensive `PLANNING.md` documents ready for building.
10
+
11
+ ```
12
+ Raw Idea → SEED → PLANNING.md → PAUL → Built Project
13
+ ```
14
+
15
+ ---
16
+
17
+ ## Quick Start
18
+
19
+ ### Install
20
+
21
+ ```bash
22
+ npx seed-qwen-ai
23
+ ```
24
+
25
+ Or specify location:
26
+
27
+ ```bash
28
+ # Global (all projects)
29
+ npx seed-qwen-ai --global
30
+
31
+ # Local (current project)
32
+ npx seed-qwen-ai --local
33
+ ```
34
+
35
+ ### Start Ideation
36
+
37
+ ```bash
38
+ /seed
39
+ ```
40
+
41
+ ### Launch with PAUL
42
+
43
+ ```bash
44
+ /seed launch
45
+ ```
46
+
47
+ This graduates your project AND initializes PAUL in one step — no re-asking questions.
48
+
49
+ ---
50
+
51
+ ## Project Types (5)
52
+
53
+ | Type | Rigor | Purpose |
54
+ |------|-------|---------|
55
+ | **Application** | Deep | Software with UI, data model, API, deployment |
56
+ | **Workflow** | Standard | Claude Code commands, hooks, skills |
57
+ | **Client** | Standard | Client websites — business context, conversion |
58
+ | **Utility** | Tight | Small tools, scripts, single-purpose |
59
+ | **Campaign** | Creative | Content, marketing, launches |
60
+
61
+ ---
62
+
63
+ ## Commands
64
+
65
+ | Command | Description |
66
+ |---------|-------------|
67
+ | `/seed` | Start guided ideation (default) |
68
+ | `/seed graduate` | Move to `apps/` with git repo + README |
69
+ | `/seed launch` | Graduate + initialize PAUL (headless) |
70
+ | `/seed status` | Show all projects in pipeline |
71
+ | `/seed add-type` | Create custom project type |
72
+
73
+ ---
74
+
75
+ ## The SEED → PAUL Pipeline
76
+
77
+ ### Step 1: Ideation (`/seed`)
78
+
79
+ ```
80
+ 1. Select project type
81
+ 2. Guided conversation (type-specific)
82
+ 3. Generate PLANNING.md
83
+ ```
84
+
85
+ ### Step 2: Graduation (`/seed graduate`)
86
+
87
+ ```
88
+ 1. Quality gate check
89
+ 2. Move to apps/{name}/
90
+ 3. Git init + README
91
+ ```
92
+
93
+ ### Step 3: Launch (`/seed launch`)
94
+
95
+ ```
96
+ 1. All Graduation steps
97
+ 2. PAUL initialized headlessly
98
+ 3. PLANNING.md → ROADMAP.md, PROJECT.md
99
+ 4. Ready for /paul/plan
100
+ ```
101
+
102
+ ---
103
+
104
+ ## File Structure
105
+
106
+ ```
107
+ projects/
108
+ └── {project-name}/
109
+ └── PLANNING.md # Generated during ideation
110
+
111
+ apps/
112
+ └── {project-name}/
113
+ ├── PLANNING.md # Copied from projects/
114
+ ├── README.md # Generated during graduation
115
+ └── .paul/ # Created by /seed launch
116
+ ├── PROJECT.md
117
+ ├── ROADMAP.md
118
+ └── STATE.md
119
+ ```
120
+
121
+ ---
122
+
123
+ ## Example Session
124
+
125
+ ```bash
126
+ # Start ideation
127
+ /seed
128
+
129
+ # Select: Application
130
+ # Answer guided questions...
131
+ # PLANNING.md generated
132
+
133
+ # Graduate and launch
134
+ /seed launch my-app
135
+
136
+ # Now in apps/my-app/ with PAUL ready
137
+ /paul/plan # Create first executable plan
138
+ /paul/apply # Build it
139
+ /paul/unify # Close loop
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Custom Project Types
145
+
146
+ Add your own types:
147
+
148
+ ```bash
149
+ /seed add-type
150
+ ```
151
+
152
+ Creates:
153
+ - `~/.qwen/seed-framework/data/{type}/config.md`
154
+ - `~/.qwen/seed-framework/data/{type}/guide.md`
155
+ - `~/.qwen/seed-framework/data/{type}/skill-loadout.md`
156
+
157
+ ---
158
+
159
+ ## Quality Gates
160
+
161
+ Before graduation, SEED verifies:
162
+
163
+ **Universal:**
164
+ - Problem statement clear
165
+ - Target users defined
166
+ - Phases outlined
167
+ - Next actions clear
168
+
169
+ **Type-Specific:**
170
+ - Application: Tech stack resolved, data model defined
171
+ - Workflow: Trigger mechanism clear
172
+ - Client: Conversion path defined
173
+ - Utility: Single purpose (no scope creep)
174
+ - Campaign: Measurable goal, timeline set
175
+
176
+ ---
177
+
178
+ ## Integration with PAUL-Qwen
179
+
180
+ SEED works standalone or with PAUL-Qwen:
181
+
182
+ **Standalone:**
183
+ ```bash
184
+ /seed graduate # Just create the project
185
+ # Build however you want
186
+ ```
187
+
188
+ **With PAUL:**
189
+ ```bash
190
+ /seed launch # Graduate + PAUL init
191
+ /paul/plan # Start structured build
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Installation Options
197
+
198
+ ### Interactive (Default)
199
+
200
+ ```bash
201
+ npx seed-qwen
202
+ ```
203
+
204
+ ### Non-Interactive
205
+
206
+ ```bash
207
+ # Global
208
+ npx seed-qwen --global
209
+
210
+ # Local
211
+ npx seed-qwen --local
212
+
213
+ # Custom path
214
+ npx seed-qwen --config-dir ~/.qwen-custom
215
+ ```
216
+
217
+ ### Help
218
+
219
+ ```bash
220
+ npx seed-qwen --help
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Updating
226
+
227
+ ```bash
228
+ npx seed-qwen@latest
229
+ ```
230
+
231
+ ---
232
+
233
+ ## Comparison: SEED vs Ad-Hoc Planning
234
+
235
+ | Aspect | Ad-Hoc | SEED |
236
+ |--------|--------|------|
237
+ | Structure | None | Type-guided |
238
+ | Output | Notes, fragments | Structured PLANNING.md |
239
+ | Graduation | Manual | Automated |
240
+ | PAUL Handoff | Re-asks questions | Headless (zero re-asking) |
241
+ | Quality | Variable | Gate-checked |
242
+
243
+ ---
244
+
245
+ ## When to Use SEED
246
+
247
+ ### Good Fit
248
+
249
+ - New project from scratch
250
+ - Vague idea needs shaping
251
+ - Want structured plan before building
252
+ - Team alignment needed
253
+
254
+ ### Overkill
255
+
256
+ - Quick scripts (use Utility type anyway)
257
+ - Experiments/prototypes
258
+ - Already have detailed spec
259
+
260
+ ---
261
+
262
+ ## Troubleshooting
263
+
264
+ ### Commands Not Found
265
+
266
+ ```bash
267
+ # Verify installation
268
+ ls ~/.qwen/commands/seed/
269
+
270
+ # Restart Qwen CLI
271
+ ```
272
+
273
+ ### PLANNING.md Incomplete
274
+
275
+ Run quality gate manually:
276
+ ```bash
277
+ /seed graduate # Will show what's missing
278
+ ```
279
+
280
+ ---
281
+
282
+ ## Contributing
283
+
284
+ 1. Fork the repo
285
+ 2. Make changes
286
+ 3. Test with real projects
287
+ 4. Submit PR
288
+
289
+ **GitHub:** https://github.com/tyler1350/seed-qwen
290
+
291
+ ---
292
+
293
+ ## License
294
+
295
+ MIT License — see LICENSE file.
296
+
297
+ ---
298
+
299
+ ## Credits
300
+
301
+ SEED-Qwen is a port of the [SEED Framework](https://github.com/ChristopherKahler/seed) by Chris Kahler, adapted for Qwen CLI.
302
+
303
+ Part of the PAUL ecosystem:
304
+ - **SEED** — Project incubator (ideation → planning)
305
+ - **PAUL** — Project orchestration (plan → apply → unify)
306
+
307
+ ---
308
+
309
+ *SEED-Qwen v1.0 | For Qwen CLI | Typed Project Incubator*
package/bin/install.js ADDED
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const os = require('os');
6
+ const readline = require('readline');
7
+
8
+ // Colors
9
+ const cyan = '\x1b[36m';
10
+ const green = '\x1b[32m';
11
+ const yellow = '\x1b[33m';
12
+ const dim = '\x1b[2m';
13
+ const reset = '\x1b[0m';
14
+
15
+ // Get version from package.json
16
+ const pkg = require('../package.json');
17
+
18
+ const banner = `
19
+ ${cyan} ███████╗██╗ ██╗ █████╗ ██████╗ ${reset}
20
+ ${cyan} ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗${reset}
21
+ ${cyan} █████╗ ╚███╔╝ ███████║██████╔╝${reset}
22
+ ${cyan} ██╔══╝ ██╔██╗ ██╔══██║██╔══██╗${reset}
23
+ ${cyan} ██║ ██╔╝ ██╗██║ ██║██║ ██║${reset}
24
+ ${cyan} ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝${reset}
25
+
26
+ ${cyan}SEED-Qwen${reset} Framework ${dim}v${pkg.version}${reset}
27
+ Typed Project Incubator for Qwen CLI
28
+ `;
29
+
30
+ // Parse args
31
+ const args = process.argv.slice(2);
32
+ const hasGlobal = args.includes('--global') || args.includes('-g');
33
+ const hasLocal = args.includes('--local') || args.includes('-l');
34
+
35
+ // Parse --config-dir argument
36
+ function parseConfigDirArg() {
37
+ const configDirIndex = args.findIndex(arg => arg === '--config-dir' || arg === '-c');
38
+ if (configDirIndex !== -1) {
39
+ const nextArg = args[configDirIndex + 1];
40
+ if (!nextArg || nextArg.startsWith('-')) {
41
+ console.error(` ${yellow}--config-dir requires a path argument${reset}`);
42
+ process.exit(1);
43
+ }
44
+ return nextArg;
45
+ }
46
+ const configDirArg = args.find(arg => arg.startsWith('--config-dir=') || arg.startsWith('-c='));
47
+ if (configDirArg) {
48
+ return configDirArg.split('=')[1];
49
+ }
50
+ return null;
51
+ }
52
+ const explicitConfigDir = parseConfigDirArg();
53
+ const hasHelp = args.includes('--help') || args.includes('-h');
54
+
55
+ console.log(banner);
56
+
57
+ // Show help if requested
58
+ if (hasHelp) {
59
+ console.log(` ${yellow}Usage:${reset} npx seed-qwen [options]
60
+
61
+ ${yellow}Options:${reset}
62
+ ${cyan}-g, --global${reset} Install globally (to Qwen config directory)
63
+ ${cyan}-l, --local${reset} Install locally (to ./.qwen in current directory)
64
+ ${cyan}-c, --config-dir <path>${reset} Specify custom Qwen config directory
65
+ ${cyan}-h, --help${reset} Show this help message
66
+
67
+ ${yellow}Examples:${reset}
68
+ ${dim}# Install to default ~/.qwen directory${reset}
69
+ npx seed-qwen --global
70
+
71
+ ${dim}# Install to custom config directory${reset}
72
+ npx seed-qwen --global --config-dir ~/.qwen-custom
73
+
74
+ ${dim}# Install to current project only${reset}
75
+ npx seed-qwen --local
76
+
77
+ ${yellow}What gets installed:${reset}
78
+ commands/seed/ - Slash commands (/seed, /seed/graduate, /seed/launch)
79
+ seed-framework/ - Tasks, data types, templates, checklists
80
+ `);
81
+ process.exit(0);
82
+ }
83
+
84
+ /**
85
+ * Expand ~ to home directory
86
+ */
87
+ function expandTilde(filePath) {
88
+ if (filePath && filePath.startsWith('~/')) {
89
+ return path.join(os.homedir(), filePath.slice(2));
90
+ }
91
+ return filePath;
92
+ }
93
+
94
+ /**
95
+ * Recursively copy directory, replacing paths in .md files
96
+ */
97
+ function copyWithPathReplacement(srcDir, destDir, pathPrefix) {
98
+ fs.mkdirSync(destDir, { recursive: true });
99
+
100
+ const entries = fs.readdirSync(srcDir, { withFileTypes: true });
101
+
102
+ for (const entry of entries) {
103
+ const srcPath = path.join(srcDir, entry.name);
104
+ const destPath = path.join(destDir, entry.name);
105
+
106
+ if (entry.isDirectory()) {
107
+ copyWithPathReplacement(srcPath, destPath, pathPrefix);
108
+ } else if (entry.name.endsWith('.md')) {
109
+ // Replace ~/.qwen/ with the appropriate prefix in markdown files
110
+ let content = fs.readFileSync(srcPath, 'utf8');
111
+ content = content.replace(/~\/\.qwen\//g, pathPrefix);
112
+ fs.writeFileSync(destPath, content);
113
+ } else {
114
+ fs.copyFileSync(srcPath, destPath);
115
+ }
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Install to the specified directory
121
+ */
122
+ function install(isGlobal) {
123
+ const src = path.join(__dirname, '..');
124
+ const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.QWEN_CONFIG_DIR);
125
+ const defaultGlobalDir = configDir || path.join(os.homedir(), '.qwen');
126
+ const qwenDir = isGlobal
127
+ ? defaultGlobalDir
128
+ : path.join(process.cwd(), '.qwen');
129
+
130
+ const locationLabel = isGlobal
131
+ ? qwenDir.replace(os.homedir(), '~')
132
+ : qwenDir.replace(process.cwd(), '.');
133
+
134
+ // Path prefix for file references
135
+ const pathPrefix = isGlobal
136
+ ? (configDir ? `${qwenDir}/` : '~/.qwen/')
137
+ : './.qwen/';
138
+
139
+ console.log(` Installing to ${cyan}${locationLabel}${reset}\n`);
140
+
141
+ // Create commands directory
142
+ const commandsDir = path.join(qwenDir, 'commands');
143
+ fs.mkdirSync(commandsDir, { recursive: true });
144
+
145
+ // Copy commands/seed to commands/seed
146
+ const commandsSrc = path.join(src, 'commands', 'seed');
147
+ const commandsDest = path.join(commandsDir, 'seed');
148
+ copyWithPathReplacement(commandsSrc, commandsDest, pathPrefix);
149
+ console.log(` ${green}✓${reset} Installed commands/seed`);
150
+
151
+ // Copy seed-framework/ to qwen/seed-framework/
152
+ const frameworkDest = path.join(qwenDir, 'seed-framework');
153
+ fs.mkdirSync(frameworkDest, { recursive: true });
154
+
155
+ const srcDirs = ['tasks', 'data', 'templates', 'checklists'];
156
+ for (const dir of srcDirs) {
157
+ const dirSrc = path.join(src, dir);
158
+ const dirDest = path.join(frameworkDest, dir);
159
+ if (fs.existsSync(dirSrc)) {
160
+ copyWithPathReplacement(dirSrc, dirDest, pathPrefix);
161
+ }
162
+ }
163
+ console.log(` ${green}✓${reset} Installed seed-framework`);
164
+
165
+ console.log(`
166
+ ${green}Done!${reset} Launch Qwen CLI and run ${cyan}/seed${reset}.
167
+ `);
168
+ }
169
+
170
+ /**
171
+ * Prompt for install location
172
+ */
173
+ function promptLocation() {
174
+ const rl = readline.createInterface({
175
+ input: process.stdin,
176
+ output: process.stdout
177
+ });
178
+
179
+ const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.QWEN_CONFIG_DIR);
180
+ const globalPath = configDir || path.join(os.homedir(), '.qwen');
181
+ const globalLabel = globalPath.replace(os.homedir(), '~');
182
+
183
+ console.log(` ${yellow}Where would you like to install?${reset}
184
+
185
+ ${cyan}1${reset}) Global ${dim}(${globalLabel})${reset} - available in all projects
186
+ ${cyan}2${reset}) Local ${dim}(./.qwen)${reset} - this project only
187
+ `);
188
+
189
+ rl.question(` Choice ${dim}[1]${reset}: `, (answer) => {
190
+ rl.close();
191
+ const choice = answer.trim() || '1';
192
+ const isGlobal = choice !== '2';
193
+ install(isGlobal);
194
+ });
195
+ }
196
+
197
+ // Main
198
+ if (hasGlobal && hasLocal) {
199
+ console.error(` ${yellow}Cannot specify both --global and --local${reset}`);
200
+ process.exit(1);
201
+ } else if (explicitConfigDir && hasLocal) {
202
+ console.error(` ${yellow}Cannot use --config-dir with --local${reset}`);
203
+ process.exit(1);
204
+ } else if (hasGlobal) {
205
+ install(true);
206
+ } else if (hasLocal) {
207
+ install(false);
208
+ } else {
209
+ promptLocation();
210
+ }
@@ -0,0 +1,81 @@
1
+ # Planning Quality Checklist
2
+
3
+ **Purpose:** Quality gate before graduation or launch.
4
+
5
+ ---
6
+
7
+ ## Universal Checks (All Types)
8
+
9
+ - [ ] Problem statement is clear and specific
10
+ - [ ] Target users/audience defined
11
+ - [ ] At least 2 phases outlined
12
+ - [ ] Next actions are clear
13
+ - [ ] No "TBD" in critical sections
14
+
15
+ ---
16
+
17
+ ## Type-Specific Checks
18
+
19
+ ### Application
20
+
21
+ - [ ] Tech stack fully resolved (no "React or Vue")
22
+ - [ ] Data entities defined (3-5 core entities)
23
+ - [ ] API routes outlined
24
+ - [ ] Deployment target specified
25
+ - [ ] Security considerations addressed
26
+
27
+ ### Workflow
28
+
29
+ - [ ] Trigger mechanism clear
30
+ - [ ] Integration points defined
31
+ - [ ] Error handling approach specified
32
+ - [ ] Usage examples provided
33
+
34
+ ### Client
35
+
36
+ - [ ] Business goal is measurable
37
+ - [ ] Target audience is specific
38
+ - [ ] Conversion path defined
39
+ - [ ] Content requirements listed
40
+ - [ ] Timeline realistic
41
+
42
+ ### Utility
43
+
44
+ - [ ] Single purpose (not expanding)
45
+ - [ ] Input/output clearly defined
46
+ - [ ] Usage examples work
47
+ - [ ] Edge cases considered
48
+ - [ ] Can be built in one session
49
+
50
+ ### Campaign
51
+
52
+ - [ ] Goal is measurable (number, not "awareness")
53
+ - [ ] Timeline has specific dates
54
+ - [ ] Content types and quantities defined
55
+ - [ ] Channels selected
56
+ - [ ] Success metrics identified
57
+
58
+ ---
59
+
60
+ ## Pass/Fail Decision
61
+
62
+ **Pass:** All universal checks + all type-specific checks
63
+
64
+ **Conditional Pass:** 1-2 minor gaps, can be filled during build
65
+
66
+ **Fail:** Major gaps (problem unclear, tech stack TBD, no phases)
67
+
68
+ ---
69
+
70
+ ## If Fail
71
+
72
+ Offer user:
73
+ 1. Continue ideation to fill gaps
74
+ 2. Graduate anyway (at own risk)
75
+ 3. Switch to simpler type (e.g., Application → Utility)
76
+
77
+ ---
78
+
79
+ ## If Pass
80
+
81
+ Proceed to graduation or launch.
@@ -0,0 +1,29 @@
1
+ # Application Type Config
2
+
3
+ **Rigor:** Deep
4
+ **Description:** Software applications with UI, data model, API, and deployment
5
+
6
+ ## Sections Required
7
+ 1. Problem Statement
8
+ 2. Target Users
9
+ 3. Tech Stack
10
+ 4. Data Model
11
+ 5. API Surface
12
+ 6. UI/UX Needs
13
+ 7. Deployment Strategy
14
+ 8. Security Considerations
15
+ 9. Phase Breakdown
16
+ 10. Success Criteria
17
+
18
+ ## Demeanor
19
+ - Thorough and architectural
20
+ - Don't rush decisions
21
+ - Challenge assumptions
22
+ - Ensure scalability considerations
23
+
24
+ ## Minimum for Graduation
25
+ - Tech stack fully resolved (no "TBD")
26
+ - Data entities defined
27
+ - API routes outlined
28
+ - Phase breakdown with 2+ phases
29
+ - Deployment target specified