@rubytech/create-maxy-code 0.1.382 → 0.1.384
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/package.json +1 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js +37 -9
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.d.ts +48 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.js +51 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/account-lifecycle.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +39 -24
- package/payload/platform/plugins/cloudflare/references/hosting-sites.md +7 -4
- package/payload/platform/plugins/cloudflare/skills/cloudflare/SKILL.md +9 -6
- package/payload/platform/plugins/docs/references/admin-ui.md +33 -22
- package/payload/platform/plugins/docs/references/attachments.md +5 -1
- package/payload/platform/plugins/email/skills/email-composition/SKILL.md +1 -1
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/d1-command.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/d1-command.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/d1-command.test.js +23 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/d1-command.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.d.ts +12 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.js +14 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/d1-command.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +3 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
- package/payload/platform/plugins/telegram/skills/configure/SKILL.md +2 -0
- package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +1 -1
- package/payload/platform/scripts/__tests__/check-plugin-references.test.sh +83 -0
- package/payload/platform/scripts/check-plugin-references.mjs +60 -11
- package/payload/platform/services/claude-session-manager/dist/account-title-stores.d.ts +21 -0
- package/payload/platform/services/claude-session-manager/dist/account-title-stores.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/account-title-stores.js +71 -0
- package/payload/platform/services/claude-session-manager/dist/account-title-stores.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +2 -2
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +46 -103
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +40 -10
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rootless-client-audit.d.ts +35 -0
- package/payload/platform/services/claude-session-manager/dist/rootless-client-audit.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/rootless-client-audit.js +114 -0
- package/payload/platform/services/claude-session-manager/dist/rootless-client-audit.js.map +1 -0
- package/payload/platform/services/claude-session-manager/package.json +2 -1
- package/payload/server/package.json +2 -1
- package/payload/server/public/assets/{AdminLoginScreens-C_Qn0UPy.js → AdminLoginScreens-C_h8V0Xs.js} +1 -1
- package/payload/server/public/assets/AdminShell-Dqnxpn7U.js +1 -0
- package/payload/server/public/assets/{Checkbox-B76SHnPC.js → Checkbox-Bl1WRVGb.js} +1 -1
- package/payload/server/public/assets/Transcript-C93Lifnb.js +1 -0
- package/payload/server/public/assets/admin-ByoqNaSf.js +1 -0
- package/payload/server/public/assets/admin-types-hioowVct.js +1 -0
- package/payload/server/public/assets/{arc-JgkiMDpu.js → arc-C6-nr5UV.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-DdgmZ93B.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CyIbl1bD.js → architectureDiagram-Q4EWVU46-DIdho_T6.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-CkcZVblf.js → blockDiagram-DXYQGD6D-D5rTTBSy.js} +1 -1
- package/payload/server/public/assets/{browser-Chmp3Xfv.js → browser-BXY1sNxv.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-VByNuobb.js → c4Diagram-AHTNJAMY-pfUVHdmy.js} +1 -1
- package/payload/server/public/assets/calendar-CObRTPpU.js +1 -0
- package/payload/server/public/assets/channel-Da-UUyqx.js +1 -0
- package/payload/server/public/assets/chat-Dq-VHp7a.js +1 -0
- package/payload/server/public/assets/chevron-left-DjbK_wdQ.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-BFwiGcqo.js → chunk-2KRD3SAO-EF6cdj8U.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-BMCBU-vf.js → chunk-336JU56O-DE-lcZAc.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-B1kFAxo1.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-RfOeo8_F.js → chunk-4BX2VUAB--ANCzzyn.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-B5xbgonc.js → chunk-4TB4RGXK-DTO_X80J.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-K8U55ikJ.js → chunk-55IACEB6-4J3nrz44.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-DgmmsrAc.js → chunk-5FUZZQ4R-jH_eqAHL.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-DQ6rtehF.js → chunk-5PVQY5BW-C-qU6p6k.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-CC2kfpmQ.js → chunk-67CJDMHE-DXxH9Snb.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-BClZ5bzw.js → chunk-7N4EOEYR-CCkxuP7A.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-adtwAFKX.js → chunk-AA7GKIK3-CyItuM8d.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-fKY1UWEd.js → chunk-BSJP7CBP-Bg7gxYNf.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-knPAMmjG.js → chunk-CIAEETIT-BAXbOqv5.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-C7FRKZ5e.js → chunk-EDXVE4YY-vdoErQoc.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-0cgFfv3z.js → chunk-ENJZ2VHE-Cz_z_6GK.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-Dm_Hcblb.js → chunk-FMBD7UC4-Ck2jvOgW.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-CfCJNXmK.js → chunk-FOC6F5B3-DucR0Qo8.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-xeu6qrZj.js → chunk-ICPOFSXX-DolYDD7g.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-BQDCSuTh.js → chunk-K5T4RW27-FRzx7E5I.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-D6fFAgbM.js → chunk-KGLVRYIC-Bb5S4Bmc.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-Dskwlc-K.js → chunk-LIHQZDEY-c8VZJ-lU.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-CnHIrJeA.js → chunk-ORNJ4GCN-BAeh-LZ1.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-B4bnsPkv.js → chunk-OYMX7WX6-BUg7Kysh.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BjE-Glwf.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-BeEXzOqV.js → chunk-U2HBQHQK-K4r17UTk.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-D2rpgOqd.js → chunk-X2U36JSP-Byh-CyxC.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-D-yT82Xf.js → chunk-XPW4576I-DC7lhr93.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-DqxlLBm1.js → chunk-YZCP3GAM-B2cu7AEP.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-CA_Ep0OM.js → chunk-ZZ45TVLE-DH_p8sFX.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-Dol3Ogeh.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-VUMj7gWH.js +1 -0
- package/payload/server/public/assets/clone-m7oGrdBC.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-DWb9mxTa.js → cose-bilkent-S5V4N54A-DeM6JI00.js} +1 -1
- package/payload/server/public/assets/{dagre-B3K7jxOZ.js → dagre-3drs3e4F.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-BhiTISRq.js → dagre-KV5264BT-C6S-VUtN.js} +1 -1
- package/payload/server/public/assets/data-BXOoK8Ci.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-D5yBIDpm.js → diagram-5BDNPKRD-BkvA32I3.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-CSTE1S4d.js → diagram-G4DWMVQ6-CVwtRMPB.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-D8llv4XY.js → diagram-MMDJMWI5-DJ1JVMbd.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CITQ7aDM.js → diagram-TYMM5635-rfj-crtX.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-BjR5nlmv.js → erDiagram-SMLLAGMA-TJPuweS5.js} +1 -1
- package/payload/server/public/assets/{flatten-DhYYI_lo.js → flatten-BZkoyJ4e.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Dl6e-E0f.js → flowDiagram-DWJPFMVM-LQWEUjbV.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-CppkrFAl.js → ganttDiagram-T4ZO3ILL-DdYsxKRw.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-cJEaiQq4.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-clV_tnwa.js → gitGraphDiagram-UUTBAWPF-sx8-fokM.js} +1 -1
- package/payload/server/public/assets/{graph-DEHmvpNl.js → graph-BCL0fVDH.js} +3 -3
- package/payload/server/public/assets/{graph-labels-CYAjU3rz.js → graph-labels-C0nn9nQi.js} +1 -1
- package/payload/server/public/assets/{graphlib-Cnk6WL-8.js → graphlib-DixeJdCf.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-BUxfOTKa.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CD-d3Rgf.js +2 -0
- package/payload/server/public/assets/{isEmpty-DGhq_DBP.js → isEmpty-VRKFml5R.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DUqusmP1.js → ishikawaDiagram-UXIWVN3A-BKUCuKhZ.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-RMEvGtDJ.js → journeyDiagram-VCZTEJTY-BafZP6pM.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BxkwQPCP.js → kanban-definition-6JOO6SKY-DQ4c6wRv.js} +1 -1
- package/payload/server/public/assets/{line-CiOuSBlJ.js → line-0_x1Wivu.js} +1 -1
- package/payload/server/public/assets/{linear-D22sItNm.js → linear-CZrU-J2V.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-kvN8ajT-.js → mermaid-parser.core-DwJ1cyfO.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-DKHTTwbg.js → mermaid.core-DnUst0He.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CKUJxwdG.js → mindmap-definition-QFDTVHPH-oc-GwerE.js} +1 -1
- package/payload/server/public/assets/operator-B_1qYO7m.js +1 -0
- package/payload/server/public/assets/{ordinal-CibZU3PM.js → ordinal-v4prQcuq.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-B9U_2639.js +1 -0
- package/payload/server/public/assets/page-BQEl7aZO.js +1 -0
- package/payload/server/public/assets/page-Dck23z9U.js +32 -0
- package/payload/server/public/assets/pdf-render-NQmflZ7K.js +11 -0
- package/payload/server/public/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-Glh-lJOT.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-CRMabeJN.js → pieDiagram-DEJITSTG-BnBtQNHM.js} +1 -1
- package/payload/server/public/assets/public-BzvwPHM0.js +1 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DcrlhDuj.js → quadrantDiagram-34T5L4WZ-CkNqtzHI.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-CTSgob8w.js +1 -0
- package/payload/server/public/assets/{reduce-Da0RBva0.js → reduce-0Mm1v1Rr.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-DP231rM_.js → requirementDiagram-MS252O5E-D7qc27KT.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-K1xZvf3B.js → rotate-ccw-CHep9vl5.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6--HM5_dC8.js → sankeyDiagram-XADWPNL6-2Y4sqRY7.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BsiVmDR9.js → sequenceDiagram-FGHM5R23-hXOiSHuT.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-Cjdhqdjh.js → stateDiagram-FHFEXIEX-Dq4hhkLA.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DTj9o2vZ.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Cf5xPmSA.js → timeline-definition-GMOUNBTQ-Dn9wBUEw.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CXApkW1l.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-DzvTXAcT.js +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-B1Kf32uG.js +9 -0
- package/payload/server/public/assets/{useSubAccountSwitcher-B44qYovc.css → useSubAccountSwitcher-CfI3J2IX.css} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-PCor55Sw.js → vennDiagram-DHZGUBPP-BKVHJiIt.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-BExXV4oI.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-bokCHsim.js → wardleyDiagram-NUSXRM2D-Bn9vvpdK.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-B2YnsUoQ.js → xychartDiagram-5P7HB3ND-FIoMdPB3.js} +1 -1
- package/payload/server/public/browser.html +5 -4
- package/payload/server/public/calendar.html +6 -4
- package/payload/server/public/chat.html +11 -8
- package/payload/server/public/data.html +8 -5
- package/payload/server/public/graph.html +9 -7
- package/payload/server/public/index.html +11 -9
- package/payload/server/public/operator.html +13 -10
- package/payload/server/public/public.html +10 -8
- package/payload/server/server.js +150 -21
- package/payload/server/public/assets/AdminShell-iHdYhspw.js +0 -1
- package/payload/server/public/assets/admin-RTEhnrPk.js +0 -1
- package/payload/server/public/assets/admin-types-DJoj6VJv.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-Dh5BzVzk.js +0 -1
- package/payload/server/public/assets/calendar-CjE7hiqV.js +0 -1
- package/payload/server/public/assets/channel-CFHc3PQ7.js +0 -1
- package/payload/server/public/assets/chat-DiKmCMO1.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-De9_O1hi.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-COwe7oXR.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-wjL65qaU.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D_EIplVd.js +0 -1
- package/payload/server/public/assets/clone-CEczy_Ef.js +0 -1
- package/payload/server/public/assets/data-5PpEsUR3.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-KHAc7IxG.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-C6nm3sYf.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DhwCejsr.js +0 -2
- package/payload/server/public/assets/operator-BDTnuQhB.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-z-APhyNH.js +0 -1
- package/payload/server/public/assets/page-D8FFXoI9.js +0 -1
- package/payload/server/public/assets/page-HeiBebPq.js +0 -32
- package/payload/server/public/assets/pie-ZZUOXDRM-D_HVZjir.js +0 -1
- package/payload/server/public/assets/public-BIOxrxZK.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-DtKBIb3o.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-6v4alr7n.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-DbXWs029.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-DUGgqAs9.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-DPEkYkYd.js +0 -9
- package/payload/server/public/assets/wardley-RL74JXVD-Cjn85RON.js +0 -1
- /package/payload/server/public/assets/{_baseFor-BFYpZGkN.js → _baseFor-C0Y1mc3g.js} +0 -0
- /package/payload/server/public/assets/{array-CYkMkqnU.js → array-DqLCdDFv.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-DqlHsaog.js → cytoscape.esm-Cn5b4Cdu.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-Beh6XjaL.js → defaultLocale-CrJzLgRD.js} +0 -0
- /package/payload/server/public/assets/{dist-BMqkacmt.js → dist-Dlks0Bfw.js} +0 -0
- /package/payload/server/public/assets/{init-Rr1s_RiX.js → init-C0r9Gk5G.js} +0 -0
- /package/payload/server/public/assets/{katex-pVJiI_rc.js → katex-BFwFoEts.js} +0 -0
- /package/payload/server/public/assets/{path-BAQ3hXlG.js → path-DIKpVbHL.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-B_l5jfgx.js → preload-helper-C5gCWwwF.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-nHaDi0Kw.js → rough.esm-DsHEmXUZ.js} +0 -0
- /package/payload/server/public/assets/{src-CsEKjNXD.js → src-Bv7ZWAzF.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d1-command.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/d1-command.test.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qEAAqE;AACrE,yEAAyE;AACzE,4EAA4E;AAC5E,kEAAkE;AAClE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACnB,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;YACnC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU;SAC9C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the argv for a D1 SQL read. Resolves wrangler via `npx` — the brand
|
|
3
|
+
* server PATH carries no global `wrangler`, only `npx wrangler` resolves, the
|
|
4
|
+
* same form the proven forward-path availability publisher uses. Keeping this
|
|
5
|
+
* pure lets the argv be asserted without importing the side-effectful
|
|
6
|
+
* dispatcher script (Task 1350).
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildD1Command(dbName: string, sql: string): {
|
|
9
|
+
command: string;
|
|
10
|
+
args: string[];
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=d1-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d1-command.d.ts","sourceRoot":"","sources":["../../src/lib/d1-command.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAKrC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the argv for a D1 SQL read. Resolves wrangler via `npx` — the brand
|
|
3
|
+
* server PATH carries no global `wrangler`, only `npx wrangler` resolves, the
|
|
4
|
+
* same form the proven forward-path availability publisher uses. Keeping this
|
|
5
|
+
* pure lets the argv be asserted without importing the side-effectful
|
|
6
|
+
* dispatcher script (Task 1350).
|
|
7
|
+
*/
|
|
8
|
+
export function buildD1Command(dbName, sql) {
|
|
9
|
+
return {
|
|
10
|
+
command: "npx",
|
|
11
|
+
args: ["wrangler", "d1", "execute", dbName, "--remote", "--json", "--command", sql],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=d1-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d1-command.js","sourceRoot":"","sources":["../../src/lib/d1-command.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,GAAW;IAEX,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC;KACpF,CAAC;AACJ,CAAC"}
|
|
@@ -24,6 +24,7 @@ import { resolve, join } from "node:path";
|
|
|
24
24
|
import { homedir } from "node:os";
|
|
25
25
|
import { reconcileOne, auditCounts } from "../lib/booking-reconcile.js";
|
|
26
26
|
import { notifyBooking } from "../lib/booking-notify.js";
|
|
27
|
+
import { buildD1Command } from "../lib/d1-command.js";
|
|
27
28
|
function resolveConfigDir() {
|
|
28
29
|
const platformRoot = process.env.PLATFORM_ROOT;
|
|
29
30
|
if (!platformRoot)
|
|
@@ -99,7 +100,8 @@ function readEnvFile(path) {
|
|
|
99
100
|
}
|
|
100
101
|
/** Run a D1 SQL statement via wrangler with the per-scope token. Returns parsed rows. */
|
|
101
102
|
function d1Query(dbName, sql, env) {
|
|
102
|
-
const
|
|
103
|
+
const { command, args } = buildD1Command(dbName, sql);
|
|
104
|
+
const res = spawnSync(command, args, {
|
|
103
105
|
env: { ...process.env, ...env },
|
|
104
106
|
encoding: "utf-8",
|
|
105
107
|
maxBuffer: 16 * 1024 * 1024,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-bookings.js","sourceRoot":"","sources":["../../src/scripts/reconcile-bookings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAoC,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"reconcile-bookings.js","sourceRoot":"","sources":["../../src/scripts/reconcile-bookings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAoC,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,SAAS,gBAAgB;IACvB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC/C,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,uBAAuB,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC,SAAS,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;AAEjE,SAAS,WAAW;IAClB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC,CAAC,uBAAuB;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACjC,CAAC;IACH,CAAC;IACD,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7F,UAAU,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAc,CAAC;IAChD,IAAI,QAAgB,CAAC;IACrB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;IAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAMlF,oFAAoF;AACpF,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC5C,IAAI,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yFAAyF;AACzF,SAAS,OAAO,CAAC,MAAc,EAAE,GAAW,EAAE,GAA2B;IACvE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACnC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;QAC/B,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;QAC3B,uEAAuE;QACvE,oEAAoE;QACpE,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpH,CAAC;IACD,kFAAkF;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzD,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAA8B,CAAC;AACnG,CAAC;AAED,0EAA0E;AAC1E,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACjD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAc,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,oCAAoC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,2CAA2C,CAAC,CAAC;IACpF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,OAAO;YAC1B,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;gBACzC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,mEAAmE;YACnE,mEAAmE;YACnE,sDAAsD;SACvD,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kGAAmG,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QAC3I,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,SAAiB,EAAE,UAAkB;IACnF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACjE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,mCAAmC;IAEvE,IAAI,KAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,oCAAoC,CAAC,CAAC;QAC7F,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,4BAA4B,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,gCAAgC,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;IACD,MAAM,WAAW,GAA2B;QAC1C,oBAAoB,EAAE,KAAK;QAC3B,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnG,CAAC;IAEF,IAAI,OAAkC,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,GAAG,OAAO,CACf,MAAM,EACN,uHAAuH,EACvH,WAAW,CACZ,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,wBAAyB,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1G,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjF,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,2EAA2E;QAC3E,4EAA4E;QAC5E,8EAA8E;QAC9E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,qCAAqC,CAAC,CAAC;YAC9F,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAe;YAC1B,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;YAChC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAC5B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;SACtD,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,mDAAmD,OAAO,CAAC,SAAS,cAAc,SAAS,EAAE,CAAC,CAAC;QAE7G,MAAM,OAAO,GAAY,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,iDAAiD,OAAO,CAAC,SAAS,cAAc,MAAM,CAAC,SAAS,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAE5I,yEAAyE;YACzE,oEAAoE;YACpE,uCAAuC;YACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACvD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,OAAO,CAAC,KAAK,CAAC,0CAA0C,OAAO,CAAC,SAAS,YAAY,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC/H,CAAC;YACH,CAAC;YAED,yEAAyE;YACzE,oEAAoE;YACpE,OAAO,CAAC,MAAM,EAAE,gDAAgD,OAAO,CAAC,SAAS,GAAG,EAAE,WAAW,CAAC,CAAC;YACnG,OAAO,CAAC,KAAK,CAAC,0CAA0C,OAAO,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC1G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,oDAAoD,OAAO,CAAC,SAAS,SAAU,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QACzH,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,YAAY,GAAY,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,wDAAwD,EAAE,WAAW,CAAC,CAAC;YACxG,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,wBAAwB,MAAM,CAAC,mBAAmB,mBAAmB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACvJ,CAAC;YAAS,CAAC;QACT,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IACD,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAc,CAAC;QAChD,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrC,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAC5G,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,MAAM,GAAG,YAAY,EAAE,CAAC;QACxB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;YAC1E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,oBAAqB,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,MAAM;YAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtG,WAAW,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -22,6 +22,8 @@ A finished Telegram setup has all of these, and the skill is not done until each
|
|
|
22
22
|
|
|
23
23
|
## Flow
|
|
24
24
|
|
|
25
|
+
Read `references/setup-guide.md` (cited throughout this flow) with the `plugin-read` tool (`file="references/setup-guide.md"`), which resolves it at the plugin root. A plain `Read` against this skill's base directory misses, because the file lives one level up at the plugin root, not under the skill.
|
|
26
|
+
|
|
25
27
|
### Step 1 — Get the bot token
|
|
26
28
|
|
|
27
29
|
Follow `references/setup-guide.md` "Creating a Bot": the operator creates the bot via @BotFather and gives you the token (e.g. `123456:ABC-DEF…`). Confirm you have it before continuing.
|
|
@@ -252,7 +252,7 @@ When a pairing attempt fails — the phone accepts the code and shows "Continue
|
|
|
252
252
|
grep -aE '\[whatsapp:(login|session|reconcile)\]' <server log> | grep 'cid=<id>'
|
|
253
253
|
```
|
|
254
254
|
|
|
255
|
-
The single decision point is whether an `op=pair-success` line appears between `op=code-issued` and `op=close`. Absent + `op=close … kind=qr-refs-ended-408` → the completion signal never returned (beyond the Pi). A dirty `op=creds-pre registered=true hasAccount=false
|
|
255
|
+
The single decision point is whether an `op=pair-success` line appears between `op=code-issued` and `op=close`. Absent + `op=close … kind=qr-refs-ended-408` → the completion signal never returned (beyond the Pi). When no account signature is captured, the login now terminates on `op=pairing-incomplete … reason=no-account-signature` rather than reconnecting a half-registered credential into a `401`; the operator sees an actionable message ("WhatsApp accepted the code but did not finish linking … open WhatsApp, Linked Devices, remove existing devices, then ask for a new code") that points at the phone's linked-device limit or a stale companion — the account-side cause a reconnect cannot fix. A dirty `op=creds-pre registered=true hasAccount=false` → Pi-side. A half-registered credential folder (pairing requested, never completed) is reconciled on each `/status` pass: an in-flight or freshly-written one is preserved and logged `[whatsapp:reconcile] op=half-registered … inFlight=<bool>`, while an aged, abandoned one (no live login, creds untouched past the 5-minute pairing window) is deleted once, logged `op=discard-half-registered`, so the next pairing starts from an empty folder.
|
|
256
256
|
|
|
257
257
|
Full grammar, success/failure signatures, and the `kind` table: [`.docs/whatsapp-pairing-lifeline.md`](../../../../.docs/whatsapp-pairing-lifeline.md).
|
|
258
258
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Task 1362 — the reference-reachability guard.
|
|
3
|
+
# A SKILL.md's plugin-root-only bare `references/…` citation is reachable ONLY
|
|
4
|
+
# when the SKILL.md declares the `plugin-read` convention. Without it, a plain
|
|
5
|
+
# Read against the announced skill base dir misses, so the citation is a
|
|
6
|
+
# violation. Skill-local references, full `plugins/<name>/references/…` paths,
|
|
7
|
+
# and PLUGIN.md plugin-root references are unaffected.
|
|
8
|
+
set -u
|
|
9
|
+
GATE="$(cd "$(dirname "$0")/.." && pwd)/check-plugin-references.mjs"
|
|
10
|
+
[[ -f "$GATE" ]] || { echo "FAIL: gate script missing at $GATE" >&2; exit 1; }
|
|
11
|
+
PASS=0; FAIL=0
|
|
12
|
+
|
|
13
|
+
ROOT=$(mktemp -d)
|
|
14
|
+
PREMIUM="$ROOT/premium-empty"
|
|
15
|
+
mkdir -p "$PREMIUM"
|
|
16
|
+
trap 'rm -rf "$ROOT"' EXIT
|
|
17
|
+
|
|
18
|
+
reset_root() { rm -rf "$ROOT/platform"; }
|
|
19
|
+
|
|
20
|
+
# Write a SKILL.md for plugin "$1" (skill slug == plugin name) with body "$2".
|
|
21
|
+
make_skill() {
|
|
22
|
+
local plugin="$1" body="$2"
|
|
23
|
+
local dir="$ROOT/platform/plugins/$plugin/skills/$plugin"
|
|
24
|
+
mkdir -p "$dir"
|
|
25
|
+
{ printf -- '---\nname: %s\ndescription: test skill\n---\n\n' "$plugin"; printf '%s\n' "$body"; } > "$dir/SKILL.md"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# Create a reference file at an arbitrary path under $ROOT.
|
|
29
|
+
make_ref() { local rel="$1"; mkdir -p "$ROOT/$(dirname "$rel")"; printf 'ref body\n' > "$ROOT/$rel"; }
|
|
30
|
+
|
|
31
|
+
check() {
|
|
32
|
+
local desc="$1" expected="$2"
|
|
33
|
+
node "$GATE" "$ROOT/platform" "$PREMIUM" >/dev/null 2>&1
|
|
34
|
+
local got=$?
|
|
35
|
+
if [[ "$got" -eq "$expected" ]]; then echo "PASS: $desc"; ((PASS++))
|
|
36
|
+
else echo "FAIL: $desc (expected exit $expected, got $got)"; ((FAIL++)); fi
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# CASE 1: plugin-root-only ref, NO plugin-read declared → violation.
|
|
40
|
+
reset_root
|
|
41
|
+
make_ref "platform/plugins/foo/references/api.md"
|
|
42
|
+
make_skill "foo" 'Read \`references/api.md\` before the API call.'
|
|
43
|
+
check "plugin-root-only ref without plugin-read fails" 1
|
|
44
|
+
|
|
45
|
+
# CASE 2: same ref, plugin-read declared → passes.
|
|
46
|
+
reset_root
|
|
47
|
+
make_ref "platform/plugins/foo/references/api.md"
|
|
48
|
+
make_skill "foo" 'Open \`references/api.md\` with the \`plugin-read\` tool before the API call.'
|
|
49
|
+
check "plugin-root-only ref with plugin-read passes" 0
|
|
50
|
+
|
|
51
|
+
# CASE 3: skill-local ref, NO plugin-read → passes (plain Read resolves it).
|
|
52
|
+
reset_root
|
|
53
|
+
make_ref "platform/plugins/foo/skills/foo/references/local.md"
|
|
54
|
+
make_skill "foo" 'Read \`references/local.md\` for the details.'
|
|
55
|
+
check "skill-local ref without plugin-read passes" 0
|
|
56
|
+
|
|
57
|
+
# CASE 4: full plugins/<name>/references/... path, NO plugin-read → passes.
|
|
58
|
+
reset_root
|
|
59
|
+
make_ref "platform/plugins/foo/references/api.md"
|
|
60
|
+
make_skill "foo" 'Read \`plugins/foo/references/api.md\` before the API call.'
|
|
61
|
+
check "full plugin-path ref without plugin-read passes" 0
|
|
62
|
+
|
|
63
|
+
# CASE 5: genuinely missing ref (neither skill-local nor plugin-root) → violation.
|
|
64
|
+
reset_root
|
|
65
|
+
make_skill "foo" 'Open \`references/ghost.md\` with \`plugin-read\`.'
|
|
66
|
+
check "missing ref fails even with plugin-read" 1
|
|
67
|
+
|
|
68
|
+
# CASE 6: a MISSING full plugins/<name>/references/... path from a SKILL.md without
|
|
69
|
+
# plugin-read → violation, and the plugin-root "declare plugin-read" hint must NOT
|
|
70
|
+
# fire (the hint is scoped to the bare references/ shape only; a full path is not
|
|
71
|
+
# reachability-limited by the missing convention). Guards the Task 1362 hint-scope fix.
|
|
72
|
+
reset_root
|
|
73
|
+
make_skill "foo" 'Read \`plugins/foo/references/ghost.md\` before the API call.'
|
|
74
|
+
OUT=$(node "$GATE" "$ROOT/platform" "$PREMIUM" 2>&1); GOT=$?
|
|
75
|
+
if [[ "$GOT" -eq 1 ]] && ! grep -q "exists at plugin root" <<<"$OUT"; then
|
|
76
|
+
echo "PASS: missing full-path ref fails without a false plugin-read hint"; ((PASS++))
|
|
77
|
+
else
|
|
78
|
+
echo "FAIL: missing full-path ref (exit=$GOT, hint present=$(grep -qc 'exists at plugin root' <<<"$OUT" && echo yes || echo no))"; ((FAIL++))
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
echo ""
|
|
82
|
+
echo "Results: $PASS passed, $FAIL failed"
|
|
83
|
+
[[ "$FAIL" -eq 0 ]] && exit 0 || exit 1
|
|
@@ -17,6 +17,21 @@
|
|
|
17
17
|
// 2. `plugins/<name>/references/<file>.md` (optionally prefixed by
|
|
18
18
|
// `platform/`) — resolves at `<platformRoot>/plugins/<name>/references/
|
|
19
19
|
// <file>.md`.
|
|
20
|
+
//
|
|
21
|
+
// Task 1362 — access-method tightening for SKILL.md bare references.
|
|
22
|
+
// A SKILL.md announces its own skill directory as the base dir. An agent that
|
|
23
|
+
// reads "references/foo.md" with a plain file `Read` resolves it against that
|
|
24
|
+
// base dir → `<skill-dir>/references/foo.md`. When the reference actually lives
|
|
25
|
+
// at the plugin root (`<plugin-root>/references/foo.md`, the shared layout the
|
|
26
|
+
// cloudflare/outlook/telegram/email plugins use) that plain read MISSES, and the
|
|
27
|
+
// agent gets "File does not exist" — the reliability trap Task 1362 removes.
|
|
28
|
+
// The plugin-root path is only reachable if the SKILL.md tells the agent to read
|
|
29
|
+
// via the `plugin-read` tool (which resolves plugin-root-relative). So for a bare
|
|
30
|
+
// reference cited from a SKILL.md, the plugin-root candidate counts ONLY when that
|
|
31
|
+
// SKILL.md declares the `plugin-read` convention; without it, the skill-local path
|
|
32
|
+
// is the sole candidate and a plugin-root-only reference is a violation. PLUGIN.md
|
|
33
|
+
// is itself a plugin-root doc always read via plugin-read, so its plugin-root
|
|
34
|
+
// candidate is unconditional (unchanged).
|
|
20
35
|
|
|
21
36
|
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
22
37
|
import { resolve, relative, join, dirname } from "node:path";
|
|
@@ -85,23 +100,25 @@ function owningPluginRoot(filePath) {
|
|
|
85
100
|
|
|
86
101
|
// Directories to resolve a bare `references/<file>.md` citation against.
|
|
87
102
|
// Returns an array of candidate directories; the citation passes if the file
|
|
88
|
-
// exists under ANY of them.
|
|
89
|
-
// via `plugin-read` — the agent may construct `file=references/foo.md`
|
|
90
|
-
// (plugin-root form) or `file=skills/<slug>/references/foo.md` (skill-local
|
|
91
|
-
// form), depending on how the plugin organises its references.
|
|
103
|
+
// exists under ANY of them.
|
|
92
104
|
//
|
|
93
105
|
// PLUGIN.md — plugin-root only. → [<plugin-root>]
|
|
94
|
-
// SKILL.md — skill-local
|
|
95
|
-
//
|
|
106
|
+
// SKILL.md — skill-local always; plugin-root ONLY when the SKILL.md
|
|
107
|
+
// declares the `plugin-read` convention (Task 1362). A plain
|
|
108
|
+
// `Read` from a SKILL.md resolves against the announced skill
|
|
109
|
+
// dir, so a plugin-root-only reference is unreachable unless
|
|
110
|
+
// the SKILL.md routes the read through `plugin-read`.
|
|
111
|
+
// → [<skill-dir>] or
|
|
112
|
+
// [<skill-dir>, <plugin-root>]
|
|
96
113
|
// specialist template — no owning context. → []
|
|
97
|
-
function bareReferenceContextDirs(filePath) {
|
|
114
|
+
function bareReferenceContextDirs(filePath, declaresPluginRead) {
|
|
98
115
|
if (filePath.endsWith("/PLUGIN.md")) {
|
|
99
116
|
return [dirname(filePath)];
|
|
100
117
|
}
|
|
101
118
|
if (filePath.endsWith("/SKILL.md")) {
|
|
102
119
|
const skillDir = dirname(filePath);
|
|
103
120
|
const pluginRoot = owningPluginRoot(filePath);
|
|
104
|
-
return pluginRoot ? [skillDir, pluginRoot] : [skillDir];
|
|
121
|
+
return pluginRoot && declaresPluginRead ? [skillDir, pluginRoot] : [skillDir];
|
|
105
122
|
}
|
|
106
123
|
return [];
|
|
107
124
|
}
|
|
@@ -110,7 +127,7 @@ function bareReferenceContextDirs(filePath) {
|
|
|
110
127
|
// citation passes the existence check if ANY candidate exists. Returns an
|
|
111
128
|
// empty array if the citation has no resolvable shape (bare reference cited
|
|
112
129
|
// from a non-plugin file).
|
|
113
|
-
function candidateTargets({ raw, sourcePath, platformRoot }) {
|
|
130
|
+
function candidateTargets({ raw, sourcePath, platformRoot, declaresPluginRead }) {
|
|
114
131
|
// Strip an optional leading `platform/` so `platform/plugins/<name>/...`
|
|
115
132
|
// and `plugins/<name>/...` resolve identically.
|
|
116
133
|
const normalised = raw.replace(/^platform\//, "");
|
|
@@ -130,7 +147,7 @@ function candidateTargets({ raw, sourcePath, platformRoot }) {
|
|
|
130
147
|
}
|
|
131
148
|
|
|
132
149
|
// Bare `references/<file>.md`.
|
|
133
|
-
const ctxDirs = bareReferenceContextDirs(sourcePath);
|
|
150
|
+
const ctxDirs = bareReferenceContextDirs(sourcePath, declaresPluginRead);
|
|
134
151
|
return ctxDirs.map(d => resolve(d, normalised));
|
|
135
152
|
}
|
|
136
153
|
|
|
@@ -141,6 +158,10 @@ function scanFile(filePath, { platformRoot, repoRoot }) {
|
|
|
141
158
|
} catch {
|
|
142
159
|
return { violations: [], citations: 0 };
|
|
143
160
|
}
|
|
161
|
+
// Whether this file routes its bare references through the `plugin-read` tool.
|
|
162
|
+
// Governs whether a SKILL.md's plugin-root reference candidate is reachable
|
|
163
|
+
// (Task 1362 — see bareReferenceContextDirs). PLUGIN.md ignores this.
|
|
164
|
+
const declaresPluginRead = /plugin-read/.test(body);
|
|
144
165
|
const violations = [];
|
|
145
166
|
let citations = 0;
|
|
146
167
|
const lines = body.split("\n");
|
|
@@ -153,7 +174,7 @@ function scanFile(filePath, { platformRoot, repoRoot }) {
|
|
|
153
174
|
// 1-based column, pointing at the start of the captured citation.
|
|
154
175
|
const column = (m.index + m[0].indexOf(raw)) + 1;
|
|
155
176
|
citations++;
|
|
156
|
-
const candidates = candidateTargets({ raw, sourcePath: filePath, platformRoot });
|
|
177
|
+
const candidates = candidateTargets({ raw, sourcePath: filePath, platformRoot, declaresPluginRead });
|
|
157
178
|
if (candidates.length === 0) {
|
|
158
179
|
violations.push({
|
|
159
180
|
source: relative(repoRoot, filePath),
|
|
@@ -171,12 +192,39 @@ function scanFile(filePath, { platformRoot, repoRoot }) {
|
|
|
171
192
|
const targetMsg = candidates.length === 1
|
|
172
193
|
? candidates[0]
|
|
173
194
|
: `none of [${candidates.join(", ")}]`;
|
|
195
|
+
// Task 1362 hint: a SKILL.md BARE `references/<file>.md` citation that
|
|
196
|
+
// misses skill-local but DOES exist at the plugin root is an access-method
|
|
197
|
+
// defect, not a missing file. The fix is to declare `plugin-read` (or write
|
|
198
|
+
// the full `plugins/<name>/references/...` path), not to create a skill-local
|
|
199
|
+
// copy. Restrict the hint to the bare shape: a citation already written as a
|
|
200
|
+
// full `plugins/.../references/...` (or `skills/.../references/...`) path is
|
|
201
|
+
// resolved elsewhere and is not reachability-limited by a missing convention,
|
|
202
|
+
// so it gets no hint (and its `raw` would resolve to a bogus nested path here).
|
|
203
|
+
let hint;
|
|
204
|
+
const isBareRef = raw.replace(/^platform\//, "").startsWith("references/");
|
|
205
|
+
if (
|
|
206
|
+
isBareRef &&
|
|
207
|
+
filePath.endsWith("/SKILL.md") &&
|
|
208
|
+
!declaresPluginRead &&
|
|
209
|
+
owningPluginRoot(filePath)
|
|
210
|
+
) {
|
|
211
|
+
const rootCandidate = resolve(
|
|
212
|
+
owningPluginRoot(filePath),
|
|
213
|
+
raw.replace(/^platform\//, ""),
|
|
214
|
+
);
|
|
215
|
+
if (existsSync(rootCandidate)) {
|
|
216
|
+
hint =
|
|
217
|
+
`exists at plugin root (${relative(repoRoot, rootCandidate)}) but this SKILL.md does not declare the \`plugin-read\` convention, ` +
|
|
218
|
+
`so a plain Read misses it — declare \`plugin-read\` or cite the full \`plugins/<name>/references/...\` path`;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
174
221
|
violations.push({
|
|
175
222
|
source: relative(repoRoot, filePath),
|
|
176
223
|
line: i + 1,
|
|
177
224
|
column,
|
|
178
225
|
target: targetMsg,
|
|
179
226
|
raw,
|
|
227
|
+
...(hint ? { hint } : {}),
|
|
180
228
|
});
|
|
181
229
|
}
|
|
182
230
|
}
|
|
@@ -244,6 +292,7 @@ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href)
|
|
|
244
292
|
console.error(` source: ${v.source}:${v.line}:${v.column}`);
|
|
245
293
|
console.error(` cites: ${v.raw}`);
|
|
246
294
|
console.error(` target: ${v.target}`);
|
|
295
|
+
if (v.hint) console.error(` hint: ${v.hint}`);
|
|
247
296
|
}
|
|
248
297
|
console.error(
|
|
249
298
|
`FATAL: ${r.violations.length} broken reference citation(s) across ${r.scanned} scanned file(s) (${r.citations} citations).`,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Logger } from './types.js';
|
|
2
|
+
import { UserTitleStore } from './user-title-store.js';
|
|
3
|
+
export declare class AccountTitleStores {
|
|
4
|
+
private readonly accountsRoot;
|
|
5
|
+
private readonly bootAccountId;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly byAccountId;
|
|
8
|
+
/** `bootAccountDir` is `<installDir>/data/accounts/<bootAccountId>`; its
|
|
9
|
+
* parent is the accounts root every per-account file hangs off. */
|
|
10
|
+
constructor(bootAccountDir: string, logger: Logger);
|
|
11
|
+
/** The per-account store for `accountId`, created and loaded from disk on
|
|
12
|
+
* first access and cached thereafter. A null `accountId` (unresolvable
|
|
13
|
+
* session account) falls back to the boot account and is logged. */
|
|
14
|
+
forAccount(accountId: string | null): UserTitleStore;
|
|
15
|
+
/** The per-account store for the account a session runs under, resolved
|
|
16
|
+
* from its spawn `cwd`. Same resolution the delete/list paths use. */
|
|
17
|
+
forSessionCwd(cwd: string | null): UserTitleStore;
|
|
18
|
+
/** The boot account's store — used for the manager's boot-ready size log. */
|
|
19
|
+
bootStore(): UserTitleStore;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=account-title-stores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-title-stores.d.ts","sourceRoot":"","sources":["../src/account-title-stores.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAEhE;wEACoE;gBACxD,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMlD;;yEAEqE;IACrE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc;IAwBpD;2EACuE;IACvE,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc;IAIjD,6EAA6E;IAC7E,SAAS,IAAI,cAAc;CAG5B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Task 1354 — account-scoped session-title persistence.
|
|
2
|
+
//
|
|
3
|
+
// The manager runs one process per brand but hosts sessions for several
|
|
4
|
+
// accounts (the boot/house account plus any client sub-accounts). Operator
|
|
5
|
+
// renames must persist where the sidebar reads them: the read side
|
|
6
|
+
// (sidebar-sessions.ts, Task 1303) resolves the title file from the session's
|
|
7
|
+
// OWN account — `accounts/<sessionAccount>/session-titles.json`. A single
|
|
8
|
+
// boot-anchored store wrote every rename to the boot account's file, so a
|
|
9
|
+
// sub-account rename was invisible to the read. This registry closes that
|
|
10
|
+
// asymmetry: one `UserTitleStore` per account, each bound to that account's
|
|
11
|
+
// own `session-titles.json`, resolved from the session's spawn cwd.
|
|
12
|
+
//
|
|
13
|
+
// The session's account is `basename(cwd)` whenever cwd names a registered
|
|
14
|
+
// account dir (accountIdFromSessionCwd, config.ts). When it does not resolve
|
|
15
|
+
// (archived row with no PID-derived cwd, or an unstamped session — the Task
|
|
16
|
+
// 1314 gap), the registry falls back to the boot account and logs the miss,
|
|
17
|
+
// so degradation is predictable and visible rather than a silent wrong-account
|
|
18
|
+
// write.
|
|
19
|
+
import { basename, dirname, join } from 'node:path';
|
|
20
|
+
import { accountIdFromSessionCwd } from './config.js';
|
|
21
|
+
import { UserTitleStore } from './user-title-store.js';
|
|
22
|
+
export class AccountTitleStores {
|
|
23
|
+
accountsRoot;
|
|
24
|
+
bootAccountId;
|
|
25
|
+
logger;
|
|
26
|
+
byAccountId = new Map();
|
|
27
|
+
/** `bootAccountDir` is `<installDir>/data/accounts/<bootAccountId>`; its
|
|
28
|
+
* parent is the accounts root every per-account file hangs off. */
|
|
29
|
+
constructor(bootAccountDir, logger) {
|
|
30
|
+
this.accountsRoot = dirname(bootAccountDir);
|
|
31
|
+
this.bootAccountId = basename(bootAccountDir);
|
|
32
|
+
this.logger = logger;
|
|
33
|
+
}
|
|
34
|
+
/** The per-account store for `accountId`, created and loaded from disk on
|
|
35
|
+
* first access and cached thereafter. A null `accountId` (unresolvable
|
|
36
|
+
* session account) falls back to the boot account and is logged. */
|
|
37
|
+
forAccount(accountId) {
|
|
38
|
+
let id = accountId;
|
|
39
|
+
// `id` is joined into a filesystem path below; it must be a single, plain
|
|
40
|
+
// path segment. Reject anything that carries a separator (basename differs)
|
|
41
|
+
// or is a relative-dir reference (`.` / `..`) — those could escape the
|
|
42
|
+
// accounts root. Fall back to boot, same predictable degradation as an
|
|
43
|
+
// unresolvable (null) account. (`basename('..') === '..'`, so the `.`/`..`
|
|
44
|
+
// cases must be named explicitly — the basename check alone misses them.)
|
|
45
|
+
if (id !== null && (id === '.' || id === '..' || id !== basename(id))) {
|
|
46
|
+
this.logger(`[claude-session-manager] title-store account-id-unsafe id-rejected — using boot account=${this.bootAccountId}`);
|
|
47
|
+
id = null;
|
|
48
|
+
}
|
|
49
|
+
if (!id) {
|
|
50
|
+
this.logger(`[claude-session-manager] title-store account-unresolved — using boot account=${this.bootAccountId}`);
|
|
51
|
+
id = this.bootAccountId;
|
|
52
|
+
}
|
|
53
|
+
const existing = this.byAccountId.get(id);
|
|
54
|
+
if (existing)
|
|
55
|
+
return existing;
|
|
56
|
+
const store = new UserTitleStore(join(this.accountsRoot, id, 'session-titles.json'), this.logger);
|
|
57
|
+
store.loadFromDisk();
|
|
58
|
+
this.byAccountId.set(id, store);
|
|
59
|
+
return store;
|
|
60
|
+
}
|
|
61
|
+
/** The per-account store for the account a session runs under, resolved
|
|
62
|
+
* from its spawn `cwd`. Same resolution the delete/list paths use. */
|
|
63
|
+
forSessionCwd(cwd) {
|
|
64
|
+
return this.forAccount(accountIdFromSessionCwd(cwd, this.accountsRoot));
|
|
65
|
+
}
|
|
66
|
+
/** The boot account's store — used for the manager's boot-ready size log. */
|
|
67
|
+
bootStore() {
|
|
68
|
+
return this.forAccount(this.bootAccountId);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=account-title-stores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-title-stores.js","sourceRoot":"","sources":["../src/account-title-stores.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,wEAAwE;AACxE,2EAA2E;AAC3E,mEAAmE;AACnE,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,oEAAoE;AACpE,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,SAAS;AAET,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,OAAO,kBAAkB;IACZ,YAAY,CAAQ;IACpB,aAAa,CAAQ;IACrB,MAAM,CAAQ;IACd,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAA;IAEhE;wEACoE;IACpE,YAAY,cAAsB,EAAE,MAAc;QAChD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;QAC3C,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED;;yEAEqE;IACrE,UAAU,CAAC,SAAwB;QACjC,IAAI,EAAE,GAAG,SAAS,CAAA;QAClB,0EAA0E;QAC1E,4EAA4E;QAC5E,uEAAuE;QACvE,uEAAuE;QACvE,2EAA2E;QAC3E,0EAA0E;QAC1E,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,2FAA2F,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YAC5H,EAAE,GAAG,IAAI,CAAA;QACX,CAAC;QACD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,CAAC,gFAAgF,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;YACjH,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;QACzB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACzC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,qBAAqB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACjG,KAAK,CAAC,YAAY,EAAE,CAAA;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;IAED;2EACuE;IACvE,aAAa,CAAC,GAAkB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,6EAA6E;IAC7E,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC5C,CAAC;CACF"}
|
|
@@ -3,7 +3,7 @@ import { type SpawnDeps } from './pty-spawner.js';
|
|
|
3
3
|
import type { FsWatcher } from './fs-watcher.js';
|
|
4
4
|
import type { RateLimiter } from './spawn-rate-limiter.js';
|
|
5
5
|
import type { AuditRegistry } from './public-tool-audit.js';
|
|
6
|
-
import {
|
|
6
|
+
import { AccountTitleStores } from './account-title-stores.js';
|
|
7
7
|
import { WaChannelStore } from './wa-channel-store.js';
|
|
8
8
|
import { WebchatChannelStore } from './webchat-channel-store.js';
|
|
9
9
|
import { TelegramChannelStore } from './telegram-channel-store.js';
|
|
@@ -21,7 +21,7 @@ export interface HttpDeps extends Omit<SpawnDeps, 'onSessionReady' | 'watcher'>
|
|
|
21
21
|
publicToolAudit: AuditRegistry;
|
|
22
22
|
/** Task 253 — operator-stamped title override store. Reads merge into
|
|
23
23
|
* every displayName resolution site; the /:sessionId/rename route writes. */
|
|
24
|
-
|
|
24
|
+
titleStores: AccountTitleStores;
|
|
25
25
|
/** Task 683 — per-session WhatsApp channel binding. Gateway `/rc-spawn`
|
|
26
26
|
* write-throughs it; every resume path reads it back to re-apply the
|
|
27
27
|
* channel argv so `reply` is present on every live PTY for the session. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAe3B,OAAO,EAkBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AA4BzB,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAe3B,OAAO,EAkBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AA4BzB,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAgFlE,eAAO,MAAM,kBAAkB,QAA2B,CAAA;AAS1D,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAIlD,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7E;;qEAEiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;IAC9B;kFAC8E;IAC9E,WAAW,EAAE,kBAAkB,CAAA;IAC/B;;gFAE4E;IAC5E,cAAc,EAAE,cAAc,CAAA;IAC9B;;;6BAGyB;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;;;sCAGkC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C;;gFAE4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAsFD;;;;;;mEAMmE;AACnE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAiC9D;AAMD;;;;;;iBAMiB;AACjB,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAmCvF;AAID;;;;;;yBAMyB;AACzB,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAiCzD;AAkCD,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpG;AAgBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAUD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMvE;AAMD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAER;AAkCD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5F;AAwJD;;;kEAGkE;AAClE,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACpD;;;+CAG2C;IAC3C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD,CAAA;AA8CD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CA6qFpD"}
|