dreamcontext 0.6.0 → 0.7.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 (80) hide show
  1. package/README.md +2 -1
  2. package/agents/sleep-product.md +19 -2
  3. package/agents/sleep-state.md +43 -22
  4. package/agents/sleep-tasks.md +18 -0
  5. package/dist/agents/sleep-product.md +19 -2
  6. package/dist/agents/sleep-state.md +43 -22
  7. package/dist/agents/sleep-tasks.md +18 -0
  8. package/dist/dashboard/assets/{BrainCanvas3D-LLqVeXtb.js → BrainCanvas3D-lFgJbbhZ.js} +1 -1
  9. package/dist/dashboard/assets/{_baseUniq-DW0uA0ty.js → _baseUniq-BpANgc_i.js} +1 -1
  10. package/dist/dashboard/assets/{arc-fVUGtlbL.js → arc-CX32Jm7E.js} +1 -1
  11. package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-Dz2PKBsS.js → architectureDiagram-Q4EWVU46-ARASlGxO.js} +1 -1
  12. package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-ByWKxzhL.js → blockDiagram-DXYQGD6D-BBvsYm9E.js} +1 -1
  13. package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-dpHsVM3D.js → c4Diagram-AHTNJAMY-ChSUfXR9.js} +1 -1
  14. package/dist/dashboard/assets/channel-w_Bp182N.js +1 -0
  15. package/dist/dashboard/assets/{chunk-4BX2VUAB-HEXb6Yg5.js → chunk-4BX2VUAB-COHoVEpt.js} +1 -1
  16. package/dist/dashboard/assets/{chunk-4TB4RGXK-DeVy5g6H.js → chunk-4TB4RGXK-DKJFLaTC.js} +1 -1
  17. package/dist/dashboard/assets/{chunk-55IACEB6-DGy3ZgDZ.js → chunk-55IACEB6-CKZPWZRu.js} +1 -1
  18. package/dist/dashboard/assets/{chunk-EDXVE4YY-CYJehjz4.js → chunk-EDXVE4YY-k1y4mGUJ.js} +1 -1
  19. package/dist/dashboard/assets/{chunk-FMBD7UC4-DKTOmvgZ.js → chunk-FMBD7UC4-ixXe5R10.js} +1 -1
  20. package/dist/dashboard/assets/{chunk-OYMX7WX6-mmtWyiDA.js → chunk-OYMX7WX6-NDFap7xg.js} +1 -1
  21. package/dist/dashboard/assets/{chunk-QZHKN3VN-DSdV0iwY.js → chunk-QZHKN3VN-vY0UpHjB.js} +1 -1
  22. package/dist/dashboard/assets/{chunk-YZCP3GAM-DbY-KoDn.js → chunk-YZCP3GAM-yztvsKR-.js} +1 -1
  23. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-CcQxcqy9.js +1 -0
  24. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-CcQxcqy9.js +1 -0
  25. package/dist/dashboard/assets/clone-_znoR_ci.js +1 -0
  26. package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-p0t1DY88.js → cose-bilkent-S5V4N54A-DKXM5Fh5.js} +1 -1
  27. package/dist/dashboard/assets/{dagre-KV5264BT-DYE0WzHM.js → dagre-KV5264BT-DN1Nlsmy.js} +1 -1
  28. package/dist/dashboard/assets/{diagram-5BDNPKRD-D9EiQCOP.js → diagram-5BDNPKRD-DnoJFRqR.js} +1 -1
  29. package/dist/dashboard/assets/{diagram-G4DWMVQ6-poDXSAfu.js → diagram-G4DWMVQ6-CF1_jTNI.js} +1 -1
  30. package/dist/dashboard/assets/{diagram-MMDJMWI5-CHZ7wgN1.js → diagram-MMDJMWI5-D4-bZZEt.js} +1 -1
  31. package/dist/dashboard/assets/{diagram-TYMM5635-DVk6fYG7.js → diagram-TYMM5635-al8RqVgf.js} +1 -1
  32. package/dist/dashboard/assets/{erDiagram-SMLLAGMA-D2sqkGin.js → erDiagram-SMLLAGMA-MEcC0rwO.js} +1 -1
  33. package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-DrMlKBYA.js → flowDiagram-DWJPFMVM-DCLyNpW8.js} +1 -1
  34. package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-Cf4FbEFp.js → ganttDiagram-T4ZO3ILL-DfEvbbJK.js} +1 -1
  35. package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-BsbOq1C9.js → gitGraphDiagram-UUTBAWPF-C_YozdVL.js} +1 -1
  36. package/dist/dashboard/assets/{graph-CUxxgCtS.js → graph-DpIXS1G1.js} +1 -1
  37. package/dist/dashboard/assets/index-Bo5CUa_M.js +480 -0
  38. package/dist/dashboard/assets/index-DrqurW1c.css +1 -0
  39. package/dist/dashboard/assets/{infoDiagram-42DDH7IO-DTkMnZiD.js → infoDiagram-42DDH7IO-AdT6kjzj.js} +1 -1
  40. package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-CahQ348K.js → ishikawaDiagram-UXIWVN3A-B0_9IZVO.js} +1 -1
  41. package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-BDY2Nslc.js → journeyDiagram-VCZTEJTY-BveNBswQ.js} +1 -1
  42. package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-CgrwoTjI.js → kanban-definition-6JOO6SKY-CFI8j4jR.js} +1 -1
  43. package/dist/dashboard/assets/{layout-IaUxkFkm.js → layout-DI7XjZy1.js} +1 -1
  44. package/dist/dashboard/assets/{linear-shc0iNFn.js → linear-CSjp56iw.js} +1 -1
  45. package/dist/dashboard/assets/{min-BIL7YgTN.js → min-pAGUJmEC.js} +1 -1
  46. package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-GmO0JRtA.js → mindmap-definition-QFDTVHPH-C2mBnknr.js} +1 -1
  47. package/dist/dashboard/assets/{pieDiagram-DEJITSTG-Bfm_toYA.js → pieDiagram-DEJITSTG-i_phWDqD.js} +1 -1
  48. package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-DIjTM3lm.js → quadrantDiagram-34T5L4WZ-Dv7TGJjw.js} +1 -1
  49. package/dist/dashboard/assets/{requirementDiagram-MS252O5E-B9AEoGYh.js → requirementDiagram-MS252O5E-CB2Jl-O5.js} +1 -1
  50. package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-C_O5XLXm.js → sankeyDiagram-XADWPNL6-DxCoN-EI.js} +1 -1
  51. package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-CHSxSvmJ.js → sequenceDiagram-FGHM5R23-BeZyaehJ.js} +1 -1
  52. package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-B0URrhHw.js → stateDiagram-FHFEXIEX-D3AjQzD1.js} +1 -1
  53. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-Ci9v--xK.js +1 -0
  54. package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-CycU2gVC.js → timeline-definition-GMOUNBTQ-3l_8RFUg.js} +1 -1
  55. package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-DcU2536G.js → vennDiagram-DHZGUBPP-2QiY25JD.js} +1 -1
  56. package/dist/dashboard/assets/{wardley-RL74JXVD-BWqqaX3S.js → wardley-RL74JXVD-DNLmFofz.js} +1 -1
  57. package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-CUnIHJgd.js → wardleyDiagram-NUSXRM2D-BI0tupiS.js} +1 -1
  58. package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-b9fcOYTj.js → xychartDiagram-5P7HB3ND-CghXPE7_.js} +1 -1
  59. package/dist/dashboard/index.html +2 -2
  60. package/dist/index.js +1669 -1064
  61. package/dist/skill-packs/excalidraw/SKILL.md +82 -3
  62. package/dist/skill-packs/video-watching/SKILL.md +54 -13
  63. package/dist/skill-packs/video-watching/scripts/build_frame_index.py +61 -10
  64. package/dist/skill-packs/video-watching/scripts/transcribe.sh +147 -54
  65. package/dist/templates/init/data-structures/default.md +26 -24
  66. package/package.json +1 -1
  67. package/skill/SKILL.md +26 -12
  68. package/skill-packs/excalidraw/SKILL.md +82 -3
  69. package/skill-packs/video-watching/SKILL.md +54 -13
  70. package/skill-packs/video-watching/scripts/build_frame_index.py +61 -10
  71. package/skill-packs/video-watching/scripts/transcribe.sh +147 -54
  72. package/dist/dashboard/assets/channel-zrLwggBX.js +0 -1
  73. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-BvejNiwH.js +0 -1
  74. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-BvejNiwH.js +0 -1
  75. package/dist/dashboard/assets/clone-BFVdml6g.js +0 -1
  76. package/dist/dashboard/assets/index-CqSkXBSu.css +0 -1
  77. package/dist/dashboard/assets/index-flRpQtDj.js +0 -476
  78. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-FdAb9MBo.js +0 -1
  79. package/dist/skill-packs/video-watching/scripts/gap_fill.py +0 -45
  80. package/skill-packs/video-watching/scripts/gap_fill.py +0 -45
package/README.md CHANGED
@@ -193,12 +193,13 @@ your-project/
193
193
  │ │ ├── 2.memory.md # Decisions & known issues
194
194
  │ │ ├── 3.style_guide_and_branding.md
195
195
  │ │ ├── 4.tech_stack.md # Tech decisions
196
- │ │ ├── 5.data_structures.sql
197
196
  │ │ ├── 6.system_flow.md # Session lifecycle, data flows
198
197
  │ │ ├── CHANGELOG.json
199
198
  │ │ ├── RELEASES.json
200
199
  │ │ └── features/ # Feature PRDs
201
200
  │ ├── knowledge/ # Tagged docs (index in snapshot)
201
+ │ │ ├── data-structures/ # Schema files (SQL-fenced, highlighted)
202
+ │ │ │ └── default.md # single-product; one per product if monorepo
202
203
  │ │ └── *.md # pinned: true → auto-loaded in full
203
204
  │ └── state/ # Active tasks + working state
204
205
  │ ├── *.md # Active task files
@@ -54,8 +54,9 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
54
54
  | You touch | You don't touch |
55
55
  |---|---|
56
56
  | `_dream_context/knowledge/*.md` (create + edit) | core 0-6 files (sleep-state owns) |
57
- | `_dream_context/core/features/*.md` (create + edit) | task files (sleep-tasks owns) |
58
- | `dreamcontext knowledge create --tags "..."` | changelog, releases (sleep-state owns) |
57
+ | `_dream_context/knowledge/data-structures/<product>.md` (schemas, models, API contracts) | task files (sleep-tasks owns) |
58
+ | `_dream_context/core/features/*.md` (create + edit) | changelog, releases (sleep-state owns) |
59
+ | `dreamcontext knowledge create --tags "..."` | |
59
60
  | `dreamcontext features create <name>` | |
60
61
  | `dreamcontext features insert <name> <section>` | |
61
62
  | Frontmatter: `pinned`, `status`, `updated`, `released_version`, `related_tasks` | |
@@ -250,6 +251,22 @@ Product-scoped knowledge. Cross-cutting findings still go to top-level `knowledg
250
251
 
251
252
  This is a one-time bootstrap per product; once the file exists, treat it like any other knowledge file (edit on demand, don't recreate).
252
253
 
254
+ #### B6. Data structures (schemas / models / API contracts)
255
+
256
+ Data structures live at `knowledge/data-structures/<product>.md` (`default.md` for single-product). They moved here from `core/` because schemas ARE domain knowledge — this gives them recall indexing, staleness flags, and the knowledge UI for free. **You own these writes now** (sleep-state only flags them for you).
257
+
258
+ **Single-observation gate.** Unlike most knowledge (which waits for repetition), a schema/data-model change is reflected in the *same* cycle — no pattern repetition required. If `sleep-state` flagged a schema/table/model change, or the diff shows one, write it now.
259
+
260
+ **Routing.**
261
+ - Active task has `product: X` → `knowledge/data-structures/X.md` (create if missing).
262
+ - Otherwise (single-product) → `knowledge/data-structures/default.md`.
263
+ - Frontmatter: `type: data-structures`, `product: <name>`, `tags: [data-structures, database, schema]` (add domain tags as relevant).
264
+
265
+ **Migration of the old locations** (idempotent; the dir move runs automatically on `dreamcontext sleep start`, but confirm + handle the legacy file):
266
+ - If `core/data-structures/*.md` still exists and the knowledge copy is absent, it was (or should be) moved to `knowledge/data-structures/` — the `sleep start` migration handles this. Verify it landed.
267
+ - If the even-older `core/5.data_structures.sql` exists and `knowledge/data-structures/default.md` does not, copy it there (add the data-structures frontmatter) — don't delete the legacy file.
268
+ - **Never delete** the old `core/data-structures/` dir or the legacy `.sql` yourself — leave them for the user to remove after confirming (the `doctor` command nags about both). Note any migration in your report.
269
+
253
270
  ## Return — single combined report
254
271
 
255
272
  ```
@@ -33,9 +33,8 @@ Identity is sacred — a fresh session must immediately understand who the agent
33
33
  | You touch | You don't touch |
34
34
  |---|---|
35
35
  | `core/0-4.*`, `core/6.*` files (Edit, surgical) | task files (sleep-tasks owns) |
36
- | `core/data-structures/<product>.md` (one per product; `default.md` for single-product) | knowledge files (you flag staleness; sleep-product writes) |
37
- | `dreamcontext core changelog add` | feature PRDs (sleep-product owns) |
38
- | `dreamcontext core releases {add,update,active,list,show}` | |
36
+ | `dreamcontext core changelog add` | knowledge files incl. `knowledge/data-structures/<product>.md` (sleep-product owns + writes; you only flag staleness) |
37
+ | `dreamcontext core releases {add,update,active,list,show}` | feature PRDs (sleep-product owns) |
39
38
  | `dreamcontext trigger add` (context-dependent reminders) | |
40
39
 
41
40
  ## Inputs
@@ -89,6 +88,7 @@ dreamcontext core changelog add \
89
88
  --summary "<≤200 char one-liner: what shipped, scannable in snapshot>" \
90
89
  --description "<one paragraph: what changed and why; mention key file/symbol where helpful>" \
91
90
  --references "commit:<sha>,file:<path>,knowledge:<slug>,feature:<slug>,task:<slug>,url:<href>" \
91
+ [--authors "<person-a,person-b>"] \
92
92
  [--supersedes "<date>|<scope>"] \
93
93
  $([ "$BREAKING" = "true" ] && echo "--breaking")
94
94
  ```
@@ -101,6 +101,8 @@ dreamcontext core changelog add \
101
101
 
102
102
  **Supersedes field**: optional, only when a later entry reverses or replaces an earlier one (e.g., a "default-on" flip of a previously "opt-in" flag, or a v0.4 file path being deprecated). Use coarse keys like `"2026-05-23|memory"` (date + scope) — disambiguators only matter when multiple entries share the same date+scope, in which case fall back to the position-from-top index. Most entries do NOT supersede anything; leave the field absent.
103
103
 
104
+ **Authors field (multi-person projects only)**: optional, attributes the change to the person(s) who drove it. Set it ONLY when the project is multi-person (`.config.json` `people` roster has >1 entry — see Pass B.5). Pass comma-separated kebab-case slugs matching the roster (`--authors "mehmet,ada"`). Determine attribution from the same signals Pass B.5 uses (git `%an` on the commits the entry clusters, self-identification in the session transcript). When a single change was driven by distinct people across clusters, attribute each `dreamcontext core changelog add` invocation to its own author(s). Single-person projects: OMIT `--authors` entirely — output stays byte-identical to today. Authors are excluded from the changelog dedup fingerprint, so adding them never re-opens an already-released entry.
105
+
104
106
  #### A3. Releases — surface readiness, never auto-release
105
107
 
106
108
  ```bash
@@ -142,21 +144,20 @@ Be conservative. The default is **no change**. Only update when a pattern is rec
142
144
 
143
145
  #### B0b. Single-observation gate (code-reality files)
144
146
 
145
- Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`, files under `core/data-structures/`, and `6.system_flow.md`.
147
+ Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`, and `6.system_flow.md`. (Schema/data-model changes are the same kind of single-observation signal, but they now live in `knowledge/data-structures/` **sleep-product** owns that write; flag it for them rather than writing it yourself.)
146
148
 
147
- These files describe code reality, not user preferences. A single session adding/removing a dependency, schema, route, or workflow step MUST be reflected in the same cycle — no pattern repetition required. If the diff or transcript shows the change happened, write it.
149
+ These files describe code reality, not user preferences. A single session adding/removing a dependency, route, or workflow step MUST be reflected in the same cycle — no pattern repetition required. If the diff or transcript shows the change happened, write it.
148
150
 
149
151
  Examples that trigger an immediate write:
150
152
  - A new dependency appears in `package.json` / lockfile → `4.tech_stack.md`.
151
- - A schema change, new table, or new model → relevant file under `core/data-structures/`.
153
+ - A schema change, new table, or new model → flag for **sleep-product** to write `knowledge/data-structures/<product>.md`.
152
154
  - A new route, hook, or system-flow step → `6.system_flow.md`.
153
155
  - A new color token, font, or design primitive → `3.style_guide_and_branding.md`.
154
156
 
155
- **Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack or data_structures observation to the matching product's file:
157
+ **Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack observation to the matching product's file:
156
158
  - Tech stack scoped to product X → still goes in `4.tech_stack.md` but tagged with the product label inline (single-file convention); if a project-specific convention emerges (per-product tech stacks), revisit.
157
- - Data structures → `core/data-structures/<X>.md`. Create the file if missing.
158
159
 
159
- Otherwise (no `product:` field, single-product project), data structures changes go to `core/data-structures/default.md`.
160
+ Data-structure observations are routed by **sleep-product** to `knowledge/data-structures/<X>.md` (or `default.md`) — flag them for sleep-product, don't write them here.
160
161
 
161
162
  #### B1. Signal → file routing
162
163
 
@@ -167,7 +168,7 @@ Otherwise (no `product:` field, single-product project), data structures changes
167
168
  | New project constraint or warning | `0.soul.md` | Rules / Warnings | two-observation |
168
169
  | Technical decision worth preserving | `2.memory.md` | Technical Decisions | two-observation |
169
170
  | Stack/dependency change | `4.tech_stack.md` | | single-observation |
170
- | Schema / data-model change | `core/data-structures/<product>.md` (or `default.md`) | | single-observation |
171
+ | Schema / data-model change | flag for **sleep-product** → `knowledge/data-structures/<product>.md` (or `default.md`) | | single-observation |
171
172
  | System flow / hook count change | `6.system_flow.md` | | single-observation |
172
173
  | Style/branding token change | `3.style_guide_and_branding.md` | | single-observation |
173
174
 
@@ -181,22 +182,38 @@ dreamcontext trigger add "<when>" "<remind>" # context-dependent reminders
181
182
 
182
183
  Cross-domain catches from your own changelog pass land here naturally — if you wrote a `feat` entry whose description revealed a preference enforced twice, write it into `1.user.md` in the same cycle (no flagging needed; you own both files).
183
184
 
184
- #### B2. Legacy migration `5.data_structures.sql` `data-structures/<product>.md`
185
+ ### Pass B.5People detection (multi-person awareness)
186
+
187
+ dreamcontext defaults to single-person. When you have **corroborated evidence** that more than one human works in this project, record the roster so changelogs/tasks/memory can attribute work per person. This is **AI-driven detection** — there is no manual toggle and no persisted `multiPerson` flag (multi-person status is DERIVED from `people.length > 1`).
188
+
189
+ **Detection gate — require ≥2 corroborated signals** before flipping a project to multi-person (this gate prevents false positives; one weak signal is never enough):
185
190
 
186
- On every cycle, check for the legacy file:
191
+ - **Self-identification in user turns** — a person names themselves or another teammate ("this is Ada", "Mehmet asked me to…", "I'm covering for Lina").
192
+ - **Distinct git authors since the epoch** — `git log --since="$CUTOFF" --format='%an <%ae>' | sort -u` returns more than one real human author (ignore bots/CI like `github-actions`, `dependabot`).
193
+ - **Distinct voice / handoff** — the transcript shows a clear authorship handoff or a different working style/voice than the established user.
187
194
 
188
195
  ```bash
189
- LEGACY=_dream_context/core/5.data_structures.sql
190
- NEW_DEFAULT=_dream_context/core/data-structures/default.md
191
- if [ -f "$LEGACY" ] && [ ! -f "$NEW_DEFAULT" ]; then
192
- mkdir -p _dream_context/core/data-structures
193
- cp "$LEGACY" "$NEW_DEFAULT"
194
- # do NOT delete the legacy file here — leave it for WS-1 manifest cleanup (if system-installed)
195
- # or the user to remove manually. Note the migration in your report.
196
- fi
196
+ # Signal 2: distinct human git authors since the sleep epoch
197
+ git log --since="$CUTOFF" --format='%an' | sort -u
198
+ # Read the existing roster FIRST you append, you never overwrite.
199
+ jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
197
200
  ```
198
201
 
199
- Report the migration in your output so the user knows the new location. Do not delete the legacy file yourself.
202
+ When the gate is met:
203
+
204
+ 1. **Additive union to the roster — never overwrite.** Read the current `people` array first, then write the union (existing ∪ newly observed) back. Use kebab-case display-name slugs (`mehmet`, `ada`). A previously recorded person is NEVER dropped because they were quiet this cycle.
205
+
206
+ ```bash
207
+ dreamcontext config # confirm current roster, then edit state/.config.json people[] = union
208
+ ```
209
+
210
+ (There is no CLI writer for `people` yet — edit `_dream_context/state/.config.json` directly with Edit, preserving every existing key. Do NOT add a `multiPerson` key; it is derived.)
211
+
212
+ 2. **Refresh `## People` in `1.user.md`** to enumerate the full roster. Use the `ensurePeopleSection(userMd, people)` helper semantics (idempotent insert/replace of a `## People` block; one bullet per person). This is a no-op for single-person projects.
213
+
214
+ 3. **Attribute this cycle's changelog entries** — re-run Pass A's `dreamcontext core changelog add` with `--authors "<slugs>"` for each entry, attributing it to the person(s) who drove that cluster (Pass A and this pass share the git-author analysis).
215
+
216
+ **Single-person projects (gate NOT met): this entire pass is a NO-OP.** Do not create a roster, do not add a `## People` section, do not pass `--authors`. A solo project's `.config.json`, `1.user.md`, and changelog output must stay byte-identical to today. The cost of a false positive (spuriously attributing a solo user's work to a phantom teammate) is high — stay conservative.
200
217
 
201
218
  ### Pass C — Anti-bloat sweep + knowledge staleness flags
202
219
 
@@ -245,6 +262,10 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
245
262
  - 4.tech_stack.md: untouched
246
263
  - Triggers added: 0
247
264
 
265
+ ### People (multi-person detection)
266
+ - Roster: single-person (no multi-person signals this cycle) — no changes
267
+ | OR: detected 2 humans (signals: 2 distinct git authors + self-id in transcript) → roster updated mehmet, ada (additive union; ada appended, mehmet preserved); `## People` refreshed in 1.user.md; 3 changelog entries attributed via --authors
268
+
248
269
  ### Anti-bloat & staleness
249
270
  - 2.memory.md at 287 lines — under ceiling, no extraction needed
250
271
  - Knowledge staleness flags (for sleep-product):
@@ -259,7 +280,7 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
259
280
  1. **Be exhaustive on the diary.** Every meaningful change gets a changelog entry. Skipping is the failure state.
260
281
  2. **Conservative on identity (preferences & decisions).** No-op is the right answer most cycles for `1.user.md` and `2.memory.md`.
261
282
  3. **Two-observation gate for `1.user.md` / `2.memory.md`.** One observation is data; two is a pattern. Don't write a preference or decision from a single mention.
262
- 3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `core/data-structures/*`, `6.*`). A diff that adds a dependency, schema, route, or design primitive MUST be reflected in the same cycle. These files mirror code, not opinion.
283
+ 3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `6.*`). A diff that adds a dependency, route, or design primitive MUST be reflected in the same cycle. These files mirror code, not opinion. (Schema/data-model changes are the same kind of signal but live in `knowledge/data-structures/` — flag them for **sleep-product**.)
263
284
  4. **Cluster commits, don't enumerate.** Logical groupings beat 1-commit-per-entry.
264
285
  5. **Cover uncommitted work.** Don't wait for the user to commit.
265
286
  6. **Never auto-release.** Surface readiness; the user decides.
@@ -98,6 +98,22 @@ dreamcontext tasks create "<descriptive-slug>" --status in_progress --priority m
98
98
 
99
99
  Untracked, genuinely-separate work is invisible to future sessions — always link it. But a smaller slice of existing work belongs *inside* that task, never in a duplicate.
100
100
 
101
+ ### 2.5. Person attribution (multi-person projects only)
102
+
103
+ When the project's `.config.json` `people` array has **>1 entry**, the person responsible for a task's progress this cycle must be recorded as a `person:<slug>` tag in the task's frontmatter `tags` array. Slug is kebab-case matching the roster (e.g., `person:mehmet`, `person:ada`). Determine attribution from the same signals sleep-state uses for Pass B.5 (git `%an` on the commits, self-identification in the session transcript).
104
+
105
+ ```bash
106
+ # Read the current roster
107
+ jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
108
+ ```
109
+
110
+ - **New task**: pass `--person <name>` to `dreamcontext tasks create` (the CLI injects a `person:<slug>` tag automatically).
111
+ - **Existing task**: add the tag directly via Edit on the task frontmatter `tags:` array, or via `dreamcontext tasks insert`.
112
+
113
+ When the person is already tagged on the task, no action is needed — the tag is additive. Do not remove a previously-set `person:` tag for a person who was quiet this cycle; they remain attributed for prior work.
114
+
115
+ **Single-person projects (`.config.json` `people` has 0 or 1 entry): this step is a NO-OP.** Never inject a `person:` tag on a solo project. The output must stay byte-identical to today.
116
+
101
117
  ### 3. Log progress AND reconcile the body — both required
102
118
 
103
119
  **(a) Append a changelog entry** — what happened this session:
@@ -154,6 +170,7 @@ If every task linked to the active version is `completed` (or only `in_review` r
154
170
  - Folded in (no new task): <existing-slug> — broadened scope + added 2 user stories / 1 criterion for <smaller-piece> instead of forking a duplicate
155
171
  - Created: <slug> (status: in_progress, attached to vX.Y.Z) — genuinely separate concern
156
172
  - Body reconciled: <slug> (dropped phase 1 from User Stories; replaced Technical Details auth section)
173
+ - Person attribution: <slug> tagged person:ada (multi-person project, ada drove this cycle's work) | OR: single-person project — no person tags injected
157
174
  - Version readiness: vX.Y.Z — 4/5 tasks ready for review
158
175
  - Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
159
176
  - Skipped: <session_id> had no actionable task signal
@@ -167,3 +184,4 @@ If every task linked to the active version is `completed` (or only `in_review` r
167
184
  4. **Always attach to a planning version.** No orphan work.
168
185
  5. **Stay in your lane.** If you spot non-task work worth preserving, flag it — don't write it.
169
186
  6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
187
+ 7. **Person attribution is multi-person only.** Read `.config.json` `people` first. If 0 or 1 entry, step 2.5 is a complete NO-OP — never inject `person:` tags on solo projects. Derived multi-person status comes from `people.length > 1`; there is no `multiPerson` key to check.
@@ -54,8 +54,9 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
54
54
  | You touch | You don't touch |
55
55
  |---|---|
56
56
  | `_dream_context/knowledge/*.md` (create + edit) | core 0-6 files (sleep-state owns) |
57
- | `_dream_context/core/features/*.md` (create + edit) | task files (sleep-tasks owns) |
58
- | `dreamcontext knowledge create --tags "..."` | changelog, releases (sleep-state owns) |
57
+ | `_dream_context/knowledge/data-structures/<product>.md` (schemas, models, API contracts) | task files (sleep-tasks owns) |
58
+ | `_dream_context/core/features/*.md` (create + edit) | changelog, releases (sleep-state owns) |
59
+ | `dreamcontext knowledge create --tags "..."` | |
59
60
  | `dreamcontext features create <name>` | |
60
61
  | `dreamcontext features insert <name> <section>` | |
61
62
  | Frontmatter: `pinned`, `status`, `updated`, `released_version`, `related_tasks` | |
@@ -250,6 +251,22 @@ Product-scoped knowledge. Cross-cutting findings still go to top-level `knowledg
250
251
 
251
252
  This is a one-time bootstrap per product; once the file exists, treat it like any other knowledge file (edit on demand, don't recreate).
252
253
 
254
+ #### B6. Data structures (schemas / models / API contracts)
255
+
256
+ Data structures live at `knowledge/data-structures/<product>.md` (`default.md` for single-product). They moved here from `core/` because schemas ARE domain knowledge — this gives them recall indexing, staleness flags, and the knowledge UI for free. **You own these writes now** (sleep-state only flags them for you).
257
+
258
+ **Single-observation gate.** Unlike most knowledge (which waits for repetition), a schema/data-model change is reflected in the *same* cycle — no pattern repetition required. If `sleep-state` flagged a schema/table/model change, or the diff shows one, write it now.
259
+
260
+ **Routing.**
261
+ - Active task has `product: X` → `knowledge/data-structures/X.md` (create if missing).
262
+ - Otherwise (single-product) → `knowledge/data-structures/default.md`.
263
+ - Frontmatter: `type: data-structures`, `product: <name>`, `tags: [data-structures, database, schema]` (add domain tags as relevant).
264
+
265
+ **Migration of the old locations** (idempotent; the dir move runs automatically on `dreamcontext sleep start`, but confirm + handle the legacy file):
266
+ - If `core/data-structures/*.md` still exists and the knowledge copy is absent, it was (or should be) moved to `knowledge/data-structures/` — the `sleep start` migration handles this. Verify it landed.
267
+ - If the even-older `core/5.data_structures.sql` exists and `knowledge/data-structures/default.md` does not, copy it there (add the data-structures frontmatter) — don't delete the legacy file.
268
+ - **Never delete** the old `core/data-structures/` dir or the legacy `.sql` yourself — leave them for the user to remove after confirming (the `doctor` command nags about both). Note any migration in your report.
269
+
253
270
  ## Return — single combined report
254
271
 
255
272
  ```
@@ -33,9 +33,8 @@ Identity is sacred — a fresh session must immediately understand who the agent
33
33
  | You touch | You don't touch |
34
34
  |---|---|
35
35
  | `core/0-4.*`, `core/6.*` files (Edit, surgical) | task files (sleep-tasks owns) |
36
- | `core/data-structures/<product>.md` (one per product; `default.md` for single-product) | knowledge files (you flag staleness; sleep-product writes) |
37
- | `dreamcontext core changelog add` | feature PRDs (sleep-product owns) |
38
- | `dreamcontext core releases {add,update,active,list,show}` | |
36
+ | `dreamcontext core changelog add` | knowledge files incl. `knowledge/data-structures/<product>.md` (sleep-product owns + writes; you only flag staleness) |
37
+ | `dreamcontext core releases {add,update,active,list,show}` | feature PRDs (sleep-product owns) |
39
38
  | `dreamcontext trigger add` (context-dependent reminders) | |
40
39
 
41
40
  ## Inputs
@@ -89,6 +88,7 @@ dreamcontext core changelog add \
89
88
  --summary "<≤200 char one-liner: what shipped, scannable in snapshot>" \
90
89
  --description "<one paragraph: what changed and why; mention key file/symbol where helpful>" \
91
90
  --references "commit:<sha>,file:<path>,knowledge:<slug>,feature:<slug>,task:<slug>,url:<href>" \
91
+ [--authors "<person-a,person-b>"] \
92
92
  [--supersedes "<date>|<scope>"] \
93
93
  $([ "$BREAKING" = "true" ] && echo "--breaking")
94
94
  ```
@@ -101,6 +101,8 @@ dreamcontext core changelog add \
101
101
 
102
102
  **Supersedes field**: optional, only when a later entry reverses or replaces an earlier one (e.g., a "default-on" flip of a previously "opt-in" flag, or a v0.4 file path being deprecated). Use coarse keys like `"2026-05-23|memory"` (date + scope) — disambiguators only matter when multiple entries share the same date+scope, in which case fall back to the position-from-top index. Most entries do NOT supersede anything; leave the field absent.
103
103
 
104
+ **Authors field (multi-person projects only)**: optional, attributes the change to the person(s) who drove it. Set it ONLY when the project is multi-person (`.config.json` `people` roster has >1 entry — see Pass B.5). Pass comma-separated kebab-case slugs matching the roster (`--authors "mehmet,ada"`). Determine attribution from the same signals Pass B.5 uses (git `%an` on the commits the entry clusters, self-identification in the session transcript). When a single change was driven by distinct people across clusters, attribute each `dreamcontext core changelog add` invocation to its own author(s). Single-person projects: OMIT `--authors` entirely — output stays byte-identical to today. Authors are excluded from the changelog dedup fingerprint, so adding them never re-opens an already-released entry.
105
+
104
106
  #### A3. Releases — surface readiness, never auto-release
105
107
 
106
108
  ```bash
@@ -142,21 +144,20 @@ Be conservative. The default is **no change**. Only update when a pattern is rec
142
144
 
143
145
  #### B0b. Single-observation gate (code-reality files)
144
146
 
145
- Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`, files under `core/data-structures/`, and `6.system_flow.md`.
147
+ Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`, and `6.system_flow.md`. (Schema/data-model changes are the same kind of single-observation signal, but they now live in `knowledge/data-structures/` **sleep-product** owns that write; flag it for them rather than writing it yourself.)
146
148
 
147
- These files describe code reality, not user preferences. A single session adding/removing a dependency, schema, route, or workflow step MUST be reflected in the same cycle — no pattern repetition required. If the diff or transcript shows the change happened, write it.
149
+ These files describe code reality, not user preferences. A single session adding/removing a dependency, route, or workflow step MUST be reflected in the same cycle — no pattern repetition required. If the diff or transcript shows the change happened, write it.
148
150
 
149
151
  Examples that trigger an immediate write:
150
152
  - A new dependency appears in `package.json` / lockfile → `4.tech_stack.md`.
151
- - A schema change, new table, or new model → relevant file under `core/data-structures/`.
153
+ - A schema change, new table, or new model → flag for **sleep-product** to write `knowledge/data-structures/<product>.md`.
152
154
  - A new route, hook, or system-flow step → `6.system_flow.md`.
153
155
  - A new color token, font, or design primitive → `3.style_guide_and_branding.md`.
154
156
 
155
- **Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack or data_structures observation to the matching product's file:
157
+ **Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack observation to the matching product's file:
156
158
  - Tech stack scoped to product X → still goes in `4.tech_stack.md` but tagged with the product label inline (single-file convention); if a project-specific convention emerges (per-product tech stacks), revisit.
157
- - Data structures → `core/data-structures/<X>.md`. Create the file if missing.
158
159
 
159
- Otherwise (no `product:` field, single-product project), data structures changes go to `core/data-structures/default.md`.
160
+ Data-structure observations are routed by **sleep-product** to `knowledge/data-structures/<X>.md` (or `default.md`) — flag them for sleep-product, don't write them here.
160
161
 
161
162
  #### B1. Signal → file routing
162
163
 
@@ -167,7 +168,7 @@ Otherwise (no `product:` field, single-product project), data structures changes
167
168
  | New project constraint or warning | `0.soul.md` | Rules / Warnings | two-observation |
168
169
  | Technical decision worth preserving | `2.memory.md` | Technical Decisions | two-observation |
169
170
  | Stack/dependency change | `4.tech_stack.md` | | single-observation |
170
- | Schema / data-model change | `core/data-structures/<product>.md` (or `default.md`) | | single-observation |
171
+ | Schema / data-model change | flag for **sleep-product** → `knowledge/data-structures/<product>.md` (or `default.md`) | | single-observation |
171
172
  | System flow / hook count change | `6.system_flow.md` | | single-observation |
172
173
  | Style/branding token change | `3.style_guide_and_branding.md` | | single-observation |
173
174
 
@@ -181,22 +182,38 @@ dreamcontext trigger add "<when>" "<remind>" # context-dependent reminders
181
182
 
182
183
  Cross-domain catches from your own changelog pass land here naturally — if you wrote a `feat` entry whose description revealed a preference enforced twice, write it into `1.user.md` in the same cycle (no flagging needed; you own both files).
183
184
 
184
- #### B2. Legacy migration `5.data_structures.sql` `data-structures/<product>.md`
185
+ ### Pass B.5People detection (multi-person awareness)
186
+
187
+ dreamcontext defaults to single-person. When you have **corroborated evidence** that more than one human works in this project, record the roster so changelogs/tasks/memory can attribute work per person. This is **AI-driven detection** — there is no manual toggle and no persisted `multiPerson` flag (multi-person status is DERIVED from `people.length > 1`).
188
+
189
+ **Detection gate — require ≥2 corroborated signals** before flipping a project to multi-person (this gate prevents false positives; one weak signal is never enough):
185
190
 
186
- On every cycle, check for the legacy file:
191
+ - **Self-identification in user turns** — a person names themselves or another teammate ("this is Ada", "Mehmet asked me to…", "I'm covering for Lina").
192
+ - **Distinct git authors since the epoch** — `git log --since="$CUTOFF" --format='%an <%ae>' | sort -u` returns more than one real human author (ignore bots/CI like `github-actions`, `dependabot`).
193
+ - **Distinct voice / handoff** — the transcript shows a clear authorship handoff or a different working style/voice than the established user.
187
194
 
188
195
  ```bash
189
- LEGACY=_dream_context/core/5.data_structures.sql
190
- NEW_DEFAULT=_dream_context/core/data-structures/default.md
191
- if [ -f "$LEGACY" ] && [ ! -f "$NEW_DEFAULT" ]; then
192
- mkdir -p _dream_context/core/data-structures
193
- cp "$LEGACY" "$NEW_DEFAULT"
194
- # do NOT delete the legacy file here — leave it for WS-1 manifest cleanup (if system-installed)
195
- # or the user to remove manually. Note the migration in your report.
196
- fi
196
+ # Signal 2: distinct human git authors since the sleep epoch
197
+ git log --since="$CUTOFF" --format='%an' | sort -u
198
+ # Read the existing roster FIRST you append, you never overwrite.
199
+ jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
197
200
  ```
198
201
 
199
- Report the migration in your output so the user knows the new location. Do not delete the legacy file yourself.
202
+ When the gate is met:
203
+
204
+ 1. **Additive union to the roster — never overwrite.** Read the current `people` array first, then write the union (existing ∪ newly observed) back. Use kebab-case display-name slugs (`mehmet`, `ada`). A previously recorded person is NEVER dropped because they were quiet this cycle.
205
+
206
+ ```bash
207
+ dreamcontext config # confirm current roster, then edit state/.config.json people[] = union
208
+ ```
209
+
210
+ (There is no CLI writer for `people` yet — edit `_dream_context/state/.config.json` directly with Edit, preserving every existing key. Do NOT add a `multiPerson` key; it is derived.)
211
+
212
+ 2. **Refresh `## People` in `1.user.md`** to enumerate the full roster. Use the `ensurePeopleSection(userMd, people)` helper semantics (idempotent insert/replace of a `## People` block; one bullet per person). This is a no-op for single-person projects.
213
+
214
+ 3. **Attribute this cycle's changelog entries** — re-run Pass A's `dreamcontext core changelog add` with `--authors "<slugs>"` for each entry, attributing it to the person(s) who drove that cluster (Pass A and this pass share the git-author analysis).
215
+
216
+ **Single-person projects (gate NOT met): this entire pass is a NO-OP.** Do not create a roster, do not add a `## People` section, do not pass `--authors`. A solo project's `.config.json`, `1.user.md`, and changelog output must stay byte-identical to today. The cost of a false positive (spuriously attributing a solo user's work to a phantom teammate) is high — stay conservative.
200
217
 
201
218
  ### Pass C — Anti-bloat sweep + knowledge staleness flags
202
219
 
@@ -245,6 +262,10 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
245
262
  - 4.tech_stack.md: untouched
246
263
  - Triggers added: 0
247
264
 
265
+ ### People (multi-person detection)
266
+ - Roster: single-person (no multi-person signals this cycle) — no changes
267
+ | OR: detected 2 humans (signals: 2 distinct git authors + self-id in transcript) → roster updated mehmet, ada (additive union; ada appended, mehmet preserved); `## People` refreshed in 1.user.md; 3 changelog entries attributed via --authors
268
+
248
269
  ### Anti-bloat & staleness
249
270
  - 2.memory.md at 287 lines — under ceiling, no extraction needed
250
271
  - Knowledge staleness flags (for sleep-product):
@@ -259,7 +280,7 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
259
280
  1. **Be exhaustive on the diary.** Every meaningful change gets a changelog entry. Skipping is the failure state.
260
281
  2. **Conservative on identity (preferences & decisions).** No-op is the right answer most cycles for `1.user.md` and `2.memory.md`.
261
282
  3. **Two-observation gate for `1.user.md` / `2.memory.md`.** One observation is data; two is a pattern. Don't write a preference or decision from a single mention.
262
- 3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `core/data-structures/*`, `6.*`). A diff that adds a dependency, schema, route, or design primitive MUST be reflected in the same cycle. These files mirror code, not opinion.
283
+ 3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `6.*`). A diff that adds a dependency, route, or design primitive MUST be reflected in the same cycle. These files mirror code, not opinion. (Schema/data-model changes are the same kind of signal but live in `knowledge/data-structures/` — flag them for **sleep-product**.)
263
284
  4. **Cluster commits, don't enumerate.** Logical groupings beat 1-commit-per-entry.
264
285
  5. **Cover uncommitted work.** Don't wait for the user to commit.
265
286
  6. **Never auto-release.** Surface readiness; the user decides.
@@ -98,6 +98,22 @@ dreamcontext tasks create "<descriptive-slug>" --status in_progress --priority m
98
98
 
99
99
  Untracked, genuinely-separate work is invisible to future sessions — always link it. But a smaller slice of existing work belongs *inside* that task, never in a duplicate.
100
100
 
101
+ ### 2.5. Person attribution (multi-person projects only)
102
+
103
+ When the project's `.config.json` `people` array has **>1 entry**, the person responsible for a task's progress this cycle must be recorded as a `person:<slug>` tag in the task's frontmatter `tags` array. Slug is kebab-case matching the roster (e.g., `person:mehmet`, `person:ada`). Determine attribution from the same signals sleep-state uses for Pass B.5 (git `%an` on the commits, self-identification in the session transcript).
104
+
105
+ ```bash
106
+ # Read the current roster
107
+ jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
108
+ ```
109
+
110
+ - **New task**: pass `--person <name>` to `dreamcontext tasks create` (the CLI injects a `person:<slug>` tag automatically).
111
+ - **Existing task**: add the tag directly via Edit on the task frontmatter `tags:` array, or via `dreamcontext tasks insert`.
112
+
113
+ When the person is already tagged on the task, no action is needed — the tag is additive. Do not remove a previously-set `person:` tag for a person who was quiet this cycle; they remain attributed for prior work.
114
+
115
+ **Single-person projects (`.config.json` `people` has 0 or 1 entry): this step is a NO-OP.** Never inject a `person:` tag on a solo project. The output must stay byte-identical to today.
116
+
101
117
  ### 3. Log progress AND reconcile the body — both required
102
118
 
103
119
  **(a) Append a changelog entry** — what happened this session:
@@ -154,6 +170,7 @@ If every task linked to the active version is `completed` (or only `in_review` r
154
170
  - Folded in (no new task): <existing-slug> — broadened scope + added 2 user stories / 1 criterion for <smaller-piece> instead of forking a duplicate
155
171
  - Created: <slug> (status: in_progress, attached to vX.Y.Z) — genuinely separate concern
156
172
  - Body reconciled: <slug> (dropped phase 1 from User Stories; replaced Technical Details auth section)
173
+ - Person attribution: <slug> tagged person:ada (multi-person project, ada drove this cycle's work) | OR: single-person project — no person tags injected
157
174
  - Version readiness: vX.Y.Z — 4/5 tasks ready for review
158
175
  - Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
159
176
  - Skipped: <session_id> had no actionable task signal
@@ -167,3 +184,4 @@ If every task linked to the active version is `completed` (or only `in_review` r
167
184
  4. **Always attach to a planning version.** No orphan work.
168
185
  5. **Stay in your lane.** If you spot non-task work worth preserving, flag it — don't write it.
169
186
  6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
187
+ 7. **Person attribution is multi-person only.** Read `.config.json` `people` first. If 0 or 1 entry, step 2.5 is a complete NO-OP — never inject `person:` tags on solo projects. Derived multi-person status comes from `people.length > 1`; there is no `multiPerson` key to check.
@@ -1,4 +1,4 @@
1
- import{bs as jc,bt as I0,aM as pS,bu as xt,bv as Ip,bw as mS,bx as gS,by as _S,bz as xS,bA as yS,bp as vS,bq as bS,bB as B0,aC as SS,bC as TS,bD as MS,bE as ES,bF as xg,bG as yg,bH as AS,bI as k,bJ as $s,bK as wS,bL as RS,bM as CS,bN as NS}from"./index-flRpQtDj.js";function PS(r){var e=jc(.1),t,n,i;typeof r!="function"&&(r=jc(r==null?0:+r));function s(a){for(var l=0,c=t.length,u;l<c;++l)u=t[l],u.vz+=(i[l]-u.z)*n[l]*a}function o(){if(t){var a,l=t.length;for(n=new Array(l),i=new Array(l),a=0;a<l;++a)n[a]=isNaN(i[a]=+r(t[a],a,t))?0:+e(t[a],a,t)}}return s.initialize=function(a){t=a,o()},s.strength=function(a){return arguments.length?(e=typeof a=="function"?a:jc(+a),o(),s):e},s.z=function(a){return arguments.length?(r=typeof a=="function"?a:jc(+a),o(),s):r},s}/**
1
+ import{bs as jc,bt as I0,aM as pS,bu as xt,bv as Ip,bw as mS,bx as gS,by as _S,bz as xS,bA as yS,bp as vS,bq as bS,bB as B0,aC as SS,bC as TS,bD as MS,bE as ES,bF as xg,bG as yg,bH as AS,bI as k,bJ as $s,bK as wS,bL as RS,bM as CS,bN as NS}from"./index-Bo5CUa_M.js";function PS(r){var e=jc(.1),t,n,i;typeof r!="function"&&(r=jc(r==null?0:+r));function s(a){for(var l=0,c=t.length,u;l<c;++l)u=t[l],u.vz+=(i[l]-u.z)*n[l]*a}function o(){if(t){var a,l=t.length;for(n=new Array(l),i=new Array(l),a=0;a<l;++a)n[a]=isNaN(i[a]=+r(t[a],a,t))?0:+e(t[a],a,t)}}return s.initialize=function(a){t=a,o()},s.strength=function(a){return arguments.length?(e=typeof a=="function"?a:jc(+a),o(),s):e},s.z=function(a){return arguments.length?(r=typeof a=="function"?a:jc(+a),o(),s):r},s}/**
2
2
  * @license
3
3
  * Copyright 2010-2026 Three.js Authors
4
4
  * SPDX-License-Identifier: MIT
@@ -1 +1 @@
1
- import{aJ as A,aK as S,a_ as P,aI as W,bX as ln,bY as gn,bZ as dn,b_ as z,b$ as hn,bS as pn,c0 as G,b1 as N,b6 as m,b9 as b,c1 as An,b0 as K,b4 as _n,c2 as wn,bV as on,aL as V,bT as On,c3 as R}from"./index-flRpQtDj.js";function vn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var U=P?P.prototype:void 0,B=U?U.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return vn(n,k)+"";if(S(n))return B?B.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Pn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function yn(n){return n!==n}function Tn(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function bn(n,r,e){return r===r?Tn(n,r,e):cn(n,yn,e)}function In(n,r){var e=n==null?0:n.length;return!!e&&bn(n,r,0)>-1}function x(n){return W(n)?ln(n):gn(n)}var Rn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ln=/^\w*$/;function M(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||S(n)?!0:Ln.test(n)||!Rn.test(n)||r!=null&&n in Object(r)}var Sn=500;function xn(n){var r=dn(n,function(i){return e.size===Sn&&e.clear(),i}),e=r.cache;return r}var Mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$n=/\\(\\)?/g,Cn=xn(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Mn,function(e,i,f,t){r.push(f?t.replace($n,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:M(n,r)?[n]:Cn(Dn(n))}function I(n){if(typeof n=="string"||S(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[I(r[e++])];return e&&e==i?n:void 0}function Fn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var H=P?P.isConcatSpreadable:void 0;function Gn(n){return A(n)||z(n)||!!(H&&n&&n[H])}function Ur(n,r,e,i,f){var t=-1,u=n.length;for(e||(e=Gn),f||(f=[]);++t<u;){var s=n[t];e(s)?rn(f,s):i||(f[f.length]=s)}return f}function Nn(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var u=n[e];r(u,e,n)&&(t[f++]=u)}return t}function mn(){return[]}var Kn=Object.prototype,Un=Kn.propertyIsEnumerable,Z=Object.getOwnPropertySymbols,Bn=Z?function(n){return n==null?[]:(n=Object(n),en(Z(n),function(r){return Un.call(n,r)}))}:mn;function Hn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function q(n){return Hn(n,x,Bn)}var Zn="__lodash_hash_undefined__";function qn(n){return this.__data__.set(n,Zn),this}function Yn(n){return this.__data__.has(n)}function E(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new hn;++r<e;)this.add(n[r])}E.prototype.add=E.prototype.push=qn;E.prototype.has=Yn;function Xn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Jn=1,Qn=2;function fn(n,r,e,i,f,t){var u=e&Jn,s=n.length,a=r.length;if(s!=a&&!(u&&a>s))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,w=e&Qn?new E:void 0;for(t.set(n,r),t.set(r,n);++l<s;){var p=n[l],_=r[l];if(i)var o=u?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(o!==void 0){if(o)continue;d=!1;break}if(w){if(!Xn(r,function(O,v){if(!tn(w,v)&&(p===O||f(p,O,e,i,t)))return w.push(v)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Wn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function $(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var zn=1,Vn=2,kn="[object Boolean]",jn="[object Date]",nr="[object Error]",rr="[object Map]",er="[object Number]",ir="[object RegExp]",tr="[object Set]",fr="[object String]",ur="[object Symbol]",sr="[object ArrayBuffer]",ar="[object DataView]",Y=P?P.prototype:void 0,L=Y?Y.valueOf:void 0;function lr(n,r,e,i,f,t,u){switch(e){case ar:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case sr:return!(n.byteLength!=r.byteLength||!t(new G(n),new G(r)));case kn:case jn:case er:return pn(+n,+r);case nr:return n.name==r.name&&n.message==r.message;case ir:case fr:return n==r+"";case rr:var s=Wn;case tr:var a=i&zn;if(s||(s=$),n.size!=r.size&&!a)return!1;var h=u.get(n);if(h)return h==r;i|=Vn,u.set(n,r);var g=fn(s(n),s(r),i,f,t,u);return u.delete(n),g;case ur:if(L)return L.call(n)==L.call(r)}return!1}var gr=1,dr=Object.prototype,hr=dr.hasOwnProperty;function pr(n,r,e,i,f,t){var u=e&gr,s=q(n),a=s.length,h=q(r),g=h.length;if(a!=g&&!u)return!1;for(var l=a;l--;){var d=s[l];if(!(u?d in r:hr.call(r,d)))return!1}var w=t.get(n),p=t.get(r);if(w&&p)return w==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var o=u;++l<a;){d=s[l];var O=n[d],v=r[d];if(i)var F=u?i(v,O,d,r,n,t):i(O,v,d,n,r,t);if(!(F===void 0?O===v||f(O,v,e,i,t):F)){_=!1;break}o||(o=d=="constructor")}if(_&&!o){var c=n.constructor,y=r.constructor;c!=y&&"constructor"in n&&"constructor"in r&&!(typeof c=="function"&&c instanceof c&&typeof y=="function"&&y instanceof y)&&(_=!1)}return t.delete(n),t.delete(r),_}var Ar=1,X="[object Arguments]",J="[object Array]",T="[object Object]",_r=Object.prototype,Q=_r.hasOwnProperty;function wr(n,r,e,i,f,t){var u=A(n),s=A(r),a=u?J:N(n),h=s?J:N(r);a=a==X?T:a,h=h==X?T:h;var g=a==T,l=h==T,d=a==h;if(d&&m(n)){if(!m(r))return!1;u=!0,g=!1}if(d&&!g)return t||(t=new b),u||An(n)?fn(n,r,e,i,f,t):lr(n,r,a,e,i,f,t);if(!(e&Ar)){var w=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(w||p){var _=w?n.value():n,o=p?r.value():r;return t||(t=new b),f(_,o,e,i,t)}}return d?(t||(t=new b),pr(n,r,e,i,f,t)):!1}function C(n,r,e,i,f){return n===r?!0:n==null||r==null||!K(n)&&!K(r)?n!==n&&r!==r:wr(n,r,e,i,C,f)}var or=1,Or=2;function vr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var u=e[f];if(u[2]?u[1]!==n[u[0]]:!(u[0]in n))return!1}for(;++f<t;){u=e[f];var s=u[0],a=n[s],h=u[1];if(u[2]){if(a===void 0&&!(s in n))return!1}else{var g=new b,l;if(!(l===void 0?C(h,a,or|Or,i,g):l))return!1}}return!0}function un(n){return n===n&&!_n(n)}function Pr(n){for(var r=x(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,un(f)]}return r}function sn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=Pr(n);return r.length==1&&r[0][2]?sn(r[0][0],r[0][1]):function(e){return e===n||vr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function yr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var u=I(r[i]);if(!(t=n!=null&&e(n,u)))break;n=n[u]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&on(u,f)&&(A(n)||z(n)))}function Tr(n,r){return n!=null&&yr(n,r,cr)}var br=1,Ir=2;function Rr(n,r){return M(n)&&un(r)?sn(I(n),r):function(e){var i=Fn(e,n);return i===void 0&&i===r?Tr(e,n):C(r,i,br|Ir)}}function Lr(n){return function(r){return r==null?void 0:r[n]}}function Sr(n){return function(r){return nn(r,n)}}function xr(n){return M(n)?Lr(I(n)):Sr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Rr(n[0],n[1]):Er(n):xr(n)}function Mr(n,r){return n&&On(n,r,x)}function $r(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,u=Object(e);++t<f&&i(u[t],t,u)!==!1;);return e}}var D=$r(Mr);function Cr(n){return typeof n=="function"?n:V}function Br(n,r){var e=A(n)?En:D;return e(n,Cr(r))}function Dr(n,r){var e=[];return D(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Hr(n,r){var e=A(n)?en:Dr;return e(n,an(r))}function Fr(n,r,e,i,f){return f(n,function(t,u,s){e=i?(i=!1,t):r(e,t,u,s)}),e}function Zr(n,r,e){var i=A(n)?Nn:Fr,f=arguments.length<3;return i(n,an(r),e,f,D)}var Gr=1/0,Nr=R&&1/$(new R([,-0]))[1]==Gr?function(n){return new R(n)}:Pn,mr=200;function qr(n,r,e){var i=-1,f=In,t=n.length,u=!0,s=[],a=s;if(t>=mr){var h=r?null:Nr(n);if(h)return $(h);u=!1,f=tn,a=new E}else a=r?[]:s;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,u&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),s.push(g)}else f(a,l,e)||(a!==s&&a.push(l),s.push(g))}return s}export{D as a,Ur as b,an as c,vn as d,rn as e,Hn as f,Bn as g,En as h,q as i,qr as j,x as k,Hr as l,Br as m,cn as n,Cr as o,Mr as p,yr as q,Zr as r,mn as s,j as t,I as u,nn as v,Tr as w,Dn as x};
1
+ import{aJ as A,aK as S,a_ as P,aI as W,bX as ln,bY as gn,bZ as dn,b_ as z,b$ as hn,bS as pn,c0 as G,b1 as N,b6 as m,b9 as b,c1 as An,b0 as K,b4 as _n,c2 as wn,bV as on,aL as V,bT as On,c3 as R}from"./index-Bo5CUa_M.js";function vn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var U=P?P.prototype:void 0,B=U?U.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return vn(n,k)+"";if(S(n))return B?B.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Pn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function yn(n){return n!==n}function Tn(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function bn(n,r,e){return r===r?Tn(n,r,e):cn(n,yn,e)}function In(n,r){var e=n==null?0:n.length;return!!e&&bn(n,r,0)>-1}function x(n){return W(n)?ln(n):gn(n)}var Rn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ln=/^\w*$/;function M(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||S(n)?!0:Ln.test(n)||!Rn.test(n)||r!=null&&n in Object(r)}var Sn=500;function xn(n){var r=dn(n,function(i){return e.size===Sn&&e.clear(),i}),e=r.cache;return r}var Mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$n=/\\(\\)?/g,Cn=xn(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Mn,function(e,i,f,t){r.push(f?t.replace($n,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:M(n,r)?[n]:Cn(Dn(n))}function I(n){if(typeof n=="string"||S(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[I(r[e++])];return e&&e==i?n:void 0}function Fn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var H=P?P.isConcatSpreadable:void 0;function Gn(n){return A(n)||z(n)||!!(H&&n&&n[H])}function Ur(n,r,e,i,f){var t=-1,u=n.length;for(e||(e=Gn),f||(f=[]);++t<u;){var s=n[t];e(s)?rn(f,s):i||(f[f.length]=s)}return f}function Nn(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var u=n[e];r(u,e,n)&&(t[f++]=u)}return t}function mn(){return[]}var Kn=Object.prototype,Un=Kn.propertyIsEnumerable,Z=Object.getOwnPropertySymbols,Bn=Z?function(n){return n==null?[]:(n=Object(n),en(Z(n),function(r){return Un.call(n,r)}))}:mn;function Hn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function q(n){return Hn(n,x,Bn)}var Zn="__lodash_hash_undefined__";function qn(n){return this.__data__.set(n,Zn),this}function Yn(n){return this.__data__.has(n)}function E(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new hn;++r<e;)this.add(n[r])}E.prototype.add=E.prototype.push=qn;E.prototype.has=Yn;function Xn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Jn=1,Qn=2;function fn(n,r,e,i,f,t){var u=e&Jn,s=n.length,a=r.length;if(s!=a&&!(u&&a>s))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,w=e&Qn?new E:void 0;for(t.set(n,r),t.set(r,n);++l<s;){var p=n[l],_=r[l];if(i)var o=u?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(o!==void 0){if(o)continue;d=!1;break}if(w){if(!Xn(r,function(O,v){if(!tn(w,v)&&(p===O||f(p,O,e,i,t)))return w.push(v)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Wn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function $(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var zn=1,Vn=2,kn="[object Boolean]",jn="[object Date]",nr="[object Error]",rr="[object Map]",er="[object Number]",ir="[object RegExp]",tr="[object Set]",fr="[object String]",ur="[object Symbol]",sr="[object ArrayBuffer]",ar="[object DataView]",Y=P?P.prototype:void 0,L=Y?Y.valueOf:void 0;function lr(n,r,e,i,f,t,u){switch(e){case ar:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case sr:return!(n.byteLength!=r.byteLength||!t(new G(n),new G(r)));case kn:case jn:case er:return pn(+n,+r);case nr:return n.name==r.name&&n.message==r.message;case ir:case fr:return n==r+"";case rr:var s=Wn;case tr:var a=i&zn;if(s||(s=$),n.size!=r.size&&!a)return!1;var h=u.get(n);if(h)return h==r;i|=Vn,u.set(n,r);var g=fn(s(n),s(r),i,f,t,u);return u.delete(n),g;case ur:if(L)return L.call(n)==L.call(r)}return!1}var gr=1,dr=Object.prototype,hr=dr.hasOwnProperty;function pr(n,r,e,i,f,t){var u=e&gr,s=q(n),a=s.length,h=q(r),g=h.length;if(a!=g&&!u)return!1;for(var l=a;l--;){var d=s[l];if(!(u?d in r:hr.call(r,d)))return!1}var w=t.get(n),p=t.get(r);if(w&&p)return w==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var o=u;++l<a;){d=s[l];var O=n[d],v=r[d];if(i)var F=u?i(v,O,d,r,n,t):i(O,v,d,n,r,t);if(!(F===void 0?O===v||f(O,v,e,i,t):F)){_=!1;break}o||(o=d=="constructor")}if(_&&!o){var c=n.constructor,y=r.constructor;c!=y&&"constructor"in n&&"constructor"in r&&!(typeof c=="function"&&c instanceof c&&typeof y=="function"&&y instanceof y)&&(_=!1)}return t.delete(n),t.delete(r),_}var Ar=1,X="[object Arguments]",J="[object Array]",T="[object Object]",_r=Object.prototype,Q=_r.hasOwnProperty;function wr(n,r,e,i,f,t){var u=A(n),s=A(r),a=u?J:N(n),h=s?J:N(r);a=a==X?T:a,h=h==X?T:h;var g=a==T,l=h==T,d=a==h;if(d&&m(n)){if(!m(r))return!1;u=!0,g=!1}if(d&&!g)return t||(t=new b),u||An(n)?fn(n,r,e,i,f,t):lr(n,r,a,e,i,f,t);if(!(e&Ar)){var w=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(w||p){var _=w?n.value():n,o=p?r.value():r;return t||(t=new b),f(_,o,e,i,t)}}return d?(t||(t=new b),pr(n,r,e,i,f,t)):!1}function C(n,r,e,i,f){return n===r?!0:n==null||r==null||!K(n)&&!K(r)?n!==n&&r!==r:wr(n,r,e,i,C,f)}var or=1,Or=2;function vr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var u=e[f];if(u[2]?u[1]!==n[u[0]]:!(u[0]in n))return!1}for(;++f<t;){u=e[f];var s=u[0],a=n[s],h=u[1];if(u[2]){if(a===void 0&&!(s in n))return!1}else{var g=new b,l;if(!(l===void 0?C(h,a,or|Or,i,g):l))return!1}}return!0}function un(n){return n===n&&!_n(n)}function Pr(n){for(var r=x(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,un(f)]}return r}function sn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=Pr(n);return r.length==1&&r[0][2]?sn(r[0][0],r[0][1]):function(e){return e===n||vr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function yr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var u=I(r[i]);if(!(t=n!=null&&e(n,u)))break;n=n[u]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&on(u,f)&&(A(n)||z(n)))}function Tr(n,r){return n!=null&&yr(n,r,cr)}var br=1,Ir=2;function Rr(n,r){return M(n)&&un(r)?sn(I(n),r):function(e){var i=Fn(e,n);return i===void 0&&i===r?Tr(e,n):C(r,i,br|Ir)}}function Lr(n){return function(r){return r==null?void 0:r[n]}}function Sr(n){return function(r){return nn(r,n)}}function xr(n){return M(n)?Lr(I(n)):Sr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Rr(n[0],n[1]):Er(n):xr(n)}function Mr(n,r){return n&&On(n,r,x)}function $r(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,u=Object(e);++t<f&&i(u[t],t,u)!==!1;);return e}}var D=$r(Mr);function Cr(n){return typeof n=="function"?n:V}function Br(n,r){var e=A(n)?En:D;return e(n,Cr(r))}function Dr(n,r){var e=[];return D(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Hr(n,r){var e=A(n)?en:Dr;return e(n,an(r))}function Fr(n,r,e,i,f){return f(n,function(t,u,s){e=i?(i=!1,t):r(e,t,u,s)}),e}function Zr(n,r,e){var i=A(n)?Nn:Fr,f=arguments.length<3;return i(n,an(r),e,f,D)}var Gr=1/0,Nr=R&&1/$(new R([,-0]))[1]==Gr?function(n){return new R(n)}:Pn,mr=200;function qr(n,r,e){var i=-1,f=In,t=n.length,u=!0,s=[],a=s;if(t>=mr){var h=r?null:Nr(n);if(h)return $(h);u=!1,f=tn,a=new E}else a=r?[]:s;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,u&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),s.push(g)}else f(a,l,e)||(a!==s&&a.push(l),s.push(g))}return s}export{D as a,Ur as b,an as c,vn as d,rn as e,Hn as f,Bn as g,En as h,q as i,qr as j,x as k,Hr as l,Br as m,cn as n,Cr as o,Mr as p,yr as q,Zr as r,mn as s,j as t,I as u,nn as v,Tr as w,Dn as x};
@@ -1 +1 @@
1
- import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./index-flRpQtDj.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(fn(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<rn)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(on((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./index-Bo5CUa_M.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(fn(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<rn)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(on((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};