openplanr 0.8.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 (227) hide show
  1. package/README.md +142 -52
  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 +45 -3
  44. package/dist/ai/prompts/prompt-builder.js.map +1 -1
  45. package/dist/ai/prompts/system-prompts.d.ts +5 -3
  46. package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
  47. package/dist/ai/prompts/system-prompts.js +74 -13
  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 +4 -2
  54. package/dist/ai/types.d.ts.map +1 -1
  55. package/dist/ai/types.js +3 -1
  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 +41 -22
  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.d.ts +8 -0
  84. package/dist/cli/commands/export.d.ts.map +1 -0
  85. package/dist/cli/commands/export.js +282 -0
  86. package/dist/cli/commands/export.js.map +1 -0
  87. package/dist/cli/commands/feature.js +9 -9
  88. package/dist/cli/commands/feature.js.map +1 -1
  89. package/dist/cli/commands/github.d.ts +8 -0
  90. package/dist/cli/commands/github.d.ts.map +1 -0
  91. package/dist/cli/commands/github.js +415 -0
  92. package/dist/cli/commands/github.js.map +1 -0
  93. package/dist/cli/commands/plan.d.ts.map +1 -1
  94. package/dist/cli/commands/plan.js +104 -50
  95. package/dist/cli/commands/plan.js.map +1 -1
  96. package/dist/cli/commands/quick.d.ts.map +1 -1
  97. package/dist/cli/commands/quick.js +37 -107
  98. package/dist/cli/commands/quick.js.map +1 -1
  99. package/dist/cli/commands/refine.js +21 -21
  100. package/dist/cli/commands/refine.js.map +1 -1
  101. package/dist/cli/commands/search.d.ts.map +1 -1
  102. package/dist/cli/commands/search.js +18 -7
  103. package/dist/cli/commands/search.js.map +1 -1
  104. package/dist/cli/commands/sprint.d.ts +9 -0
  105. package/dist/cli/commands/sprint.d.ts.map +1 -0
  106. package/dist/cli/commands/sprint.js +519 -0
  107. package/dist/cli/commands/sprint.js.map +1 -0
  108. package/dist/cli/commands/status.d.ts.map +1 -1
  109. package/dist/cli/commands/status.js +77 -32
  110. package/dist/cli/commands/status.js.map +1 -1
  111. package/dist/cli/commands/story.js +15 -15
  112. package/dist/cli/commands/story.js.map +1 -1
  113. package/dist/cli/commands/sync.js +11 -7
  114. package/dist/cli/commands/sync.js.map +1 -1
  115. package/dist/cli/commands/task.d.ts +0 -2
  116. package/dist/cli/commands/task.d.ts.map +1 -1
  117. package/dist/cli/commands/task.js +14 -169
  118. package/dist/cli/commands/task.js.map +1 -1
  119. package/dist/cli/commands/template.d.ts +10 -0
  120. package/dist/cli/commands/template.d.ts.map +1 -0
  121. package/dist/cli/commands/template.js +269 -0
  122. package/dist/cli/commands/template.js.map +1 -0
  123. package/dist/cli/helpers/task-creation.d.ts +89 -0
  124. package/dist/cli/helpers/task-creation.d.ts.map +1 -0
  125. package/dist/cli/helpers/task-creation.js +140 -0
  126. package/dist/cli/helpers/task-creation.js.map +1 -0
  127. package/dist/cli/index.js +29 -2
  128. package/dist/cli/index.js.map +1 -1
  129. package/dist/models/schema.d.ts +2 -0
  130. package/dist/models/schema.d.ts.map +1 -1
  131. package/dist/models/schema.js +2 -0
  132. package/dist/models/schema.js.map +1 -1
  133. package/dist/models/types.d.ts +32 -1
  134. package/dist/models/types.d.ts.map +1 -1
  135. package/dist/services/artifact-gathering.d.ts +2 -0
  136. package/dist/services/artifact-gathering.d.ts.map +1 -1
  137. package/dist/services/artifact-gathering.js +26 -7
  138. package/dist/services/artifact-gathering.js.map +1 -1
  139. package/dist/services/artifact-service.d.ts +5 -5
  140. package/dist/services/artifact-service.d.ts.map +1 -1
  141. package/dist/services/artifact-service.js +4 -0
  142. package/dist/services/artifact-service.js.map +1 -1
  143. package/dist/services/config-service.d.ts.map +1 -1
  144. package/dist/services/config-service.js +2 -0
  145. package/dist/services/config-service.js.map +1 -1
  146. package/dist/services/credential-backends.d.ts.map +1 -1
  147. package/dist/services/credential-backends.js +15 -7
  148. package/dist/services/credential-backends.js.map +1 -1
  149. package/dist/services/credentials-service.d.ts.map +1 -1
  150. package/dist/services/credentials-service.js +6 -3
  151. package/dist/services/credentials-service.js.map +1 -1
  152. package/dist/services/github-service.d.ts +83 -0
  153. package/dist/services/github-service.d.ts.map +1 -0
  154. package/dist/services/github-service.js +440 -0
  155. package/dist/services/github-service.js.map +1 -0
  156. package/dist/services/template-service.d.ts +2 -1
  157. package/dist/services/template-service.d.ts.map +1 -1
  158. package/dist/services/template-service.js +3 -1
  159. package/dist/services/template-service.js.map +1 -1
  160. package/dist/templates/backlog/backlog-item.md.hbs +40 -0
  161. package/dist/templates/checklists/agile-checklist.md.hbs +1 -1
  162. package/dist/templates/export/planning-report.html.hbs +230 -0
  163. package/dist/templates/export/planning-report.md.hbs +136 -0
  164. package/dist/templates/quick/quick-task.md.hbs +1 -1
  165. package/dist/templates/rules/claude/CLAUDE.md.hbs +78 -35
  166. package/dist/templates/rules/codex/AGENTS.md.hbs +73 -17
  167. package/dist/templates/rules/cursor/2101-implement-task-list.mdc.hbs +66 -14
  168. package/dist/templates/sprints/sprint.md.hbs +42 -0
  169. package/dist/templates/task-templates/api-integration.json +45 -0
  170. package/dist/templates/task-templates/auth-flow.json +48 -0
  171. package/dist/templates/task-templates/database-migration.json +44 -0
  172. package/dist/templates/task-templates/react-component.json +45 -0
  173. package/dist/templates/task-templates/rest-endpoint.json +53 -0
  174. package/dist/templates/tasks/task-list.md.hbs +1 -1
  175. package/dist/utils/constants.d.ts +4 -0
  176. package/dist/utils/constants.d.ts.map +1 -1
  177. package/dist/utils/constants.js +4 -0
  178. package/dist/utils/constants.js.map +1 -1
  179. package/dist/utils/logger.d.ts +31 -1
  180. package/dist/utils/logger.d.ts.map +1 -1
  181. package/dist/utils/logger.js +92 -9
  182. package/dist/utils/logger.js.map +1 -1
  183. package/dist/utils/markdown.d.ts +3 -2
  184. package/dist/utils/markdown.d.ts.map +1 -1
  185. package/dist/utils/markdown.js +3 -1
  186. package/dist/utils/markdown.js.map +1 -1
  187. package/dist/utils/slugify.d.ts +8 -1
  188. package/dist/utils/slugify.d.ts.map +1 -1
  189. package/dist/utils/slugify.js +18 -2
  190. package/dist/utils/slugify.js.map +1 -1
  191. package/package.json +14 -3
  192. package/dist/agents/agent-factory.d.ts +0 -7
  193. package/dist/agents/agent-factory.d.ts.map +0 -1
  194. package/dist/agents/agent-factory.js +0 -22
  195. package/dist/agents/agent-factory.js.map +0 -1
  196. package/dist/agents/claude-agent.d.ts +0 -18
  197. package/dist/agents/claude-agent.d.ts.map +0 -1
  198. package/dist/agents/claude-agent.js +0 -183
  199. package/dist/agents/claude-agent.js.map +0 -1
  200. package/dist/agents/codex-agent.d.ts +0 -17
  201. package/dist/agents/codex-agent.d.ts.map +0 -1
  202. package/dist/agents/codex-agent.js +0 -124
  203. package/dist/agents/codex-agent.js.map +0 -1
  204. package/dist/agents/cursor-agent.d.ts +0 -14
  205. package/dist/agents/cursor-agent.d.ts.map +0 -1
  206. package/dist/agents/cursor-agent.js +0 -49
  207. package/dist/agents/cursor-agent.js.map +0 -1
  208. package/dist/agents/implementation-bridge.d.ts +0 -30
  209. package/dist/agents/implementation-bridge.d.ts.map +0 -1
  210. package/dist/agents/implementation-bridge.js +0 -256
  211. package/dist/agents/implementation-bridge.js.map +0 -1
  212. package/dist/agents/progress.d.ts +0 -62
  213. package/dist/agents/progress.d.ts.map +0 -1
  214. package/dist/agents/progress.js +0 -155
  215. package/dist/agents/progress.js.map +0 -1
  216. package/dist/agents/prompt-composer.d.ts +0 -30
  217. package/dist/agents/prompt-composer.d.ts.map +0 -1
  218. package/dist/agents/prompt-composer.js +0 -81
  219. package/dist/agents/prompt-composer.js.map +0 -1
  220. package/dist/agents/types.d.ts +0 -25
  221. package/dist/agents/types.d.ts.map +0 -1
  222. package/dist/agents/types.js +0 -8
  223. package/dist/agents/types.js.map +0 -1
  224. package/dist/utils/error-context.d.ts +0 -23
  225. package/dist/utils/error-context.d.ts.map +0 -1
  226. package/dist/utils/error-context.js +0 -94
  227. 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,13 +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
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
38
51
 
39
52
  # Generate AI rules for your editor
40
53
  planr rules generate
@@ -42,19 +55,27 @@ planr rules generate
42
55
 
43
56
  ## How It Works
44
57
 
45
- ```
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
+
46
65
  planr init
47
- └── planr epic create # Define the big picture
48
- └── planr feature create --epic EPIC-001 # Break into features
49
- └── planr story create --feature FEAT-001 # User stories + Gherkin
50
- └── planr task create --story US-001 # Implementation tasks
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
51
70
 
52
- planr rules generate # Generate .cursor/rules, CLAUDE.md, AGENTS.md
53
- ```
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
54
74
 
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.
75
+ planr rules generate # Generate .cursor/rules, CLAUDE.md, AGENTS.md
76
+ ```
56
77
 
57
- 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:
58
79
 
59
80
  ```bash
60
81
  planr plan # start from scratch
@@ -63,11 +84,11 @@ planr plan --epic EPIC-001 # cascade from an existing epic
63
84
 
64
85
  ## Supported AI Targets
65
86
 
66
- | Target | Generated File(s) | Used By |
67
- |--------|--------------------|---------|
68
- | Cursor | `.cursor/rules/*.mdc` | Cursor IDE |
69
- | Claude | `CLAUDE.md` | Claude Code CLI |
70
- | 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 |
71
92
 
72
93
  ```bash
73
94
  planr rules generate # all targets
@@ -77,33 +98,81 @@ planr rules generate --dry-run # preview
77
98
 
78
99
  ## Commands
79
100
 
80
- | Command | Description |
81
- |---------|-------------|
82
- | `planr init` | Initialize project with config and directory structure |
83
- | `planr epic create` | Create a new epic |
84
- | `planr epic list` | List all epics |
85
- | `planr feature create --epic <ID>` | Create features from an epic |
86
- | `planr feature list` | List all features |
87
- | `planr story create --feature <ID>` | Create user stories from a feature |
88
- | `planr story create --epic <ID>` | Batch-generate stories for all features under an epic |
89
- | `planr story list` | List all user stories |
90
- | `planr task create --story <ID>` | Create a task list from a single story |
91
- | `planr task create --feature <ID>` | Create a task list from all stories in a feature |
92
- | `planr task list` | List all task lists |
93
- | `planr task implement <ID>` | View tasks and start implementing |
94
- | `planr plan` | Full automated flow: Epic → Features → Stories → Tasks |
95
- | `planr refine <ID>` | AI-powered review and apply improvements |
96
- | `planr sync` | Validate and fix cross-references across artifacts |
97
- | `planr checklist show` | View the agile development checklist |
98
- | `planr checklist toggle` | Interactively toggle checklist items |
99
- | `planr checklist reset` | Reset checklist to initial state |
100
- | `planr rules generate` | Generate AI agent rule files |
101
- | `planr status` | Show planning progress with tree view and metrics |
102
- | `planr config show` | Display current configuration |
103
- | `planr config set-provider` | Set AI provider (anthropic, openai, ollama) |
104
- | `planr config set-key` | Store API key securely |
105
- | `planr config set-model` | Set AI model |
106
- | `planr config set-agent` | Set default coding agent |
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 |
107
176
 
108
177
  See [docs/CLI.md](docs/CLI.md) for the full command reference with all options and flags.
109
178
 
@@ -111,7 +180,7 @@ See [docs/CLI.md](docs/CLI.md) for the full command reference with all options a
111
180
 
112
181
  After running `planr init` and creating artifacts:
113
182
 
114
- ```
183
+ ```text
115
184
  my-project/
116
185
  ├── planr.config.json
117
186
  ├── docs/agile/
@@ -119,6 +188,10 @@ my-project/
119
188
  │ ├── features/ # FEAT-001-*.md
120
189
  │ ├── stories/ # US-001-*.md + US-001-gherkin.feature
121
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
122
195
  │ ├── adrs/ # Architecture Decision Records
123
196
  │ ├── checklists/ # Agile development checklist
124
197
  │ └── diagrams/ # UML, C4, sequence diagrams
@@ -145,11 +218,28 @@ my-project/
145
218
  "epic": "EPIC",
146
219
  "feature": "FEAT",
147
220
  "story": "US",
148
- "task": "TASK"
221
+ "task": "TASK",
222
+ "quick": "QT",
223
+ "backlog": "BL",
224
+ "sprint": "SPRINT"
149
225
  }
150
226
  }
151
227
  ```
152
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
+
153
243
  ## Development
154
244
 
155
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"}