@cratylus/canon 0.1.3 → 0.3.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 (61) hide show
  1. package/dist/agents/architect.d.ts +2 -0
  2. package/dist/agents/architect.js +113 -0
  3. package/dist/agents/architect.js.map +1 -0
  4. package/dist/agents/implementer.d.ts +2 -0
  5. package/dist/agents/implementer.js +74 -0
  6. package/dist/agents/implementer.js.map +1 -0
  7. package/dist/agents/kino.d.ts +2 -0
  8. package/dist/agents/kino.js +120 -0
  9. package/dist/agents/kino.js.map +1 -0
  10. package/dist/agents/mav.js +15 -4
  11. package/dist/agents/mav.js.map +1 -1
  12. package/dist/agents/nico.js +2 -2
  13. package/dist/agents/nico.js.map +1 -1
  14. package/dist/agents/planner.d.ts +2 -0
  15. package/dist/agents/planner.js +85 -0
  16. package/dist/agents/planner.js.map +1 -0
  17. package/dist/dimensions/autonomy/{check-in.d.ts → handoff.d.ts} +1 -1
  18. package/dist/dimensions/autonomy/{check-in.js → handoff.js} +16 -4
  19. package/dist/dimensions/autonomy/handoff.js.map +1 -0
  20. package/dist/dimensions/autonomy/human-on-the-loop.js +1 -1
  21. package/dist/dimensions/autonomy/human-on-the-loop.js.map +1 -1
  22. package/dist/dimensions/capabilities/film-production.d.ts +2 -0
  23. package/dist/dimensions/capabilities/film-production.js +8 -0
  24. package/dist/dimensions/capabilities/film-production.js.map +1 -0
  25. package/dist/dimensions/capabilities/generative-video.d.ts +2 -0
  26. package/dist/dimensions/capabilities/generative-video.js +8 -0
  27. package/dist/dimensions/capabilities/generative-video.js.map +1 -0
  28. package/dist/dimensions/formality/plain.js +1 -1
  29. package/dist/dimensions/formality/plain.js.map +1 -1
  30. package/dist/hook-cells.js +5 -2
  31. package/dist/hook-cells.js.map +1 -1
  32. package/dist/hooks/deploy-drift-notice.js +1 -1
  33. package/dist/hooks/deploy-drift-notice.js.map +1 -1
  34. package/dist/hooks/stance-guardrail-pre.js +56 -30
  35. package/dist/hooks/stance-guardrail-pre.js.map +1 -1
  36. package/dist/hooks/stance-guardrail.js +253 -38
  37. package/dist/hooks/stance-guardrail.js.map +1 -1
  38. package/dist/plan-states.d.ts +3 -3
  39. package/dist/plan-states.js +12 -8
  40. package/dist/plan-states.js.map +1 -1
  41. package/dist/skills/carry-on/skill.js +2 -2
  42. package/dist/skills/carry-on/skill.js.map +1 -1
  43. package/dist/skills/deliver/skill.d.ts +2 -0
  44. package/dist/skills/deliver/skill.js +98 -0
  45. package/dist/skills/deliver/skill.js.map +1 -0
  46. package/dist/skills/{praxis → design}/skill.d.ts +1 -1
  47. package/dist/skills/design/skill.js +79 -0
  48. package/dist/skills/design/skill.js.map +1 -0
  49. package/dist/skills/plan/skill.d.ts +2 -0
  50. package/dist/skills/plan/skill.js +89 -0
  51. package/dist/skills/plan/skill.js.map +1 -0
  52. package/package.json +4 -7
  53. package/dist/dimensions/autonomy/check-in.js.map +0 -1
  54. package/dist/dimensions/output-format/structured-decision.d.ts +0 -2
  55. package/dist/dimensions/output-format/structured-decision.js +0 -2
  56. package/dist/dimensions/output-format/structured-decision.js.map +0 -1
  57. package/dist/hooks/praxis-continuity.d.ts +0 -2
  58. package/dist/hooks/praxis-continuity.js +0 -132
  59. package/dist/hooks/praxis-continuity.js.map +0 -1
  60. package/dist/skills/praxis/skill.js +0 -193
  61. package/dist/skills/praxis/skill.js.map +0 -1
@@ -1,193 +0,0 @@
1
- // The plan-layout state canon (one home) — the `States` set below derives from it;
2
- // a project template sources its `planStates` from the same home (DRY). Lives in a
3
- // sibling module, not exported here: a skill module has exactly ONE export (its Skill).
4
- import { PLAN_STATES } from '../../plan-states.js';
5
- const FORMAL_BLOCK = `intent ≜ the stated goal
6
- States ≜ { ${PLAN_STATES.join(', ')} }
7
- P ≜ a plan : a set of task-files
8
- content : P → text
9
- static : P → ℘(path)
10
- constraints : P → ℘(invariant)
11
- outputs : P → ℘(artifact)
12
- inputs(t) ≜ static(t) ∪ { content(u) | (t, u) ∈ R }
13
- deps(t) ≜ { u | (t, u) ∈ R }
14
- accept : P → (return → 𝔹)
15
- pre : P → return
16
- spec(t) ≜ ⟨ intent(t), inputs(t), constraints(t), deps(t), outputs(t), accept(t) ⟩
17
- census : intent → ⟨scope, static, deps⟩
18
- executor : P ⇀ agent
19
- self ≜ session⟨the harness's own session identity⟩
20
- owner : P ⇀ session
21
- bound : P → 𝔹 ⟨plan-level commitment · persists across sessions · ¬ shard-state⟩
22
- gates : P × P → 𝔹
23
- electable ≜ { P ∈ Plans | ¬ terminal(P) ∧ ¬ occupied(P) }
24
- act ≜ a thing the executor does
25
- serves : act × P → 𝔹
26
- cost : act → effort
27
- defect ≜ ⟨symptom, locus, provenance⟩
28
- owns : defect ⇀ P
29
- impedes : defect × P → 𝔹
30
- refs : P → ℘(path) ⟨what a shard's outputs compile against⟩
31
- sign ≜ a name the corpus bears
32
- rewrites : P → ℘(sign) ⟨the signs t re-signifies⟩
33
- occurs : sign → ℘(path) ⟨every site SPELLING it · the site DEFINING it is ONE of them⟩
34
- footprint : P → ℘(path) ⟨the paths landing t changed⟩
35
- origin : P ⇀ P ⟨the shard t was CUT OUT of · borne by no plan datum⟩
36
- cross(S) ≜ |R ∩ ⋃ { sᵢ × sⱼ | sᵢ, sⱼ ∈ S ∧ i ≠ j }|
37
- admissible(S) ⇔ ∀ s ∈ S : 3 ≤ |s| ≤ 1.5 · |P| / |S| ⟨a slice under 3 is a label ¬ a lane · a slice far above the mean cannot be fanned out against its siblings · both bounds are COMPUTED from |P| ∵ a fixed pair encodes |P| at the moment someone wrote it down⟩
38
- swap(S,t,u) ≜ S with t and u exchanging slices
39
- dir : P → path
40
- state : P → States
41
- truth : P → States
42
- R ⊆ P × P
43
- slices : P → ℘(℘(P))
44
- mirror : (state, R, content) → document
45
- PLAN.md ≜ mirror(state, R, content)
46
- depalimpsest(c) ≜ c ↾ live-strata
47
- conform @ signify
48
- Phase ≜ { proposed, in-flight, landed, superseded, retired }
49
- Plans ≜ { P | P a plan on disk }
50
- commit ≜ a VCS commit
51
- commits : P → ℘(commit)
52
- lands : commit × P → 𝔹
53
- landing : P ⇀ commit
54
- retires : commit × P → 𝔹
55
- retirement : P ⇀ commit
56
- stored : P → ℘(commit)
57
- retired : P → 𝔹
58
- superseded : P → 𝔹
59
- terminal : P → 𝔹
60
- phase : P → Phase
61
-
62
- blocked(t) ⇔ ∃ u : (t, u) ∈ R ∧ state(u) ≠ completed
63
- ruling-owed(t) ⇔ a decision nobody has taken stands between t and its acceptance ⟨¬ a dep ∵ a dep is mechanical sequencing an executor can wait out⟩
64
- occupied(P) ⇔ owner(P) defined ∧ owner(P) ≠ self ⟨liveness is ¬ DECIDABLE here ∵ the owner is another session and no harness lets this one interrogate it · ∴ occupancy is read off the RECORD, ¬ off a registry⟩
65
- retires(c, P) ⇔ c deletes dir(P) ⟨the twin of lands · retirement is VCS-carried, ¬ residence-carried⟩
66
- retired(P) ⇔ retirement(P) defined
67
- superseded(P) ⇔ .superseded-by @ dir(P)
68
- frontier(P) ≜ { t | t ∈ P ∧ state(t) ∈ { ready, active } } ⟨where the plan IS · ¬ only what is dispatchable⟩
69
- sharded(P) ⇔ P ≠ ∅
70
- promote(u) ≜ { t | (t, u) ∈ R ∧ state(t) = pending ∧ ¬blocked(t) ∧ ¬ruling-owed(t) }
71
- next ≜ { pending ↦ ready, ready ↦ active, active ↦ completed, completed ↦ completed }
72
- W(n) ≜ ⋃ { wave(i) | i <= n }
73
- wave(0) ≜ { t | ∄ u : (t, u) ∈ R }
74
- wave(n+1) ≜ { t | t ∉ W(n) ∧ ∀ u : (t, u) ∈ R ⇒ u ∈ W(n) }
75
- waves ≜ (wave(0), wave(1), …)
76
- dispatched(P) ⇔ ∃ t ∈ P : state(t) ∈ { active, completed }
77
- done(P) ⇔ ∀ t ∈ P : state(t) = completed
78
- landed(P) ⇔ landing(P) defined ∧ frontier(P) = ∅ ∧ pending(P) = ∅ ∧ ¬ retired(P) ⟨landing is HISTORICAL ∧ monotone ; done is NOT absorbing ∴ landing alone reports a REOPENED plan as terminal, and terminal ⇒ retire is an OBLIGATION ∴ the readout demands retiring open work⟩
79
- terminal(P) ⇔ landed(P) ∨ superseded(P)
80
- nextPhase ≜ { proposed ↦ in-flight, in-flight ↦ landed, landed ↦ retired, superseded ↦ retired, retired ↦ retired }
81
-
82
- ∀ t ∈ P : t @ dir(P)/state(t)
83
- owner(P) @ dir(P)/.owner
84
- owner(P) released @ unbind ∨ land ∨ retire ⟨an abandoned .owner reads as occupied until then · the cost is paid ONCE ∧ VISIBLY by an operator deleting a file they can see ≺ every session ∧ INVISIBLY by a registry swearing a dead pid was live⟩
85
- ∀ t : content(t) ⊨ spec(t)
86
- ∀ t : ∀ p ∈ static(t) : p exists at authoring
87
- ∀ t : ∀ p ∈ outputs(t) : p exists ∨ the directory holding p exists ⟨a shard MAY create a file ∴ a non-resolving output is ¬ automatically a typo · the PARENT discriminates a creation target from a misspelling⟩
88
- ∀ t : ∃ r : ¬accept(t)(r)
89
- ∀ t : ¬accept(t)(pre(t))
90
- ∀ t : accept(t)(pre(t)) ⇒ ¬(content(t) ⊨ spec(t))
91
- ∀ t : content(t) grounded-by census(intent(t))
92
- ∀ t : ¬(content(t) grounded-by census(intent(t))) ⇒ ¬(content(t) ⊨ spec(t))
93
- ∀ t : census(intent(t)) delegable-to agent
94
- ∀ t : measurement ∈ content(t) ⇒ measurement = claim⟨timestamp⟩ ∴ re-derive ≺ cite-as-evidence
95
- ⟨a count in a shard is CENSUS OUTPUT, ¬ a datum · the tree moves under it ∧ nothing reds⟩
96
- ⟨measured : one plan carried 413 ids ⟨irreproducible under 12 definitions⟩ · 192/413 ⟨ratio EXACT ∧ both absolutes wrong⟩ · 26 sites ⟨14 at HEAD⟩ · 53.5% reach ⟨36.7%⟩⟩
97
- ⟨an exact RATIO over wrong ABSOLUTES = computed once ∧ remembered ∴ the tell⟩
98
- ⟨∴ a shard reaching a NEGATIVE conclusion ⟨"unbuildable" · "nothing gates X"⟩ on quoted counts is unfalsified, ¬ established⟩
99
- ∀ t : reach-leg(t) ⊨ print(denominator) ⟨∄ denominator ⇒ found-nothing ≡ could-not-look⟩
100
- state(t) = ready ⇒ ¬ blocked(t) ∧ ¬ ruling-owed(t) ⟨ready PROMISES an executor can pick t up and FINISH · conflating a dep with a ruling stalls a fan-out with every agent blocked on the same unanswered question⟩
101
- ⋃ slices(P) = P
102
- ∀ s₁, s₂ ∈ slices(P) : s₁ ≠ s₂ ⇒ s₁ ∩ s₂ = ∅
103
- admissible(slices(P)) ∧ ∄ t, u ∈ P : admissible(swap(slices(P),t,u)) ∧ cross(swap(slices(P),t,u)) < cross(slices(P))
104
- argmin over an UNNAMED admissible ⇒ unfalsifiable ∧ global argmin over every assignment ¬ decidable ∴ argmin ↾ LOCAL ⟨no admissible swap improves the cut · exhaustive ∧ deterministic⟩
105
- waves = (wave(0), …, wave(m))
106
- ∀ n < m : |wave(n)| = 1 ⇒ slices mis-cut ⟨a singleton non-terminal wave is a chain, ¬ a cut⟩
107
- ∀ t, u ∈ wave(n) : t ≠ u ⇒ outputs(t) ∩ outputs(u) = ∅ ⟨the concurrency precondition⟩
108
- ∃ t, u ∈ wave(n) : t ≠ u ∧ outputs(t) ∩ outputs(u) ≠ ∅ ⇒ slices mis-cut
109
- ∀ t, u ∈ wave(n) : t ≠ u ⇒ outputs(t) ∩ refs(u) = ∅ ⟨disjoint outputs is NECESSARY ¬ sufficient : a deletion in t dangles a reference in u⟩
110
- ⊨ disjoint-outputs ⇒ dispatch(wave(n)) needs-no-isolation ⟨a correctly cut wave never contends⟩
111
- ∀ t : footprint(t) ⊆ outputs(t) ⟨outputs IS the contention set ∴ an under-declared array silently voids every disjointness proof above · a shorter array is still an array of resolving globs⟩
112
- ∀ t : ⋃ { occurs(s) | s ∈ rewrites(t) } ⊆ outputs(t) ⟨a shard's footprint is its REFERENCE set, ¬ its definition site · a rename touches every speller · giving a name its first home makes every existing spelling interpolate it · resolve occurs BEFORE declaring outputs⟩
113
- ⟨measured 6 under-declared arrays across one plan, ONE cause ⟨footprint read off where a sign is DEFINED while the work was bounded by where it is USED⟩ · declared 1 glob and wrote 15 paths · 1 and 12 · 8 and 20⟩
114
- origin(t) defined ⇒ outputs(t) re-derived from rewrites(t) ⟨SPLITTING A SHARD DOES NOT SPLIT ITS BLAST RADIUS · the child's array is its own, ¬ the topical part of outputs(origin(t)) · so a split understates BY CONSTRUCTION, ¬ by oversight⟩
115
- ∄ origin borne by any plan datum ⇒ ¬ gateable ∴ this law rides the CELL ⟨the seam nearest the defect is the only one left when the datum a check would need was never captured⟩
116
- (state, R, content) ≽ PLAN.md
117
- mirror(state, R, content) emits R ∧ waves
118
- depalimpsest(depalimpsest(c)) = depalimpsest(c)
119
- retired(P) ⇒ phase(P) = retired
120
- superseded(P) ∧ ¬ retired(P) ⇒ phase(P) = superseded
121
- landed(P) ∧ ¬ superseded(P) ⇒ phase(P) = landed
122
- dispatched(P) ∧ ¬ landed(P) ∧ ¬ superseded(P) ∧ ¬ retired(P) ⇒ phase(P) = in-flight
123
- ¬ dispatched(P) ∧ ¬ superseded(P) ∧ ¬ retired(P) ⇒ phase(P) = proposed
124
- landing(P) = c ⇔ lands(c, P)
125
- retirement(P) = c ⇔ retires(c, P)
126
- ∀ c, c' : lands(c, P) ∧ lands(c', P) ⇒ c = c'
127
- ∀ c, c' : retires(c, P) ∧ retires(c', P) ⇒ c = c'
128
- retired(P) ⇒ P ∉ Plans ⟨retire removes the member · Plans is disk, ∴ phase reads the commit, ¬ a residence⟩
129
- ∀ P : stored(P) = ∅ ⟨landing ∧ retirement alike : recomputed from VCS every call, written nowhere⟩
130
- list = Plans
131
- yield(P) ≜ what EXECUTING P established ∧ ¬ derivable from intent(P) @ ENGINE ⟨enters as Intent, ¬ as a Sign : execution establishes what needs naming, ¬ the name⟩
132
- drained(y) ⇔ ∀ i ∈ y : i authored into its strongest seam ⟨gate ≻ cell ≻ governing-doc @ retire⟩ ∨ i filed as a canon-candidate ⟨¬ agent-private store : a private home is where the NEXT agent re-derives it⟩
133
- retire(P) defined ⇔ terminal(P) ∧ drained(yield(P))
134
- supersede(P, Q) ⇒ superseded(P)
135
- ∀ t : conform(content(t))
136
- ⊨ conform(PLAN.md)
137
- ∀ t, r : ¬conform(r) ⇒ ¬accept(t)(r)
138
-
139
- bound(P) @ dir(P)/.bound ⟨persistent · survives session-end · ¬ derived from shard-state⟩
140
- ∃ P ∈ Plans : ¬ terminal(P) ⇒ ∃! P : bound(P) ⟨always-bind ∧ WIP=1 · one law⟩
141
- bound(P) ⇒ ¬ occupied(P)
142
- bound(P) ∧ ¬ sharded(P) ⇒ start(P) ≺ dispatch(P) ⟨binding an unsharded plan obliges the cut⟩
143
- bound(P) ∧ sharded(P) ∧ ¬ done(P) ⇒ frontier(P) ≠ ∅ ⟨the ¬ done antecedent is LOAD-BEARING · dropped, the law reds a plan for FINISHING ∧ the cheapest green is filing work nobody needs⟩
144
- done(P) ⇒ frontier(P) = ∅ ⟨TAUTOLOGY ∵ frontier(P) ⊆ the open states · carries no content and is the first thing anyone writes here⟩
145
- done(P) ⇒ ∀ t ∈ P : t @ dir(P)/completed ⟨done is witnessed by RESIDENCE · a task-file that VANISHED empties frontier(P) exactly as finishing does, ∧ only residence tells the two apart⟩
146
- sharded(P) ∧ ¬ done(P) ∧ frontier(P) = ∅ ⇒ R ill-formed ⟨cycle ∨ unsatisfiable dep ∨ AN EDGELESS NODE⟩ · SURFACE
147
- ⟨read the third disjunct FIRST : \`file\` writes its stub with ¬ census ∧ ¬ re-slice ∴ the filed t has NO edge in R, ∴ ∄ u : t ∈ promote(u), ∴ t is unreachable BY CONSTRUCTION ∧ it still counts against done(P)⟩
148
- ⟨∴ any bound plan carrying a filed defect and no live shard reds this law, and the cause is the FILING, ¬ a cycle · only \`upsert\` gets it out · measured twice, in two plans, two weeks apart⟩
149
- gates(P, Q) ⇔ ∃ t ∈ Q : landing(P) ∈ deps(t)
150
- elect ≜ in-flight ≻ gating ≻ operator-intent ⟨lexicographic · finish before starting⟩
151
- terminal(P) ⇒ retire(P) ⟨obligation ¬ permission · an unretired terminal plan is WIP that is not work⟩
152
- yield(P) ≠ ∅ ∧ ¬ drained(yield(P)) ⇒ ¬ retire(P) ⟨ENGINE intake, realized HERE : deletion is where a law dies⟩
153
- ⟨measured : 16 retired plans, 25 laws, 0 in the canon ∴ every anchor re-derived privately, per agent, forever⟩
154
- impedes(d, t) ⇔ d standing ⇒ ∄ r : accept(t)(r)
155
- impedes(d, t) ⇒ fix(d) ∧ ¬ check-in-owed ⟨a regression in the path is repaired, ¬ surfaced⟩
156
- ¬ impedes(d, t) ⇒ file(owns(d), d) ∧ ¬ fix(d) ⟨a defect beside the path is filed, ¬ chased⟩
157
- cost(file) < cost(fix) ⟨else the gradient points at chasing · the load-bearing law⟩
158
- dispatch(P) ∧ ¬ serves(a, P) ⇒ a ∈ { file, triage } ⟨scope-bound⟩
159
- advance ⊨ mirror ⟨state moves ∴ PLAN.md moves · drift is ¬ a later chore⟩
160
-
161
- start : intent ↦ (P, slices(P), waves)
162
- upsert : (P, intent) ↦ P' ≜ author census-grounded t(s) ∧ P' = P ∪ {t} ∧ re-slice ∧ re-mirror
163
- list : ↦ ℘(P)
164
- elect : ↦ P ≜ the ≻-greatest of electable ; pre electable ≠ ∅
165
- bind : P ↦ P ≜ write .bound @ dir(P) ; pre ∀ Q ≠ P : ¬ bound(Q) ; post ∃! bound
166
- unbind : P ↦ P ≜ remove .bound @ dir(P) ∧ remove .owner @ dir(P) ; pre done(P) ∨ terminal(P) ∨ operator-redirect
167
- file : (P, d) ↦ P' ≜ stub t @ dir(P)/pending : ⟨symptom(d), locus(d), provenance(d)⟩ ;
168
- ¬ census ∧ ¬ re-slice ∧ ¬ re-mirror ; post P' = P ∪ { t }
169
- triage : d ↦ impedes(d, t) ⇒ fix(d) ; ¬ impedes(d, t) ⇒ file(owns(d), d)
170
- dispatch ≜ ∀ t ∈ frontier(P) : state(t) = ready ⇒ concurrently ⟨ state(t) := active ∧ owner(P) := self ∧ executor(t) runs content(t) ⟩
171
- dispatch(P) ⇒ ¬occupied(P) ∧ bound(P)
172
- judge(t, r) ≜ accept(t)(r) ⇒ advance(t) ; ¬accept(t)(r) ⇒ r rejected back to executor(t), state(t) stays active
173
- ⟨r lands VERBATIM ≺ any verdict on it : the loss mode is read-reason-discard, and it takes everything exactly when a run dies mid-judgement⟩
174
- ⟨fan-in is as order-sensitive as fan-out : ∀ t dispatched in the wave, confirm executor(t) RETURNED ; outputs(t) exist ≠ executor(t) returned⟩
175
- advance(t) ≜ state(t) := next(state(t)) ; state(t) = completed ⇒ ∀ d ∈ promote(t) : state(d) := ready ;
176
- PLAN.md := mirror(state, R, content)
177
- update(t) ≜ content(t) := depalimpsest(content(t)) ; PLAN.md := mirror(state, R, content)
178
- merge : { P₁, P₂, … } ↦ ⋃ Pᵢ
179
- sync ≜ ∀ t ∈ P : state(t) ≠ truth(t) ⇒ state(t) := truth(t) ;
180
- ∀ u ∈ P : ∀ d ∈ promote(u) : state(d) := ready ;
181
- PLAN.md ≠ mirror(state, R, content) ⇒ PLAN.md := mirror(state, R, content)
182
- post : state = truth ∧ PLAN.md = mirror(state, R, content)
183
- supersede : (P, Q) ↦ P ≜ write .superseded-by @ dir(P) := Q ⟨staged⟩ ; pre Q ∈ Plans ∧ Q ≠ P ; post superseded(P)
184
- retire : P ↦ ⊥ ≜ delete dir(P) ; pre terminal(P) ∧ drained(yield(P)) ; post P ∉ Plans
185
- landingOf : P ↦ landing(P)
186
- retirementOf : P ↦ retirement(P)`;
187
- export const praxis = {
188
- name: 'praxis',
189
- description: `use this skill to create a plan decomposed into MECE execution shards, where each shard is a self-contained task execution specification with objective, inputs, constraints, dependencies, outputs, and completion criteria.`,
190
- formalBlock: FORMAL_BLOCK,
191
- composition: () => [],
192
- };
193
- //# sourceMappingURL=skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/praxis/skill.ts"],"names":[],"mappings":"AACA,mFAAmF;AACnF,mFAAmF;AACnF,wFAAwF;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,YAAY,GAAG;sBACC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAoLQ,CAAC;AAErD,MAAM,CAAC,MAAM,MAAM,GAAU;IAC3B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,+NAA+N;IAC5O,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;CACtB,CAAC"}