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.
Files changed (36) hide show
  1. package/README.md +11 -5
  2. package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
  3. package/dist/ai/prompts/prompt-builder.js +8 -1
  4. package/dist/ai/prompts/prompt-builder.js.map +1 -1
  5. package/dist/ai/prompts/system-prompts.d.ts +1 -1
  6. package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
  7. package/dist/ai/prompts/system-prompts.js +2 -1
  8. package/dist/ai/prompts/system-prompts.js.map +1 -1
  9. package/dist/ai/types.d.ts +1 -1
  10. package/dist/ai/types.js +1 -1
  11. package/dist/cli/commands/epic.d.ts.map +1 -1
  12. package/dist/cli/commands/epic.js +16 -3
  13. package/dist/cli/commands/epic.js.map +1 -1
  14. package/dist/cli/commands/export.d.ts +8 -0
  15. package/dist/cli/commands/export.d.ts.map +1 -0
  16. package/dist/cli/commands/export.js +280 -0
  17. package/dist/cli/commands/export.js.map +1 -0
  18. package/dist/cli/commands/github.d.ts +8 -0
  19. package/dist/cli/commands/github.d.ts.map +1 -0
  20. package/dist/cli/commands/github.js +412 -0
  21. package/dist/cli/commands/github.js.map +1 -0
  22. package/dist/cli/commands/plan.d.ts.map +1 -1
  23. package/dist/cli/commands/plan.js +89 -20
  24. package/dist/cli/commands/plan.js.map +1 -1
  25. package/dist/cli/index.js +4 -0
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/services/github-service.d.ts +83 -0
  28. package/dist/services/github-service.d.ts.map +1 -0
  29. package/dist/services/github-service.js +435 -0
  30. package/dist/services/github-service.js.map +1 -0
  31. package/dist/services/template-service.d.ts.map +1 -1
  32. package/dist/services/template-service.js +1 -0
  33. package/dist/services/template-service.js.map +1 -1
  34. package/dist/templates/export/planning-report.html.hbs +230 -0
  35. package/dist/templates/export/planning-report.md.hbs +136 -0
  36. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"template-service.js","sourceRoot":"","sources":["../../src/services/template-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAsC,CAAC;AAEpE,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhF,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CACrD,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CACjD,CAAC;AAEF,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,KAAe,EAAE,EAAE;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAa,EAAE,GAAY,EAAE,EAAE,CAChE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CACzE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAAoB,EACpB,IAA6B,EAC7B,WAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACtE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,YAAoB,EAAE,WAAoB;IAC3E,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC1D,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"template-service.js","sourceRoot":"","sources":["../../src/services/template-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAsC,CAAC;AAEpE,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhF,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CACrD,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CACjD,CAAC;AAEF,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,KAAe,EAAE,EAAE;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAa,EAAE,GAAY,EAAE,EAAE,CAChE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CACzE,CAAC;AAEF,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAAoB,EACpB,IAA6B,EAC7B,WAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACtE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,YAAoB,EAAE,WAAoB;IAC3E,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC1D,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,230 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>{{projectName}} — Planning Report</title>
7
+ <style>
8
+ :root {
9
+ --bg: #ffffff;
10
+ --fg: #1a1a2e;
11
+ --muted: #6c757d;
12
+ --border: #dee2e6;
13
+ --accent: #4169E1;
14
+ --done: #2E8B57;
15
+ --progress: #DAA520;
16
+ --pending: #6c757d;
17
+ --epic-bg: #f0edff;
18
+ --feature-bg: #eef3ff;
19
+ --story-bg: #f0faf4;
20
+ --task-bg: #fffcf0;
21
+ --quick-bg: #fdf0ff;
22
+ }
23
+ * { box-sizing: border-box; margin: 0; padding: 0; }
24
+ body {
25
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
26
+ color: var(--fg);
27
+ background: var(--bg);
28
+ line-height: 1.6;
29
+ max-width: 960px;
30
+ margin: 0 auto;
31
+ padding: 2rem 1.5rem;
32
+ }
33
+ h1 { font-size: 1.8rem; margin-bottom: 0.25rem; }
34
+ h2 { font-size: 1.4rem; margin: 2rem 0 1rem; border-bottom: 2px solid var(--border); padding-bottom: 0.3rem; }
35
+ h3 { font-size: 1.1rem; margin: 0; }
36
+ .subtitle { color: var(--muted); font-size: 0.9rem; margin-bottom: 1.5rem; }
37
+ .badge {
38
+ display: inline-block;
39
+ font-size: 0.75rem;
40
+ font-weight: 600;
41
+ padding: 0.15rem 0.5rem;
42
+ border-radius: 4px;
43
+ text-transform: uppercase;
44
+ letter-spacing: 0.03em;
45
+ }
46
+ .badge-done { background: var(--done); color: #fff; }
47
+ .badge-in-progress { background: var(--progress); color: #fff; }
48
+ .badge-pending { background: var(--pending); color: #fff; }
49
+ .estimate { font-size: 0.8rem; color: var(--muted); margin-left: 0.5rem; }
50
+ table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
51
+ th, td { text-align: left; padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--border); }
52
+ th { font-weight: 600; font-size: 0.85rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.05em; }
53
+ td { font-size: 0.95rem; }
54
+ details { margin: 0.5rem 0; border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
55
+ details[open] > summary { border-bottom: 1px solid var(--border); }
56
+ summary {
57
+ padding: 0.75rem 1rem;
58
+ cursor: pointer;
59
+ font-weight: 500;
60
+ display: flex;
61
+ align-items: center;
62
+ gap: 0.5rem;
63
+ user-select: none;
64
+ }
65
+ summary:hover { background: #f8f9fa; }
66
+ summary::marker { color: var(--muted); }
67
+ .artifact-body { padding: 0.75rem 1rem 1rem; font-size: 0.9rem; }
68
+ .artifact-body p { margin: 0.5rem 0; }
69
+ .artifact-body ul, .artifact-body ol { margin: 0.5rem 0 0.5rem 1.5rem; }
70
+ .artifact-body li { margin: 0.2rem 0; }
71
+ .artifact-body h1, .artifact-body h2, .artifact-body h3, .artifact-body h4 { margin: 1rem 0 0.5rem; }
72
+ .artifact-body pre { background: #f4f4f5; padding: 0.75rem; border-radius: 4px; overflow-x: auto; font-size: 0.85rem; }
73
+ .artifact-body code { background: #f4f4f5; padding: 0.1rem 0.3rem; border-radius: 3px; font-size: 0.85em; }
74
+ .level-epic > summary { background: var(--epic-bg); }
75
+ .level-feature > summary { background: var(--feature-bg); }
76
+ .level-story > summary { background: var(--story-bg); }
77
+ .level-task > summary { background: var(--task-bg); }
78
+ .level-quick > summary { background: var(--quick-bg); }
79
+ .nested { padding-left: 1.25rem; padding-bottom: 0.5rem; }
80
+ footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid var(--border); font-size: 0.8rem; color: var(--muted); }
81
+ @media print {
82
+ details { border: none; }
83
+ details[open] > summary { border-bottom: 1px solid var(--border); }
84
+ summary { pointer-events: none; }
85
+ summary::marker { display: none; }
86
+ .nested { padding-left: 1rem; }
87
+ }
88
+ </style>
89
+ </head>
90
+ <body>
91
+
92
+ <h1>{{projectName}}</h1>
93
+ <p class="subtitle">Planning Report &mdash; {{date}}</p>
94
+
95
+ <h2>Summary</h2>
96
+ <table>
97
+ <thead>
98
+ <tr><th>Type</th><th>Count</th></tr>
99
+ </thead>
100
+ <tbody>
101
+ <tr><td>Epics</td><td>{{counts.epics}}</td></tr>
102
+ <tr><td>Features</td><td>{{counts.features}}</td></tr>
103
+ <tr><td>Stories</td><td>{{counts.stories}}</td></tr>
104
+ <tr><td>Tasks</td><td>{{counts.tasks}}</td></tr>
105
+ <tr><td>Quick Tasks</td><td>{{counts.quick}}</td></tr>
106
+ </tbody>
107
+ </table>
108
+
109
+ {{#if epics.length}}
110
+ <h2>Epics</h2>
111
+
112
+ {{#each epics}}
113
+ <details class="level-epic" open>
114
+ <summary>
115
+ <h3>{{this.id}}: {{this.title}}</h3>
116
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
117
+ {{#if this.data.estimatedPoints}}<span class="estimate">{{this.data.estimatedPoints}} pts &middot; {{this.data.estimatedHours}}h</span>{{/if}}
118
+ </summary>
119
+ <div class="artifact-body">
120
+ {{{this.body}}}
121
+ </div>
122
+ {{#if this.features.length}}
123
+ <div class="nested">
124
+ {{#each this.features}}
125
+ <details class="level-feature">
126
+ <summary>
127
+ <h3>{{this.id}}: {{this.title}}</h3>
128
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
129
+ {{#if this.data.estimatedPoints}}<span class="estimate">{{this.data.estimatedPoints}} pts</span>{{/if}}
130
+ </summary>
131
+ <div class="artifact-body">
132
+ {{{this.body}}}
133
+ </div>
134
+ {{#if this.stories.length}}
135
+ <div class="nested">
136
+ {{#each this.stories}}
137
+ <details class="level-story">
138
+ <summary>
139
+ <h3>{{this.id}}: {{this.title}}</h3>
140
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
141
+ {{#if this.data.estimatedPoints}}<span class="estimate">{{this.data.estimatedPoints}} pts</span>{{/if}}
142
+ </summary>
143
+ <div class="artifact-body">
144
+ {{{this.body}}}
145
+ </div>
146
+ {{#if this.tasks.length}}
147
+ <div class="nested">
148
+ {{#each this.tasks}}
149
+ <details class="level-task">
150
+ <summary>
151
+ <h3>{{this.id}}: {{this.title}}</h3>
152
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
153
+ </summary>
154
+ <div class="artifact-body">
155
+ {{{this.body}}}
156
+ </div>
157
+ </details>
158
+ {{/each}}
159
+ </div>
160
+ {{/if}}
161
+ </details>
162
+ {{/each}}
163
+ </div>
164
+ {{/if}}
165
+ </details>
166
+ {{/each}}
167
+ </div>
168
+ {{/if}}
169
+ </details>
170
+ {{/each}}
171
+ {{/if}}
172
+
173
+ {{#if orphanFeatures.length}}
174
+ <h2>Unlinked Features</h2>
175
+ {{#each orphanFeatures}}
176
+ <details class="level-feature">
177
+ <summary>
178
+ <h3>{{this.id}}: {{this.title}}</h3>
179
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
180
+ </summary>
181
+ <div class="artifact-body">{{{this.body}}}</div>
182
+ </details>
183
+ {{/each}}
184
+ {{/if}}
185
+
186
+ {{#if orphanStories.length}}
187
+ <h2>Unlinked Stories</h2>
188
+ {{#each orphanStories}}
189
+ <details class="level-story">
190
+ <summary>
191
+ <h3>{{this.id}}: {{this.title}}</h3>
192
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
193
+ </summary>
194
+ <div class="artifact-body">{{{this.body}}}</div>
195
+ </details>
196
+ {{/each}}
197
+ {{/if}}
198
+
199
+ {{#if orphanTasks.length}}
200
+ <h2>Unlinked Tasks</h2>
201
+ {{#each orphanTasks}}
202
+ <details class="level-task">
203
+ <summary>
204
+ <h3>{{this.id}}: {{this.title}}</h3>
205
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
206
+ </summary>
207
+ <div class="artifact-body">{{{this.body}}}</div>
208
+ </details>
209
+ {{/each}}
210
+ {{/if}}
211
+
212
+ {{#if quickTasks.length}}
213
+ <h2>Quick Tasks</h2>
214
+ {{#each quickTasks}}
215
+ <details class="level-quick">
216
+ <summary>
217
+ <h3>{{this.id}}: {{this.title}}</h3>
218
+ <span class="badge {{#if (eq this.status 'done')}}badge-done{{else}}{{#if (eq this.status 'in-progress')}}badge-in-progress{{else}}badge-pending{{/if}}{{/if}}">{{this.status}}</span>
219
+ </summary>
220
+ <div class="artifact-body">{{{this.body}}}</div>
221
+ </details>
222
+ {{/each}}
223
+ {{/if}}
224
+
225
+ <footer>
226
+ Exported by <code>planr export</code> on {{date}}.
227
+ </footer>
228
+
229
+ </body>
230
+ </html>
@@ -0,0 +1,136 @@
1
+ # {{projectName}} — Planning Report
2
+
3
+ > Generated on {{date}}
4
+
5
+ ---
6
+
7
+ ## Summary
8
+
9
+ | Type | Count |
10
+ |------|-------|
11
+ | Epics | {{counts.epics}} |
12
+ | Features | {{counts.features}} |
13
+ | Stories | {{counts.stories}} |
14
+ | Tasks | {{counts.tasks}} |
15
+ | Quick Tasks | {{counts.quick}} |
16
+
17
+ ---
18
+
19
+ {{#if epics.length}}
20
+ ## Epics
21
+
22
+ {{#each epics}}
23
+ ### {{this.id}}: {{this.title}}
24
+
25
+ **Status:** {{this.status}}
26
+ {{#if this.data.estimatedPoints}}
27
+ **Estimate:** {{this.data.estimatedPoints}} pts ({{this.data.estimatedHours}}h, {{this.data.complexity}} complexity)
28
+ {{/if}}
29
+
30
+ {{{this.body}}}
31
+
32
+ {{#if this.features.length}}
33
+ {{#each this.features}}
34
+ #### {{this.id}}: {{this.title}}
35
+
36
+ **Status:** {{this.status}}
37
+ {{#if this.data.estimatedPoints}}
38
+ **Estimate:** {{this.data.estimatedPoints}} pts ({{this.data.estimatedHours}}h)
39
+ {{/if}}
40
+
41
+ {{{this.body}}}
42
+
43
+ {{#if this.stories.length}}
44
+ {{#each this.stories}}
45
+ ##### {{this.id}}: {{this.title}}
46
+
47
+ **Status:** {{this.status}}
48
+ {{#if this.data.estimatedPoints}}
49
+ **Estimate:** {{this.data.estimatedPoints}} pts ({{this.data.estimatedHours}}h)
50
+ {{/if}}
51
+
52
+ {{{this.body}}}
53
+
54
+ {{#if this.tasks.length}}
55
+ {{#each this.tasks}}
56
+ ###### {{this.id}}: {{this.title}}
57
+
58
+ **Status:** {{this.status}}
59
+ {{#if this.data.estimatedPoints}}
60
+ **Estimate:** {{this.data.estimatedPoints}} pts ({{this.data.estimatedHours}}h)
61
+ {{/if}}
62
+
63
+ {{{this.body}}}
64
+
65
+ {{/each}}
66
+ {{/if}}
67
+ {{/each}}
68
+ {{/if}}
69
+ {{/each}}
70
+ {{/if}}
71
+
72
+ ---
73
+
74
+ {{/each}}
75
+ {{/if}}
76
+ {{#if orphanFeatures.length}}
77
+ ## Unlinked Features
78
+
79
+ {{#each orphanFeatures}}
80
+ ### {{this.id}}: {{this.title}}
81
+
82
+ **Status:** {{this.status}}
83
+
84
+ {{{this.body}}}
85
+
86
+ {{#if this.stories.length}}
87
+ {{#each this.stories}}
88
+ #### {{this.id}}: {{this.title}}
89
+
90
+ **Status:** {{this.status}}
91
+
92
+ {{{this.body}}}
93
+
94
+ {{/each}}
95
+ {{/if}}
96
+ {{/each}}
97
+ {{/if}}
98
+ {{#if orphanStories.length}}
99
+ ## Unlinked Stories
100
+
101
+ {{#each orphanStories}}
102
+ ### {{this.id}}: {{this.title}}
103
+
104
+ **Status:** {{this.status}}
105
+
106
+ {{{this.body}}}
107
+
108
+ {{/each}}
109
+ {{/if}}
110
+ {{#if orphanTasks.length}}
111
+ ## Unlinked Tasks
112
+
113
+ {{#each orphanTasks}}
114
+ ### {{this.id}}: {{this.title}}
115
+
116
+ **Status:** {{this.status}}
117
+
118
+ {{{this.body}}}
119
+
120
+ {{/each}}
121
+ {{/if}}
122
+ {{#if quickTasks.length}}
123
+ ## Quick Tasks
124
+
125
+ {{#each quickTasks}}
126
+ ### {{this.id}}: {{this.title}}
127
+
128
+ **Status:** {{this.status}}
129
+
130
+ {{{this.body}}}
131
+
132
+ {{/each}}
133
+ {{/if}}
134
+ ---
135
+
136
+ _Exported by `planr export` on {{date}}._
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openplanr",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "CLI tool for agile planning with AI agents — generates epics, features, stories, tasks, and AI rule files for Cursor, Claude Code, and Codex",
5
5
  "type": "module",
6
6
  "main": "./dist/cli/index.js",