@rubytech/create-realagent-code 0.1.316 → 0.1.320
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/base-toolchain-deps.test.js +67 -0
- package/dist/index.js +7 -1
- package/package.json +2 -2
- package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-style/dist/index.js +15 -0
- package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-style/src/index.ts +16 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +3 -0
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +3 -0
- 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 +16 -0
- package/payload/platform/lib/models/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/models/dist/index.js +32 -1
- package/payload/platform/lib/models/dist/index.js.map +1 -1
- package/payload/platform/lib/models/src/index.ts +39 -0
- package/payload/platform/neo4j/schema.cypher +103 -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 +50 -12
- package/payload/platform/plugins/docs/references/admin-ui.md +24 -2
- package/payload/platform/plugins/docs/references/internals.md +14 -7
- package/payload/platform/plugins/docs/references/neo4j.md +9 -0
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -2
- 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/memory/mcp/dist/lib/__tests__/schema-loader.test.js +28 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js +7 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js +19 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-knowledge-work.md +80 -0
- 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/projects/PLUGIN.md +11 -0
- package/payload/platform/plugins/projects/references/meeting-to-tasks.md +34 -0
- package/payload/platform/plugins/projects/references/prioritization.md +43 -0
- package/payload/platform/plugins/projects/references/risk-premortem.md +34 -0
- package/payload/platform/plugins/projects/references/sprint.md +5 -1
- package/payload/platform/plugins/projects/references/stakeholder-map.md +43 -0
- 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/scripts/installer-device-verify.sh +38 -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/permission-mode-tail.d.ts +3 -1
- package/payload/platform/services/claude-session-manager/dist/permission-mode-tail.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/permission-mode-tail.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +7 -1
- 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 +9 -1
- 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/real-agent/lib/mcp-lifeline/dist/index.d.ts +8 -0
- package/payload/premium-plugins/real-agent/lib/mcp-lifeline/dist/index.d.ts.map +1 -0
- package/payload/premium-plugins/real-agent/lib/mcp-lifeline/dist/index.js +71 -0
- package/payload/premium-plugins/real-agent/lib/mcp-lifeline/dist/index.js.map +1 -0
- package/payload/premium-plugins/real-agent/lib/mcp-lifeline/package.json +7 -0
- package/payload/premium-plugins/real-agent/plugins/buyers/mcp/dist/index.js +9 -8
- package/payload/premium-plugins/real-agent/plugins/buyers/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/real-agent/plugins/buyers/mcp/src/index.ts +9 -8
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js +28 -27
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/index.ts +28 -27
- package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js +23 -22
- package/payload/premium-plugins/real-agent/plugins/property-data/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/real-agent/plugins/property-data/mcp/src/index.ts +23 -22
- package/payload/server/{chunk-Q7EWROVN.js → chunk-GRKG3KNN.js} +0 -101
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/AdminLoginScreens-D_e5PYXv.js +1 -0
- package/payload/server/public/assets/AdminShell-Dc23yALw.js +1 -0
- package/payload/server/public/assets/Checkbox-BHxSr_cA.js +1 -0
- package/payload/server/public/assets/OperatorConversations-BqNOXEu8.js +9 -0
- package/payload/server/public/assets/OperatorConversations-pu50BU11.css +1 -0
- package/payload/server/public/assets/admin-DE55chV9.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-C1Dp1UxB.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-BLQDFyDL.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-D_L6g-L_.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-labels-C2r7zl8O.js +1 -0
- package/payload/server/public/assets/{graph-BZNc3EXa.js → graph-ticN9QbK.js} +3 -3
- 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-COIYJFG7.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-CsOGSSSb.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-CjT_WNkz.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 +330 -195
- 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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Schema Reference — Knowledge Work
|
|
2
|
+
|
|
3
|
+
Vertical schema for `businessType: "knowledge-work"` — the Real Agent brand's knowledge workers: strategists, founders, operators, researchers, analysts.
|
|
4
|
+
|
|
5
|
+
This reference extends the base schema. All base node types remain valid. Load `schema-base.md` first.
|
|
6
|
+
|
|
7
|
+
When loading this reference, confirm: "Using schema-base + schema-knowledge-work".
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Reuse the base — this vertical adds only the gaps
|
|
12
|
+
|
|
13
|
+
Most of knowledge work is already in the base schema. Use the base labels, do not duplicate them:
|
|
14
|
+
|
|
15
|
+
- People and orgs: `Person`, `Organization`, `Position`, `Credential`. Reporting lines are the `REPORTS_TO` edge below, not a node.
|
|
16
|
+
- Work: `Task` (a `schema:Action`), `Project`, `Meeting`, `Event`, `Workflow`.
|
|
17
|
+
- Concepts and content: `DefinedTerm` (concepts, skills, glossary, learnings), `Concept`, `Idea`, `CreativeWork`, `KnowledgeDocument` and `Section`.
|
|
18
|
+
|
|
19
|
+
The gaps this vertical fills are: goals and OKRs, decision records, risk, and the research / citation / evidence layer. It adds those seven labels and nothing else.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Additional Node Types
|
|
24
|
+
|
|
25
|
+
| Entity | Neo4j Label | Schema.org Type | Required Properties |
|
|
26
|
+
|--------|-------------|-----------------|---------------------|
|
|
27
|
+
| Objective | `Objective` | platform-native | `accountId`, `title`, `framework` (OKR/OGSM/V2MOM/Hoshin), `timeframe`, `status` (draft/active/achieved/missed/abandoned) |
|
|
28
|
+
| KeyResult | `KeyResult` | platform-native | `accountId`, `title`, `target`, `current`, `unit`, `status` (on-track/at-risk/missed/achieved) |
|
|
29
|
+
| Decision | `Decision` | `schema:CreativeWork` | `accountId`, `title`, `status` (proposed/accepted/superseded/rejected), `decision` |
|
|
30
|
+
| Risk | `Risk` | platform-native | `accountId`, `statement`, `probability` (low/medium/high), `impact` (low/medium/high), `status` (open/mitigated/accepted/closed) |
|
|
31
|
+
| Source | `Source` | `schema:CreativeWork` | `accountId`, `title`, `sourceType` (article/book/web/dataset/report) |
|
|
32
|
+
| Finding | `Finding` | platform-native | `accountId`, `statement`, `status` (draft/validated/retracted) |
|
|
33
|
+
| Hypothesis | `Hypothesis` | platform-native | `accountId`, `statement`, `status` (open/supported/refuted/assumed) |
|
|
34
|
+
|
|
35
|
+
`Objective` carries the strategy framework on a `framework` discriminator rather than proliferating one label per framework: OGSM and V2MOM strategy/method tiers are `Objective` nodes distinguished by `framework`. A North-Star metric is an `Objective`-level `KeyResult`, not a separate label. A `Source` is a referenced work (a citation target), distinct from an ingested `KnowledgeDocument` whose full text lives on disk. An open research question is a `Hypothesis {status:'open'}`; an assumption is a `Hypothesis {status:'assumed'}` — the base `Question` label stays reserved for `schema:Question` FAQ content.
|
|
36
|
+
|
|
37
|
+
Optional properties seen in practice: `Decision` — `context`, `consequences`, `decidedAt`; `Source` — `url`, `doi`, `datePublished`; `Finding` — `confidence`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Idempotency contracts
|
|
42
|
+
|
|
43
|
+
MERGE keys per label:
|
|
44
|
+
|
|
45
|
+
- `:Objective` — `(accountId, title)`
|
|
46
|
+
- `:KeyResult` — `(accountId, objectiveTitle, title)` — child of the `:Objective` it measures
|
|
47
|
+
- `:Decision` — `(accountId, title)`
|
|
48
|
+
- `:Risk` — `(accountId, statement)`
|
|
49
|
+
- `:Source` — `(accountId, title)`
|
|
50
|
+
- `:Finding` — `(accountId, statement)`
|
|
51
|
+
- `:Hypothesis` — `(accountId, statement)`
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Relationship Patterns
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
(:Objective)-[:MEASURED_BY]->(:KeyResult)
|
|
59
|
+
(:Project)-[:ADVANCES]->(:Objective)
|
|
60
|
+
(:Project)-[:ADVANCES]->(:KeyResult)
|
|
61
|
+
(:Task)-[:ADVANCES]->(:Objective)
|
|
62
|
+
(:Task)-[:ADVANCES]->(:KeyResult)
|
|
63
|
+
(:Decision)-[:SUPERSEDES]->(:Decision)
|
|
64
|
+
(:Risk)-[:THREATENS]->(:Objective)
|
|
65
|
+
(:Risk)-[:THREATENS]->(:Project)
|
|
66
|
+
(:Source)-[:AUTHORED_BY]->(:Person)
|
|
67
|
+
(:Source)-[:CITES]->(:Source)
|
|
68
|
+
(:Source)-[:SUPPORTS]->(:Source)
|
|
69
|
+
(:Source)-[:REFUTES]->(:Source)
|
|
70
|
+
(:Finding)-[:DERIVED_FROM]->(:Source)
|
|
71
|
+
(:Finding)-[:DERIVED_FROM]->(:KnowledgeDocument)
|
|
72
|
+
(:Finding)-[:SUPPORTS]->(:Hypothesis)
|
|
73
|
+
(:Finding)-[:REFUTES]->(:Hypothesis)
|
|
74
|
+
(:Task)-[:DEPENDS_ON]->(:Task)
|
|
75
|
+
(:Person)-[:REPORTS_TO]->(:Person)
|
|
76
|
+
(:Person)-[:RESPONSIBLE_FOR]->(:Task)
|
|
77
|
+
(:Person)-[:ACCOUNTABLE_FOR]->(:Decision)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
A `Decision` records what it decided through a `DECIDES` edge to the entity it governs (an `Objective`, a `Project`, a `Task`, or any base entity), and supersedes the decision it replaces. `Source`-to-`Source` citation uses CiTO verbs (`CITES`, `SUPPORTS`, `REFUTES`); a `Finding` is derived from its evidence (`DERIVED_FROM`, the PROV `wasDerivedFrom` relation) and bears on a `Hypothesis` (`SUPPORTS`/`REFUTES`). Task precedence uses `DEPENDS_ON` with an optional `type` property in `{FS, SS, FF, SF}` (the project-management precedence kinds). Responsibility is an edge, never a node: reporting lines are `REPORTS_TO`, and RACI assignment is `RESPONSIBLE_FOR` / `ACCOUNTABLE_FOR` / `CONSULTED_ON` / `INFORMED_OF` from a `Person` to a `Task` or `Decision` — consistent with the base doctrine that responsibility is a property of an edge, not its own node.
|
|
@@ -26,6 +26,7 @@ import { runCalendarList } from "./tools/calendar-list.js";
|
|
|
26
26
|
import { runCalendarEvent } from "./tools/calendar-event.js";
|
|
27
27
|
import { runContactsList } from "./tools/contacts-list.js";
|
|
28
28
|
import { runMailboxInfo } from "./tools/mailbox-info.js";
|
|
29
|
+
import { lifelineTool } from "../../../../lib/mcp-lifeline/dist/index.js";
|
|
29
30
|
// Plugin-system boot tolerance — see Task 202.
|
|
30
31
|
// Module-init must never exit; the plugin-system spawn enumerates tools/list
|
|
31
32
|
// before any per-account env is set. Per-call refusal preserves isolation.
|
|
@@ -81,7 +82,7 @@ const server = new McpServer({
|
|
|
81
82
|
name: "outlook",
|
|
82
83
|
version: "0.1.0",
|
|
83
84
|
});
|
|
84
|
-
server
|
|
85
|
+
lifelineTool(server, "outlook-account-register", "Initiate the OAuth Auth Code + PKCE flow for this account. Returns an authorization URL the operator opens in the VNC browser. Tool blocks until the operator completes consent (5-minute timeout) or fails loudly.", {}, async () => {
|
|
85
86
|
if (!ACCOUNT_ID)
|
|
86
87
|
return refuseNoAccount("outlook-account-register");
|
|
87
88
|
try {
|
|
@@ -98,7 +99,7 @@ server.tool("outlook-account-register", "Initiate the OAuth Auth Code + PKCE flo
|
|
|
98
99
|
return fail(`outlook-account-register failed: ${err.message}`);
|
|
99
100
|
}
|
|
100
101
|
});
|
|
101
|
-
server
|
|
102
|
+
lifelineTool(server, "outlook-mail-list", "List recent messages in the mailbox. Defaults to top=25 ordered by receivedDateTime DESC. Folder defaults to Inbox; pass a folder displayName or id for other folders. Returns id, subject, from, receivedDateTime, bodyPreview, isRead.", {
|
|
102
103
|
top: z.number().int().min(1).max(250).optional(),
|
|
103
104
|
folder: z.string().optional(),
|
|
104
105
|
}, async ({ top, folder }) => {
|
|
@@ -112,7 +113,7 @@ server.tool("outlook-mail-list", "List recent messages in the mailbox. Defaults
|
|
|
112
113
|
return fail(`outlook-mail-list failed: ${err.message}`);
|
|
113
114
|
}
|
|
114
115
|
});
|
|
115
|
-
server
|
|
116
|
+
lifelineTool(server, "outlook-mail-search", "Search mail with Microsoft Graph $search. The query is enclosed in quotes and applied with ConsistencyLevel=eventual. Returns the same shape as outlook-mail-list.", {
|
|
116
117
|
query: z.string().min(1),
|
|
117
118
|
top: z.number().int().min(1).max(250).optional(),
|
|
118
119
|
}, async ({ query, top }) => {
|
|
@@ -126,7 +127,7 @@ server.tool("outlook-mail-search", "Search mail with Microsoft Graph $search. Th
|
|
|
126
127
|
return fail(`outlook-mail-search failed: ${err.message}`);
|
|
127
128
|
}
|
|
128
129
|
});
|
|
129
|
-
server
|
|
130
|
+
lifelineTool(server, "outlook-calendar-list", "List calendar events in the next rangeDays days (default 7, max 365). Returns id, subject, start, end, location, attendees, isAllDay, organizer.", {
|
|
130
131
|
rangeDays: z.number().int().min(1).max(365).optional(),
|
|
131
132
|
top: z.number().int().min(1).max(500).optional(),
|
|
132
133
|
}, async ({ rangeDays, top }) => {
|
|
@@ -140,7 +141,7 @@ server.tool("outlook-calendar-list", "List calendar events in the next rangeDays
|
|
|
140
141
|
return fail(`outlook-calendar-list failed: ${err.message}`);
|
|
141
142
|
}
|
|
142
143
|
});
|
|
143
|
-
server
|
|
144
|
+
lifelineTool(server, "outlook-calendar-event", "Fetch a single calendar event by id, including the full body, attendees, and webLink.", {
|
|
144
145
|
eventId: z.string().min(1),
|
|
145
146
|
}, async ({ eventId }) => {
|
|
146
147
|
if (!ACCOUNT_ID)
|
|
@@ -153,7 +154,7 @@ server.tool("outlook-calendar-event", "Fetch a single calendar event by id, incl
|
|
|
153
154
|
return fail(`outlook-calendar-event failed: ${err.message}`);
|
|
154
155
|
}
|
|
155
156
|
});
|
|
156
|
-
server
|
|
157
|
+
lifelineTool(server, "outlook-contacts-list", "List contacts. Defaults to top=50, max 250. Returns id, displayName, emailAddresses, phones, jobTitle, companyName.", {
|
|
157
158
|
top: z.number().int().min(1).max(250).optional(),
|
|
158
159
|
}, async ({ top }) => {
|
|
159
160
|
if (!ACCOUNT_ID)
|
|
@@ -166,7 +167,7 @@ server.tool("outlook-contacts-list", "List contacts. Defaults to top=50, max 250
|
|
|
166
167
|
return fail(`outlook-contacts-list failed: ${err.message}`);
|
|
167
168
|
}
|
|
168
169
|
});
|
|
169
|
-
server
|
|
170
|
+
lifelineTool(server, "outlook-mailbox-info", "Health probe — reports auth state, refresh-window status, and top-level folder count for this account. Useful for answering 'did account X auth?' without grepping logs.", {}, async () => {
|
|
170
171
|
if (!ACCOUNT_ID)
|
|
171
172
|
return refuseNoAccount("outlook-mailbox-info");
|
|
172
173
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,17 @@ Explicit triggers always apply structured execution without asking:
|
|
|
32
32
|
|
|
33
33
|
Load the relevant reference via `plugin-read` when entering a mode. Each reference describes outcomes and constraints for that mode — follow them.
|
|
34
34
|
|
|
35
|
+
## Method References
|
|
36
|
+
|
|
37
|
+
Beyond the four modes, the plugin carries method references for recurring needs that attach to a mode rather than defining one. Load the relevant reference via `plugin-read` when the need arises. Each one terminates in a graph write — a Task, a relationship, or a `[PROJECT:*]` note — never a free-text artefact the graph never sees.
|
|
38
|
+
|
|
39
|
+
| Method | Reference | Attaches to |
|
|
40
|
+
|--------|-----------|-------------|
|
|
41
|
+
| Identify and engage stakeholders (Power × Interest) | `references/stakeholder-map.md` | Sprint Plan (Standard + Full) |
|
|
42
|
+
| Surface and rank risks before execution | `references/risk-premortem.md` | Sprint Challenge Premise (Full) |
|
|
43
|
+
| Order ready tasks by impact and effort (RICE / ICE / MoSCoW / Kano) | `references/prioritization.md` | Sprint Plan |
|
|
44
|
+
| Turn a meeting transcript into decisions and tasks | `references/meeting-to-tasks.md` | Any mode |
|
|
45
|
+
|
|
35
46
|
## Creating a Project
|
|
36
47
|
|
|
37
48
|
Use `project-create` to create a project atomically. One tool call creates the parent `:Project:Task` node, all child work items, dependency relationships (`BLOCKS`), and entity relationships (`RAISED_BY`, `AFFECTS`) in a single transaction.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Meeting to Tasks
|
|
2
|
+
|
|
3
|
+
A method for turning a meeting transcript into tracked project records: decisions captured as notes, action items created as child tasks. A client engagement generates meetings, but a transcript on its own is inert — the decisions and commitments in it are not in the graph, so nothing reminds anyone to act on them. This converts the conversation into the same structures the rest of the plugin uses.
|
|
4
|
+
|
|
5
|
+
## Method: separate decisions from actions
|
|
6
|
+
|
|
7
|
+
Read the transcript and pull out two distinct kinds of content. Keep them separate — they terminate differently.
|
|
8
|
+
|
|
9
|
+
- **Decisions** — things the meeting settled. A choice made, a direction agreed, a scope change, a problem identified. These are facts about the project's history.
|
|
10
|
+
- **Action items** — things someone committed to do. Each has an owner (even if implicit) and an outcome. These are future work.
|
|
11
|
+
|
|
12
|
+
Discard everything else. Discussion that led nowhere, restated context, and small talk do not become records. The test for an action item is whether someone is expected to do something as a result; the test for a decision is whether the project's state changed because of it.
|
|
13
|
+
|
|
14
|
+
For each action item, capture who owns it and what "done" looks like, so it can be created as a real task rather than a vague reminder.
|
|
15
|
+
|
|
16
|
+
## Graph termination
|
|
17
|
+
|
|
18
|
+
The transcript itself is never the deliverable — the records it produces are.
|
|
19
|
+
|
|
20
|
+
- **Decisions become project notes.** Append each to the project with `project-update` using the matching lifecycle format: a settled direction or scope change as `[PROJECT:CHANGE] {what changed} — Reason: {why}`, a problem raised as `[PROJECT:ISSUE] {description} — Impact: {assessment}`, a general decision as a `[PROJECT:PHASE]` note. These land in the project's searchable history.
|
|
21
|
+
- **Action items become child tasks.** Create each with `work-create`, naming the owner in the task description (there is no assignee relationship — the owner lives on the task itself). Attach the task to the project via `work-relate` (`PART_OF`, passing the project `taskId`). If the transcript names who requested the action, link that person with `RAISED_BY`; link any affected entity with `AFFECTS`. The action then flows through `work-ready` and execution like any other task.
|
|
22
|
+
|
|
23
|
+
After processing a transcript, `project-get` shows new notes for the decisions and new child tasks for the action items. A transcript that produces neither was not processed — it was only read.
|
|
24
|
+
|
|
25
|
+
## Wiring
|
|
26
|
+
|
|
27
|
+
This method is invokable in any mode, not tied to a single sprint phase — meetings happen throughout a project's life. Load it via `plugin-read` whenever a transcript is pasted into a project conversation, or when the operator asks to turn meeting notes into tasks. If the meeting belongs to no existing project, create or identify the project first so the notes and tasks have a parent.
|
|
28
|
+
|
|
29
|
+
## When to Use
|
|
30
|
+
|
|
31
|
+
- A meeting transcript pasted into a project conversation.
|
|
32
|
+
- "Turn these notes into tasks."
|
|
33
|
+
- "What did we agree in that call?"
|
|
34
|
+
- "Capture the action items from the client meeting."
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Prioritization
|
|
2
|
+
|
|
3
|
+
A method for ordering a project's tasks when every one looks important and dependency edges alone do not decide the sequence. `BLOCKS` relationships say what *must* come before what; they say nothing about what *should* come first among tasks that are all ready. This reference supplies a named framework for that choice and reflects the result in how tasks are created and noted — no schema change.
|
|
4
|
+
|
|
5
|
+
## When dependency order is not enough
|
|
6
|
+
|
|
7
|
+
`work-ready` returns the set of tasks with no unresolved blockers. When that set has one item, the choice is made. When it has many, the operator needs a way to rank them. Pick one framework below to fit the project; do not mix them within a single project.
|
|
8
|
+
|
|
9
|
+
### RICE
|
|
10
|
+
|
|
11
|
+
Score each task on Reach (how many people or cases it touches), Impact (how much it moves the outcome), Confidence (how sure you are of the first two), and Effort (how much work it takes). Rank by `(Reach × Impact × Confidence) ÷ Effort`. Use RICE when tasks vary widely in both benefit and cost and you want a single comparable number.
|
|
12
|
+
|
|
13
|
+
### ICE
|
|
14
|
+
|
|
15
|
+
A lighter RICE: score Impact, Confidence, and Ease (the inverse of effort), each on a simple scale, and rank by their product. Use ICE for a quick ranking when full RICE scoring is more precision than the project warrants.
|
|
16
|
+
|
|
17
|
+
### MoSCoW
|
|
18
|
+
|
|
19
|
+
Sort tasks into Must have, Should have, Could have, and Won't have (this time). Use MoSCoW when the project has a fixed deadline and the real question is what to drop, not what to score — it makes the cut line explicit.
|
|
20
|
+
|
|
21
|
+
### Kano
|
|
22
|
+
|
|
23
|
+
Classify each task by how it affects satisfaction: basic expectations (their absence causes complaints, their presence is unremarkable), performance features (more is better), and delighters (unexpected, disproportionately appreciated). Use Kano when the project is about a client-facing result and you are deciding where extra effort earns the most goodwill.
|
|
24
|
+
|
|
25
|
+
## Graph termination
|
|
26
|
+
|
|
27
|
+
Prioritization changes the order work is created and started, and records the decision — it never leaves a free-standing ranked list.
|
|
28
|
+
|
|
29
|
+
- **Create or order tasks to reflect the ranking.** When building the project, create the higher-ranked work items first so they surface earlier; for an existing project, the ranking decides which ready task is started next via the normal `work-ready` flow.
|
|
30
|
+
- **Record the method and the resulting order as a note.** Append to the project with `project-update`, e.g. `[PROJECT:PHASE] Prioritized via RICE — top three: site survey, supplier quotes, deposit invoice`. This makes the reasoning auditable later and visible in `project-get`.
|
|
31
|
+
|
|
32
|
+
No new property or relationship is introduced — priority lives in creation order and the lifecycle note, not a schema field.
|
|
33
|
+
|
|
34
|
+
## Wiring
|
|
35
|
+
|
|
36
|
+
This method runs inside the Plan phase of `sprint.md`. Load it via `plugin-read` when a project has many tasks and dependency edges do not settle the sequence. It pairs with `stakeholder-map.md` in the same phase: stakeholder power often informs Impact.
|
|
37
|
+
|
|
38
|
+
## When to Use
|
|
39
|
+
|
|
40
|
+
- A Plan phase where many tasks are ready and the order is unclear.
|
|
41
|
+
- "Everything feels urgent — what do we do first?"
|
|
42
|
+
- "We can't do all of this before the deadline — what makes the cut?"
|
|
43
|
+
- A client project where you are deciding where to spend the extra effort.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Risk Pre-Mortem
|
|
2
|
+
|
|
3
|
+
A forward-looking method for surfacing what could go wrong before a project starts, ranking each risk, and turning the serious ones into either a recorded issue or a mitigation task. Investigation mode handles problems after they happen; this is the opposite — it finds problems while they are still cheap to prevent. The Challenge Premise phase of a Full sprint asks whether the work is right but names no method for the risks; this supplies it.
|
|
4
|
+
|
|
5
|
+
## Method: imagine it already failed
|
|
6
|
+
|
|
7
|
+
The pre-mortem inverts the usual question. Instead of "what might go wrong?", assume the project has already failed and ask: "it is six months from now and this went badly — what happened?" Working backwards from an assumed failure surfaces risks that forward optimism hides, because the team is now explaining a failure rather than defending a plan.
|
|
8
|
+
|
|
9
|
+
Generate the list of failure causes, then rank each one on two axes:
|
|
10
|
+
|
|
11
|
+
- **Likelihood** — how probable is this, given what you know? Low / Medium / High.
|
|
12
|
+
- **Impact** — if it happens, how much does it hurt the project? Low / Medium / High.
|
|
13
|
+
|
|
14
|
+
The product of the two sets priority. A High × High risk is addressed before execution starts. A Low × Low risk is noted and left. The middle band is where judgement applies — a low-likelihood, high-impact risk (a key supplier folding) often deserves a mitigation even though it probably will not happen.
|
|
15
|
+
|
|
16
|
+
## Graph termination
|
|
17
|
+
|
|
18
|
+
Every risk worth surfacing terminates in the graph — never as chat-only text.
|
|
19
|
+
|
|
20
|
+
- **Serious risks become a recorded issue.** For each High-impact risk, append a note to the project with `project-update` in the issue format: `[PROJECT:ISSUE] {risk description} — Impact: {likelihood × impact assessment}`. This lands it in the project's searchable lifecycle history.
|
|
21
|
+
- **Risks you will act on become a mitigation Task.** Where a risk warrants concrete preventive work, create it with `work-create` and attach it to the project via `work-relate` (`PART_OF`, passing the project `taskId`). The mitigation then flows through the normal `work-ready` / execution path like any other task.
|
|
22
|
+
|
|
23
|
+
A pre-mortem that produces only a verbal warning has failed its own method. The test: after running it, `project-get` shows `[PROJECT:ISSUE]` notes or related mitigation Tasks. If it shows neither, nothing was actually captured.
|
|
24
|
+
|
|
25
|
+
## Wiring
|
|
26
|
+
|
|
27
|
+
This method runs inside the Challenge Premise phase of `sprint.md` (Full tier), before Lock Execution. Load it via `plugin-read` once the scope is agreed but execution has not begun — mitigations identified here change the locked task list. It can also run standalone before any significant project when the operator asks what could go wrong.
|
|
28
|
+
|
|
29
|
+
## When to Use
|
|
30
|
+
|
|
31
|
+
- A Full sprint Challenge Premise phase, before the plan is locked.
|
|
32
|
+
- "What could go wrong with this?"
|
|
33
|
+
- "Before we commit, what are the risks?"
|
|
34
|
+
- A high-stakes project where a preventable failure would be expensive.
|
|
@@ -40,6 +40,8 @@ Understand the project scope: what are the deliverables, who are they for, what'
|
|
|
40
40
|
|
|
41
41
|
Check for prior learnings: call `memory-search` with a description of the project to surface relevant learnings from past similar work. If learnings exist, factor them into the plan — adjust timelines, flag known risks, apply lessons learned.
|
|
42
42
|
|
|
43
|
+
When the project has more than one interested party, map them with `references/stakeholder-map.md`. When many tasks are ready and dependency order does not settle the sequence, order them with `references/prioritization.md`. Load either via `plugin-read`.
|
|
44
|
+
|
|
43
45
|
### Execute
|
|
44
46
|
|
|
45
47
|
Work through the child tasks in dependency order. Before starting each task, check `work-ready` to confirm no blockers or AFFECTS conflicts. Append progress notes as work progresses. If a blocker is discovered mid-execution, create a new child task for it and link via `BLOCKS`.
|
|
@@ -73,7 +75,7 @@ Mark the parent Task complete with `[PROJECT:COMPLETE]`.
|
|
|
73
75
|
|
|
74
76
|
### Plan
|
|
75
77
|
|
|
76
|
-
Same as Standard Plan, but more thorough: map all stakeholders, identify risks, estimate timeline for each work item, and define acceptance criteria for every deliverable.
|
|
78
|
+
Same as Standard Plan, but more thorough: map all stakeholders (use `references/stakeholder-map.md`), identify risks, estimate timeline for each work item, and define acceptance criteria for every deliverable. Order ready work with `references/prioritization.md` when the sequence is not obvious.
|
|
77
79
|
|
|
78
80
|
### Challenge Premise
|
|
79
81
|
|
|
@@ -85,6 +87,8 @@ Before locking in the execution plan, challenge the scope:
|
|
|
85
87
|
|
|
86
88
|
Surface any concerns and resolve them before proceeding.
|
|
87
89
|
|
|
90
|
+
Run a pre-mortem to surface what could go wrong before the plan is locked: load `references/risk-premortem.md` via `plugin-read`. Mitigations identified here change the locked task list, so run it before Lock Execution.
|
|
91
|
+
|
|
88
92
|
### Lock Execution
|
|
89
93
|
|
|
90
94
|
Finalise the execution plan: confirm the task list, dependency order, timeline, resource requirements, and acceptance criteria. This is the agreement — Phase 6 (Plan Conformity) will check the outcome against this.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Stakeholder Map
|
|
2
|
+
|
|
3
|
+
A method for identifying the people a project affects or depends on, and deciding how to engage each one. The Plan phase of a Standard or Full sprint names "multiple stakeholders" but gives no way to find them or decide who needs what. This reference supplies that method and terminates in graph relationships, not a loose list.
|
|
4
|
+
|
|
5
|
+
Use this whenever a project has more than one interested party — a client plus their finance team, a landlord plus tenants, a partner plus the people who sign off the work. A project with a single decision-maker does not need it.
|
|
6
|
+
|
|
7
|
+
## Method: Power × Interest
|
|
8
|
+
|
|
9
|
+
Place each stakeholder on two axes:
|
|
10
|
+
|
|
11
|
+
- **Power** — how much influence they have over whether the project succeeds. Can they approve it, fund it, block it, or redirect it?
|
|
12
|
+
- **Interest** — how much the project's outcome affects them. Will they feel the result day to day, or is it peripheral to them?
|
|
13
|
+
|
|
14
|
+
Each stakeholder lands in one of four quadrants. Each quadrant has a default engagement posture:
|
|
15
|
+
|
|
16
|
+
| Quadrant | Power | Interest | Engagement posture |
|
|
17
|
+
|----------|-------|----------|--------------------|
|
|
18
|
+
| Manage closely | High | High | Involve in decisions, update frequently, resolve their concerns first |
|
|
19
|
+
| Keep satisfied | High | Low | Brief enough to keep onside, do not overload — they disengage if flooded |
|
|
20
|
+
| Keep informed | Low | High | Regular updates, listen for early warnings — they often see problems first |
|
|
21
|
+
| Monitor | Low | Low | Minimal contact, light-touch updates only when the outcome touches them |
|
|
22
|
+
|
|
23
|
+
Work through the project and ask, for each person or group: who decides, who pays, who does the work, who is affected by the result, who could block it. Place each one. The grid surfaces two failure modes a flat list hides: a high-power stakeholder being treated as peripheral, and effort spent over-communicating with someone who has neither power nor interest.
|
|
24
|
+
|
|
25
|
+
## Graph termination
|
|
26
|
+
|
|
27
|
+
A stakeholder map is not done until it lands in the graph against the project.
|
|
28
|
+
|
|
29
|
+
- **Record each stakeholder as a node related to the project.** If the person already exists, find them via `memory-search`; otherwise create them through the normal entity path. Then relate them to the project Task with `work-relate`: use `RAISED_BY` for the person who requested or sponsors the project, and `AFFECTS` for people or entities the project's outcome changes. Pass the project `taskId` from `project-create`/`project-get` and the stakeholder `elementId` from `memory-search`.
|
|
30
|
+
- **Record the engagement decision as a note.** Append the posture per quadrant to the project with `project-update`, e.g. `[PROJECT:PHASE] Stakeholders mapped — 2 manage-closely (client, surveyor), 1 keep-informed (tenant); client concerns resolved first`.
|
|
31
|
+
|
|
32
|
+
Do not leave the map as chat-only text. If a stakeholder is worth naming, the relationship is worth writing — that is what lets `project-get` and conflict detection (`AFFECTS`) see them later.
|
|
33
|
+
|
|
34
|
+
## Wiring
|
|
35
|
+
|
|
36
|
+
This method runs inside the Plan phase of `sprint.md` (Standard and Full tiers). Load it via `plugin-read` when a project has more than one interested party. Full tier maps all stakeholders; Standard tier maps the ones with high power or high interest and monitors the rest.
|
|
37
|
+
|
|
38
|
+
## When to Use
|
|
39
|
+
|
|
40
|
+
- A project Plan phase where "who are the deliverables for" has more than one answer.
|
|
41
|
+
- "Who do we need on side for this?"
|
|
42
|
+
- "Make sure we keep everyone in the loop on the refit."
|
|
43
|
+
- Before a project where one party could block progress and has not yet been engaged.
|
|
@@ -7,6 +7,7 @@ import { z } from "zod";
|
|
|
7
7
|
import { readStore, setCredentials, removeConnection, writePending, } from "./lib/secrets.js";
|
|
8
8
|
import { buildAuthorizeUrl } from "./lib/oauth.js";
|
|
9
9
|
import { qboQuery, qboCreate, qboUpdate, qboReport, auditConnection } from "./lib/qbo-client.js";
|
|
10
|
+
import { lifelineTool } from "../../../../lib/mcp-lifeline/dist/index.js";
|
|
10
11
|
// Plugin-system boot tolerance — see Task 202. Module-init must never throw;
|
|
11
12
|
// the plugin-system enumerates tools/list with no env, so per-account context
|
|
12
13
|
// is resolved per call and a missing account refuses, never crashes.
|
|
@@ -43,7 +44,7 @@ const resourceBody = z.record(z.unknown());
|
|
|
43
44
|
// ---------------------------------------------------------------------------
|
|
44
45
|
// Connection management
|
|
45
46
|
// ---------------------------------------------------------------------------
|
|
46
|
-
server
|
|
47
|
+
lifelineTool(server, "quickbooks-credentials-set", "Store the operator's own Intuit app credentials (client ID + secret) for this account. Get these by registering an app at developer.intuit.com — Maxy is never the OAuth app owner. environment is 'sandbox' for an Intuit sandbox company or 'production' for real books.", {
|
|
47
48
|
clientId: z.string().describe("Intuit app client ID"),
|
|
48
49
|
clientSecret: z.string().describe("Intuit app client secret"),
|
|
49
50
|
environment: z.enum(["sandbox", "production"]).describe("Which QBO environment these credentials target"),
|
|
@@ -58,7 +59,7 @@ server.tool("quickbooks-credentials-set", "Store the operator's own Intuit app c
|
|
|
58
59
|
return fail(`quickbooks-credentials-set failed: ${err.message}`);
|
|
59
60
|
}
|
|
60
61
|
});
|
|
61
|
-
server
|
|
62
|
+
lifelineTool(server, "quickbooks-authorize-url", "Generate the Intuit consent URL for a human to click. Returns a URL — hand it to a person; they sign in and authorize one company. Intuit then redirects to the callback, which stores the refresh token. redirectUri MUST exactly match the redirect URI registered in the Intuit app (the brand's public host + /api/quickbooks/callback).", {
|
|
62
63
|
redirectUri: z.string().describe("The exact redirect URI registered in the Intuit app, e.g. https://<public-host>/api/quickbooks/callback"),
|
|
63
64
|
realmHint: z.string().optional().describe("Optional human label for which company is being connected (recorded for correlation only)"),
|
|
64
65
|
}, async ({ redirectUri, realmHint }) => {
|
|
@@ -85,7 +86,7 @@ server.tool("quickbooks-authorize-url", "Generate the Intuit consent URL for a h
|
|
|
85
86
|
return fail(`quickbooks-authorize-url failed: ${err.message}`);
|
|
86
87
|
}
|
|
87
88
|
});
|
|
88
|
-
server
|
|
89
|
+
lifelineTool(server, "quickbooks-connections", "List the QuickBooks companies (realmIds) this account is connected to, with the age of each stored refresh token.", {}, async () => {
|
|
89
90
|
if (!ACCOUNT_ID || !PLATFORM_ROOT)
|
|
90
91
|
return refuseNoAccount("quickbooks-connections");
|
|
91
92
|
const store = readStore(PLATFORM_ROOT, ACCOUNT_ID);
|
|
@@ -100,7 +101,7 @@ server.tool("quickbooks-connections", "List the QuickBooks companies (realmIds)
|
|
|
100
101
|
}));
|
|
101
102
|
return ok({ environment: store.environment, connections });
|
|
102
103
|
});
|
|
103
|
-
server
|
|
104
|
+
lifelineTool(server, "quickbooks-token-audit", "Probe every connected company's refresh token and report which are still alive. Run periodically: a refresh token dies silently after ~100 days of inactivity or operator revocation. alive=false means that company needs operator re-consent before any customer-facing call.", {
|
|
104
105
|
realmId: z.string().optional().describe("Audit just this company; omit to audit all"),
|
|
105
106
|
}, async ({ realmId }) => {
|
|
106
107
|
if (!ACCOUNT_ID || !PLATFORM_ROOT)
|
|
@@ -115,7 +116,7 @@ server.tool("quickbooks-token-audit", "Probe every connected company's refresh t
|
|
|
115
116
|
}
|
|
116
117
|
return ok({ audited: results });
|
|
117
118
|
});
|
|
118
|
-
server
|
|
119
|
+
lifelineTool(server, "quickbooks-disconnect", "Remove the stored refresh token for one company. The operator can re-authorize later with quickbooks-authorize-url.", { realmId: z.string().describe("The company realmId to disconnect") }, async ({ realmId }) => {
|
|
119
120
|
if (!ACCOUNT_ID || !PLATFORM_ROOT)
|
|
120
121
|
return refuseNoAccount("quickbooks-disconnect");
|
|
121
122
|
removeConnection(PLATFORM_ROOT, ACCOUNT_ID, realmId);
|
|
@@ -124,7 +125,7 @@ server.tool("quickbooks-disconnect", "Remove the stored refresh token for one co
|
|
|
124
125
|
// ---------------------------------------------------------------------------
|
|
125
126
|
// Read
|
|
126
127
|
// ---------------------------------------------------------------------------
|
|
127
|
-
server
|
|
128
|
+
lifelineTool(server, "quickbooks-query", "Run a QuickBooks query (the QBO SQL-like language) against a company. Covers every readable entity: e.g. SELECT * FROM Invoice WHERE TxnDate > '2026-01-01', SELECT * FROM Customer, SELECT * FROM Bill.", {
|
|
128
129
|
realmId: z.string().describe("The company realmId"),
|
|
129
130
|
query: z.string().describe("A QBO query, e.g. \"SELECT * FROM Invoice MAXRESULTS 20\""),
|
|
130
131
|
}, async ({ realmId, query }) => {
|
|
@@ -137,7 +138,7 @@ server.tool("quickbooks-query", "Run a QuickBooks query (the QBO SQL-like langua
|
|
|
137
138
|
return fail(`quickbooks-query failed: ${err.message}`);
|
|
138
139
|
}
|
|
139
140
|
});
|
|
140
|
-
server
|
|
141
|
+
lifelineTool(server, "quickbooks-report", "Fetch a named QuickBooks report for a company, e.g. ProfitAndLoss, BalanceSheet, CustomerBalance, AgedReceivables. Params are report-specific (start_date, end_date, etc).", {
|
|
141
142
|
realmId: z.string().describe("The company realmId"),
|
|
142
143
|
report: z.string().describe("Report name, e.g. ProfitAndLoss"),
|
|
143
144
|
params: z.record(z.string()).optional().describe("Report parameters, e.g. { start_date: '2026-01-01', end_date: '2026-03-31' }"),
|
|
@@ -156,7 +157,7 @@ server.tool("quickbooks-report", "Fetch a named QuickBooks report for a company,
|
|
|
156
157
|
// All updates require Id + SyncToken in the body (QBO's optimistic-lock token).
|
|
157
158
|
// ---------------------------------------------------------------------------
|
|
158
159
|
function createTool(toolName, entity, description) {
|
|
159
|
-
server
|
|
160
|
+
lifelineTool(server, toolName, description, { realmId: z.string().describe("The company realmId"), body: resourceBody.describe(`${entity} resource body`) }, async ({ realmId, body }) => {
|
|
160
161
|
if (!ACCOUNT_ID || !PLATFORM_ROOT)
|
|
161
162
|
return refuseNoAccount(toolName);
|
|
162
163
|
try {
|
|
@@ -168,7 +169,7 @@ function createTool(toolName, entity, description) {
|
|
|
168
169
|
});
|
|
169
170
|
}
|
|
170
171
|
function updateTool(toolName, entity, description) {
|
|
171
|
-
server
|
|
172
|
+
lifelineTool(server, toolName, description, { realmId: z.string().describe("The company realmId"), body: resourceBody.describe(`${entity} resource body — MUST include Id and SyncToken`) }, async ({ realmId, body }) => {
|
|
172
173
|
if (!ACCOUNT_ID || !PLATFORM_ROOT)
|
|
173
174
|
return refuseNoAccount(toolName);
|
|
174
175
|
try {
|
|
@@ -185,7 +186,7 @@ createTool("quickbooks-customer-create", "Customer", "Create a customer in a Qui
|
|
|
185
186
|
updateTool("quickbooks-customer-update", "Customer", "Update a customer in a QuickBooks company.");
|
|
186
187
|
createTool("quickbooks-bill-create", "Bill", "Create a bill (vendor payable) in a QuickBooks company.");
|
|
187
188
|
createTool("quickbooks-payment-create", "Payment", "Record a customer payment in a QuickBooks company.");
|
|
188
|
-
server
|
|
189
|
+
lifelineTool(server, "quickbooks-entity-create", "Create any QuickBooks entity not covered by a dedicated tool (Vendor, Item, Estimate, CreditMemo, etc). entity is the QBO resource name.", {
|
|
189
190
|
realmId: z.string().describe("The company realmId"),
|
|
190
191
|
entity: z.string().describe("QBO entity name, e.g. Vendor, Item, Estimate"),
|
|
191
192
|
body: resourceBody.describe("The resource body"),
|
|
@@ -199,7 +200,7 @@ server.tool("quickbooks-entity-create", "Create any QuickBooks entity not covere
|
|
|
199
200
|
return fail(`quickbooks-entity-create failed: ${err.message}`);
|
|
200
201
|
}
|
|
201
202
|
});
|
|
202
|
-
server
|
|
203
|
+
lifelineTool(server, "quickbooks-entity-update", "Update any QuickBooks entity not covered by a dedicated tool. body MUST include Id and SyncToken.", {
|
|
203
204
|
realmId: z.string().describe("The company realmId"),
|
|
204
205
|
entity: z.string().describe("QBO entity name, e.g. Vendor, Item, Estimate"),
|
|
205
206
|
body: resourceBody.describe("The resource body — MUST include Id and SyncToken"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,aAAa,CAAC,YAAY,CAAC,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { readToken, writeToken, validateToken } from "./lib/replicate-key.js";
|
|
7
7
|
import { imageGenerate } from "./tools/image-generate.js";
|
|
8
|
+
import { lifelineTool } from "../../../../lib/mcp-lifeline/dist/index.js";
|
|
8
9
|
// Plugin-system boot tolerance — see Task 202.
|
|
9
10
|
// MCP servers launch in two contexts: per-account spawn via .mcp.json
|
|
10
11
|
// (ACCOUNT_ID + PLATFORM_ROOT set, tools execute normally) and plugin-system
|
|
@@ -33,7 +34,7 @@ const server = new McpServer({
|
|
|
33
34
|
// ---------------------------------------------------------------------------
|
|
34
35
|
// replicate-key-store — validate and persist a Replicate API token
|
|
35
36
|
// ---------------------------------------------------------------------------
|
|
36
|
-
server
|
|
37
|
+
lifelineTool(server, "replicate-key-store", "Validate and store a Replicate API token. Token must start with r8_.", {
|
|
37
38
|
token: z.string().describe("Replicate API token (starts with r8_)"),
|
|
38
39
|
}, async ({ token }) => {
|
|
39
40
|
if (!ACCOUNT_ID)
|
|
@@ -77,7 +78,7 @@ server.tool("replicate-key-store", "Validate and store a Replicate API token. To
|
|
|
77
78
|
// ---------------------------------------------------------------------------
|
|
78
79
|
// replicate-key-verify — check stored token validity
|
|
79
80
|
// ---------------------------------------------------------------------------
|
|
80
|
-
server
|
|
81
|
+
lifelineTool(server, "replicate-key-verify", "Read the stored Replicate API token and verify it against the Replicate API.", {}, async () => {
|
|
81
82
|
if (!ACCOUNT_ID)
|
|
82
83
|
return refuseNoAccount("replicate-key-verify");
|
|
83
84
|
const tokenResult = readToken();
|
|
@@ -102,7 +103,7 @@ server.tool("replicate-key-verify", "Read the stored Replicate API token and ver
|
|
|
102
103
|
// ---------------------------------------------------------------------------
|
|
103
104
|
// image-generate — generate images from text prompts
|
|
104
105
|
// ---------------------------------------------------------------------------
|
|
105
|
-
server
|
|
106
|
+
lifelineTool(server, "image-generate", [
|
|
106
107
|
"Generate an image from a text prompt. Choose a model based on the content:",
|
|
107
108
|
"- nano-banana-pro: photorealistic images, data-driven visuals, multilingual text rendering (94% legibility). Best for infographics, charts with labels, photo-quality illustrations. ~$0.04/image.",
|
|
108
109
|
"- recraft-v4: design-quality compositions with intentional lighting, colour, and typography. Best for branded assets, print-ready artifacts, diagrams. Supports SVG output. ~$0.04/image.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,aAAa,CAAC,WAAW,CAAC,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|