@cleocode/cleo 2026.9.7 → 2026.9.10
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/dist/cli/index.js +3873 -2234
- package/package.json +14 -13
- package/scripts/check-cleo-tarball-size.mjs +105 -0
- package/scripts/copy-studio-dist.mjs +33 -9
- package/studio-dist/client/_app/immutable/chunks/{wI_OOyoh.js → BB7zPpV2.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{D8NsLz6i.js → BOnrCZaR.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{eK8hf4s7.js → BSRBuVG3.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/C6jhAnil.js +1 -0
- package/studio-dist/client/_app/immutable/chunks/C87Q3uxm.js +1 -0
- package/studio-dist/client/_app/immutable/chunks/{DVHIxkgs.js → CLZBEpLY.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{CqF5Lomf.js → CTLGzgdN.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{o1PZ6Kzq.js → CY3heNub.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{RptFUp2P.js → Cge6qiwc.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{BRgWBQlV.js → CnwXLaZJ.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{Bxz2A0ZC.js → DEH43YwF.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/DGftG5oL.js +3 -0
- package/studio-dist/client/_app/immutable/chunks/DX_JOBSO.js +1 -0
- package/studio-dist/client/_app/immutable/chunks/{CEqOYim7.js → DZrdToAH.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/EZwHPWle.js +2 -0
- package/studio-dist/client/_app/immutable/chunks/cWVw9W0E.js +3 -0
- package/studio-dist/client/_app/immutable/chunks/{B9psmq5-.js → rB_71s8h.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{JPJd4fEI.js → rUtW7Hx6.js} +1 -1
- package/studio-dist/client/_app/immutable/entry/app.tvu3-wbp.js +2 -0
- package/studio-dist/client/_app/immutable/entry/start.BS-rpdjH.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{0.CZzEEyVh.js → 0.DMP7swbx.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{1.Bj3Opbua.js → 1.CYZMFpIp.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{10.xe_Mc2Ko.js → 10.3rxHNnSx.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{11.DuKPA7JD.js → 11.B6jWv3Kz.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{12.BoZ_QrUS.js → 12.BrDHeTEq.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{13.DFJiUiv8.js → 13.CE5bd4JV.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{14.eaAlFU4w.js → 14.DgXD2LRx.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{15.BfXgiwMC.js → 15.Cz1KI9Fv.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{16.mEwy9cqh.js → 16.K9wYQPhb.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{17.DP2QtQGn.js → 17.CtUmdfMg.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{18.Bu0054sX.js → 18.mtosd0sL.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{19.UWt6QbCm.js → 19.su55K8y_.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{2.y5jKpHiR.js → 2.mqgFVWFQ.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{20.B1AIHdkP.js → 20.NJuHLxuS.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{21.CpAN71H8.js → 21.BhwhdQCq.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{22.CrYKrN4c.js → 22.BmJEWwER.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{23.pGRaHQjq.js → 23.CAVIJEH-.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{24.BUoUu37z.js → 24.CMuXs5Sy.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/25.DhMBJYAo.js +39 -0
- package/studio-dist/client/_app/immutable/nodes/26.CJ4FA5FS.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{28.DcmYM7lb.js → 28.D64RBcfs.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{29.lbHbMqNO.js → 29.yfuBeH1x.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{3.Dyir4xXj.js → 3.y115j1d5.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{30.DXj0Wm2A.js → 30.1WUv5bh9.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/4.D6vXYBoQ.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{5.VWSdP7oc.js → 5.hjw2O-4e.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{6.Dl-XLwOj.js → 6.CAoDfDt6.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{7.CFuC5L-y.js → 7.CLgPSQ8Z.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{8.BCJ0DhOb.js → 8.zuaO1Hik.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{9.Bq4SUzL9.js → 9.Cdsd85m2.js} +1 -1
- package/studio-dist/client/_app/version.json +1 -1
- package/studio-dist/server/chunks/0-BQvtFOrC.js +41 -0
- package/studio-dist/server/chunks/1-Bx2_yoiK.js +9 -0
- package/studio-dist/server/chunks/{10-DvOD4ksa.js → 10-CYLc3d5x.js} +3 -3
- package/studio-dist/server/chunks/{11-DMnBZ02H.js → 11-DcIYR5vm.js} +3 -3
- package/studio-dist/server/chunks/{12-CCyRyRWX.js → 12-WE1u104t.js} +3 -3
- package/studio-dist/server/chunks/{13-Dx1c3a_X.js → 13-joBDoxhK.js} +3 -3
- package/studio-dist/server/chunks/{14-Bo-dTCaZ.js → 14-Doj5F4uJ.js} +3 -3
- package/studio-dist/server/chunks/{15-BvUNl3KL.js → 15-nQTeHGD1.js} +3 -3
- package/studio-dist/server/chunks/{16-De6EzPSa.js → 16-CcTN0e8k.js} +5 -4
- package/studio-dist/server/chunks/{17-CZNsiZhi.js → 17-DWiFnzES.js} +10 -93
- package/studio-dist/server/chunks/{18-CbxxjZox.js → 18-Dcc9GnPo.js} +5 -4
- package/studio-dist/server/chunks/{19-DqHyladS.js → 19-BAQHPrMB.js} +3 -3
- package/studio-dist/server/chunks/{2-COvmA-ZA.js → 2-DXSVVaej.js} +10 -93
- package/studio-dist/server/chunks/20-DfQlGHPW.js +57 -0
- package/studio-dist/server/chunks/{21-DXK9ptAC.js → 21-qhGjkW41.js} +4 -31
- package/studio-dist/server/chunks/{22-DD5CLWJC.js → 22-Byy16hFA.js} +3 -3
- package/studio-dist/server/chunks/23-CZpFrGp4.js +97 -0
- package/studio-dist/server/chunks/24-EEysaT9T.js +67 -0
- package/studio-dist/server/chunks/{25-CAg6Xcmn.js → 25-CgiYn70L.js} +15 -96
- package/studio-dist/server/chunks/{26-_nfVTvNi.js → 26-Cfd6BaUb.js} +12 -93
- package/studio-dist/server/chunks/{27-C9edghG4.js → 27-Cqzlh9gZ.js} +3 -2
- package/studio-dist/server/chunks/{28-VemTJGyc.js → 28-DeYe2rpm.js} +8 -62
- package/studio-dist/server/chunks/{29-CXP-m29t.js → 29-6pjLM0Z1.js} +10 -93
- package/studio-dist/server/chunks/{3-B8KhfvHp.js → 3-E_fWDAkq.js} +9 -25
- package/studio-dist/server/chunks/{30-QiM1S4cJ.js → 30-Dw317sSW.js} +10 -93
- package/studio-dist/server/chunks/{31-BwdY9NnB.js → 31-Q4kHbp8j.js} +3 -2
- package/studio-dist/server/chunks/{4-CSaG4HjO.js → 4-C9BMSh4K.js} +4 -3
- package/studio-dist/server/chunks/{5-i5ry4y3C.js → 5-C0CF4WKG.js} +3 -3
- package/studio-dist/server/chunks/{6-DR1GWBMT.js → 6-BWyOJust.js} +3 -3
- package/studio-dist/server/chunks/{7-DSNwn3aQ.js → 7-CK4MK5gy.js} +3 -3
- package/studio-dist/server/chunks/{8-Bj0bx07K.js → 8-CiX7Xk9k.js} +3 -3
- package/studio-dist/server/chunks/{9-B3Tz0mZq.js → 9-Be5118w4.js} +3 -3
- package/studio-dist/server/chunks/{HeroHeader-v4Q9vaGr.js → HeroHeader-BrGN5WPw.js} +2 -2
- package/studio-dist/server/chunks/{Sparkline-BJ-GuhRd.js → Sparkline-DU_NVxz9.js} +2 -2
- package/studio-dist/server/chunks/{StatBlock-DHJMmOCx.js → StatBlock-jNsxycS1.js} +2 -2
- package/studio-dist/server/chunks/{Tabs-DzG6Bn9a.js → Tabs-DQKDflnT.js} +2 -2
- package/studio-dist/server/chunks/_dispatch-DTWViLGL.js +145 -0
- package/studio-dist/server/chunks/{_layout.svelte-BEIGQcIv.js → _layout.svelte-CL6GfET2.js} +7 -9
- package/studio-dist/server/chunks/{_page.svelte-al08ovKm.js → _page.svelte-6iMiGR11.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-Byz2djto.js → _page.svelte-B-YXGvAW.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-tYN7_LXI.js → _page.svelte-B5E6RqVb.js} +9 -11
- package/studio-dist/server/chunks/{_page.svelte-UYiF7YBK.js → _page.svelte-BCRyjlk2.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-CCoTp89s.js → _page.svelte-BoYafqft.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-nzffIbBP.js → _page.svelte-C7Wm6_HB.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-C_VSL8NW.js → _page.svelte-Cgqt7ucn.js} +13 -71
- package/studio-dist/server/chunks/{_page.svelte-CophUar3.js → _page.svelte-CqI6hqMm.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-BgwL2Gyu.js → _page.svelte-CvQ2rZZ1.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-l4Z_xjl9.js → _page.svelte-CvTyJEyS.js} +9 -11
- package/studio-dist/server/chunks/{_page.svelte-DOWw416I.js → _page.svelte-CvzAttO9.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-DYNorA0S.js → _page.svelte-Cx9Ptecp.js} +10 -67
- package/studio-dist/server/chunks/{_page.svelte-Wfx7ww_h.js → _page.svelte-Cx9dPjsT.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-2cgtvHwW.js → _page.svelte-DGN5j-At.js} +13 -71
- package/studio-dist/server/chunks/{_page.svelte-BVVTrzTL.js → _page.svelte-DaheDIRs.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-M5D2QnMS.js → _page.svelte-Dm8y5a8S.js} +10 -67
- package/studio-dist/server/chunks/{_page.svelte-B_pq-Z98.js → _page.svelte-DqXxyNsF.js} +7 -7
- package/studio-dist/server/chunks/{_page.svelte-C3aIui4o.js → _page.svelte-DqsbnAhk.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-ksTJUXce.js → _page.svelte-Dt0_c1T-.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-bGhsrIjS.js → _page.svelte-Dv6iwhu7.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-BXyoMME1.js → _page.svelte-GPiHej3P.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-CYDjW1R0.js → _page.svelte-LuRm8XxE.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-Clbkk1gm.js → _page.svelte-Z7nL9SC-.js} +8 -9
- package/studio-dist/server/chunks/{_page.svelte-DUWbZjC7.js → _page.svelte-_kntHS6v.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-BIlhmugm.js → _page.svelte-eiomv6Pa.js} +11 -13
- package/studio-dist/server/chunks/{_page.svelte-9OQphlnm.js → _page.svelte-jXJbd8Mx.js} +14 -69
- package/studio-dist/server/chunks/{_page.svelte-CHzXuw2Q.js → _page.svelte-me5SUosG.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-DSzRdt1U.js → _server.ts--2m_U4SL.js} +11 -94
- package/studio-dist/server/chunks/{_server.ts-ujoDR2_g.js → _server.ts--sGLmBsz.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-k2fApwOp.js → _server.ts-0ukyuE0I.js} +5 -60
- package/studio-dist/server/chunks/_server.ts-1eW2mTeh.js +40 -0
- package/studio-dist/server/chunks/{_server.ts-Bfr4u3EP.js → _server.ts-3LzqLzt0.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-40h9Y46Y.js +122 -0
- package/studio-dist/server/chunks/_server.ts-5euivmMj.js +38 -0
- package/studio-dist/server/chunks/{_server.ts-CShsBkeE.js → _server.ts-B0uoay97.js} +7 -23
- package/studio-dist/server/chunks/{_server.ts-hL92cV7Z.js → _server.ts-B5vYKkI6.js} +9 -63
- package/studio-dist/server/chunks/{_server.ts-_RJXtmfi.js → _server.ts-B8dTbPHd.js} +8 -23
- package/studio-dist/server/chunks/{_server.ts-C3Jo-ju8.js → _server.ts-BA8Xdegq.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-BBClE0n9.js +54 -0
- package/studio-dist/server/chunks/{_server.ts-ZS1_yMwR.js → _server.ts-BDwMoyZ_.js} +6 -32
- package/studio-dist/server/chunks/{_server.ts-sv4pA808.js → _server.ts-BE-Uhx4N.js} +5 -46
- package/studio-dist/server/chunks/{_server.ts-DV6pzF-M.js → _server.ts-BSHADOUJ.js} +4 -3
- package/studio-dist/server/chunks/_server.ts-BcsqAqXt.js +67 -0
- package/studio-dist/server/chunks/_server.ts-Bl9tMqwZ.js +159 -0
- package/studio-dist/server/chunks/_server.ts-BlzDnRI0.js +51 -0
- package/studio-dist/server/chunks/{_server.ts-DnE0f-iC.js → _server.ts-BtuemCsf.js} +4 -3
- package/studio-dist/server/chunks/{_server.ts-BPcErnS0.js → _server.ts-C2nYqbd9.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-4p6cp9ke.js → _server.ts-C6IDM_3I.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-C8Z32vuL.js +45 -0
- package/studio-dist/server/chunks/_server.ts-CBXyadsy.js +26 -0
- package/studio-dist/server/chunks/{_server.ts-Do9RIPRo.js → _server.ts-CE6h2ATE.js} +5 -32
- package/studio-dist/server/chunks/_server.ts-CH06JVqZ.js +65 -0
- package/studio-dist/server/chunks/_server.ts-CNqcws-M.js +29 -0
- package/studio-dist/server/chunks/{_server.ts-CJA1djzJ.js → _server.ts-CPf8necd.js} +8 -92
- package/studio-dist/server/chunks/{_server.ts-uUx7uT2Y.js → _server.ts-CYv5YuHd.js} +6 -43
- package/studio-dist/server/chunks/{_server.ts-B2E7fxo9.js → _server.ts-CZ5GZRWX.js} +6 -91
- package/studio-dist/server/chunks/{_server.ts-DSAv66wD.js → _server.ts-CbThsyhY.js} +4 -3
- package/studio-dist/server/chunks/{_server.ts-DgbY5EB3.js → _server.ts-CeQolQOK.js} +10 -92
- package/studio-dist/server/chunks/_server.ts-ChoGyX5C.js +61 -0
- package/studio-dist/server/chunks/_server.ts-CjJYkLJH.js +61 -0
- package/studio-dist/server/chunks/{_server.ts-lPlBUIJX.js → _server.ts-CtjArzxf.js} +5 -60
- package/studio-dist/server/chunks/{_server.ts-Cq60m8Pw.js → _server.ts-D3QWZwt_.js} +4 -3
- package/studio-dist/server/chunks/{_server.ts-CkoJ2HCW.js → _server.ts-D6wP5bCh.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-DwTRjS4y.js → _server.ts-D7JwQTun.js} +10 -93
- package/studio-dist/server/chunks/_server.ts-DKFJdXPK.js +97 -0
- package/studio-dist/server/chunks/_server.ts-DNAPGKEF.js +55 -0
- package/studio-dist/server/chunks/_server.ts-DQiTiY3E.js +78 -0
- package/studio-dist/server/chunks/{_server.ts-BT0Uq2yq.js → _server.ts-DUyeSXbV.js} +10 -92
- package/studio-dist/server/chunks/{_server.ts-DRVz9D-J.js → _server.ts-DY7BwZCv.js} +9 -24
- package/studio-dist/server/chunks/{_server.ts-Cz0zgaUV.js → _server.ts-D_E276ms.js} +3 -2
- package/studio-dist/server/chunks/{_server.ts-B5g3eScF.js → _server.ts-DgtmTAp5.js} +5 -60
- package/studio-dist/server/chunks/{_server.ts-CboRJY0Q.js → _server.ts-DhTKaw7h.js} +10 -63
- package/studio-dist/server/chunks/_server.ts-DqKBSCPT.js +31 -0
- package/studio-dist/server/chunks/{_server.ts-CpmMp5D8.js → _server.ts-DyXBNnRD.js} +4 -3
- package/studio-dist/server/chunks/_server.ts-DzjUpduu.js +25 -0
- package/studio-dist/server/chunks/{_server.ts-CGiAXy5i.js → _server.ts-Dznqw6Dg.js} +8 -23
- package/studio-dist/server/chunks/{_server.ts-tKMjUFUP.js → _server.ts-EVwS7UXb.js} +4 -3
- package/studio-dist/server/chunks/_server.ts-J17j25VG.js +62 -0
- package/studio-dist/server/chunks/{_server.ts-BdN4AJ6o.js → _server.ts-VQchZxXq.js} +10 -91
- package/studio-dist/server/chunks/{_server.ts-C4BcDGqS.js → _server.ts-XLV5SvjH.js} +7 -63
- package/studio-dist/server/chunks/_server.ts-jZgqFIJz.js +45 -0
- package/studio-dist/server/chunks/{_server.ts-Bw7A4zgb.js → _server.ts-lyiGGv7w.js} +5 -3
- package/studio-dist/server/chunks/{brain-CXR7ZT7S.js → brain-xt_NeshR.js} +2 -2
- package/studio-dist/server/chunks/cleo-home-_XIqkZaL.js +109 -0
- package/studio-dist/server/chunks/{cli-action-DQcaqcfn.js → cli-action-VJPEn1pY.js} +2 -2
- package/studio-dist/server/chunks/{client-CgX38JBu.js → client-D71MZ7Vi.js} +5 -6
- package/studio-dist/server/chunks/cluster-label-layer-CysRMvhi.js +6721 -0
- package/studio-dist/server/chunks/connections-CWLPjwBP.js +15 -0
- package/studio-dist/server/chunks/{connections2-mi7mZqJM.js → connections2-DHVs5ytW.js} +32 -19
- package/studio-dist/server/chunks/{dev-BNpEUZI3.js → dev-Br5zieNA.js} +2 -2
- package/studio-dist/server/chunks/dist-BzgWhfUR.js +18748 -0
- package/studio-dist/server/chunks/{error.svelte-CplNulnS.js → error.svelte-BIToUowC.js} +6 -8
- package/studio-dist/server/chunks/{explorer-loader-BN_mkt3_.js → explorer-loader-B_uCSs9_.js} +2 -2
- package/studio-dist/server/chunks/exports-Dg-gdPPq.js +124 -0
- package/studio-dist/server/chunks/{hooks.server-DBsyphiX.js → hooks.server-CWBRp8NI.js} +10 -93
- package/studio-dist/server/chunks/{http-CRTZe306.js → http-DPU3HHl2.js} +3 -4
- package/studio-dist/server/chunks/{index-server-DocJvixA.js → index-server-BgfA6C0S.js} +17 -4
- package/studio-dist/server/chunks/{internal-D6eWgsHJ.js → internal-DPnIJYMs.js} +56 -92
- package/studio-dist/server/chunks/{memory2-Cgc_4D5q.js → memory-BZHnDZzu.js} +4 -4
- package/studio-dist/server/chunks/{nexus-adapter-9EL_VlGI.js → nexus-adapter-D1ryYG1Z.js} +5 -5
- package/studio-dist/server/chunks/{no-face-up-DcejJLy-.js → no-face-up-B_3h6Hgs.js} +2 -2
- package/studio-dist/server/chunks/project-context-BAXQmgch.js +188 -0
- package/studio-dist/server/chunks/{src-BUqGet2c.js → src-D2rW9bIF.js} +422 -5
- package/studio-dist/server/chunks/{stores-5DmdjPCH.js → stores-BZdYTyl7.js} +3 -3
- package/studio-dist/server/chunks/{tasks2-Bf9VHrv-.js → tasks-sWuEmiGW.js} +2349 -9
- package/studio-dist/server/chunks/{ui-DR8zOSpC.js → ui-CkQ-pCs3.js} +2 -2
- package/studio-dist/server/chunks/utils-g564cUMV.js +151 -0
- package/studio-dist/server/index.js +5 -16
- package/studio-dist/server/manifest.js +88 -88
- package/dist/cli/index.js.map +0 -6
- package/studio-dist/client/_app/immutable/assets/parse-worker.CSEr67Qi.js +0 -1127
- package/studio-dist/client/_app/immutable/chunks/2mEksghu2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/3KebaI-z.js +0 -53
- package/studio-dist/client/_app/immutable/chunks/3y2yNYEk2.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/7UXYlaI1.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/83VLmCvk.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/84Rhmi6r.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/9CV9TXTg2.js +0 -92
- package/studio-dist/client/_app/immutable/chunks/9LFtcz24.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/9bLMgKwu2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/9kKqohVR2.js +0 -37
- package/studio-dist/client/_app/immutable/chunks/B-Ye28EY.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/B-jnUl7o.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B0ORuy8x2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B0xCM1wN2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B0zCN4sX.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B1wt-iGW.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/B2F3KUIU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B2_6RrlL2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B2qKEYxA2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B2u2rNyI2.js +0 -8
- package/studio-dist/client/_app/immutable/chunks/B3_X3Lhd2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B3sNtbqf.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/B4NQP1Ax2.js +0 -6
- package/studio-dist/client/_app/immutable/chunks/BAtZg5v5.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BB6WKLm82.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BBX8UDtn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BBs1U1iU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BEli_4Jp2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BEt2wIUt.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BEyM8qSW2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BFZA3Dsk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BGdPweG1.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BGiusSqE.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BGmpyfzD.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BH5rhSIR.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BHciFt922.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BHnFwTQY.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BIvye3XP2.js +0 -59
- package/studio-dist/client/_app/immutable/chunks/BJ8mcpQA2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BK17qSHw.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BLkgUtyb.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BMUko3r62.js +0 -5
- package/studio-dist/client/_app/immutable/chunks/BMwzdEaa.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BQZx6brg.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BUPJTTTd.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BVNGAeZe2.js +0 -146
- package/studio-dist/client/_app/immutable/chunks/BWfLryGm.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BXIfeogw.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BXTfFyUU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BYJC6_MM.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BZV1ZJzH.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BZu9rehd.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Bbzm48C52.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BfGnlwjH.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Bfjb9LPp.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BieFfu-R.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Bmv63uXe2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BtBW1A0u.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/BxISGQCl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/ByNR_KvT.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BzjhD6Hr2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/BzpWnq0c2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C-yJVcyI2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C0cQ-8kS2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C1vWmhYe.js +0 -48
- package/studio-dist/client/_app/immutable/chunks/C1w6bBje.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C243sn7r.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/C2oZaDvt.js +0 -67
- package/studio-dist/client/_app/immutable/chunks/C3OziSQx.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C3hFPbMK.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/C4P9oFvU2.js +0 -6
- package/studio-dist/client/_app/immutable/chunks/C5Nlanei.js +0 -8
- package/studio-dist/client/_app/immutable/chunks/C6KBAXPl.js +0 -15
- package/studio-dist/client/_app/immutable/chunks/C8MZnWta.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CAoan3K12.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CBpcINYH.js +0 -29
- package/studio-dist/client/_app/immutable/chunks/CE7phgWq.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CFb4Co_K.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CGWoRK3t2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CH3t4xo1.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CHJgk6g-.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CHgPjuDQ.js +0 -17
- package/studio-dist/client/_app/immutable/chunks/CHkCZrnr.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CI_91WUN.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/CJ7-hP0H.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CKIrNnkY2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CKoQ7Ko5.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CM8O4zqs.js +0 -56
- package/studio-dist/client/_app/immutable/chunks/CMz3AVRO.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CNToUR3P.js +0 -13
- package/studio-dist/client/_app/immutable/chunks/CNuQG1yl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CQLIZtxj.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CQYVNgM0.js +0 -20
- package/studio-dist/client/_app/immutable/chunks/CQeVOmFO2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CSPHHq09.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CTJEdbIn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CTTT3wYw.js +0 -35
- package/studio-dist/client/_app/immutable/chunks/CV4ck7fz.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CXQrVnHf.js +0 -11
- package/studio-dist/client/_app/immutable/chunks/CXTCtOUQ.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C_CsU7Qq.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/C_IZx3682.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CbTnu2Po2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cba8RZ1a2.js +0 -8
- package/studio-dist/client/_app/immutable/chunks/Cc8xxDr5.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CdPxoldu.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CdqDTozW.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CdsmcCfC.js +0 -25
- package/studio-dist/client/_app/immutable/chunks/CeYPAoY9.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cf4kGS9y.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CfWEqXtJ2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cg7Wj2b9.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CgTpKZfi2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Chpy9ca7.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CiLKuLrQ.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/CjNDJjwu.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cjde0ZKr2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cjgnade02.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/Ckp90om52.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/ClAPVhCD.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/ClT89UdO.js +0 -11
- package/studio-dist/client/_app/immutable/chunks/CnJf5tML.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CpF4Rrcc2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CqCka5yX2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CqtqZrOl.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CrJdywQt.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Cs0zC2l2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CsMn5fBs.js +0 -141
- package/studio-dist/client/_app/immutable/chunks/CsvKLHQQ2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Ctaresvj.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Ctetf8vc2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Cv7yW6MG.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CxRIz-Zd.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/CxbvtjIH.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/CxfeoXkZ.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/CySLscL2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/D0PKQAbM.js +0 -87
- package/studio-dist/client/_app/immutable/chunks/D0WQsLTu.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1LBVx6r2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1NlFXu9.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1QfC4hu2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D1yrHAn72.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D2pa4reh.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/D3QsWcIw2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/D4OkQuPl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D6UDnATk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D7w7HllH.js +0 -38
- package/studio-dist/client/_app/immutable/chunks/D93KpglN.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D99fQj2G2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DB5ifLM-.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/DBhP8ifO2.js +0 -15
- package/studio-dist/client/_app/immutable/chunks/DF_4OWhj.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DFpNK1vs2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DGRYMk-W.js +0 -142
- package/studio-dist/client/_app/immutable/chunks/DH3CcQwq.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DHQfJeLU.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/DL89yEDy2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DLRku_0p2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DMZkjPYT2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DNP72foU.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DO2GztVm.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DOVNXmCK2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DOqzs8kl2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DQnR63hh2.js +0 -7
- package/studio-dist/client/_app/immutable/chunks/DTxtWPkw.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DVDgCC9A2.js +0 -20
- package/studio-dist/client/_app/immutable/chunks/DVVCJYjz.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DWRhYUMj2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DWavBJBI.js +0 -4
- package/studio-dist/client/_app/immutable/chunks/DXDSWRw-.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DXoHaH4a.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DXpCX2Hi.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYP3EJMY.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYQphR_V.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYUlIivP.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYo2ye8X2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DYxFu8yV.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DZ66sRb6.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/D_XTiylm2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DaRv9jn22.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DaXb9i_E.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dccf4VP2.js +0 -24
- package/studio-dist/client/_app/immutable/chunks/DdODs-Sb.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DdekYWer.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DeHaovsF.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DeRRkRO52.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DeWI5qCn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DfivR-Md.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DgmxpSo7.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DhPLWrun2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DhhrVdfi.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Djr2dbcc2.js +0 -37
- package/studio-dist/client/_app/immutable/chunks/DjuRo5vv.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Djz4EDzO.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DkRfaw-K2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DksB5g4W2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dmqenb5z2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DnbToVyf.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DpGZwlmj.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dq0lE5C32.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dq54XqHT2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DqK84mbb.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DqjFtSJD.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DrKWWDpL.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DsQIgu-4.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DsqdgJHS2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DtNkZUkq.js +0 -17
- package/studio-dist/client/_app/immutable/chunks/DutIls4V2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DvxYFW4C.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Dwp-76GQ.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/DxSZd548.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DxiUMhk0.js +0 -5
- package/studio-dist/client/_app/immutable/chunks/DxslLswf.js +0 -23
- package/studio-dist/client/_app/immutable/chunks/Dy7EjGgb2.js +0 -9
- package/studio-dist/client/_app/immutable/chunks/DyGQ_VXC.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/DySe3kTV2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DyzE2Uxw.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/DzhuJaxE2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/FmMHyrh6.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Gxs0J274.js +0 -5
- package/studio-dist/client/_app/immutable/chunks/HwtzDYxN.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/ITRz_Q7H2.js +0 -15
- package/studio-dist/client/_app/immutable/chunks/KDNP98XY2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/LmVjFhpk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/MiAejGV_.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Ml4JR6Jz2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/NU5S3nNs2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Oh5zPjv3.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/QZkvJ9vi.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Rbn8UpBm.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/SPX3gYwn2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/TX-23QW3.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/UyeQuL132.js +0 -12
- package/studio-dist/client/_app/immutable/chunks/VQszoXcV.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/VtZsEMxD.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/W2IeK61p2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Wadww7ZG.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/WgfA1zWk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/WxIgAS1f.js +0 -21
- package/studio-dist/client/_app/immutable/chunks/XrsBoOj9.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/Y3PX4poR.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/YxfwqiF32.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/Z7uO1YaO.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/_4ykQk_8.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/_kRcZFVn.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/aQNM7eVA2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/bHKz_Fb2.js +0 -45
- package/studio-dist/client/_app/immutable/chunks/bJRyRGSZ.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/dlzF6lnR.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/fjRbpfEr2.js +0 -26
- package/studio-dist/client/_app/immutable/chunks/imLk4if5.js +0 -3
- package/studio-dist/client/_app/immutable/chunks/lgRG0R-32.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/mFhCjxQJ2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/mgnH6qYg.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/n6M_5LoW.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/nLIOiDZp2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/nab7WB3u2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/orUmAKoW2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/p-fLQDfY2.js +0 -63
- package/studio-dist/client/_app/immutable/chunks/s0-WkOGk2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/sPuXfbUF.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/t4h0vrqR2.js +0 -2
- package/studio-dist/client/_app/immutable/chunks/uE83FKL-.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/uzhXlm0g2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/vTrEsGlD2.js +0 -1
- package/studio-dist/client/_app/immutable/chunks/xJgCk3dx2.js +0 -28
- package/studio-dist/client/_app/immutable/chunks/z0Mt579s2.js +0 -13
- package/studio-dist/client/_app/immutable/entry/app.BoQ7cgT2.js +0 -2
- package/studio-dist/client/_app/immutable/entry/start.Cg1v8DU4.js +0 -1
- package/studio-dist/client/_app/immutable/nodes/25.ddZ1_EFk.js +0 -1
- package/studio-dist/client/_app/immutable/nodes/26.6OcmQbLV.js +0 -1
- package/studio-dist/client/_app/immutable/nodes/4.CCjOEwVU.js +0 -1
- package/studio-dist/server/chunks/0-CvsKDxQ6.js +0 -126
- package/studio-dist/server/chunks/1-ck_x2Hf0.js +0 -9
- package/studio-dist/server/chunks/20-DVU22np7.js +0 -142
- package/studio-dist/server/chunks/23-D_tUnnoc.js +0 -181
- package/studio-dist/server/chunks/24-CVlymvLF.js +0 -151
- package/studio-dist/server/chunks/AwsRestJsonProtocol-BZuoNBmL.js +0 -416
- package/studio-dist/server/chunks/UnionSerde-BflIkhKj.js +0 -2653
- package/studio-dist/server/chunks/_dispatch-ncuRztUQ.js +0 -5597
- package/studio-dist/server/chunks/_server.ts-4NyKAneX.js +0 -116
- package/studio-dist/server/chunks/_server.ts-7hGdxdEI.js +0 -136
- package/studio-dist/server/chunks/_server.ts-B6b3b-yA.js +0 -131
- package/studio-dist/server/chunks/_server.ts-BOgGqaZp.js +0 -144
- package/studio-dist/server/chunks/_server.ts-BV1HiKZ0.js +0 -120
- package/studio-dist/server/chunks/_server.ts-BWp3g6Cr.js +0 -110
- package/studio-dist/server/chunks/_server.ts-C5NF-UgC.js +0 -122
- package/studio-dist/server/chunks/_server.ts-CDMurH5m.js +0 -2301
- package/studio-dist/server/chunks/_server.ts-COJHCgbq.js +0 -127
- package/studio-dist/server/chunks/_server.ts-CUl-Utkt.js +0 -148
- package/studio-dist/server/chunks/_server.ts-D0GAFJRb.js +0 -156
- package/studio-dist/server/chunks/_server.ts-DA6p3pmi.js +0 -117
- package/studio-dist/server/chunks/_server.ts-DThYFaZj.js +0 -160
- package/studio-dist/server/chunks/_server.ts-D_3Pm0gr.js +0 -179
- package/studio-dist/server/chunks/_server.ts-DcHxdMsm.js +0 -144
- package/studio-dist/server/chunks/_server.ts-Dlfadh2I.js +0 -144
- package/studio-dist/server/chunks/_server.ts-JallJnps.js +0 -240
- package/studio-dist/server/chunks/_server.ts-NEFTbJpM.js +0 -142
- package/studio-dist/server/chunks/_server.ts-d-2NvRwX.js +0 -122
- package/studio-dist/server/chunks/_server.ts-rUWMLkIw.js +0 -146
- package/studio-dist/server/chunks/abort-events-CDRAJSqb.js +0 -30
- package/studio-dist/server/chunks/adapters-BkMgPNUM.js +0 -359
- package/studio-dist/server/chunks/adapters2-CQ3PzoaK.js +0 -28
- package/studio-dist/server/chunks/api-mode2-3W-I1-XO.js +0 -36
- package/studio-dist/server/chunks/api2-CmNQzb0b.js +0 -96
- package/studio-dist/server/chunks/attention-consolidate-CidG1jfH.js +0 -485
- package/studio-dist/server/chunks/audit3-DMO_fUGp.js +0 -52
- package/studio-dist/server/chunks/auto-extract-B84La1Vs.js +0 -34
- package/studio-dist/server/chunks/brain-consolidator-JGm6mzFf.js +0 -373
- package/studio-dist/server/chunks/brain-doctor-Dc2WqVbs.js +0 -311
- package/studio-dist/server/chunks/brain-embedding-Djw9ekXu.js +0 -42
- package/studio-dist/server/chunks/brain-lifecycle-BOOa876K.js +0 -969
- package/studio-dist/server/chunks/brain-maintenance-U6VvsvmK.js +0 -133
- package/studio-dist/server/chunks/brain-maintenance2-CwVSmfDT.js +0 -43
- package/studio-dist/server/chunks/brain-retrieval2-exR8mdgh.js +0 -751
- package/studio-dist/server/chunks/brain-search-CpSh-SNi.js +0 -48
- package/studio-dist/server/chunks/brain-search2-CwI2cXgg.js +0 -716
- package/studio-dist/server/chunks/brain-similarity-DI4yzm9e.js +0 -113
- package/studio-dist/server/chunks/brain-stdp2-BxSBIlSr.js +0 -960
- package/studio-dist/server/chunks/brain-writer-handlers-Dwu0QCAA.js +0 -188
- package/studio-dist/server/chunks/brain-writer-thread-6n7wI7Gy.js +0 -360
- package/studio-dist/server/chunks/branch-lock-Cq7zzmFK.js +0 -1118
- package/studio-dist/server/chunks/branch-lock2-CmDc4CZW.js +0 -45
- package/studio-dist/server/chunks/cancelled-child-waiver-audit-DkesrN83.js +0 -54
- package/studio-dist/server/chunks/catalog-model-resolver-Bas9qnoP.js +0 -9
- package/studio-dist/server/chunks/catalog-model-resolver2-Cexk2TN0.js +0 -237
- package/studio-dist/server/chunks/catalog-resolver-CLot3XJO.js +0 -260
- package/studio-dist/server/chunks/catalog-resolver2-JmKb91kY.js +0 -33
- package/studio-dist/server/chunks/chunk-DDP5xfzh.js +0 -39
- package/studio-dist/server/chunks/cleo-home-CCfe6kAQ.js +0 -64
- package/studio-dist/server/chunks/concrete-session2-bb_vxJ2N.js +0 -43
- package/studio-dist/server/chunks/config-DHj9CcFs.js +0 -386
- package/studio-dist/server/chunks/config2-F6PPIn7D.js +0 -35
- package/studio-dist/server/chunks/connections-BMGJVYcS.js +0 -98
- package/studio-dist/server/chunks/credential-pool-vF6NdtT9.js +0 -4600
- package/studio-dist/server/chunks/credentials-C7EJFf5O.js +0 -35
- package/studio-dist/server/chunks/credentials-store-CFygIuB2.js +0 -35
- package/studio-dist/server/chunks/cross-db-cleanup-1LWTUKPi.js +0 -147
- package/studio-dist/server/chunks/data-accessor-CWgVndbR.js +0 -72
- package/studio-dist/server/chunks/data-safety-central-DaFxK27G.js +0 -683
- package/studio-dist/server/chunks/decisions-CmVXV2-H.js +0 -574
- package/studio-dist/server/chunks/decisions2-XQsSYdxa.js +0 -48
- package/studio-dist/server/chunks/depends-waiver-audit-CUmlBYHx.js +0 -56
- package/studio-dist/server/chunks/dialectic-evaluator2-BOyyXhdI.js +0 -96
- package/studio-dist/server/chunks/dist-es2-DQy2Mjn_.js +0 -43
- package/studio-dist/server/chunks/dist-es3-CBygU4n5.js +0 -365
- package/studio-dist/server/chunks/dist-es4-CavbNu4B.js +0 -162
- package/studio-dist/server/chunks/dist-es5-Crpm8Wsl.js +0 -465
- package/studio-dist/server/chunks/dist-es6-CgePHzh4.js +0 -99
- package/studio-dist/server/chunks/dist-es7-k6c5GEd7.js +0 -311
- package/studio-dist/server/chunks/dist-es8-Bd9v0_pE.js +0 -91
- package/studio-dist/server/chunks/dist3-23bsJhRw.js +0 -27
- package/studio-dist/server/chunks/dist4-DmC1zSXi.js +0 -35618
- package/studio-dist/server/chunks/dual-scope-db-DKnWu1KM.js +0 -5672
- package/studio-dist/server/chunks/dual-scope-db2-Dht3luRw.js +0 -31
- package/studio-dist/server/chunks/duplicate-bypass-audit-BN5w1H2y.js +0 -36
- package/studio-dist/server/chunks/duplicate-detector-CaVFMKdE.js +0 -692
- package/studio-dist/server/chunks/edge-types-CgBvb0w1.js +0 -28
- package/studio-dist/server/chunks/embedding-local-xEnym8Ho.js +0 -92
- package/studio-dist/server/chunks/event-streams-Bi2p_fVo.js +0 -232
- package/studio-dist/server/chunks/execution-learning-BVCw7Plq.js +0 -278
- package/studio-dist/server/chunks/exodus-BBuuN6aA.js +0 -2594
- package/studio-dist/server/chunks/externalDataInterceptor-C3C4cObe.js +0 -21
- package/studio-dist/server/chunks/extraction-gate-DDNBq7gu.js +0 -48
- package/studio-dist/server/chunks/extraction-gate2-D77EZBQ6.js +0 -375
- package/studio-dist/server/chunks/getSSOTokenFromFile-yZAJxDci.js +0 -21
- package/studio-dist/server/chunks/governor2-CtfV3wfX.js +0 -923
- package/studio-dist/server/chunks/graph-auto-populate-Dmsr9ZJM.js +0 -42
- package/studio-dist/server/chunks/graph-auto-populate2-Cz0qeebM.js +0 -156
- package/studio-dist/server/chunks/graph-memory-bridge-CY8ft_d7.js +0 -43
- package/studio-dist/server/chunks/graph-memory-bridge2-Cd0XZwqc.js +0 -429
- package/studio-dist/server/chunks/handler-helpers-AANBGA_p.js +0 -49
- package/studio-dist/server/chunks/hash-Cm6yMET4.js +0 -14
- package/studio-dist/server/chunks/health-monitor-FepUZN1m.js +0 -106
- package/studio-dist/server/chunks/identity-DRpurt56.js +0 -30
- package/studio-dist/server/chunks/identity2-DeAB5RXE.js +0 -114
- package/studio-dist/server/chunks/index-61916rmV.js +0 -632
- package/studio-dist/server/chunks/index-DAgVDouG.js +0 -268
- package/studio-dist/server/chunks/index-Dtt_h58T.js +0 -2116
- package/studio-dist/server/chunks/indexes-DZ52grq6.js +0 -615
- package/studio-dist/server/chunks/json-Bfixam3g.js +0 -126
- package/studio-dist/server/chunks/learnings-D6Y3YGMU.js +0 -47
- package/studio-dist/server/chunks/learnings2-MwBdR9vb.js +0 -171
- package/studio-dist/server/chunks/lifecycle-ops2-V2CR5-7X.js +0 -121
- package/studio-dist/server/chunks/list-BhObczvn.js +0 -229
- package/studio-dist/server/chunks/living-brain2-j0B_Ir8j.js +0 -285
- package/studio-dist/server/chunks/llm-backend-resolver-D4ANvUPL.js +0 -295
- package/studio-dist/server/chunks/llm-extraction-DVCu4heR.js +0 -408
- package/studio-dist/server/chunks/loadSharedConfigFiles-umvW7kuz.js +0 -73
- package/studio-dist/server/chunks/loadSso-iidd5iKx.js +0 -599
- package/studio-dist/server/chunks/local-model-fit-B0TxifnX.js +0 -53
- package/studio-dist/server/chunks/local-model-fit2-BMqo6GJm.js +0 -2664
- package/studio-dist/server/chunks/lock-CA7d6lj7.js +0 -57
- package/studio-dist/server/chunks/logger-DQIoyZbq.js +0 -34
- package/studio-dist/server/chunks/memory-BUbicBbE.js +0 -618
- package/studio-dist/server/chunks/memory-accessor-i3P-RHSg.js +0 -42
- package/studio-dist/server/chunks/memory-accessor2-B981tHDR.js +0 -467
- package/studio-dist/server/chunks/memory-bridge-BOlEWg9w.js +0 -424
- package/studio-dist/server/chunks/memory-sqlite2-B7dq8doO.js +0 -42
- package/studio-dist/server/chunks/model-runner2-B71xjp4y.js +0 -43
- package/studio-dist/server/chunks/mvi-helpers-BNsJ8ZpQ.js +0 -59
- package/studio-dist/server/chunks/nexus-plasticity-BTfU8cW_.js +0 -269
- package/studio-dist/server/chunks/nexus-risk-audit-p379-TU5.js +0 -54
- package/studio-dist/server/chunks/nexus-schema-zeygY8OD.js +0 -11
- package/studio-dist/server/chunks/nexus-schema2-DP0Qd7CA.js +0 -444
- package/studio-dist/server/chunks/nexus-sqlite-BVNIpwc7.js +0 -36
- package/studio-dist/server/chunks/nexus-sqlite2-BBfY2xnY.js +0 -1103
- package/studio-dist/server/chunks/node-http-handler-CJI8kn7X.js +0 -386
- package/studio-dist/server/chunks/observe-Bo9veHGe.js +0 -47
- package/studio-dist/server/chunks/observe2-wzO0MaMY.js +0 -245
- package/studio-dist/server/chunks/observer-reflector-BwNOuq1d.js +0 -62
- package/studio-dist/server/chunks/observer-reflector2-ggtC1hmk.js +0 -478
- package/studio-dist/server/chunks/on-open-Wpcw7DV4.js +0 -740
- package/studio-dist/server/chunks/open-cleo-db--8sYNaYY.js +0 -70
- package/studio-dist/server/chunks/parseKnownFiles-Dg0pMFcT.js +0 -18
- package/studio-dist/server/chunks/parseUrl-qgGfl-Vh.js +0 -120
- package/studio-dist/server/chunks/paths-CV7S5-Zm.js +0 -30012
- package/studio-dist/server/chunks/patterns-lh5kn13I.js +0 -48
- package/studio-dist/server/chunks/patterns2-CzIcT-ai.js +0 -177
- package/studio-dist/server/chunks/pipeline-stage-IB_pOft-.js +0 -63
- package/studio-dist/server/chunks/prediction-D1lSGJ4c.js +0 -217
- package/studio-dist/server/chunks/premature-close-audit-VG09uAco.js +0 -53
- package/studio-dist/server/chunks/project-context-BjiqfEBi.js +0 -166
- package/studio-dist/server/chunks/provider-registry2-Cu7rAF0R.js +0 -35
- package/studio-dist/server/chunks/quality-feedback-CuCGEI6S.js +0 -371
- package/studio-dist/server/chunks/quality-scoring-CCPuRQmJ.js +0 -160
- package/studio-dist/server/chunks/query-ops-DCrjbZb9.js +0 -78
- package/studio-dist/server/chunks/query-promise-BkPmGPJy.js +0 -1257
- package/studio-dist/server/chunks/readFile-CxwXhymG.js +0 -31
- package/studio-dist/server/chunks/registry-CL2gN1zd.js +0 -27
- package/studio-dist/server/chunks/registry2-DoPYJnUW.js +0 -233
- package/studio-dist/server/chunks/registry3-BajEb-ll.js +0 -42
- package/studio-dist/server/chunks/registry4-DCqffZkT.js +0 -142
- package/studio-dist/server/chunks/retry-B3oEKYpp.js +0 -105
- package/studio-dist/server/chunks/role-executor-CC8BU54L.js +0 -25379
- package/studio-dist/server/chunks/role-resolver-D9QaDT0e.js +0 -6544
- package/studio-dist/server/chunks/role-resolver2-nkhzS1oy.js +0 -37
- package/studio-dist/server/chunks/rollup-CiefjN_Y.js +0 -194
- package/studio-dist/server/chunks/safety-data-accessor-CniDmGJO.js +0 -276
- package/studio-dist/server/chunks/service-connections-accessor-yBCdcgU-.js +0 -282
- package/studio-dist/server/chunks/session-factory-vbengc42.js +0 -96
- package/studio-dist/server/chunks/session-grade-BF4ZZtN_.js +0 -244
- package/studio-dist/server/chunks/session-journal-Bvey70Ur.js +0 -235
- package/studio-dist/server/chunks/session-narrative-BirZINSU.js +0 -304
- package/studio-dist/server/chunks/session-store--N_xHxUH.js +0 -557
- package/studio-dist/server/chunks/session-store2-DAM-eVTH.js +0 -43
- package/studio-dist/server/chunks/sessions-33DD4hkt.js +0 -2273
- package/studio-dist/server/chunks/sessions2-BHswKRDP.js +0 -50
- package/studio-dist/server/chunks/sigil-B-RznFXz.js +0 -33
- package/studio-dist/server/chunks/sigil2-jRMG5DuR.js +0 -47
- package/studio-dist/server/chunks/signin-BAsW3mM8.js +0 -644
- package/studio-dist/server/chunks/sleep-consolidation-BnSwXrvq.js +0 -823
- package/studio-dist/server/chunks/specialists-B_ZbpQlK.js +0 -441
- package/studio-dist/server/chunks/sqlite-Bm5LzbPs.js +0 -5977
- package/studio-dist/server/chunks/sqlite-backup-CFG1-b2e.js +0 -42
- package/studio-dist/server/chunks/sqlite-data-accessor-DD_RFX6r.js +0 -987
- package/studio-dist/server/chunks/sqlite-data-accessor2-CRmgNBnq.js +0 -44
- package/studio-dist/server/chunks/sqlite-native-BwlIqtbs.js +0 -42
- package/studio-dist/server/chunks/sqlite2-CUPut2fh.js +0 -42
- package/studio-dist/server/chunks/src2-DK8DKufK.js +0 -290
- package/studio-dist/server/chunks/src3-BJjf7XRG.js +0 -798
- package/studio-dist/server/chunks/src4-DNleK_t_.js +0 -28
- package/studio-dist/server/chunks/sso-oidc-eUvwseuL.js +0 -861
- package/studio-dist/server/chunks/storage-B9UA3BHR.js +0 -198
- package/studio-dist/server/chunks/sts-g7LDMLEd.js +0 -4655
- package/studio-dist/server/chunks/surprisal-CwTfWQi8.js +0 -224
- package/studio-dist/server/chunks/surprisal-tree-7dfHsuw1.js +0 -230
- package/studio-dist/server/chunks/system-resolver2-Bzhue_zQ.js +0 -53
- package/studio-dist/server/chunks/tasks-SHX7UPGY.js +0 -19694
- package/studio-dist/server/chunks/tasks-schema2-CTMoQKQy.js +0 -42
- package/studio-dist/server/chunks/temporal-supersession-DP4GPG_B.js +0 -298
- package/studio-dist/server/chunks/token-cAhAD9f9.js +0 -139
- package/studio-dist/server/chunks/token-util-D6drEz8_.js +0 -353
- package/studio-dist/server/chunks/token-util2-8UPSGvbb.js +0 -97
- package/studio-dist/server/chunks/transcript-scanner-kJWhWmlg.js +0 -53
- package/studio-dist/server/chunks/transformers.node-_xbxmK5p.js +0 -38475
- package/studio-dist/server/chunks/typed-query-l1D_QElt.js +0 -18
- package/studio-dist/server/chunks/unique-constraint-BZrrwgwc.js +0 -88
- package/studio-dist/server/chunks/update-B2YVBZG0.js +0 -1594
- package/studio-dist/server/chunks/user-profile-B61ZhVmC.js +0 -89
- package/studio-dist/server/chunks/utils-BPSZyajG.js +0 -1176
- package/studio-dist/server/chunks/validation-rules-CE27rtoF.js +0 -44
- package/studio-dist/server/chunks/zod-DsAeKNLm.js +0 -141
- /package/studio-dist/client/_app/immutable/chunks/{CQCxd1p9.js → B8WnZMYa.js} +0 -0
- /package/studio-dist/client/_app/immutable/chunks/{D13Quv9e2.js → B_0_YCYG.js} +0 -0
- /package/studio-dist/client/_app/immutable/chunks/{djL6V-tr.js → CqgtdAx_.js} +0 -0
- /package/studio-dist/client/_app/immutable/chunks/{_FU7h_8p2.js → KrUPZzXZ.js} +0 -0
|
@@ -1,960 +0,0 @@
|
|
|
1
|
-
import { t as typedAll } from './typed-query-l1D_QElt.js';
|
|
2
|
-
|
|
3
|
-
//#region ../core/dist/memory/brain-plasticity-class.js
|
|
4
|
-
/**
|
|
5
|
-
* Plasticity class and stability score utilities for STDP and Hebbian plasticity.
|
|
6
|
-
*
|
|
7
|
-
* Manages the plasticity_class column which governs which algorithms write to an edge:
|
|
8
|
-
* - 'static': Non-plastic (structural, semantic). Immune to decay.
|
|
9
|
-
* - 'hebbian': Written by strengthenCoRetrievedEdges. Subject to decay.
|
|
10
|
-
* - 'stdp': Written or refined by applyStdpPlasticity. Subject to decay + LTD.
|
|
11
|
-
*
|
|
12
|
-
* Also computes stability_score for decay filtering and plasticity event ordering.
|
|
13
|
-
*
|
|
14
|
-
* @task T693
|
|
15
|
-
* @epic T673
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Upgrade plasticity class to the most plastic variant that has touched it.
|
|
19
|
-
*
|
|
20
|
-
* Decision logic (T693 / synthesis decision #12):
|
|
21
|
-
* - If current = 'static' and event = 'hebbian' → 'hebbian' (first plasticity touch)
|
|
22
|
-
* - If current = 'static' and event = 'stdp' → 'stdp' (STDP direct touch)
|
|
23
|
-
* - If current = 'hebbian' and event = 'stdp' → 'stdp' (upgrade via STDP)
|
|
24
|
-
* - If current = 'stdp' → stays 'stdp' (no downgrade)
|
|
25
|
-
* - Otherwise return current unchanged
|
|
26
|
-
*
|
|
27
|
-
* @param currentClass - Current plasticity class value ('static', 'hebbian', 'stdp')
|
|
28
|
-
* @param event - Event type triggering upgrade ('hebbian' or 'stdp')
|
|
29
|
-
* @returns Upgraded plasticity class
|
|
30
|
-
*/
|
|
31
|
-
function upgradePlasticityClass(currentClass, event) {
|
|
32
|
-
const current = currentClass ?? "static";
|
|
33
|
-
if (current === "stdp") return "stdp";
|
|
34
|
-
return "stdp";
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Compute biological stability score for an edge based on reinforcement history.
|
|
38
|
-
*
|
|
39
|
-
* Formula (T673 spec §1 decision #13):
|
|
40
|
-
* stability = tanh(reinforcement_count / 10) × exp(-(days_since_reinforced / 30))
|
|
41
|
-
*
|
|
42
|
-
* Parameters:
|
|
43
|
-
* - reinforcement_count: Number of LTP events applied lifetime (integer ≥ 0)
|
|
44
|
-
* - lastReinforcedAt: ISO 8601 timestamp of last LTP event, or null if never
|
|
45
|
-
*
|
|
46
|
-
* Returns: 0.0–1.0, or null if no history to compute from
|
|
47
|
-
*
|
|
48
|
-
* Examples:
|
|
49
|
-
* - rc=10, days=0 → tanh(1.0) × 1.0 ≈ 0.762
|
|
50
|
-
* - rc=5, days=0 → tanh(0.5) × 1.0 ≈ 0.462
|
|
51
|
-
* - rc=10, days=30 → tanh(1.0) × exp(-1) ≈ 0.280
|
|
52
|
-
* - rc=0, days=any → tanh(0) × ... = 0.0 (new edges)
|
|
53
|
-
*
|
|
54
|
-
* @param reinforcementCount - Lifetime count of LTP events applied to edge
|
|
55
|
-
* @param lastReinforcedAt - ISO 8601 timestamp of last LTP event, or null
|
|
56
|
-
* @param now - Current timestamp (epoch ms, for testing). Defaults to Date.now()
|
|
57
|
-
* @returns Stability score 0.0–1.0, or null if edge has no reinforcement history
|
|
58
|
-
*/
|
|
59
|
-
function computeStabilityScore(reinforcementCount, lastReinforcedAt, now = Date.now()) {
|
|
60
|
-
if (!reinforcementCount || reinforcementCount <= 0) return null;
|
|
61
|
-
if (!lastReinforcedAt) return null;
|
|
62
|
-
const rcTerm = Math.tanh(reinforcementCount / 10);
|
|
63
|
-
const ageDays = (now - new Date(lastReinforcedAt).getTime()) / (1440 * 60 * 1e3);
|
|
64
|
-
const stability = rcTerm * Math.exp(-ageDays / 30);
|
|
65
|
-
return Math.max(0, Math.min(1, stability));
|
|
66
|
-
}
|
|
67
|
-
//#endregion
|
|
68
|
-
//#region ../core/dist/memory/brain-stdp.js
|
|
69
|
-
/**
|
|
70
|
-
* STDP (Spike-Timing-Dependent Plasticity) for CLEO BRAIN.
|
|
71
|
-
*
|
|
72
|
-
* Implements a biologically-inspired Hebbian learning rule that modulates edge
|
|
73
|
-
* weights based on the *temporal order* of memory retrievals within a session
|
|
74
|
-
* window, not just co-occurrence frequency.
|
|
75
|
-
*
|
|
76
|
-
* ## Neuroscience basis
|
|
77
|
-
*
|
|
78
|
-
* Classical STDP: if neuron A fires before neuron B by Δt milliseconds, the
|
|
79
|
-
* synapse A→B is potentiated (LTP); if A fires after B, it is depressed (LTD).
|
|
80
|
-
* The magnitude of the change decays exponentially with |Δt|.
|
|
81
|
-
*
|
|
82
|
-
* ## Mapping to CLEO memory
|
|
83
|
-
*
|
|
84
|
-
* - Each entry retrieved from brain.db is a "spike".
|
|
85
|
-
* - Retrievals within the same session and within `sessionWindowMs` of each
|
|
86
|
-
* other are treated as temporally related spikes.
|
|
87
|
-
* - If entry A was retrieved BEFORE entry B by Δt ms:
|
|
88
|
-
* Δw = A_pre × exp(−Δt / τ_pre) → potentiation (LTP, positive Δw)
|
|
89
|
-
* - If entry A was retrieved AFTER entry B by Δt ms:
|
|
90
|
-
* Δw = −A_post × exp(−Δt / τ_post) → depression (LTD, negative Δw)
|
|
91
|
-
* - Weights are clamped to [0.0, 1.0].
|
|
92
|
-
* - All events are logged to `brain_plasticity_events` for observability.
|
|
93
|
-
*
|
|
94
|
-
* ## Parameters (biologically reasonable defaults)
|
|
95
|
-
*
|
|
96
|
-
* | Symbol | Value | Meaning |
|
|
97
|
-
* |---------|--------|--------------------------------------------------|
|
|
98
|
-
* | τ_pre | 20 s | Time constant for pre→post potentiation |
|
|
99
|
-
* | τ_post | 20 s | Time constant for post→pre depression |
|
|
100
|
-
* | A_pre | 0.05 | Peak potentiation amplitude |
|
|
101
|
-
* | A_post | 0.06 | Peak depression amplitude (asymmetric, per STDP) |
|
|
102
|
-
*
|
|
103
|
-
* The asymmetry A_post > A_pre models the biological fact that LTD is slightly
|
|
104
|
-
* stronger than LTP, preventing runaway weight growth.
|
|
105
|
-
*
|
|
106
|
-
* ## Relation to Hebbian co-retrieval
|
|
107
|
-
*
|
|
108
|
-
* Hebbian (`strengthenCoRetrievedEdges` in brain-lifecycle.ts) uses the
|
|
109
|
-
* `co_retrieved` edge type and does NOT track order; it fires on pairs that
|
|
110
|
-
* co-occur ≥ 3× regardless of timing. STDP is a *second plasticity pass* that
|
|
111
|
-
* runs after Hebbian and refines existing `co_retrieved` edges using order data.
|
|
112
|
-
*
|
|
113
|
-
* If no `co_retrieved` edge exists yet between a pair, STDP inserts one with the
|
|
114
|
-
* initial STDP-derived weight (potentiation pairs only — LTD does not create
|
|
115
|
-
* new edges, only weakens existing ones).
|
|
116
|
-
*
|
|
117
|
-
* ## Two-Window Architecture (T679 BUG-1 fix, T688 expansion)
|
|
118
|
-
*
|
|
119
|
-
* Prior code used `sessionWindowMs=5min` as BOTH the SQL lookback cutoff AND the
|
|
120
|
-
* spike-pair Δt gate, causing all live rows (>5min old) to produce zero plasticity
|
|
121
|
-
* events. This version separates the two concerns:
|
|
122
|
-
*
|
|
123
|
-
* | Parameter | Default | Purpose |
|
|
124
|
-
* |-------------------|------------|------------------------------------------|
|
|
125
|
-
* | `lookbackDays` | 30 days | SQL cutoff for fetching retrieval rows |
|
|
126
|
-
* | `pairingWindowMs` | 24 h | Max Δt between two spikes for pairing |
|
|
127
|
-
*
|
|
128
|
-
* T688: `pairingWindowMs` raised to 24 h — cross-session pairs now eligible.
|
|
129
|
-
* Session boundary is NOT a hard cutoff; τ tier determines decay magnitude.
|
|
130
|
-
*
|
|
131
|
-
* ## Tiered τ (T689)
|
|
132
|
-
*
|
|
133
|
-
* `computeTau(deltaT)` selects the decay time constant based on Δt:
|
|
134
|
-
*
|
|
135
|
-
* | Gap class | Δt range | τ |
|
|
136
|
-
* |---------------|----------------|---------|
|
|
137
|
-
* | Intra-batch | 0 — 30 s | 20 s |
|
|
138
|
-
* | Intra-session | 30 s — 2 h | 30 min |
|
|
139
|
-
* | Cross-session | 2 h — 24 h | 12 h |
|
|
140
|
-
*
|
|
141
|
-
* ## R-STDP reward modulation (T692)
|
|
142
|
-
*
|
|
143
|
-
* `reward_signal r` (from Step 9a backfill) gates Δw per spike:
|
|
144
|
-
* Δw_ltp_effective = clamp(Δw_ltp × (1+r), 0, 2×A_pre)
|
|
145
|
-
* Δw_ltd_effective = clamp(Δw_ltd × (1-r), -2×A_post, 0)
|
|
146
|
-
* null reward → no modulation (r treated as 0).
|
|
147
|
-
*
|
|
148
|
-
* ## Novelty boost (T691)
|
|
149
|
-
*
|
|
150
|
-
* On INSERT (first co-retrieval), initial_weight = clamp(Δw × 1.5, 0, A_pre×1.5).
|
|
151
|
-
* UPDATE path uses un-boosted Δw.
|
|
152
|
-
*
|
|
153
|
-
* @task T626
|
|
154
|
-
* @task T679
|
|
155
|
-
* @task T688
|
|
156
|
-
* @task T689
|
|
157
|
-
* @task T691
|
|
158
|
-
* @task T692
|
|
159
|
-
* @epic T673
|
|
160
|
-
* @see packages/core/src/memory/brain-lifecycle.ts#strengthenCoRetrievedEdges
|
|
161
|
-
* @see docs/specs/stdp-wire-up-spec.md §3.2 Two-Window Architecture
|
|
162
|
-
*/
|
|
163
|
-
/** Default SQL lookback window: fetch retrieval rows from the last N days. */
|
|
164
|
-
var DEFAULT_LOOKBACK_DAYS = 30;
|
|
165
|
-
/**
|
|
166
|
-
* Default spike-pair matching window in milliseconds.
|
|
167
|
-
* T688: raised from 5 min to 24 h — cross-session pairs are now eligible.
|
|
168
|
-
* Session boundary is NOT a hard cutoff; tiered τ provides smaller Δw for
|
|
169
|
-
* cross-session pairs (τ_episodic=12h vs τ_near=20s).
|
|
170
|
-
*/
|
|
171
|
-
var DEFAULT_PAIRING_WINDOW_MS = 1440 * 60 * 1e3;
|
|
172
|
-
/**
|
|
173
|
-
* Intra-batch time constant (ms).
|
|
174
|
-
* Used when Δt ≤ 30 s — both spikes are in the same retrieval batch.
|
|
175
|
-
* Biological analogue: classical STDP window (~20 ms–100 ms in neurons;
|
|
176
|
-
* scaled to 20 s for CLEO memory retrieval granularity).
|
|
177
|
-
*
|
|
178
|
-
* @task T689
|
|
179
|
-
*/
|
|
180
|
-
var TAU_NEAR_MS = 2e4;
|
|
181
|
-
/**
|
|
182
|
-
* Intra-session time constant (ms).
|
|
183
|
-
* Used when 30 s < Δt ≤ 2 h — spikes are in the same session but not same batch.
|
|
184
|
-
* Biological analogue: working-memory consolidation window.
|
|
185
|
-
*
|
|
186
|
-
* @task T689
|
|
187
|
-
*/
|
|
188
|
-
var TAU_SESSION_MS = 1800 * 1e3;
|
|
189
|
-
/**
|
|
190
|
-
* Cross-session (episodic) time constant (ms).
|
|
191
|
-
* Used when Δt > 2 h — spikes span different sessions.
|
|
192
|
-
* Biological analogue: episodic reconsolidation (~12 h per Walker & Stickgold 2004).
|
|
193
|
-
* Pairs 12 h apart contribute A × exp(-1) ≈ 0.37×A; pairs 36 h apart ≈ 0.05×A.
|
|
194
|
-
*
|
|
195
|
-
* @task T689
|
|
196
|
-
*/
|
|
197
|
-
var TAU_EPISODIC_MS = 720 * 60 * 1e3;
|
|
198
|
-
/**
|
|
199
|
-
* Δt boundary (ms) between intra-batch and intra-session τ tiers.
|
|
200
|
-
* Spikes within 30 s of each other use τ_near.
|
|
201
|
-
*/
|
|
202
|
-
var TAU_NEAR_THRESHOLD_MS = 3e4;
|
|
203
|
-
/**
|
|
204
|
-
* Δt boundary (ms) between intra-session and cross-session τ tiers.
|
|
205
|
-
* Spikes more than 2 h apart use τ_episodic.
|
|
206
|
-
*/
|
|
207
|
-
var TAU_SESSION_THRESHOLD_MS = 7200 * 1e3;
|
|
208
|
-
/** Peak potentiation amplitude (dimensionless weight delta). */
|
|
209
|
-
var A_PRE = .05;
|
|
210
|
-
/** Peak depression amplitude (slightly larger than A_pre — asymmetric STDP). */
|
|
211
|
-
var A_POST = .06;
|
|
212
|
-
/**
|
|
213
|
-
* Novelty boost multiplier for first-ever co-retrieval pair (INSERT path).
|
|
214
|
-
* Models dopamine-novelty literature: new associations are strengthened more.
|
|
215
|
-
* Applied only on INSERT; UPDATE path uses standard Δw.
|
|
216
|
-
*
|
|
217
|
-
* @task T691
|
|
218
|
-
*/
|
|
219
|
-
var K_NOVELTY = 1.5;
|
|
220
|
-
/** Minimum edge weight (floor). */
|
|
221
|
-
var WEIGHT_MIN = 0;
|
|
222
|
-
/** Maximum edge weight (ceiling). */
|
|
223
|
-
var WEIGHT_MAX = 1;
|
|
224
|
-
/**
|
|
225
|
-
* Select the decay time constant τ based on spike-pair temporal gap.
|
|
226
|
-
*
|
|
227
|
-
* Three tiers (per spec §3.3):
|
|
228
|
-
* - τ_near = 20 s — Δt ≤ 30 s (intra-batch, classical STDP window)
|
|
229
|
-
* - τ_session = 30 min — 30 s < Δt ≤ 2 h (intra-session, working memory)
|
|
230
|
-
* - τ_episodic = 12 h — Δt > 2 h (cross-session, episodic reconsolidation)
|
|
231
|
-
*
|
|
232
|
-
* @param deltaT - Time gap between spikes in milliseconds (non-negative).
|
|
233
|
-
* @returns τ in milliseconds for use in exp(-Δt / τ).
|
|
234
|
-
*
|
|
235
|
-
* @task T689
|
|
236
|
-
*/
|
|
237
|
-
function computeTau(deltaT) {
|
|
238
|
-
if (deltaT <= TAU_NEAR_THRESHOLD_MS) return TAU_NEAR_MS;
|
|
239
|
-
if (deltaT <= TAU_SESSION_THRESHOLD_MS) return TAU_SESSION_MS;
|
|
240
|
-
return TAU_EPISODIC_MS;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Check if a recent plasticity event exists for the given source→target pair
|
|
244
|
-
* within the last `withinHours` (default 1 hour).
|
|
245
|
-
*
|
|
246
|
-
* Used by T713 idempotency guard to prevent duplicate event insertion when
|
|
247
|
-
* consolidation runs multiple times against the same session.
|
|
248
|
-
*
|
|
249
|
-
* @param nativeDb - SQLite native database connection
|
|
250
|
-
* @param sourceNode - Source node ID (entry ID)
|
|
251
|
-
* @param targetNode - Target node ID (entry ID)
|
|
252
|
-
* @param kind - Event kind ('ltp' or 'ltd')
|
|
253
|
-
* @param sessionId - Session ID to match (null = all sessions)
|
|
254
|
-
* @param withinHours - Dedup window in hours. Default: 1
|
|
255
|
-
* @returns True if a matching recent event exists; false otherwise.
|
|
256
|
-
*/
|
|
257
|
-
function isPlasticityEventDuplicate(nativeDb, sourceNode, targetNode, kind, sessionId, withinHours = 1) {
|
|
258
|
-
try {
|
|
259
|
-
const cutoffIso = (/* @__PURE__ */ new Date(Date.now() - withinHours * 60 * 60 * 1e3)).toISOString().replace("T", " ").slice(0, 19);
|
|
260
|
-
return nativeDb.prepare(`SELECT 1 FROM brain_plasticity_events
|
|
261
|
-
WHERE source_node = ? AND target_node = ? AND kind = ?
|
|
262
|
-
AND session_id = ?
|
|
263
|
-
AND timestamp > ?
|
|
264
|
-
LIMIT 1`).get(sourceNode, targetNode, kind, sessionId, cutoffIso) !== void 0;
|
|
265
|
-
} catch {
|
|
266
|
-
return false;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Check if there are at least `minCount` retrieval log rows since the last
|
|
271
|
-
* plasticity event in the given session.
|
|
272
|
-
*
|
|
273
|
-
* Used by T714 minimum-pair gate to skip Step 9b when a session has too few
|
|
274
|
-
* retrievals to warrant plasticity processing.
|
|
275
|
-
*
|
|
276
|
-
* @param nativeDb - SQLite native database connection
|
|
277
|
-
* @param minCount - Minimum number of new retrievals required. Default: 2
|
|
278
|
-
* @param sessionId - Session ID to check (null = all sessions)
|
|
279
|
-
* @returns True if minCount or more new retrievals exist; false otherwise.
|
|
280
|
-
*/
|
|
281
|
-
function hasMinimumRetrievalsSinceLastPlasticity(nativeDb, minCount = 2, sessionId = null) {
|
|
282
|
-
try {
|
|
283
|
-
const db = nativeDb;
|
|
284
|
-
const lastTime = (() => {
|
|
285
|
-
if (sessionId !== null) return db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events
|
|
286
|
-
WHERE session_id = ?`).get(sessionId)?.last_time ?? null;
|
|
287
|
-
return db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events`).get()?.last_time ?? null;
|
|
288
|
-
})();
|
|
289
|
-
let newRetrievalCount;
|
|
290
|
-
if (lastTime === null) if (sessionId !== null) newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log
|
|
291
|
-
WHERE session_id = ?`).get(sessionId)?.cnt ?? 0;
|
|
292
|
-
else newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log`).get()?.cnt ?? 0;
|
|
293
|
-
else if (sessionId !== null) newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log
|
|
294
|
-
WHERE session_id = ? AND created_at > ?`).get(sessionId, lastTime)?.cnt ?? 0;
|
|
295
|
-
else newRetrievalCount = db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log
|
|
296
|
-
WHERE created_at > ?`).get(lastTime)?.cnt ?? 0;
|
|
297
|
-
return newRetrievalCount >= minCount;
|
|
298
|
-
} catch {
|
|
299
|
-
return true;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* T714: Check whether Step 9b (STDP plasticity) should run based on retrieval volume.
|
|
304
|
-
*
|
|
305
|
-
* Per spec §4.2, skip plasticity processing if fewer than `minRetrievalsForPlasticity`
|
|
306
|
-
* new retrieval rows exist since the last `brain_plasticity_events` timestamp.
|
|
307
|
-
* This prevents wasted compute on early-session edge cases where no meaningful pairs exist.
|
|
308
|
-
*
|
|
309
|
-
* @param projectRoot - Project root for brain.db resolution
|
|
310
|
-
* @param sessionId - Session ID to check (null = all sessions)
|
|
311
|
-
* @param minRetrievalsForPlasticity - Minimum row count required. Default: 2.
|
|
312
|
-
* @returns True if plasticity should run; false if gate blocks it.
|
|
313
|
-
*/
|
|
314
|
-
async function shouldRunPlasticity(projectRoot, sessionId = null, minRetrievalsForPlasticity = 2) {
|
|
315
|
-
const { getBrainDb, getBrainNativeDb } = await import('./memory-sqlite2-B7dq8doO.js');
|
|
316
|
-
await getBrainDb(projectRoot);
|
|
317
|
-
const nativeDb = getBrainNativeDb(projectRoot);
|
|
318
|
-
if (!nativeDb) return true;
|
|
319
|
-
const hasMinimum = hasMinimumRetrievalsSinceLastPlasticity(nativeDb, minRetrievalsForPlasticity, sessionId);
|
|
320
|
-
if (!hasMinimum) {
|
|
321
|
-
const count = (() => {
|
|
322
|
-
try {
|
|
323
|
-
const db = nativeDb;
|
|
324
|
-
const lastTime = (() => {
|
|
325
|
-
if (sessionId !== null) return db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events WHERE session_id = ?`).get(sessionId)?.last_time ?? null;
|
|
326
|
-
return db.prepare(`SELECT MAX(timestamp) as last_time FROM brain_plasticity_events`).get()?.last_time ?? null;
|
|
327
|
-
})();
|
|
328
|
-
if (lastTime === null) return (sessionId !== null ? db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log WHERE session_id = ?`).get(sessionId) : db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log`).get())?.cnt ?? 0;
|
|
329
|
-
else return (sessionId !== null ? db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log WHERE session_id = ? AND created_at > ?`).get(sessionId, lastTime) : db.prepare(`SELECT COUNT(*) as cnt FROM brain_retrieval_log WHERE created_at > ?`).get(lastTime))?.cnt ?? 0;
|
|
330
|
-
} catch {
|
|
331
|
-
return 0;
|
|
332
|
-
}
|
|
333
|
-
})();
|
|
334
|
-
console.warn(`[plasticity] Minimum-pair gate: skipped STDP Step 9b (${count} retrievals, need >=${minRetrievalsForPlasticity})`);
|
|
335
|
-
}
|
|
336
|
-
return hasMinimum;
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* Apply Spike-Timing-Dependent Plasticity to brain_page_edges.
|
|
340
|
-
*
|
|
341
|
-
* Reads `brain_retrieval_log` for rows within the past `lookbackDays` days
|
|
342
|
-
* (default 30), reconstructs the temporal spike sequence, and applies the
|
|
343
|
-
* STDP rule to every ordered pair within `pairingWindowMs` (default 24 h).
|
|
344
|
-
*
|
|
345
|
-
* All weight changes are logged to `brain_plasticity_events` (with
|
|
346
|
-
* `session_id`, `retrieval_log_id`, `weight_before`, `weight_after`,
|
|
347
|
-
* `delta_t_ms`) and to `brain_weight_history` for the full audit trail.
|
|
348
|
-
*
|
|
349
|
-
* ### T679 fixes (root cause: BUG-1 from stdp-wire-up-spec.md §1.4)
|
|
350
|
-
*
|
|
351
|
-
* - Separated `lookbackDays` (SQL fetch window, default 30d) from
|
|
352
|
-
* `pairingWindowMs` (spike-pair Δt gate, default 5min). Previously both
|
|
353
|
-
* used `sessionWindowMs=5min`, causing all live rows (>5min old) to produce
|
|
354
|
-
* zero events.
|
|
355
|
-
* - Writer now populates `session_id` + `retrieval_log_id` + `weight_before` /
|
|
356
|
-
* `weight_after` on `brain_plasticity_events` INSERT.
|
|
357
|
-
* - Writer now inserts into `brain_weight_history` per weight delta.
|
|
358
|
-
* - Fixed bug where `prepareUpdateEdge.run()` was missing 4 of 9 SQL params.
|
|
359
|
-
*
|
|
360
|
-
* ### Backward compatibility
|
|
361
|
-
*
|
|
362
|
-
* The legacy `applyStdpPlasticity(root, number)` signature is still accepted.
|
|
363
|
-
* The number is mapped to `pairingWindowMs`; `lookbackDays` stays at 30d.
|
|
364
|
-
* A deprecation warning is emitted to steer callers to `StdpPlasticityOptions`.
|
|
365
|
-
*
|
|
366
|
-
* ### T10351 — process-local serializer
|
|
367
|
-
*
|
|
368
|
-
* `brain_plasticity_events` and `brain_weight_history` are the highest-volume
|
|
369
|
-
* write tables in brain.db (~94% of the 1.7 GB blow-up identified in the
|
|
370
|
-
* T10301 RCA). Two concurrent `applyStdpPlasticity` runs in the same process
|
|
371
|
-
* (possible via the dialectic-hook + propose-tick reflex + manual
|
|
372
|
-
* `cleo memory consolidate` racing each other) would interleave their inserts
|
|
373
|
-
* and torn frame writes from one transaction can clobber the schema-root
|
|
374
|
-
* B-tree page — the documented corruption signature. The exported entry
|
|
375
|
-
* point now serializes passes via an async mutex; one pass at a time per
|
|
376
|
-
* process. See `brain-writer-thread.ts` for the per-row chokepoint that
|
|
377
|
-
* covers low-volume callers.
|
|
378
|
-
*
|
|
379
|
-
* @param projectRoot - Project root directory for brain.db resolution
|
|
380
|
-
* @param options - `StdpPlasticityOptions` or a legacy number (deprecated `sessionWindowMs`).
|
|
381
|
-
* @returns Counts of LTP/LTD events applied and edges created/updated.
|
|
382
|
-
*/
|
|
383
|
-
var _stdpInFlight = null;
|
|
384
|
-
async function applyStdpPlasticity(projectRoot, options) {
|
|
385
|
-
while (_stdpInFlight) try {
|
|
386
|
-
await _stdpInFlight;
|
|
387
|
-
} catch {}
|
|
388
|
-
const passPromise = applyStdpPlasticityImpl(projectRoot, options);
|
|
389
|
-
_stdpInFlight = passPromise.catch(() => void 0);
|
|
390
|
-
try {
|
|
391
|
-
return await passPromise;
|
|
392
|
-
} finally {
|
|
393
|
-
_stdpInFlight = null;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
async function applyStdpPlasticityImpl(projectRoot, options) {
|
|
397
|
-
let lookbackDays = DEFAULT_LOOKBACK_DAYS;
|
|
398
|
-
let pairingWindowMs = DEFAULT_PAIRING_WINDOW_MS;
|
|
399
|
-
if (typeof options === "number") {
|
|
400
|
-
console.warn("[brain-stdp] Deprecated: passing sessionWindowMs as a number. Use StdpPlasticityOptions { lookbackDays, pairingWindowMs } instead. (T679)");
|
|
401
|
-
pairingWindowMs = options;
|
|
402
|
-
} else if (options !== void 0) {
|
|
403
|
-
lookbackDays = options.lookbackDays ?? DEFAULT_LOOKBACK_DAYS;
|
|
404
|
-
pairingWindowMs = options.pairingWindowMs ?? DEFAULT_PAIRING_WINDOW_MS;
|
|
405
|
-
}
|
|
406
|
-
const { getBrainDb, getBrainNativeDb } = await import('./memory-sqlite2-B7dq8doO.js');
|
|
407
|
-
await getBrainDb(projectRoot);
|
|
408
|
-
const nativeDb = getBrainNativeDb(projectRoot);
|
|
409
|
-
const result = {
|
|
410
|
-
ltpEvents: 0,
|
|
411
|
-
ltdEvents: 0,
|
|
412
|
-
edgesCreated: 0,
|
|
413
|
-
pairsExamined: 0,
|
|
414
|
-
rewardModulatedEvents: 0
|
|
415
|
-
};
|
|
416
|
-
if (!nativeDb) return result;
|
|
417
|
-
try {
|
|
418
|
-
nativeDb.prepare("SELECT 1 FROM brain_retrieval_log LIMIT 1").get();
|
|
419
|
-
} catch {
|
|
420
|
-
return result;
|
|
421
|
-
}
|
|
422
|
-
try {
|
|
423
|
-
nativeDb.prepare("SELECT 1 FROM brain_plasticity_events LIMIT 1").get();
|
|
424
|
-
} catch {
|
|
425
|
-
return result;
|
|
426
|
-
}
|
|
427
|
-
const now = Date.now();
|
|
428
|
-
const cutoffMs = now - lookbackDays * 24 * 60 * 60 * 1e3;
|
|
429
|
-
const cutoffIso = new Date(cutoffMs).toISOString().replace("T", " ").slice(0, 19);
|
|
430
|
-
const nowIso = new Date(now).toISOString().replace("T", " ").slice(0, 19);
|
|
431
|
-
let logRows = [];
|
|
432
|
-
try {
|
|
433
|
-
logRows = typedAll(nativeDb.prepare(`SELECT id, entry_ids, created_at, retrieval_order, delta_ms, session_id, reward_signal
|
|
434
|
-
FROM brain_retrieval_log
|
|
435
|
-
WHERE created_at >= ?
|
|
436
|
-
ORDER BY created_at ASC, id ASC
|
|
437
|
-
LIMIT 2000`), cutoffIso);
|
|
438
|
-
} catch {
|
|
439
|
-
return result;
|
|
440
|
-
}
|
|
441
|
-
if (logRows.length === 0) return result;
|
|
442
|
-
const spikes = [];
|
|
443
|
-
let globalOrder = 0;
|
|
444
|
-
for (const row of logRows) {
|
|
445
|
-
let ids;
|
|
446
|
-
try {
|
|
447
|
-
ids = JSON.parse(row.entry_ids);
|
|
448
|
-
} catch {
|
|
449
|
-
continue;
|
|
450
|
-
}
|
|
451
|
-
if (!Array.isArray(ids)) continue;
|
|
452
|
-
const rowTime = (/* @__PURE__ */ new Date(row.created_at.replace(" ", "T") + "Z")).getTime();
|
|
453
|
-
for (const rawId of ids) {
|
|
454
|
-
if (typeof rawId !== "string" || rawId.length === 0) continue;
|
|
455
|
-
const entryId = rawId.includes(":") ? rawId : `observation:${rawId}`;
|
|
456
|
-
spikes.push({
|
|
457
|
-
entryId,
|
|
458
|
-
rowId: row.id,
|
|
459
|
-
retrievedAt: rowTime,
|
|
460
|
-
order: row.retrieval_order ?? globalOrder,
|
|
461
|
-
sessionId: row.session_id ?? null,
|
|
462
|
-
rewardSignal: row.reward_signal ?? null
|
|
463
|
-
});
|
|
464
|
-
globalOrder++;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
if (spikes.length < 2) return result;
|
|
468
|
-
spikes.sort((a, b) => a.retrievedAt - b.retrievedAt || a.order - b.order);
|
|
469
|
-
/** T695: Maximum spikes per session contributed to cross-session pair checks. */
|
|
470
|
-
const MAX_PAIRS_PER_SESSION = 50;
|
|
471
|
-
const sessionBucketMap = /* @__PURE__ */ new Map();
|
|
472
|
-
for (const spike of spikes) {
|
|
473
|
-
const key = spike.sessionId ?? "null";
|
|
474
|
-
const bucket = sessionBucketMap.get(key);
|
|
475
|
-
if (bucket !== void 0) bucket.push(spike);
|
|
476
|
-
else sessionBucketMap.set(key, [spike]);
|
|
477
|
-
}
|
|
478
|
-
const orderedBuckets = Array.from(sessionBucketMap.entries()).sort(([, a], [, b]) => (a[0]?.retrievedAt ?? 0) - (b[0]?.retrievedAt ?? 0));
|
|
479
|
-
const workingSpikes = [];
|
|
480
|
-
for (let bi = 0; bi < orderedBuckets.length; bi++) {
|
|
481
|
-
const [, bucketSpikes] = orderedBuckets[bi];
|
|
482
|
-
workingSpikes.push(...bucketSpikes);
|
|
483
|
-
}
|
|
484
|
-
const withinSessionIndex = /* @__PURE__ */ new Map();
|
|
485
|
-
const sessionSizeMap = /* @__PURE__ */ new Map();
|
|
486
|
-
for (const [, bucketSpikes] of orderedBuckets) for (let idx = 0; idx < bucketSpikes.length; idx++) {
|
|
487
|
-
const spike = bucketSpikes[idx];
|
|
488
|
-
withinSessionIndex.set(spike, idx);
|
|
489
|
-
sessionSizeMap.set(spike.sessionId ?? "null", bucketSpikes.length);
|
|
490
|
-
}
|
|
491
|
-
const prepareGetEdge = nativeDb.prepare(`SELECT weight, reinforcement_count, last_reinforced_at, plasticity_class, depression_count, last_depressed_at
|
|
492
|
-
FROM brain_page_edges
|
|
493
|
-
WHERE from_id = ? AND to_id = ? AND edge_type = 'co_retrieved'`);
|
|
494
|
-
const prepareUpdateEdgeLtp = nativeDb.prepare(`UPDATE brain_page_edges
|
|
495
|
-
SET weight = MAX(?, MIN(?, weight + ?)),
|
|
496
|
-
reinforcement_count = reinforcement_count + 1,
|
|
497
|
-
last_reinforced_at = ?,
|
|
498
|
-
plasticity_class = ?,
|
|
499
|
-
stability_score = ?
|
|
500
|
-
WHERE from_id = ? AND to_id = ? AND edge_type = 'co_retrieved'`);
|
|
501
|
-
const prepareUpdateEdgeLtd = nativeDb.prepare(`UPDATE brain_page_edges
|
|
502
|
-
SET weight = MAX(?, MIN(?, weight + ?)),
|
|
503
|
-
depression_count = depression_count + 1,
|
|
504
|
-
last_depressed_at = ?,
|
|
505
|
-
plasticity_class = ?,
|
|
506
|
-
stability_score = ?
|
|
507
|
-
WHERE from_id = ? AND to_id = ? AND edge_type = 'co_retrieved'`);
|
|
508
|
-
const prepareInsertEdge = nativeDb.prepare(`INSERT OR IGNORE INTO brain_page_edges
|
|
509
|
-
(from_id, to_id, edge_type, weight, provenance, reinforcement_count, last_reinforced_at, plasticity_class, stability_score, created_at)
|
|
510
|
-
VALUES (?, ?, 'co_retrieved', ?, 'plasticity:stdp-ltp', 1, ?, 'stdp', ?, ?)`);
|
|
511
|
-
const prepareLogEvent = nativeDb.prepare(`INSERT INTO brain_plasticity_events
|
|
512
|
-
(source_node, target_node, delta_w, kind, timestamp,
|
|
513
|
-
session_id, retrieval_log_id, weight_before, weight_after, delta_t_ms)
|
|
514
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
515
|
-
let prepareLogWeightHistory = null;
|
|
516
|
-
try {
|
|
517
|
-
nativeDb.prepare("SELECT 1 FROM brain_weight_history LIMIT 1").get();
|
|
518
|
-
prepareLogWeightHistory = nativeDb.prepare(`INSERT INTO brain_weight_history
|
|
519
|
-
(edge_from_id, edge_to_id, edge_type, weight_before, weight_after,
|
|
520
|
-
delta_weight, event_kind, source_plasticity_event_id, retrieval_log_id,
|
|
521
|
-
reward_signal, changed_at)
|
|
522
|
-
VALUES (?, ?, 'co_retrieved', ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
523
|
-
} catch {}
|
|
524
|
-
for (let i = 0; i < workingSpikes.length; i++) {
|
|
525
|
-
const spikeA = workingSpikes[i];
|
|
526
|
-
const sessionKeyA = spikeA.sessionId ?? "null";
|
|
527
|
-
const sessionSizeA = sessionSizeMap.get(sessionKeyA) ?? 1;
|
|
528
|
-
const canCrossSession = (withinSessionIndex.get(spikeA) ?? 0) >= sessionSizeA - MAX_PAIRS_PER_SESSION;
|
|
529
|
-
for (let j = i + 1; j < workingSpikes.length; j++) {
|
|
530
|
-
const spikeB = workingSpikes[j];
|
|
531
|
-
const deltaT = spikeB.retrievedAt - spikeA.retrievedAt;
|
|
532
|
-
if (deltaT > pairingWindowMs) break;
|
|
533
|
-
if (spikeA.entryId === spikeB.entryId) continue;
|
|
534
|
-
if (sessionKeyA !== (spikeB.sessionId ?? "null") && !canCrossSession) continue;
|
|
535
|
-
result.pairsExamined++;
|
|
536
|
-
const tau = computeTau(deltaT);
|
|
537
|
-
let deltaW = A_PRE * Math.exp(-deltaT / tau);
|
|
538
|
-
if (deltaW < 1e-6) continue;
|
|
539
|
-
const eventSessionId = spikeA.sessionId ?? null;
|
|
540
|
-
const eventRewardSignal = spikeA.rewardSignal ?? null;
|
|
541
|
-
let wasRewardModulated = false;
|
|
542
|
-
if (eventRewardSignal !== null) {
|
|
543
|
-
deltaW = Math.min(deltaW * (1 + eventRewardSignal), 2 * A_PRE);
|
|
544
|
-
deltaW = Math.max(deltaW, 0);
|
|
545
|
-
wasRewardModulated = true;
|
|
546
|
-
}
|
|
547
|
-
if (deltaW < 1e-6) {
|
|
548
|
-
if (wasRewardModulated) result.rewardModulatedEvents++;
|
|
549
|
-
continue;
|
|
550
|
-
}
|
|
551
|
-
const existingEdge = prepareGetEdge.get(spikeA.entryId, spikeB.entryId);
|
|
552
|
-
let ltpEventId = null;
|
|
553
|
-
try {
|
|
554
|
-
if (existingEdge !== void 0) {
|
|
555
|
-
const currentWeight = existingEdge.weight;
|
|
556
|
-
const newWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, currentWeight + deltaW));
|
|
557
|
-
const upgradedClass = upgradePlasticityClass(existingEdge.plasticity_class, "stdp");
|
|
558
|
-
const stability = computeStabilityScore((existingEdge.reinforcement_count ?? 0) + 1, nowIso, now);
|
|
559
|
-
prepareUpdateEdgeLtp.run(WEIGHT_MIN, WEIGHT_MAX, deltaW, nowIso, upgradedClass, stability, spikeA.entryId, spikeB.entryId);
|
|
560
|
-
if (isPlasticityEventDuplicate(nativeDb, spikeA.entryId, spikeB.entryId, "ltp", eventSessionId, 1)) {
|
|
561
|
-
result.ltpEvents++;
|
|
562
|
-
if (wasRewardModulated) result.rewardModulatedEvents++;
|
|
563
|
-
continue;
|
|
564
|
-
}
|
|
565
|
-
const evtStmt = prepareLogEvent.run(spikeA.entryId, spikeB.entryId, deltaW, "ltp", nowIso, eventSessionId, spikeA.rowId, currentWeight, newWeight, deltaT);
|
|
566
|
-
ltpEventId = evtStmt.lastInsertRowid != null ? Number(evtStmt.lastInsertRowid) : null;
|
|
567
|
-
if (prepareLogWeightHistory) prepareLogWeightHistory.run(spikeA.entryId, spikeB.entryId, currentWeight, newWeight, deltaW, "ltp", ltpEventId, spikeA.rowId, eventRewardSignal, nowIso);
|
|
568
|
-
} else {
|
|
569
|
-
const noveltyBoostedWeight = deltaW * K_NOVELTY;
|
|
570
|
-
const initialWeight = Math.min(WEIGHT_MAX, Math.min(A_PRE * K_NOVELTY, noveltyBoostedWeight));
|
|
571
|
-
const stability = computeStabilityScore(1, nowIso, now);
|
|
572
|
-
prepareInsertEdge.run(spikeA.entryId, spikeB.entryId, initialWeight, nowIso, stability, nowIso);
|
|
573
|
-
result.edgesCreated++;
|
|
574
|
-
const evtStmt = prepareLogEvent.run(spikeA.entryId, spikeB.entryId, initialWeight, "ltp", nowIso, eventSessionId, spikeA.rowId, null, initialWeight, deltaT);
|
|
575
|
-
ltpEventId = evtStmt.lastInsertRowid != null ? Number(evtStmt.lastInsertRowid) : null;
|
|
576
|
-
if (prepareLogWeightHistory) prepareLogWeightHistory.run(spikeA.entryId, spikeB.entryId, null, initialWeight, initialWeight, "ltp", ltpEventId, spikeA.rowId, eventRewardSignal, nowIso);
|
|
577
|
-
}
|
|
578
|
-
result.ltpEvents++;
|
|
579
|
-
if (wasRewardModulated) result.rewardModulatedEvents++;
|
|
580
|
-
} catch {}
|
|
581
|
-
let deltaWNeg = -(A_POST * Math.exp(-deltaT / tau));
|
|
582
|
-
let ltdWasRewardModulated = false;
|
|
583
|
-
if (eventRewardSignal !== null) {
|
|
584
|
-
deltaWNeg = Math.max(deltaWNeg * (1 - eventRewardSignal), -2 * A_POST);
|
|
585
|
-
ltdWasRewardModulated = true;
|
|
586
|
-
}
|
|
587
|
-
const existingReverseEdge = prepareGetEdge.get(spikeB.entryId, spikeA.entryId);
|
|
588
|
-
if (existingReverseEdge !== void 0 && Math.abs(deltaWNeg) >= 1e-6) try {
|
|
589
|
-
const currentReverseWeight = existingReverseEdge.weight;
|
|
590
|
-
const newReverseWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, currentReverseWeight + deltaWNeg));
|
|
591
|
-
const upgradedClass = upgradePlasticityClass(existingReverseEdge.plasticity_class, "stdp");
|
|
592
|
-
const stability = computeStabilityScore(existingReverseEdge.reinforcement_count, existingReverseEdge.last_reinforced_at, now);
|
|
593
|
-
prepareUpdateEdgeLtd.run(WEIGHT_MIN, WEIGHT_MAX, deltaWNeg, nowIso, upgradedClass, stability, spikeB.entryId, spikeA.entryId);
|
|
594
|
-
if (isPlasticityEventDuplicate(nativeDb, spikeB.entryId, spikeA.entryId, "ltd", eventSessionId, 1)) {
|
|
595
|
-
result.ltdEvents++;
|
|
596
|
-
if (ltdWasRewardModulated) result.rewardModulatedEvents++;
|
|
597
|
-
continue;
|
|
598
|
-
}
|
|
599
|
-
const ltdEvtStmt = prepareLogEvent.run(spikeB.entryId, spikeA.entryId, deltaWNeg, "ltd", nowIso, eventSessionId, spikeB.rowId, currentReverseWeight, newReverseWeight, deltaT);
|
|
600
|
-
const ltdEventId = ltdEvtStmt.lastInsertRowid != null ? Number(ltdEvtStmt.lastInsertRowid) : null;
|
|
601
|
-
if (prepareLogWeightHistory) prepareLogWeightHistory.run(spikeB.entryId, spikeA.entryId, currentReverseWeight, newReverseWeight, deltaWNeg, "ltd", ltdEventId, spikeB.rowId, eventRewardSignal, nowIso);
|
|
602
|
-
result.ltdEvents++;
|
|
603
|
-
if (ltdWasRewardModulated) result.rewardModulatedEvents++;
|
|
604
|
-
} catch {}
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
return result;
|
|
608
|
-
}
|
|
609
|
-
/**
|
|
610
|
-
* Backfill reward_signal values on brain_retrieval_log rows for a session.
|
|
611
|
-
*
|
|
612
|
-
* Step 9a of the `runConsolidation` pipeline — runs BEFORE `applyStdpPlasticity`
|
|
613
|
-
* (Step 9b) so reward signals are present when STDP reads them.
|
|
614
|
-
*
|
|
615
|
-
* ## Signal derivation
|
|
616
|
-
*
|
|
617
|
-
* Queries tasks.db for tasks attributed to `sessionId` within `lookbackDays`.
|
|
618
|
-
* Maps task outcomes to reward scalars:
|
|
619
|
-
*
|
|
620
|
-
* | Task state | Reward |
|
|
621
|
-
* |-----------|--------|
|
|
622
|
-
* | `status='done'`, `verification.passed=true` | +1.0 (verified correct) |
|
|
623
|
-
* | `status='done'`, verification not passed | +0.5 (completed, unverified) |
|
|
624
|
-
* | `status='cancelled'` | -0.5 (cancelled) |
|
|
625
|
-
*
|
|
626
|
-
* All brain_retrieval_log rows for the session receive the derived scalar as
|
|
627
|
-
* a session-level reward (the entire session's retrieval pattern is rated by
|
|
628
|
-
* the session's overall task outcome). If multiple tasks exist in the session,
|
|
629
|
-
* the MAXIMUM reward takes precedence (positive outcome wins).
|
|
630
|
-
*
|
|
631
|
-
* ## Skipped sessions
|
|
632
|
-
*
|
|
633
|
-
* Sessions with `session_id LIKE 'ses_backfill_%'` are synthetic (date-bucketed
|
|
634
|
-
* historical rows per M1). These have no real task correlation and MUST be skipped.
|
|
635
|
-
*
|
|
636
|
-
* ## Idempotency
|
|
637
|
-
*
|
|
638
|
-
* Already-labeled rows (reward_signal IS NOT NULL) are not overwritten.
|
|
639
|
-
* Running twice on the same session is safe.
|
|
640
|
-
*
|
|
641
|
-
* ## Transaction pattern
|
|
642
|
-
*
|
|
643
|
-
* Two separate SQLite connections (no ATTACH): reads tasks.db → computes reward
|
|
644
|
-
* map → writes brain.db in separate transactions. Matches `cross-db-cleanup.ts`.
|
|
645
|
-
*
|
|
646
|
-
* @param projectRoot - Project root directory for database resolution
|
|
647
|
-
* @param sessionId - The session ID to backfill. Pass null/undefined for no-op.
|
|
648
|
-
* @param lookbackDays - Days of tasks.db history to scan (default 30)
|
|
649
|
-
* @returns Counts of rows labeled and skipped
|
|
650
|
-
*
|
|
651
|
-
* @task T681
|
|
652
|
-
* @epic T673
|
|
653
|
-
*/
|
|
654
|
-
async function backfillRewardSignals(projectRoot, sessionId, lookbackDays = 30) {
|
|
655
|
-
const result = {
|
|
656
|
-
rowsLabeled: 0,
|
|
657
|
-
rowsSkipped: 0
|
|
658
|
-
};
|
|
659
|
-
if (!sessionId) return result;
|
|
660
|
-
if (sessionId.startsWith("ses_backfill_")) return result;
|
|
661
|
-
let taskRows = [];
|
|
662
|
-
try {
|
|
663
|
-
const { getDb } = await import('./sqlite2-CUPut2fh.js');
|
|
664
|
-
const tasksDb = await getDb(projectRoot);
|
|
665
|
-
const { tasks } = await import('./tasks-schema2-CTMoQKQy.js');
|
|
666
|
-
const { and, eq, inArray, gte, or, isNotNull } = await import('./index-DAgVDouG.js');
|
|
667
|
-
const cutoffTs = (/* @__PURE__ */ new Date(Date.now() - lookbackDays * 24 * 60 * 60 * 1e3)).toISOString().replace("T", " ").slice(0, 19);
|
|
668
|
-
taskRows = (await tasksDb.select({
|
|
669
|
-
id: tasks.id,
|
|
670
|
-
status: tasks.status,
|
|
671
|
-
verificationJson: tasks.verificationJson,
|
|
672
|
-
completedAt: tasks.completedAt,
|
|
673
|
-
cancelledAt: tasks.cancelledAt
|
|
674
|
-
}).from(tasks).where(and(eq(tasks.sessionId, sessionId), inArray(tasks.status, ["done", "cancelled"]), or(and(isNotNull(tasks.completedAt), gte(tasks.completedAt, cutoffTs)), and(isNotNull(tasks.cancelledAt), gte(tasks.cancelledAt, cutoffTs))))).all()).map((r) => ({
|
|
675
|
-
id: r.id,
|
|
676
|
-
status: r.status,
|
|
677
|
-
verificationJson: r.verificationJson ?? null,
|
|
678
|
-
completedAt: r.completedAt ?? null,
|
|
679
|
-
cancelledAt: r.cancelledAt ?? null
|
|
680
|
-
}));
|
|
681
|
-
} catch {
|
|
682
|
-
return result;
|
|
683
|
-
}
|
|
684
|
-
if (taskRows.length === 0) return result;
|
|
685
|
-
let sessionReward = null;
|
|
686
|
-
/** Derive the scalar reward for one task row. */
|
|
687
|
-
function deriveTaskReward(task) {
|
|
688
|
-
if (task.status === "cancelled") return -0.5;
|
|
689
|
-
let verificationPassed = false;
|
|
690
|
-
if (task.verificationJson) try {
|
|
691
|
-
verificationPassed = JSON.parse(task.verificationJson).passed === true;
|
|
692
|
-
} catch {}
|
|
693
|
-
return verificationPassed ? 1 : .5;
|
|
694
|
-
}
|
|
695
|
-
for (const task of taskRows) {
|
|
696
|
-
const taskReward = deriveTaskReward(task);
|
|
697
|
-
if (sessionReward === null || taskReward > sessionReward) sessionReward = taskReward;
|
|
698
|
-
}
|
|
699
|
-
if (sessionReward === null) return result;
|
|
700
|
-
try {
|
|
701
|
-
const { getBrainDb, getBrainNativeDb } = await import('./memory-sqlite2-B7dq8doO.js');
|
|
702
|
-
await getBrainDb(projectRoot);
|
|
703
|
-
const nativeDb = getBrainNativeDb(projectRoot);
|
|
704
|
-
if (!nativeDb) return result;
|
|
705
|
-
try {
|
|
706
|
-
nativeDb.prepare("SELECT 1 FROM brain_retrieval_log LIMIT 1").get();
|
|
707
|
-
} catch {
|
|
708
|
-
return result;
|
|
709
|
-
}
|
|
710
|
-
const updateResult = nativeDb.prepare(`UPDATE brain_retrieval_log
|
|
711
|
-
SET reward_signal = ?
|
|
712
|
-
WHERE session_id = ?
|
|
713
|
-
AND reward_signal IS NULL`).run(sessionReward, sessionId);
|
|
714
|
-
const updatedCount = typeof updateResult.changes === "number" ? updateResult.changes : 0;
|
|
715
|
-
result.rowsLabeled = updatedCount;
|
|
716
|
-
result.rowsSkipped = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_retrieval_log
|
|
717
|
-
WHERE session_id = ? AND reward_signal IS NOT NULL`).get(sessionId)?.cnt ?? 0;
|
|
718
|
-
let modulatorsExist = false;
|
|
719
|
-
try {
|
|
720
|
-
nativeDb.prepare("SELECT 1 FROM brain_modulators LIMIT 1").get();
|
|
721
|
-
modulatorsExist = true;
|
|
722
|
-
} catch {}
|
|
723
|
-
if (modulatorsExist && updatedCount > 0) {
|
|
724
|
-
const insertModulator = nativeDb.prepare(`INSERT INTO brain_modulators
|
|
725
|
-
(modulator_type, valence, magnitude, source_event_id, session_id, description)
|
|
726
|
-
VALUES (?, ?, 1.0, ?, ?, ?)`);
|
|
727
|
-
for (const task of taskRows) {
|
|
728
|
-
const taskReward = deriveTaskReward(task);
|
|
729
|
-
let modulatorType;
|
|
730
|
-
let description;
|
|
731
|
-
if (task.status === "cancelled") {
|
|
732
|
-
modulatorType = "task_cancelled";
|
|
733
|
-
description = `Task ${task.id} cancelled`;
|
|
734
|
-
} else if (taskReward >= 1) {
|
|
735
|
-
modulatorType = "task_verified";
|
|
736
|
-
description = `Task ${task.id} completed and verified`;
|
|
737
|
-
} else {
|
|
738
|
-
modulatorType = "task_completed";
|
|
739
|
-
description = `Task ${task.id} completed (unverified)`;
|
|
740
|
-
}
|
|
741
|
-
try {
|
|
742
|
-
insertModulator.run(modulatorType, taskReward, task.id, sessionId, description);
|
|
743
|
-
} catch {}
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
} catch {}
|
|
747
|
-
return result;
|
|
748
|
-
}
|
|
749
|
-
/**
|
|
750
|
-
* Apply homeostatic weight decay to `hebbian` and `stdp` brain edges (Step 9c).
|
|
751
|
-
*
|
|
752
|
-
* Runs after `applyStdpPlasticity` (Step 9b) in the consolidation pipeline.
|
|
753
|
-
* For each `co_retrieved` edge with `plasticity_class IN ('hebbian', 'stdp')` and
|
|
754
|
-
* `last_reinforced_at` older than `gracePeriodDays`, applies:
|
|
755
|
-
*
|
|
756
|
-
* ```
|
|
757
|
-
* new_weight = current_weight × (1 - decayRatePerDay) ^ days_idle
|
|
758
|
-
* ```
|
|
759
|
-
*
|
|
760
|
-
* where `days_idle = (now − last_reinforced_at) − gracePeriodDays`.
|
|
761
|
-
*
|
|
762
|
-
* If `new_weight < pruneThreshold`, the edge is **deleted** and a
|
|
763
|
-
* `brain_weight_history` row with `event_kind='prune'` is written.
|
|
764
|
-
* If `new_weight >= pruneThreshold`, the weight is updated **without**
|
|
765
|
-
* writing to `brain_weight_history` (routine decay is not logged per
|
|
766
|
-
* spec §1 decision #11).
|
|
767
|
-
*
|
|
768
|
-
* **Protected edge classes** (never touched):
|
|
769
|
-
* - `plasticity_class = 'static'` — structural edges
|
|
770
|
-
* - `plasticity_class = 'external'` — externally owned edges
|
|
771
|
-
* - Edges with `last_reinforced_at IS NULL` — never reinforced, skip decay
|
|
772
|
-
*
|
|
773
|
-
* @param projectRoot - Project root directory for brain.db resolution
|
|
774
|
-
* @param options - Decay configuration (see `HomeostaticDecayOptions`)
|
|
775
|
-
* @returns Counts of edges decayed and pruned
|
|
776
|
-
*
|
|
777
|
-
* @task T690
|
|
778
|
-
* @epic T673
|
|
779
|
-
* @see docs/specs/stdp-wire-up-spec.md §3.9
|
|
780
|
-
*/
|
|
781
|
-
async function applyHomeostaticDecay(projectRoot, options) {
|
|
782
|
-
const decayRatePerDay = options?.decayRatePerDay ?? .02;
|
|
783
|
-
const gracePeriodDays = options?.gracePeriodDays ?? 7;
|
|
784
|
-
const pruneThreshold = options?.pruneThreshold ?? .05;
|
|
785
|
-
const result = {
|
|
786
|
-
edgesDecayed: 0,
|
|
787
|
-
edgesPruned: 0
|
|
788
|
-
};
|
|
789
|
-
const { getBrainDb, getBrainNativeDb } = await import('./memory-sqlite2-B7dq8doO.js');
|
|
790
|
-
await getBrainDb(projectRoot);
|
|
791
|
-
const nativeDb = getBrainNativeDb(projectRoot);
|
|
792
|
-
if (!nativeDb) return result;
|
|
793
|
-
try {
|
|
794
|
-
nativeDb.prepare("SELECT 1 FROM brain_page_edges LIMIT 1").get();
|
|
795
|
-
} catch {
|
|
796
|
-
return result;
|
|
797
|
-
}
|
|
798
|
-
const nowIso = (/* @__PURE__ */ new Date()).toISOString().replace("T", " ").slice(0, 19);
|
|
799
|
-
let weightHistoryExists = false;
|
|
800
|
-
try {
|
|
801
|
-
nativeDb.prepare("SELECT 1 FROM brain_weight_history LIMIT 1").get();
|
|
802
|
-
weightHistoryExists = true;
|
|
803
|
-
} catch {}
|
|
804
|
-
let candidates = [];
|
|
805
|
-
try {
|
|
806
|
-
candidates = typedAll(nativeDb.prepare(`SELECT from_id, to_id, edge_type, weight, plasticity_class, last_reinforced_at
|
|
807
|
-
FROM brain_page_edges
|
|
808
|
-
WHERE plasticity_class IN ('hebbian', 'stdp')
|
|
809
|
-
AND last_reinforced_at IS NOT NULL
|
|
810
|
-
AND (julianday('now') - julianday(last_reinforced_at)) > ?`), gracePeriodDays);
|
|
811
|
-
} catch {
|
|
812
|
-
return result;
|
|
813
|
-
}
|
|
814
|
-
if (candidates.length === 0) return result;
|
|
815
|
-
const prepareUpdateWeight = nativeDb.prepare(`UPDATE brain_page_edges
|
|
816
|
-
SET weight = ?
|
|
817
|
-
WHERE from_id = ? AND to_id = ? AND edge_type = ?`);
|
|
818
|
-
const prepareDeleteEdge = nativeDb.prepare(`DELETE FROM brain_page_edges
|
|
819
|
-
WHERE from_id = ? AND to_id = ? AND edge_type = ?`);
|
|
820
|
-
let prepareInsertHistory = null;
|
|
821
|
-
if (weightHistoryExists) try {
|
|
822
|
-
prepareInsertHistory = nativeDb.prepare(`INSERT INTO brain_weight_history
|
|
823
|
-
(edge_from_id, edge_to_id, edge_type, weight_before, weight_after,
|
|
824
|
-
delta_weight, event_kind, changed_at)
|
|
825
|
-
VALUES (?, ?, ?, ?, 0.0, ?, 'prune', ?)`);
|
|
826
|
-
} catch {}
|
|
827
|
-
const nowMs = Date.now();
|
|
828
|
-
for (const edge of candidates) try {
|
|
829
|
-
const daysIdle = (nowMs - (/* @__PURE__ */ new Date(edge.last_reinforced_at.replace(" ", "T") + "Z")).getTime()) / (1440 * 60 * 1e3);
|
|
830
|
-
const decayDays = Math.max(0, daysIdle - gracePeriodDays);
|
|
831
|
-
const newWeight = edge.weight * (1 - decayRatePerDay) ** decayDays;
|
|
832
|
-
if (newWeight < pruneThreshold) {
|
|
833
|
-
prepareDeleteEdge.run(edge.from_id, edge.to_id, edge.edge_type);
|
|
834
|
-
result.edgesPruned++;
|
|
835
|
-
if (prepareInsertHistory) {
|
|
836
|
-
const deltaW = -edge.weight;
|
|
837
|
-
try {
|
|
838
|
-
prepareInsertHistory.run(edge.from_id, edge.to_id, edge.edge_type, edge.weight, deltaW, nowIso);
|
|
839
|
-
} catch {}
|
|
840
|
-
}
|
|
841
|
-
} else {
|
|
842
|
-
prepareUpdateWeight.run(newWeight, edge.from_id, edge.to_id, edge.edge_type);
|
|
843
|
-
result.edgesDecayed++;
|
|
844
|
-
}
|
|
845
|
-
} catch {}
|
|
846
|
-
return result;
|
|
847
|
-
}
|
|
848
|
-
/**
|
|
849
|
-
* Prune stale rows from `brain_plasticity_events` and `brain_weight_history`.
|
|
850
|
-
*
|
|
851
|
-
* The two tables are STDP-driven append-only event logs. Per the T10301 RCA,
|
|
852
|
-
* unbounded growth (19K → 3.57M rows, 446 MB + 458 MB across 19 days) caused
|
|
853
|
-
* `brain.db` to reach 1.7 GB and contributed to the malformation incident
|
|
854
|
-
* (Saga T10281). T10348 wires retention discipline behind this single chokepoint.
|
|
855
|
-
*
|
|
856
|
-
* ### Two-stage prune
|
|
857
|
-
*
|
|
858
|
-
* 1. **Age-based**: delete rows with `timestamp` / `changed_at` older than
|
|
859
|
-
* `retentionDays` days (default 30 — matches STDP `lookbackDays`).
|
|
860
|
-
* 2. **Row-cap fallback**: after step 1, if the table is still over its row
|
|
861
|
-
* cap, delete the oldest remaining rows until under the cap.
|
|
862
|
-
*
|
|
863
|
-
* ### Operator override
|
|
864
|
-
*
|
|
865
|
-
* `CLEO_BRAIN_HISTORY_RETENTION_DAYS=0` disables both stages entirely. Any
|
|
866
|
-
* positive integer value REPLACES `retentionDays` (the option still wins if
|
|
867
|
-
* passed explicitly — env is only consulted when no option is passed).
|
|
868
|
-
*
|
|
869
|
-
* ### Best-effort semantics
|
|
870
|
-
*
|
|
871
|
-
* Every SQL call is wrapped — missing tables, partial-migration installs,
|
|
872
|
-
* and per-row errors are all logged silently and never throw. This function
|
|
873
|
-
* MUST NEVER block `runConsolidation` even when retention storage is wedged.
|
|
874
|
-
*
|
|
875
|
-
* ### Logging
|
|
876
|
-
*
|
|
877
|
-
* When `plasticityEventsDeleted + weightHistoryDeleted >= PRUNE_HISTORY_LOG_THRESHOLD`
|
|
878
|
-
* (default 10_000), a single `[pruneStaleHistory]` info line is emitted via
|
|
879
|
-
* `console.info` so operators can see large prunes in session output. Smaller
|
|
880
|
-
* prunes are silent. VACUUM is NEVER triggered automatically — heavyweight
|
|
881
|
-
* compaction stays operator-driven (`cleo doctor --vacuum`).
|
|
882
|
-
*
|
|
883
|
-
* @param projectRoot - Project root directory for brain.db resolution
|
|
884
|
-
* @param options - Retention configuration (see `PruneStaleHistoryOptions`)
|
|
885
|
-
* @returns Counts of rows deleted from each table
|
|
886
|
-
*
|
|
887
|
-
* @task T10348
|
|
888
|
-
* @epic T10286
|
|
889
|
-
*/
|
|
890
|
-
async function pruneStaleHistory(projectRoot, options) {
|
|
891
|
-
const result = {
|
|
892
|
-
plasticityEventsDeleted: 0,
|
|
893
|
-
weightHistoryDeleted: 0,
|
|
894
|
-
skipped: false
|
|
895
|
-
};
|
|
896
|
-
let retentionDays;
|
|
897
|
-
if (options?.retentionDays !== void 0) retentionDays = options.retentionDays;
|
|
898
|
-
else {
|
|
899
|
-
const envRaw = process.env["CLEO_BRAIN_HISTORY_RETENTION_DAYS"];
|
|
900
|
-
if (envRaw !== void 0 && envRaw !== "") {
|
|
901
|
-
const parsed = Number.parseInt(envRaw, 10);
|
|
902
|
-
retentionDays = Number.isFinite(parsed) && parsed >= 0 ? parsed : 30;
|
|
903
|
-
} else retentionDays = 30;
|
|
904
|
-
}
|
|
905
|
-
if (retentionDays === 0) {
|
|
906
|
-
result.skipped = true;
|
|
907
|
-
return result;
|
|
908
|
-
}
|
|
909
|
-
const plasticityRowCap = options?.plasticityEventsRowCap ?? 5e4;
|
|
910
|
-
const weightHistoryRowCap = options?.weightHistoryRowCap ?? 5e4;
|
|
911
|
-
const { getBrainDb, getBrainNativeDb } = await import('./memory-sqlite2-B7dq8doO.js');
|
|
912
|
-
await getBrainDb(projectRoot);
|
|
913
|
-
const nativeDb = getBrainNativeDb(projectRoot);
|
|
914
|
-
if (!nativeDb) return result;
|
|
915
|
-
const cutoffMs = Date.now() - retentionDays * 24 * 60 * 60 * 1e3;
|
|
916
|
-
const cutoffIso = new Date(cutoffMs).toISOString().replace("T", " ").slice(0, 19);
|
|
917
|
-
try {
|
|
918
|
-
nativeDb.prepare("SELECT 1 FROM brain_plasticity_events LIMIT 1").get();
|
|
919
|
-
const changes = nativeDb.prepare(`DELETE FROM brain_plasticity_events WHERE timestamp < ?`).run(cutoffIso).changes;
|
|
920
|
-
result.plasticityEventsDeleted += Number(changes ?? 0);
|
|
921
|
-
} catch {}
|
|
922
|
-
try {
|
|
923
|
-
nativeDb.prepare("SELECT 1 FROM brain_weight_history LIMIT 1").get();
|
|
924
|
-
const changes = nativeDb.prepare(`DELETE FROM brain_weight_history WHERE changed_at < ?`).run(cutoffIso).changes;
|
|
925
|
-
result.weightHistoryDeleted += Number(changes ?? 0);
|
|
926
|
-
} catch {}
|
|
927
|
-
try {
|
|
928
|
-
const row = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_plasticity_events`).get();
|
|
929
|
-
const count = Number(row?.cnt ?? 0);
|
|
930
|
-
if (count > plasticityRowCap) {
|
|
931
|
-
const overage = count - plasticityRowCap;
|
|
932
|
-
const info = nativeDb.prepare(`DELETE FROM brain_plasticity_events
|
|
933
|
-
WHERE id IN (
|
|
934
|
-
SELECT id FROM brain_plasticity_events
|
|
935
|
-
ORDER BY timestamp ASC, id ASC
|
|
936
|
-
LIMIT ?
|
|
937
|
-
)`).run(overage);
|
|
938
|
-
result.plasticityEventsDeleted += Number(info.changes ?? 0);
|
|
939
|
-
}
|
|
940
|
-
} catch {}
|
|
941
|
-
try {
|
|
942
|
-
const row = nativeDb.prepare(`SELECT COUNT(*) AS cnt FROM brain_weight_history`).get();
|
|
943
|
-
const count = Number(row?.cnt ?? 0);
|
|
944
|
-
if (count > weightHistoryRowCap) {
|
|
945
|
-
const overage = count - weightHistoryRowCap;
|
|
946
|
-
const info = nativeDb.prepare(`DELETE FROM brain_weight_history
|
|
947
|
-
WHERE id IN (
|
|
948
|
-
SELECT id FROM brain_weight_history
|
|
949
|
-
ORDER BY changed_at ASC, id ASC
|
|
950
|
-
LIMIT ?
|
|
951
|
-
)`).run(overage);
|
|
952
|
-
result.weightHistoryDeleted += Number(info.changes ?? 0);
|
|
953
|
-
}
|
|
954
|
-
} catch {}
|
|
955
|
-
if (result.plasticityEventsDeleted + result.weightHistoryDeleted >= 1e4) console.info(`[pruneStaleHistory] Pruned ${result.plasticityEventsDeleted} plasticity_events + ${result.weightHistoryDeleted} weight_history rows (retention=${retentionDays}d). Consider running 'cleo doctor --vacuum' to reclaim disk space.`);
|
|
956
|
-
return result;
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
export { applyHomeostaticDecay, applyStdpPlasticity, backfillRewardSignals, pruneStaleHistory, shouldRunPlasticity };
|
|
960
|
-
//# sourceMappingURL=brain-stdp2-BxSBIlSr.js.map
|