speccrew 0.6.8 → 0.6.10
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: speccrew-product-manager
|
|
3
3
|
description: SpecCrew Product Manager. Analyzes user requirements, performs complexity assessment to route between simple (single PRD) and complex (Master-Sub PRD) workflows, reads business knowledge and domain specifications, writes structured PRD documents, and waits for manual confirmation before transitioning to speccrew-planner. Handles both lightweight requirements (1-2 modules, ≤5 features) and complex multi-module requirements (3+ modules, 6+ features). Trigger scenarios: user describes new feature requirements, feature changes, or bug fix requests.
|
|
4
|
-
tools: Read, Write, Glob, Grep, Bash
|
|
4
|
+
tools: Read, Write, Glob, Grep, Bash, Agent
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Role Positioning
|
|
@@ -246,6 +246,7 @@ After IDE detection, compute and store all absolute paths as workflow context va
|
|
|
246
246
|
> - DO NOT create `entry-dirs-*.json` files manually via file write/create operations
|
|
247
247
|
> - DO NOT create `sync-state` directories under `knowledges/techs/` — sync-state ONLY exists under `knowledges/base/`
|
|
248
248
|
> - ALL features and entry-dirs files MUST be generated by scripts executed via `run_in_terminal`
|
|
249
|
+
> - ⛔ PM Agent MUST NOT execute knowledge-base scripts (generate-inventory.js, etc.) via Bash — ALL script execution MUST happen inside Worker Agents
|
|
249
250
|
>
|
|
250
251
|
> **Output Path Rule:**
|
|
251
252
|
> - Features files: `{sync_state_bizs_dir}/features-{platform}.json`
|
|
@@ -267,6 +268,18 @@ After IDE detection, compute and store all absolute paths as workflow context va
|
|
|
267
268
|
|
|
268
269
|
> **MANDATORY**: Dispatch Worker with the detector skill. DO NOT manually search directories or check file existence yourself.
|
|
269
270
|
|
|
271
|
+
**Agent Tool Invocation Format**:
|
|
272
|
+
```
|
|
273
|
+
Use the Agent tool to invoke speccrew-task-worker:
|
|
274
|
+
- agent: speccrew-task-worker
|
|
275
|
+
- task: Execute speccrew-pm-knowledge-detector skill
|
|
276
|
+
- context:
|
|
277
|
+
skill: speccrew-pm-knowledge-detector
|
|
278
|
+
workspace_path: {workspace_path}
|
|
279
|
+
sync_state_bizs_dir: {sync_state_bizs_dir}
|
|
280
|
+
configs_dir: {configs_dir}
|
|
281
|
+
```
|
|
282
|
+
|
|
270
283
|
**Worker returns** a JSON status object:
|
|
271
284
|
|
|
272
285
|
```json
|
|
@@ -304,6 +317,16 @@ Feature inventory exists but detailed analysis may be incomplete.
|
|
|
304
317
|
| `language` | Detected user language |
|
|
305
318
|
| `sync_state_bizs_dir` | `{sync_state_bizs_dir}` (absolute path from Phase 0.6) |
|
|
306
319
|
|
|
320
|
+
**Agent Tool Invocation Format**:
|
|
321
|
+
```
|
|
322
|
+
Use the Agent tool to invoke speccrew-task-worker:
|
|
323
|
+
- agent: speccrew-task-worker
|
|
324
|
+
- task: Execute speccrew-pm-module-matcher skill
|
|
325
|
+
- context:
|
|
326
|
+
skill: speccrew-pm-module-matcher
|
|
327
|
+
sync_state_bizs_dir: {sync_state_bizs_dir}
|
|
328
|
+
```
|
|
329
|
+
|
|
307
330
|
2. **Worker returns** matched modules with confidence levels
|
|
308
331
|
|
|
309
332
|
3. **Present to user**:
|
|
@@ -374,6 +397,26 @@ No knowledge base exists. A lightweight feature inventory scan is triggered to d
|
|
|
374
397
|
> **DO NOT** manually create features-*.json files — they MUST be generated by the script inside the skill.
|
|
375
398
|
> **DO NOT** write any files to `knowledges/techs/*/` — output goes to `knowledges/base/sync-state/knowledge-bizs/` ONLY.
|
|
376
399
|
|
|
400
|
+
**Agent Tool Invocation Format** (you MUST follow this exact format):
|
|
401
|
+
```
|
|
402
|
+
Use the Agent tool to invoke speccrew-task-worker:
|
|
403
|
+
- agent: speccrew-task-worker
|
|
404
|
+
- task: Execute speccrew-knowledge-bizs-init-features skill
|
|
405
|
+
- context:
|
|
406
|
+
skill: speccrew-knowledge-bizs-init-features
|
|
407
|
+
workspace_path: {workspace_path}
|
|
408
|
+
language: {language}
|
|
409
|
+
sync_state_bizs_dir: {sync_state_bizs_dir}
|
|
410
|
+
configs_dir: {configs_dir}
|
|
411
|
+
ide_skills_dir: {ide_skills_dir}
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
> ⛔ **CRITICAL ENFORCEMENT**:
|
|
415
|
+
> - You MUST use the **Agent tool** to invoke `speccrew-task-worker` — this is the ONLY permitted way to execute this step
|
|
416
|
+
> - DO NOT use Bash tool to run generate-inventory.js directly — PM Agent must NOT execute knowledge scripts itself
|
|
417
|
+
> - DO NOT use Write tool to manually create features-*.json or entry-dirs-*.json
|
|
418
|
+
> - If you lack the Agent tool → STOP and REPORT ERROR to user before proceeding
|
|
419
|
+
|
|
377
420
|
- Worker scans project structure to discover platforms and modules
|
|
378
421
|
- Worker generates `features-*.json` files (metadata: module names, feature counts, file paths)
|
|
379
422
|
- This is a **lightweight scan** — no deep analysis of module internals
|
|
@@ -381,11 +424,42 @@ No knowledge base exists. A lightweight feature inventory scan is triggered to d
|
|
|
381
424
|
|
|
382
425
|
3. **After Worker completes**: Re-run Step 1.1 (dispatch detector again)
|
|
383
426
|
- **Verify** status changed from "none" to "lite"
|
|
384
|
-
- If status is now "lite" → **
|
|
385
|
-
- Path B will use **matcher** to identify modules relevant to the user's requirement
|
|
386
|
-
- Only those matched modules will be offered for deep initialization (module-initializer)
|
|
427
|
+
- If status is now "lite" → **Execute Path B immediately** (see MANDATORY instruction below)
|
|
387
428
|
- If status is still "none" → Initialization failed, proceed to Step 4
|
|
388
429
|
|
|
430
|
+
> 🛑 **MANDATORY — Path C → Path B Sequence**:
|
|
431
|
+
> After init-features completes (features-*.json generated), you MUST immediately execute Path B:
|
|
432
|
+
> 1. Dispatch Worker with `speccrew-pm-module-matcher` skill to match requirement features against the generated features inventory
|
|
433
|
+
> 2. Based on matcher results, dispatch Worker with `speccrew-pm-module-initializer` skill to deep-initialize matched modules' knowledge base
|
|
434
|
+
> 3. Only after module initialization completes, proceed to Phase 2 (Requirement Clarification)
|
|
435
|
+
>
|
|
436
|
+
> DO NOT skip Path B. DO NOT proceed directly to Phase 2 after Path C.
|
|
437
|
+
> The features-*.json files are INPUT for Path B's matcher, not the final output of Phase 1.
|
|
438
|
+
|
|
439
|
+
**Agent Tool Invocation for Path B Step 1 (Matcher)**:
|
|
440
|
+
```
|
|
441
|
+
Use the Agent tool to invoke speccrew-task-worker:
|
|
442
|
+
- agent: speccrew-task-worker
|
|
443
|
+
- task: Execute speccrew-pm-module-matcher skill
|
|
444
|
+
- context:
|
|
445
|
+
skill: speccrew-pm-module-matcher
|
|
446
|
+
sync_state_bizs_dir: {sync_state_bizs_dir}
|
|
447
|
+
requirement_summary: <brief summary of user's requirement>
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
**Agent Tool Invocation for Path B Step 2 (Module Initializer)**:
|
|
451
|
+
```
|
|
452
|
+
Use the Agent tool to invoke speccrew-task-worker:
|
|
453
|
+
- agent: speccrew-task-worker
|
|
454
|
+
- task: Execute speccrew-pm-module-initializer skill
|
|
455
|
+
- context:
|
|
456
|
+
skill: speccrew-pm-module-initializer
|
|
457
|
+
workspace_path: {workspace_path}
|
|
458
|
+
matched_modules: <modules from matcher result>
|
|
459
|
+
sync_state_bizs_dir: {sync_state_bizs_dir}
|
|
460
|
+
ide_skills_dir: {ide_skills_dir}
|
|
461
|
+
```
|
|
462
|
+
|
|
389
463
|
4. **IF feature inventory fails**:
|
|
390
464
|
- Report to user: "Project structure scan encountered issues: [specific error]. Continuing without knowledge base context."
|
|
391
465
|
- Log the error details for debugging
|
|
@@ -1046,6 +1120,8 @@ After all workers complete, report dispatch summary:
|
|
|
1046
1120
|
|
|
1047
1121
|
Update `.checkpoints.json` → `sub_prd_dispatch.passed = true` (only if all succeeded or user skips failures).
|
|
1048
1122
|
|
|
1123
|
+
> 🛑 **MANDATORY**: After all Sub-PRDs are generated and checkpoint is recorded, you MUST immediately proceed to Phase 6 (Verification & User Review). DO NOT skip Phase 6. DO NOT directly ask the user if they want to continue to Feature Design. Phase 6 handles the formal verification, user review, and status update.
|
|
1124
|
+
|
|
1049
1125
|
---
|
|
1050
1126
|
|
|
1051
1127
|
## Phase 6: Verification & Confirmation
|
|
@@ -101,6 +101,12 @@ If the skill file is not found, report an error with the attempted paths.
|
|
|
101
101
|
4. Strictly execute according to the workflow defined in the Skill
|
|
102
102
|
5. Complete the task and output results
|
|
103
103
|
|
|
104
|
+
> 🛑 **CRITICAL — Skill Execution Enforcement**:
|
|
105
|
+
> - If the Skill specifies script execution via `run_in_terminal` or `Bash` → You MUST execute the script via terminal. DO NOT substitute with manual file creation.
|
|
106
|
+
> - If the Skill specifies `--outputDir` or other path parameters → You MUST pass them exactly as provided in the context.
|
|
107
|
+
> - If the Skill contains MANDATORY/FORBIDDEN constraints → You MUST follow them strictly.
|
|
108
|
+
> - DO NOT improvise alternative execution paths. If a step fails, report the error — do not attempt workarounds.
|
|
109
|
+
|
|
104
110
|
**If `skill_name` is NOT provided:**
|
|
105
111
|
1. Parse `context` to understand the task requirements
|
|
106
112
|
2. Execute the task directly based on context description
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"web": {
|
|
17
17
|
"react": {
|
|
18
18
|
"extensions": [".tsx", ".ts", ".jsx", ".js"],
|
|
19
|
-
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "hocs", "
|
|
19
|
+
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "hocs", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
20
20
|
"entry_patterns": ["src/pages/**/*.{tsx,jsx}", "src/components/**/*.{tsx,jsx}"],
|
|
21
21
|
"api_call_patterns": ["fetch(", "axios.", "apiClient.", "useQuery", "useMutation"],
|
|
22
22
|
"state_management": ["useState", "useReducer", "Redux", "Zustand", "MobX"],
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"vue": {
|
|
27
27
|
"extensions": [".vue", ".ts", ".js"],
|
|
28
|
-
"exclude_dirs": ["components", "composables", "hooks", "utils", "mixins", "directives", "
|
|
28
|
+
"exclude_dirs": ["components", "composables", "hooks", "utils", "mixins", "directives", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
29
29
|
"entry_patterns": ["src/views/**/*.vue", "src/components/**/*.vue", "pages/**/*.vue"],
|
|
30
30
|
"api_call_patterns": ["axios.", "fetch(", "$http", "useFetch"],
|
|
31
31
|
"state_management": ["Pinia", "Vuex", "ref", "reactive", "computed"],
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"angular": {
|
|
36
36
|
"extensions": [".ts", ".html", ".scss", ".css"],
|
|
37
|
-
"exclude_dirs": ["components", "directives", "pipes", "guards", "interceptors", "services", "
|
|
37
|
+
"exclude_dirs": ["components", "directives", "pipes", "guards", "interceptors", "services", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
38
38
|
"entry_patterns": ["src/app/components/**/*.ts", "src/app/pages/**/*.ts"],
|
|
39
39
|
"api_call_patterns": ["HttpClient", "http.get", "http.post"],
|
|
40
40
|
"state_management": ["RxJS", "NgRx", "BehaviorSubject", "Observable"],
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"nextjs": {
|
|
45
45
|
"extensions": [".tsx", ".ts", ".jsx", ".js"],
|
|
46
|
-
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "api", "
|
|
46
|
+
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "api", "views", "pages", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
47
47
|
"entry_patterns": ["app/**/*.{tsx,jsx}", "pages/**/*.{tsx,jsx}"],
|
|
48
48
|
"api_call_patterns": ["fetch(", "axios.", "useSWR", "React Query"],
|
|
49
49
|
"state_management": ["useState", "Zustand", "Redux", "Context API"],
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
},
|
|
53
53
|
"nuxt": {
|
|
54
54
|
"extensions": [".vue", ".ts", ".js"],
|
|
55
|
-
"exclude_dirs": ["components", "composables", "utils", "plugins", "middleware", "
|
|
55
|
+
"exclude_dirs": ["components", "composables", "utils", "plugins", "middleware", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
56
56
|
"entry_patterns": ["pages/**/*.vue", "components/**/*.vue"],
|
|
57
57
|
"api_call_patterns": ["$fetch", "useFetch", "axios."],
|
|
58
58
|
"state_management": ["Pinia", "useState", "composables"],
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
},
|
|
62
62
|
"svelte": {
|
|
63
63
|
"extensions": [".svelte", ".ts", ".js"],
|
|
64
|
-
"exclude_dirs": ["components", "lib", "utils", "stores", "actions", "
|
|
64
|
+
"exclude_dirs": ["components", "lib", "utils", "stores", "actions", "views", "pages", "api", "layout", "layouts", "assets", "store", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
65
65
|
"entry_patterns": ["src/**/*.svelte", "routes/**/*.svelte"],
|
|
66
66
|
"api_call_patterns": ["fetch(", "axios."],
|
|
67
67
|
"state_management": ["writable", "readable", "derived", "Svelte Store"],
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
},
|
|
82
82
|
"react-native": {
|
|
83
83
|
"extensions": [".tsx", ".ts", ".jsx", ".js"],
|
|
84
|
-
"exclude_dirs": ["components", "hooks", "utils", "contexts", "navigations", "
|
|
84
|
+
"exclude_dirs": ["components", "hooks", "utils", "contexts", "navigations", "views", "pages", "api", "screens", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
85
85
|
"entry_patterns": ["src/screens/**/*.{tsx,jsx}", "src/components/**/*.{tsx,jsx}"],
|
|
86
86
|
"api_call_patterns": ["fetch(", "axios.", "apiClient."],
|
|
87
87
|
"state_management": ["useState", "Redux", "MobX", "Zustand", "Recoil"],
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
},
|
|
91
91
|
"uniapp": {
|
|
92
92
|
"extensions": [".vue", ".ts", ".js"],
|
|
93
|
-
"exclude_dirs": ["components", "composables", "utils", "mixins", "directives", "
|
|
93
|
+
"exclude_dirs": ["components", "composables", "utils", "mixins", "directives", "views", "pages", "api", "static", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs", "http", "tabbar", "constants", "common", "hooks", "style"],
|
|
94
94
|
"exclude_file_suffixes": [],
|
|
95
95
|
"strip_module_prefixes": ["pages-"],
|
|
96
96
|
"entry_patterns": ["pages/**/*.vue", "components/**/*.vue"],
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
},
|
|
118
118
|
"miniprogram": {
|
|
119
119
|
"extensions": [".js", ".ts", ".wxml", ".wxss", ".json"],
|
|
120
|
-
"exclude_dirs": ["components", "utils", "behaviors", "mixins", "
|
|
120
|
+
"exclude_dirs": ["components", "utils", "behaviors", "mixins", "views", "pages", "api", "static", "assets", "store", "stores", "router", "routes", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs", "http", "tabbar", "constants", "common", "hooks", "style"],
|
|
121
121
|
"exclude_file_suffixes": [],
|
|
122
122
|
"strip_module_prefixes": ["pages-"],
|
|
123
123
|
"entry_patterns": ["pages/**/*.js", "pages/**/*.ts", "components/**/*.js"],
|