openplanr 0.9.0 → 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.
Files changed (222) hide show
  1. package/README.md +142 -58
  2. package/dist/agents/index.d.ts +1 -5
  3. package/dist/agents/index.d.ts.map +1 -1
  4. package/dist/agents/index.js +1 -4
  5. package/dist/agents/index.js.map +1 -1
  6. package/dist/agents/task-parser.d.ts +4 -1
  7. package/dist/agents/task-parser.d.ts.map +1 -1
  8. package/dist/agents/task-parser.js +6 -3
  9. package/dist/agents/task-parser.js.map +1 -1
  10. package/dist/agents/utils.d.ts +0 -4
  11. package/dist/agents/utils.d.ts.map +1 -1
  12. package/dist/agents/utils.js +3 -24
  13. package/dist/agents/utils.js.map +1 -1
  14. package/dist/ai/codebase/context-builder.d.ts +22 -3
  15. package/dist/ai/codebase/context-builder.d.ts.map +1 -1
  16. package/dist/ai/codebase/context-builder.js +202 -14
  17. package/dist/ai/codebase/context-builder.js.map +1 -1
  18. package/dist/ai/codebase/file-reader.d.ts.map +1 -1
  19. package/dist/ai/codebase/file-reader.js +7 -3
  20. package/dist/ai/codebase/file-reader.js.map +1 -1
  21. package/dist/ai/codebase/index.d.ts +3 -1
  22. package/dist/ai/codebase/index.d.ts.map +1 -1
  23. package/dist/ai/codebase/index.js +3 -1
  24. package/dist/ai/codebase/index.js.map +1 -1
  25. package/dist/ai/codebase/pattern-rules.d.ts +28 -0
  26. package/dist/ai/codebase/pattern-rules.d.ts.map +1 -0
  27. package/dist/ai/codebase/pattern-rules.js +186 -0
  28. package/dist/ai/codebase/pattern-rules.js.map +1 -0
  29. package/dist/ai/codebase/rules-reader.d.ts +14 -0
  30. package/dist/ai/codebase/rules-reader.d.ts.map +1 -0
  31. package/dist/ai/codebase/rules-reader.js +25 -0
  32. package/dist/ai/codebase/rules-reader.js.map +1 -0
  33. package/dist/ai/codebase/stack-detector.d.ts.map +1 -1
  34. package/dist/ai/codebase/stack-detector.js +4 -1
  35. package/dist/ai/codebase/stack-detector.js.map +1 -1
  36. package/dist/ai/codebase/tree-generator.d.ts.map +1 -1
  37. package/dist/ai/codebase/tree-generator.js +5 -2
  38. package/dist/ai/codebase/tree-generator.js.map +1 -1
  39. package/dist/ai/errors.js +1 -1
  40. package/dist/ai/errors.js.map +1 -1
  41. package/dist/ai/prompts/prompt-builder.d.ts +12 -0
  42. package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
  43. package/dist/ai/prompts/prompt-builder.js +38 -3
  44. package/dist/ai/prompts/prompt-builder.js.map +1 -1
  45. package/dist/ai/prompts/system-prompts.d.ts +4 -2
  46. package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
  47. package/dist/ai/prompts/system-prompts.js +72 -12
  48. package/dist/ai/prompts/system-prompts.js.map +1 -1
  49. package/dist/ai/schemas/ai-response-schemas.d.ts +48 -2
  50. package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
  51. package/dist/ai/schemas/ai-response-schemas.js +19 -0
  52. package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
  53. package/dist/ai/types.d.ts +3 -1
  54. package/dist/ai/types.d.ts.map +1 -1
  55. package/dist/ai/types.js +2 -0
  56. package/dist/ai/types.js.map +1 -1
  57. package/dist/ai/validation/dependency-chains.d.ts +21 -0
  58. package/dist/ai/validation/dependency-chains.d.ts.map +1 -0
  59. package/dist/ai/validation/dependency-chains.js +114 -0
  60. package/dist/ai/validation/dependency-chains.js.map +1 -0
  61. package/dist/ai/validation/index.d.ts +3 -0
  62. package/dist/ai/validation/index.d.ts.map +1 -0
  63. package/dist/ai/validation/index.js +3 -0
  64. package/dist/ai/validation/index.js.map +1 -0
  65. package/dist/ai/validation/task-validator.d.ts +37 -0
  66. package/dist/ai/validation/task-validator.d.ts.map +1 -0
  67. package/dist/ai/validation/task-validator.js +89 -0
  68. package/dist/ai/validation/task-validator.js.map +1 -0
  69. package/dist/cli/commands/backlog.d.ts +10 -0
  70. package/dist/cli/commands/backlog.d.ts.map +1 -0
  71. package/dist/cli/commands/backlog.js +292 -0
  72. package/dist/cli/commands/backlog.js.map +1 -0
  73. package/dist/cli/commands/checklist.js +4 -4
  74. package/dist/cli/commands/checklist.js.map +1 -1
  75. package/dist/cli/commands/config.js +13 -13
  76. package/dist/cli/commands/config.js.map +1 -1
  77. package/dist/cli/commands/epic.d.ts.map +1 -1
  78. package/dist/cli/commands/epic.js +29 -23
  79. package/dist/cli/commands/epic.js.map +1 -1
  80. package/dist/cli/commands/estimate.d.ts.map +1 -1
  81. package/dist/cli/commands/estimate.js +40 -39
  82. package/dist/cli/commands/estimate.js.map +1 -1
  83. package/dist/cli/commands/export.js +6 -4
  84. package/dist/cli/commands/export.js.map +1 -1
  85. package/dist/cli/commands/feature.js +9 -9
  86. package/dist/cli/commands/feature.js.map +1 -1
  87. package/dist/cli/commands/github.d.ts.map +1 -1
  88. package/dist/cli/commands/github.js +30 -27
  89. package/dist/cli/commands/github.js.map +1 -1
  90. package/dist/cli/commands/plan.d.ts.map +1 -1
  91. package/dist/cli/commands/plan.js +27 -42
  92. package/dist/cli/commands/plan.js.map +1 -1
  93. package/dist/cli/commands/quick.d.ts.map +1 -1
  94. package/dist/cli/commands/quick.js +37 -107
  95. package/dist/cli/commands/quick.js.map +1 -1
  96. package/dist/cli/commands/refine.js +21 -21
  97. package/dist/cli/commands/refine.js.map +1 -1
  98. package/dist/cli/commands/search.d.ts.map +1 -1
  99. package/dist/cli/commands/search.js +18 -7
  100. package/dist/cli/commands/search.js.map +1 -1
  101. package/dist/cli/commands/sprint.d.ts +9 -0
  102. package/dist/cli/commands/sprint.d.ts.map +1 -0
  103. package/dist/cli/commands/sprint.js +519 -0
  104. package/dist/cli/commands/sprint.js.map +1 -0
  105. package/dist/cli/commands/status.d.ts.map +1 -1
  106. package/dist/cli/commands/status.js +77 -32
  107. package/dist/cli/commands/status.js.map +1 -1
  108. package/dist/cli/commands/story.js +15 -15
  109. package/dist/cli/commands/story.js.map +1 -1
  110. package/dist/cli/commands/sync.js +11 -7
  111. package/dist/cli/commands/sync.js.map +1 -1
  112. package/dist/cli/commands/task.d.ts +0 -2
  113. package/dist/cli/commands/task.d.ts.map +1 -1
  114. package/dist/cli/commands/task.js +14 -169
  115. package/dist/cli/commands/task.js.map +1 -1
  116. package/dist/cli/commands/template.d.ts +10 -0
  117. package/dist/cli/commands/template.d.ts.map +1 -0
  118. package/dist/cli/commands/template.js +269 -0
  119. package/dist/cli/commands/template.js.map +1 -0
  120. package/dist/cli/helpers/task-creation.d.ts +89 -0
  121. package/dist/cli/helpers/task-creation.d.ts.map +1 -0
  122. package/dist/cli/helpers/task-creation.js +140 -0
  123. package/dist/cli/helpers/task-creation.js.map +1 -0
  124. package/dist/cli/index.js +25 -2
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/models/schema.d.ts +2 -0
  127. package/dist/models/schema.d.ts.map +1 -1
  128. package/dist/models/schema.js +2 -0
  129. package/dist/models/schema.js.map +1 -1
  130. package/dist/models/types.d.ts +32 -1
  131. package/dist/models/types.d.ts.map +1 -1
  132. package/dist/services/artifact-gathering.d.ts +2 -0
  133. package/dist/services/artifact-gathering.d.ts.map +1 -1
  134. package/dist/services/artifact-gathering.js +26 -7
  135. package/dist/services/artifact-gathering.js.map +1 -1
  136. package/dist/services/artifact-service.d.ts +5 -5
  137. package/dist/services/artifact-service.d.ts.map +1 -1
  138. package/dist/services/artifact-service.js +4 -0
  139. package/dist/services/artifact-service.js.map +1 -1
  140. package/dist/services/config-service.d.ts.map +1 -1
  141. package/dist/services/config-service.js +2 -0
  142. package/dist/services/config-service.js.map +1 -1
  143. package/dist/services/credential-backends.d.ts.map +1 -1
  144. package/dist/services/credential-backends.js +15 -7
  145. package/dist/services/credential-backends.js.map +1 -1
  146. package/dist/services/credentials-service.d.ts.map +1 -1
  147. package/dist/services/credentials-service.js +6 -3
  148. package/dist/services/credentials-service.js.map +1 -1
  149. package/dist/services/github-service.d.ts +2 -2
  150. package/dist/services/github-service.d.ts.map +1 -1
  151. package/dist/services/github-service.js +9 -4
  152. package/dist/services/github-service.js.map +1 -1
  153. package/dist/services/template-service.d.ts +2 -1
  154. package/dist/services/template-service.d.ts.map +1 -1
  155. package/dist/services/template-service.js +2 -1
  156. package/dist/services/template-service.js.map +1 -1
  157. package/dist/templates/backlog/backlog-item.md.hbs +40 -0
  158. package/dist/templates/checklists/agile-checklist.md.hbs +1 -1
  159. package/dist/templates/quick/quick-task.md.hbs +1 -1
  160. package/dist/templates/rules/claude/CLAUDE.md.hbs +78 -35
  161. package/dist/templates/rules/codex/AGENTS.md.hbs +73 -17
  162. package/dist/templates/rules/cursor/2101-implement-task-list.mdc.hbs +66 -14
  163. package/dist/templates/sprints/sprint.md.hbs +42 -0
  164. package/dist/templates/task-templates/api-integration.json +45 -0
  165. package/dist/templates/task-templates/auth-flow.json +48 -0
  166. package/dist/templates/task-templates/database-migration.json +44 -0
  167. package/dist/templates/task-templates/react-component.json +45 -0
  168. package/dist/templates/task-templates/rest-endpoint.json +53 -0
  169. package/dist/templates/tasks/task-list.md.hbs +1 -1
  170. package/dist/utils/constants.d.ts +4 -0
  171. package/dist/utils/constants.d.ts.map +1 -1
  172. package/dist/utils/constants.js +4 -0
  173. package/dist/utils/constants.js.map +1 -1
  174. package/dist/utils/logger.d.ts +31 -1
  175. package/dist/utils/logger.d.ts.map +1 -1
  176. package/dist/utils/logger.js +92 -9
  177. package/dist/utils/logger.js.map +1 -1
  178. package/dist/utils/markdown.d.ts +3 -2
  179. package/dist/utils/markdown.d.ts.map +1 -1
  180. package/dist/utils/markdown.js +3 -1
  181. package/dist/utils/markdown.js.map +1 -1
  182. package/dist/utils/slugify.d.ts +8 -1
  183. package/dist/utils/slugify.d.ts.map +1 -1
  184. package/dist/utils/slugify.js +18 -2
  185. package/dist/utils/slugify.js.map +1 -1
  186. package/package.json +14 -3
  187. package/dist/agents/agent-factory.d.ts +0 -7
  188. package/dist/agents/agent-factory.d.ts.map +0 -1
  189. package/dist/agents/agent-factory.js +0 -22
  190. package/dist/agents/agent-factory.js.map +0 -1
  191. package/dist/agents/claude-agent.d.ts +0 -18
  192. package/dist/agents/claude-agent.d.ts.map +0 -1
  193. package/dist/agents/claude-agent.js +0 -183
  194. package/dist/agents/claude-agent.js.map +0 -1
  195. package/dist/agents/codex-agent.d.ts +0 -17
  196. package/dist/agents/codex-agent.d.ts.map +0 -1
  197. package/dist/agents/codex-agent.js +0 -124
  198. package/dist/agents/codex-agent.js.map +0 -1
  199. package/dist/agents/cursor-agent.d.ts +0 -14
  200. package/dist/agents/cursor-agent.d.ts.map +0 -1
  201. package/dist/agents/cursor-agent.js +0 -49
  202. package/dist/agents/cursor-agent.js.map +0 -1
  203. package/dist/agents/implementation-bridge.d.ts +0 -30
  204. package/dist/agents/implementation-bridge.d.ts.map +0 -1
  205. package/dist/agents/implementation-bridge.js +0 -256
  206. package/dist/agents/implementation-bridge.js.map +0 -1
  207. package/dist/agents/progress.d.ts +0 -62
  208. package/dist/agents/progress.d.ts.map +0 -1
  209. package/dist/agents/progress.js +0 -155
  210. package/dist/agents/progress.js.map +0 -1
  211. package/dist/agents/prompt-composer.d.ts +0 -30
  212. package/dist/agents/prompt-composer.d.ts.map +0 -1
  213. package/dist/agents/prompt-composer.js +0 -81
  214. package/dist/agents/prompt-composer.js.map +0 -1
  215. package/dist/agents/types.d.ts +0 -25
  216. package/dist/agents/types.d.ts.map +0 -1
  217. package/dist/agents/types.js +0 -8
  218. package/dist/agents/types.js.map +0 -1
  219. package/dist/utils/error-context.d.ts +0 -23
  220. package/dist/utils/error-context.d.ts.map +0 -1
  221. package/dist/utils/error-context.js +0 -94
  222. package/dist/utils/error-context.js.map +0 -1
package/README.md CHANGED
@@ -4,9 +4,9 @@
4
4
  [![license](https://img.shields.io/npm/l/openplanr.svg)](https://github.com/TechArc-io/OpenPlanr/blob/main/LICENSE)
5
5
  [![node](https://img.shields.io/node/v/openplanr.svg)](https://nodejs.org)
6
6
 
7
- **Agile planning CLI for AI-assisted development.** Generate epics, features, user stories, tasks, and AI agent rules — all from your terminal.
7
+ **AI-powered planning CLI for developers.** Capture ideas, plan sprints, generate tasks, estimate effort, and sync with GitHub — all from your terminal.
8
8
 
9
- Planr brings structured agile planning to AI coding workflows. Create planning artifacts with a simple CLI, then generate rule files that teach Cursor, Claude Code, or Codex how to follow your plan.
9
+ Planr replaces heavyweight project management tools with a fast, file-based workflow. Artifacts live in your repo as markdown, version-controlled alongside your code. AI generates structured plans and teaches your coding agent (Cursor, Claude Code, Codex) how to follow them.
10
10
 
11
11
  ---
12
12
 
@@ -14,9 +14,14 @@ Planr brings structured agile planning to AI coding workflows. Create planning a
14
14
 
15
15
  AI coding assistants are powerful but lack structured planning. Without a clear plan, they generate code that drifts from requirements. Planr solves this by:
16
16
 
17
- 1. **Structuring your planning** — epics, features, stories, and tasks in markdown
18
- 2. **Generating AI rules** — rule files that give your AI assistant context about the plan
19
- 3. **Keeping everything in your repo** artifacts live alongside your code, version-controlled
17
+ 1. **Capturing ideas instantly** — `planr backlog add` captures work items without breaking your flow
18
+ 2. **Structuring your planning** — epics, features, stories, and tasks in markdown
19
+ 3. **Sprint planning** time-boxed iterations with velocity tracking and AI task selection
20
+ 4. **Reusable patterns** — task templates for common workflows (REST endpoints, React components, etc.)
21
+ 5. **AI-powered estimation** — story points, effort hours, and complexity analysis
22
+ 6. **Generating AI rules** — rule files that give your AI assistant context about the plan
23
+ 7. **GitHub integration** — push artifacts to issues, bi-directional sync, export reports
24
+ 8. **Keeping everything in your repo** — artifacts live alongside your code, version-controlled
20
25
 
21
26
  ## Quick Start
22
27
 
@@ -28,14 +33,21 @@ npm install -g openplanr
28
33
  cd my-project
29
34
  planr init
30
35
 
31
- # Create your first epic
32
- planr epic create
36
+ # Capture an idea
37
+ planr backlog add "add user profiles" --priority high --tag feature
33
38
 
34
- # Break it down
39
+ # Or jump straight into planning
40
+ planr epic create
35
41
  planr feature create --epic EPIC-001
36
42
  planr story create --feature FEAT-001
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)
43
+ planr task create --feature FEAT-001
44
+
45
+ # Generate tasks from a template
46
+ planr template use rest-endpoint --title "User Profile API"
47
+
48
+ # Start a sprint
49
+ planr sprint create --name "Sprint 1" --duration 2w
50
+ planr sprint add TASK-001 QT-001
39
51
 
40
52
  # Generate AI rules for your editor
41
53
  planr rules generate
@@ -43,20 +55,27 @@ planr rules generate
43
55
 
44
56
  ## How It Works
45
57
 
46
- ```
58
+ ```text
59
+ Backlog → Agile Hierarchy → Sprint → Implementation
60
+
61
+ planr backlog add "..." # Capture ideas as they come
62
+ planr backlog prioritize # AI sorts by impact/effort
63
+ planr backlog promote BL-001 --quick # Move to task when ready
64
+
47
65
  planr init
48
- └── planr epic create # Define the big picture
49
- └── planr feature create --epic EPIC-001 # Break into features
50
- └── planr story create --feature FEAT-001 # User stories + Gherkin
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)
66
+ └── planr epic create # Define the big picture
67
+ └── planr feature create --epic EPIC-001
68
+ └── planr story create --feature FEAT-001
69
+ └── planr task create --feature FEAT-001
53
70
 
54
- planr rules generate # Generate .cursor/rules, CLAUDE.md, AGENTS.md
55
- ```
71
+ planr sprint create --name "Sprint 1" --duration 2w
72
+ planr sprint add TASK-001 QT-001 # Assign tasks (or --auto for AI)
73
+ planr sprint status # Track progress
56
74
 
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`.
75
+ planr rules generate # Generate .cursor/rules, CLAUDE.md, AGENTS.md
76
+ ```
58
77
 
59
- Or use `planr plan` to run the full flow in a single command:
78
+ Or use `planr plan` to run the full agile flow in a single command:
60
79
 
61
80
  ```bash
62
81
  planr plan # start from scratch
@@ -65,11 +84,11 @@ planr plan --epic EPIC-001 # cascade from an existing epic
65
84
 
66
85
  ## Supported AI Targets
67
86
 
68
- | Target | Generated File(s) | Used By |
69
- |--------|--------------------|---------|
70
- | Cursor | `.cursor/rules/*.mdc` | Cursor IDE |
71
- | Claude | `CLAUDE.md` | Claude Code CLI |
72
- | Codex | `AGENTS.md` | OpenAI Codex CLI |
87
+ | Target | Generated File(s) | Used By |
88
+ | ------ | --------------------- | ---------------- |
89
+ | Cursor | `.cursor/rules/*.mdc` | Cursor IDE |
90
+ | Claude | `CLAUDE.md` | Claude Code CLI |
91
+ | Codex | `AGENTS.md` | OpenAI Codex CLI |
73
92
 
74
93
  ```bash
75
94
  planr rules generate # all targets
@@ -79,37 +98,81 @@ planr rules generate --dry-run # preview
79
98
 
80
99
  ## Commands
81
100
 
82
- | Command | Description |
83
- |---------|-------------|
84
- | `planr init` | Initialize project with config and directory structure |
85
- | `planr epic create` | Create a new epic (supports `--file <path>` for PRDs) |
86
- | `planr epic list` | List all epics |
87
- | `planr feature create --epic <ID>` | Create features from an epic |
88
- | `planr feature list` | List all features |
89
- | `planr story create --feature <ID>` | Create user stories from a feature |
90
- | `planr story create --epic <ID>` | Batch-generate stories for all features under an epic |
91
- | `planr story list` | List all user stories |
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 |
94
- | `planr task list` | List all task lists |
95
- | `planr task implement <ID>` | View tasks and start implementing |
96
- | `planr plan` | Full automated flow: Epic → Features → Stories → Tasks |
97
- | `planr refine <ID>` | AI-powered review and apply improvements |
98
- | `planr sync` | Validate and fix cross-references across artifacts |
99
- | `planr checklist show` | View the agile development checklist |
100
- | `planr checklist toggle` | Interactively toggle checklist items |
101
- | `planr checklist reset` | Reset checklist to initial state |
102
- | `planr rules generate` | Generate AI agent rule files |
103
- | `planr status` | Show planning progress with tree view and metrics |
104
- | `planr config show` | Display current configuration |
105
- | `planr config set-provider` | Set AI provider (anthropic, openai, ollama) |
106
- | `planr config set-key` | Store API key securely |
107
- | `planr config set-model` | Set AI model |
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) |
101
+ ### Backlog & Sprint
102
+
103
+ | Command | Description |
104
+ | ----------------------------------------------------- | ------------------------------------------- |
105
+ | `planr backlog add "desc" --priority high --tag bug` | Capture a backlog item |
106
+ | `planr backlog list --tag bug --priority high` | List/filter backlog items |
107
+ | `planr backlog prioritize` | AI sorts open items by impact and effort |
108
+ | `planr backlog promote BL-001 --quick` | Promote to quick task or story |
109
+ | `planr backlog close BL-001` | Close/archive an item |
110
+ | `planr sprint create --name "Sprint 1" --duration 2w` | Create a time-boxed sprint |
111
+ | `planr sprint add TASK-001 QT-001` | Assign tasks to active sprint |
112
+ | `planr sprint add --auto` | AI selects tasks by priority and velocity |
113
+ | `planr sprint status` | Progress dashboard with completion % |
114
+ | `planr sprint close` | Archive sprint, carry over incomplete tasks |
115
+ | `planr sprint list` | List all sprints |
116
+ | `planr sprint history` | Velocity chart across past sprints |
117
+
118
+ ### Agile Hierarchy
119
+
120
+ | Command | Description |
121
+ | ----------------------------------- | ----------------------------------------------------- |
122
+ | `planr epic create` | Create a new epic (supports `--file <path>` for PRDs) |
123
+ | `planr epic list` | List all epics |
124
+ | `planr feature create --epic <ID>` | Create features from an epic |
125
+ | `planr feature list` | List all features |
126
+ | `planr story create --feature <ID>` | Create user stories from a feature |
127
+ | `planr story create --epic <ID>` | Batch-generate stories for all features under an epic |
128
+ | `planr story list` | List all user stories |
129
+ | `planr task create --story <ID>` | AI task list from one story |
130
+ | `planr task create --feature <ID>` | AI task list from all stories under a feature |
131
+ | `planr task list` | List all task lists |
132
+ ### Quick Tasks & Templates
133
+
134
+ | Command | Description |
135
+ | ----------------------------------------------------- | ---------------------------------- |
136
+ | `planr quick create "description"` | AI-generated standalone task list |
137
+ | `planr quick create --file spec.md` | Task list from a PRD or spec file |
138
+ | `planr quick promote <ID> --story US-001` | Move into agile hierarchy |
139
+ | `planr template list` | List built-in and custom templates |
140
+ | `planr template use rest-endpoint --title "User API"` | Generate tasks from a template |
141
+ | `planr template save TASK-001 --name my-pattern` | Save existing tasks as template |
142
+ | `planr template show rest-endpoint` | Preview template contents |
143
+
144
+ ### Planning Tools
145
+
146
+ | Command | Description |
147
+ | ---------------------- | --------------------------------------------------------- |
148
+ | `planr plan` | Full automated flow: Epic -> Features -> Stories -> Tasks |
149
+ | `planr estimate <ID>` | AI effort estimation (story points, hours, complexity) |
150
+ | `planr refine <ID>` | AI-powered review and improvements |
151
+ | `planr search <query>` | Full-text search across all artifacts |
152
+ | `planr sync` | Validate and fix cross-references |
153
+ | `planr status` | Planning progress with tree view and metrics |
154
+
155
+ ### GitHub & Export
156
+
157
+ | Command | Description |
158
+ | ---------------------------- | ------------------------------------------------ |
159
+ | `planr github push [ID]` | Push artifacts to GitHub Issues |
160
+ | `planr github sync` | Bi-directional status sync with GitHub |
161
+ | `planr github status` | Show sync status of linked artifacts |
162
+ | `planr export --format html` | Export planning report (markdown, JSON, or HTML) |
163
+
164
+ ### Setup & config commands
165
+
166
+ | Command | Description |
167
+ | ----------------------------------- | ------------------------------------------------------ |
168
+ | `planr init` | Initialize project with config and directory structure |
169
+ | `planr config show` | Display current configuration |
170
+ | `planr config set-provider` | Set AI provider (anthropic, openai, ollama) |
171
+ | `planr config set-key` | Store API key securely |
172
+ | `planr config set-model` | Set AI model |
173
+ | `planr config set-agent` | Set default coding agent |
174
+ | `planr rules generate` | Generate AI agent rule files |
175
+ | `planr checklist show/toggle/reset` | Agile development checklist |
113
176
 
114
177
  See [docs/CLI.md](docs/CLI.md) for the full command reference with all options and flags.
115
178
 
@@ -117,7 +180,7 @@ See [docs/CLI.md](docs/CLI.md) for the full command reference with all options a
117
180
 
118
181
  After running `planr init` and creating artifacts:
119
182
 
120
- ```
183
+ ```text
121
184
  my-project/
122
185
  ├── planr.config.json
123
186
  ├── docs/agile/
@@ -125,6 +188,10 @@ my-project/
125
188
  │ ├── features/ # FEAT-001-*.md
126
189
  │ ├── stories/ # US-001-*.md + US-001-gherkin.feature
127
190
  │ ├── tasks/ # TASK-001-*.md
191
+ │ ├── quick/ # QT-001-*.md
192
+ │ ├── backlog/ # BL-001-*.md
193
+ │ ├── sprints/ # SPRINT-001-*.md
194
+ │ ├── templates/ # Custom task templates
128
195
  │ ├── adrs/ # Architecture Decision Records
129
196
  │ ├── checklists/ # Agile development checklist
130
197
  │ └── diagrams/ # UML, C4, sequence diagrams
@@ -151,11 +218,28 @@ my-project/
151
218
  "epic": "EPIC",
152
219
  "feature": "FEAT",
153
220
  "story": "US",
154
- "task": "TASK"
221
+ "task": "TASK",
222
+ "quick": "QT",
223
+ "backlog": "BL",
224
+ "sprint": "SPRINT"
155
225
  }
156
226
  }
157
227
  ```
158
228
 
229
+ ## Built-in Task Templates
230
+
231
+ | Template | Description |
232
+ | -------------------- | ------------------------------------------------------- |
233
+ | `rest-endpoint` | CRUD endpoint with validation, auth, tests, docs |
234
+ | `react-component` | Component, stories, tests, types |
235
+ | `database-migration` | Schema change, migration, rollback, seed data |
236
+ | `api-integration` | External API client, retry logic, error handling, tests |
237
+ | `auth-flow` | Authentication flow with login, signup, password reset |
238
+
239
+ ```bash
240
+ planr template use rest-endpoint --title "User Profile API"
241
+ ```
242
+
159
243
  ## Development
160
244
 
161
245
  ```bash
@@ -1,7 +1,3 @@
1
- export { createAgent } from './agent-factory.js';
2
- export { executeFollowUp, executeImplementation } from './implementation-bridge.js';
3
- export { createProgressSpinner, describeActivity } from './progress.js';
4
- export { composeImplementationPrompt } from './prompt-composer.js';
5
1
  export { findSubtasks, getNextPending, parseTaskMarkdown } from './task-parser.js';
6
- export type { AgentOptions, AgentResult, CodingAgent } from './types.js';
2
+ export { which } from './utils.js';
7
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -1,6 +1,3 @@
1
- export { createAgent } from './agent-factory.js';
2
- export { executeFollowUp, executeImplementation } from './implementation-bridge.js';
3
- export { createProgressSpinner, describeActivity } from './progress.js';
4
- export { composeImplementationPrompt } from './prompt-composer.js';
5
1
  export { findSubtasks, getNextPending, parseTaskMarkdown } from './task-parser.js';
2
+ export { which } from './utils.js';
6
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -16,7 +16,10 @@ export interface ParsedSubtask {
16
16
  }
17
17
  /**
18
18
  * Parse a task list markdown file into structured subtasks.
19
- * Expected format: `- [x] 1.0 Task title` or ` - [ ] 1.1 Subtask title`
19
+ * Expected format:
20
+ * `- [x] **1.0** Task title` (bold group IDs)
21
+ * `- [x] 1.0 Task title` (plain group IDs)
22
+ * ` - [ ] 1.1 Subtask title` (indented subtasks)
20
23
  */
21
24
  export declare function parseTaskMarkdown(content: string): ParsedSubtask[];
22
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"task-parser.d.ts","sourceRoot":"","sources":["../../src/agents/task-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CA+BlE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAgBnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,GAAG,IAAI,CAE3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAStF"}
1
+ {"version":3,"file":"task-parser.d.ts","sourceRoot":"","sources":["../../src/agents/task-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CA+BlE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAgBnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,GAAG,IAAI,CAE3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAStF"}
@@ -9,15 +9,18 @@
9
9
  */
10
10
  /**
11
11
  * Parse a task list markdown file into structured subtasks.
12
- * Expected format: `- [x] 1.0 Task title` or ` - [ ] 1.1 Subtask title`
12
+ * Expected format:
13
+ * `- [x] **1.0** Task title` (bold group IDs)
14
+ * `- [x] 1.0 Task title` (plain group IDs)
15
+ * ` - [ ] 1.1 Subtask title` (indented subtasks)
13
16
  */
14
17
  export function parseTaskMarkdown(content) {
15
18
  const tasks = [];
16
19
  const lines = content.split('\n');
17
20
  let currentGroupId = null;
18
21
  for (const line of lines) {
19
- // Match: - [x] 1.0 Task title OR - [ ] 1.1 Subtask title
20
- const match = line.match(/^(\s*)- \[(x| )\]\s+(\d+\.\d+)\s+(.+)$/);
22
+ // Match: - [x] **1.0** Task title OR - [x] 1.0 Task title OR - [ ] 1.1 Subtask title
23
+ const match = line.match(/^(\s*)- \[(x| )\]\s+\*{0,2}(\d+\.\d+)\*{0,2}\s+(.+)$/);
21
24
  if (!match)
22
25
  continue;
23
26
  const indent = match[1].length;
@@ -1 +1 @@
1
- {"version":3,"file":"task-parser.js","sourceRoot":"","sources":["../../src/agents/task-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-parser.js","sourceRoot":"","sources":["../../src/agents/task-parser.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,4 @@
6
6
  * Returns the path to the command or null.
7
7
  */
8
8
  export declare function which(command: string): Promise<string | null>;
9
- export declare const MAX_RETRIES = 2;
10
- export declare const RETRY_DELAY_MS = 3000;
11
- export declare function isRetryableError(stderr: string): boolean;
12
- export declare function sleep(ms: number): Promise<void>;
13
9
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/agents/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;GAGG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQnE;AAMD,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,OAAO,CAAC;AAcnC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/agents/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;GAGG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASnE"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { execFile } from 'node:child_process';
5
5
  import { promisify } from 'node:util';
6
+ import { logger } from '../utils/logger.js';
6
7
  const execFileAsync = promisify(execFile);
7
8
  /**
8
9
  * Check if a command exists on the system PATH.
@@ -14,31 +15,9 @@ export async function which(command) {
14
15
  const { stdout } = await execFileAsync(cmd, [command]);
15
16
  return stdout.trim() || null;
16
17
  }
17
- catch {
18
+ catch (err) {
19
+ logger.debug('Command lookup failed', err);
18
20
  return null;
19
21
  }
20
22
  }
21
- // ---------------------------------------------------------------------------
22
- // Retry helpers (shared across agent adapters)
23
- // ---------------------------------------------------------------------------
24
- export const MAX_RETRIES = 2;
25
- export const RETRY_DELAY_MS = 3000;
26
- /** Patterns in stderr that indicate a transient/retryable API error */
27
- const RETRYABLE_PATTERNS = [
28
- 'tool use concurrency',
29
- 'overloaded',
30
- '429',
31
- '500',
32
- '503',
33
- 'rate limit',
34
- 'econnreset',
35
- 'socket hang up',
36
- ];
37
- export function isRetryableError(stderr) {
38
- const lower = stderr.toLowerCase();
39
- return RETRYABLE_PATTERNS.some((p) => lower.includes(p));
40
- }
41
- export function sleep(ms) {
42
- return new Promise((resolve) => setTimeout(resolve, ms));
43
- }
44
23
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/agents/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAe;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,uEAAuE;AACvE,MAAM,kBAAkB,GAAG;IACzB,sBAAsB;IACtB,YAAY;IACZ,KAAK;IACL,KAAK;IACL,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,gBAAgB;CACjB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/agents/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAe;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,16 +1,35 @@
1
1
  /**
2
2
  * Orchestrates codebase awareness into a single context string.
3
3
  *
4
- * Combines tech stack detection, folder tree, and related file snippets
5
- * into a formatted block for inclusion in AI prompts. Respects a token
6
- * budget (~8K tokens 32K chars) to avoid prompt overflow.
4
+ * Combines tech stack detection, folder tree, architecture files,
5
+ * and keyword-matched file snippets into a formatted block for
6
+ * inclusion in AI prompts. Respects a token budget to avoid overflow.
7
+ *
8
+ * Architecture files are always included — they define the patterns
9
+ * the AI must follow when generating implementation tasks.
7
10
  */
11
+ import { type PatternRule } from './pattern-rules.js';
8
12
  import { type TechStack } from './stack-detector.js';
9
13
  export interface CodebaseContext {
10
14
  techStack: TechStack | null;
11
15
  folderTree: string;
16
+ /** Compact listing of all source files in key directories. */
17
+ sourceInventory: string;
18
+ /** Core pattern files that define how the project is structured. */
19
+ architectureFiles: Map<string, string>;
20
+ /** Keyword-matched files relevant to the specific task. */
12
21
  relatedFiles: Map<string, string>;
22
+ /** User-defined rules from `.planr/rules.md`. */
23
+ projectRules: string | null;
24
+ /** Auto-detected architectural patterns. */
25
+ patternRules: PatternRule[];
13
26
  }
27
+ /**
28
+ * Discover architecture files that exist in the project.
29
+ * Tries each candidate path per pattern — first match wins.
30
+ * Returns a map of relative paths → labeled, truncated content.
31
+ */
32
+ export declare function findArchitectureFiles(projectDir: string): Promise<Map<string, string>>;
14
33
  /**
15
34
  * Build a complete codebase context for AI prompt enrichment.
16
35
  *
@@ -1 +1 @@
1
- {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../../src/ai/codebase/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKvF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,EAAO,GACtB,OAAO,CAAC,eAAe,CAAC,CAU1B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAwClE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BzD"}
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../../src/ai/codebase/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKvF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,2DAA2D;IAC3D,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,iDAAiD;IACjD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,4CAA4C;IAC5C,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AA2DD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAe5F;AA6ED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,EAAO,GACtB,OAAO,CAAC,eAAe,CAAC,CA6B1B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ElE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BzD"}