@rubytech/create-realagent-code 0.1.255 → 0.1.257

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/__tests__/plugin-install.test.js +58 -40
  2. package/dist/index.js +77 -26
  3. package/dist/lib/plugin-install.js +31 -29
  4. package/package.json +1 -1
  5. package/payload/platform/config/brand-registry.json +8 -0
  6. package/payload/platform/config/brand.json +2 -2
  7. package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +12 -0
  8. package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
  9. package/payload/platform/lib/graph-write/dist/index.js +2 -0
  10. package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
  11. package/payload/platform/lib/graph-write/src/index.ts +2 -0
  12. package/payload/platform/neo4j/schema.cypher +126 -0
  13. package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
  14. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  15. package/payload/platform/plugins/admin/PLUGIN.md +3 -6
  16. package/payload/platform/plugins/admin/mcp/dist/index.js +0 -60
  17. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  18. package/payload/platform/plugins/admin/skills/insight/SKILL.md +24 -0
  19. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +63 -10
  20. package/payload/platform/plugins/business-assistant/PLUGIN.md +1 -1
  21. package/payload/platform/plugins/business-assistant/references/document-management.md +1 -1
  22. package/payload/platform/plugins/business-assistant/references/invoicing.md +2 -2
  23. package/payload/platform/plugins/business-assistant/references/quoting.md +1 -1
  24. package/payload/platform/plugins/docs/PLUGIN.md +1 -0
  25. package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
  26. package/payload/platform/plugins/docs/references/deployment.md +18 -5
  27. package/payload/platform/plugins/docs/references/memory-guide.md +4 -0
  28. package/payload/platform/plugins/docs/references/platform.md +1 -1
  29. package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
  30. package/payload/platform/plugins/docs/references/slides.md +31 -0
  31. package/payload/platform/plugins/docs/references/voice-mirror-guide.md +1 -1
  32. package/payload/platform/plugins/memory/PLUGIN.md +1 -1
  33. package/payload/platform/plugins/memory/mcp/dist/index.js +1 -1
  34. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  35. package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts +1 -1
  36. package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js +1 -1
  37. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
  38. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +10 -0
  39. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  40. package/payload/platform/plugins/memory/references/schema-construction.md +72 -0
  41. package/payload/platform/plugins/slides/.claude-plugin/plugin.json +8 -0
  42. package/payload/platform/plugins/slides/LICENSE +21 -0
  43. package/payload/platform/plugins/slides/PLUGIN.md +18 -0
  44. package/payload/platform/plugins/slides/PROVENANCE.md +40 -0
  45. package/payload/platform/plugins/slides/commands/add-slide.md +29 -0
  46. package/payload/platform/plugins/slides/commands/slides-claus.md +39 -0
  47. package/payload/platform/plugins/slides/commands/slides-new-component.md +39 -0
  48. package/payload/platform/plugins/slides/commands/slides-outline.md +43 -0
  49. package/payload/platform/plugins/slides/commands/slides-review.md +52 -0
  50. package/payload/platform/plugins/slides/commands/slides-theme.md +64 -0
  51. package/payload/platform/plugins/slides/commands/slides.md +59 -0
  52. package/payload/platform/plugins/slides/skills/deck-system/REFERENCE.md +581 -0
  53. package/payload/platform/plugins/slides/skills/deck-system/SKILL.md +607 -0
  54. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-board.md +426 -0
  55. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-claus.md +185 -0
  56. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-mbb.md +450 -0
  57. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-product-launch.md +579 -0
  58. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-sales.md +464 -0
  59. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-sequoia.md +489 -0
  60. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING.md +273 -0
  61. package/payload/platform/plugins/slides/skills/deck-system/deck-craft.html +1371 -0
  62. package/payload/platform/plugins/slides/skills/deck-system/deck-solid.html +1667 -0
  63. package/payload/platform/plugins/slides/skills/deck-system/deck.html +1359 -0
  64. package/payload/platform/plugins/url-get/.claude-plugin/plugin.json +1 -1
  65. package/payload/platform/plugins/url-get/PLUGIN.md +26 -21
  66. package/payload/platform/plugins/url-get/mcp/dist/index.js +3 -3
  67. package/payload/platform/plugins/url-get/mcp/dist/index.js.map +1 -1
  68. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.d.ts +1 -2
  69. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.d.ts.map +1 -1
  70. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js +20 -40
  71. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js.map +1 -1
  72. package/payload/platform/scripts/setup-account.sh +1 -10
  73. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  74. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +0 -1
  75. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  76. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +5 -0
  77. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  78. package/payload/platform/services/claude-session-manager/dist/http-server.js +32 -2
  79. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  80. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +2 -2
  81. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  82. package/payload/platform/templates/specialists/agents/database-operator.md +1 -1
  83. package/payload/platform/templates/specialists/agents/typed-edge-classifier.md +1 -1
  84. package/payload/server/public/assets/AdminShell-T-YknnBn.js +1 -0
  85. package/payload/server/public/assets/Checkbox-DmDxpqVv.js +1 -0
  86. package/payload/server/public/assets/admin-COUV-jgt.js +1 -0
  87. package/payload/server/public/assets/{arc-aUiRP9AS.js → arc-B2CweJq3.js} +1 -1
  88. package/payload/server/public/assets/architecture-YZFGNWBL-Dnn6Hc65.js +1 -0
  89. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-c09loTER.js → architectureDiagram-Q4EWVU46-DP2o-MFV.js} +1 -1
  90. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-Cjdeyoq1.js → blockDiagram-DXYQGD6D-DO4mcYDJ.js} +1 -1
  91. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-NY6Wlzo2.js → c4Diagram-AHTNJAMY-Sy1giHbj.js} +1 -1
  92. package/payload/server/public/assets/channel-CEpR_0rE.js +1 -0
  93. package/payload/server/public/assets/{chunk-2KRD3SAO-BK3470lx.js → chunk-2KRD3SAO-CKsCYCsN.js} +1 -1
  94. package/payload/server/public/assets/chunk-336JU56O-C0-P-aUF.js +2 -0
  95. package/payload/server/public/assets/chunk-426QAEUC-DFjEt3Zb.js +1 -0
  96. package/payload/server/public/assets/{chunk-4BX2VUAB-BOvVdJLf.js → chunk-4BX2VUAB-B8bqAmBa.js} +1 -1
  97. package/payload/server/public/assets/{chunk-4TB4RGXK-BXpto3yW.js → chunk-4TB4RGXK-D1k0VSlW.js} +1 -1
  98. package/payload/server/public/assets/{chunk-55IACEB6-BwZyF7vR.js → chunk-55IACEB6-B-p_QNqz.js} +1 -1
  99. package/payload/server/public/assets/{chunk-5FUZZQ4R-C403gCUk.js → chunk-5FUZZQ4R-D6U6tV_j.js} +1 -1
  100. package/payload/server/public/assets/{chunk-5PVQY5BW-CjVzXQEp.js → chunk-5PVQY5BW-CYK76xfs.js} +1 -1
  101. package/payload/server/public/assets/{chunk-67CJDMHE-D5bhMrtY.js → chunk-67CJDMHE-BC9js-lf.js} +1 -1
  102. package/payload/server/public/assets/{chunk-7N4EOEYR-Si7Lgrwc.js → chunk-7N4EOEYR-4j2OqKkv.js} +1 -1
  103. package/payload/server/public/assets/{chunk-AA7GKIK3-DMuHtDqO.js → chunk-AA7GKIK3-Coen-fXN.js} +1 -1
  104. package/payload/server/public/assets/{chunk-BSJP7CBP-L79XKVcb.js → chunk-BSJP7CBP-CAiOBvec.js} +1 -1
  105. package/payload/server/public/assets/{chunk-CIAEETIT-C0O7Upmg.js → chunk-CIAEETIT-AJzzpZVb.js} +1 -1
  106. package/payload/server/public/assets/{chunk-EDXVE4YY-DJcJAsAg.js → chunk-EDXVE4YY-BL4BKozX.js} +1 -1
  107. package/payload/server/public/assets/{chunk-ENJZ2VHE-CFDNvYu1.js → chunk-ENJZ2VHE-mhAFG8UD.js} +1 -1
  108. package/payload/server/public/assets/{chunk-FMBD7UC4-C_E43NFJ.js → chunk-FMBD7UC4-H231gZA_.js} +1 -1
  109. package/payload/server/public/assets/{chunk-FOC6F5B3-D9lWWHAu.js → chunk-FOC6F5B3-Cl3ZZjYG.js} +1 -1
  110. package/payload/server/public/assets/{chunk-ICPOFSXX-ecLOxGhL.js → chunk-ICPOFSXX-DOEzvzJa.js} +2 -2
  111. package/payload/server/public/assets/{chunk-K5T4RW27-DuhsNH4c.js → chunk-K5T4RW27-C_ipbUDD.js} +1 -1
  112. package/payload/server/public/assets/{chunk-KGLVRYIC-B4-A1Abi.js → chunk-KGLVRYIC-CTsDNSCU.js} +1 -1
  113. package/payload/server/public/assets/{chunk-LIHQZDEY-BxqgHRgT.js → chunk-LIHQZDEY-DvSXhkGf.js} +1 -1
  114. package/payload/server/public/assets/{chunk-ORNJ4GCN-DEYQ5WaJ.js → chunk-ORNJ4GCN-p574NOI7.js} +1 -1
  115. package/payload/server/public/assets/{chunk-OYMX7WX6-B7MW66KB.js → chunk-OYMX7WX6-BlEgFM6U.js} +1 -1
  116. package/payload/server/public/assets/chunk-QZHKN3VN-DpF06ZZQ.js +1 -0
  117. package/payload/server/public/assets/{chunk-U2HBQHQK-BMawmsyk.js → chunk-U2HBQHQK-B2bDK0jv.js} +1 -1
  118. package/payload/server/public/assets/{chunk-X2U36JSP-CT6g7pno.js → chunk-X2U36JSP-D69BxKFw.js} +1 -1
  119. package/payload/server/public/assets/{chunk-XPW4576I-CBfZXZDB.js → chunk-XPW4576I-Dm-PcyUi.js} +1 -1
  120. package/payload/server/public/assets/{chunk-YZCP3GAM-xeAluiAH.js → chunk-YZCP3GAM-Be8RnXgx.js} +1 -1
  121. package/payload/server/public/assets/{chunk-ZZ45TVLE-BRN9qUC5.js → chunk-ZZ45TVLE-Ck8PCTa4.js} +1 -1
  122. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CYbXvKLI.js +1 -0
  123. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DEyHzRhq.js +1 -0
  124. package/payload/server/public/assets/clone-y8gexbBy.js +1 -0
  125. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-Br2gjtEO.js → cose-bilkent-S5V4N54A-CmkW2Eaj.js} +1 -1
  126. package/payload/server/public/assets/{dagre-DTjePoco.js → dagre-Dqp-ns8F.js} +1 -1
  127. package/payload/server/public/assets/{dagre-KV5264BT-DHBkRke4.js → dagre-KV5264BT-ZgWWXPLc.js} +1 -1
  128. package/payload/server/public/assets/data-gy6QH9c1.js +1 -0
  129. package/payload/server/public/assets/{diagram-5BDNPKRD-BIq1-idL.js → diagram-5BDNPKRD-CTX5-ScM.js} +1 -1
  130. package/payload/server/public/assets/{diagram-G4DWMVQ6-BsIUDzV6.js → diagram-G4DWMVQ6-BovIsO6H.js} +1 -1
  131. package/payload/server/public/assets/{diagram-MMDJMWI5-CgHSri2i.js → diagram-MMDJMWI5-DcETsQy-.js} +1 -1
  132. package/payload/server/public/assets/{diagram-TYMM5635-Ce2Wh9ZX.js → diagram-TYMM5635-yyq6peoZ.js} +1 -1
  133. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BU0Kh6OQ.js → erDiagram-SMLLAGMA-CiNToftB.js} +1 -1
  134. package/payload/server/public/assets/{flatten-Bo6YRmWl.js → flatten-BtFI066E.js} +1 -1
  135. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-B0N06MF7.js → flowDiagram-DWJPFMVM-Xnl3SpIM.js} +1 -1
  136. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BVbx4ARZ.js → ganttDiagram-T4ZO3ILL-C1iyWe0f.js} +1 -1
  137. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CNs-LD5i.js +1 -0
  138. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-C-xRJ94t.js → gitGraphDiagram-UUTBAWPF-D97pbMQb.js} +1 -1
  139. package/payload/server/public/assets/graph-labels-cZu4pK16.js +1 -0
  140. package/payload/server/public/assets/{graph-g48ZcA5M.js → graph-qz5tFKqU.js} +3 -3
  141. package/payload/server/public/assets/{graphlib-YmNcoMjY.js → graphlib-Lq8ijgON.js} +1 -1
  142. package/payload/server/public/assets/info-OMHHGYJF-DsTNigSS.js +1 -0
  143. package/payload/server/public/assets/infoDiagram-42DDH7IO-C_OarRTA.js +2 -0
  144. package/payload/server/public/assets/{isEmpty-D6Kr-M1M.js → isEmpty-D6QovjYR.js} +1 -1
  145. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DTrq54yC.js → ishikawaDiagram-UXIWVN3A-B8XBdjJn.js} +1 -1
  146. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-OZZZMrFX.js → journeyDiagram-VCZTEJTY-CZYbiOaQ.js} +1 -1
  147. package/payload/server/public/assets/{kanban-definition-6JOO6SKY--w-IP9pN.js → kanban-definition-6JOO6SKY-B1PybFoh.js} +1 -1
  148. package/payload/server/public/assets/{line-Ckeulv5T.js → line-D-tw3hHp.js} +1 -1
  149. package/payload/server/public/assets/{linear-DOh_6k2k.js → linear-BHhXD3cd.js} +1 -1
  150. package/payload/server/public/assets/{mermaid-parser.core-CVRAxYRD.js → mermaid-parser.core-C9RAnysF.js} +2 -2
  151. package/payload/server/public/assets/{mermaid.core-B-mE18I1.js → mermaid.core-B532LT1r.js} +3 -3
  152. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-Bm8mDicL.js → mindmap-definition-QFDTVHPH-DGlgeeTV.js} +1 -1
  153. package/payload/server/public/assets/{ordinal-BDi6f4xk.js → ordinal-Bl-aM5b9.js} +1 -1
  154. package/payload/server/public/assets/packet-4T2RLAQJ-DGES22b-.js +1 -0
  155. package/payload/server/public/assets/pie-ZZUOXDRM-ChKeDbzt.js +1 -0
  156. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BCmRLgGO.js → pieDiagram-DEJITSTG-DV9FIWko.js} +1 -1
  157. package/payload/server/public/assets/{public-DknO-g9S.js → public-Bu2_Xi0a.js} +5 -5
  158. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CniTIUTm.js → quadrantDiagram-34T5L4WZ-Betwya4l.js} +1 -1
  159. package/payload/server/public/assets/radar-PYXPWWZC-FGG5Fs7N.js +1 -0
  160. package/payload/server/public/assets/{reduce-CGi9ik8i.js → reduce-BD4xUd2c.js} +1 -1
  161. package/payload/server/public/assets/{requirementDiagram-MS252O5E-CoxBSj9M.js → requirementDiagram-MS252O5E-Cq3vODdg.js} +1 -1
  162. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BjS-4jzq.js → sankeyDiagram-XADWPNL6-x8krXWcS.js} +1 -1
  163. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-B9jVOnPR.js → sequenceDiagram-FGHM5R23-i-_uH-Yl.js} +1 -1
  164. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BvOQPzP8.js → stateDiagram-FHFEXIEX-il4KqSgI.js} +1 -1
  165. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-B6zNJ6Tv.js +1 -0
  166. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CdfgWLo1.js → timeline-definition-GMOUNBTQ-DATdZkA5.js} +1 -1
  167. package/payload/server/public/assets/treeView-SZITEDCU-VAQQdbtf.js +1 -0
  168. package/payload/server/public/assets/treemap-W4RFUUIX-DKchO3zI.js +1 -0
  169. package/payload/server/public/assets/useSelectionMode-A5KItZ2T.js +13 -0
  170. package/payload/server/public/assets/{brand-D0gNihp7.css → useSelectionMode-C-Ojh7W9.css} +1 -1
  171. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-JCgpIbj-.js → vennDiagram-DHZGUBPP-BJh9tJTt.js} +1 -1
  172. package/payload/server/public/assets/wardley-RL74JXVD-CBGtx0bS.js +1 -0
  173. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-Dei3VqHo.js → wardleyDiagram-NUSXRM2D-EMN1Hdfg.js} +1 -1
  174. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DUtIyoIb.js → xychartDiagram-5P7HB3ND-DbUWXa7T.js} +1 -1
  175. package/payload/server/public/data.html +5 -5
  176. package/payload/server/public/graph.html +6 -6
  177. package/payload/server/public/index.html +5 -6
  178. package/payload/server/public/public.html +4 -5
  179. package/payload/server/server.js +65 -23
  180. package/payload/platform/plugins/admin/hooks/__tests__/insight.test.sh +0 -395
  181. package/payload/platform/plugins/admin/hooks/insight.sh +0 -219
  182. package/payload/platform/plugins/admin/hooks/lib/admin-graph-pass-common.sh +0 -239
  183. package/payload/server/public/assets/AdminShell-892Jy_rs.js +0 -1
  184. package/payload/server/public/assets/Checkbox-Bc2QzX9b.js +0 -1
  185. package/payload/server/public/assets/admin-D3K13ndi.js +0 -1
  186. package/payload/server/public/assets/architecture-YZFGNWBL--v-pJPNp.js +0 -1
  187. package/payload/server/public/assets/brand-CcN3dELF.js +0 -9
  188. package/payload/server/public/assets/channel-B1IT7to2.js +0 -1
  189. package/payload/server/public/assets/chunk-336JU56O-CdKRCIeE.js +0 -2
  190. package/payload/server/public/assets/chunk-426QAEUC-BybuQ3Ve.js +0 -1
  191. package/payload/server/public/assets/chunk-QZHKN3VN-Bd-GrQM6.js +0 -1
  192. package/payload/server/public/assets/classDiagram-6PBFFD2Q-rjCize6i.js +0 -1
  193. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BORWOUt0.js +0 -1
  194. package/payload/server/public/assets/clone-Csqv5U6T.js +0 -1
  195. package/payload/server/public/assets/data-Br-pdljK.js +0 -1
  196. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CI0s_tqn.js +0 -1
  197. package/payload/server/public/assets/graph-labels-BYH-IPCb.js +0 -1
  198. package/payload/server/public/assets/info-OMHHGYJF-g3gYW7Qm.js +0 -1
  199. package/payload/server/public/assets/infoDiagram-42DDH7IO-Di6oPQ_-.js +0 -2
  200. package/payload/server/public/assets/packet-4T2RLAQJ-CT0TB9HI.js +0 -1
  201. package/payload/server/public/assets/pie-ZZUOXDRM-CXLe7TFF.js +0 -1
  202. package/payload/server/public/assets/radar-PYXPWWZC-DnPLBl-D.js +0 -1
  203. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-v4ND10uR.js +0 -1
  204. package/payload/server/public/assets/treeView-SZITEDCU-C3cb7Xwe.js +0 -1
  205. package/payload/server/public/assets/treemap-W4RFUUIX-Dc7G3Bgm.js +0 -1
  206. package/payload/server/public/assets/useSelectionMode-DwsyptOw.js +0 -5
  207. package/payload/server/public/assets/wardley-RL74JXVD-DtgibWAt.js +0 -1
  208. /package/payload/server/public/assets/{_baseFor-Cam2PbSt.js → _baseFor-Cs8Y-rGh.js} +0 -0
  209. /package/payload/server/public/assets/{array-DYRGGQae.js → array-iHZP4KWJ.js} +0 -0
  210. /package/payload/server/public/assets/{cytoscape.esm-nWsJMTNI.js → cytoscape.esm-BR2GOQ8_.js} +0 -0
  211. /package/payload/server/public/assets/{defaultLocale-Du1XY3Dp.js → defaultLocale-B9aLeOTg.js} +0 -0
  212. /package/payload/server/public/assets/{dist-BzAsli7o.js → dist-DB-VPj_8.js} +0 -0
  213. /package/payload/server/public/assets/{init-B5BXBRcm.js → init-BNFRgqHM.js} +0 -0
  214. /package/payload/server/public/assets/{katex-HOUACuRw.js → katex-B-EfS3nw.js} +0 -0
  215. /package/payload/server/public/assets/{path-CNO468J-.js → path-DmWWdwp7.js} +0 -0
  216. /package/payload/server/public/assets/{rough.esm-DRO6hWPh.js → rough.esm-Ci7Kjt46.js} +0 -0
  217. /package/payload/server/public/assets/{src-CWiyyVfn.js → src-C1jfwBq0.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Real Agent ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:9881631eab81d0c53b93d876d777d4514a0639ea7262c661cc6e2110e1505140
4
+ content-hash: sha256:0c253f3a1c9946f4256daea47978fa363b3a6eef6875b4a417792393c4fc00e9
5
5
  brand: realagent-code
6
6
  product-name: Real Agent
7
7
  ---
@@ -174,7 +174,7 @@ Roles are installed during setup and listed when Maxy introduces itself. Some pr
174
174
 
175
175
  Maxy maintains a graph database (Neo4j) of everything you've told it. People, conversations, preferences, and context are stored as connected nodes. When you ask Maxy something, it searches this graph to retrieve relevant context before responding.
176
176
 
177
- **The recording loop.** Maxy dispatches `database-operator` inline at its own discretion when a write must complete before the assistant response ends. The full graph-completeness sweep runs on demand: when you type `/insight`, the `insight.sh` UserPromptSubmit hook injects a four-pass instruction and Maxy walks the session for any node, edge, or commitment that was discussed but not written in-flight, dispatches one `database-operator` Task per candidate write, then carries on in the same session.
177
+ **The recording loop.** Maxy dispatches `database-operator` inline at its own discretion when a write must complete before the assistant response ends. The full graph-completeness sweep runs on demand: when you invoke the `/insight` admin skill, it runs a four-pass instruction and Maxy walks the session for any node, edge, or commitment that was discussed but not written in-flight, dispatches one `database-operator` Task per candidate write, then carries on in the same session.
178
178
 
179
179
  The memory graph is stored on your Pi. It never leaves your network.
180
180
 
@@ -337,7 +337,7 @@ These are part of Maxy's foundation and cannot be disabled:
337
337
  | `workflows` | Persistent named workflows — reusable instruction sets |
338
338
  | `contacts` | CRM contact management — create, lookup, update, list |
339
339
  | `prompt-optimiser` | Prompt optimiser — two modes. Chat-app mode turns a rough draft or task description into a single finished, copy-pasteable prompt tuned for Opus 4.7 adaptive thinking (claude.ai, Mac, iOS). In-session mode is applied automatically: a standing `UserPromptSubmit` directive hook (`admin/hooks/prompt-optimiser-directive.sh`) injects context every turn telling the admin agent to restate each non-trivial prompt through this skill and act on the restatement, skipped for one-word confirmations, slash-commands, and direct continuations. Compliance is behavioural — the hook steers the agent, it cannot force the skill call. |
340
- | `url-get` | Faithful page retrieval — fetches a server-rendered page, writes a verbatim markdown copy to an account-scoped reference file (no model in the path, so no copyright refusal), and returns a transformative summary plus the file path. Use instead of WebFetch when a faithful copy is needed (e.g. ingesting your own published writing). |
340
+ | `url-get` | Faithful page retrieval — fetches a server-rendered page, writes a verbatim markdown copy to an account-scoped reference file (no model in the path, so no copyright refusal), and returns the cleaned page text (capped) plus the file path. No summary and no subprocess: a caller that wants a summary invokes url-get from a delegated subagent. Use instead of WebFetch when a faithful copy is needed (e.g. ingesting your own published writing). |
341
341
 
342
342
  ### Maxy Plugins (user-selectable)
343
343
 
@@ -1541,6 +1541,10 @@ Every node also carries a provenance stamp — which agent wrote it, in which se
1541
1541
 
1542
1542
  **Two write surfaces, one substrate.** General agents write through schema-aware helpers — Maxy can record a new contact, a new commitment, a new preference without ever typing a database query, and the helper enforces the connection-and-provenance rule above structurally. The graph-steward role (the specialist Maxy dispatches when you ask for graph hygiene — "merge those two duplicate contacts," "wire those four tasks to the meeting," "rename the legacy label across the graph") additionally has a raw Cypher write tool for the multi-step operations the helpers cannot express. The steward role internalises the same connection-and-provenance discipline in its prompt; a post-write audit emits a warning on every breach so the same rules apply to both surfaces. Both paths feed the same hourly orphan trend and the same forensic provenance fields — read-side, you cannot tell the two apart, and that is the point.
1543
1543
 
1544
+ ## Vertical schemas
1545
+
1546
+ On top of the base graph, each brand boots one optional **vertical** — an extra set of entity types tailored to a trade. The vertical is named by `brand.json#vertical` and defined in a `schema-<name>.md` reference; the memory plugin loads it at startup and validates every write against base + the active vertical. Real Agent boots `schema-estate-agent` (Listing, Property, Viewing, Offer). SiteOffice boots `schema-construction`, which adds the building-contractor entities — `Job`, `LineItem`, `Valuation`, `Milestone`, `QuoteDocument`, `VariationNote`, `InboundInvoice`, `SubContractor`, `TimeLog`, `SubInvoice`, `WhatsAppGroup` — grounded in real builder job folders so a job's quote, valuations, variations, supplier invoices, and subcontractor timesheets all hang off one `Job` node. The default Maxy brand boots no vertical (base graph only).
1547
+
1544
1548
  ## Public-facing summaries for customer-readable subjects
1545
1549
 
1546
1550
  Some entities in your graph are knowable by people outside your team — companies you work with, projects you've delivered, the business itself. For those entities (Maxy treats `:Organization`, `:Concept`, `:Project`, and `:LocalBusiness` this way), Maxy maintains two summaries: a private one only you and your specialist agents see, and a customer-facing public one your public agents are allowed to surface.
@@ -1656,6 +1660,42 @@ This means you can always trace a finished piece of work back to the Task that a
1656
1660
 
1657
1661
  Cross-account access is refused. A Task that belongs to a different account on the same install is invisible to this loop — Maxy will not read it, name it, or surface it.
1658
1662
 
1663
+ ---
1664
+ # Slides
1665
+ Source: https://docs.getmaxy.com/slides.md
1666
+
1667
+ # Slides — user guide
1668
+
1669
+ The Slides plugin turns a description into a finished, self-contained HTML slide deck. The output is one `deck.html` file — inline CSS and JavaScript, no build step, no dependencies beyond Google Fonts. Open it in any browser, navigate with arrow keys or swipe, and press `P` to export to PDF.
1670
+
1671
+ ## When to use it
1672
+
1673
+ - You need a deck and want to describe what to say rather than format slides by hand.
1674
+ - You have an existing `deck.html` and want to add slides, restyle it, or get a critique.
1675
+ - You want a presentation that lives as plain text — version-controllable, diffable, and readable without a binary editor.
1676
+
1677
+ ## The commands
1678
+
1679
+ - **`/slides`** — generate a complete deck from a description. Auto-detects the best storytelling format (talk, pitch, sales, board, product launch) and writes a single `deck.html`. You can pass the brief inline (`/slides "a 20-minute talk on AI-assisted development"`) or run it bare and describe in the follow-up.
1680
+ - **`/slides-outline`** — draft just the structure (section-by-section) without producing HTML, so you can agree the narrative first.
1681
+ - **`/add-slide`** — insert one or more slides into an existing deck, matching its theme and components.
1682
+ - **`/slides-theme`** — restyle a deck. Three built-in themes: **Default** (warm, editorial), **Craft** (richer textures, art overlays), **Solid** (glass morphism, gradients). Any other argument is treated as a custom theme described in text or extracted from an attached image.
1683
+ - **`/slides-review`** — critique the current deck on storytelling, design, and voice consistency.
1684
+ - **`/slides-new-component`** — build a new reusable slide component aligned with the design system's tokens.
1685
+ - **`/slides-claus`** — generate a deck using the Solid theme with the Claus storytelling structure.
1686
+
1687
+ ## Storytelling formats
1688
+
1689
+ `/slides` routes to one of six narrative structures based on your brief: conference **talk** (TED-style), **Sequoia** investor pitch, McKinsey **SCR** (situation-complication-resolution), **product launch**, **board update**, and **sales**. Name the format in your brief to force one explicitly.
1690
+
1691
+ ## What you get
1692
+
1693
+ A 25-component design system (title slides, metric cards, quotes, comparison tables, timelines, and more), responsive layout, and three interchangeable themes — all inside one portable file.
1694
+
1695
+ ## Notes
1696
+
1697
+ This is a frozen, vendored copy of the open-source Slides™ framework (MIT). It ships installed and available on every account; enable it per session like any other plugin if it is not already active.
1698
+
1659
1699
  ---
1660
1700
  # Telegram
1661
1701
  Source: https://docs.getmaxy.com/telegram-guide.md
@@ -2162,7 +2202,7 @@ Voice mirror is on by default for every drafting skill. To opt out for one, set
2162
2202
 
2163
2203
  ## Status
2164
2204
 
2165
- Voice mirror is live end-to-end. Six corpus formats (text, email, social-post, article, note, marketing-copy), five tools (`voice-tag-content`, `voice-distil-profile`, `voice-retrieve-conditioning`, `voice-record-feedback`, `voice-ingest-session-text`), automatic PTY-turn ingestion via SessionEnd hook, and wiring into the three live drafting surfaces (email composition, property brochures, investor data room) are all live. When no voice profile exists on the account for a given format, every drafting skill degrades gracefully — the output matches what it was before voice mirror was installed.
2205
+ Voice mirror is live end-to-end. Six corpus formats (text, email, social-post, article, note, marketing-copy), five tools (`voice-tag-content`, `voice-distil-profile`, `voice-retrieve-conditioning`, `voice-record-feedback`, `voice-ingest-session-text`), on-demand session-turn capture, and wiring into the three live drafting surfaces (email composition, property brochures, investor data room) are all live. When no voice profile exists on the account for a given format, every drafting skill degrades gracefully — the output matches what it was before voice mirror was installed.
2166
2206
 
2167
2207
  ---
2168
2208
  # Admin UI Reference
@@ -2216,7 +2256,7 @@ either is a regression.
2216
2256
  | `/sessions` | Legacy admin-server conversation routes. No UI consumer remains after the ConversationsModal was retired; the surviving handlers are deletion candidates and not described here. | (legacy, no live caller) |
2217
2257
  | `/sidebar-sessions` | Sole data path for the sidebar Sessions list (Tasks 538 + 543). One JSONL on disk equals one row. The row's delete button (Task 543) is the only way a row disappears. Each row carries `sessionId`, `title`, `startedAt`, `live`, `isSubagent`, `pid: number \| null` (basename of the matched `sessions/<pid>.json`), and `projectDir` (the directory holding the JSONL — consumed by the delete route). The payload also carries top-level `accountId` so the pane renders the full UUID label whose first ~8 chars prefix-match the truncated Remote Control daemon entry in claude.ai/code. The legacy `rcUrl` field is gone (Task 543) — the row's external-link affordance now POSTs `/session-rc-spawn` to start a fresh local `claude --remote-control <name> --session-id <sid>` PTY on every click. | `GET /` |
2218
2258
  | `/session-delete` | POST `{ sessionId, projectDir }` (Task 543). Best-effort SIGTERM of the live PID (resolved from `sessions/<pid>.json` body match) then unlink the JSONL + `<sid>.meta.json` sidecar. Absent PID file is not an error. Containment: `projectDir` must live under `<CLAUDE_CONFIG_DIR>/projects/`. | `POST /` |
2219
- | `/session-rc-spawn` | POST `{ sessionId?, name? }` (Task 543). Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
2259
+ | `/session-rc-spawn` | POST `{ sessionId?, name? }` (Task 543). Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`, which waits up to **60 s** (Task 648, raised from 12 s) for the spawned PTY to bind and returns `{ spawnedPid, sessionId, bridgeSessionId, slug, outcome, reason }`. The Sidebar navigates the opened tab to `claude.ai/code/session_<id>` on `outcome=bound`; on `timeout` or `spawn-failed` it shows an error modal (reason + sessionId) and **never** opens a bare claude.ai/code tab. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
2220
2260
  | `/claude-sessions` | **Spawn surface only** (Task 500). `POST /` is the Sidebar new-session-with-prompt path, cookie-auth only (Task 626 removed the recorder loopback caller; LinkedIn ingest moved to `/rc-spawn`). The former UI-facing handlers (SSE row feed, list, resume, stop, rename, archive, delete, `/:id/meta`, `/:id/input`, `/:id/log`) were removed — the maxy dashboard no longer manages or displays sessions. | `POST /` |
2221
2261
 
2222
2262
  Task 500 — **admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot. The maxy admin UI keeps a single "New session" link (`https://claude.ai/code`, opens in a new tab) and no session list, viewer, controls, or model/mode picker. The daemon supervisor lives at [`platform/services/claude-session-manager/src/rc-daemon.ts`](../../../services/claude-session-manager/src/rc-daemon.ts). The `/session-defaults` route and `SpawnPreference` node were deleted with the picker. `/new-session-failure`, `/new-session-submit`, and `/claude-capabilities` are now orphaned (consumed only by the deleted NewSessionModal) — see [`.tasks/501`](../../../.tasks/) for their removal.
@@ -3289,6 +3329,20 @@ There is no onboarding state machine. At install time the installer writes three
3289
3329
 
3290
3330
  Grep for both in `~/.<brand>/logs/install-*.log`. Absence after a clean install is the failure signal.
3291
3331
 
3332
+ ## Plugin cache refresh on upgrade
3333
+
3334
+ Claude Code loads each platform plugin's skills, commands, and MCP from a per-install snapshot under `~/.<brand>/.claude/plugins/cache/<marketplace>/<plugin>/<version>/`, recorded as `installPath` in `installed_plugins.json` — not from the live tree. The local marketplaces (`maxy-platform`, `maxy-premium-*`) are *directory sources*: an upgrade overwrites their tree in place with no version bump. `claude plugin install` and `claude plugin update` both short-circuit on the unchanged version, so the snapshot would otherwise freeze at first-install time and newly-shipped skills would never register (Task 643).
3335
+
3336
+ The installer therefore **resyncs every directory-source plugin on every run**: `claude plugin uninstall` then `claude plugin install`, the only sequence that rebuilds the snapshot from the live tree. Remote marketplaces (the Anthropic ones, GitHub externals) keep version-pinned idempotence. Diagnostic lines on the Pi:
3337
+
3338
+ ```
3339
+ [plugin-install] recache <name>@<marketplace>
3340
+ [plugin-install] audit <name>@<marketplace> live-skills=<n> cache-skills=<m>
3341
+ [plugin-install] WARN cache-drift <name>@<marketplace> live-skills=<n> cache-skills=<m>
3342
+ ```
3343
+
3344
+ Grep `~/.<brand>/logs/install-*.log`. After an upgrade every directory-source plugin shows a `recache` line and an `audit` line whose `live-skills` and `cache-skills` counts are equal. A `WARN cache-drift` line — or unequal counts — means the snapshot did not fully rebuild and the running agent will see stale skills.
3345
+
3292
3346
  The first user-domain write the agent attempts (e.g. recording who the operator is) hits the graph-write gate's `Write blocked (no-admin-user)` or `Write blocked (no-local-business)` error. The agent then asks the persona question, persists the answer through the `business-profile` skill or `profile-update.personFields`, and proceeds. The error itself is the signal — grep `Write blocked` in `~/.<brand>/logs/server.log` to confirm.
3293
3347
 
3294
3348
  Cloudflare, WhatsApp, Telegram, and any other dormant capability surfaces on owner request via the `<dormant-plugins>` sentinel the manager injects per-spawn. Execution is the existing plugin skill (`cloudflare:cloudflare`, etc.) — no banner, no per-step flag.
@@ -3433,16 +3487,15 @@ Skills, agents, hooks, and commands directories at the plugin root are auto-disc
3433
3487
  3. Snapshot `claude plugin list` once.
3434
3488
  4. Build the desired plugin set = (every local marketplace's plugin entries) + (`brand.json#externalPlugins`).
3435
3489
  5. For each desired plugin not in the snapshot, run `claude plugin install <name>@<marketplace> --scope user`. Already-installed plugins log `idempotent=true`. Failures log `[plugin-install] ERROR <name>@<src> exit=<n> stderr=<short>` but do not abort the installer — one plugin failing must not block the rest.
3436
- 6. For each external plugin with a `configureSecret` field whose env var is set, pipe `/<name>:configure <secret>` into a one-shot `claude --print` invocation. Missing env vars log `[plugin-configure] SKIP <name> reason=no-secret-in-env env-var=<NAME>` and continue — pairing remains a per-operator manual step.
3490
+
3491
+ External channel plugins (telegram, discord) are installed but not configured at install time. The operator pairs a channel by running `/<name>:configure <token>` in a real session; no token is read from the install environment.
3437
3492
 
3438
3493
  **Brand declaration** — `brands/<brand>/brand.json#externalPlugins`:
3439
3494
 
3440
3495
  ```jsonc
3441
3496
  "externalPlugins": [
3442
- { "name": "telegram", "marketplace": "claude-plugins-official",
3443
- "configureSecret": "TELEGRAM_BOT_TOKEN", "channelPlugin": true },
3444
- { "name": "discord", "marketplace": "claude-plugins-official",
3445
- "configureSecret": "DISCORD_BOT_TOKEN", "channelPlugin": true },
3497
+ { "name": "telegram", "marketplace": "claude-plugins-official", "channelPlugin": true },
3498
+ { "name": "discord", "marketplace": "claude-plugins-official", "channelPlugin": true },
3446
3499
  { "name": "imessage", "marketplace": "claude-plugins-official", "channelPlugin": true }
3447
3500
  ]
3448
3501
  ```
@@ -55,7 +55,7 @@ Load the relevant reference when the task requires it:
55
55
  - **Triage & escalation** → `references/escalation.md` — urgency classification (RED/AMBER/GREEN), customer handoff protocol, voice IVR handling
56
56
  - **Scheduling & briefings** → `references/scheduling.md` — booking protocol, geographic clustering, travel time estimation, morning briefings, holiday mode, GPS integration
57
57
  - **Quotes** → `references/quoting.md` — photo-to-quote, formatting, follow-up timings
58
- - **Invoices & payment** → `references/invoicing.md` — HTML invoice creation, PDF generation via `document_to_pdf`, sending, payment chase protocol
58
+ - **Invoices & payment** → `references/invoicing.md` — HTML invoice creation, PDF generation via `browser-navigate` + `browser-pdf-save`, sending, payment chase protocol
59
59
  - **Customer records** → `references/crm.md` — contact record management, `contact_lookup`/`contact_update` usage, pipeline tracking, when to create/update records
60
60
  - **Document filing** → `references/document-management.md` — dual-scope filing system, naming conventions, folder structure for customer-facing vs internal documents
61
61
  - **Task & session management** → `references/task-management.md` — task lifecycle, session naming, cross-session progress tracking
@@ -72,7 +72,7 @@ Required structure:
72
72
  1. Verify the customer's contact record exists (`contact_lookup`)
73
73
  2. Create the appropriate directory if it doesn't exist (the `memory_write` tool creates parent directories automatically)
74
74
  3. Write the document (HTML for invoices/quotes that need PDF conversion, markdown for simpler documents)
75
- 4. For HTML documents: convert to PDF using `document_to_pdf`
75
+ 4. For HTML documents: `browser-navigate` to the file (`file://` + absolute path), then `browser-pdf-save` to an absolute `.pdf` path alongside the HTML. The renderer honours the document's `@media print`/`@page` CSS and prints backgrounds; confirm the reported byte count is non-zero before treating the PDF as done.
76
76
  5. Update the contact record status via `contact_update`
77
77
 
78
78
  ## Sending Documents
@@ -18,8 +18,8 @@
18
18
  ```
19
19
  Use the template below. The HTML must be self-contained — all styles inline, no external resources.
20
20
 
21
- 4. **Convert to PDF:**
22
- Call `document_to_pdf` with the memory path. The PDF is saved alongside the HTML with a `.pdf` extension.
21
+ 4. **Render to PDF:**
22
+ `browser-navigate` to the HTML file (`file://` + the absolute memory path), then call `browser-pdf-save` with an absolute output path alongside the HTML same name, `.pdf` extension. `browser-pdf-save` renders the current page through Chromium's print pipeline: it honours the template's `@media print`/`@page` CSS and prints backgrounds, so the print styles in the template below are load-bearing. The tool reports `Saved PDF to <path> (<bytes>)`; confirm a non-zero byte count before presenting the file.
23
23
 
24
24
  5. **Present the PDF to the business owner immediately.**
25
25
  Do not just announce the file exists — deliver it. Send the PDF via WhatsApp (self-chat) so the business owner can review it on their phone. Include a summary:
@@ -45,7 +45,7 @@ Payment terms: [from memory, default "on completion"]
45
45
  Any questions, just reply to this message!
46
46
  ```
47
47
 
48
- For formal PDF quotes, use the same workflow as invoicing — write HTML, convert with `document_to_pdf`, send as attachment. See `references/invoicing.md` for the PDF workflow.
48
+ For formal PDF quotes, use the same workflow as invoicing — write HTML, `browser-navigate` to it, render with `browser-pdf-save`, then send as attachment. See `references/invoicing.md` for the PDF workflow.
49
49
 
50
50
  ## Quote Follow-Up
51
51
 
@@ -24,6 +24,7 @@ Load these when users ask about Maxy features or need guidance:
24
24
  - **Settings** → `references/settings.md` — output style, effort level, account preferences
25
25
  - **Access Control** → `references/access-control.md` — who can chat with your public agent, invitations, authentication
26
26
  - **Projects** → `references/projects-guide.md` — creating projects, tracking health, phase transitions, completing
27
+ - **Slides** → `references/slides.md` — generating, theming, and reviewing HTML slide decks with `/slides`
27
28
  - **Troubleshooting** → `references/troubleshooting.md` — common issues and how to resolve them
28
29
 
29
30
  ## Platform Reference
@@ -46,7 +46,7 @@ either is a regression.
46
46
  | `/sessions` | Legacy admin-server conversation routes. No UI consumer remains after the ConversationsModal was retired; the surviving handlers are deletion candidates and not described here. | (legacy, no live caller) |
47
47
  | `/sidebar-sessions` | Sole data path for the sidebar Sessions list (Tasks 538 + 543). One JSONL on disk equals one row. The row's delete button (Task 543) is the only way a row disappears. Each row carries `sessionId`, `title`, `startedAt`, `live`, `isSubagent`, `pid: number \| null` (basename of the matched `sessions/<pid>.json`), and `projectDir` (the directory holding the JSONL — consumed by the delete route). The payload also carries top-level `accountId` so the pane renders the full UUID label whose first ~8 chars prefix-match the truncated Remote Control daemon entry in claude.ai/code. The legacy `rcUrl` field is gone (Task 543) — the row's external-link affordance now POSTs `/session-rc-spawn` to start a fresh local `claude --remote-control <name> --session-id <sid>` PTY on every click. | `GET /` |
48
48
  | `/session-delete` | POST `{ sessionId, projectDir }` (Task 543). Best-effort SIGTERM of the live PID (resolved from `sessions/<pid>.json` body match) then unlink the JSONL + `<sid>.meta.json` sidecar. Absent PID file is not an error. Containment: `projectDir` must live under `<CLAUDE_CONFIG_DIR>/projects/`. | `POST /` |
49
- | `/session-rc-spawn` | POST `{ sessionId?, name? }` (Task 543). Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
49
+ | `/session-rc-spawn` | POST `{ sessionId?, name? }` (Task 543). Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`, which waits up to **60 s** (Task 648, raised from 12 s) for the spawned PTY to bind and returns `{ spawnedPid, sessionId, bridgeSessionId, slug, outcome, reason }`. The Sidebar navigates the opened tab to `claude.ai/code/session_<id>` on `outcome=bound`; on `timeout` or `spawn-failed` it shows an error modal (reason + sessionId) and **never** opens a bare claude.ai/code tab. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
50
50
  | `/claude-sessions` | **Spawn surface only** (Task 500). `POST /` is the Sidebar new-session-with-prompt path, cookie-auth only (Task 626 removed the recorder loopback caller; LinkedIn ingest moved to `/rc-spawn`). The former UI-facing handlers (SSE row feed, list, resume, stop, rename, archive, delete, `/:id/meta`, `/:id/input`, `/:id/log`) were removed — the maxy dashboard no longer manages or displays sessions. | `POST /` |
51
51
 
52
52
  Task 500 — **admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot. The maxy admin UI keeps a single "New session" link (`https://claude.ai/code`, opens in a new tab) and no session list, viewer, controls, or model/mode picker. The daemon supervisor lives at [`platform/services/claude-session-manager/src/rc-daemon.ts`](../../../services/claude-session-manager/src/rc-daemon.ts). The `/session-defaults` route and `SpawnPreference` node were deleted with the picker. `/new-session-failure`, `/new-session-submit`, and `/claude-capabilities` are now orphaned (consumed only by the deleted NewSessionModal) — see [`.tasks/501`](../../../.tasks/) for their removal.
@@ -68,6 +68,20 @@ There is no onboarding state machine. At install time the installer writes three
68
68
 
69
69
  Grep for both in `~/.<brand>/logs/install-*.log`. Absence after a clean install is the failure signal.
70
70
 
71
+ ## Plugin cache refresh on upgrade
72
+
73
+ Claude Code loads each platform plugin's skills, commands, and MCP from a per-install snapshot under `~/.<brand>/.claude/plugins/cache/<marketplace>/<plugin>/<version>/`, recorded as `installPath` in `installed_plugins.json` — not from the live tree. The local marketplaces (`maxy-platform`, `maxy-premium-*`) are *directory sources*: an upgrade overwrites their tree in place with no version bump. `claude plugin install` and `claude plugin update` both short-circuit on the unchanged version, so the snapshot would otherwise freeze at first-install time and newly-shipped skills would never register (Task 643).
74
+
75
+ The installer therefore **resyncs every directory-source plugin on every run**: `claude plugin uninstall` then `claude plugin install`, the only sequence that rebuilds the snapshot from the live tree. Remote marketplaces (the Anthropic ones, GitHub externals) keep version-pinned idempotence. Diagnostic lines on the Pi:
76
+
77
+ ```
78
+ [plugin-install] recache <name>@<marketplace>
79
+ [plugin-install] audit <name>@<marketplace> live-skills=<n> cache-skills=<m>
80
+ [plugin-install] WARN cache-drift <name>@<marketplace> live-skills=<n> cache-skills=<m>
81
+ ```
82
+
83
+ Grep `~/.<brand>/logs/install-*.log`. After an upgrade every directory-source plugin shows a `recache` line and an `audit` line whose `live-skills` and `cache-skills` counts are equal. A `WARN cache-drift` line — or unequal counts — means the snapshot did not fully rebuild and the running agent will see stale skills.
84
+
71
85
  The first user-domain write the agent attempts (e.g. recording who the operator is) hits the graph-write gate's `Write blocked (no-admin-user)` or `Write blocked (no-local-business)` error. The agent then asks the persona question, persists the answer through the `business-profile` skill or `profile-update.personFields`, and proceeds. The error itself is the signal — grep `Write blocked` in `~/.<brand>/logs/server.log` to confirm.
72
86
 
73
87
  Cloudflare, WhatsApp, Telegram, and any other dormant capability surfaces on owner request via the `<dormant-plugins>` sentinel the manager injects per-spawn. Execution is the existing plugin skill (`cloudflare:cloudflare`, etc.) — no banner, no per-step flag.
@@ -212,16 +226,15 @@ Skills, agents, hooks, and commands directories at the plugin root are auto-disc
212
226
  3. Snapshot `claude plugin list` once.
213
227
  4. Build the desired plugin set = (every local marketplace's plugin entries) + (`brand.json#externalPlugins`).
214
228
  5. For each desired plugin not in the snapshot, run `claude plugin install <name>@<marketplace> --scope user`. Already-installed plugins log `idempotent=true`. Failures log `[plugin-install] ERROR <name>@<src> exit=<n> stderr=<short>` but do not abort the installer — one plugin failing must not block the rest.
215
- 6. For each external plugin with a `configureSecret` field whose env var is set, pipe `/<name>:configure <secret>` into a one-shot `claude --print` invocation. Missing env vars log `[plugin-configure] SKIP <name> reason=no-secret-in-env env-var=<NAME>` and continue — pairing remains a per-operator manual step.
229
+
230
+ External channel plugins (telegram, discord) are installed but not configured at install time. The operator pairs a channel by running `/<name>:configure <token>` in a real session; no token is read from the install environment.
216
231
 
217
232
  **Brand declaration** — `brands/<brand>/brand.json#externalPlugins`:
218
233
 
219
234
  ```jsonc
220
235
  "externalPlugins": [
221
- { "name": "telegram", "marketplace": "claude-plugins-official",
222
- "configureSecret": "TELEGRAM_BOT_TOKEN", "channelPlugin": true },
223
- { "name": "discord", "marketplace": "claude-plugins-official",
224
- "configureSecret": "DISCORD_BOT_TOKEN", "channelPlugin": true },
236
+ { "name": "telegram", "marketplace": "claude-plugins-official", "channelPlugin": true },
237
+ { "name": "discord", "marketplace": "claude-plugins-official", "channelPlugin": true },
225
238
  { "name": "imessage", "marketplace": "claude-plugins-official", "channelPlugin": true }
226
239
  ]
227
240
  ```
@@ -142,6 +142,10 @@ Every node also carries a provenance stamp — which agent wrote it, in which se
142
142
 
143
143
  **Two write surfaces, one substrate.** General agents write through schema-aware helpers — {{productName}} can record a new contact, a new commitment, a new preference without ever typing a database query, and the helper enforces the connection-and-provenance rule above structurally. The graph-steward role (the specialist {{productName}} dispatches when you ask for graph hygiene — "merge those two duplicate contacts," "wire those four tasks to the meeting," "rename the legacy label across the graph") additionally has a raw Cypher write tool for the multi-step operations the helpers cannot express. The steward role internalises the same connection-and-provenance discipline in its prompt; a post-write audit emits a warning on every breach so the same rules apply to both surfaces. Both paths feed the same hourly orphan trend and the same forensic provenance fields — read-side, you cannot tell the two apart, and that is the point.
144
144
 
145
+ ## Vertical schemas
146
+
147
+ On top of the base graph, each brand boots one optional **vertical** — an extra set of entity types tailored to a trade. The vertical is named by `brand.json#vertical` and defined in a `schema-<name>.md` reference; the memory plugin loads it at startup and validates every write against base + the active vertical. Real Agent boots `schema-estate-agent` (Listing, Property, Viewing, Offer). SiteOffice boots `schema-construction`, which adds the building-contractor entities — `Job`, `LineItem`, `Valuation`, `Milestone`, `QuoteDocument`, `VariationNote`, `InboundInvoice`, `SubContractor`, `TimeLog`, `SubInvoice`, `WhatsAppGroup` — grounded in real builder job folders so a job's quote, valuations, variations, supplier invoices, and subcontractor timesheets all hang off one `Job` node. The default Maxy brand boots no vertical (base graph only).
148
+
145
149
  ## Public-facing summaries for customer-readable subjects
146
150
 
147
151
  Some entities in your graph are knowable by people outside your team — companies you work with, projects you've delivered, the business itself. For those entities ({{productName}} treats `:Organization`, `:Concept`, `:Project`, and `:LocalBusiness` this way), {{productName}} maintains two summaries: a private one only you and your specialist agents see, and a customer-facing public one your public agents are allowed to surface.
@@ -62,7 +62,7 @@ Roles are installed during setup and listed when {{productName}} introduces itse
62
62
 
63
63
  {{productName}} maintains a graph database (Neo4j) of everything you've told it. People, conversations, preferences, and context are stored as connected nodes. When you ask {{productName}} something, it searches this graph to retrieve relevant context before responding.
64
64
 
65
- **The recording loop.** {{productName}} dispatches `database-operator` inline at its own discretion when a write must complete before the assistant response ends. The full graph-completeness sweep runs on demand: when you type `/insight`, the `insight.sh` UserPromptSubmit hook injects a four-pass instruction and {{productName}} walks the session for any node, edge, or commitment that was discussed but not written in-flight, dispatches one `database-operator` Task per candidate write, then carries on in the same session.
65
+ **The recording loop.** {{productName}} dispatches `database-operator` inline at its own discretion when a write must complete before the assistant response ends. The full graph-completeness sweep runs on demand: when you invoke the `/insight` admin skill, it runs a four-pass instruction and {{productName}} walks the session for any node, edge, or commitment that was discussed but not written in-flight, dispatches one `database-operator` Task per candidate write, then carries on in the same session.
66
66
 
67
67
  The memory graph is stored on your Pi. It never leaves your network.
68
68
 
@@ -27,7 +27,7 @@ These are part of {{productName}}'s foundation and cannot be disabled:
27
27
  | `workflows` | Persistent named workflows — reusable instruction sets |
28
28
  | `contacts` | CRM contact management — create, lookup, update, list |
29
29
  | `prompt-optimiser` | Prompt optimiser — two modes. Chat-app mode turns a rough draft or task description into a single finished, copy-pasteable prompt tuned for Opus 4.7 adaptive thinking (claude.ai, Mac, iOS). In-session mode is applied automatically: a standing `UserPromptSubmit` directive hook (`admin/hooks/prompt-optimiser-directive.sh`) injects context every turn telling the admin agent to restate each non-trivial prompt through this skill and act on the restatement, skipped for one-word confirmations, slash-commands, and direct continuations. Compliance is behavioural — the hook steers the agent, it cannot force the skill call. |
30
- | `url-get` | Faithful page retrieval — fetches a server-rendered page, writes a verbatim markdown copy to an account-scoped reference file (no model in the path, so no copyright refusal), and returns a transformative summary plus the file path. Use instead of WebFetch when a faithful copy is needed (e.g. ingesting your own published writing). |
30
+ | `url-get` | Faithful page retrieval — fetches a server-rendered page, writes a verbatim markdown copy to an account-scoped reference file (no model in the path, so no copyright refusal), and returns the cleaned page text (capped) plus the file path. No summary and no subprocess: a caller that wants a summary invokes url-get from a delegated subagent. Use instead of WebFetch when a faithful copy is needed (e.g. ingesting your own published writing). |
31
31
 
32
32
  ### {{productName}} Plugins (user-selectable)
33
33
 
@@ -0,0 +1,31 @@
1
+ # Slides — user guide
2
+
3
+ The Slides plugin turns a description into a finished, self-contained HTML slide deck. The output is one `deck.html` file — inline CSS and JavaScript, no build step, no dependencies beyond Google Fonts. Open it in any browser, navigate with arrow keys or swipe, and press `P` to export to PDF.
4
+
5
+ ## When to use it
6
+
7
+ - You need a deck and want to describe what to say rather than format slides by hand.
8
+ - You have an existing `deck.html` and want to add slides, restyle it, or get a critique.
9
+ - You want a presentation that lives as plain text — version-controllable, diffable, and readable without a binary editor.
10
+
11
+ ## The commands
12
+
13
+ - **`/slides`** — generate a complete deck from a description. Auto-detects the best storytelling format (talk, pitch, sales, board, product launch) and writes a single `deck.html`. You can pass the brief inline (`/slides "a 20-minute talk on AI-assisted development"`) or run it bare and describe in the follow-up.
14
+ - **`/slides-outline`** — draft just the structure (section-by-section) without producing HTML, so you can agree the narrative first.
15
+ - **`/add-slide`** — insert one or more slides into an existing deck, matching its theme and components.
16
+ - **`/slides-theme`** — restyle a deck. Three built-in themes: **Default** (warm, editorial), **Craft** (richer textures, art overlays), **Solid** (glass morphism, gradients). Any other argument is treated as a custom theme described in text or extracted from an attached image.
17
+ - **`/slides-review`** — critique the current deck on storytelling, design, and voice consistency.
18
+ - **`/slides-new-component`** — build a new reusable slide component aligned with the design system's tokens.
19
+ - **`/slides-claus`** — generate a deck using the Solid theme with the Claus storytelling structure.
20
+
21
+ ## Storytelling formats
22
+
23
+ `/slides` routes to one of six narrative structures based on your brief: conference **talk** (TED-style), **Sequoia** investor pitch, McKinsey **SCR** (situation-complication-resolution), **product launch**, **board update**, and **sales**. Name the format in your brief to force one explicitly.
24
+
25
+ ## What you get
26
+
27
+ A 25-component design system (title slides, metric cards, quotes, comparison tables, timelines, and more), responsive layout, and three interchangeable themes — all inside one portable file.
28
+
29
+ ## Notes
30
+
31
+ This is a frozen, vendored copy of the open-source Slides™ framework (MIT). It ships installed and available on every account; enable it per session like any other plugin if it is not already active.
@@ -61,4 +61,4 @@ Voice mirror is on by default for every drafting skill. To opt out for one, set
61
61
 
62
62
  ## Status
63
63
 
64
- Voice mirror is live end-to-end. Six corpus formats (text, email, social-post, article, note, marketing-copy), five tools (`voice-tag-content`, `voice-distil-profile`, `voice-retrieve-conditioning`, `voice-record-feedback`, `voice-ingest-session-text`), automatic PTY-turn ingestion via SessionEnd hook, and wiring into the three live drafting surfaces (email composition, property brochures, investor data room) are all live. When no voice profile exists on the account for a given format, every drafting skill degrades gracefully — the output matches what it was before voice mirror was installed.
64
+ Voice mirror is live end-to-end. Six corpus formats (text, email, social-post, article, note, marketing-copy), five tools (`voice-tag-content`, `voice-distil-profile`, `voice-retrieve-conditioning`, `voice-record-feedback`, `voice-ingest-session-text`), on-demand session-turn capture, and wiring into the three live drafting surfaces (email composition, property brochures, investor data room) are all live. When no voice profile exists on the account for a given format, every drafting skill degrades gracefully — the output matches what it was before voice mirror was installed.
@@ -208,7 +208,7 @@ Graph hygiene is **agent-directed, case by case** — no autonomous rule engine,
208
208
 
209
209
  ## Brain-capture diagnostic — `memory-brain-capture-recent`
210
210
 
211
- Read-only window into the extractive graph writes produced under this account. Returns recent `:MENTIONS` edges (`:Message-[:MENTIONS]->Entity`) and `:Idea` nodes interleaved by `observedAt`. Default window is 24 hours; pass `windowHours` (max 720) and `limit` (max 200) to scan a longer arc. Use this when the operator asks "what has the brain captured today?", "show me recent mentions of X", or "what ideas did I leave on the table this week?". Writes are produced by `database-operator` per-write briefs admin dispatches — either inline mid-turn, or as part of the on-demand `/insight` graph-completeness sweep (`platform/plugins/admin/hooks/insight.sh`).
211
+ Read-only window into the extractive graph writes produced under this account. Returns recent `:MENTIONS` edges (`:Message-[:MENTIONS]->Entity`) and `:Idea` nodes interleaved by `observedAt`. Default window is 24 hours; pass `windowHours` (max 720) and `limit` (max 200) to scan a longer arc. Use this when the operator asks "what has the brain captured today?", "show me recent mentions of X", or "what ideas did I leave on the table this week?". Writes are produced by `database-operator` per-write briefs admin dispatches — either inline mid-turn, or as part of the on-demand `/insight` graph-completeness sweep (`platform/plugins/admin/skills/insight/SKILL.md`).
212
212
 
213
213
  ## Conversational Memory
214
214
 
@@ -2432,7 +2432,7 @@ server.tool("image-fetch", [
2432
2432
  // (admin Task-spawns it during an on-demand `/insight` pass); NOT in
2433
2433
  // `ADMIN_CORE_TOOLS`. Backfill is via the CLI under `scripts/backfill-typed-edges.ts`,
2434
2434
  // bypassing this tool.
2435
- server.tool("memory-typed-edge-pass", "Run the typed-edge auto-extraction pass over prose-bearing nodes this account wrote since sinceIso. Reads Message/Page/Meeting/Email/Idea/Note/Post/Report nodes, batches them, asks Haiku for typed-edge proposals against the closed allowlist (ATTENDED, WORKS_AT, INVESTED_IN, FOUNDED, ADVISES, MENTIONS, AUTHORED, ATTACHED_TO, REFERENCES), validates each proposal inline, and MERGEs accepted edges with createdBy provenance. Returns the counters (nodes, proposed, accepted, rejected, failed, ms) for the caller to hand back to admin's session-retrospective-mark-complete.", {
2435
+ server.tool("memory-typed-edge-pass", "Run the typed-edge auto-extraction pass over prose-bearing nodes this account wrote since sinceIso. Reads Message/Page/Meeting/Email/Idea/Note/Post/Report nodes, batches them, asks Haiku for typed-edge proposals against the closed allowlist (ATTENDED, WORKS_AT, INVESTED_IN, FOUNDED, ADVISES, MENTIONS, AUTHORED, ATTACHED_TO, REFERENCES), validates each proposal inline, and MERGEs accepted edges with createdBy provenance. Returns the counters (nodes, proposed, accepted, rejected, failed, ms) for the caller to hand back to admin for its insight-pass summary.", {
2436
2436
  sinceIso: z.string().describe("ISO timestamp lower bound. Prose nodes with updatedAt >= sinceIso are processed."),
2437
2437
  sessionId: z.string().optional().describe("Conversation id stamped onto the createdBy provenance of MERGEd edges. Defaults to SESSION_ID env if absent."),
2438
2438
  }, async (args) => {