dreamcontext 0.10.5 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -0
- package/agents/curator-auditor.md +1 -1
- package/agents/curator-verifier.md +3 -3
- package/agents/curator-worker.md +1 -1
- package/agents/sleep-federation.md +1 -1
- package/agents/sleep-migration.md +1 -1
- package/agents/sleep-product.md +10 -9
- package/agents/sleep-state.md +1 -1
- package/agents/sleep-tasks.md +9 -5
- package/dist/agents/curator-auditor.md +1 -1
- package/dist/agents/curator-verifier.md +3 -3
- package/dist/agents/curator-worker.md +1 -1
- package/dist/agents/sleep-federation.md +1 -1
- package/dist/agents/sleep-migration.md +1 -1
- package/dist/agents/sleep-product.md +10 -9
- package/dist/agents/sleep-state.md +1 -1
- package/dist/agents/sleep-tasks.md +9 -5
- package/dist/dashboard/assets/{BrainCanvas3D-8hG96aAi.js → BrainCanvas3D-BG5EC27O.js} +1 -1
- package/dist/dashboard/assets/{_baseUniq-b4AibH2-.js → _baseUniq-BBdAvxIr.js} +1 -1
- package/dist/dashboard/assets/{ar-SA-G6X2FPQ2-DpGPIe5Z.js → ar-SA-G6X2FPQ2-Cr8uJAl3.js} +1 -1
- package/dist/dashboard/assets/{arc-BHNPUsz3.js → arc-DehvUlnl.js} +1 -1
- package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-IzEd_B2U.js → architectureDiagram-Q4EWVU46-DocWLhJ3.js} +1 -1
- package/dist/dashboard/assets/{az-AZ-76LH7QW2-Ccf6e1ON.js → az-AZ-76LH7QW2-UlZ4eYCI.js} +1 -1
- package/dist/dashboard/assets/{bg-BG-XCXSNQG7-XnDUjubv.js → bg-BG-XCXSNQG7-Er9YEeCL.js} +1 -1
- package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-CEINLAFi.js → blockDiagram-DXYQGD6D-Cg9oDuzC.js} +1 -1
- package/dist/dashboard/assets/{bn-BD-2XOGV67Q-E9FzPBnu.js → bn-BD-2XOGV67Q-Cho39eqB.js} +1 -1
- package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-VrHpmy8U.js → c4Diagram-AHTNJAMY-BUm8oDH_.js} +1 -1
- package/dist/dashboard/assets/{ca-ES-6MX7JW3Y-Cnp7YBQb.js → ca-ES-6MX7JW3Y-CMkem7bw.js} +1 -1
- package/dist/dashboard/assets/channel-Sgeb6qBc.js +1 -0
- package/dist/dashboard/assets/{chunk-4BX2VUAB-CuueCQHq.js → chunk-4BX2VUAB-5zNAwkrB.js} +1 -1
- package/dist/dashboard/assets/{chunk-4TB4RGXK-BhlZWQoi.js → chunk-4TB4RGXK-Bolly_uT.js} +1 -1
- package/dist/dashboard/assets/{chunk-55IACEB6-ClixcVTq.js → chunk-55IACEB6-DYdXQ_w1.js} +1 -1
- package/dist/dashboard/assets/{chunk-EDXVE4YY-DUj1uWsJ.js → chunk-EDXVE4YY-BcDcaZ9P.js} +1 -1
- package/dist/dashboard/assets/{chunk-FMBD7UC4-BZClSbG6.js → chunk-FMBD7UC4-BIVvJRKA.js} +1 -1
- package/dist/dashboard/assets/{chunk-OYMX7WX6-CMMXG2K9.js → chunk-OYMX7WX6-Dsp-XPYC.js} +1 -1
- package/dist/dashboard/assets/{chunk-QZHKN3VN-CI5x9wkp.js → chunk-QZHKN3VN-DHQlULoN.js} +1 -1
- package/dist/dashboard/assets/{chunk-YZCP3GAM-DnpOMFO-.js → chunk-YZCP3GAM-nfLb4HWe.js} +1 -1
- package/dist/dashboard/assets/classDiagram-6PBFFD2Q-DCtc4HRg.js +1 -0
- package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-DCtc4HRg.js +1 -0
- package/dist/dashboard/assets/clone-C1gU65sS.js +1 -0
- package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-C9xnvFgj.js → cose-bilkent-S5V4N54A-DCIbVeFN.js} +1 -1
- package/dist/dashboard/assets/{cs-CZ-2BRQDIVT-BHebgNbB.js → cs-CZ-2BRQDIVT-DyFbnAib.js} +1 -1
- package/dist/dashboard/assets/{da-DK-5WZEPLOC-DYuNSWM8.js → da-DK-5WZEPLOC-BHXqHOuV.js} +1 -1
- package/dist/dashboard/assets/{dagre-KV5264BT-Ck8mmM53.js → dagre-KV5264BT-CL9d19L-.js} +1 -1
- package/dist/dashboard/assets/{de-DE-XR44H4JA-CMw5lMuT.js → de-DE-XR44H4JA-CJTodYJe.js} +1 -1
- package/dist/dashboard/assets/{diagram-5BDNPKRD-L4erno22.js → diagram-5BDNPKRD-BKw8TLKP.js} +1 -1
- package/dist/dashboard/assets/{diagram-G4DWMVQ6-Dkmwa2-B.js → diagram-G4DWMVQ6-DgG0hw4A.js} +1 -1
- package/dist/dashboard/assets/{diagram-MMDJMWI5-v2PnfbZO.js → diagram-MMDJMWI5-BJo4X0Wn.js} +1 -1
- package/dist/dashboard/assets/{diagram-TYMM5635-1ZO4tNjc.js → diagram-TYMM5635-CcR6aJeo.js} +1 -1
- package/dist/dashboard/assets/{el-GR-BZB4AONW-PXD8ArOs.js → el-GR-BZB4AONW-CBB6l2Bg.js} +1 -1
- package/dist/dashboard/assets/{erDiagram-SMLLAGMA-B8gV0kGN.js → erDiagram-SMLLAGMA-B6KYcAaM.js} +1 -1
- package/dist/dashboard/assets/{es-ES-U4NZUMDT-CbfskKe2.js → es-ES-U4NZUMDT-B1QetQmg.js} +1 -1
- package/dist/dashboard/assets/{eu-ES-A7QVB2H4-iqrfeyOI.js → eu-ES-A7QVB2H4-0kZWTDZ_.js} +1 -1
- package/dist/dashboard/assets/{fa-IR-HGAKTJCU-PzU2OiC1.js → fa-IR-HGAKTJCU-BV_G972f.js} +1 -1
- package/dist/dashboard/assets/{fi-FI-Z5N7JZ37-CbFLdQ9f.js → fi-FI-Z5N7JZ37-4uRqjpqj.js} +1 -1
- package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-CKx3j3bI.js → flowDiagram-DWJPFMVM-3-llVL4u.js} +1 -1
- package/dist/dashboard/assets/{fr-FR-RHASNOE6-BuF2MviY.js → fr-FR-RHASNOE6-oiuA60jk.js} +1 -1
- package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-CAbTd_KO.js → ganttDiagram-T4ZO3ILL-CS8zsjp0.js} +1 -1
- package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-Di7htCsA.js → gitGraphDiagram-UUTBAWPF-B0eMvQC7.js} +1 -1
- package/dist/dashboard/assets/{gl-ES-HMX3MZ6V-BqePaODm.js → gl-ES-HMX3MZ6V-CRxgAbK5.js} +1 -1
- package/dist/dashboard/assets/{graph-CC7SYwBm.js → graph-DqQ_drOx.js} +1 -1
- package/dist/dashboard/assets/{he-IL-6SHJWFNN-w9d4AvyL.js → he-IL-6SHJWFNN-BToDYgJ7.js} +1 -1
- package/dist/dashboard/assets/{hi-IN-IWLTKZ5I-BwHo17vR.js → hi-IN-IWLTKZ5I-o-ioqjhK.js} +1 -1
- package/dist/dashboard/assets/{hu-HU-A5ZG7DT2-Dm80xRge.js → hu-HU-A5ZG7DT2-CDW6wTqV.js} +1 -1
- package/dist/dashboard/assets/{id-ID-SAP4L64H-RpPM18i0.js → id-ID-SAP4L64H-ResY2pug.js} +1 -1
- package/dist/dashboard/assets/index-BelyM9a_.css +32 -0
- package/dist/dashboard/assets/{index-sA_NxF_Y.js → index-D71-76eF.js} +1 -1
- package/dist/dashboard/assets/index-DKts-kEI.js +516 -0
- package/dist/dashboard/assets/index-NsrznfmA.js +1 -0
- package/dist/dashboard/assets/{infoDiagram-42DDH7IO-z-1I4Qyj.js → infoDiagram-42DDH7IO-C2THbOkD.js} +1 -1
- package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-DWGoVsQO.js → ishikawaDiagram-UXIWVN3A-CM5Uqs__.js} +1 -1
- package/dist/dashboard/assets/{it-IT-JPQ66NNP-DhOvhKWm.js → it-IT-JPQ66NNP-fJefQ0PG.js} +1 -1
- package/dist/dashboard/assets/{ja-JP-DBVTYXUO-CEZ1K0xn.js → ja-JP-DBVTYXUO-CX5o3NDj.js} +1 -1
- package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-Dqh8uQwc.js → journeyDiagram-VCZTEJTY-8Y11-EOo.js} +1 -1
- package/dist/dashboard/assets/{kaa-6HZHGXH3-DuFoQ8nX.js → kaa-6HZHGXH3-C2vaD2tX.js} +1 -1
- package/dist/dashboard/assets/{kab-KAB-ZGHBKWFO-BkQCP_3o.js → kab-KAB-ZGHBKWFO-VKTEWRZv.js} +1 -1
- package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-DCs65HUc.js → kanban-definition-6JOO6SKY-fdXdNyv1.js} +1 -1
- package/dist/dashboard/assets/{kk-KZ-P5N5QNE5-Dh9BXA8_.js → kk-KZ-P5N5QNE5-B2fu3rFx.js} +1 -1
- package/dist/dashboard/assets/{km-KH-HSX4SM5Z-D1S2EcQ_.js → km-KH-HSX4SM5Z-WkZWPeXS.js} +1 -1
- package/dist/dashboard/assets/{ko-KR-MTYHY66A-DsI3vrEx.js → ko-KR-MTYHY66A-CqdCI7AW.js} +1 -1
- package/dist/dashboard/assets/{ku-TR-6OUDTVRD-CyjK_3XH.js → ku-TR-6OUDTVRD-Dao-7Eyh.js} +1 -1
- package/dist/dashboard/assets/{layout-B_y9BOh6.js → layout-NO-i8A2F.js} +1 -1
- package/dist/dashboard/assets/{linear-BdGSdQOc.js → linear-DfqSzNjQ.js} +1 -1
- package/dist/dashboard/assets/{lt-LT-XHIRWOB4-C6tJka1D.js → lt-LT-XHIRWOB4-BT-wFvV7.js} +1 -1
- package/dist/dashboard/assets/{lv-LV-5QDEKY6T-C_xyL_ee.js → lv-LV-5QDEKY6T-DU4U7Z9Y.js} +1 -1
- package/dist/dashboard/assets/{min-U_KGhNEt.js → min-CEcHmSlm.js} +1 -1
- package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-sXmpEpKw.js → mindmap-definition-QFDTVHPH-BJw02kFe.js} +1 -1
- package/dist/dashboard/assets/{mr-IN-CRQNXWMA-C0TwGtAU.js → mr-IN-CRQNXWMA-1qeodviH.js} +1 -1
- package/dist/dashboard/assets/{my-MM-5M5IBNSE-RlAQCiXW.js → my-MM-5M5IBNSE-CrvbSOvz.js} +1 -1
- package/dist/dashboard/assets/{nb-NO-T6EIAALU-C1JHqr1t.js → nb-NO-T6EIAALU-B_1bglU7.js} +1 -1
- package/dist/dashboard/assets/{nl-NL-IS3SIHDZ-B0BVD_2p.js → nl-NL-IS3SIHDZ-CSkrTKk7.js} +1 -1
- package/dist/dashboard/assets/{nn-NO-6E72VCQL-zQTko94P.js → nn-NO-6E72VCQL-BZk5efFe.js} +1 -1
- package/dist/dashboard/assets/{oc-FR-POXYY2M6-CBZRg6ku.js → oc-FR-POXYY2M6-Bv7XOHck.js} +1 -1
- package/dist/dashboard/assets/{pa-IN-N4M65BXN-7s6qpn6h.js → pa-IN-N4M65BXN-CqwtWDAw.js} +1 -1
- package/dist/dashboard/assets/{percentages-BXMCSKIN-DckRvLSG.js → percentages-BXMCSKIN-FEVpi1aK.js} +7 -7
- package/dist/dashboard/assets/{pica-ByOjSUxE.js → pica-By0ke6np.js} +1 -1
- package/dist/dashboard/assets/{pieDiagram-DEJITSTG-BJJsFOH9.js → pieDiagram-DEJITSTG-CGiIN9rP.js} +1 -1
- package/dist/dashboard/assets/{pl-PL-T2D74RX3-QTzNyi10.js → pl-PL-T2D74RX3-BPL4bpVg.js} +1 -1
- package/dist/dashboard/assets/{pt-BR-5N22H2LF-tntUlote.js → pt-BR-5N22H2LF-LrCGDR4f.js} +1 -1
- package/dist/dashboard/assets/{pt-PT-UZXXM6DQ-B9M5aHl1.js → pt-PT-UZXXM6DQ-MzDeZ8io.js} +1 -1
- package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-BearsU1w.js → quadrantDiagram-34T5L4WZ-6_OTN0xX.js} +1 -1
- package/dist/dashboard/assets/{requirementDiagram-MS252O5E-BixosHER.js → requirementDiagram-MS252O5E-Ck8soX2R.js} +1 -1
- package/dist/dashboard/assets/{ro-RO-JPDTUUEW-qbgXrb57.js → ro-RO-JPDTUUEW-Be8UTIAL.js} +1 -1
- package/dist/dashboard/assets/{ru-RU-B4JR7IUQ-CgX4A1Ib.js → ru-RU-B4JR7IUQ-D6wZSeLr.js} +1 -1
- package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-DMSd55sU.js → sankeyDiagram-XADWPNL6-BDl2kRaQ.js} +1 -1
- package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-D2-Uwrtb.js → sequenceDiagram-FGHM5R23-u0Lxjo21.js} +1 -1
- package/dist/dashboard/assets/{si-LK-N5RQ5JYF-CWEkBvJB.js → si-LK-N5RQ5JYF-BcvqeVKa.js} +1 -1
- package/dist/dashboard/assets/{sk-SK-C5VTKIMK-CG8moyh9.js → sk-SK-C5VTKIMK-BKBcl8fa.js} +1 -1
- package/dist/dashboard/assets/{sl-SI-NN7IZMDC-CsBFEfKt.js → sl-SI-NN7IZMDC-CH8BpLHn.js} +1 -1
- package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-vG3jGBpo.js → stateDiagram-FHFEXIEX-p6FESVEx.js} +1 -1
- package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-s6Ql63bp.js +1 -0
- package/dist/dashboard/assets/{subset-shared.chunk-Bin8VoC6.js → subset-shared.chunk-B4Hz462f.js} +1 -1
- package/dist/dashboard/assets/{subset-worker.chunk-mRsEjVpS.js → subset-worker.chunk-B7VKgsUg.js} +1 -1
- package/dist/dashboard/assets/{sv-SE-XGPEYMSR-BMD7GbQV.js → sv-SE-XGPEYMSR-ClNuCh1A.js} +1 -1
- package/dist/dashboard/assets/{ta-IN-2NMHFXQM-CjZ7GPuA.js → ta-IN-2NMHFXQM-CAnDI3eq.js} +1 -1
- package/dist/dashboard/assets/{th-TH-HPSO5L25-BTE57yWh.js → th-TH-HPSO5L25-Dz-3ZPUJ.js} +1 -1
- package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-Bz7MuXCz.js → timeline-definition-GMOUNBTQ-CIac4xXn.js} +1 -1
- package/dist/dashboard/assets/{tr-TR-DEFEU3FU-CKY-uY5_.js → tr-TR-DEFEU3FU-BDzr5oow.js} +1 -1
- package/dist/dashboard/assets/{uk-UA-QMV73CPH-BuopbANh.js → uk-UA-QMV73CPH-Da9cYKW9.js} +1 -1
- package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-TsesBmH7.js → vennDiagram-DHZGUBPP-BrX9xqo7.js} +1 -1
- package/dist/dashboard/assets/{vi-VN-M7AON7JQ-CLrvMDM6.js → vi-VN-M7AON7JQ-e-doFs6_.js} +1 -1
- package/dist/dashboard/assets/{wardley-RL74JXVD-DlttwW9K.js → wardley-RL74JXVD-Ca-_RvNV.js} +1 -1
- package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-BfZXChhy.js → wardleyDiagram-NUSXRM2D-WO1s20SP.js} +1 -1
- package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-jjeDn8EJ.js → xychartDiagram-5P7HB3ND-BcKK53PD.js} +1 -1
- package/dist/dashboard/assets/{zh-CN-LNUGB5OW-C1MYPzyx.js → zh-CN-LNUGB5OW-C2WmUiS8.js} +1 -1
- package/dist/dashboard/assets/{zh-HK-E62DVLB3-BriaHjNV.js → zh-HK-E62DVLB3-CdwVKtJe.js} +1 -1
- package/dist/dashboard/assets/{zh-TW-RAJ6MFWO-BUDimtjA.js → zh-TW-RAJ6MFWO-B_UG5PdF.js} +1 -1
- package/dist/dashboard/index.html +2 -2
- package/dist/git-sync/askpass.cjs +31 -0
- package/dist/index.js +6279 -1587
- package/dist/templates/AGENTS.md +1 -1
- package/dist/templates/CLAUDE.md +1 -1
- package/dist/templates/feature.md +5 -0
- package/dist/templates/obsidian/graph.json +1 -1
- package/package.json +2 -1
- package/skill/SKILL.md +6 -4
- package/skill/references/cli-reference.md +20 -1
- package/skill/references/integrations.md +45 -1
- package/skill/references/knowledge-and-recall.md +1 -1
- package/skill/references/sleep.md +2 -2
- package/skill/references/tasks-and-features.md +27 -6
- package/skill-curator/SKILL.md +3 -2
- package/skill-deep-research/SKILL.md +2 -2
- package/skill-initializer/SKILL.md +2 -2
- package/skill-sync/SKILL.md +94 -0
- package/skill-sync/references/merge-rules.md +201 -0
- package/dist/dashboard/assets/channel-DwaG7WPN.js +0 -1
- package/dist/dashboard/assets/classDiagram-6PBFFD2Q-COGCH4LQ.js +0 -1
- package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-COGCH4LQ.js +0 -1
- package/dist/dashboard/assets/clone-DwBiydth.js +0 -1
- package/dist/dashboard/assets/index-BK87l45R.js +0 -1
- package/dist/dashboard/assets/index-CkxvR2LH.css +0 -32
- package/dist/dashboard/assets/index-DalMBSek.js +0 -511
- package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-V8xCsZlI.js +0 -1
package/README.md
CHANGED
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
<a href="#desktop-app">Desktop App</a> ·
|
|
29
29
|
<a href="#council">Council</a> ·
|
|
30
30
|
<a href="#memory-recall">Memory Recall</a> ·
|
|
31
|
+
<a href="#lab-insights">Lab</a> ·
|
|
31
32
|
<a href="#federation">Federation</a> ·
|
|
33
|
+
<a href="#brain-cloud-sync">Brain Sync</a> ·
|
|
32
34
|
<a href="#commands">Commands</a> ·
|
|
33
35
|
<a href="DEEP-DIVE.md">Deep Dive</a>
|
|
34
36
|
</p>
|
|
@@ -488,6 +490,29 @@ Hook injection is **ON by default**: top hits are auto-surfaced to the agent on
|
|
|
488
490
|
|
|
489
491
|
**Recent CHANGELOG in the snapshot is tiered**: top 3 entries detailed (summary + ~300 char body), next 10 titles-only under an "Older" subheading. Everything older still lives in `CHANGELOG.json` and is reachable through `memory recall --types changelog`.
|
|
490
492
|
|
|
493
|
+
## Lab (Insights)
|
|
494
|
+
|
|
495
|
+
The numbers that tell you whether the project is working — weekly active users, conversion, revenue, error rate — live in external systems: a product-analytics API, Stripe, a database, a Google Sheet. Getting them into your brain used to mean pasting a figure into a task note, where it went stale the moment you typed it. **Lab** closes that loop. You (or an agent) define a named **insight** — a *curated* metric, never a raw data dump — backed by any HTTP JSON API or a local script, and dreamcontext fetches it, rolls it up, caches the result **in the brain**, and surfaces it to every session.
|
|
496
|
+
|
|
497
|
+
An insight declares what to fetch (a generic **HTTP** adapter or a custom **script**), how to render it (`number` / `line` / `pie` / `raw`), a refresh **TTL**, and optional **tweaks** such as a time range. One command refreshes the cached snapshots:
|
|
498
|
+
|
|
499
|
+
```bash
|
|
500
|
+
dreamcontext lab create weekly-active-users --title "Weekly Active Users" \
|
|
501
|
+
--render line --adapter http --group growth
|
|
502
|
+
dreamcontext lab credentials set analytics_token # gitignored, 0600, never printed
|
|
503
|
+
dreamcontext lab sync --all # refresh every insight (skips fresh unless --force)
|
|
504
|
+
dreamcontext lab show weekly-active-users --json # cached series only — never re-fetches
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
- **Insights, not raw dumps.** A hard cap of **62 points per series** is structural — a year of daily data rolls up to monthly buckets, a month may stay daily. Lab delivers curated metrics to agents and dashboards; it is not a BI tool.
|
|
508
|
+
- **Every session sees the latest value.** Cached snapshots live in the brain, so an insight's latest value and staleness ride the SessionStart snapshot and are recallable by meaning — `dreamcontext memory recall "weekly active users" --types insight` — without knowing the slug.
|
|
509
|
+
- **Measured roadmap progress.** Bind an insight to a roadmap objective's Key Result and `lab sync` writes `metric.current` for you, so the [forecast cascade](#roadmap-objectives--the-okr-board) reflects *measured* progress instead of PO-asserted numbers.
|
|
510
|
+
- **Credentials are gitignore-first.** API keys and tokens are written only through `lab credentials set`, stored gitignored at mode `0600`, and structurally redacted — never logged, never returned by a route, and never printed by `credentials list` (names only).
|
|
511
|
+
- **Custom scripts run locally, with a tripwire.** A `.mjs` script insight executes on your machine with your credentials — the same trust level as the repo itself — so if the script changes, Lab prints a loud change notice *before* it runs again.
|
|
512
|
+
- **No silent half-sync.** When a fetch fails the prior cached series is kept intact, the error is surfaced loudly, and the sync exits non-zero. **Sleep does not run lab sync** (credential exposure, latency, non-determinism) — a bound insight feeds a Key Result through its own `lab sync` instead.
|
|
513
|
+
|
|
514
|
+
The dashboard turns this into a **Lab page**: insights grouped by category, a **number / line / pie / raw** render per insight (hand-rolled SVG, no chart library), per-insight and **sync-all** refresh with live success/error feedback, and inline **tweak editing** to change an insight's range and watch it re-fetch and coarsen granularity. An insight bound to an objective shows a "feeds <objective>" provenance chip.
|
|
515
|
+
|
|
491
516
|
## Federation
|
|
492
517
|
|
|
493
518
|
Most people end up with more than one dreamcontext project. **Federation** lets those projects discover each other and recall across each other **live** — each vault stays the single source of truth for its own knowledge, and sees its peers' canonical knowledge by reference at query time. All opt-in, all local, no server in the middle, and **nothing is ever copied between vaults**.
|
|
@@ -526,6 +551,26 @@ A peer is readable when your connection to it is `out`/`both`, it isn't stale, *
|
|
|
526
551
|
|
|
527
552
|
> **Note — copy-based sync is parked on the roadmap.** Earlier builds pushed a lossy, truncated *digest* into peers at sleep (`federation sync`) and ingested it as `federated: true` copies (`federation drain`). That broke single-source-of-truth: copies went stale the moment the source changed and re-edits bred duplicates. Those verbs are now **inert no-ops** and the `sleep-federation` specialist is no longer dispatched. If a vault still holds old copies, clear them with `federation purge`. A redesigned opt-in offline-mirror mode may return later — its one genuine advantage is surviving a peer going offline, which live read can't.
|
|
528
553
|
|
|
554
|
+
## Brain Cloud Sync
|
|
555
|
+
|
|
556
|
+
Federation lets separate projects read each other. **Brain Cloud Sync** is the other half of team collaboration: it lets a whole team work on the *same* brain. Your `_dream_context/` can become **its own git repository** — separate from the code repo — so tasks, knowledge, and features are pushed, pulled, merged, and reviewed the way you already collaborate on code. It stays local-first the entire time: the brain is still plain markdown and JSON on disk, and git is only the sync transport, not a new database.
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
dreamcontext brain init # Turn _dream_context/ into its own synced repo (separate or in-tree)
|
|
560
|
+
dreamcontext brain status # Mode, remote, and current sync state
|
|
561
|
+
dreamcontext brain sync # Manual fetch → merge → commit → push, outside a sleep cycle
|
|
562
|
+
dreamcontext brain enable # Turn cloud sync on for this vault
|
|
563
|
+
dreamcontext brain disable # Turn it off (the brain stays local)
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
- **Sync rides sleep.** Every `dreamcontext sleep done` automatically runs fetch → merge → commit → push against the brain repo, so your teammates' consolidated context reaches you and yours reaches them with no extra step. A sync failure never fails the sleep.
|
|
567
|
+
- **Deterministic files merge themselves; prose defers to an agent.** JSON (changelog, releases, config) and task status/changelog merge automatically (task changelogs union, the furthest status wins). When two people edit the same *prose* section of a knowledge or feature file, the conflict is handed to a semantic **merge agent** — the `/dream-sync` skill — which reads base/ours/theirs and writes the real merge, then hands back to commit and push.
|
|
568
|
+
- **Two modes.** `separate` is a dedicated brain repo with full auto-sync; **`in-tree`** nests the brain inside the code repo, commits on sleep but **never auto-pushes**, and is the safe default. The scrub gate applies to both.
|
|
569
|
+
- **Nothing secret or machine-local is ever pushed.** A **scrub gate** runs before every commit and push and blocks secrets and absolute local paths. The auth token is never written into the remote URL — git network calls use `GIT_ASKPASS` with a `0600` temp file, so the token never lands in `.git/config`, the environment, or a process argument. Per-machine indexes, caches, and embeddings are gitignored and rebuilt locally, so derived state never causes merge noise.
|
|
570
|
+
- **Private by default, attach is a trust decision.** New brain repos are created **private**. Because a shared brain is a prompt-injection channel, attaching to one prints a loud trust warning and an incoming-diff preview and refuses without an explicit confirmation. Personal attribution rides the existing multi-people awareness (`person:<slug>` tags, changelog authors) rather than per-person file forks.
|
|
571
|
+
|
|
572
|
+
From the desktop **Launcher** the whole flow is terminal-free: **GitHub device-flow login** (with a personal-access-token fallback), **brain-repo discovery** (repos tagged with the `dreamcontext-brain` topic), **one-click create** of a scrubbed private brain repo, the trust-gated **attach** flow for a second machine, a **team-updates badge** that tells you when teammates have pushed, and a Settings **"Cloud sync"** toggle.
|
|
573
|
+
|
|
529
574
|
## Commands
|
|
530
575
|
|
|
531
576
|
### Core
|
|
@@ -657,6 +702,25 @@ dreamcontext tasks sync-hooks install # best-effort post-commit/pr
|
|
|
657
702
|
- **Docs**: illustrated user guide → [docs/clickup.md](docs/clickup.md);
|
|
658
703
|
technical reference → [docs/remote-task-setup.md](docs/remote-task-setup.md).
|
|
659
704
|
|
|
705
|
+
### Lab (insights)
|
|
706
|
+
|
|
707
|
+
```bash
|
|
708
|
+
dreamcontext lab list [--json] # List insights with latest value + staleness
|
|
709
|
+
dreamcontext lab show <slug> [--json] # Show one insight's cached series (never re-fetches)
|
|
710
|
+
dreamcontext lab sync [slug] [--all] [--force] # Refresh cached snapshots (skips fresh unless --force)
|
|
711
|
+
dreamcontext lab create <slug> --title "..." --render number|line|pie|raw --adapter http|script [--group <g>] [--ttl <min>]
|
|
712
|
+
dreamcontext lab tweak <slug> <key> <value> # Adjust a declared tweak (e.g. a time range)
|
|
713
|
+
dreamcontext lab credentials set <key> # Store a source credential (hidden prompt or --value)
|
|
714
|
+
dreamcontext lab credentials list # List credential names only — values are never printed
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
- Insights are **curated metrics, not raw data** — a structural cap of 62 points per series rolls a year of daily data up to monthly buckets. Granularity derives from the resolved range: over 180 days is monthly, 45–180 days weekly, 45 or fewer daily.
|
|
718
|
+
- A source is either the generic **HTTP** adapter (any JSON API — endpoint, method, headers, and body may reference `{{tweak:…}}` and `{{cred:…}}` placeholders, with a JSON-path `extract`) or a **custom `.mjs` script** under `lab/scripts/`. Ready-made PostHog / Sheets adapters are not shipped; the generic HTTP adapter and scripts cover the same ground.
|
|
719
|
+
- `lab sync` caches to the brain, writes a bound objective's `metric.current` when the insight declares a binding, keeps the prior series on failure, and exits non-zero if any insight failed. **Sleep never runs lab sync.**
|
|
720
|
+
- Credentials live in a gitignored `lab/credentials.json` (mode `0600`) written only through `lab credentials set`; `doctor` warns when a manifest names a credential you haven't set and fails if the file exists but isn't gitignored.
|
|
721
|
+
|
|
722
|
+
See the [Lab (Insights)](#lab-insights) section above for the full workflow.
|
|
723
|
+
|
|
660
724
|
### Features
|
|
661
725
|
|
|
662
726
|
```bash
|
|
@@ -794,6 +858,22 @@ dreamcontext federation purge --all # Remove leftover federated:true copies
|
|
|
794
858
|
|
|
795
859
|
See the [Federation](#federation) section above for the full workflow.
|
|
796
860
|
|
|
861
|
+
### Brain (cloud sync)
|
|
862
|
+
|
|
863
|
+
```bash
|
|
864
|
+
dreamcontext brain init # Make _dream_context/ its own synced git repo
|
|
865
|
+
dreamcontext brain status # Show mode (separate | in-tree), remote, and sync state
|
|
866
|
+
dreamcontext brain sync # Manual fetch → merge → commit → push outside a sleep cycle
|
|
867
|
+
dreamcontext brain enable # Turn cloud sync on for this vault
|
|
868
|
+
dreamcontext brain disable # Turn cloud sync off (the brain stays local)
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
- `separate` mode is a dedicated brain repo with full post-`sleep done` auto-sync; **`in-tree`** (the safe default) nests the brain in the code repo, commits on sleep, and never auto-pushes.
|
|
872
|
+
- Every `sleep done` runs fetch → merge → commit → push; a scrub gate blocks secrets and absolute paths before every push, and the token is supplied via `GIT_ASKPASS` (never in the remote URL). Prose conflicts defer to the `/dream-sync` merge agent; JSON and task status merge automatically.
|
|
873
|
+
- Device-flow GitHub login, brain-repo discovery, one-click create, the trust-gated attach flow, and a Settings "Cloud sync" toggle are all available from the desktop Launcher.
|
|
874
|
+
|
|
875
|
+
See the [Brain Cloud Sync](#brain-cloud-sync) section above for the full workflow.
|
|
876
|
+
|
|
797
877
|
### Desktop App (macOS)
|
|
798
878
|
|
|
799
879
|
```bash
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: curator-auditor
|
|
3
3
|
description: >
|
|
4
4
|
Read-only audit specialist for the curator skill. Scans ONE domain of an existing
|
|
5
|
-
dreamcontext brain (knowledge / single-source-of-truth / features / tasks / versions)
|
|
5
|
+
dreamcontext brain (knowledge / single-source-of-truth / features / tasks / versions / objectives)
|
|
6
6
|
against the conventions that are CURRENT AT RUN TIME — read from the live `dreamcontext`
|
|
7
7
|
skill, `taxonomy vocab`, and the soul — and returns a structured REORG FINDINGS list:
|
|
8
8
|
every drifted artifact mapped to `source → action → target` (MOVE / MERGE / SPLIT /
|
|
@@ -52,9 +52,9 @@ Run the **real checks** and return a verdict with evidence. Do not reason about
|
|
|
52
52
|
description + tags; no orphaned/empty entries; moved files round-trip (no dangling slugs).
|
|
53
53
|
3. **Zero duplicate-topic knowledge.** No two knowledge files cover the same subject. Spot-check
|
|
54
54
|
by clustering titles/tags and reading the suspected pairs — a survived near-duplicate is a FAIL.
|
|
55
|
-
4. **Zero topic-as-both.** No topic exists as BOTH a `
|
|
56
|
-
`knowledge/**/<x>.md`. Cross-list feature names against
|
|
57
|
-
that isn't a deliberate feature→knowledge *reference* is a FAIL.
|
|
55
|
+
4. **Zero topic-as-both.** No topic exists as BOTH a `knowledge/features/<x>.md` (typed knowledge,
|
|
56
|
+
`type: feature`) and a non-feature `knowledge/**/<x>.md`. Cross-list feature names against other
|
|
57
|
+
knowledge slugs/titles; any collision that isn't a deliberate feature→knowledge *reference* is a FAIL.
|
|
58
58
|
5. **Statuses reflect reality.** No task in `todo`/`in_progress` that is demonstrably finished
|
|
59
59
|
(cross-check the changelog / releases / code). Feature + version/release statuses are internally
|
|
60
60
|
consistent. Cite the evidence for any status you assert is wrong.
|
package/agents/curator-worker.md
CHANGED
|
@@ -35,7 +35,7 @@ skills:
|
|
|
35
35
|
|
|
36
36
|
- **dreamcontext** — the CLI surface that keeps the brain coherent: `knowledge move`,
|
|
37
37
|
`knowledge merge`, `knowledge create`, `features create`/`features set`, `tasks status`,
|
|
38
|
-
`tasks create`, `taxonomy add`, `core releases
|
|
38
|
+
`tasks create`, `taxonomy add`, `core releases`, `roadmap objective edit`/`depend`/`undepend` (objectives are PO-authored — only status/dependency/link hygiene, never rewrite their prose). Structural ops go through the CLI so
|
|
39
39
|
frontmatter, LIFO ordering, the knowledge index, and `[[wikilinks]]` are all kept consistent.
|
|
40
40
|
The feature-vs-knowledge boundary and folder conventions come from here too.
|
|
41
41
|
|
|
@@ -8,7 +8,7 @@ description: >
|
|
|
8
8
|
entries. Owns ONLY federation state — never touches native local knowledge,
|
|
9
9
|
tasks, or product files. Order is ALWAYS drain-then-distribute.
|
|
10
10
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
11
|
-
model: sonnet
|
|
11
|
+
model: claude-sonnet-4-5-20250929
|
|
12
12
|
skills:
|
|
13
13
|
- dreamcontext
|
|
14
14
|
---
|
package/agents/sleep-product.md
CHANGED
|
@@ -5,9 +5,10 @@ description: >
|
|
|
5
5
|
files and feature PRDs. Dispatched (optionally) by the main agent during sleep when
|
|
6
6
|
research, novel patterns, named decisions, feature progress, new buildable concepts, or
|
|
7
7
|
staleness flags from sleep-state are present. Creates and reconciles knowledge/*.md and
|
|
8
|
-
|
|
8
|
+
knowledge/features/*.md (typed knowledge, type: feature), processes staleness flags, and
|
|
9
|
+
maintains the knowledge index.
|
|
9
10
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
10
|
-
model: sonnet
|
|
11
|
+
model: claude-sonnet-4-5-20250929
|
|
11
12
|
skills:
|
|
12
13
|
- dreamcontext
|
|
13
14
|
---
|
|
@@ -16,14 +17,14 @@ skills:
|
|
|
16
17
|
|
|
17
18
|
## Skills always loaded
|
|
18
19
|
|
|
19
|
-
- **dreamcontext** — knowledge files use `dreamcontext knowledge create` with the standard tag set (`dreamcontext knowledge tags`); without the skill you'd freelance tags and fragment discovery, and miss the pinned-knowledge auto-load semantics. Feature PRDs use `dreamcontext features create` and structured-inserted via `dreamcontext features insert <name> <section>`. The skill defines the PRD schema (Why / User Stories / Acceptance Criteria / Constraints & Decisions / Technical Details) and the `related_tasks` cross-link to task files.
|
|
20
|
+
- **dreamcontext** — knowledge files use `dreamcontext knowledge create` with the standard tag set (`dreamcontext knowledge tags`); without the skill you'd freelance tags and fragment discovery, and miss the pinned-knowledge auto-load semantics. Feature PRDs use `dreamcontext features create` (deprecated compat alias — writes typed knowledge under `knowledge/features/`) and structured-inserted via `dreamcontext features insert <name> <section>`. The skill defines the PRD schema (Why / User Stories / Acceptance Criteria / Constraints & Decisions / Technical Details) and the `related_tasks` cross-link to task files.
|
|
20
21
|
|
|
21
22
|
You own two retrospective stores:
|
|
22
23
|
|
|
23
24
|
| Domain | Files |
|
|
24
25
|
|---|---|
|
|
25
26
|
| **Knowledge** | `_dream_context/knowledge/*.md` — research worth keeping, decisions worth tracing back to, archived overflow from core |
|
|
26
|
-
| **Features** | `_dream_context/
|
|
27
|
+
| **Features** | `_dream_context/knowledge/features/*.md` — typed knowledge (`type: feature`) PRDs that tie user-visible capabilities to User Stories, Acceptance Criteria, and the tasks that ship them |
|
|
27
28
|
|
|
28
29
|
Both are documentation of *what was built and why*, not in-progress work.
|
|
29
30
|
|
|
@@ -40,7 +41,7 @@ You're optional. The main agent dispatches you when **at least one** of these si
|
|
|
40
41
|
|
|
41
42
|
**Feature signals:**
|
|
42
43
|
- A task slug matches an existing feature PRD filename.
|
|
43
|
-
- `git status` shows changes under `_dream_context/
|
|
44
|
+
- `git status` shows changes under `_dream_context/knowledge/features/`.
|
|
44
45
|
- A session advanced a feature substantially (≥1 acceptance criterion newly met, new milestone).
|
|
45
46
|
- A new buildable concept emerged with **≥2 acceptance criteria** named anywhere in the session.
|
|
46
47
|
- The user explicitly called something "a feature" or said "we should add X".
|
|
@@ -55,7 +56,7 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
|
|
|
55
56
|
|---|---|
|
|
56
57
|
| `_dream_context/knowledge/*.md` (create + edit) | core 0-6 files (sleep-state owns) |
|
|
57
58
|
| `_dream_context/knowledge/data-structures/<product>.md` (schemas, models, API contracts) | task files (sleep-tasks owns) |
|
|
58
|
-
| `_dream_context/
|
|
59
|
+
| `_dream_context/knowledge/features/*.md` (create + edit, typed knowledge) | changelog, releases (sleep-state owns) |
|
|
59
60
|
| | `core/objectives/*.md` (PO-authored roadmap objectives — never edit) |
|
|
60
61
|
| | `knowledge/roadmap/board.md` (AUTO-GENERATED by `dreamcontext roadmap` — never hand-edit; the orchestrator regenerates it each sleep) |
|
|
61
62
|
| `dreamcontext knowledge create --tags "..."` | |
|
|
@@ -97,7 +98,7 @@ Ground the PRD in current truth before editing or creating:
|
|
|
97
98
|
cat _dream_context/state/<related-task>.md
|
|
98
99
|
|
|
99
100
|
# Read existing PRD if updating
|
|
100
|
-
cat _dream_context/
|
|
101
|
+
cat _dream_context/knowledge/features/<name>.md
|
|
101
102
|
|
|
102
103
|
# Inspect the actual code that ships the feature
|
|
103
104
|
git log --oneline --since="$(jq -r '.sleep_started_at // .last_sleep' _dream_context/state/.sleep.json)" -- src/
|
|
@@ -135,7 +136,7 @@ dreamcontext features insert <name> constraints "<decision>"
|
|
|
135
136
|
Create a new PRD when **ANY** of:
|
|
136
137
|
- (a) the session introduced a feature concept with **≥2 acceptance criteria** written down anywhere (task body, conversation summary, sleep notes); OR
|
|
137
138
|
- (b) the user explicitly named something as "a feature" or "we should add X" (or equivalent intent); OR
|
|
138
|
-
- (c) a task `.md` has `feature: <slug>` frontmatter pointing to a non-existent file in `
|
|
139
|
+
- (c) a task `.md` has `feature: <slug>` frontmatter pointing to a non-existent file in `knowledge/features/`.
|
|
139
140
|
|
|
140
141
|
This trigger is intentionally broad. Better to create a thin PRD that gets enriched next cycle than to leave a buildable concept undocumented.
|
|
141
142
|
|
|
@@ -159,7 +160,7 @@ Then Edit the resulting file. Required sections (look at existing PRDs for shape
|
|
|
159
160
|
#### A5. Multi-product awareness
|
|
160
161
|
|
|
161
162
|
If the relevant task has `product: X` in frontmatter, the PRD MAY be product-scoped:
|
|
162
|
-
- Write the PRD to `
|
|
163
|
+
- Write the PRD to `knowledge/features/<slug>.md` (single flat directory, typed knowledge) but include `product: X` in frontmatter so dashboard/CLI filters can route it.
|
|
163
164
|
- Any knowledge updates that emerge from this feature go to `_dream_context/knowledge/products/X.md` (create if missing) **in addition to or instead of** the global knowledge files. Per-product knowledge wins when the content is product-specific; global knowledge wins for cross-cutting topics.
|
|
164
165
|
|
|
165
166
|
### Pass B — Knowledge
|
package/agents/sleep-state.md
CHANGED
|
@@ -8,7 +8,7 @@ description: >
|
|
|
8
8
|
change since the sleep epoch; surfaces release readiness; enforces anti-bloat ceilings;
|
|
9
9
|
flags stale knowledge files for sleep-product to handle.
|
|
10
10
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
11
|
-
model: sonnet
|
|
11
|
+
model: claude-sonnet-4-5-20250929
|
|
12
12
|
skills:
|
|
13
13
|
- dreamcontext
|
|
14
14
|
---
|
package/agents/sleep-tasks.md
CHANGED
|
@@ -6,7 +6,7 @@ description: >
|
|
|
6
6
|
bumps statuses, creates new tasks for untracked work, attaches everything to the active
|
|
7
7
|
planning version.
|
|
8
8
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
9
|
-
model: sonnet
|
|
9
|
+
model: claude-sonnet-4-5-20250929
|
|
10
10
|
skills:
|
|
11
11
|
- dreamcontext
|
|
12
12
|
---
|
|
@@ -26,8 +26,8 @@ You own `_dream_context/state/*.md` and the task lifecycle. The orchestrator gav
|
|
|
26
26
|
| `_dream_context/state/<slug>.md` (task files) | `core/CHANGELOG.json`, `core/RELEASES.json` |
|
|
27
27
|
| `dreamcontext tasks {create,status,log,insert,objectives}` | `core/0-6.*` files |
|
|
28
28
|
| Workflow Mermaid node classes inside task bodies | `knowledge/*.md` |
|
|
29
|
-
| Task `objectives:` links (propose-only — see grooming (d)) | `
|
|
30
|
-
| | `core/objectives/*.md` (PO-authored — never edit) |
|
|
29
|
+
| Task `objectives:` links (propose-only — see grooming (d)) | `knowledge/features/*.md` |
|
|
30
|
+
| | `core/objectives/*.md` (PO-authored — never hand-edit; the ONE exception is refreshing a Key Result's `current` via `dreamcontext roadmap objective metric <slug> --current <n>`) |
|
|
31
31
|
|
|
32
32
|
If a session's work belongs in a different domain (e.g., an architectural decision worth keeping in `2.memory.md`), **mention it in your report** so the orchestrator can confirm the right specialist handled it. Do not edit it yourself.
|
|
33
33
|
|
|
@@ -154,6 +154,8 @@ A fresh session opening this task file should see the *current plan*.
|
|
|
154
154
|
|
|
155
155
|
### 4. Status — review only when genuinely needed
|
|
156
156
|
|
|
157
|
+
**Think hard before you set each task's status here.** The `completed` vs `in_review` call is the one genuinely judgment-heavy decision in this cycle — reason through the specific task's risk, reviewability, and whether any criterion is mechanically unproven before you bump it, rather than pattern-matching on surface cues.
|
|
158
|
+
|
|
157
159
|
Pick the status that matches reality. **Do NOT reflexively bump everything to `in_review`** — that buries the few tasks that actually need the user's eyes under a pile that didn't, and leaves finished work rotting half-closed.
|
|
158
160
|
|
|
159
161
|
| The task this cycle is… | Status |
|
|
@@ -211,7 +213,9 @@ dreamcontext tasks list # every non-completed task, with updated dates
|
|
|
211
213
|
|
|
212
214
|
**(c) Tagging.** Tags drive recall — sharpen them every cycle. Normalize every task's frontmatter `tags` to the taxonomy vocab (`dreamcontext taxonomy vocab`), and *add* missing facets (area / type / feature) where a task is under-tagged. A well-tagged backlog is found; a poorly-tagged one is re-derived blind.
|
|
213
215
|
|
|
214
|
-
**(d) Objective linking (only when `core/objectives/` is non-empty).** Objectives are the PO's OKR roadmap items; tasks link to them many-to-many via the `objectives:` frontmatter list. For each task you touched (or created) whose `objectives:` is **absent or empty**, judge which objective(s) the work genuinely serves — check `dreamcontext roadmap objective list` for the live set — and set them: `dreamcontext tasks objectives <slug> <a,b>` (multiple slugs when one task lifts several outcomes, e.g. revenue AND retention — that's expected, not double-counting). **HARD RULE: a non-empty `objectives:` list is a PO decision — NEVER change or extend it.** If no objective fits, leave the field empty; do not force a link. You only edit the task-side field; `core/objectives/*.md`
|
|
216
|
+
**(d) Objective linking (only when `core/objectives/` is non-empty).** Objectives are the PO's OKR roadmap items; tasks link to them many-to-many via the `objectives:` frontmatter list. For each task you touched (or created) whose `objectives:` is **absent or empty**, judge which objective(s) the work genuinely serves — check `dreamcontext roadmap objective list` for the live set — and set them: `dreamcontext tasks objectives <slug> <a,b>` (multiple slugs when one task lifts several outcomes, e.g. revenue AND retention — that's expected, not double-counting). **HARD RULE: a non-empty `objectives:` list is a PO decision — NEVER change or extend it.** If no objective fits, leave the field empty; do not force a link. You only edit the task-side field; `core/objectives/*.md` prose/title/dates/structure stay PO-authored and off-limits. Rollups/forecasts recompute when the orchestrator runs `dreamcontext roadmap` after your report.
|
|
217
|
+
|
|
218
|
+
**Key Result current — you MAY update it.** When this cycle surfaced a new real observed value for an objective's Key Result metric (e.g. MRR moved to $1,250, active users hit 400) — from the transcript, a file, or a connected system — refresh it: `dreamcontext roadmap objective metric <slug> --current <n>`. This is the ONE write you may make to a `core/objectives/*.md` file, and only through this CLI verb (never hand-edit the frontmatter). Use a value you actually observed — do not invent or estimate a number. The roadmap board regen at the end of sleep will reflect the new progress.
|
|
215
219
|
|
|
216
220
|
Never silently delete a task, and never `completed` a task that was never actually done — for superseded/abandoned/obsoleted work, `in_review` with an explicit reason hands the close decision to the user. List every grooming action in your report.
|
|
217
221
|
|
|
@@ -243,4 +247,4 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/task
|
|
|
243
247
|
6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
|
|
244
248
|
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.
|
|
245
249
|
8. **Normalize tags via taxonomy vocab.** When writing or updating task frontmatter tags, check `dreamcontext taxonomy vocab` and use canonical forms (faceted or bare standard tags); non-canonical tags degrade recall.
|
|
246
|
-
9. **Objectives: propose for empty, never overwrite non-empty.** An existing `objectives:` value is a PO decision that sticks. You fill blanks with judgment; you never revise the PO's linking. Objective files themselves (`core/objectives/`) are
|
|
250
|
+
9. **Objectives: propose for empty, never overwrite non-empty.** An existing `objectives:` value is a PO decision that sticks. You fill blanks with judgment; you never revise the PO's linking. Objective files themselves (`core/objectives/`) are PO-authored — never hand-edit their prose, title, dates, or structure — with the single exception that you may refresh a Key Result's `current` via `dreamcontext roadmap objective metric <slug> --current` when you observed a new real value (see grooming (d)).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: curator-auditor
|
|
3
3
|
description: >
|
|
4
4
|
Read-only audit specialist for the curator skill. Scans ONE domain of an existing
|
|
5
|
-
dreamcontext brain (knowledge / single-source-of-truth / features / tasks / versions)
|
|
5
|
+
dreamcontext brain (knowledge / single-source-of-truth / features / tasks / versions / objectives)
|
|
6
6
|
against the conventions that are CURRENT AT RUN TIME — read from the live `dreamcontext`
|
|
7
7
|
skill, `taxonomy vocab`, and the soul — and returns a structured REORG FINDINGS list:
|
|
8
8
|
every drifted artifact mapped to `source → action → target` (MOVE / MERGE / SPLIT /
|
|
@@ -52,9 +52,9 @@ Run the **real checks** and return a verdict with evidence. Do not reason about
|
|
|
52
52
|
description + tags; no orphaned/empty entries; moved files round-trip (no dangling slugs).
|
|
53
53
|
3. **Zero duplicate-topic knowledge.** No two knowledge files cover the same subject. Spot-check
|
|
54
54
|
by clustering titles/tags and reading the suspected pairs — a survived near-duplicate is a FAIL.
|
|
55
|
-
4. **Zero topic-as-both.** No topic exists as BOTH a `
|
|
56
|
-
`knowledge/**/<x>.md`. Cross-list feature names against
|
|
57
|
-
that isn't a deliberate feature→knowledge *reference* is a FAIL.
|
|
55
|
+
4. **Zero topic-as-both.** No topic exists as BOTH a `knowledge/features/<x>.md` (typed knowledge,
|
|
56
|
+
`type: feature`) and a non-feature `knowledge/**/<x>.md`. Cross-list feature names against other
|
|
57
|
+
knowledge slugs/titles; any collision that isn't a deliberate feature→knowledge *reference* is a FAIL.
|
|
58
58
|
5. **Statuses reflect reality.** No task in `todo`/`in_progress` that is demonstrably finished
|
|
59
59
|
(cross-check the changelog / releases / code). Feature + version/release statuses are internally
|
|
60
60
|
consistent. Cite the evidence for any status you assert is wrong.
|
|
@@ -35,7 +35,7 @@ skills:
|
|
|
35
35
|
|
|
36
36
|
- **dreamcontext** — the CLI surface that keeps the brain coherent: `knowledge move`,
|
|
37
37
|
`knowledge merge`, `knowledge create`, `features create`/`features set`, `tasks status`,
|
|
38
|
-
`tasks create`, `taxonomy add`, `core releases
|
|
38
|
+
`tasks create`, `taxonomy add`, `core releases`, `roadmap objective edit`/`depend`/`undepend` (objectives are PO-authored — only status/dependency/link hygiene, never rewrite their prose). Structural ops go through the CLI so
|
|
39
39
|
frontmatter, LIFO ordering, the knowledge index, and `[[wikilinks]]` are all kept consistent.
|
|
40
40
|
The feature-vs-knowledge boundary and folder conventions come from here too.
|
|
41
41
|
|
|
@@ -8,7 +8,7 @@ description: >
|
|
|
8
8
|
entries. Owns ONLY federation state — never touches native local knowledge,
|
|
9
9
|
tasks, or product files. Order is ALWAYS drain-then-distribute.
|
|
10
10
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
11
|
-
model: sonnet
|
|
11
|
+
model: claude-sonnet-4-5-20250929
|
|
12
12
|
skills:
|
|
13
13
|
- dreamcontext
|
|
14
14
|
---
|
|
@@ -5,9 +5,10 @@ description: >
|
|
|
5
5
|
files and feature PRDs. Dispatched (optionally) by the main agent during sleep when
|
|
6
6
|
research, novel patterns, named decisions, feature progress, new buildable concepts, or
|
|
7
7
|
staleness flags from sleep-state are present. Creates and reconciles knowledge/*.md and
|
|
8
|
-
|
|
8
|
+
knowledge/features/*.md (typed knowledge, type: feature), processes staleness flags, and
|
|
9
|
+
maintains the knowledge index.
|
|
9
10
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
10
|
-
model: sonnet
|
|
11
|
+
model: claude-sonnet-4-5-20250929
|
|
11
12
|
skills:
|
|
12
13
|
- dreamcontext
|
|
13
14
|
---
|
|
@@ -16,14 +17,14 @@ skills:
|
|
|
16
17
|
|
|
17
18
|
## Skills always loaded
|
|
18
19
|
|
|
19
|
-
- **dreamcontext** — knowledge files use `dreamcontext knowledge create` with the standard tag set (`dreamcontext knowledge tags`); without the skill you'd freelance tags and fragment discovery, and miss the pinned-knowledge auto-load semantics. Feature PRDs use `dreamcontext features create` and structured-inserted via `dreamcontext features insert <name> <section>`. The skill defines the PRD schema (Why / User Stories / Acceptance Criteria / Constraints & Decisions / Technical Details) and the `related_tasks` cross-link to task files.
|
|
20
|
+
- **dreamcontext** — knowledge files use `dreamcontext knowledge create` with the standard tag set (`dreamcontext knowledge tags`); without the skill you'd freelance tags and fragment discovery, and miss the pinned-knowledge auto-load semantics. Feature PRDs use `dreamcontext features create` (deprecated compat alias — writes typed knowledge under `knowledge/features/`) and structured-inserted via `dreamcontext features insert <name> <section>`. The skill defines the PRD schema (Why / User Stories / Acceptance Criteria / Constraints & Decisions / Technical Details) and the `related_tasks` cross-link to task files.
|
|
20
21
|
|
|
21
22
|
You own two retrospective stores:
|
|
22
23
|
|
|
23
24
|
| Domain | Files |
|
|
24
25
|
|---|---|
|
|
25
26
|
| **Knowledge** | `_dream_context/knowledge/*.md` — research worth keeping, decisions worth tracing back to, archived overflow from core |
|
|
26
|
-
| **Features** | `_dream_context/
|
|
27
|
+
| **Features** | `_dream_context/knowledge/features/*.md` — typed knowledge (`type: feature`) PRDs that tie user-visible capabilities to User Stories, Acceptance Criteria, and the tasks that ship them |
|
|
27
28
|
|
|
28
29
|
Both are documentation of *what was built and why*, not in-progress work.
|
|
29
30
|
|
|
@@ -40,7 +41,7 @@ You're optional. The main agent dispatches you when **at least one** of these si
|
|
|
40
41
|
|
|
41
42
|
**Feature signals:**
|
|
42
43
|
- A task slug matches an existing feature PRD filename.
|
|
43
|
-
- `git status` shows changes under `_dream_context/
|
|
44
|
+
- `git status` shows changes under `_dream_context/knowledge/features/`.
|
|
44
45
|
- A session advanced a feature substantially (≥1 acceptance criterion newly met, new milestone).
|
|
45
46
|
- A new buildable concept emerged with **≥2 acceptance criteria** named anywhere in the session.
|
|
46
47
|
- The user explicitly called something "a feature" or said "we should add X".
|
|
@@ -55,7 +56,7 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
|
|
|
55
56
|
|---|---|
|
|
56
57
|
| `_dream_context/knowledge/*.md` (create + edit) | core 0-6 files (sleep-state owns) |
|
|
57
58
|
| `_dream_context/knowledge/data-structures/<product>.md` (schemas, models, API contracts) | task files (sleep-tasks owns) |
|
|
58
|
-
| `_dream_context/
|
|
59
|
+
| `_dream_context/knowledge/features/*.md` (create + edit, typed knowledge) | changelog, releases (sleep-state owns) |
|
|
59
60
|
| | `core/objectives/*.md` (PO-authored roadmap objectives — never edit) |
|
|
60
61
|
| | `knowledge/roadmap/board.md` (AUTO-GENERATED by `dreamcontext roadmap` — never hand-edit; the orchestrator regenerates it each sleep) |
|
|
61
62
|
| `dreamcontext knowledge create --tags "..."` | |
|
|
@@ -97,7 +98,7 @@ Ground the PRD in current truth before editing or creating:
|
|
|
97
98
|
cat _dream_context/state/<related-task>.md
|
|
98
99
|
|
|
99
100
|
# Read existing PRD if updating
|
|
100
|
-
cat _dream_context/
|
|
101
|
+
cat _dream_context/knowledge/features/<name>.md
|
|
101
102
|
|
|
102
103
|
# Inspect the actual code that ships the feature
|
|
103
104
|
git log --oneline --since="$(jq -r '.sleep_started_at // .last_sleep' _dream_context/state/.sleep.json)" -- src/
|
|
@@ -135,7 +136,7 @@ dreamcontext features insert <name> constraints "<decision>"
|
|
|
135
136
|
Create a new PRD when **ANY** of:
|
|
136
137
|
- (a) the session introduced a feature concept with **≥2 acceptance criteria** written down anywhere (task body, conversation summary, sleep notes); OR
|
|
137
138
|
- (b) the user explicitly named something as "a feature" or "we should add X" (or equivalent intent); OR
|
|
138
|
-
- (c) a task `.md` has `feature: <slug>` frontmatter pointing to a non-existent file in `
|
|
139
|
+
- (c) a task `.md` has `feature: <slug>` frontmatter pointing to a non-existent file in `knowledge/features/`.
|
|
139
140
|
|
|
140
141
|
This trigger is intentionally broad. Better to create a thin PRD that gets enriched next cycle than to leave a buildable concept undocumented.
|
|
141
142
|
|
|
@@ -159,7 +160,7 @@ Then Edit the resulting file. Required sections (look at existing PRDs for shape
|
|
|
159
160
|
#### A5. Multi-product awareness
|
|
160
161
|
|
|
161
162
|
If the relevant task has `product: X` in frontmatter, the PRD MAY be product-scoped:
|
|
162
|
-
- Write the PRD to `
|
|
163
|
+
- Write the PRD to `knowledge/features/<slug>.md` (single flat directory, typed knowledge) but include `product: X` in frontmatter so dashboard/CLI filters can route it.
|
|
163
164
|
- Any knowledge updates that emerge from this feature go to `_dream_context/knowledge/products/X.md` (create if missing) **in addition to or instead of** the global knowledge files. Per-product knowledge wins when the content is product-specific; global knowledge wins for cross-cutting topics.
|
|
164
165
|
|
|
165
166
|
### Pass B — Knowledge
|
|
@@ -8,7 +8,7 @@ description: >
|
|
|
8
8
|
change since the sleep epoch; surfaces release readiness; enforces anti-bloat ceilings;
|
|
9
9
|
flags stale knowledge files for sleep-product to handle.
|
|
10
10
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
11
|
-
model: sonnet
|
|
11
|
+
model: claude-sonnet-4-5-20250929
|
|
12
12
|
skills:
|
|
13
13
|
- dreamcontext
|
|
14
14
|
---
|
|
@@ -6,7 +6,7 @@ description: >
|
|
|
6
6
|
bumps statuses, creates new tasks for untracked work, attaches everything to the active
|
|
7
7
|
planning version.
|
|
8
8
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
9
|
-
model: sonnet
|
|
9
|
+
model: claude-sonnet-4-5-20250929
|
|
10
10
|
skills:
|
|
11
11
|
- dreamcontext
|
|
12
12
|
---
|
|
@@ -26,8 +26,8 @@ You own `_dream_context/state/*.md` and the task lifecycle. The orchestrator gav
|
|
|
26
26
|
| `_dream_context/state/<slug>.md` (task files) | `core/CHANGELOG.json`, `core/RELEASES.json` |
|
|
27
27
|
| `dreamcontext tasks {create,status,log,insert,objectives}` | `core/0-6.*` files |
|
|
28
28
|
| Workflow Mermaid node classes inside task bodies | `knowledge/*.md` |
|
|
29
|
-
| Task `objectives:` links (propose-only — see grooming (d)) | `
|
|
30
|
-
| | `core/objectives/*.md` (PO-authored — never edit) |
|
|
29
|
+
| Task `objectives:` links (propose-only — see grooming (d)) | `knowledge/features/*.md` |
|
|
30
|
+
| | `core/objectives/*.md` (PO-authored — never hand-edit; the ONE exception is refreshing a Key Result's `current` via `dreamcontext roadmap objective metric <slug> --current <n>`) |
|
|
31
31
|
|
|
32
32
|
If a session's work belongs in a different domain (e.g., an architectural decision worth keeping in `2.memory.md`), **mention it in your report** so the orchestrator can confirm the right specialist handled it. Do not edit it yourself.
|
|
33
33
|
|
|
@@ -154,6 +154,8 @@ A fresh session opening this task file should see the *current plan*.
|
|
|
154
154
|
|
|
155
155
|
### 4. Status — review only when genuinely needed
|
|
156
156
|
|
|
157
|
+
**Think hard before you set each task's status here.** The `completed` vs `in_review` call is the one genuinely judgment-heavy decision in this cycle — reason through the specific task's risk, reviewability, and whether any criterion is mechanically unproven before you bump it, rather than pattern-matching on surface cues.
|
|
158
|
+
|
|
157
159
|
Pick the status that matches reality. **Do NOT reflexively bump everything to `in_review`** — that buries the few tasks that actually need the user's eyes under a pile that didn't, and leaves finished work rotting half-closed.
|
|
158
160
|
|
|
159
161
|
| The task this cycle is… | Status |
|
|
@@ -211,7 +213,9 @@ dreamcontext tasks list # every non-completed task, with updated dates
|
|
|
211
213
|
|
|
212
214
|
**(c) Tagging.** Tags drive recall — sharpen them every cycle. Normalize every task's frontmatter `tags` to the taxonomy vocab (`dreamcontext taxonomy vocab`), and *add* missing facets (area / type / feature) where a task is under-tagged. A well-tagged backlog is found; a poorly-tagged one is re-derived blind.
|
|
213
215
|
|
|
214
|
-
**(d) Objective linking (only when `core/objectives/` is non-empty).** Objectives are the PO's OKR roadmap items; tasks link to them many-to-many via the `objectives:` frontmatter list. For each task you touched (or created) whose `objectives:` is **absent or empty**, judge which objective(s) the work genuinely serves — check `dreamcontext roadmap objective list` for the live set — and set them: `dreamcontext tasks objectives <slug> <a,b>` (multiple slugs when one task lifts several outcomes, e.g. revenue AND retention — that's expected, not double-counting). **HARD RULE: a non-empty `objectives:` list is a PO decision — NEVER change or extend it.** If no objective fits, leave the field empty; do not force a link. You only edit the task-side field; `core/objectives/*.md`
|
|
216
|
+
**(d) Objective linking (only when `core/objectives/` is non-empty).** Objectives are the PO's OKR roadmap items; tasks link to them many-to-many via the `objectives:` frontmatter list. For each task you touched (or created) whose `objectives:` is **absent or empty**, judge which objective(s) the work genuinely serves — check `dreamcontext roadmap objective list` for the live set — and set them: `dreamcontext tasks objectives <slug> <a,b>` (multiple slugs when one task lifts several outcomes, e.g. revenue AND retention — that's expected, not double-counting). **HARD RULE: a non-empty `objectives:` list is a PO decision — NEVER change or extend it.** If no objective fits, leave the field empty; do not force a link. You only edit the task-side field; `core/objectives/*.md` prose/title/dates/structure stay PO-authored and off-limits. Rollups/forecasts recompute when the orchestrator runs `dreamcontext roadmap` after your report.
|
|
217
|
+
|
|
218
|
+
**Key Result current — you MAY update it.** When this cycle surfaced a new real observed value for an objective's Key Result metric (e.g. MRR moved to $1,250, active users hit 400) — from the transcript, a file, or a connected system — refresh it: `dreamcontext roadmap objective metric <slug> --current <n>`. This is the ONE write you may make to a `core/objectives/*.md` file, and only through this CLI verb (never hand-edit the frontmatter). Use a value you actually observed — do not invent or estimate a number. The roadmap board regen at the end of sleep will reflect the new progress.
|
|
215
219
|
|
|
216
220
|
Never silently delete a task, and never `completed` a task that was never actually done — for superseded/abandoned/obsoleted work, `in_review` with an explicit reason hands the close decision to the user. List every grooming action in your report.
|
|
217
221
|
|
|
@@ -243,4 +247,4 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/task
|
|
|
243
247
|
6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
|
|
244
248
|
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.
|
|
245
249
|
8. **Normalize tags via taxonomy vocab.** When writing or updating task frontmatter tags, check `dreamcontext taxonomy vocab` and use canonical forms (faceted or bare standard tags); non-canonical tags degrade recall.
|
|
246
|
-
9. **Objectives: propose for empty, never overwrite non-empty.** An existing `objectives:` value is a PO decision that sticks. You fill blanks with judgment; you never revise the PO's linking. Objective files themselves (`core/objectives/`) are
|
|
250
|
+
9. **Objectives: propose for empty, never overwrite non-empty.** An existing `objectives:` value is a PO decision that sticks. You fill blanks with judgment; you never revise the PO's linking. Objective files themselves (`core/objectives/`) are PO-authored — never hand-edit their prose, title, dates, or structure — with the single exception that you may refresh a Key Result's `current` via `dreamcontext roadmap objective metric <slug> --current` when you observed a new real value (see grooming (d)).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bt as jc,bu as I0,aH as pS,bv as xt,bw as Ip,bx as mS,by as gS,bz as _S,bA as xS,bB as yS,bq as vS,br as bS,bC as B0,aC as SS,bD as TS,bE as MS,bF as ES,bG as xg,bH as yg,bI as AS,bJ as k,bK as $s,bL as wS,bM as RS,bN as CS,bO as NS}from"./index-
|
|
1
|
+
import{bt as jc,bu as I0,aH as pS,bv as xt,bw as Ip,bx as mS,by as gS,bz as _S,bA as xS,bB as yS,bq as vS,br as bS,bC as B0,aC as SS,bD as TS,bE as MS,bF as ES,bG as xg,bH as yg,bI as AS,bJ as k,bK as $s,bL as wS,bM as RS,bN as CS,bO as NS}from"./index-DKts-kEI.js";import{_ as Bi}from"./extends-CF3RwP-h.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{aK as A,aL as S,a_ as P,aJ as W,bY as ln,bZ as gn,b_ as dn,b$ as z,c0 as hn,bT as pn,c1 as G,b1 as N,b6 as m,b9 as R,c2 as An,b0 as U,b4 as _n,c3 as wn,bW as on,aM as V,bU as On,c4 as I}from"./index-
|
|
1
|
+
import{aK as A,aL as S,a_ as P,aJ as W,bY as ln,bZ as gn,b_ as dn,b$ as z,c0 as hn,bT as pn,c1 as G,b1 as N,b6 as m,b9 as R,c2 as An,b0 as U,b4 as _n,c3 as wn,bW as on,aM as V,bU as On,c4 as I}from"./index-DKts-kEI.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 K=P?P.prototype:void 0,B=K?K.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 cn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function En(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 Rn(n,r,e){return r===r?Tn(n,r,e):En(n,yn,e)}function bn(n,r){var e=n==null?0:n.length;return!!e&&Rn(n,r,0)>-1}function x(n){return W(n)?ln(n):gn(n)}var In=/\.|\[(?:[^[\]]*|(["'])(?:(?!\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)||!In.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 b(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[b(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 Kr(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 Un=Object.prototype,Kn=Un.propertyIsEnumerable,Z=Object.getOwnPropertySymbols,Bn=Z?function(n){return n==null?[]:(n=Object(n),en(Z(n),function(r){return Kn.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 c(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new hn;++r<e;)this.add(n[r])}c.prototype.add=c.prototype.push=qn;c.prototype.has=Yn;function Jn(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 Xn=1,Qn=2;function fn(n,r,e,i,f,t){var u=e&Xn,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 c: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(!Jn(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 E=n.constructor,y=r.constructor;E!=y&&"constructor"in n&&"constructor"in r&&!(typeof E=="function"&&E instanceof E&&typeof y=="function"&&y instanceof y)&&(_=!1)}return t.delete(n),t.delete(r),_}var Ar=1,J="[object Arguments]",X="[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?X:N(n),h=s?X:N(r);a=a==J?T:a,h=h==J?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 R),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 R),f(_,o,e,i,t)}}return d?(t||(t=new R),pr(n,r,e,i,f,t)):!1}function C(n,r,e,i,f){return n===r?!0:n==null||r==null||!U(n)&&!U(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 R,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 cr(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 Er(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=b(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,Er)}var Rr=1,br=2;function Ir(n,r){return M(n)&&un(r)?sn(b(n),r):function(e){var i=Fn(e,n);return i===void 0&&i===r?Tr(e,n):C(r,i,Rr|br)}}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(b(n)):Sr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Ir(n[0],n[1]):cr(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)?cn: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=I&&1/$(new I([,-0]))[1]==Gr?function(n){return new I(n)}:Pn,mr=200;function qr(n,r,e){var i=-1,f=bn,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 c}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,Kr as b,an as c,vn as d,rn as e,Hn as f,Bn as g,cn as h,q as i,qr as j,x as k,Hr as l,Br as m,En as n,Cr as o,Mr as p,yr as q,Zr as r,mn as s,j as t,b as u,nn as v,Tr as w,Dn as x};
|