@rubytech/create-maxy-code 0.1.316 → 0.1.317
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 +2 -2
- package/payload/platform/lib/mcp-eager/dist/index.d.ts +0 -20
- package/payload/platform/lib/mcp-eager/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/mcp-eager/dist/index.js +2 -1
- package/payload/platform/lib/mcp-eager/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-eager/src/index.ts +3 -1
- package/payload/platform/lib/mcp-lifeline/dist/index.d.ts +8 -0
- package/payload/platform/lib/mcp-lifeline/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/mcp-lifeline/dist/index.js +71 -0
- package/payload/platform/lib/mcp-lifeline/dist/index.js.map +1 -0
- package/payload/platform/lib/mcp-lifeline/package.json +7 -0
- package/payload/platform/lib/mcp-lifeline/src/__tests__/lifeline.test.ts +146 -0
- package/payload/platform/lib/mcp-lifeline/src/index.ts +78 -0
- package/payload/platform/lib/mcp-lifeline/tsconfig.json +9 -0
- package/payload/platform/lib/mcp-lifeline/vitest.config.ts +9 -0
- package/payload/platform/lib/models/dist/index.d.ts +8 -0
- package/payload/platform/lib/models/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/models/dist/index.js +20 -1
- package/payload/platform/lib/models/dist/index.js.map +1 -1
- package/payload/platform/lib/models/src/index.ts +22 -0
- package/payload/platform/package.json +5 -2
- package/payload/platform/plugins/admin/mcp/dist/index.js +11 -10
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +19 -10
- package/payload/platform/plugins/docs/references/admin-ui.md +4 -2
- package/payload/platform/plugins/docs/references/internals.md +14 -7
- package/payload/platform/plugins/memory/mcp/dist/index.js +32 -31
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js +8 -7
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/quickbooks/mcp/dist/index.js +12 -11
- package/payload/platform/plugins/quickbooks/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/replicate/mcp/dist/index.js +4 -3
- package/payload/platform/plugins/replicate/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js +11 -10
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
- package/payload/platform/scripts/__tests__/check-no-raw-mcp-registrations.test.sh +57 -0
- package/payload/platform/scripts/check-no-raw-mcp-registrations.mjs +70 -0
- 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 +57 -9
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +7 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +3 -12
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts +8 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js +9 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +15 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.d.ts +8 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.d.ts.map +1 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.js +71 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/dist/index.js.map +1 -0
- package/payload/premium-plugins/writer-craft/lib/mcp-lifeline/package.json +7 -0
- package/payload/premium-plugins/writer-craft/mcp/dist/index.d.ts.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js +6 -5
- package/payload/premium-plugins/writer-craft/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/src/index.ts +6 -5
- package/payload/server/{chunk-Q7EWROVN.js → chunk-NCRJQEZ3.js} +0 -101
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/AdminLoginScreens-CrdmA3KA.js +1 -0
- package/payload/server/public/assets/AdminShell-0meAFBva.js +1 -0
- package/payload/server/public/assets/Checkbox-DXisJRUK.js +1 -0
- package/payload/server/public/assets/OperatorConversations-DBy2G8q3.js +9 -0
- package/payload/server/public/assets/OperatorConversations-DvRXfq3q.css +1 -0
- package/payload/server/public/assets/admin-DX5lZxWt.js +1 -0
- package/payload/server/public/assets/{arc-J2g2u5Xv.js → arc-CxLB9WCE.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-DN-MYxff.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CN0BXxpE.js → architectureDiagram-Q4EWVU46-D-EdJPSY.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-HX-8wF2p.js → blockDiagram-DXYQGD6D-CXx9RgCm.js} +1 -1
- package/payload/server/public/assets/browser-Bxx8w8BA.js +1 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-wIuarKF5.js → c4Diagram-AHTNJAMY-RFBXEe0B.js} +1 -1
- package/payload/server/public/assets/channel-y27xl53N.js +1 -0
- package/payload/server/public/assets/chat-CT9YrNtI.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-Buz7egJZ.js → chunk-2KRD3SAO-DBqAFwK9.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-_JcFXJqc.js → chunk-336JU56O-DdnFEz6R.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-D8Iwaegm.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-DUR5Dg3M.js → chunk-4BX2VUAB-cnw-3Gbs.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-BRIqQ9st.js → chunk-4TB4RGXK-BnqJ0bDc.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-CezTHWXL.js → chunk-55IACEB6-BwyHvvzo.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-DHYUPzF1.js → chunk-5FUZZQ4R-DXA9U02I.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-BVn4_fI5.js → chunk-5PVQY5BW-D78bZ_8D.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-BBLA8Mbi.js → chunk-67CJDMHE-CtE_Mgv7.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-CdWfEI5c.js → chunk-7N4EOEYR-CUZDaySl.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-tS11knCR.js → chunk-AA7GKIK3-CYQ3jO4X.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-GEu1OOZ6.js → chunk-BSJP7CBP-BbA_HyTR.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-DKrNbbp_.js → chunk-CIAEETIT-D7_YqRhG.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-B0InXNyr.js → chunk-EDXVE4YY-B23LrtSw.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-CO7lkHdm.js → chunk-ENJZ2VHE-D3fTHYKN.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-CMj74lWo.js → chunk-FMBD7UC4-DFAA2tyh.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-CLnKQoXw.js → chunk-FOC6F5B3-BF4IHvlI.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-CdiEKIaz.js → chunk-ICPOFSXX-DBUGemHy.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-B6LA3fiv.js → chunk-K5T4RW27-rMMs08Eh.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-DrhRrb8Q.js → chunk-KGLVRYIC-BD2r8R2G.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-DVQukevB.js → chunk-LIHQZDEY-D4sYTTwM.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-ZMLkoDhP.js → chunk-ORNJ4GCN-CAs_uFzb.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-C0dJkynG.js → chunk-OYMX7WX6-Fkp-2ORc.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-qHqDpwz3.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-BQ9BPIFZ.js → chunk-U2HBQHQK-D_pxZh25.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-CAonGMOd.js → chunk-X2U36JSP-CeVmvvRf.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-D5C_WNlk.js → chunk-XPW4576I-iWP54fKp.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-Ecdvzekb.js → chunk-YZCP3GAM-CNtbWJNN.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BsFZd1cN.js → chunk-ZZ45TVLE-BmlFjU_9.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DgVoYWhO.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-C0WNP3uN.js +1 -0
- package/payload/server/public/assets/clone-D50F_pvg.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-DBWHaIwm.js → cose-bilkent-S5V4N54A-C7YmF1Pg.js} +1 -1
- package/payload/server/public/assets/{dagre-Dr7ZJYeS.js → dagre-BAmiDDtR.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-oIJddk7m.js → dagre-KV5264BT-Ca3ESJhc.js} +1 -1
- package/payload/server/public/assets/data-B9NtsXgF.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-CEVxqOZ4.js → diagram-5BDNPKRD-BgT1ORf2.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-BovF7Rjx.js → diagram-G4DWMVQ6-BTaUIiem.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-BhrF8zoF.js → diagram-MMDJMWI5-Bdb2g6Uo.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-DCUYwxtR.js → diagram-TYMM5635-CkLGC0zZ.js} +1 -1
- package/payload/server/public/assets/{dist-DSsFp0Qd.js → dist-Bkbhs3jw.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-BS2-HdCg.js → erDiagram-SMLLAGMA-D_sj4DMg.js} +1 -1
- package/payload/server/public/assets/{flatten-BZMXCpLh.js → flatten-E2Sr0FeD.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BzSFLoea.js → flowDiagram-DWJPFMVM-iLERoZTe.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-1-3QU7mT.js → ganttDiagram-T4ZO3ILL-D60hjMBy.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-D-L2yzYf.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-fTrJ35Wk.js → gitGraphDiagram-UUTBAWPF-Di0XM6fi.js} +1 -1
- package/payload/server/public/assets/{graph-BZNc3EXa.js → graph-B59N222f.js} +3 -3
- package/payload/server/public/assets/graph-labels-70w-1ov0.js +1 -0
- package/payload/server/public/assets/{graphlib-rlEzI2qD.js → graphlib-C8fUP7uV.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-BQn6jndO.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-BwMdbiXg.js +2 -0
- package/payload/server/public/assets/{isEmpty-DaYIrHay.js → isEmpty-CLz-UprQ.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-0eU_UtlT.js → ishikawaDiagram-UXIWVN3A-CwgI4B5Z.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-BKLeZohp.js → journeyDiagram-VCZTEJTY-CxBu-tze.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Dq72xyaN.js → kanban-definition-6JOO6SKY-D2qlheA5.js} +1 -1
- package/payload/server/public/assets/{line-LQhmDT8k.js → line-Bdod7uzQ.js} +1 -1
- package/payload/server/public/assets/{linear-BGotDbGs.js → linear-BiVe6QzC.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-DoLdho1V.js → mermaid-parser.core-xZN7hC6M.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-C1RRyHGm.js → mermaid.core-D0IylAac.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-vUVVVyV1.js → mindmap-definition-QFDTVHPH-J_Szhwf1.js} +1 -1
- package/payload/server/public/assets/operator-DpRAhwQN.js +1 -0
- package/payload/server/public/assets/{ordinal-BqEhkPyh.js → ordinal-5RtyPJVt.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-DmkQBx4h.js +1 -0
- package/payload/server/public/assets/page-Ehjc9b9V.js +30 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-DDnxYUBm.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-B9Pl6Qhc.js → pieDiagram-DEJITSTG-CV5DxUVx.js} +1 -1
- package/payload/server/public/assets/public-BcqXGSaE.js +1 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-Drn9T81A.js → quadrantDiagram-34T5L4WZ-BsFMVizF.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-7H4k0ChM.js +1 -0
- package/payload/server/public/assets/{reduce-T2IuntYP.js → reduce-B3Mw_0s1.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-C0PAItJm.js → requirementDiagram-MS252O5E-C5eRRvGc.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BR42Mtwd.js → sankeyDiagram-XADWPNL6-CJYv5gpw.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-c2lR9UOS.js → sequenceDiagram-FGHM5R23-B25563_2.js} +1 -1
- package/payload/server/public/assets/{src-DXUM2BJo.js → src-BKOAoFQc.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BcHhtqsZ.js → stateDiagram-FHFEXIEX-BLyNJYOA.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BSVuxZxz.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Ax32c10H.js → timeline-definition-GMOUNBTQ-D-HgOM6Q.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-BLXWTQtW.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-DiePDF5d.js +1 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BxePewPq.js → vennDiagram-DHZGUBPP-Cw1JElYp.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-OSUWK5LN.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DmJwZ2f5.js → wardleyDiagram-NUSXRM2D-BqMWzEko.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-YjHomudv.js → xychartDiagram-5P7HB3ND-DBp71TLT.js} +1 -1
- package/payload/server/public/browser.html +5 -8
- package/payload/server/public/chat.html +8 -12
- package/payload/server/public/data.html +5 -7
- package/payload/server/public/graph.html +7 -10
- package/payload/server/public/index.html +8 -11
- package/payload/server/public/operator.html +10 -14
- package/payload/server/public/public.html +8 -10
- package/payload/server/server.js +276 -219
- package/payload/server/public/assets/AccessGate-bu988Xo-.js +0 -1
- package/payload/server/public/assets/AdminLoginScreens-BCYaOOuk.js +0 -1
- package/payload/server/public/assets/AdminShell-DSjJ4Biu.js +0 -1
- package/payload/server/public/assets/Checkbox-B4Dbvjls.js +0 -1
- package/payload/server/public/assets/OperatorConversations-XsXP7-P-.js +0 -1
- package/payload/server/public/assets/OperatorConversations-qc_xy7Az.css +0 -1
- package/payload/server/public/assets/admin-m0797WGA.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-C6nkAxzW.js +0 -1
- package/payload/server/public/assets/audio-attachment-mime-Jm4KJ4YC.js +0 -30
- package/payload/server/public/assets/brand-D8LClgr_.js +0 -9
- package/payload/server/public/assets/brand-DvttVeGB.css +0 -1
- package/payload/server/public/assets/browser-CBjNMPsz.js +0 -1
- package/payload/server/public/assets/channel-Q39xIXyT.js +0 -1
- package/payload/server/public/assets/chat-Sg-RGuV6.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-CCYjp9C2.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BNBxnHZh.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BShusfby.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D4ivPLFF.js +0 -1
- package/payload/server/public/assets/clone-CjEM8LwB.js +0 -1
- package/payload/server/public/assets/data-CEqE4BDw.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-Btp3PwZh.js +0 -1
- package/payload/server/public/assets/graph-labels-Bj5yM9bI.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-CPt2y6_L.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CpXNTMgd.js +0 -2
- package/payload/server/public/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
- package/payload/server/public/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
- package/payload/server/public/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
- package/payload/server/public/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
- package/payload/server/public/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
- package/payload/server/public/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
- package/payload/server/public/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
- package/payload/server/public/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
- package/payload/server/public/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
- package/payload/server/public/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
- package/payload/server/public/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
- package/payload/server/public/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
- package/payload/server/public/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
- package/payload/server/public/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
- package/payload/server/public/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
- package/payload/server/public/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
- package/payload/server/public/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
- package/payload/server/public/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
- package/payload/server/public/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
- package/payload/server/public/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
- package/payload/server/public/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
- package/payload/server/public/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
- package/payload/server/public/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
- package/payload/server/public/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
- package/payload/server/public/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
- package/payload/server/public/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
- package/payload/server/public/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
- package/payload/server/public/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
- package/payload/server/public/assets/newsreader-latin-300-normal-AOSWdb_s.woff +0 -0
- package/payload/server/public/assets/newsreader-latin-300-normal-FGBQ0wlI.woff2 +0 -0
- package/payload/server/public/assets/newsreader-latin-400-normal-BFBkh4jY.woff2 +0 -0
- package/payload/server/public/assets/newsreader-latin-400-normal-gRTjlS2D.woff +0 -0
- package/payload/server/public/assets/newsreader-latin-500-normal-B66TYsaK.woff2 +0 -0
- package/payload/server/public/assets/newsreader-latin-500-normal-DFwuUcdu.woff +0 -0
- package/payload/server/public/assets/newsreader-latin-ext-300-normal-CFtw49Zd.woff +0 -0
- package/payload/server/public/assets/newsreader-latin-ext-300-normal-DRMzurxT.woff2 +0 -0
- package/payload/server/public/assets/newsreader-latin-ext-400-normal-DYA1XoQK.woff +0 -0
- package/payload/server/public/assets/newsreader-latin-ext-400-normal-svq1FPys.woff2 +0 -0
- package/payload/server/public/assets/newsreader-latin-ext-500-normal-BNHmvKvI.woff2 +0 -0
- package/payload/server/public/assets/newsreader-latin-ext-500-normal-CZruMFou.woff +0 -0
- package/payload/server/public/assets/newsreader-vietnamese-300-normal-CsrIkm-V.woff +0 -0
- package/payload/server/public/assets/newsreader-vietnamese-300-normal-D3VHEe81.woff2 +0 -0
- package/payload/server/public/assets/newsreader-vietnamese-400-normal-BekUZro8.woff +0 -0
- package/payload/server/public/assets/newsreader-vietnamese-400-normal-DdKr49mV.woff2 +0 -0
- package/payload/server/public/assets/newsreader-vietnamese-500-normal-BEAbKU8A.woff +0 -0
- package/payload/server/public/assets/newsreader-vietnamese-500-normal-CL6a8tp2.woff2 +0 -0
- package/payload/server/public/assets/operator-Bph7mx87.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-Cwc-j_AI.js +0 -1
- package/payload/server/public/assets/page-CtWCeXdg.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-BZ9fjD1_.js +0 -1
- package/payload/server/public/assets/public-gxHCJCs3.js +0 -6
- package/payload/server/public/assets/public-next-C3clISGQ.js +0 -1
- package/payload/server/public/assets/public-vnj7OhQj.css +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-BNz5Rt9V.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BUQ_F4eP.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-DcVCQgp1.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-Bm12mwGd.js +0 -1
- package/payload/server/public/assets/useSelectionMode-BMn70cch.js +0 -5
- package/payload/server/public/assets/wardley-RL74JXVD-47Z3ymtK.js +0 -1
- package/payload/server/public/public-next.html +0 -25
- /package/payload/server/public/assets/{_baseFor-Y5mTRiRv.js → _baseFor-DVaNaTfF.js} +0 -0
- /package/payload/server/public/assets/{admin-types-D2qTXuCg.js → admin-types-CJrGd46U.js} +0 -0
- /package/payload/server/public/assets/{array-BwJyW1Dp.js → array-8_H1156C.js} +0 -0
- /package/payload/server/public/assets/{chunk-CAM3fms7.js → chunk-Pqm5yXtL.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-D95TtHqz.js → cytoscape.esm-h10p_6j-.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-kiwRz9Au.js → defaultLocale-pD7tFa1r.js} +0 -0
- /package/payload/server/public/assets/{init-CKZirZ49.js → init-CwJ4b81e.js} +0 -0
- /package/payload/server/public/assets/{katex-8mXVa4k3.js → katex-DJPjIBAI.js} +0 -0
- /package/payload/server/public/assets/{path-B0d9ncVi.js → path-CK8wrAxY.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-C5gCWwwF.js → preload-helper-Bf_JiD2A.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-BWqoIFNR.js → rough.esm-Dwml_la6.js} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rubytech/create-maxy-code",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.317",
|
|
4
4
|
"description": "Install Maxy — AI for Productive People",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-maxy-code": "./dist/index.js"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"build": "tsc",
|
|
14
14
|
"bundle": "node scripts/bundle.js",
|
|
15
15
|
"test": "npm run build && node --test 'dist/__tests__/*.test.js'",
|
|
16
|
-
"prepublishOnly": "bash ../../platform/scripts/verify-skill-tool-surface.sh && node ../../platform/scripts/check-plugin-tools-mcp-consistency.mjs && node ../../platform/scripts/check-specialist-tool-surface.mjs && node ../../platform/scripts/check-no-task-id-leaks.mjs && node ../../platform/scripts/check-no-esm-require.mjs && node ../../platform/scripts/check-skill-load-coverage.mjs && node ../../platform/scripts/check-architecture-skill-no-drift.mjs && node ../../platform/ui/scripts/check-route-wiring.mjs && node ../../platform/ui/scripts/check-edge-admin-routes.mjs && npm run build && node --test 'dist/__tests__/*.test.js' && chmod +x dist/index.js && npm run bundle && bash ../../platform/scripts/smoke-boot-services.sh && node ../../platform/ui/scripts/check-bundle-node-imports.mjs --dir=./payload/server/public/assets"
|
|
16
|
+
"prepublishOnly": "bash ../../platform/scripts/verify-skill-tool-surface.sh && node ../../platform/scripts/check-plugin-tools-mcp-consistency.mjs && node ../../platform/scripts/check-specialist-tool-surface.mjs && node ../../platform/scripts/check-no-task-id-leaks.mjs && node ../../platform/scripts/check-no-esm-require.mjs && node ../../platform/scripts/check-no-raw-mcp-registrations.mjs && node ../../platform/scripts/check-skill-load-coverage.mjs && node ../../platform/scripts/check-architecture-skill-no-drift.mjs && node ../../platform/ui/scripts/check-route-wiring.mjs && node ../../platform/ui/scripts/check-edge-admin-routes.mjs && npm run build && node --test 'dist/__tests__/*.test.js' && chmod +x dist/index.js && npm run bundle && bash ../../platform/scripts/smoke-boot-services.sh && node ../../platform/ui/scripts/check-bundle-node-imports.mjs --dir=./payload/server/public/assets"
|
|
17
17
|
},
|
|
18
18
|
"files": [
|
|
19
19
|
"dist",
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP eager-load helper.
|
|
3
|
-
*
|
|
4
|
-
* The Claude Code SDK marks every MCP tool as deferred-by-default: the model
|
|
5
|
-
* cannot invoke an MCP tool until it has first called `ToolSearch` to load
|
|
6
|
-
* the schema, which costs one extra turn per unique schema. The SDK's per-
|
|
7
|
-
* tool override is `_meta["anthropic/alwaysLoad"]: true` on the tool's
|
|
8
|
-
* `tools/list` entry, which `isDeferredTool` reads to flip the default.
|
|
9
|
-
*
|
|
10
|
-
* The MCP SDK exposes that channel only via `server.registerTool(name,
|
|
11
|
-
* config, handler)`; the older `server.tool(name, desc, schema, handler)`
|
|
12
|
-
* has no `_meta` parameter. This helper wraps the registerTool call so
|
|
13
|
-
* every plugin's index.ts can opt a tool into eager-load with one line
|
|
14
|
-
* matching the shape of the existing four-arg `server.tool` overload.
|
|
15
|
-
*
|
|
16
|
-
* Use for every tool that appears in `ADMIN_CORE_TOOLS` — the permission
|
|
17
|
-
* allow-list IS the curation per the CEO review. Tools the
|
|
18
|
-
* admin should not see should be removed from the allow-list, not merely
|
|
19
|
-
* left deferred.
|
|
20
|
-
*/
|
|
21
1
|
/** Wire-format metadata key the Claude Code SDK reads. */
|
|
22
2
|
export declare const ALWAYS_LOAD_META_KEY: "anthropic/alwaysLoad";
|
|
23
3
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,EAAG,sBAA+B,CAAC;AAEpE;;;;;;;GAOG;AAEH,KAAK,kBAAkB,GAAG;IAAE,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAAE,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,IAAI,SAAS,gBAAgB,EACrD,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,IAAI,EAEjB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAC/B,IAAI,CAUN"}
|
|
@@ -22,6 +22,7 @@ exports.eagerTool = eagerTool;
|
|
|
22
22
|
* admin should not see should be removed from the allow-list, not merely
|
|
23
23
|
* left deferred.
|
|
24
24
|
*/
|
|
25
|
+
const index_js_1 = require("../../mcp-lifeline/dist/index.js");
|
|
25
26
|
/** Wire-format metadata key the Claude Code SDK reads. */
|
|
26
27
|
exports.ALWAYS_LOAD_META_KEY = "anthropic/alwaysLoad";
|
|
27
28
|
/**
|
|
@@ -44,6 +45,6 @@ handler) {
|
|
|
44
45
|
description,
|
|
45
46
|
inputSchema,
|
|
46
47
|
_meta: { [exports.ALWAYS_LOAD_META_KEY]: true },
|
|
47
|
-
}, handler);
|
|
48
|
+
}, (0, index_js_1.wrapWithLifeline)(name, handler));
|
|
48
49
|
}
|
|
49
50
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AA8DA,8BAiBC;AA/ED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,+DAAoE;AAEpE,0DAA0D;AAC7C,QAAA,oBAAoB,GAAG,sBAA+B,CAAC;AA0BpE;;;;;;;;;;;;GAYG;AACH,SAAgB,SAAS,CACvB,MAA0B,EAC1B,IAAY,EACZ,WAAmB,EACnB,WAAiB;AACjB,8DAA8D;AAC9D,OAAgC;IAEhC,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ;QACE,WAAW;QACX,WAAW;QACX,KAAK,EAAE,EAAE,CAAC,4BAAoB,CAAC,EAAE,IAAI,EAAE;KACxC,EACD,IAAA,2BAAgB,EAAC,IAAI,EAAE,OAAO,CAAC,CAChC,CAAC;AACJ,CAAC"}
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
* admin should not see should be removed from the allow-list, not merely
|
|
19
19
|
* left deferred.
|
|
20
20
|
*/
|
|
21
|
+
import { wrapWithLifeline } from "../../mcp-lifeline/dist/index.js";
|
|
22
|
+
|
|
21
23
|
/** Wire-format metadata key the Claude Code SDK reads. */
|
|
22
24
|
export const ALWAYS_LOAD_META_KEY = "anthropic/alwaysLoad" as const;
|
|
23
25
|
|
|
@@ -73,6 +75,6 @@ export function eagerTool<Args extends LocalZodRawShape>(
|
|
|
73
75
|
inputSchema,
|
|
74
76
|
_meta: { [ALWAYS_LOAD_META_KEY]: true },
|
|
75
77
|
},
|
|
76
|
-
handler,
|
|
78
|
+
wrapWithLifeline(name, handler),
|
|
77
79
|
);
|
|
78
80
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type AnyHandler = (...args: any[]) => any;
|
|
2
|
+
type AnyServer = {
|
|
3
|
+
registerTool: (...args: any[]) => any;
|
|
4
|
+
};
|
|
5
|
+
export declare function wrapWithLifeline(name: string, handler: AnyHandler): AnyHandler;
|
|
6
|
+
export declare function lifelineTool(server: AnyServer, name: string, description: string, inputSchema: Record<string, unknown>, handler: AnyHandler): void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,KAAK,UAAU,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAE1C,KAAK,SAAS,GAAG;IAAE,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAAE,CAAC;AA4B3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAoC9E;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,EAAE,UAAU,GAClB,IAAI,CAEN"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapWithLifeline = wrapWithLifeline;
|
|
4
|
+
exports.lifelineTool = lifelineTool;
|
|
5
|
+
let callCounter = 0;
|
|
6
|
+
function nextToken() {
|
|
7
|
+
return (++callCounter).toString(16).padStart(6, "0");
|
|
8
|
+
}
|
|
9
|
+
function censusHandles() {
|
|
10
|
+
try {
|
|
11
|
+
const resources = process.getActiveResourcesInfo?.();
|
|
12
|
+
if (!resources)
|
|
13
|
+
return "unavailable";
|
|
14
|
+
if (resources.length === 0)
|
|
15
|
+
return "none";
|
|
16
|
+
const counts = {};
|
|
17
|
+
for (const r of resources) {
|
|
18
|
+
counts[r] = (counts[r] ?? 0) + 1;
|
|
19
|
+
}
|
|
20
|
+
return Object.entries(counts)
|
|
21
|
+
.map(([k, v]) => `${k}:${v}`)
|
|
22
|
+
.join(" ");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return "unavailable";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function wrapWithLifeline(name, handler) {
|
|
29
|
+
return async (...args) => {
|
|
30
|
+
const plugin = process.env.MCP_SPAWN_TEE_NAME ?? "unknown";
|
|
31
|
+
const token = nextToken();
|
|
32
|
+
try {
|
|
33
|
+
process.stderr.write(`[${plugin}] op=request tool=${name} token=${token}\n`);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
try {
|
|
37
|
+
process.stderr.write(`[mcp-lifeline] op=self-error tool=${name}\n`);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// stderr completely broken — still run handler
|
|
41
|
+
}
|
|
42
|
+
return handler(...args);
|
|
43
|
+
}
|
|
44
|
+
const start = process.hrtime.bigint();
|
|
45
|
+
let outcome = "ok";
|
|
46
|
+
let thrown;
|
|
47
|
+
let result;
|
|
48
|
+
try {
|
|
49
|
+
result = await handler(...args);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
outcome = "error";
|
|
53
|
+
thrown = err;
|
|
54
|
+
}
|
|
55
|
+
const ms = Number((process.hrtime.bigint() - start) / BigInt(1_000_000));
|
|
56
|
+
const handles = censusHandles();
|
|
57
|
+
try {
|
|
58
|
+
process.stderr.write(`[${plugin}] op=result tool=${name} token=${token} outcome=${outcome} ms=${ms} handles=${handles}\n`);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// broken pipe on result write — ignore, handler outcome takes priority
|
|
62
|
+
}
|
|
63
|
+
if (outcome === "error")
|
|
64
|
+
throw thrown;
|
|
65
|
+
return result;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function lifelineTool(server, name, description, inputSchema, handler) {
|
|
69
|
+
server.registerTool(name, { description, inputSchema }, wrapWithLifeline(name, handler));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AA+BA,4CAoCC;AAED,oCAQC;AAxED,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,SAAS,SAAS;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,MAAM,SAAS,GACb,OAGD,CAAC,sBAAsB,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS;YAAE,OAAO,aAAa,CAAC;QACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aAC1B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAY,EAAE,OAAmB;IAChE,OAAO,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,CAAC;QAC3D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,qBAAqB,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,IAAI,IAAI,CAAC,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,OAAO,GAAmB,IAAI,CAAC;QACnC,IAAI,MAAe,CAAC;QACpB,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,OAAO,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC;QACf,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,MAAM,oBAAoB,IAAI,UAAU,KAAK,YAAY,OAAO,OAAO,EAAE,YAAY,OAAO,IAAI,CACrG,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;QACD,IAAI,OAAO,KAAK,OAAO;YAAE,MAAM,MAAM,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAC1B,MAAiB,EACjB,IAAY,EACZ,WAAmB,EACnB,WAAoC,EACpC,OAAmB;IAEnB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { wrapWithLifeline } from "../index.js";
|
|
3
|
+
|
|
4
|
+
function captureStderr(): { lines: string[]; restore: () => void } {
|
|
5
|
+
const lines: string[] = [];
|
|
6
|
+
const original = process.stderr.write.bind(process.stderr);
|
|
7
|
+
const spy = vi
|
|
8
|
+
.spyOn(process.stderr, "write")
|
|
9
|
+
.mockImplementation((chunk: unknown) => {
|
|
10
|
+
lines.push(String(chunk));
|
|
11
|
+
return true;
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
lines,
|
|
15
|
+
restore: () => {
|
|
16
|
+
spy.mockRestore();
|
|
17
|
+
process.stderr.write = original;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
process.env.MCP_SPAWN_TEE_NAME = "test-plugin";
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
describe("wrapWithLifeline — op=request before handler", () => {
|
|
27
|
+
it("writes op=request before the handler runs", async () => {
|
|
28
|
+
const { lines, restore } = captureStderr();
|
|
29
|
+
const order: string[] = [];
|
|
30
|
+
const handler = async () => {
|
|
31
|
+
order.push("handler");
|
|
32
|
+
return { content: [] };
|
|
33
|
+
};
|
|
34
|
+
const wrapped = wrapWithLifeline("my-tool", handler);
|
|
35
|
+
await wrapped({});
|
|
36
|
+
restore();
|
|
37
|
+
const requestIdx = lines.findIndex((l) => l.includes("op=request"));
|
|
38
|
+
expect(requestIdx).toBeGreaterThanOrEqual(0);
|
|
39
|
+
expect(order[0]).toBe("handler");
|
|
40
|
+
const resultIdx = lines.findIndex((l) => l.includes("op=result"));
|
|
41
|
+
expect(requestIdx).toBeLessThan(resultIdx);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe("wrapWithLifeline — token correlation", () => {
|
|
46
|
+
it("op=request and op=result share the same token", async () => {
|
|
47
|
+
const { lines, restore } = captureStderr();
|
|
48
|
+
const wrapped = wrapWithLifeline("my-tool", async () => ({ content: [] }));
|
|
49
|
+
await wrapped({});
|
|
50
|
+
restore();
|
|
51
|
+
const reqLine = lines.find((l) => l.includes("op=request"));
|
|
52
|
+
const resLine = lines.find((l) => l.includes("op=result"));
|
|
53
|
+
expect(reqLine).toBeDefined();
|
|
54
|
+
expect(resLine).toBeDefined();
|
|
55
|
+
const reqToken = reqLine!.match(/token=(\S+)/)?.[1];
|
|
56
|
+
const resToken = resLine!.match(/token=(\S+)/)?.[1];
|
|
57
|
+
expect(reqToken).toBeDefined();
|
|
58
|
+
expect(reqToken).toBe(resToken);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe("wrapWithLifeline — outcome=ok on success", () => {
|
|
63
|
+
it("writes outcome=ok when handler resolves", async () => {
|
|
64
|
+
const { lines, restore } = captureStderr();
|
|
65
|
+
const wrapped = wrapWithLifeline("my-tool", async () => ({ content: [] }));
|
|
66
|
+
await wrapped({});
|
|
67
|
+
restore();
|
|
68
|
+
const resLine = lines.find((l) => l.includes("op=result"));
|
|
69
|
+
expect(resLine).toContain("outcome=ok");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
describe("wrapWithLifeline — outcome=error on throw, error re-thrown", () => {
|
|
74
|
+
it("writes outcome=error and re-throws the original error", async () => {
|
|
75
|
+
const { lines, restore } = captureStderr();
|
|
76
|
+
const boom = new Error("handler-boom");
|
|
77
|
+
const wrapped = wrapWithLifeline("my-tool", async () => {
|
|
78
|
+
throw boom;
|
|
79
|
+
});
|
|
80
|
+
let caught: unknown;
|
|
81
|
+
try {
|
|
82
|
+
await wrapped({});
|
|
83
|
+
} catch (e) {
|
|
84
|
+
caught = e;
|
|
85
|
+
}
|
|
86
|
+
restore();
|
|
87
|
+
expect(caught).toBe(boom);
|
|
88
|
+
const resLine = lines.find((l) => l.includes("op=result"));
|
|
89
|
+
expect(resLine).toContain("outcome=error");
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
describe("wrapWithLifeline — ms field", () => {
|
|
94
|
+
it("op=result contains a non-negative integer ms= field", async () => {
|
|
95
|
+
const { lines, restore } = captureStderr();
|
|
96
|
+
const wrapped = wrapWithLifeline("my-tool", async () => ({ content: [] }));
|
|
97
|
+
await wrapped({});
|
|
98
|
+
restore();
|
|
99
|
+
const resLine = lines.find((l) => l.includes("op=result"));
|
|
100
|
+
const ms = resLine?.match(/ms=(\d+)/)?.[1];
|
|
101
|
+
expect(ms).toBeDefined();
|
|
102
|
+
expect(Number(ms)).toBeGreaterThanOrEqual(0);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
describe("wrapWithLifeline — handles field", () => {
|
|
107
|
+
it("op=result contains a handles= field", async () => {
|
|
108
|
+
const { lines, restore } = captureStderr();
|
|
109
|
+
const wrapped = wrapWithLifeline("my-tool", async () => ({ content: [] }));
|
|
110
|
+
await wrapped({});
|
|
111
|
+
restore();
|
|
112
|
+
const resLine = lines.find((l) => l.includes("op=result"));
|
|
113
|
+
expect(resLine).toMatch(/handles=\S+/);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
describe("wrapWithLifeline — fail-open on broken stderr", () => {
|
|
118
|
+
it("runs handler even if pre-log write throws", async () => {
|
|
119
|
+
let handlerRan = false;
|
|
120
|
+
const writeStub = vi
|
|
121
|
+
.spyOn(process.stderr, "write")
|
|
122
|
+
.mockImplementationOnce(() => {
|
|
123
|
+
throw new Error("pipe broken");
|
|
124
|
+
})
|
|
125
|
+
.mockImplementation(() => true);
|
|
126
|
+
const wrapped = wrapWithLifeline("my-tool", async () => {
|
|
127
|
+
handlerRan = true;
|
|
128
|
+
return { content: [] };
|
|
129
|
+
});
|
|
130
|
+
await wrapped({});
|
|
131
|
+
writeStub.mockRestore();
|
|
132
|
+
expect(handlerRan).toBe(true);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
describe("wrapWithLifeline — plugin label from env", () => {
|
|
137
|
+
it("uses MCP_SPAWN_TEE_NAME env var in log lines", async () => {
|
|
138
|
+
process.env.MCP_SPAWN_TEE_NAME = "email";
|
|
139
|
+
const { lines, restore } = captureStderr();
|
|
140
|
+
const wrapped = wrapWithLifeline("my-tool", async () => ({ content: [] }));
|
|
141
|
+
await wrapped({});
|
|
142
|
+
restore();
|
|
143
|
+
delete process.env.MCP_SPAWN_TEE_NAME;
|
|
144
|
+
expect(lines.some((l) => l.startsWith("[email]"))).toBe(true);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
+
type AnyHandler = (...args: any[]) => any;
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
|
+
type AnyServer = { registerTool: (...args: any[]) => any };
|
|
5
|
+
|
|
6
|
+
let callCounter = 0;
|
|
7
|
+
function nextToken(): string {
|
|
8
|
+
return (++callCounter).toString(16).padStart(6, "0");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function censusHandles(): string {
|
|
12
|
+
try {
|
|
13
|
+
const resources = (
|
|
14
|
+
process as unknown as {
|
|
15
|
+
getActiveResourcesInfo?: () => string[];
|
|
16
|
+
}
|
|
17
|
+
).getActiveResourcesInfo?.();
|
|
18
|
+
if (!resources) return "unavailable";
|
|
19
|
+
if (resources.length === 0) return "none";
|
|
20
|
+
const counts: Record<string, number> = {};
|
|
21
|
+
for (const r of resources) {
|
|
22
|
+
counts[r] = (counts[r] ?? 0) + 1;
|
|
23
|
+
}
|
|
24
|
+
return Object.entries(counts)
|
|
25
|
+
.map(([k, v]) => `${k}:${v}`)
|
|
26
|
+
.join(" ");
|
|
27
|
+
} catch {
|
|
28
|
+
return "unavailable";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function wrapWithLifeline(name: string, handler: AnyHandler): AnyHandler {
|
|
33
|
+
return async (...args: unknown[]) => {
|
|
34
|
+
const plugin = process.env.MCP_SPAWN_TEE_NAME ?? "unknown";
|
|
35
|
+
const token = nextToken();
|
|
36
|
+
try {
|
|
37
|
+
process.stderr.write(`[${plugin}] op=request tool=${name} token=${token}\n`);
|
|
38
|
+
} catch {
|
|
39
|
+
try {
|
|
40
|
+
process.stderr.write(`[mcp-lifeline] op=self-error tool=${name}\n`);
|
|
41
|
+
} catch {
|
|
42
|
+
// stderr completely broken — still run handler
|
|
43
|
+
}
|
|
44
|
+
return handler(...args);
|
|
45
|
+
}
|
|
46
|
+
const start = process.hrtime.bigint();
|
|
47
|
+
let outcome: "ok" | "error" = "ok";
|
|
48
|
+
let thrown: unknown;
|
|
49
|
+
let result: unknown;
|
|
50
|
+
try {
|
|
51
|
+
result = await handler(...args);
|
|
52
|
+
} catch (err) {
|
|
53
|
+
outcome = "error";
|
|
54
|
+
thrown = err;
|
|
55
|
+
}
|
|
56
|
+
const ms = Number((process.hrtime.bigint() - start) / BigInt(1_000_000));
|
|
57
|
+
const handles = censusHandles();
|
|
58
|
+
try {
|
|
59
|
+
process.stderr.write(
|
|
60
|
+
`[${plugin}] op=result tool=${name} token=${token} outcome=${outcome} ms=${ms} handles=${handles}\n`,
|
|
61
|
+
);
|
|
62
|
+
} catch {
|
|
63
|
+
// broken pipe on result write — ignore, handler outcome takes priority
|
|
64
|
+
}
|
|
65
|
+
if (outcome === "error") throw thrown;
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function lifelineTool(
|
|
71
|
+
server: AnyServer,
|
|
72
|
+
name: string,
|
|
73
|
+
description: string,
|
|
74
|
+
inputSchema: Record<string, unknown>,
|
|
75
|
+
handler: AnyHandler,
|
|
76
|
+
): void {
|
|
77
|
+
server.registerTool(name, { description, inputSchema }, wrapWithLifeline(name, handler));
|
|
78
|
+
}
|
|
@@ -24,4 +24,12 @@ export declare function isSelectableModel(id: string): boolean;
|
|
|
24
24
|
* real change from the running one — a raw `selected !== live` compare is
|
|
25
25
|
* always true for `[1m]` models. */
|
|
26
26
|
export declare function baseModelId(id: string): string;
|
|
27
|
+
/** The 5 permission modes the /chat composer and re-seat fork may write. */
|
|
28
|
+
export declare const PERMISSION_MODES: readonly ["default", "acceptEdits", "plan", "auto", "bypassPermissions"];
|
|
29
|
+
export type PermissionMode = (typeof PERMISSION_MODES)[number];
|
|
30
|
+
export declare function isPermissionMode(value: string): value is PermissionMode;
|
|
31
|
+
/** The 4 settings.json effort levels, low→highest. */
|
|
32
|
+
export declare const EFFORT_LEVELS: readonly ["low", "medium", "high", "xhigh"];
|
|
33
|
+
export type EffortLevel = (typeof EFFORT_LEVELS)[number];
|
|
34
|
+
export declare function isEffortLevel(value: string): value is EffortLevel;
|
|
27
35
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAChD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIvD,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;qEAEqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC;AAEF;+DAC+D;AAC/D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;mCAGmC;AACnC,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAC5F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;qCAKqC;AACrC,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAChD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAChD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIvD,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;qEAEqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC;AAEF;+DAC+D;AAC/D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;mCAGmC;AACnC,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAC5F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;qCAKqC;AACrC,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAUD,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,0EAA2E,CAAC;AACzG,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED,sDAAsD;AACtD,eAAO,MAAM,aAAa,6CAA8C,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE"}
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
// Templates, docs, and skills reference these values as strings;
|
|
4
4
|
// all TypeScript consumers import from here.
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SELECTABLE_MODELS = exports.MODEL_DISPLAY_NAMES = exports.MODEL_CONTEXT_WINDOW = exports.HAIKU_MODEL = exports.SONNET_MODEL = exports.OPUS_MODEL = void 0;
|
|
6
|
+
exports.EFFORT_LEVELS = exports.PERMISSION_MODES = exports.SELECTABLE_MODELS = exports.MODEL_DISPLAY_NAMES = exports.MODEL_CONTEXT_WINDOW = exports.HAIKU_MODEL = exports.SONNET_MODEL = exports.OPUS_MODEL = void 0;
|
|
7
7
|
exports.contextWindow = contextWindow;
|
|
8
8
|
exports.modelDisplayName = modelDisplayName;
|
|
9
9
|
exports.isSelectableModel = isSelectableModel;
|
|
10
10
|
exports.baseModelId = baseModelId;
|
|
11
|
+
exports.isPermissionMode = isPermissionMode;
|
|
12
|
+
exports.isEffortLevel = isEffortLevel;
|
|
11
13
|
// Opus defaults to the 1M-context variant ([1m] is Claude Code's
|
|
12
14
|
// context-extension suffix, valid in settings.json "model" and agent
|
|
13
15
|
// frontmatter); Sonnet/Haiku stay on the standard 200k window.
|
|
@@ -53,4 +55,21 @@ function isSelectableModel(id) {
|
|
|
53
55
|
function baseModelId(id) {
|
|
54
56
|
return id.replace(/\[1m\]$/, "");
|
|
55
57
|
}
|
|
58
|
+
// ── Protocol-level Claude Code lever enums ───────────────────────────────────
|
|
59
|
+
// Two value sets tied to the Claude Code CLI: the composer-writable permission
|
|
60
|
+
// modes and the settings.json effort levels. Single source of truth, imported
|
|
61
|
+
// by the webchat route, the session manager (rc-daemon + fork), the re-seat
|
|
62
|
+
// route, and the two /chat lever components. Friendly labels stay UI-local;
|
|
63
|
+
// only the value sets and their validators live here. `dontAsk` and `max` are
|
|
64
|
+
// deliberately excluded — neither is offered by these surfaces.
|
|
65
|
+
/** The 5 permission modes the /chat composer and re-seat fork may write. */
|
|
66
|
+
exports.PERMISSION_MODES = ["default", "acceptEdits", "plan", "auto", "bypassPermissions"];
|
|
67
|
+
function isPermissionMode(value) {
|
|
68
|
+
return exports.PERMISSION_MODES.includes(value);
|
|
69
|
+
}
|
|
70
|
+
/** The 4 settings.json effort levels, low→highest. */
|
|
71
|
+
exports.EFFORT_LEVELS = ["low", "medium", "high", "xhigh"];
|
|
72
|
+
function isEffortLevel(value) {
|
|
73
|
+
return exports.EFFORT_LEVELS.includes(value);
|
|
74
|
+
}
|
|
56
75
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,iEAAiE;AACjE,6CAA6C;;;AAgB7C,sCAEC;AAaD,4CAEC;AAOD,8CAEC;AAQD,kCAEC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,iEAAiE;AACjE,6CAA6C;;;AAgB7C,sCAEC;AAaD,4CAEC;AAOD,8CAEC;AAQD,kCAEC;AAaD,4CAEC;AAKD,sCAEC;AAxED,iEAAiE;AACjE,qEAAqE;AACrE,+DAA+D;AAClD,QAAA,UAAU,GAAG,qBAAqB,CAAC;AACnC,QAAA,YAAY,GAAG,mBAAmB,CAAC;AACnC,QAAA,WAAW,GAAG,kBAAkB,CAAC;AAEjC,QAAA,oBAAoB,GAA2B;IAC1D,CAAC,kBAAU,CAAC,EAAE,SAAS;IACvB,CAAC,oBAAY,CAAC,EAAE,OAAO;IACvB,CAAC,mBAAW,CAAC,EAAE,OAAO;CACvB,CAAC;AAEF,wEAAwE;AACxE,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,4BAAoB,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;AAChD,CAAC;AAED;;qEAEqE;AACxD,QAAA,mBAAmB,GAA2B;IACzD,CAAC,kBAAU,CAAC,EAAE,uBAAuB;IACrC,CAAC,oBAAY,CAAC,EAAE,YAAY;IAC5B,CAAC,mBAAW,CAAC,EAAE,WAAW;CAC3B,CAAC;AAEF;+DAC+D;AAC/D,SAAgB,gBAAgB,CAAC,EAAU;IACzC,OAAO,2BAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;;mCAGmC;AACtB,QAAA,iBAAiB,GAAsB,CAAC,kBAAU,EAAE,oBAAY,EAAE,mBAAW,CAAC,CAAC;AAC5F,SAAgB,iBAAiB,CAAC,EAAU;IAC1C,OAAO,yBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;;;;qCAKqC;AACrC,SAAgB,WAAW,CAAC,EAAU;IACpC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,gEAAgE;AAEhE,4EAA4E;AAC/D,QAAA,gBAAgB,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,CAAU,CAAC;AAEzG,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,OAAQ,wBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,sDAAsD;AACzC,QAAA,aAAa,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEzE,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAQ,qBAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -53,3 +53,25 @@ export function isSelectableModel(id: string): boolean {
|
|
|
53
53
|
export function baseModelId(id: string): string {
|
|
54
54
|
return id.replace(/\[1m\]$/, "");
|
|
55
55
|
}
|
|
56
|
+
|
|
57
|
+
// ── Protocol-level Claude Code lever enums ───────────────────────────────────
|
|
58
|
+
// Two value sets tied to the Claude Code CLI: the composer-writable permission
|
|
59
|
+
// modes and the settings.json effort levels. Single source of truth, imported
|
|
60
|
+
// by the webchat route, the session manager (rc-daemon + fork), the re-seat
|
|
61
|
+
// route, and the two /chat lever components. Friendly labels stay UI-local;
|
|
62
|
+
// only the value sets and their validators live here. `dontAsk` and `max` are
|
|
63
|
+
// deliberately excluded — neither is offered by these surfaces.
|
|
64
|
+
|
|
65
|
+
/** The 5 permission modes the /chat composer and re-seat fork may write. */
|
|
66
|
+
export const PERMISSION_MODES = ["default", "acceptEdits", "plan", "auto", "bypassPermissions"] as const;
|
|
67
|
+
export type PermissionMode = (typeof PERMISSION_MODES)[number];
|
|
68
|
+
export function isPermissionMode(value: string): value is PermissionMode {
|
|
69
|
+
return (PERMISSION_MODES as readonly string[]).includes(value);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** The 4 settings.json effort levels, low→highest. */
|
|
73
|
+
export const EFFORT_LEVELS = ["low", "medium", "high", "xhigh"] as const;
|
|
74
|
+
export type EffortLevel = (typeof EFFORT_LEVELS)[number];
|
|
75
|
+
export function isEffortLevel(value: string): value is EffortLevel {
|
|
76
|
+
return (EFFORT_LEVELS as readonly string[]).includes(value);
|
|
77
|
+
}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"services/*"
|
|
7
7
|
],
|
|
8
8
|
"scripts": {
|
|
9
|
-
"build": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p services/claude-session-manager/tsconfig.json && tsc -p services/whatsapp-channel/tsconfig.json && tsc -p services/webchat-channel/tsconfig.json && NODE_OPTIONS='--max-old-space-size=8192' tsc -b plugins/*/mcp/tsconfig.json",
|
|
10
|
-
"build:lib": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json",
|
|
9
|
+
"build": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p services/claude-session-manager/tsconfig.json && tsc -p services/whatsapp-channel/tsconfig.json && tsc -p services/webchat-channel/tsconfig.json && NODE_OPTIONS='--max-old-space-size=8192' tsc -b plugins/*/mcp/tsconfig.json",
|
|
10
|
+
"build:lib": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json",
|
|
11
11
|
"gen:canonical-tools": "node scripts/generate-canonical-tool-names.mjs",
|
|
12
12
|
"build:memory": "tsc -p plugins/memory/mcp/tsconfig.json",
|
|
13
13
|
"build:contacts": "tsc -p plugins/contacts/mcp/tsconfig.json",
|
|
@@ -24,5 +24,8 @@
|
|
|
24
24
|
"build:claude-session-manager": "tsc -p services/claude-session-manager/tsconfig.json",
|
|
25
25
|
"build:whatsapp-channel": "tsc -p services/whatsapp-channel/tsconfig.json",
|
|
26
26
|
"build:webchat-channel": "tsc -p services/webchat-channel/tsconfig.json"
|
|
27
|
+
},
|
|
28
|
+
"overrides": {
|
|
29
|
+
"zod": "3.x"
|
|
27
30
|
}
|
|
28
31
|
}
|