project-logbook 0.4.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -2
- package/dist/commands/build.js +75 -85
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.js +9 -3
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/list.js +14 -26
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +1 -3
- package/dist/commands/log.js +28 -4
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/new.d.ts +4 -1
- package/dist/commands/new.js +73 -52
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/preview.js +1 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/release.js +2 -1
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/start.d.ts +1 -1
- package/dist/commands/start.js +76 -16
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.js +10 -18
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/steer.js +1 -0
- package/dist/commands/steer.js.map +1 -0
- package/dist/commands/upgrade.js +1 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -0
- package/dist/lib/about-content.js +1 -0
- package/dist/lib/about-content.js.map +1 -0
- package/dist/lib/adr-renderer.d.ts +12 -0
- package/dist/lib/adr-renderer.js +53 -0
- package/dist/lib/adr-renderer.js.map +1 -0
- package/dist/lib/autolink.d.ts +15 -0
- package/dist/lib/autolink.js +39 -0
- package/dist/lib/autolink.js.map +1 -0
- package/dist/lib/build-helpers.d.ts +1 -1
- package/dist/lib/build-helpers.js +24 -7
- package/dist/lib/build-helpers.js.map +1 -0
- package/dist/lib/build-steps.d.ts +16 -2
- package/dist/lib/build-steps.js +124 -20
- package/dist/lib/build-steps.js.map +1 -0
- package/dist/lib/config.d.ts +22 -0
- package/dist/lib/config.js +29 -1
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/custom-card-renderer.d.ts +2 -0
- package/dist/lib/custom-card-renderer.js +58 -0
- package/dist/lib/custom-card-renderer.js.map +1 -0
- package/dist/lib/custom-types-builder.d.ts +4 -0
- package/dist/lib/custom-types-builder.js +37 -0
- package/dist/lib/custom-types-builder.js.map +1 -0
- package/dist/lib/entry-id.js +1 -0
- package/dist/lib/entry-id.js.map +1 -0
- package/dist/lib/entry-paths.js +1 -0
- package/dist/lib/entry-paths.js.map +1 -0
- package/dist/lib/git-helpers.d.ts +5 -16
- package/dist/lib/git-helpers.js +61 -78
- package/dist/lib/git-helpers.js.map +1 -0
- package/dist/lib/git-url-helpers.d.ts +16 -0
- package/dist/lib/git-url-helpers.js +76 -0
- package/dist/lib/git-url-helpers.js.map +1 -0
- package/dist/lib/hast-helpers.js +1 -0
- package/dist/lib/hast-helpers.js.map +1 -0
- package/dist/lib/html-attributes.js +1 -0
- package/dist/lib/html-attributes.js.map +1 -0
- package/dist/lib/html-escape.js +1 -0
- package/dist/lib/html-escape.js.map +1 -0
- package/dist/lib/image-dimension-parser.d.ts +11 -0
- package/dist/lib/image-dimension-parser.js +127 -0
- package/dist/lib/image-dimension-parser.js.map +1 -0
- package/dist/lib/image-helpers.d.ts +2 -0
- package/dist/lib/image-helpers.js +22 -30
- package/dist/lib/image-helpers.js.map +1 -0
- package/dist/lib/jira-helpers.js +1 -0
- package/dist/lib/jira-helpers.js.map +1 -0
- package/dist/lib/lint-runner.js +1 -0
- package/dist/lib/lint-runner.js.map +1 -0
- package/dist/lib/lint-types.js +1 -0
- package/dist/lib/lint-types.js.map +1 -0
- package/dist/lib/lockfile.js +1 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/logbook-client.js +1 -0
- package/dist/lib/logbook-client.js.map +1 -0
- package/dist/lib/markdown-processors.js +1 -0
- package/dist/lib/markdown-processors.js.map +1 -0
- package/dist/lib/migrations.js +1 -0
- package/dist/lib/migrations.js.map +1 -0
- package/dist/lib/package-version.js +1 -0
- package/dist/lib/package-version.js.map +1 -0
- package/dist/lib/post-template.d.ts +5 -0
- package/dist/lib/post-template.js +48 -0
- package/dist/lib/post-template.js.map +1 -0
- package/dist/lib/rss.js +1 -0
- package/dist/lib/rss.js.map +1 -0
- package/dist/lib/session.d.ts +2 -2
- package/dist/lib/session.js +75 -35
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/styles.js +1 -0
- package/dist/lib/styles.js.map +1 -0
- package/dist/lib/template-helpers.d.ts +6 -1
- package/dist/lib/template-helpers.js +81 -1
- package/dist/lib/template-helpers.js.map +1 -0
- package/dist/lib/template-types.d.ts +37 -5
- package/dist/lib/template-types.js +1 -0
- package/dist/lib/template-types.js.map +1 -0
- package/dist/lib/templates.d.ts +11 -8
- package/dist/lib/templates.js +59 -60
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/theme.js +1 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/url-helpers.js +1 -0
- package/dist/lib/url-helpers.js.map +1 -0
- package/dist/linters/diff-to-narrative.d.ts +2 -1
- package/dist/linters/diff-to-narrative.js +3 -10
- package/dist/linters/diff-to-narrative.js.map +1 -0
- package/dist/linters/frontmatter.js +1 -0
- package/dist/linters/frontmatter.js.map +1 -0
- package/dist/linters/index.js +1 -0
- package/dist/linters/index.js.map +1 -0
- package/dist/linters/jira-prefix.js +1 -0
- package/dist/linters/jira-prefix.js.map +1 -0
- package/dist/linters/links.js +26 -4
- package/dist/linters/links.js.map +1 -0
- package/dist/linters/lockfile.js +1 -0
- package/dist/linters/lockfile.js.map +1 -0
- package/dist/linters/placeholders.js +6 -4
- package/dist/linters/placeholders.js.map +1 -0
- package/dist/linters/project-integrity.js +1 -0
- package/dist/linters/project-integrity.js.map +1 -0
- package/dist/linters/readability.js +2 -3
- package/dist/linters/readability.js.map +1 -0
- package/dist/linters/technical-log.js +1 -0
- package/dist/linters/technical-log.js.map +1 -0
- package/dist/linters/workspaces.js +1 -0
- package/dist/linters/workspaces.js.map +1 -0
- package/dist/templates/CONTRIBUTING.md +10 -1
- package/dist/templates/index.md +2 -1
- package/dist/templates/log.md +1 -1
- package/dist/templates/styles.css +171 -32
- package/dist/utils/date.js +1 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +9 -0
- package/dist/utils/frontmatter.js +16 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs.d.ts +10 -0
- package/dist/utils/fs.js +112 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/id.js +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/log-timeline.d.ts +2 -1
- package/dist/utils/log-timeline.js +1 -0
- package/dist/utils/log-timeline.js.map +1 -0
- package/dist/utils/slug.js +1 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/string.js +1 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/utils/timeline-helpers.d.ts +2 -2
- package/dist/utils/timeline-helpers.js +5 -2
- package/dist/utils/timeline-helpers.js.map +1 -0
- package/dist/utils/validation.d.ts +5 -0
- package/dist/utils/validation.js +21 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +12 -6
- package/src/templates/CONTRIBUTING.md +10 -1
- package/src/templates/index.md +2 -1
- package/src/templates/log.md +1 -1
- package/src/templates/styles.css +171 -32
|
@@ -19,10 +19,16 @@ body {
|
|
|
19
19
|
header {
|
|
20
20
|
background: var(--card-bg);
|
|
21
21
|
border-bottom: 1px solid var(--border);
|
|
22
|
-
padding: 2rem
|
|
22
|
+
padding: 2rem 0 0 0;
|
|
23
23
|
text-align: center;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
.header-inner {
|
|
27
|
+
max-width: var(--max-width);
|
|
28
|
+
margin: 0 auto;
|
|
29
|
+
padding: 0 1.5rem;
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
header h1 {
|
|
27
33
|
margin: 0;
|
|
28
34
|
font-size: 2.25rem;
|
|
@@ -163,20 +169,52 @@ main {
|
|
|
163
169
|
transform: translateX(4px);
|
|
164
170
|
}
|
|
165
171
|
|
|
172
|
+
.teaser-image-right {
|
|
173
|
+
flex-shrink: 0;
|
|
174
|
+
max-width: 200px;
|
|
175
|
+
max-height: 120px;
|
|
176
|
+
display: flex;
|
|
177
|
+
align-items: center;
|
|
178
|
+
justify-content: center;
|
|
179
|
+
overflow: hidden;
|
|
180
|
+
border-radius: 4px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.teaser-image-right img {
|
|
184
|
+
max-width: 100%;
|
|
185
|
+
max-height: 100%;
|
|
186
|
+
object-fit: contain;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.teaser-image-bottom {
|
|
190
|
+
margin-top: 0.75rem;
|
|
191
|
+
display: flex;
|
|
192
|
+
justify-content: center;
|
|
193
|
+
align-items: center;
|
|
194
|
+
width: 100%;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.teaser-image-bottom img {
|
|
198
|
+
max-width: 100%;
|
|
199
|
+
max-height: 200px;
|
|
200
|
+
object-fit: contain;
|
|
201
|
+
border-radius: 4px;
|
|
202
|
+
}
|
|
203
|
+
|
|
166
204
|
/* Post Page */
|
|
167
205
|
.back-link {
|
|
168
206
|
display: inline-flex;
|
|
169
207
|
align-items: center;
|
|
170
208
|
font-size: 0.8125rem;
|
|
171
|
-
font-weight: 500;
|
|
172
209
|
color: var(--primary);
|
|
173
210
|
text-decoration: none;
|
|
174
|
-
transition:
|
|
175
|
-
color 0.2s,
|
|
176
|
-
background 0.2s;
|
|
177
211
|
background: var(--primary-soft);
|
|
178
212
|
padding: 0.5rem 1rem;
|
|
179
213
|
border-radius: 2rem;
|
|
214
|
+
font-weight: 500;
|
|
215
|
+
transition:
|
|
216
|
+
background 0.2s,
|
|
217
|
+
color 0.2s;
|
|
180
218
|
}
|
|
181
219
|
|
|
182
220
|
.back-link:hover {
|
|
@@ -184,23 +222,7 @@ main {
|
|
|
184
222
|
color: white;
|
|
185
223
|
}
|
|
186
224
|
|
|
187
|
-
/* Action
|
|
188
|
-
.action-bar {
|
|
189
|
-
display: flex;
|
|
190
|
-
align-items: center;
|
|
191
|
-
justify-content: space-between;
|
|
192
|
-
gap: 1rem;
|
|
193
|
-
margin-bottom: 3rem;
|
|
194
|
-
flex-wrap: wrap;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.action-tabs-wrapper {
|
|
198
|
-
display: flex;
|
|
199
|
-
align-items: center;
|
|
200
|
-
gap: 1rem;
|
|
201
|
-
flex-wrap: wrap;
|
|
202
|
-
}
|
|
203
|
-
|
|
225
|
+
/* Jira Action Button */
|
|
204
226
|
.jira-link-btn {
|
|
205
227
|
display: inline-flex;
|
|
206
228
|
align-items: center;
|
|
@@ -221,6 +243,48 @@ main {
|
|
|
221
243
|
color: white;
|
|
222
244
|
}
|
|
223
245
|
|
|
246
|
+
/* Header Navigation - Back button, tabs, and Jira link */
|
|
247
|
+
.header-nav {
|
|
248
|
+
display: grid;
|
|
249
|
+
grid-template-columns: 1fr auto 1fr;
|
|
250
|
+
align-items: center;
|
|
251
|
+
margin-top: 2rem;
|
|
252
|
+
gap: 1rem;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.header-nav-left {
|
|
256
|
+
text-align: left;
|
|
257
|
+
display: flex;
|
|
258
|
+
align-items: center;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.header-nav-right {
|
|
262
|
+
text-align: right;
|
|
263
|
+
display: flex;
|
|
264
|
+
align-items: center;
|
|
265
|
+
justify-content: flex-end;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.header-nav--center {
|
|
269
|
+
display: flex;
|
|
270
|
+
justify-content: center;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
@media (max-width: 640px) {
|
|
274
|
+
.header-nav {
|
|
275
|
+
display: flex;
|
|
276
|
+
flex-direction: column;
|
|
277
|
+
align-items: center;
|
|
278
|
+
gap: 1rem;
|
|
279
|
+
padding-bottom: 1rem;
|
|
280
|
+
}
|
|
281
|
+
.header-nav-left,
|
|
282
|
+
.header-nav-right {
|
|
283
|
+
text-align: center;
|
|
284
|
+
justify-content: center;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
224
288
|
/* Jira link in build-meta - inline style */
|
|
225
289
|
.build-meta .jira-link-btn {
|
|
226
290
|
margin-left: 0.5rem;
|
|
@@ -261,21 +325,25 @@ article h1 {
|
|
|
261
325
|
|
|
262
326
|
.tabs {
|
|
263
327
|
display: flex;
|
|
264
|
-
gap:
|
|
265
|
-
background:
|
|
266
|
-
padding: 0
|
|
267
|
-
border-radius: 0
|
|
328
|
+
gap: 1.5rem;
|
|
329
|
+
background: none;
|
|
330
|
+
padding: 0;
|
|
331
|
+
border-radius: 0;
|
|
268
332
|
width: fit-content;
|
|
333
|
+
margin-bottom: -1px;
|
|
334
|
+
position: relative;
|
|
335
|
+
z-index: 2;
|
|
269
336
|
}
|
|
270
337
|
|
|
271
338
|
.tab {
|
|
272
|
-
padding: 0.
|
|
273
|
-
font-size: 0.
|
|
339
|
+
padding: 0.75rem 0.25rem;
|
|
340
|
+
font-size: 0.875rem;
|
|
274
341
|
font-weight: 600;
|
|
275
342
|
color: var(--text-muted);
|
|
276
343
|
cursor: pointer;
|
|
277
|
-
border-
|
|
278
|
-
transition: all 0.2s
|
|
344
|
+
border-bottom: 2px solid transparent;
|
|
345
|
+
transition: all 0.2s ease;
|
|
346
|
+
border-radius: 0;
|
|
279
347
|
}
|
|
280
348
|
|
|
281
349
|
.tab:hover {
|
|
@@ -284,8 +352,9 @@ article h1 {
|
|
|
284
352
|
|
|
285
353
|
.tab.active {
|
|
286
354
|
color: var(--primary);
|
|
287
|
-
|
|
288
|
-
|
|
355
|
+
border-bottom-color: var(--primary);
|
|
356
|
+
background: none;
|
|
357
|
+
box-shadow: none;
|
|
289
358
|
}
|
|
290
359
|
|
|
291
360
|
/* Pagination Links */
|
|
@@ -504,6 +573,11 @@ footer .build-time a:hover {
|
|
|
504
573
|
color: #374151;
|
|
505
574
|
}
|
|
506
575
|
|
|
576
|
+
.tag-superseded {
|
|
577
|
+
background: #f3f4f6;
|
|
578
|
+
color: #4b5563;
|
|
579
|
+
}
|
|
580
|
+
|
|
507
581
|
/* Timeline card tag styling */
|
|
508
582
|
.timeline-card .tags-wrapper {
|
|
509
583
|
margin-top: 0.5rem;
|
|
@@ -878,3 +952,68 @@ article img[src$='.svg'] {
|
|
|
878
952
|
background-color: var(--primary-soft, #f0fdf4);
|
|
879
953
|
color: var(--text-main, #1e293b);
|
|
880
954
|
}
|
|
955
|
+
|
|
956
|
+
/* ADR Details and Cards */
|
|
957
|
+
.adr-detail-card {
|
|
958
|
+
max-width: var(--max-width);
|
|
959
|
+
margin: 0 auto;
|
|
960
|
+
background: var(--card-bg);
|
|
961
|
+
padding: 2rem;
|
|
962
|
+
border-radius: 0.5rem;
|
|
963
|
+
border: 1px solid var(--border);
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
.adr-detail-meta {
|
|
967
|
+
margin-bottom: 1.5rem;
|
|
968
|
+
font-size: 0.85rem;
|
|
969
|
+
color: var(--text-muted);
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
.adr-status-badge {
|
|
973
|
+
margin-right: 0.5rem;
|
|
974
|
+
text-transform: uppercase;
|
|
975
|
+
font-size: 0.7rem;
|
|
976
|
+
padding: 0.15rem 0.4rem;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
.adr-detail-title {
|
|
980
|
+
font-size: 2rem;
|
|
981
|
+
margin-top: 0;
|
|
982
|
+
margin-bottom: 1.5rem;
|
|
983
|
+
letter-spacing: -0.025em;
|
|
984
|
+
font-weight: 800;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
.adr-detail-body {
|
|
988
|
+
margin-top: 2rem;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.adr-detail-tags {
|
|
992
|
+
margin-top: 2rem;
|
|
993
|
+
border-top: 1px solid var(--border);
|
|
994
|
+
padding-top: 1.5rem;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
.adr-indicator-badge {
|
|
998
|
+
background: #e0f2fe !important;
|
|
999
|
+
color: #0369a1 !important;
|
|
1000
|
+
font-weight: bold;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
.timeline-card--adr {
|
|
1004
|
+
background: color-mix(in srgb, var(--primary) 4%, var(--card-bg, #ffffff)) !important;
|
|
1005
|
+
border: 1px solid color-mix(in srgb, var(--primary) 12%, var(--border, #e5e7eb)) !important;
|
|
1006
|
+
border-radius: 0.5rem;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
.timeline-card--adr .item-summary {
|
|
1010
|
+
font-style: italic;
|
|
1011
|
+
border-left: 2px solid var(--primary);
|
|
1012
|
+
padding-left: 0.75rem;
|
|
1013
|
+
margin-top: 0.5rem;
|
|
1014
|
+
color: var(--text-muted);
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
.timeline-card--adr .tags-wrapper {
|
|
1018
|
+
margin-top: 0.5rem;
|
|
1019
|
+
}
|
package/dist/utils/date.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,3 +24,12 @@ export declare function asString(value: unknown, fallback: string): string;
|
|
|
24
24
|
* @returns Array of strings, or empty array if input is not convertible
|
|
25
25
|
*/
|
|
26
26
|
export declare function asStringArray(value: unknown): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Strips the frontmatter block from a raw markdown string, returning only the body.
|
|
29
|
+
*/
|
|
30
|
+
export declare function stripFrontmatter(rawMarkdown: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Extracts the raw frontmatter block (including the enclosing `---` delimiters)
|
|
33
|
+
* from a raw markdown string. If no frontmatter block is found, returns the original string.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getRawFrontmatterBlock(rawMarkdown: string): string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import matter from 'gray-matter';
|
|
1
2
|
/**
|
|
2
3
|
* Normalizes a frontmatter field that may be a scalar string or a YAML list of strings.
|
|
3
4
|
* Used when displaying frontmatter fields like 'harness', 'llm', 'prompter' in the timeline.
|
|
@@ -35,3 +36,18 @@ export function asStringArray(value) {
|
|
|
35
36
|
}
|
|
36
37
|
return [];
|
|
37
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Strips the frontmatter block from a raw markdown string, returning only the body.
|
|
41
|
+
*/
|
|
42
|
+
export function stripFrontmatter(rawMarkdown) {
|
|
43
|
+
return matter(rawMarkdown).content;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Extracts the raw frontmatter block (including the enclosing `---` delimiters)
|
|
47
|
+
* from a raw markdown string. If no frontmatter block is found, returns the original string.
|
|
48
|
+
*/
|
|
49
|
+
export function getRawFrontmatterBlock(rawMarkdown) {
|
|
50
|
+
const match = rawMarkdown.match(/^---\r?\n[\s\S]*?\r?\n---/);
|
|
51
|
+
return match ? match[0] : rawMarkdown;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,SAAS,CAAC;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/E,OAAO,MAAM,IAAI,SAAS,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAYD,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,QAAiB;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACxC,CAAC"}
|
package/dist/utils/fs.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TimelineAdrItem } from '../lib/template-types.js';
|
|
1
2
|
export interface EntryMeta {
|
|
2
3
|
slug: string;
|
|
3
4
|
path: string;
|
|
@@ -24,3 +25,12 @@ export declare function readFileIfExists(filePath: string): Promise<string>;
|
|
|
24
25
|
* @returns The path if it exists, otherwise null
|
|
25
26
|
*/
|
|
26
27
|
export declare function pathExistsOrNull(filePath: string): Promise<string | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Extract the full content block immediately following the ## Decision heading in a markdown string,
|
|
30
|
+
* up until the next heading.
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractDecisionSection(content: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Reads the ADR directory and returns parsed TimelineAdrItem objects.
|
|
35
|
+
*/
|
|
36
|
+
export declare function getAdrEntries(adrDir: string, relativeAdrDir: string): Promise<TimelineAdrItem[]>;
|
package/dist/utils/fs.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import matter from 'gray-matter';
|
|
4
|
+
import { formatAbsoluteDate, getMonthYear, getSortTime } from './date.js';
|
|
4
5
|
/**
|
|
5
6
|
* Reads the logbook directory and returns metadata for all entries.
|
|
6
7
|
* Filters for directories and parses index.md if it exists.
|
|
@@ -59,3 +60,114 @@ export async function pathExistsOrNull(filePath) {
|
|
|
59
60
|
}
|
|
60
61
|
return null;
|
|
61
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Extract the full content block immediately following the ## Decision heading in a markdown string,
|
|
65
|
+
* up until the next heading.
|
|
66
|
+
*/
|
|
67
|
+
export function extractDecisionSection(content) {
|
|
68
|
+
const lines = content.split('\n');
|
|
69
|
+
let insideDecision = false;
|
|
70
|
+
const decisionLines = [];
|
|
71
|
+
for (const line of lines) {
|
|
72
|
+
const trimmed = line.trim();
|
|
73
|
+
// Flexible match for Decision heading
|
|
74
|
+
if (/^#+\s+(?:\d+\.\s+)?Decision(?:\s+.*)?$/i.test(trimmed)) {
|
|
75
|
+
insideDecision = true;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// If we are inside the Decision section and hit another heading, stop
|
|
79
|
+
if (insideDecision && /^#+\s+/.test(trimmed)) {
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
if (insideDecision) {
|
|
83
|
+
decisionLines.push(line);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const rawDecision = decisionLines.join('\n').trim();
|
|
87
|
+
if (!rawDecision)
|
|
88
|
+
return 'No decision specified.';
|
|
89
|
+
return rawDecision;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Reads the ADR directory and returns parsed TimelineAdrItem objects.
|
|
93
|
+
*/
|
|
94
|
+
export async function getAdrEntries(adrDir, relativeAdrDir) {
|
|
95
|
+
if (!(await fs.pathExists(adrDir))) {
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
const files = await fs.readdir(adrDir);
|
|
99
|
+
const results = [];
|
|
100
|
+
for (const file of files) {
|
|
101
|
+
if (!file.endsWith('.md'))
|
|
102
|
+
continue;
|
|
103
|
+
const filePath = join(adrDir, file);
|
|
104
|
+
if ((await fs.stat(filePath)).isDirectory())
|
|
105
|
+
continue;
|
|
106
|
+
const raw = await fs.readFile(filePath, 'utf8');
|
|
107
|
+
const { data, content } = matter(raw);
|
|
108
|
+
// Skip if it doesn't have an ID (not a valid/standard ADR for our parser)
|
|
109
|
+
if (data.id === undefined)
|
|
110
|
+
continue;
|
|
111
|
+
const id = Number(data.id);
|
|
112
|
+
const title = String(data.title || file.replace(/\.md$/i, ''));
|
|
113
|
+
const status = String(data.status || 'proposed');
|
|
114
|
+
// Parse date
|
|
115
|
+
let dateStr = '';
|
|
116
|
+
const stat = await fs.stat(filePath);
|
|
117
|
+
const mtime = stat.mtime;
|
|
118
|
+
let parsedDate = null;
|
|
119
|
+
if (data.date instanceof Date) {
|
|
120
|
+
parsedDate = data.date;
|
|
121
|
+
}
|
|
122
|
+
else if (typeof data.date === 'string' && !isNaN(Date.parse(data.date))) {
|
|
123
|
+
parsedDate = new Date(data.date);
|
|
124
|
+
}
|
|
125
|
+
if (parsedDate) {
|
|
126
|
+
// Check if the date is date-only (parsed at UTC midnight: 00:00:00.000)
|
|
127
|
+
const isDateOnly = parsedDate.getUTCHours() === 0 &&
|
|
128
|
+
parsedDate.getUTCMinutes() === 0 &&
|
|
129
|
+
parsedDate.getUTCSeconds() === 0 &&
|
|
130
|
+
parsedDate.getUTCMilliseconds() === 0;
|
|
131
|
+
if (isDateOnly) {
|
|
132
|
+
// Extract UTC calendar components to keep the user's chosen day absolute
|
|
133
|
+
const year = parsedDate.getUTCFullYear();
|
|
134
|
+
const month = parsedDate.getUTCMonth();
|
|
135
|
+
const day = parsedDate.getUTCDate();
|
|
136
|
+
// Augment with the local sub-day components from file modification stats (mtime)
|
|
137
|
+
const hours = mtime.getHours();
|
|
138
|
+
const minutes = mtime.getMinutes();
|
|
139
|
+
const seconds = mtime.getSeconds();
|
|
140
|
+
const ms = mtime.getMilliseconds();
|
|
141
|
+
parsedDate = new Date(year, month, day, hours, minutes, seconds, ms);
|
|
142
|
+
}
|
|
143
|
+
dateStr = parsedDate.toISOString();
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Fallback to file creation/modification time
|
|
147
|
+
dateStr = mtime.toISOString();
|
|
148
|
+
}
|
|
149
|
+
const author = String(data.author || 'Unknown');
|
|
150
|
+
const superseded_by = data.superseded_by !== undefined && data.superseded_by !== null ? Number(data.superseded_by) : null;
|
|
151
|
+
const tags = Array.isArray(data.tags) ? data.tags.map(String) : [];
|
|
152
|
+
const decision = extractDecisionSection(content);
|
|
153
|
+
results.push({
|
|
154
|
+
kind: 'adr',
|
|
155
|
+
id,
|
|
156
|
+
filepath: join(relativeAdrDir, file),
|
|
157
|
+
title,
|
|
158
|
+
status,
|
|
159
|
+
date: dateStr,
|
|
160
|
+
displayDate: formatAbsoluteDate(dateStr),
|
|
161
|
+
author,
|
|
162
|
+
superseded_by,
|
|
163
|
+
tags,
|
|
164
|
+
decision,
|
|
165
|
+
monthGroup: getMonthYear(dateStr),
|
|
166
|
+
sortTime: getSortTime(dateStr),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// Sort ADRs descending by ID
|
|
170
|
+
results.sort((a, b) => b.id - a.id);
|
|
171
|
+
return results;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/id.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACzD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAC,UAAkB,EAAE,MAAc;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;IAEnE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAC3E,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;gBACpB,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC;IACjC,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,UAAU,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -12,7 +12,7 @@ export interface LogEntry {
|
|
|
12
12
|
/**
|
|
13
13
|
* Timeline item for rendering - either a log entry or a gap indicator.
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
interface TimelineItem {
|
|
16
16
|
type: 'entry' | 'gap';
|
|
17
17
|
timestamp?: Date;
|
|
18
18
|
isoTimestamp?: string;
|
|
@@ -67,3 +67,4 @@ export declare function getLastLogEntry(logMarkdown: string): LogEntry | null;
|
|
|
67
67
|
* @returns HTML string (timeline if successful, plain markdown otherwise)
|
|
68
68
|
*/
|
|
69
69
|
export declare function transformLogToTimeline(logMarkdown: string): Promise<string>;
|
|
70
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-timeline.js","sourceRoot":"","sources":["../../src/utils/log-timeline.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/slug.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,yCAAyC;SAChE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB;AACvD,CAAC"}
|
package/dist/utils/string.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TimelineEntry, TimelineCommitItem, TimelineTagItem, TimelineGroup } from '../lib/template-types.js';
|
|
1
|
+
import { TimelineEntry, TimelineCommitItem, TimelineTagItem, TimelineAdrItem, TimelineGroup } from '../lib/template-types.js';
|
|
2
2
|
export declare function groupTimelineItems(entries: (TimelineEntry & {
|
|
3
3
|
monthGroup: string;
|
|
4
|
-
})[], commits: TimelineCommitItem[], tags: TimelineTagItem[]): TimelineGroup[];
|
|
4
|
+
})[], commits: TimelineCommitItem[], tags: TimelineTagItem[], adrs?: TimelineAdrItem[]): TimelineGroup[];
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
export function groupTimelineItems(entries, commits, tags) {
|
|
1
|
+
export function groupTimelineItems(entries, commits, tags, adrs = []) {
|
|
2
2
|
const toMs = (item) => {
|
|
3
3
|
if (item.kind === 'entry')
|
|
4
4
|
return item.dateEnd ? new Date(item.dateEnd).getTime() : new Date(item.dateStart).getTime();
|
|
5
|
+
if (item.kind === 'adr')
|
|
6
|
+
return new Date(item.date).getTime();
|
|
5
7
|
return new Date(item.timestamp).getTime();
|
|
6
8
|
};
|
|
7
|
-
const all = [...entries, ...commits, ...tags];
|
|
9
|
+
const all = [...entries, ...commits, ...tags, ...adrs];
|
|
8
10
|
all.sort((a, b) => toMs(b) - toMs(a));
|
|
9
11
|
const groups = [];
|
|
10
12
|
for (const item of all) {
|
|
@@ -17,3 +19,4 @@ export function groupTimelineItems(entries, commits, tags) {
|
|
|
17
19
|
}
|
|
18
20
|
return groups;
|
|
19
21
|
}
|
|
22
|
+
//# sourceMappingURL=timeline-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-helpers.js","sourceRoot":"","sources":["../../src/utils/timeline-helpers.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,kBAAkB,CAChC,OAAmD,EACnD,OAA6B,EAC7B,IAAuB,EACvB,OAA0B,EAAE;IAG5B,MAAM,IAAI,GAAG,CAAC,IAAa,EAAU,EAAE;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9F,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9D,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,GAAG,GAAc,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAClE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a logbook entry contains bracket-style template placeholders, TODOs, or fallback prompt text.
|
|
3
|
+
*/
|
|
4
|
+
export function hasUnfilledPlaceholders(entry) {
|
|
5
|
+
// Check frontmatter field values for bracket-style unfilled placeholders
|
|
6
|
+
const dataValues = Object.values(entry.data)
|
|
7
|
+
.filter((v) => typeof v === 'string')
|
|
8
|
+
.join('\n');
|
|
9
|
+
const frontmatterHasPlaceholders = dataValues.includes('[DATE_END]') ||
|
|
10
|
+
dataValues.includes('[DATE_START]') ||
|
|
11
|
+
dataValues.includes('[WRITE_SUMMARY_HERE]') ||
|
|
12
|
+
dataValues.includes('[PROMPTER]') ||
|
|
13
|
+
dataValues.includes('[HARNESS]') ||
|
|
14
|
+
dataValues.includes('[LLM]');
|
|
15
|
+
// Check body content for unfilled template hints (strip fenced and inline code blocks to avoid false positives)
|
|
16
|
+
const contentWithoutCode = entry.content.replace(/```[\s\S]*?```/g, '').replace(/`[^`]*`/g, '');
|
|
17
|
+
const bodyHasPlaceholders = contentWithoutCode.includes('TODO:') ||
|
|
18
|
+
entry.content.includes('Write a polished, highly readable "short story" of the change here.');
|
|
19
|
+
return frontmatterHasPlaceholders || bodyHasPlaceholders;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAgB;IACtD,yEAAyE;IACzE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;SACjD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,0BAA0B,GAC9B,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QACjC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnC,UAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC3C,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QACjC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;QAChC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE/B,gHAAgH;IAChH,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,mBAAmB,GACvB,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,qEAAqE,CAAC,CAAC;IAEhG,OAAO,0BAA0B,IAAI,mBAAmB,CAAC;AAC3D,CAAC"}
|