openplanr 0.8.0 → 0.9.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 +11 -5
- package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
- package/dist/ai/prompts/prompt-builder.js +8 -1
- package/dist/ai/prompts/prompt-builder.js.map +1 -1
- package/dist/ai/prompts/system-prompts.d.ts +1 -1
- package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
- package/dist/ai/prompts/system-prompts.js +2 -1
- package/dist/ai/prompts/system-prompts.js.map +1 -1
- package/dist/ai/types.d.ts +1 -1
- package/dist/ai/types.js +1 -1
- package/dist/cli/commands/epic.d.ts.map +1 -1
- package/dist/cli/commands/epic.js +16 -3
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/export.d.ts +8 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +280 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/github.d.ts +8 -0
- package/dist/cli/commands/github.d.ts.map +1 -0
- package/dist/cli/commands/github.js +412 -0
- package/dist/cli/commands/github.js.map +1 -0
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +89 -20
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/services/github-service.d.ts +83 -0
- package/dist/services/github-service.d.ts.map +1 -0
- package/dist/services/github-service.js +435 -0
- package/dist/services/github-service.js.map +1 -0
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +1 -0
- package/dist/services/template-service.js.map +1 -1
- package/dist/templates/export/planning-report.html.hbs +230 -0
- package/dist/templates/export/planning-report.md.hbs +136 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,6 +35,7 @@ planr epic create
|
|
|
35
35
|
planr feature create --epic EPIC-001
|
|
36
36
|
planr story create --feature FEAT-001
|
|
37
37
|
planr task create --story US-001
|
|
38
|
+
# or: planr task create --feature FEAT-001 # one task list from every story + full planning context (AI)
|
|
38
39
|
|
|
39
40
|
# Generate AI rules for your editor
|
|
40
41
|
planr rules generate
|
|
@@ -47,12 +48,13 @@ planr init
|
|
|
47
48
|
└── planr epic create # Define the big picture
|
|
48
49
|
└── planr feature create --epic EPIC-001 # Break into features
|
|
49
50
|
└── planr story create --feature FEAT-001 # User stories + Gherkin
|
|
50
|
-
|
|
51
|
+
├── planr task create --story US-001 # Tasks from one story (+ parent feature/epic, Gherkin, ADRs, codebase context)
|
|
52
|
+
└── planr task create --feature FEAT-001 # Tasks from all stories in the feature (+ same context, wider scope; larger AI budget)
|
|
51
53
|
|
|
52
54
|
planr rules generate # Generate .cursor/rules, CLAUDE.md, AGENTS.md
|
|
53
55
|
```
|
|
54
56
|
|
|
55
|
-
Each command creates markdown artifacts in `docs/agile/` and interactively prompts for the details. The hierarchy is enforced — features require an epic, stories require a feature, tasks require a story or feature.
|
|
57
|
+
Each command creates markdown artifacts in `docs/agile/` and interactively prompts for the details. The hierarchy is enforced — features require an epic, stories require a feature, tasks require a story or feature. For AI-powered `task create`, context always includes parent feature and epic, Gherkin where present, all ADRs, and codebase-derived context; `--feature` aggregates every story under that feature and uses a higher output token limit than `--story`.
|
|
56
58
|
|
|
57
59
|
Or use `planr plan` to run the full flow in a single command:
|
|
58
60
|
|
|
@@ -80,15 +82,15 @@ planr rules generate --dry-run # preview
|
|
|
80
82
|
| Command | Description |
|
|
81
83
|
|---------|-------------|
|
|
82
84
|
| `planr init` | Initialize project with config and directory structure |
|
|
83
|
-
| `planr epic create` | Create a new epic |
|
|
85
|
+
| `planr epic create` | Create a new epic (supports `--file <path>` for PRDs) |
|
|
84
86
|
| `planr epic list` | List all epics |
|
|
85
87
|
| `planr feature create --epic <ID>` | Create features from an epic |
|
|
86
88
|
| `planr feature list` | List all features |
|
|
87
89
|
| `planr story create --feature <ID>` | Create user stories from a feature |
|
|
88
90
|
| `planr story create --epic <ID>` | Batch-generate stories for all features under an epic |
|
|
89
91
|
| `planr story list` | List all user stories |
|
|
90
|
-
| `planr task create --story <ID>` |
|
|
91
|
-
| `planr task create --feature <ID>` |
|
|
92
|
+
| `planr task create --story <ID>` | AI task list from one story (plus parent feature/epic, Gherkin, ADRs, codebase context) |
|
|
93
|
+
| `planr task create --feature <ID>` | AI task list from **all** stories under the feature, with the same artifact context and a larger model output budget |
|
|
92
94
|
| `planr task list` | List all task lists |
|
|
93
95
|
| `planr task implement <ID>` | View tasks and start implementing |
|
|
94
96
|
| `planr plan` | Full automated flow: Epic → Features → Stories → Tasks |
|
|
@@ -104,6 +106,10 @@ planr rules generate --dry-run # preview
|
|
|
104
106
|
| `planr config set-key` | Store API key securely |
|
|
105
107
|
| `planr config set-model` | Set AI model |
|
|
106
108
|
| `planr config set-agent` | Set default coding agent |
|
|
109
|
+
| `planr github push [ID]` | Push artifacts to GitHub Issues (single, `--epic`, or `--all`) |
|
|
110
|
+
| `planr github sync` | Bi-directional status sync with GitHub Issues |
|
|
111
|
+
| `planr github status` | Show sync status of linked artifacts |
|
|
112
|
+
| `planr export` | Export planning report (markdown, JSON, or HTML) |
|
|
107
113
|
|
|
108
114
|
See [docs/CLI.md](docs/CLI.md) for the full command reference with all options and flags.
|
|
109
115
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAW7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,GAAE,MAAM,EAAO,GAAG,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAW7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,GAAE,MAAM,EAAO,GAAG,SAAS,EAAE,CAkBxF;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,gBAAgB,GAAE,MAAM,EAAO,EAC/B,YAAY,CAAC,EAAE,MAAM,GACpB,SAAS,EAAE,CAeb;AAED,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAM,EAAO,GAC7B,SAAS,EAAE,CAYb;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,SAAS,EAAE,CAqDnE;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAWhG;AAED,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,SAAS,EAAE,CAWb;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChD,SAAS,EAAE,CAYb"}
|
|
@@ -10,7 +10,14 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { EPIC_SYSTEM_PROMPT, ESTIMATE_SYSTEM_PROMPT, FEATURES_SYSTEM_PROMPT, QUICK_TASKS_SYSTEM_PROMPT, REFINE_SYSTEM_PROMPT, STORIES_SYSTEM_PROMPT, TASKS_SYSTEM_PROMPT, } from './system-prompts.js';
|
|
12
12
|
export function buildEpicPrompt(brief, existingEpics = []) {
|
|
13
|
-
|
|
13
|
+
const isDetailed = brief.split('\n').length > 5;
|
|
14
|
+
let userContent;
|
|
15
|
+
if (isDetailed) {
|
|
16
|
+
userContent = `Create an epic from this detailed requirements document. Extract ALL key requirements, features, and success criteria from the full document:\n\n${brief}`;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
userContent = `Create an epic from this brief:\n\n"${brief}"`;
|
|
20
|
+
}
|
|
14
21
|
if (existingEpics.length > 0) {
|
|
15
22
|
userContent += `\n\nExisting epics in this project (do NOT duplicate):\n${existingEpics.map((e) => `- ${e}`).join('\n')}`;
|
|
16
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,gBAA0B,EAAE;IACzE,IAAI,WAAW,GAAG,uCAAuC,KAAK,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/ai/prompts/prompt-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* and instructs it to produce structured JSON output matching our
|
|
6
6
|
* artifact schemas.
|
|
7
7
|
*/
|
|
8
|
-
export declare const EPIC_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to expand a brief description into a complete, detailed epic document.\n\nYou MUST respond with a valid JSON object containing these fields:\n- \"title\": A concise, descriptive epic title (max 80 chars)\n- \"owner\": The responsible team or role (e.g., \"Engineering\", \"Product\", \"Platform Team\")\n- \"businessValue\": Why this matters to the business (2-3 sentences)\n- \"targetUsers\": Who benefits from this (specific user personas)\n- \"problemStatement\": The problem being solved (2-3 sentences)\n- \"solutionOverview\": High-level approach to solving it (2-3 sentences)\n- \"successCriteria\": Array of 3-5 measurable definition-of-done bullet points (e.g., [\"Users can X within Y seconds\", \"System supports Z\"])\n- \"keyFeatures\": Array of 3-7 high-level feature names that compose this epic\n- \"dependencies\": Known dependencies or \"None\"\n- \"risks\": Known risks or \"None\"\n\nBe specific, avoid generic filler. Ground the epic in the user's
|
|
8
|
+
export declare const EPIC_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to expand a brief description into a complete, detailed epic document.\n\nYou MUST respond with a valid JSON object containing these fields:\n- \"title\": A concise, descriptive epic title (max 80 chars)\n- \"owner\": The responsible team or role (e.g., \"Engineering\", \"Product\", \"Platform Team\")\n- \"businessValue\": Why this matters to the business (2-3 sentences)\n- \"targetUsers\": Who benefits from this (specific user personas)\n- \"problemStatement\": The problem being solved (2-3 sentences)\n- \"solutionOverview\": High-level approach to solving it (2-3 sentences)\n- \"successCriteria\": Array of 3-5 measurable definition-of-done bullet points (e.g., [\"Users can X within Y seconds\", \"System supports Z\"])\n- \"keyFeatures\": Array of 3-7 high-level feature names that compose this epic\n- \"dependencies\": Known dependencies or \"None\"\n- \"risks\": Known risks or \"None\"\n\nBe specific, avoid generic filler. Ground the epic in the user's input.\nIf the input is a detailed PRD or requirements document, extract and incorporate ALL sections \u2014 do not summarize or ignore content. Every key requirement should be reflected in the epic fields.\nRespond with JSON only, no markdown or explanation.";
|
|
9
9
|
export declare const FEATURES_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to decompose an epic into individual features. Read the epic carefully and generate features that fully cover its scope.\n\nYou MUST respond with a valid JSON object containing:\n- \"features\": An array of feature objects, each with:\n - \"title\": A clear feature title (max 80 chars)\n - \"overview\": What this feature does (2-3 sentences)\n - \"functionalRequirements\": Array of 3-6 specific functional requirements\n - \"dependencies\": Dependencies on other features or systems, or \"None\"\n - \"technicalConsiderations\": Technical notes for implementation, or \"None\"\n - \"risks\": Feature-specific risks, or \"None\"\n - \"successMetrics\": How to measure success of this feature\n\nGenerate features that are:\n- Independently deliverable where possible\n- Roughly equal in scope\n- Non-overlapping (no duplicate functionality)\n\nRespond with JSON only, no markdown or explanation.";
|
|
10
10
|
export declare const STORIES_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to break a feature into user stories. Read the feature and its parent epic context carefully.\n\nYou MUST respond with a valid JSON object containing:\n- \"stories\": An array of story objects, each with:\n - \"title\": Concise story title (max 80 chars)\n - \"role\": The user role (\"As a <role>\")\n - \"goal\": What they want to do (\"I want to <goal>\")\n - \"benefit\": Why (\"So that <benefit>\")\n - \"additionalNotes\": Implementation notes or edge cases (optional, can be empty string)\n - \"gherkinScenarios\": Array of scenario objects, each with:\n - \"name\": Scenario name\n - \"given\": Given precondition\n - \"when\": When action\n - \"then\": Then expected outcome\n\nEach story should:\n- Follow INVEST principles (Independent, Negotiable, Valuable, Estimable, Small, Testable)\n- Include 1-3 Gherkin scenarios (happy path + edge cases)\n- Be specific enough for a developer to implement\n\nRespond with JSON only, no markdown or explanation.";
|
|
11
11
|
export declare const TASKS_SYSTEM_PROMPT = "You are an expert agile planning consultant with deep experience in software development, product management, and technical architecture. You help teams create clear, actionable, and well-structured planning artifacts.\n\nYour task is to generate a comprehensive implementation task list from agile artifacts (user stories, gherkin acceptance criteria, feature specs, epic context, ADRs, and codebase context).\n\nYou MUST respond with a valid JSON object containing:\n- \"title\": A task list title \u2014 use the scope ID if provided (e.g., \"Tasks for FEAT-001: Feature Name\" when scope is a feature, or \"Tasks for US-001: Story Name\" when scope is a story)\n- \"tasks\": An array of task group objects, each with:\n - \"id\": Numbering like \"1.0\", \"2.0\", \"3.0\"\n - \"title\": Task group title\n - \"subtasks\": Array of subtask objects, each with:\n - \"id\": Numbering like \"1.1\", \"1.2\", \"2.1\"\n - \"title\": Specific, actionable subtask description\n- \"acceptanceCriteriaMapping\": Array of objects mapping acceptance criteria to tasks:\n - \"criterion\": The acceptance criterion text (from gherkin scenarios or story requirements)\n - \"sourceStoryId\": Which user story this criterion comes from (e.g., \"US-001\")\n - \"taskIds\": Array of task/subtask IDs that satisfy this criterion (e.g., [\"1.1\", \"2.3\"])\n- \"relevantFiles\": Array of files to create or modify:\n - \"path\": File path relative to project root (e.g., \"src/auth/login.ts\")\n - \"reason\": Brief explanation of why this file needs changes\n\nTasks should:\n- Reference actual files/paths from the codebase when possible\n- Follow existing code patterns and conventions\n- Include setup, implementation, testing, and cleanup steps\n- Be ordered logically (dependencies first)\n- Address specific acceptance criteria from gherkin scenarios\n- Respect architectural decisions from ADRs when provided\n- Align with component structure and system architecture\n\nWhen multiple user stories and gherkin scenarios are provided, ensure every acceptance criterion is covered by at least one task. When codebase context is available, identify specific files to modify in relevantFiles.\n\nRespond with JSON only, no markdown or explanation.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompts.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"system-prompts.d.ts","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,eAAO,MAAM,kBAAkB,47CAkBqB,CAAC;AAErD,eAAO,MAAM,sBAAsB,wnCAmBiB,CAAC;AAErD,eAAO,MAAM,qBAAqB,osCAsBkB,CAAC;AAErD,eAAO,MAAM,mBAAmB,0sEA+BoB,CAAC;AAErD,eAAO,MAAM,yBAAyB,+6CAuBc,CAAC;AAErD,eAAO,MAAM,sBAAsB,shFAyCiB,CAAC;AAErD,eAAO,MAAM,oBAAoB,8jEA2BmB,CAAC"}
|
|
@@ -22,7 +22,8 @@ You MUST respond with a valid JSON object containing these fields:
|
|
|
22
22
|
- "dependencies": Known dependencies or "None"
|
|
23
23
|
- "risks": Known risks or "None"
|
|
24
24
|
|
|
25
|
-
Be specific, avoid generic filler. Ground the epic in the user's
|
|
25
|
+
Be specific, avoid generic filler. Ground the epic in the user's input.
|
|
26
|
+
If the input is a detailed PRD or requirements document, extract and incorporate ALL sections — do not summarize or ignore content. Every key requirement should be reflected in the epic fields.
|
|
26
27
|
Respond with JSON only, no markdown or explanation.`;
|
|
27
28
|
export const FEATURES_SYSTEM_PROMPT = `${BASE_PERSONA}
|
|
28
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompts.js","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,4NAA4N,CAAC;AAElP,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,YAAY
|
|
1
|
+
{"version":3,"file":"system-prompts.js","sourceRoot":"","sources":["../../../src/ai/prompts/system-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,4NAA4N,CAAC;AAElP,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;oDAkBG,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;oDAmBD,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;oDAsBA,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDA+BE,CAAC;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;oDAuBJ,CAAC;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDAyCD,CAAC;AAErD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;oDA2BC,CAAC"}
|
package/dist/ai/types.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export declare const DEFAULT_MAX_TOKENS = 8192;
|
|
|
35
35
|
* Commands producing larger outputs get higher budgets.
|
|
36
36
|
*/
|
|
37
37
|
export declare const TOKEN_BUDGETS: {
|
|
38
|
-
readonly epic:
|
|
38
|
+
readonly epic: 8192;
|
|
39
39
|
readonly feature: 8192;
|
|
40
40
|
readonly story: 8192;
|
|
41
41
|
readonly task: 16384;
|
package/dist/ai/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epic.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/epic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"epic.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/epic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA6CnD"}
|
|
@@ -19,7 +19,8 @@ export function registerEpicCommand(program) {
|
|
|
19
19
|
epic
|
|
20
20
|
.command('create')
|
|
21
21
|
.description('Create a new epic')
|
|
22
|
-
.option('--title <title>', 'epic title')
|
|
22
|
+
.option('--title <title>', 'epic title or brief description')
|
|
23
|
+
.option('--file <path>', 'read epic description from a file (e.g., a PRD)')
|
|
23
24
|
.option('--owner <owner>', 'epic owner')
|
|
24
25
|
.option('--manual', 'use manual interactive prompts instead of AI')
|
|
25
26
|
.action(async (opts) => {
|
|
@@ -78,7 +79,19 @@ function displayEpic(epicData) {
|
|
|
78
79
|
}
|
|
79
80
|
async function createEpicWithAI(projectDir, config, opts) {
|
|
80
81
|
logger.heading('Create Epic (AI-powered)');
|
|
81
|
-
|
|
82
|
+
let brief;
|
|
83
|
+
if (opts.file) {
|
|
84
|
+
const { readFile } = await import('../../utils/fs.js');
|
|
85
|
+
const path = await import('node:path');
|
|
86
|
+
brief = await readFile(path.resolve(opts.file));
|
|
87
|
+
logger.dim(`Read ${brief.split('\n').length} lines from ${opts.file}`);
|
|
88
|
+
}
|
|
89
|
+
else if (opts.title) {
|
|
90
|
+
brief = opts.title;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
brief = await promptText('Describe your epic:');
|
|
94
|
+
}
|
|
82
95
|
// Get existing epics for deduplication
|
|
83
96
|
const existingEpics = await listArtifacts(projectDir, config, 'epic');
|
|
84
97
|
const existingTitles = existingEpics.map((e) => `${e.id}: ${e.title}`);
|
|
@@ -141,7 +154,7 @@ async function createEpicWithAI(projectDir, config, opts) {
|
|
|
141
154
|
logger.heading('Next steps:');
|
|
142
155
|
logger.dim(` 1. planr feature create --epic ${id} — Break epic into features`);
|
|
143
156
|
logger.dim(` 2. planr story create --feature FEAT-* — Create user stories per feature`);
|
|
144
|
-
logger.dim(` 3. planr task create --
|
|
157
|
+
logger.dim(` 3. planr task create --feature FEAT-* — Generate implementation tasks`);
|
|
145
158
|
logger.dim(` 4. planr task implement TASK-* — Implement with your coding agent`);
|
|
146
159
|
logger.dim('');
|
|
147
160
|
logger.dim(` Or run the full flow at once:`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epic.js","sourceRoot":"","sources":["../../../src/cli/commands/epic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,UAAU,GACX,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAEjE,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"epic.js","sourceRoot":"","sources":["../../../src/cli/commands/epic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `planr export` command.
|
|
3
|
+
*
|
|
4
|
+
* Generates consolidated reports in markdown, JSON, or HTML format.
|
|
5
|
+
*/
|
|
6
|
+
import type { Command } from 'commander';
|
|
7
|
+
export declare function registerExportCommand(program: Command): void;
|
|
8
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmUzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAsErD"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `planr export` command.
|
|
3
|
+
*
|
|
4
|
+
* Generates consolidated reports in markdown, JSON, or HTML format.
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { listArtifacts, readArtifact } from '../../services/artifact-service.js';
|
|
8
|
+
import { loadConfig } from '../../services/config-service.js';
|
|
9
|
+
import { renderTemplate } from '../../services/template-service.js';
|
|
10
|
+
import { writeFile } from '../../utils/fs.js';
|
|
11
|
+
import { logger } from '../../utils/logger.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Data collection helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/** Collect tasks linked to a story, marking them as used. */
|
|
16
|
+
function collectTasksForStory(storyId, taskMap, usedTaskIds) {
|
|
17
|
+
const tasks = [];
|
|
18
|
+
for (const [tId, t] of taskMap) {
|
|
19
|
+
if (t.storyId !== storyId)
|
|
20
|
+
continue;
|
|
21
|
+
usedTaskIds.add(tId);
|
|
22
|
+
tasks.push(t);
|
|
23
|
+
}
|
|
24
|
+
return tasks;
|
|
25
|
+
}
|
|
26
|
+
/** Collect stories linked to a feature (with their tasks), marking them as used. */
|
|
27
|
+
function collectStoriesForFeature(featureId, storyMap, taskMap, usedStoryIds, usedTaskIds) {
|
|
28
|
+
const stories = [];
|
|
29
|
+
for (const [sId, s] of storyMap) {
|
|
30
|
+
if (s.featureId !== featureId)
|
|
31
|
+
continue;
|
|
32
|
+
usedStoryIds.add(sId);
|
|
33
|
+
const tasks = collectTasksForStory(sId, taskMap, usedTaskIds);
|
|
34
|
+
stories.push({ ...s, type: 'story', tasks });
|
|
35
|
+
}
|
|
36
|
+
return stories;
|
|
37
|
+
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Data collection
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
async function collectArtifacts(projectDir, config, scopeEpicId) {
|
|
42
|
+
const epicList = await listArtifacts(projectDir, config, 'epic');
|
|
43
|
+
const featureList = await listArtifacts(projectDir, config, 'feature');
|
|
44
|
+
const storyList = await listArtifacts(projectDir, config, 'story');
|
|
45
|
+
const taskList = await listArtifacts(projectDir, config, 'task');
|
|
46
|
+
const quickList = await listArtifacts(projectDir, config, 'quick');
|
|
47
|
+
// Read all artifacts into lookup maps
|
|
48
|
+
const featureMap = new Map();
|
|
49
|
+
const storyMap = new Map();
|
|
50
|
+
const taskMap = new Map();
|
|
51
|
+
for (const f of featureList) {
|
|
52
|
+
const data = await readArtifact(projectDir, config, 'feature', f.id);
|
|
53
|
+
if (data) {
|
|
54
|
+
featureMap.set(f.id, {
|
|
55
|
+
id: f.id,
|
|
56
|
+
title: data.data.title,
|
|
57
|
+
type: 'feature',
|
|
58
|
+
status: data.data.status || 'pending',
|
|
59
|
+
data: data.data,
|
|
60
|
+
body: data.content,
|
|
61
|
+
epicId: data.data.epicId,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const s of storyList) {
|
|
66
|
+
const data = await readArtifact(projectDir, config, 'story', s.id);
|
|
67
|
+
if (data) {
|
|
68
|
+
storyMap.set(s.id, {
|
|
69
|
+
id: s.id,
|
|
70
|
+
title: data.data.title,
|
|
71
|
+
type: 'story',
|
|
72
|
+
status: data.data.status || 'pending',
|
|
73
|
+
data: data.data,
|
|
74
|
+
body: data.content,
|
|
75
|
+
featureId: data.data.featureId,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const t of taskList) {
|
|
80
|
+
const data = await readArtifact(projectDir, config, 'task', t.id);
|
|
81
|
+
if (data) {
|
|
82
|
+
taskMap.set(t.id, {
|
|
83
|
+
id: t.id,
|
|
84
|
+
title: data.data.title,
|
|
85
|
+
type: 'task',
|
|
86
|
+
status: data.data.status || 'pending',
|
|
87
|
+
data: data.data,
|
|
88
|
+
body: data.content,
|
|
89
|
+
storyId: data.data.storyId,
|
|
90
|
+
featureId: data.data.featureId,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Build hierarchy
|
|
95
|
+
const epics = [];
|
|
96
|
+
const usedFeatureIds = new Set();
|
|
97
|
+
const usedStoryIds = new Set();
|
|
98
|
+
const usedTaskIds = new Set();
|
|
99
|
+
for (const e of epicList) {
|
|
100
|
+
if (scopeEpicId && e.id !== scopeEpicId)
|
|
101
|
+
continue;
|
|
102
|
+
const epicData = await readArtifact(projectDir, config, 'epic', e.id);
|
|
103
|
+
if (!epicData)
|
|
104
|
+
continue;
|
|
105
|
+
const epicFeatures = [];
|
|
106
|
+
for (const [fId, f] of featureMap) {
|
|
107
|
+
if (f.epicId !== e.id)
|
|
108
|
+
continue;
|
|
109
|
+
usedFeatureIds.add(fId);
|
|
110
|
+
const featureStories = collectStoriesForFeature(fId, storyMap, taskMap, usedStoryIds, usedTaskIds);
|
|
111
|
+
// Tasks linked directly to feature (no story)
|
|
112
|
+
for (const [tId, t] of taskMap) {
|
|
113
|
+
if (t.featureId === fId && !t.storyId && !usedTaskIds.has(tId)) {
|
|
114
|
+
usedTaskIds.add(tId);
|
|
115
|
+
featureStories.push({
|
|
116
|
+
...t,
|
|
117
|
+
type: 'task',
|
|
118
|
+
tasks: [],
|
|
119
|
+
featureId: fId,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
epicFeatures.push({ ...f, type: 'feature', stories: featureStories });
|
|
124
|
+
}
|
|
125
|
+
epics.push({
|
|
126
|
+
id: e.id,
|
|
127
|
+
title: epicData.data.title,
|
|
128
|
+
type: 'epic',
|
|
129
|
+
status: epicData.data.status || 'pending',
|
|
130
|
+
data: epicData.data,
|
|
131
|
+
body: epicData.content,
|
|
132
|
+
features: epicFeatures,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Orphaned artifacts (not part of any epic hierarchy)
|
|
136
|
+
const orphanFeatures = [];
|
|
137
|
+
if (!scopeEpicId) {
|
|
138
|
+
for (const [fId, f] of featureMap) {
|
|
139
|
+
if (usedFeatureIds.has(fId))
|
|
140
|
+
continue;
|
|
141
|
+
const featureStories = collectStoriesForFeature(fId, storyMap, taskMap, usedStoryIds, usedTaskIds);
|
|
142
|
+
orphanFeatures.push({ ...f, type: 'feature', stories: featureStories });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const orphanStories = [];
|
|
146
|
+
if (!scopeEpicId) {
|
|
147
|
+
for (const [sId, s] of storyMap) {
|
|
148
|
+
if (usedStoryIds.has(sId))
|
|
149
|
+
continue;
|
|
150
|
+
const tasks = collectTasksForStory(sId, taskMap, usedTaskIds);
|
|
151
|
+
orphanStories.push({ ...s, type: 'story', tasks });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const orphanTasks = [];
|
|
155
|
+
if (!scopeEpicId) {
|
|
156
|
+
for (const [tId, t] of taskMap) {
|
|
157
|
+
if (usedTaskIds.has(tId))
|
|
158
|
+
continue;
|
|
159
|
+
orphanTasks.push(t);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Quick tasks
|
|
163
|
+
const quickTasks = [];
|
|
164
|
+
if (!scopeEpicId) {
|
|
165
|
+
for (const qt of quickList) {
|
|
166
|
+
const data = await readArtifact(projectDir, config, 'quick', qt.id);
|
|
167
|
+
if (data) {
|
|
168
|
+
quickTasks.push({
|
|
169
|
+
id: qt.id,
|
|
170
|
+
title: data.data.title,
|
|
171
|
+
type: 'quick',
|
|
172
|
+
status: data.data.status || 'pending',
|
|
173
|
+
data: data.data,
|
|
174
|
+
body: data.content,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
projectName: config.projectName,
|
|
181
|
+
date: new Date().toISOString().split('T')[0],
|
|
182
|
+
epics,
|
|
183
|
+
orphanFeatures,
|
|
184
|
+
orphanStories,
|
|
185
|
+
orphanTasks,
|
|
186
|
+
quickTasks,
|
|
187
|
+
counts: {
|
|
188
|
+
epics: epics.length,
|
|
189
|
+
features: usedFeatureIds.size + orphanFeatures.length,
|
|
190
|
+
stories: usedStoryIds.size + orphanStories.length,
|
|
191
|
+
tasks: usedTaskIds.size + orphanTasks.length,
|
|
192
|
+
quick: quickTasks.length,
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
// Export formatters
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
async function exportMarkdown(data, outputPath, overrideDir) {
|
|
200
|
+
const content = await renderTemplate('export/planning-report.md.hbs', data, overrideDir);
|
|
201
|
+
const filePath = outputPath.endsWith('.md') ? outputPath : path.join(outputPath, 'PLANNING.md');
|
|
202
|
+
await writeFile(filePath, content);
|
|
203
|
+
return filePath;
|
|
204
|
+
}
|
|
205
|
+
async function exportJSON(data, outputPath) {
|
|
206
|
+
const filePath = outputPath.endsWith('.json')
|
|
207
|
+
? outputPath
|
|
208
|
+
: path.join(outputPath, 'planning.json');
|
|
209
|
+
await writeFile(filePath, JSON.stringify(data, null, 2));
|
|
210
|
+
return filePath;
|
|
211
|
+
}
|
|
212
|
+
async function exportHTML(data, outputPath, overrideDir) {
|
|
213
|
+
const content = await renderTemplate('export/planning-report.html.hbs', data, overrideDir);
|
|
214
|
+
const filePath = outputPath.endsWith('.html')
|
|
215
|
+
? outputPath
|
|
216
|
+
: path.join(outputPath, 'planning.html');
|
|
217
|
+
await writeFile(filePath, content);
|
|
218
|
+
return filePath;
|
|
219
|
+
}
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
// Command registration
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
export function registerExportCommand(program) {
|
|
224
|
+
program
|
|
225
|
+
.command('export')
|
|
226
|
+
.description('Export planning artifacts as markdown, JSON, or HTML report')
|
|
227
|
+
.option('--format <format>', 'output format: markdown, json, html', 'markdown')
|
|
228
|
+
.option('--scope <epicId>', 'only export artifacts under a specific epic')
|
|
229
|
+
.option('--output <path>', 'output file or directory', '.')
|
|
230
|
+
.action(async (opts) => {
|
|
231
|
+
const projectDir = program.opts().projectDir;
|
|
232
|
+
const config = await loadConfig(projectDir);
|
|
233
|
+
const format = opts.format.toLowerCase();
|
|
234
|
+
if (!['markdown', 'json', 'html'].includes(format)) {
|
|
235
|
+
logger.error(`Unknown format: ${format}. Use markdown, json, or html.`);
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
if (opts.scope) {
|
|
239
|
+
if (!opts.scope.startsWith('EPIC')) {
|
|
240
|
+
logger.error('--scope only supports epic IDs (e.g., EPIC-001)');
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
const epic = await readArtifact(projectDir, config, 'epic', opts.scope);
|
|
244
|
+
if (!epic) {
|
|
245
|
+
logger.error(`Epic not found: ${opts.scope}`);
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
logger.heading('Export');
|
|
250
|
+
const scopeLabel = opts.scope ? ` (scope: ${opts.scope})` : '';
|
|
251
|
+
logger.dim(`Collecting artifacts${scopeLabel}...`);
|
|
252
|
+
const data = await collectArtifacts(projectDir, config, opts.scope);
|
|
253
|
+
const total = data.counts.epics +
|
|
254
|
+
data.counts.features +
|
|
255
|
+
data.counts.stories +
|
|
256
|
+
data.counts.tasks +
|
|
257
|
+
data.counts.quick;
|
|
258
|
+
if (total === 0) {
|
|
259
|
+
logger.warn('No artifacts found to export.');
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const outputPath = path.resolve(projectDir, opts.output);
|
|
263
|
+
let filePath;
|
|
264
|
+
switch (format) {
|
|
265
|
+
case 'json':
|
|
266
|
+
filePath = await exportJSON(data, outputPath);
|
|
267
|
+
break;
|
|
268
|
+
case 'html':
|
|
269
|
+
filePath = await exportHTML(data, outputPath, config.templateOverrides);
|
|
270
|
+
break;
|
|
271
|
+
default:
|
|
272
|
+
// 'markdown' — validated above
|
|
273
|
+
filePath = await exportMarkdown(data, outputPath, config.templateOverrides);
|
|
274
|
+
}
|
|
275
|
+
console.log('');
|
|
276
|
+
logger.success(`Exported ${total} artifacts → ${path.relative(projectDir, filePath) || filePath}`);
|
|
277
|
+
logger.dim(`${data.counts.epics} epics, ${data.counts.features} features, ${data.counts.stories} stories, ${data.counts.tasks} tasks, ${data.counts.quick} quick`);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `planr github` command.
|
|
3
|
+
*
|
|
4
|
+
* Push planning artifacts to GitHub Issues and sync status bi-directionally.
|
|
5
|
+
*/
|
|
6
|
+
import type { Command } from 'commander';
|
|
7
|
+
export declare function registerGitHubCommand(program: Command): void;
|
|
8
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2KzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAoUrD"}
|