dreamcontext 0.17.1 → 0.18.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 (181) hide show
  1. package/README.md +321 -565
  2. package/agents/sleep-product.md +21 -2
  3. package/agents/sleep-state.md +24 -0
  4. package/agents/sleep-tasks.md +16 -0
  5. package/dist/agents/sleep-product.md +21 -2
  6. package/dist/agents/sleep-state.md +24 -0
  7. package/dist/agents/sleep-tasks.md +16 -0
  8. package/dist/dashboard/announcements/dashboard-highlights-0-17-0-18.excalidraw.md +1531 -0
  9. package/dist/dashboard/announcements/goal-skill-v2.excalidraw.md +1490 -0
  10. package/dist/dashboard/announcements/task-manager.excalidraw.md +1217 -0
  11. package/dist/dashboard/announcements/visual-announcements.excalidraw.md +1373 -0
  12. package/dist/dashboard/announcements.json +38 -0
  13. package/dist/dashboard/assets/{BrainCanvas3D-DyF_3yYD.js → BrainCanvas3D-D9G3dOLf.js} +1 -1
  14. package/dist/dashboard/assets/{_baseUniq-Do8VMBA0.js → _baseUniq-Cyshlz4Y.js} +1 -1
  15. package/dist/dashboard/assets/{ar-SA-G6X2FPQ2-DmbXDb2R.js → ar-SA-G6X2FPQ2-qj-2Cbgo.js} +1 -1
  16. package/dist/dashboard/assets/{arc-CwtUBQfU.js → arc-0OnX5WDs.js} +1 -1
  17. package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-O9bOog_f.js → architectureDiagram-Q4EWVU46-Cx3c0nUi.js} +1 -1
  18. package/dist/dashboard/assets/{az-AZ-76LH7QW2-c9Zk10vG.js → az-AZ-76LH7QW2-CBuoh6M3.js} +1 -1
  19. package/dist/dashboard/assets/{bg-BG-XCXSNQG7-uMTg84lX.js → bg-BG-XCXSNQG7-X5QYyZWx.js} +1 -1
  20. package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-BTENXCSO.js → blockDiagram-DXYQGD6D-BwESAg1j.js} +1 -1
  21. package/dist/dashboard/assets/{bn-BD-2XOGV67Q-DUFKHcua.js → bn-BD-2XOGV67Q-DlodQLNR.js} +1 -1
  22. package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-DMXPWRiQ.js → c4Diagram-AHTNJAMY-CopL0lbP.js} +1 -1
  23. package/dist/dashboard/assets/{ca-ES-6MX7JW3Y-BuYX1q89.js → ca-ES-6MX7JW3Y-DfqF6Yhy.js} +1 -1
  24. package/dist/dashboard/assets/channel-BLisRbYb.js +1 -0
  25. package/dist/dashboard/assets/{chunk-4BX2VUAB-DgefvnWS.js → chunk-4BX2VUAB-CRwifLK3.js} +1 -1
  26. package/dist/dashboard/assets/{chunk-4TB4RGXK-BnFO5G1t.js → chunk-4TB4RGXK-uxJYY_64.js} +1 -1
  27. package/dist/dashboard/assets/{chunk-55IACEB6-COm2TYEM.js → chunk-55IACEB6-DhYIp7Oc.js} +1 -1
  28. package/dist/dashboard/assets/{chunk-EDXVE4YY-CtsGCwZp.js → chunk-EDXVE4YY-CCxfcirt.js} +1 -1
  29. package/dist/dashboard/assets/{chunk-FMBD7UC4-cfSvx35j.js → chunk-FMBD7UC4-D7OC8QFC.js} +1 -1
  30. package/dist/dashboard/assets/{chunk-OYMX7WX6-DAhDKteL.js → chunk-OYMX7WX6-CwHgaUQo.js} +1 -1
  31. package/dist/dashboard/assets/{chunk-QZHKN3VN-B5h4qML3.js → chunk-QZHKN3VN-7Idpf6YJ.js} +1 -1
  32. package/dist/dashboard/assets/{chunk-YZCP3GAM-CGp_NiRg.js → chunk-YZCP3GAM-D4Lh0fgr.js} +1 -1
  33. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-CgqeQiHi.js +1 -0
  34. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-CgqeQiHi.js +1 -0
  35. package/dist/dashboard/assets/clone-CQXNMCV5.js +1 -0
  36. package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-Dk7CMFA4.js → cose-bilkent-S5V4N54A-BYcMtJTF.js} +1 -1
  37. package/dist/dashboard/assets/{cs-CZ-2BRQDIVT-zfUTiS_d.js → cs-CZ-2BRQDIVT-rnrpKdSJ.js} +1 -1
  38. package/dist/dashboard/assets/{da-DK-5WZEPLOC-CU14f8NA.js → da-DK-5WZEPLOC-D5OGAvk7.js} +1 -1
  39. package/dist/dashboard/assets/{dagre-KV5264BT-BiMVxC4Q.js → dagre-KV5264BT-V0f1_b4R.js} +1 -1
  40. package/dist/dashboard/assets/{de-DE-XR44H4JA-CDOHAJGo.js → de-DE-XR44H4JA-CDyb8YfL.js} +1 -1
  41. package/dist/dashboard/assets/{diagram-5BDNPKRD-DfJEsVTA.js → diagram-5BDNPKRD-BmpizoaS.js} +1 -1
  42. package/dist/dashboard/assets/{diagram-G4DWMVQ6-CztLHIcY.js → diagram-G4DWMVQ6-ClQg-LTu.js} +1 -1
  43. package/dist/dashboard/assets/{diagram-MMDJMWI5-DqoQLlWK.js → diagram-MMDJMWI5-BkXcDMIV.js} +1 -1
  44. package/dist/dashboard/assets/{diagram-TYMM5635-DvyvQBCc.js → diagram-TYMM5635-BbFiiCM2.js} +1 -1
  45. package/dist/dashboard/assets/{el-GR-BZB4AONW-ChUphbcv.js → el-GR-BZB4AONW-Y1YnKZL0.js} +1 -1
  46. package/dist/dashboard/assets/{erDiagram-SMLLAGMA-D_uSs2_2.js → erDiagram-SMLLAGMA-Dzdv7_l5.js} +1 -1
  47. package/dist/dashboard/assets/{es-ES-U4NZUMDT-BNalBEhb.js → es-ES-U4NZUMDT-D0T536hs.js} +1 -1
  48. package/dist/dashboard/assets/{eu-ES-A7QVB2H4-BMiQyA2y.js → eu-ES-A7QVB2H4-Bfrya0et.js} +1 -1
  49. package/dist/dashboard/assets/{fa-IR-HGAKTJCU-Bd6ZnTSo.js → fa-IR-HGAKTJCU-pYE_hG-L.js} +1 -1
  50. package/dist/dashboard/assets/{fi-FI-Z5N7JZ37-BWAfJadC.js → fi-FI-Z5N7JZ37-D3C-fNyk.js} +1 -1
  51. package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-Bmsp6kyU.js → flowDiagram-DWJPFMVM-CFhyjwKY.js} +1 -1
  52. package/dist/dashboard/assets/{fr-FR-RHASNOE6-CspbYzOW.js → fr-FR-RHASNOE6-CgwnG5JW.js} +1 -1
  53. package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-wEdysXo_.js → ganttDiagram-T4ZO3ILL-BRKRiSzf.js} +1 -1
  54. package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-BEiGpPBj.js → gitGraphDiagram-UUTBAWPF-CTqCK49d.js} +1 -1
  55. package/dist/dashboard/assets/{gl-ES-HMX3MZ6V-CV76vsWr.js → gl-ES-HMX3MZ6V-DjJTqTm3.js} +1 -1
  56. package/dist/dashboard/assets/{graph-CZFIeNHZ.js → graph-D429kSbY.js} +1 -1
  57. package/dist/dashboard/assets/{he-IL-6SHJWFNN-Y1VoXJ_H.js → he-IL-6SHJWFNN-C84FlH6r.js} +1 -1
  58. package/dist/dashboard/assets/{hi-IN-IWLTKZ5I-Crh5S49o.js → hi-IN-IWLTKZ5I-Blhkfum2.js} +1 -1
  59. package/dist/dashboard/assets/{hu-HU-A5ZG7DT2-D4I3gCbp.js → hu-HU-A5ZG7DT2-DLC1JfN-.js} +1 -1
  60. package/dist/dashboard/assets/{id-ID-SAP4L64H-Chvzkuvi.js → id-ID-SAP4L64H-C3pB_IWB.js} +1 -1
  61. package/dist/dashboard/assets/image-FgR93jdt.js +1 -0
  62. package/dist/dashboard/assets/index-2m8ueOUn.js +1 -0
  63. package/dist/dashboard/assets/index-CWwjuihq.css +32 -0
  64. package/dist/dashboard/assets/{index-C7Bo5AQH.js → index-CbOXCDms.js} +1 -1
  65. package/dist/dashboard/assets/index-SJ64pf-4.js +551 -0
  66. package/dist/dashboard/assets/{infoDiagram-42DDH7IO-BzfuDHl4.js → infoDiagram-42DDH7IO-CIzDShDw.js} +1 -1
  67. package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-BVoNJ9VS.js → ishikawaDiagram-UXIWVN3A-CuasYzdX.js} +1 -1
  68. package/dist/dashboard/assets/{it-IT-JPQ66NNP-BH_gN5es.js → it-IT-JPQ66NNP-DGGEoNPu.js} +1 -1
  69. package/dist/dashboard/assets/{ja-JP-DBVTYXUO-DU_WmLVa.js → ja-JP-DBVTYXUO-CEqP9aps.js} +1 -1
  70. package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-DbwICa_a.js → journeyDiagram-VCZTEJTY-DHiq2OTQ.js} +1 -1
  71. package/dist/dashboard/assets/{kaa-6HZHGXH3-KYU9qowM.js → kaa-6HZHGXH3-GOFmTAXq.js} +1 -1
  72. package/dist/dashboard/assets/{kab-KAB-ZGHBKWFO-bjhyiUq5.js → kab-KAB-ZGHBKWFO-B865Wwzu.js} +1 -1
  73. package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-D9XucLs4.js → kanban-definition-6JOO6SKY-BhlTKFbL.js} +1 -1
  74. package/dist/dashboard/assets/{kk-KZ-P5N5QNE5-CYTx_dAZ.js → kk-KZ-P5N5QNE5-CNfuE6b6.js} +1 -1
  75. package/dist/dashboard/assets/{km-KH-HSX4SM5Z-DqsuY4Lf.js → km-KH-HSX4SM5Z-CsmgRWxu.js} +1 -1
  76. package/dist/dashboard/assets/{ko-KR-MTYHY66A-BZe7NywF.js → ko-KR-MTYHY66A-B_02RgEz.js} +1 -1
  77. package/dist/dashboard/assets/{ku-TR-6OUDTVRD-F5d6HFWt.js → ku-TR-6OUDTVRD-JfQA5u05.js} +1 -1
  78. package/dist/dashboard/assets/{layout-CotqU0S9.js → layout-DvrQSvOI.js} +1 -1
  79. package/dist/dashboard/assets/{linear-Dqv87Scf.js → linear-6r0qttLs.js} +1 -1
  80. package/dist/dashboard/assets/{lt-LT-XHIRWOB4-BCCuaPbS.js → lt-LT-XHIRWOB4-DWFUXEdf.js} +1 -1
  81. package/dist/dashboard/assets/{lv-LV-5QDEKY6T-NLGi-vJ6.js → lv-LV-5QDEKY6T-C5yAd0n_.js} +1 -1
  82. package/dist/dashboard/assets/{min-BbJdnc3h.js → min-D_EP9dBf.js} +1 -1
  83. package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-Dk4QySu7.js → mindmap-definition-QFDTVHPH-Col3ao9B.js} +1 -1
  84. package/dist/dashboard/assets/{mr-IN-CRQNXWMA-BnGDIgVN.js → mr-IN-CRQNXWMA-Dwjz0Xdm.js} +1 -1
  85. package/dist/dashboard/assets/{my-MM-5M5IBNSE-CspgYE9_.js → my-MM-5M5IBNSE-EXJDNyjA.js} +1 -1
  86. package/dist/dashboard/assets/{nb-NO-T6EIAALU-BeRPw3hu.js → nb-NO-T6EIAALU-BWm2bgLd.js} +1 -1
  87. package/dist/dashboard/assets/{nl-NL-IS3SIHDZ-C-G-bljM.js → nl-NL-IS3SIHDZ-f8nP-yp-.js} +1 -1
  88. package/dist/dashboard/assets/{nn-NO-6E72VCQL-Ct7VZY8D.js → nn-NO-6E72VCQL-B0c_gCNR.js} +1 -1
  89. package/dist/dashboard/assets/{oc-FR-POXYY2M6-Cv5-C4Qq.js → oc-FR-POXYY2M6-C40PSwAh.js} +1 -1
  90. package/dist/dashboard/assets/{pa-IN-N4M65BXN-DAgkIThL.js → pa-IN-N4M65BXN-DDcgXFkB.js} +1 -1
  91. package/dist/dashboard/assets/{percentages-BXMCSKIN-vidRYabK.js → percentages-BXMCSKIN-MHBQP8nI.js} +7 -7
  92. package/dist/dashboard/assets/{pica-Cy-Xl-mi.js → pica-C5CFA09W.js} +1 -1
  93. package/dist/dashboard/assets/{pieDiagram-DEJITSTG-BnP4-zwd.js → pieDiagram-DEJITSTG-DFHmB0fL.js} +1 -1
  94. package/dist/dashboard/assets/{pl-PL-T2D74RX3-BuJQ3HD-.js → pl-PL-T2D74RX3-yFTBt0Xu.js} +1 -1
  95. package/dist/dashboard/assets/{pt-BR-5N22H2LF-BbAqsvD6.js → pt-BR-5N22H2LF-ilAW3Fdv.js} +1 -1
  96. package/dist/dashboard/assets/{pt-PT-UZXXM6DQ-DzFJedU3.js → pt-PT-UZXXM6DQ-CXHFN95K.js} +1 -1
  97. package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-BXN88cHy.js → quadrantDiagram-34T5L4WZ-CR732_oP.js} +1 -1
  98. package/dist/dashboard/assets/{requirementDiagram-MS252O5E-D34hL42a.js → requirementDiagram-MS252O5E-mKoVG52Z.js} +1 -1
  99. package/dist/dashboard/assets/{ro-RO-JPDTUUEW-BV2-sOiv.js → ro-RO-JPDTUUEW-BKlWpyF4.js} +1 -1
  100. package/dist/dashboard/assets/{ru-RU-B4JR7IUQ-BCL4N9Ej.js → ru-RU-B4JR7IUQ-BGoxlhJm.js} +1 -1
  101. package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-0mFeok-3.js → sankeyDiagram-XADWPNL6-DXipts7M.js} +1 -1
  102. package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-C-5nW5j6.js → sequenceDiagram-FGHM5R23-DFQhU8q7.js} +1 -1
  103. package/dist/dashboard/assets/{si-LK-N5RQ5JYF-CNhaw4jx.js → si-LK-N5RQ5JYF-yDbJWFTH.js} +1 -1
  104. package/dist/dashboard/assets/{sk-SK-C5VTKIMK-mHCphOXu.js → sk-SK-C5VTKIMK-DglyhbNB.js} +1 -1
  105. package/dist/dashboard/assets/{sl-SI-NN7IZMDC--lzgHthQ.js → sl-SI-NN7IZMDC-DPfq0s4I.js} +1 -1
  106. package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-C50iDFqe.js → stateDiagram-FHFEXIEX-Dm50jiEh.js} +1 -1
  107. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-CoSm11sD.js +1 -0
  108. package/dist/dashboard/assets/{subset-shared.chunk-DNsjL37s.js → subset-shared.chunk-OHz6M6ct.js} +1 -1
  109. package/dist/dashboard/assets/{subset-worker.chunk-BaV3r-bl.js → subset-worker.chunk-BzwrOBtO.js} +1 -1
  110. package/dist/dashboard/assets/{sv-SE-XGPEYMSR-ckw8jfGN.js → sv-SE-XGPEYMSR-BLHNwr4k.js} +1 -1
  111. package/dist/dashboard/assets/{ta-IN-2NMHFXQM-CSeNmVhS.js → ta-IN-2NMHFXQM-Dw-6hUpN.js} +1 -1
  112. package/dist/dashboard/assets/{th-TH-HPSO5L25-Cvn1sg_3.js → th-TH-HPSO5L25-DPkcM_k9.js} +1 -1
  113. package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-DRYfuqHT.js → timeline-definition-GMOUNBTQ-BKFNQ_7e.js} +1 -1
  114. package/dist/dashboard/assets/{tr-TR-DEFEU3FU-CyhY22TB.js → tr-TR-DEFEU3FU-rBVsY5RS.js} +1 -1
  115. package/dist/dashboard/assets/{uk-UA-QMV73CPH-BvvAEO6U.js → uk-UA-QMV73CPH-CV6_yTZs.js} +1 -1
  116. package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-Crril7Cj.js → vennDiagram-DHZGUBPP-BZb_r5tY.js} +1 -1
  117. package/dist/dashboard/assets/{vi-VN-M7AON7JQ-c7AwSUZ8.js → vi-VN-M7AON7JQ-CJMgSsLz.js} +1 -1
  118. package/dist/dashboard/assets/{wardley-RL74JXVD-Da5AhSWU.js → wardley-RL74JXVD-DgqjmWyN.js} +1 -1
  119. package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-C4GeB_Df.js → wardleyDiagram-NUSXRM2D-BDpniS9m.js} +1 -1
  120. package/dist/dashboard/assets/webviewWindow-Bwv2421L.js +1 -0
  121. package/dist/dashboard/assets/window-BObcHN8e.js +1 -0
  122. package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-BPCFKXqR.js → xychartDiagram-5P7HB3ND-CCyPcx2A.js} +1 -1
  123. package/dist/dashboard/assets/{zh-CN-LNUGB5OW-BvNiZwKU.js → zh-CN-LNUGB5OW-9LJLF_AC.js} +1 -1
  124. package/dist/dashboard/assets/{zh-HK-E62DVLB3-CCFtoCWb.js → zh-HK-E62DVLB3-IefAiePp.js} +1 -1
  125. package/dist/dashboard/assets/{zh-TW-RAJ6MFWO-bYBr-stu.js → zh-TW-RAJ6MFWO-CHeY9rNZ.js} +1 -1
  126. package/dist/dashboard/index.html +2 -2
  127. package/dist/index.js +4099 -1538
  128. package/dist/skill-packs/agents/goal-implementer.md +42 -1
  129. package/dist/skill-packs/agents/goal-plan-reviewer.md +7 -0
  130. package/dist/skill-packs/agents/goal-planner.md +34 -0
  131. package/dist/skill-packs/catalog.json +31 -21
  132. package/dist/skill-packs/excalidraw/SKILL.md +244 -13
  133. package/dist/skill-packs/excalidraw/examples/Chart Kit.excalidraw.md +15740 -0
  134. package/dist/skill-packs/excalidraw/examples/Wireframe Kit.excalidraw.md +16860 -0
  135. package/dist/skill-packs/excalidraw/examples/atomic_check.js +99 -0
  136. package/dist/skill-packs/excalidraw/examples/chart.spec.json +122 -0
  137. package/dist/skill-packs/excalidraw/examples/chart_board.js +173 -0
  138. package/dist/skill-packs/excalidraw/examples/hello.spec.json +79 -9
  139. package/dist/skill-packs/excalidraw/examples/visual_board.js +82 -0
  140. package/dist/skill-packs/excalidraw/examples/wireframe_board.js +161 -0
  141. package/dist/skill-packs/excalidraw/scripts/build_excalidraw.js +292 -27
  142. package/dist/skill-packs/excalidraw/scripts/lib/charts.js +771 -0
  143. package/dist/skill-packs/excalidraw/scripts/lib/style.js +369 -35
  144. package/dist/skill-packs/excalidraw/scripts/lib/wireframe.js +406 -0
  145. package/dist/skill-packs/goal-skill/SKILL.md +369 -100
  146. package/dist/skill-packs/goal-skill/assets/goal-skill-demo.cjs +51 -0
  147. package/dist/skill-packs/goal-skill/assets/goal-skill-viewer.cjs +181 -0
  148. package/package.json +2 -1
  149. package/skill/references/integrations.md +54 -0
  150. package/skill/references/knowledge-and-recall.md +3 -1
  151. package/skill/references/sleep.md +4 -4
  152. package/skill-packs/agents/goal-implementer.md +42 -1
  153. package/skill-packs/agents/goal-plan-reviewer.md +7 -0
  154. package/skill-packs/agents/goal-planner.md +34 -0
  155. package/skill-packs/catalog.json +31 -21
  156. package/skill-packs/excalidraw/SKILL.md +244 -13
  157. package/skill-packs/excalidraw/examples/Chart Kit.excalidraw.md +15740 -0
  158. package/skill-packs/excalidraw/examples/Wireframe Kit.excalidraw.md +16860 -0
  159. package/skill-packs/excalidraw/examples/atomic_check.js +99 -0
  160. package/skill-packs/excalidraw/examples/chart.spec.json +122 -0
  161. package/skill-packs/excalidraw/examples/chart_board.js +173 -0
  162. package/skill-packs/excalidraw/examples/hello.spec.json +79 -9
  163. package/skill-packs/excalidraw/examples/visual_board.js +82 -0
  164. package/skill-packs/excalidraw/examples/wireframe_board.js +161 -0
  165. package/skill-packs/excalidraw/scripts/build_excalidraw.js +292 -27
  166. package/skill-packs/excalidraw/scripts/lib/charts.js +771 -0
  167. package/skill-packs/excalidraw/scripts/lib/style.js +369 -35
  168. package/skill-packs/excalidraw/scripts/lib/wireframe.js +406 -0
  169. package/skill-packs/goal-skill/SKILL.md +369 -100
  170. package/skill-packs/goal-skill/assets/goal-skill-demo.cjs +51 -0
  171. package/skill-packs/goal-skill/assets/goal-skill-viewer.cjs +181 -0
  172. package/skill-task-manager/SKILL.md +93 -0
  173. package/dist/dashboard/assets/channel-2YfRjala.js +0 -1
  174. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-DB_UnN1h.js +0 -1
  175. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-DB_UnN1h.js +0 -1
  176. package/dist/dashboard/assets/clone-DaDvB3N6.js +0 -1
  177. package/dist/dashboard/assets/index-BIfrbaFS.js +0 -516
  178. package/dist/dashboard/assets/index-BdZ3tppu.css +0 -32
  179. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-eW9-s0Sm.js +0 -1
  180. package/dist/dashboard/assets/webviewWindow-BbG9Cr7f.js +0 -1
  181. package/dist/dashboard/assets/window-DmNpeJAL.js +0 -1
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ // Dummy goal-skill run: drives the live state file through every phase so the
3
+ // viewer (localhost:4747) can be watched end-to-end. No real agents are spawned.
4
+ // node .claude/goal-skill-demo.cjs
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ const FILE = path.join(process.cwd(), '_dream_context', 'tmp', '.goal-skill-live.json');
8
+ fs.mkdirSync(path.dirname(FILE), { recursive: true });
9
+ const started = new Date().toISOString();
10
+ const F = (s) => ({ s });
11
+
12
+ // [seconds-to-hold, phase, iters, impl]
13
+ const BEATS = [
14
+ [8, 'plan', { plan: 1 }, null],
15
+ [8, 'review', { plan: 1, review: 1 }, null],
16
+ [7, 'plan', { plan: 2, review: 1 }, null],
17
+ [7, 'review', { plan: 2, review: 2 }, null],
18
+ [6, 'plan', { plan: 3, review: 2 }, null],
19
+ [6, 'review', { plan: 3, review: 3 }, null],
20
+ [5, 'task', { plan: 3, review: 3 }, null],
21
+ [8, 'impl', { plan: 3, review: 3 }, { wave: 1, waves: 3, forks: [F('run'), F('run'), F('run')] }],
22
+ [5, 'impl', { plan: 3, review: 3 }, { wave: 1, waves: 3, forks: [F('done'), F('run'), F('run')] }],
23
+ [8, 'impl', { plan: 3, review: 3 }, { wave: 2, waves: 3, forks: [F('done'), F('done'), F('done'), F('run'), F('run')] }],
24
+ [6, 'impl', { plan: 3, review: 3 }, { wave: 2, waves: 3, forks: [F('done'), F('done'), F('done'), F('run'), F('fail')] }],
25
+ [6, 'impl', { plan: 3, review: 3 }, { wave: 2, waves: 3, forks: [F('done'), F('done'), F('done'), F('done'), F('run')] }],
26
+ [8, 'impl', { plan: 3, review: 3 }, { wave: 3, waves: 3, forks: [F('done'), F('done'), F('done'), F('done'), F('done'), F('run')] }],
27
+ [7, 'codereview', { plan: 3, review: 3, codereview: 1 }, { wave: 3, waves: 3, forks: Array(6).fill(F('done')) }],
28
+ [6, 'impl', { plan: 3, review: 3, codereview: 2 }, { wave: 3, waves: 3, forks: [...Array(5).fill(F('done')), F('run')] }],
29
+ [6, 'codereview', { plan: 3, review: 3, codereview: 2 }, { wave: 3, waves: 3, forks: Array(6).fill(F('done')) }],
30
+ [7, 'validate', { plan: 3, review: 3, codereview: 2, validate: 1 }, { wave: 3, waves: 3, forks: Array(6).fill(F('done')) }],
31
+ [90, 'done', { plan: 3, review: 3, codereview: 2, validate: 1 }, { wave: 3, waves: 3, forks: Array(6).fill(F('done')) }],
32
+ ];
33
+
34
+ let i = 0;
35
+ function step() {
36
+ if (i >= BEATS.length) {
37
+ fs.rmSync(FILE, { force: true });
38
+ console.log('demo finished — state cleared');
39
+ return;
40
+ }
41
+ const [hold, phase, iters, impl] = BEATS[i];
42
+ const st = { goal: 'demo-dummy-goal', started, updated: new Date().toISOString(), phase, iters };
43
+ // Scope the demo run to the launching session (if any) — same contract as a real run.
44
+ if (process.env.CLAUDE_CODE_SESSION_ID) st.session = process.env.CLAUDE_CODE_SESSION_ID;
45
+ if (impl) st.impl = impl;
46
+ fs.writeFileSync(FILE, JSON.stringify(st));
47
+ console.log(`beat ${i + 1}/${BEATS.length}: ${phase}` + (impl ? ` wave ${impl.wave}/${impl.waves}` : ''));
48
+ i++;
49
+ setTimeout(step, hold * 1000);
50
+ }
51
+ step();
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env node
2
+ // Live Excalidraw-style viewer for a goal-skill v2 run.
3
+ // Serves a hand-drawn animated graph of _dream_context/tmp/.goal-skill-live.json
4
+ // (the same state file the app's live panel reads — single writer: the orchestrator).
5
+ // node .claude/goal-skill-viewer.cjs [port] default port 4747
6
+ const http = require('http');
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+ const { exec } = require('child_process');
10
+
11
+ const PORT = Number(process.argv[2]) || 4747;
12
+ const STATE = path.join(process.cwd(), '_dream_context', 'tmp', '.goal-skill-live.json');
13
+
14
+ const HTML = `<!doctype html><html><head><meta charset="utf-8"><title>goal-skill live</title>
15
+ <style>
16
+ :root { color-scheme: dark; }
17
+ body { margin:0; background:#121217; color:#e8e8ec; font-family:'Chalkboard SE','Comic Sans MS','Segoe Print',cursive;
18
+ display:flex; flex-direction:column; align-items:center; min-height:100vh; }
19
+ header { display:flex; gap:14px; align-items:baseline; padding:18px 0 0; }
20
+ header .mark { color:#b197fc; font-size:22px; font-weight:700; }
21
+ header .goal { color:#aaa; font-size:17px; }
22
+ header .clock { color:#666; font-size:15px; }
23
+ #wrap { width:min(96vw,1400px); }
24
+ svg { width:100%; height:auto; }
25
+ .node rect { stroke-width:2.4px; }
26
+ .node text { font-family:inherit; font-size:17px; font-weight:700; }
27
+ .node .sub { font-size:12.5px; font-weight:400; }
28
+ .pending rect { fill:#1d1d24; stroke:#4a4a55; stroke-dasharray:7 5; }
29
+ .pending text { fill:#666; }
30
+ .done rect { fill:#b2f2bb; stroke:#2f9e44; }
31
+ .done text { fill:#0b2e13; }
32
+ .active text { fill:#101014; }
33
+ .active rect { animation:pulse 1.4s ease-in-out infinite; }
34
+ @keyframes pulse { 0%,100%{ filter:drop-shadow(0 0 3px var(--glow,#4dabf7)); }
35
+ 50%{ filter:drop-shadow(0 0 16px var(--glow,#4dabf7)); } }
36
+ .arrow { stroke:#8a8a95; stroke-width:2.2; fill:none; marker-end:url(#arr); }
37
+ .arrow.dim { stroke:#3a3a44; }
38
+ .loop { stroke-width:2; fill:none; stroke-dasharray:8 6; marker-end:url(#arr); opacity:.35; }
39
+ .loop.hot { opacity:1; animation:flow 1s linear infinite; }
40
+ @keyframes flow { to { stroke-dashoffset:-14; } }
41
+ .heat { font-size:19px; font-weight:800; }
42
+ .sat { stroke:#101014; stroke-width:1.4; }
43
+ .sat.run { animation:blink 1s ease-in-out infinite; }
44
+ @keyframes blink { 50%{ opacity:.35; } }
45
+ .wave { fill:#66d9e8; font-size:14px; }
46
+ #idle { color:#555; font-size:18px; margin-top:8px; display:none; }
47
+ .rough { filter:url(#rough); }
48
+ #donebanner { fill:#2f9e44; font-size:30px; font-weight:800; display:none; }
49
+ </style></head><body>
50
+ <header><span class="mark">&#9068; goal-skill live</span><span class="goal" id="goal"></span><span class="clock" id="clock"></span></header>
51
+ <div id="idle">no active goal-skill run &mdash; waiting&hellip;</div>
52
+ <div id="wrap"><svg viewBox="0 0 1400 430">
53
+ <defs>
54
+ <marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7.5" markerHeight="7.5" orient="auto-start-reverse">
55
+ <path d="M0,0 L10,5 L0,10 z" fill="#8a8a95"/></marker>
56
+ <filter id="rough"><feTurbulence type="fractalNoise" baseFrequency="0.035" numOctaves="2" seed="7" result="n"/>
57
+ <feDisplacementMap in="SourceGraphic" in2="n" scale="2.6"/></filter>
58
+ </defs>
59
+ <g class="rough" id="scene"></g>
60
+ </svg></div>
61
+ <script>
62
+ const PAL = { blue:['#a5d8ff','#1971c2'], yellow:['#ffec99','#f08c00'], mint:['#96f2d7','#087f5b'] };
63
+ const NODES = [
64
+ { id:'plan', label:'PLAN', sub:'planner fork', color:'blue', x:40 },
65
+ { id:'review', label:'REVIEW', sub:'clean judges', color:'yellow', x:262 },
66
+ { id:'task', label:'TASK DOC', sub:'map + registry', color:'mint', x:484 },
67
+ { id:'impl', label:'IMPL', sub:'wave forks', color:'blue', x:706 },
68
+ { id:'codereview', label:'CODE-REV', sub:'clean', color:'yellow', x:928 },
69
+ { id:'validate', label:'VALIDATE', sub:'evidence', color:'yellow', x:1150 },
70
+ ];
71
+ const NY=180, NW=170, NH=74;
72
+ const svgNS='http://www.w3.org/2000/svg';
73
+ const scene=document.getElementById('scene');
74
+ function el(t,a){const e=document.createElementNS(svgNS,t);for(const k in a)e.setAttribute(k,a[k]);return e;}
75
+
76
+ // static skeleton
77
+ NODES.forEach((n,i)=>{
78
+ const g=el('g',{class:'node pending',id:'n-'+n.id});
79
+ g.appendChild(el('rect',{x:n.x,y:NY,width:NW,height:NH,rx:14}));
80
+ const t=el('text',{x:n.x+NW/2,y:NY+32,'text-anchor':'middle'}); t.id='t-'+n.id; g.appendChild(t);
81
+ const s=el('text',{x:n.x+NW/2,y:NY+54,'text-anchor':'middle',class:'sub'}); s.id='s-'+n.id; s.textContent=n.sub; g.appendChild(s);
82
+ scene.appendChild(g);
83
+ if(i<NODES.length-1) scene.appendChild(el('path',{class:'arrow dim',id:'a-'+i,
84
+ d:'M'+(n.x+NW+4)+','+(NY+NH/2)+' L'+(NODES[i+1].x-8)+','+(NY+NH/2)}));
85
+ });
86
+ // loop arcs: review->plan (top), codereview->impl & validate->impl (bottom)
87
+ function arc(id,x1,x2,y,cy){ scene.appendChild(el('path',{class:'loop',id,stroke:'#ffd43b',
88
+ d:'M'+x1+','+y+' Q'+((x1+x2)/2)+','+cy+' '+x2+','+y})); }
89
+ arc('l-review', NODES[1].x+60, NODES[0].x+110, NY-6, NY-120);
90
+ arc('l-codereview', NODES[4].x+60, NODES[3].x+120, NY+NH+6, NY+NH+96);
91
+ arc('l-validate', NODES[5].x+60, NODES[3].x+50, NY+NH+6, NY+NH+150);
92
+ // arc → which iter count it visualizes: the review→plan arc glows with PLAN's revision rounds
93
+ const heats={review:['l-review','plan',(NODES[0].x+110+NODES[1].x+60)/2,NY-70],
94
+ codereview:['l-codereview','codereview',(NODES[3].x+120+NODES[4].x+60)/2,NY+NH+64],
95
+ validate:['l-validate','validate',(NODES[3].x+50+NODES[5].x+60)/2,NY+NH+118]};
96
+ for(const k in heats){const h=el('text',{x:heats[k][2],y:heats[k][3],'text-anchor':'middle',class:'heat'});h.id='h-'+k;scene.appendChild(h);}
97
+ const satg=el('g',{id:'sats'}); scene.appendChild(satg);
98
+ const doneT=el('text',{x:NODES[5].x+NW/2,y:NY-40,'text-anchor':'middle',id:'donebanner'}); doneT.textContent='\\u2714 DONE'; scene.appendChild(doneT);
99
+
100
+ const ORDER=NODES.map(n=>n.id);
101
+ function heatColor(n){ return n>=4?'#ff6b6b':n===3?'#ffa94d':'#ffd43b'; }
102
+
103
+ function render(st){
104
+ const idle=document.getElementById('idle');
105
+ if(!st){ idle.style.display='block'; document.getElementById('goal').textContent='';
106
+ document.getElementById('clock').textContent='';
107
+ NODES.forEach(n=>{document.getElementById('n-'+n.id).setAttribute('class','node pending');
108
+ document.getElementById('t-'+n.id).textContent=n.label;});
109
+ doneT.style.display='none'; satg.innerHTML=''; waveT.textContent='';
110
+ for(const k in heats){document.getElementById('h-'+k).textContent='';
111
+ document.getElementById(heats[k][0]).setAttribute('class','loop');}
112
+ return; }
113
+ idle.style.display='none';
114
+ document.getElementById('goal').textContent=st.goal||'';
115
+ const mins=st.started?Math.max(0,Math.round((Date.now()-Date.parse(st.started))/60000)):null;
116
+ document.getElementById('clock').textContent=(mins!=null?mins+' min':'');
117
+ const cur=st.phase==='done'?ORDER.length:Math.max(0,ORDER.indexOf(st.phase));
118
+ NODES.forEach((n,i)=>{
119
+ const g=document.getElementById('n-'+n.id), t=document.getElementById('t-'+n.id);
120
+ const it=(st.iters||{})[n.id]||0;
121
+ if(st.phase==='done'||i<cur){ g.setAttribute('class','node done'); t.textContent='\\u2714 '+n.label; }
122
+ else if(i===cur){ g.setAttribute('class','node active');
123
+ const [f,s]=PAL[n.color]; const r=g.querySelector('rect');
124
+ r.style.fill=f; r.style.stroke=s; g.style.setProperty('--glow',s); t.textContent='\\u25B6 '+n.label; }
125
+ else { g.setAttribute('class','node pending'); const r=g.querySelector('rect');
126
+ r.style.fill=''; r.style.stroke=''; t.textContent=n.label; }
127
+ if(it>1){ const ts=document.createElementNS(svgNS,'tspan');
128
+ ts.textContent=' \\u00D7'+it; ts.style.fill=heatColor(it); t.appendChild(ts); }
129
+ if(i<NODES.length-1) document.getElementById('a-'+i).setAttribute('class','arrow'+(i<cur?'':' dim'));
130
+ });
131
+ for(const k in heats){
132
+ const n=(st.iters||{})[k]||0; const h=document.getElementById('h-'+k); const l=document.getElementById(heats[k][0]);
133
+ if(n>=2){ h.textContent='\\u00D7'+n; h.style.fill=heatColor(n); l.setAttribute('class','loop hot'); l.style.stroke=heatColor(n); }
134
+ else { h.textContent=''; l.setAttribute('class','loop'); l.style.stroke='#ffd43b'; }
135
+ }
136
+ satg.innerHTML='';
137
+ const forks=(st.impl&&st.impl.forks)||[];
138
+ const cx=NODES[3].x+NW/2, cy=NY+NH/2, RX=112, RY=62;
139
+ forks.forEach((f,i)=>{
140
+ const a=-Math.PI/2+i*(2*Math.PI/Math.max(forks.length,1));
141
+ const col=f.s==='done'?'#69db7c':f.s==='run'?'#ffd43b':f.s==='fail'?'#ff6b6b':'#555';
142
+ satg.appendChild(el('circle',{cx:cx+RX*Math.cos(a),cy:cy+RY*Math.sin(a),r:9,fill:col,
143
+ class:'sat'+(f.s==='run'?' run':'')}));
144
+ });
145
+ document.getElementById('s-impl').textContent=(st.impl&&st.impl.waves)
146
+ ?('wave '+(st.impl.wave||1)+' / '+st.impl.waves):'wave forks';
147
+ doneT.style.display=st.phase==='done'?'block':'none';
148
+ }
149
+ async function tick(){ try{ const r=await fetch('/state',{cache:'no-store'});
150
+ render(r.ok?await r.json():null); }catch(e){ render(null); } }
151
+ tick(); setInterval(tick,800);
152
+ </script></body></html>`;
153
+
154
+ const server = http.createServer((req, res) => {
155
+ if (req.url.startsWith('/state')) {
156
+ try {
157
+ const raw = fs.readFileSync(STATE, 'utf8');
158
+ const st = JSON.parse(raw);
159
+ const upd = Date.parse(st.updated || st.started || 0);
160
+ if (!upd || Date.now() - upd > 3 * 3600 * 1000) throw new Error('stale');
161
+ res.writeHead(200, { 'content-type': 'application/json' });
162
+ return res.end(raw);
163
+ } catch {
164
+ res.writeHead(404); return res.end();
165
+ }
166
+ }
167
+ res.writeHead(200, { 'content-type': 'text/html; charset=utf-8' });
168
+ res.end(HTML);
169
+ });
170
+ server.on('error', (e) => {
171
+ if (e.code === 'EADDRINUSE') {
172
+ console.error('port ' + PORT + ' is already in use — a viewer is probably running: http://localhost:' + PORT);
173
+ process.exit(1);
174
+ }
175
+ throw e;
176
+ });
177
+ server.listen(PORT, '127.0.0.1', () => {
178
+ const url = 'http://localhost:' + PORT;
179
+ console.log('goal-skill live viewer: ' + url);
180
+ if (process.platform === 'darwin' && !process.env.NO_OPEN) exec('open ' + url);
181
+ });
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: task-manager
3
+ description: >
4
+ Load when a Claude session is scoped to ONE dreamcontext task and its job is to MANAGE that
5
+ task document — not to implement it. Triggers: "manage this task", "revise / summarize /
6
+ split this task", "reconcile the acceptance criteria", "tighten the Why", "this task has
7
+ drifted from reality", "/task-manager", or any session opened from a task's Task Manager pane
8
+ in the dashboard (which loads this skill automatically and names the task in its first
9
+ message). You maintain the task: sharpen its prose, split it when it holds two jobs, reconcile
10
+ its status and criteria with what is actually true, and log what you changed. You do NOT write
11
+ product code — that is the delegate flow's job.
12
+ user-invocable: true
13
+ alwaysApply: false
14
+ tags: [tasks, task-manager, revise, summarize, split, status, dreamcontext, task-detail]
15
+ ---
16
+
17
+ # Task Manager — maintain ONE task, in place
18
+
19
+ You are pinned to a single dreamcontext task. The user is looking at that task's document in
20
+ the dashboard right now, and it re-reads the file as you edit it — so your writes are the UI.
21
+
22
+ **Manage ≠ Do.** You maintain the task *document*. You do not implement the task. If the user
23
+ asks you to build the thing, tell them to use **Delegate** (the ▶ button on the task, or
24
+ right-click the card on the board) — that opens a separate agent with the right scope. The one
25
+ exception: reading product code to check whether a criterion is *already true* is management, not
26
+ implementation. Read freely; just don't write outside `_dream_context/`.
27
+
28
+ ## Start here, every session
29
+
30
+ 1. **Read the task first.** It lives at `_dream_context/state/<slug>.md`. Read the whole file
31
+ before you touch anything — frontmatter, Workflow mermaid, Why, User Stories, Acceptance
32
+ Criteria, Constraints & Decisions, Technical Details, Notes, Changelog.
33
+ (There is no `dreamcontext tasks show`. Read the file, or use `dreamcontext tasks list --json`.)
34
+ 2. **Treat `## Constraints & Decisions` as settled law.** Those are decisions the user already
35
+ made, with reasons. Don't re-litigate them or quietly reverse them. If one now looks wrong,
36
+ say so and ask — don't just edit it away.
37
+ 3. **Say what you're about to change before you change it**, in one or two lines. The user is
38
+ watching the document, not a diff.
39
+
40
+ ## Edit through the CLI, never by rewriting the markdown
41
+
42
+ The task file has structure the naked eye doesn't see: frontmatter fields, a Workflow mermaid
43
+ whose nodes must stay in sync with the Acceptance Criteria, a LIFO changelog, and indexes that
44
+ live outside the file. Hand-rewriting the markdown breaks those silently. So:
45
+
46
+ | Intent | Command |
47
+ | --- | --- |
48
+ | Add to a section | `dreamcontext tasks insert <slug> <section> "<content>"` — sections: `why`, `user_stories`, `acceptance_criteria`, `constraints`, `technical_details`, `notes`, `changelog` |
49
+ | Record what you did | `dreamcontext tasks log <slug> "<note>"` |
50
+ | Move the lifecycle | `dreamcontext tasks status <slug> <status> "<reason>"` |
51
+ | Finish it | `dreamcontext tasks complete <slug> "<summary>"` |
52
+ | Split out a child | `dreamcontext tasks create "<name>" …` then set `parent_task` on the child |
53
+ | Retitle | `dreamcontext tasks rename <slug> "<new name>"` (keeps file + slug + remote mapping aligned) |
54
+ | Tags / dates / version / feature / objectives / RICE / custom fields | `dreamcontext tasks tag \| start \| due \| version \| feature \| objectives \| rice \| field` |
55
+
56
+ `Edit`/`Write` on `state/<slug>.md` is a **last resort** — only for prose inside a section that
57
+ no `insert` shape can express, and only after you've read the file. Never touch frontmatter by
58
+ hand; there is a command for every field.
59
+
60
+ **Always finish with `dreamcontext tasks doctor <slug>`.** It verifies the Workflow flowchart is
61
+ still in sync with the Acceptance Criteria. If you added, removed, or reworded a criterion, the
62
+ mermaid needs a matching node — doctor is how you find out you broke it. Green, or keep going.
63
+
64
+ ## The four moves
65
+
66
+ **Revise** — tighten the prose without changing the meaning. Cut hedging, fuse duplicate
67
+ bullets, make each criterion independently testable. If a criterion can't be tested as written,
68
+ that's the bug — rewrite it so it can be, and say what you changed it from.
69
+
70
+ **Summarize** — the `description` frontmatter field is the one-liner. It should say what the
71
+ task *is*, not restate its title. Set it with `dreamcontext tasks field` / the create-time flag,
72
+ and keep it under a sentence.
73
+
74
+ **Split** — when a task holds two independent jobs, create children with
75
+ `dreamcontext tasks create`, set `parent_task` to this slug, move the relevant criteria to the
76
+ children, and leave the parent's Workflow nodes pointing at the split. Don't split just because
77
+ a task is long — split when the halves could ship separately, or be owned by different people.
78
+
79
+ **Status / reconcile** — the honest move. Read the code and check each unticked criterion: is it
80
+ *actually* still open? Tick what's demonstrably true, and say what evidence convinced you. Move
81
+ the status only when the criteria justify it (`dreamcontext tasks status`). Never tick a
82
+ criterion you haven't verified — a green task that isn't done is worse than an honest red one.
83
+
84
+ ## Rules
85
+
86
+ - **The file is the source of truth, and the user is watching it.** Never batch up a mental
87
+ model and dump it at the end; make one coherent change at a time so the doc updates live.
88
+ - **Log what you changed** (`dreamcontext tasks log`) — the changelog is how the next session
89
+ knows why the task looks like this.
90
+ - **Ask when a decision is genuinely forked.** You're in an interactive session with the user
91
+ sitting right there; a question is cheap and a wrong rewrite is not.
92
+ - **Don't invent scope.** Managing a task means the task gets clearer, not bigger. If you notice
93
+ real work nobody has tracked, propose a *new* task rather than growing this one.
@@ -1 +0,0 @@
1
- import{aq as o,ar as n}from"./index-BIfrbaFS.js";const t=(r,a)=>o.lang.round(n.parse(r)[a]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-BnFO5G1t.js";import{_ as i}from"./index-BIfrbaFS.js";import"./chunk-FMBD7UC4-cfSvx35j.js";import"./chunk-YZCP3GAM-CGp_NiRg.js";import"./chunk-55IACEB6-COm2TYEM.js";import"./chunk-EDXVE4YY-CtsGCwZp.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-BnFO5G1t.js";import{_ as i}from"./index-BIfrbaFS.js";import"./chunk-FMBD7UC4-cfSvx35j.js";import"./chunk-YZCP3GAM-CGp_NiRg.js";import"./chunk-55IACEB6-COm2TYEM.js";import"./chunk-EDXVE4YY-CtsGCwZp.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./graph-CZFIeNHZ.js";var e=4;function a(o){return r(o,e)}export{a as c};