@davidorex/pi-context 0.30.0 → 0.32.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/CHANGELOG.md +127 -0
- package/README.md +27 -11
- package/dist/block-api.d.ts +13 -0
- package/dist/block-api.d.ts.map +1 -1
- package/dist/block-api.js +28 -3
- package/dist/block-api.js.map +1 -1
- package/dist/content-hash.d.ts +13 -0
- package/dist/content-hash.d.ts.map +1 -1
- package/dist/content-hash.js +16 -0
- package/dist/content-hash.js.map +1 -1
- package/dist/context-dir.d.ts +12 -0
- package/dist/context-dir.d.ts.map +1 -1
- package/dist/context-dir.js +14 -0
- package/dist/context-dir.js.map +1 -1
- package/dist/context-sdk.d.ts +71 -33
- package/dist/context-sdk.d.ts.map +1 -1
- package/dist/context-sdk.js +547 -149
- package/dist/context-sdk.js.map +1 -1
- package/dist/context.d.ts +213 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +119 -5
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts +595 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2225 -55
- package/dist/index.js.map +1 -1
- package/dist/lens-view.d.ts +0 -5
- package/dist/lens-view.d.ts.map +1 -1
- package/dist/lens-view.js +43 -1
- package/dist/lens-view.js.map +1 -1
- package/dist/migration-registry-loader.d.ts +36 -12
- package/dist/migration-registry-loader.d.ts.map +1 -1
- package/dist/migration-registry-loader.js +79 -17
- package/dist/migration-registry-loader.js.map +1 -1
- package/dist/migrations-store.d.ts +45 -18
- package/dist/migrations-store.d.ts.map +1 -1
- package/dist/migrations-store.js +56 -22
- package/dist/migrations-store.js.map +1 -1
- package/dist/ops-registry.d.ts +16 -0
- package/dist/ops-registry.d.ts.map +1 -1
- package/dist/ops-registry.js +352 -117
- package/dist/ops-registry.js.map +1 -1
- package/dist/pending-blocked-store.d.ts +83 -0
- package/dist/pending-blocked-store.d.ts.map +1 -0
- package/dist/pending-blocked-store.js +93 -0
- package/dist/pending-blocked-store.js.map +1 -0
- package/dist/promote-item.d.ts.map +1 -1
- package/dist/promote-item.js +41 -12
- package/dist/promote-item.js.map +1 -1
- package/dist/roadmap-plan.d.ts +121 -99
- package/dist/roadmap-plan.d.ts.map +1 -1
- package/dist/roadmap-plan.js +281 -345
- package/dist/roadmap-plan.js.map +1 -1
- package/dist/schema-merge.d.ts +26 -0
- package/dist/schema-merge.d.ts.map +1 -0
- package/dist/schema-merge.js +176 -0
- package/dist/schema-merge.js.map +1 -0
- package/dist/status-vocab.d.ts +12 -2
- package/dist/status-vocab.d.ts.map +1 -1
- package/dist/status-vocab.js +14 -1
- package/dist/status-vocab.js.map +1 -1
- package/package.json +2 -1
- package/samples/blocks/milestone.json +3 -0
- package/samples/blocks/session-notes.json +1 -0
- package/samples/conception.json +358 -15
- package/samples/migrations.json +8 -0
- package/samples/schemas/context-contracts.schema.json +4 -0
- package/samples/schemas/conventions.schema.json +4 -0
- package/samples/schemas/decisions.schema.json +4 -0
- package/samples/schemas/features.schema.json +4 -0
- package/samples/schemas/framework-gaps.schema.json +5 -1
- package/samples/schemas/issues.schema.json +30 -2
- package/samples/schemas/layer-plans.schema.json +6 -2
- package/samples/schemas/milestone.schema.json +79 -0
- package/samples/schemas/phase.schema.json +4 -0
- package/samples/schemas/rationale.schema.json +4 -0
- package/samples/schemas/requirements.schema.json +4 -0
- package/samples/schemas/research.schema.json +5 -1
- package/samples/schemas/session-notes.schema.json +89 -0
- package/samples/schemas/spec-reviews.schema.json +4 -0
- package/samples/schemas/story.schema.json +8 -0
- package/samples/schemas/tasks.schema.json +4 -0
- package/samples/schemas/verification.schema.json +4 -0
- package/samples/schemas/work-orders.schema.json +6 -2
- package/schemas/config.schema.json +101 -3
- package/schemas/migrations.schema.json +25 -0
- package/schemas/pending-blocked.schema.json +190 -0
- package/skill-narrative.md +14 -10
- package/skills/pi-context/SKILL.md +127 -49
- package/skills/pi-context/references/bundled-resources.md +7 -2
package/dist/roadmap-plan.d.ts
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Roadmap substrate primitives — the roadmap as a DERIVED view over the
|
|
3
|
+
* milestone block + authored relations (FGAP-042). There is no roadmap block,
|
|
4
|
+
* no roadmap.json, and no ROADMAP- id: the roadmap IS the milestone-block
|
|
5
|
+
* items ordered by the `milestone_precedes_milestone` closure-table edges,
|
|
6
|
+
* with per-milestone membership resolved through `phase_positioned_in_milestone`
|
|
7
|
+
* and per-phase membership through `task_positioned_in_phase`.
|
|
8
|
+
*
|
|
9
|
+
* Module landing pattern follows lens-view.ts: pure functions take cwd,
|
|
10
|
+
* return structured results or { error } records. Subcommand handlers and
|
|
11
|
+
* tool execute() shells in index.ts are thin wrappers that route results to
|
|
12
|
+
* ctx.ui.notify, pi.sendMessage, or AgentToolResult.
|
|
13
|
+
*
|
|
14
|
+
* Status vocabulary normalization: STATUS_VOCABULARY_DEFAULTS maps each
|
|
15
|
+
* schema's native status enum (issues uses open|resolved|deferred;
|
|
16
|
+
* decisions uses open|enacted|superseded; tasks uses
|
|
17
|
+
* todo|in_progress|completed; etc.) to a normalized StatusBucket that
|
|
18
|
+
* cross-block aggregation can compare against. Per the pi-context
|
|
19
|
+
* divergence from main, the active vocabulary is resolved via
|
|
20
|
+
* `resolveStatusVocabulary(cwd)` which merges
|
|
21
|
+
* `config.status_buckets` over the defaults — users override per-project
|
|
22
|
+
* by editing config.json (FGAP-013 closed).
|
|
23
|
+
*
|
|
24
|
+
* Diagnostic display strings: validateRoadmap() emits issues whose
|
|
25
|
+
* `code` field is an opaque slug; the human-readable message is
|
|
26
|
+
* resolved via `diagMessage(cwd, code, fallback)` which checks
|
|
27
|
+
* `config.display_strings[code]` and falls back to embedded English.
|
|
28
|
+
* This is the pi-context divergence: main hardcodes English; pi-context
|
|
29
|
+
* routes the message through config so per-project / per-locale
|
|
30
|
+
* overrides are config-driven.
|
|
31
|
+
*/
|
|
1
32
|
import { type Edge, type ItemRecord, type StatusBucket } from "./context.js";
|
|
2
|
-
import { type LoadedLensView } from "./lens-view.js";
|
|
3
33
|
import { resolveStatusVocabulary, STATUS_VOCABULARY_DEFAULTS } from "./status-vocab.js";
|
|
4
34
|
import { topoSort } from "./topo.js";
|
|
5
35
|
export type { StatusBucket } from "./status-vocab.js";
|
|
@@ -43,144 +73,136 @@ export declare function rollupPhaseStatus(items: ItemRecord[], vocabulary?: Reco
|
|
|
43
73
|
* cycles — array of cycle paths, each as a string[] starting and
|
|
44
74
|
* ending with the same id. Empty when graph is acyclic.
|
|
45
75
|
*
|
|
46
|
-
* Caller chooses whether cycles are fatal:
|
|
47
|
-
*
|
|
76
|
+
* Caller chooses whether cycles are fatal: validateRoadmap surfaces
|
|
77
|
+
* roadmap_milestone_cycle; loadRoadmap returns the cycles[] alongside a
|
|
48
78
|
* partial order so renderRoadmap can show what it could and what
|
|
49
79
|
* couldn't be ordered.
|
|
50
80
|
*/
|
|
51
81
|
export { topoSort };
|
|
52
82
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
83
|
+
* One task row in a phase's membership — the parent of a
|
|
84
|
+
* task_positioned_in_phase edge, resolved against the substrate index.
|
|
85
|
+
* `title` is populated only when the resolved item carries a string `title`
|
|
86
|
+
* field (the stock tasks schema declares `description`, not `title`, so it
|
|
87
|
+
* stays undefined there and renderers fall back to the id).
|
|
55
88
|
*/
|
|
56
|
-
export interface
|
|
89
|
+
export interface TaskRow {
|
|
57
90
|
id: string;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
lens: string;
|
|
61
|
-
milestone?: string;
|
|
62
|
-
exit_criteria?: string[];
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Inline milestone declared by a roadmap. evidence_block + evidence_query
|
|
66
|
-
* together drive milestoneSatisfied evaluation: milestone is satisfied
|
|
67
|
-
* when at least one item in evidence_block matches every key/value in
|
|
68
|
-
* evidence_query by ===.
|
|
69
|
-
*/
|
|
70
|
-
export interface MilestoneSpec {
|
|
71
|
-
id: string;
|
|
72
|
-
name: string;
|
|
73
|
-
criterion?: string;
|
|
74
|
-
evidence_block?: string;
|
|
75
|
-
evidence_query?: Record<string, unknown>;
|
|
91
|
+
status?: string;
|
|
92
|
+
title?: string;
|
|
76
93
|
}
|
|
77
94
|
/**
|
|
78
|
-
*
|
|
95
|
+
* One member phase of a milestone: the parent of a
|
|
96
|
+
* phase_positioned_in_milestone edge, with its tasks (parents of
|
|
97
|
+
* task_positioned_in_phase edges targeting it) and a status rollup over those
|
|
98
|
+
* task items.
|
|
79
99
|
*/
|
|
80
|
-
export interface
|
|
100
|
+
export interface PhaseRollupView {
|
|
81
101
|
id: string;
|
|
82
|
-
|
|
83
|
-
description?: string;
|
|
102
|
+
name?: string;
|
|
84
103
|
status?: string;
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
tasks: TaskRow[];
|
|
105
|
+
rollup: PhaseStatus;
|
|
87
106
|
}
|
|
88
107
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
108
|
+
* One milestone in the derived roadmap. `status` + `phaseCount` come from
|
|
109
|
+
* currentState's config-declared milestone rollup (reached/planned); `rollup`
|
|
110
|
+
* aggregates ALL member phases' task items in a single rollupPhaseStatus pass.
|
|
91
111
|
*/
|
|
92
|
-
export interface
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
milestoneSatisfied?: boolean;
|
|
112
|
+
export interface MilestoneView {
|
|
113
|
+
id: string;
|
|
114
|
+
name?: string;
|
|
115
|
+
status: string;
|
|
116
|
+
phaseCount: number;
|
|
117
|
+
phases: PhaseRollupView[];
|
|
118
|
+
rollup: PhaseStatus;
|
|
100
119
|
}
|
|
101
120
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* cycles are present (cycle-participating
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
121
|
+
* The materialized derived roadmap. `milestones` carries MilestoneView entries
|
|
122
|
+
* in stable block scan order. `order` is the topo order over the
|
|
123
|
+
* milestone_precedes_milestone edges scoped to milestone-block items — partial
|
|
124
|
+
* when cycles are present (cycle-participating milestones are absent from
|
|
125
|
+
* `order` and surfaced separately in `cycles`). `edges` is the authoritative
|
|
126
|
+
* scoped subset of authored precedes edges and is the renderer's sole source
|
|
127
|
+
* for per-milestone adjacency lines (the renderer never infers adjacency from
|
|
128
|
+
* `order` consecutive pairs — that pattern fabricates sibling edges in
|
|
129
|
+
* branching DAGs and is forbidden).
|
|
111
130
|
*/
|
|
112
|
-
export interface
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
phaseOrder: string[];
|
|
131
|
+
export interface MilestoneRoadmapView {
|
|
132
|
+
milestones: MilestoneView[];
|
|
133
|
+
order: string[];
|
|
116
134
|
cycles: string[][];
|
|
117
135
|
edges: Edge[];
|
|
118
136
|
}
|
|
119
137
|
export interface RoadmapValidationIssue {
|
|
120
|
-
code: "
|
|
138
|
+
code: "roadmap_precedes_endpoint_missing" | "roadmap_milestone_cycle" | "roadmap_milestone_missing" | "roadmap_status_unknown_value" | "roadmap_milestone_isolated";
|
|
121
139
|
message: string;
|
|
122
|
-
|
|
140
|
+
milestone_id?: string;
|
|
123
141
|
phase_id?: string;
|
|
124
142
|
cycle?: string[];
|
|
125
143
|
}
|
|
126
144
|
/**
|
|
127
|
-
* Load
|
|
128
|
-
* structured { error } when config
|
|
145
|
+
* Load the derived roadmap. Returns the materialized MilestoneRoadmapView or
|
|
146
|
+
* a structured { error } when no config exists. Zero milestone-block items is
|
|
147
|
+
* a VALID empty view (not an error) — the roadmap is opt-in by authoring
|
|
148
|
+
* milestones + edges.
|
|
129
149
|
*
|
|
130
150
|
* Algorithm:
|
|
131
|
-
* 1. Load context; bail when no
|
|
132
|
-
* 2.
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
151
|
+
* 1. Load context; bail when no <substrate-dir>/config.json.
|
|
152
|
+
* 2. Index the substrate; milestones = index items whose block is
|
|
153
|
+
* "milestone" (stable block scan order).
|
|
154
|
+
* 3. Scope the milestone_precedes_milestone edges to those whose BOTH
|
|
155
|
+
* endpoints are milestone ids; topoSort (preds = parents of a
|
|
156
|
+
* milestone's incoming precedes edges) derives order + cycles.
|
|
157
|
+
* 4. Per milestone: status + phaseCount from currentState(cwd).milestones
|
|
158
|
+
* (the config-declared derived rollup; a milestone absent from that list
|
|
159
|
+
* reports the rollup pattern's incomplete default "planned" with
|
|
160
|
+
* phaseCount 0); phases = parents of phase_positioned_in_milestone edges
|
|
161
|
+
* (child = the milestone), each with tasks = parents of
|
|
162
|
+
* task_positioned_in_phase edges (child = the phase) and a
|
|
163
|
+
* rollupPhaseStatus over the resolved task items; the milestone-level
|
|
164
|
+
* rollup aggregates all member phases' task items in one call.
|
|
140
165
|
*
|
|
141
166
|
* The returned `edges` field is the authoritative scoped subset that the
|
|
142
|
-
* renderer consumes for per-
|
|
167
|
+
* renderer consumes for per-milestone adjacency lines.
|
|
143
168
|
*/
|
|
144
|
-
export declare function loadRoadmap(cwd: string
|
|
169
|
+
export declare function loadRoadmap(cwd: string): MilestoneRoadmapView | {
|
|
145
170
|
error: string;
|
|
146
171
|
};
|
|
147
172
|
/**
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
|
|
152
|
-
export declare function listRoadmaps(cwd: string): Array<{
|
|
153
|
-
id: string;
|
|
154
|
-
title: string;
|
|
155
|
-
status?: string;
|
|
156
|
-
phaseCount: number;
|
|
157
|
-
}>;
|
|
158
|
-
/**
|
|
159
|
-
* Validate every roadmap × phase × milestone. Codes are opaque slugs;
|
|
160
|
-
* display strings resolve via diagMessage (config.display_strings →
|
|
161
|
-
* embedded English fallback). The pi-context lens-validator dispatch
|
|
162
|
-
* (registered at module bottom) maps these to ContextValidationIssue-
|
|
163
|
-
* compatible records and merges them into validateContext's output.
|
|
173
|
+
* Validate the derived roadmap. Codes are opaque slugs; display strings
|
|
174
|
+
* resolve via diagMessage (config.display_strings → embedded English
|
|
175
|
+
* fallback). The pi-context lens-validator dispatch (registered at module
|
|
176
|
+
* bottom) contributes the error-code issues into validateContext's output.
|
|
164
177
|
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
178
|
+
* Codes:
|
|
179
|
+
* roadmap_precedes_endpoint_missing (error) — a milestone_precedes_milestone
|
|
180
|
+
* edge endpoint that is not a milestone-block item (absent OR wrong kind).
|
|
181
|
+
* roadmap_milestone_cycle (error) — a cycle in the precedes graph.
|
|
182
|
+
* roadmap_milestone_missing (error) — a phase_positioned_in_milestone edge
|
|
183
|
+
* whose child is not a known milestone.
|
|
184
|
+
* roadmap_status_unknown_value (warning) — a member phase whose task rollup
|
|
185
|
+
* buckets unknown with total > 0 (items lack a recognised status value).
|
|
186
|
+
* roadmap_milestone_isolated (info) — a milestone with zero precedes edges
|
|
187
|
+
* while at least one precedes edge exists elsewhere. Info NEVER flips
|
|
188
|
+
* status: status = invalid iff any error-code issue; warnings iff any
|
|
189
|
+
* warning-code issue; else clean.
|
|
190
|
+
*
|
|
191
|
+
* No config → { status: "clean", issues: [] } (nothing to validate).
|
|
167
192
|
*/
|
|
168
|
-
export declare function
|
|
193
|
+
export declare function validateRoadmap(cwd: string): {
|
|
169
194
|
status: "clean" | "warnings" | "invalid";
|
|
170
195
|
issues: RoadmapValidationIssue[];
|
|
171
196
|
};
|
|
172
197
|
/**
|
|
173
|
-
* Render a loaded
|
|
174
|
-
* diagrams, NO graph syntax. Per-
|
|
175
|
-
* are sourced strictly from view.edges (sorted alphabetically; "—" when
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
* naming consulted only for lens-target display labels; phase / roadmap
|
|
183
|
-
* ids render as-is.
|
|
198
|
+
* Render a loaded MilestoneRoadmapView as pure-textual markdown — NO mermaid,
|
|
199
|
+
* NO diagrams, NO graph syntax. Per-milestone **Preceded by:** adjacency lines
|
|
200
|
+
* are sourced strictly from view.edges (sorted alphabetically; "—" when the
|
|
201
|
+
* milestone has no incoming precedes edges). Cycle-participating milestones
|
|
202
|
+
* are surfaced under a separate "**Unordered (cycle participants):**" heading
|
|
203
|
+
* and a "**Cycles detected:**" line. The renderer never infers adjacency from
|
|
204
|
+
* `order` consecutive pairs (that pattern fabricates sibling edges in
|
|
205
|
+
* branching DAGs).
|
|
184
206
|
*/
|
|
185
|
-
export declare function renderRoadmap(view:
|
|
207
|
+
export declare function renderRoadmap(view: MilestoneRoadmapView): string;
|
|
186
208
|
//# sourceMappingURL=roadmap-plan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap-plan.d.ts","sourceRoot":"","sources":["../src/roadmap-plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"roadmap-plan.d.ts","sourceRoot":"","sources":["../src/roadmap-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAGN,KAAK,IAAI,EAET,KAAK,UAAU,EAGf,KAAK,YAAY,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAQrC,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,WAAW,CA0B7G;AAaD;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAAE,QAAQ,EAAE,CAAC;AAmCpB;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EACD,mCAAmC,GACnC,yBAAyB,GACzB,2BAA2B,GAC3B,8BAA8B,GAC9B,4BAA4B,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAYD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CA0FjF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;IAC7C,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACzC,MAAM,EAAE,sBAAsB,EAAE,CAAC;CACjC,CAgHA;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAuFhE"}
|