@rubytech/create-maxy-code 0.1.280 → 0.1.282

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 (234) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +31 -43
  3. package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/mcp-spawn-tee/dist/index.js +112 -85
  5. package/payload/platform/lib/mcp-spawn-tee/dist/index.js.map +1 -1
  6. package/payload/platform/lib/mcp-spawn-tee/src/__tests__/spawn-tee.test.ts +111 -0
  7. package/payload/platform/lib/mcp-spawn-tee/src/index.ts +113 -84
  8. package/payload/platform/lib/mcp-spawn-tee/tsconfig.json +2 -1
  9. package/payload/platform/plugins/admin/PLUGIN.md +2 -1
  10. package/payload/platform/plugins/admin/hooks/__tests__/prompt-optimiser-compliance.test.sh +154 -0
  11. package/payload/platform/plugins/admin/hooks/__tests__/prompt-optimiser-directive.test.sh +24 -0
  12. package/payload/platform/plugins/admin/hooks/prompt-optimiser-compliance.sh +174 -0
  13. package/payload/platform/plugins/admin/hooks/prompt-optimiser-directive.sh +22 -2
  14. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +4 -2
  15. package/payload/platform/plugins/business-assistant/skills/e-sign/SKILL.md +378 -56
  16. package/payload/platform/plugins/cloudflare/references/api.md +35 -1
  17. package/payload/platform/plugins/cloudflare/references/d1-data-capture.md +2 -0
  18. package/payload/platform/plugins/docs/references/cloudflare.md +1 -1
  19. package/payload/platform/plugins/docs/references/platform.md +2 -0
  20. package/payload/platform/plugins/email/PLUGIN.md +1 -1
  21. package/payload/platform/plugins/email/mcp/dist/__tests__/attachment-resolve.test.d.ts +2 -0
  22. package/payload/platform/plugins/email/mcp/dist/__tests__/attachment-resolve.test.d.ts.map +1 -0
  23. package/payload/platform/plugins/email/mcp/dist/__tests__/attachment-resolve.test.js +92 -0
  24. package/payload/platform/plugins/email/mcp/dist/__tests__/attachment-resolve.test.js.map +1 -0
  25. package/payload/platform/plugins/email/mcp/dist/__tests__/email-setup.test.d.ts +2 -0
  26. package/payload/platform/plugins/email/mcp/dist/__tests__/email-setup.test.d.ts.map +1 -0
  27. package/payload/platform/plugins/email/mcp/dist/__tests__/email-setup.test.js +55 -0
  28. package/payload/platform/plugins/email/mcp/dist/__tests__/email-setup.test.js.map +1 -0
  29. package/payload/platform/plugins/email/mcp/dist/__tests__/providers.test.d.ts +2 -0
  30. package/payload/platform/plugins/email/mcp/dist/__tests__/providers.test.d.ts.map +1 -0
  31. package/payload/platform/plugins/email/mcp/dist/__tests__/providers.test.js +110 -0
  32. package/payload/platform/plugins/email/mcp/dist/__tests__/providers.test.js.map +1 -0
  33. package/payload/platform/plugins/email/mcp/dist/__tests__/recipient-filter.test.d.ts +2 -0
  34. package/payload/platform/plugins/email/mcp/dist/__tests__/recipient-filter.test.d.ts.map +1 -0
  35. package/payload/platform/plugins/email/mcp/dist/__tests__/recipient-filter.test.js +57 -0
  36. package/payload/platform/plugins/email/mcp/dist/__tests__/recipient-filter.test.js.map +1 -0
  37. package/payload/platform/plugins/email/mcp/dist/index.js +8 -1
  38. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
  39. package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.d.ts +12 -0
  40. package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.d.ts.map +1 -1
  41. package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.js +44 -5
  42. package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.js.map +1 -1
  43. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +13 -8
  44. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
  45. package/payload/platform/plugins/email/mcp/dist/lib/imap.js +26 -15
  46. package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
  47. package/payload/platform/plugins/email/mcp/dist/lib/ingest-batch.d.ts +8 -0
  48. package/payload/platform/plugins/email/mcp/dist/lib/ingest-batch.d.ts.map +1 -1
  49. package/payload/platform/plugins/email/mcp/dist/lib/ingest-batch.js.map +1 -1
  50. package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts +16 -5
  51. package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts.map +1 -1
  52. package/payload/platform/plugins/email/mcp/dist/lib/providers.js +120 -13
  53. package/payload/platform/plugins/email/mcp/dist/lib/providers.js.map +1 -1
  54. package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.js +3 -3
  55. package/payload/platform/plugins/email/mcp/dist/tools/email-fetch.js.map +1 -1
  56. package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.d.ts.map +1 -1
  57. package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.js +6 -2
  58. package/payload/platform/plugins/email/mcp/dist/tools/email-ingest.js.map +1 -1
  59. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts.map +1 -1
  60. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js +5 -3
  61. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js.map +1 -1
  62. package/payload/platform/plugins/email/mcp/dist/tools/email-send.d.ts.map +1 -1
  63. package/payload/platform/plugins/email/mcp/dist/tools/email-send.js +6 -3
  64. package/payload/platform/plugins/email/mcp/dist/tools/email-send.js.map +1 -1
  65. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts.map +1 -1
  66. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js +22 -4
  67. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js.map +1 -1
  68. package/payload/platform/plugins/email/mcp/package.json +4 -2
  69. package/payload/platform/plugins/email/mcp/vitest.config.ts +9 -0
  70. package/payload/platform/plugins/email/references/email-reference.md +22 -5
  71. package/payload/platform/plugins/email/skills/email-composition/SKILL.md +1 -1
  72. package/payload/platform/plugins/graph/PLUGIN.md +2 -0
  73. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/kd-classify-account-dir.test.d.ts +2 -0
  74. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/kd-classify-account-dir.test.d.ts.map +1 -0
  75. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/kd-classify-account-dir.test.js +31 -0
  76. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/kd-classify-account-dir.test.js.map +1 -0
  77. package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.d.ts +5 -0
  78. package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.d.ts.map +1 -1
  79. package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.js +21 -2
  80. package/payload/platform/plugins/memory/mcp/dist/tools/kd-classify.js.map +1 -1
  81. package/payload/platform/plugins/prompt-optimiser/skills/prompt-optimiser/SKILL.md +1 -0
  82. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js +5 -5
  83. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js.map +1 -1
  84. package/payload/platform/plugins/whatsapp/.claude-plugin/plugin.json +1 -1
  85. package/payload/platform/plugins/whatsapp/PLUGIN.md +7 -11
  86. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +10 -56
  87. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  88. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +26 -2
  89. package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +9 -14
  90. package/payload/platform/scripts/setup-account.sh +7 -0
  91. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  92. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +0 -2
  93. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  94. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  95. package/payload/platform/services/claude-session-manager/dist/http-server.js +63 -3
  96. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  97. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  98. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +7 -1
  99. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  100. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +6 -0
  101. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  102. package/payload/platform/services/whatsapp-channel/dist/notification.js +14 -0
  103. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  104. package/payload/platform/services/whatsapp-channel/dist/server.js +5 -3
  105. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  106. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  107. package/payload/server/public/assets/AdminShell-FO766lOW.js +1 -0
  108. package/payload/server/public/assets/{Checkbox-2reCESkb.js → Checkbox-syHoU9nY.js} +1 -1
  109. package/payload/server/public/assets/{admin-BpnsTEa3.js → admin-0_VxffD5.js} +1 -1
  110. package/payload/server/public/assets/{arc-BgelqC_3.js → arc-BW1WhwmV.js} +1 -1
  111. package/payload/server/public/assets/architecture-YZFGNWBL-xHbVjatf.js +1 -0
  112. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BabnAZJm.js → architectureDiagram-Q4EWVU46-DsionCio.js} +1 -1
  113. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BJzZqNsy.js → blockDiagram-DXYQGD6D-NOG5yVZk.js} +1 -1
  114. package/payload/server/public/assets/{browser-fgBRZ5gK.js → browser-Cxjkhtsk.js} +1 -1
  115. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-By-xuh9F.js → c4Diagram-AHTNJAMY-DwFV1k9I.js} +1 -1
  116. package/payload/server/public/assets/channel-D8Go_zJk.js +1 -0
  117. package/payload/server/public/assets/{chunk-2KRD3SAO-Gj2dSpBl.js → chunk-2KRD3SAO-CKn-bEkI.js} +1 -1
  118. package/payload/server/public/assets/{chunk-336JU56O-2PXVPCUA.js → chunk-336JU56O-iJ4ISPCi.js} +2 -2
  119. package/payload/server/public/assets/chunk-426QAEUC-sWe0Iexz.js +1 -0
  120. package/payload/server/public/assets/{chunk-4BX2VUAB-9XIBlnC2.js → chunk-4BX2VUAB-B2mSmC97.js} +1 -1
  121. package/payload/server/public/assets/{chunk-4TB4RGXK-Cr3mXPnI.js → chunk-4TB4RGXK-kKNYi2_i.js} +1 -1
  122. package/payload/server/public/assets/{chunk-55IACEB6-Ccg46J3A.js → chunk-55IACEB6-JLT9m7Hd.js} +1 -1
  123. package/payload/server/public/assets/{chunk-5FUZZQ4R-Cz9MvPKc.js → chunk-5FUZZQ4R-Car3r0he.js} +1 -1
  124. package/payload/server/public/assets/{chunk-5PVQY5BW-BleOdlgO.js → chunk-5PVQY5BW-DR9EfLvj.js} +1 -1
  125. package/payload/server/public/assets/{chunk-67CJDMHE-CyCYCQWy.js → chunk-67CJDMHE-CCdP3Pdx.js} +1 -1
  126. package/payload/server/public/assets/{chunk-7N4EOEYR-KpT3uHzH.js → chunk-7N4EOEYR-bXgVzdM9.js} +1 -1
  127. package/payload/server/public/assets/{chunk-AA7GKIK3-BfOzbuxq.js → chunk-AA7GKIK3-CYeDvY8B.js} +1 -1
  128. package/payload/server/public/assets/{chunk-BSJP7CBP-Bq0M3wlv.js → chunk-BSJP7CBP-U0Fi-Ers.js} +1 -1
  129. package/payload/server/public/assets/{chunk-CIAEETIT-CR-2dNaL.js → chunk-CIAEETIT-C8QrV6Gg.js} +1 -1
  130. package/payload/server/public/assets/{chunk-EDXVE4YY-egUGMTOS.js → chunk-EDXVE4YY-DLUWVRZV.js} +1 -1
  131. package/payload/server/public/assets/{chunk-ENJZ2VHE-CQohBEFw.js → chunk-ENJZ2VHE-B4bNJo6C.js} +1 -1
  132. package/payload/server/public/assets/{chunk-FMBD7UC4-DIxBUbLP.js → chunk-FMBD7UC4-DxAQS3UB.js} +1 -1
  133. package/payload/server/public/assets/{chunk-FOC6F5B3-C2694Zoq.js → chunk-FOC6F5B3-CyIK3zeY.js} +1 -1
  134. package/payload/server/public/assets/{chunk-ICPOFSXX-DpXZKHyn.js → chunk-ICPOFSXX-Qzl8Ki0l.js} +2 -2
  135. package/payload/server/public/assets/{chunk-K5T4RW27-CUicG0Rp.js → chunk-K5T4RW27-7GcDzjyJ.js} +1 -1
  136. package/payload/server/public/assets/{chunk-KGLVRYIC-B5mPJhOr.js → chunk-KGLVRYIC-B7pAr9hf.js} +1 -1
  137. package/payload/server/public/assets/{chunk-LIHQZDEY-q81QhuMs.js → chunk-LIHQZDEY-DEoU2jrz.js} +1 -1
  138. package/payload/server/public/assets/{chunk-ORNJ4GCN-DgurdFZs.js → chunk-ORNJ4GCN-BwMFuN24.js} +1 -1
  139. package/payload/server/public/assets/{chunk-OYMX7WX6-CxqMRu2d.js → chunk-OYMX7WX6-BenBO6O_.js} +1 -1
  140. package/payload/server/public/assets/chunk-QZHKN3VN-CHE_iZO7.js +1 -0
  141. package/payload/server/public/assets/{chunk-U2HBQHQK-BSLctJC9.js → chunk-U2HBQHQK-DewM8R0D.js} +1 -1
  142. package/payload/server/public/assets/{chunk-X2U36JSP--0AUeeFl.js → chunk-X2U36JSP-C22Q6Ea4.js} +1 -1
  143. package/payload/server/public/assets/{chunk-XPW4576I-D-hf9Bcn.js → chunk-XPW4576I-BA0a8Ygs.js} +1 -1
  144. package/payload/server/public/assets/{chunk-YZCP3GAM-PvOhSwI9.js → chunk-YZCP3GAM-DfUUNTnA.js} +1 -1
  145. package/payload/server/public/assets/{chunk-ZZ45TVLE-1zPUlNWz.js → chunk-ZZ45TVLE-CUT6zma2.js} +1 -1
  146. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BLb1mzrT.js +1 -0
  147. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Ctj5qYTS.js +1 -0
  148. package/payload/server/public/assets/clone-DGZ2vydA.js +1 -0
  149. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-Cvo-gkBd.js → cose-bilkent-S5V4N54A-Df_JmB8E.js} +1 -1
  150. package/payload/server/public/assets/{dagre-CMHsNfjP.js → dagre-CYXRIdv0.js} +1 -1
  151. package/payload/server/public/assets/{dagre-KV5264BT-CM1DSx4E.js → dagre-KV5264BT-D4EGb60h.js} +1 -1
  152. package/payload/server/public/assets/{data-Cuynp6Y6.js → data-BOgwOWnw.js} +1 -1
  153. package/payload/server/public/assets/{diagram-5BDNPKRD-VDHiHwEI.js → diagram-5BDNPKRD-BzieCEfT.js} +1 -1
  154. package/payload/server/public/assets/{diagram-G4DWMVQ6-OKdufoeW.js → diagram-G4DWMVQ6-DDbO71XD.js} +1 -1
  155. package/payload/server/public/assets/{diagram-MMDJMWI5-Yg6QdCA1.js → diagram-MMDJMWI5-DqQ_UXDA.js} +1 -1
  156. package/payload/server/public/assets/{diagram-TYMM5635-CpEMZQDu.js → diagram-TYMM5635-CFyxA1aZ.js} +1 -1
  157. package/payload/server/public/assets/{dist-811BIK0R.js → dist-BmvZ8OaX.js} +1 -1
  158. package/payload/server/public/assets/{erDiagram-SMLLAGMA-Dw5gAkFM.js → erDiagram-SMLLAGMA-BMaEBbOK.js} +1 -1
  159. package/payload/server/public/assets/{flatten-BsWEYbBB.js → flatten-Bo6YRmWl.js} +1 -1
  160. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-Cy_R1XHz.js → flowDiagram-DWJPFMVM-De5ChZQP.js} +1 -1
  161. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BYARP_eH.js → ganttDiagram-T4ZO3ILL-CXEMPVaK.js} +1 -1
  162. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CmHdoS27.js +1 -0
  163. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BGOe0unY.js → gitGraphDiagram-UUTBAWPF-OZedr_6y.js} +1 -1
  164. package/payload/server/public/assets/{graph-Ddg24bjy.js → graph-BqD2GjQd.js} +2 -2
  165. package/payload/server/public/assets/{graph-labels-eOrWYy0R.js → graph-labels-DSDTSBfM.js} +1 -1
  166. package/payload/server/public/assets/{graphlib-DaefxCga.js → graphlib-CN4nhD2U.js} +1 -1
  167. package/payload/server/public/assets/info-OMHHGYJF-DTA9msO-.js +1 -0
  168. package/payload/server/public/assets/infoDiagram-42DDH7IO-CSqg4nRL.js +2 -0
  169. package/payload/server/public/assets/{isEmpty-BWl67LAZ.js → isEmpty-D6Kr-M1M.js} +1 -1
  170. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-YrGuzpiI.js → ishikawaDiagram-UXIWVN3A-ChlzrZyx.js} +1 -1
  171. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-EIykOcqg.js → journeyDiagram-VCZTEJTY-DsrK55ZO.js} +1 -1
  172. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BR0TC6Je.js → kanban-definition-6JOO6SKY-DYF-_Rym.js} +1 -1
  173. package/payload/server/public/assets/{line-DPGcT5IM.js → line-3zmwI8XK.js} +1 -1
  174. package/payload/server/public/assets/{linear-CPN03uSh.js → linear-COm19-p7.js} +1 -1
  175. package/payload/server/public/assets/{mermaid-parser.core-D7Iu4c9M.js → mermaid-parser.core-BrcX8-cl.js} +2 -2
  176. package/payload/server/public/assets/{mermaid.core-krXRpXn9.js → mermaid.core-CBdz3b1N.js} +3 -3
  177. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-HwiCtPzN.js → mindmap-definition-QFDTVHPH-BqCqlYZb.js} +1 -1
  178. package/payload/server/public/assets/{ordinal-krseTxxN.js → ordinal-BDi6f4xk.js} +1 -1
  179. package/payload/server/public/assets/packet-4T2RLAQJ-6GjqIKgu.js +1 -0
  180. package/payload/server/public/assets/pie-ZZUOXDRM-T72DJ5JR.js +1 -0
  181. package/payload/server/public/assets/{pieDiagram-DEJITSTG-xodxyWLe.js → pieDiagram-DEJITSTG-D5LiILuM.js} +1 -1
  182. package/payload/server/public/assets/{public-xVaPcg6i.js → public-udi_Z7la.js} +3 -3
  183. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DuYYY4ZZ.js → quadrantDiagram-34T5L4WZ-C3iuI5l_.js} +1 -1
  184. package/payload/server/public/assets/radar-PYXPWWZC-x-6xW1dE.js +1 -0
  185. package/payload/server/public/assets/{reduce-tk-xY6Fv.js → reduce-CGi9ik8i.js} +1 -1
  186. package/payload/server/public/assets/{requirementDiagram-MS252O5E-D0ta3kru.js → requirementDiagram-MS252O5E-CTPOw5qQ.js} +1 -1
  187. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-KdHdlzvT.js → sankeyDiagram-XADWPNL6-D_5aVlYp.js} +1 -1
  188. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DoSFUTQZ.js → sequenceDiagram-FGHM5R23-D7h5vocM.js} +1 -1
  189. package/payload/server/public/assets/{src-Cpl1JzME.js → src-DLEIsjER.js} +1 -1
  190. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BLW0KiSA.js → stateDiagram-FHFEXIEX-DyZjuwPj.js} +1 -1
  191. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BiW9pGXy.js +1 -0
  192. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-8QAzhYz1.js → timeline-definition-GMOUNBTQ-BqpVYJz_.js} +1 -1
  193. package/payload/server/public/assets/treeView-SZITEDCU-5-6wEryJ.js +1 -0
  194. package/payload/server/public/assets/treemap-W4RFUUIX-DF48Cc86.js +1 -0
  195. package/payload/server/public/assets/{useSelectionMode-DlJsX-_X.js → useSelectionMode-BPzPjKP_.js} +1 -1
  196. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BKvfScOi.js → vennDiagram-DHZGUBPP-Czflml0e.js} +1 -1
  197. package/payload/server/public/assets/wardley-RL74JXVD-duKIa6Hq.js +1 -0
  198. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DaMfDpJ3.js → wardleyDiagram-NUSXRM2D-Cqz3pSTK.js} +1 -1
  199. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-BIkNQlLa.js → xychartDiagram-5P7HB3ND-CS5dEuUO.js} +1 -1
  200. package/payload/server/public/browser.html +4 -4
  201. package/payload/server/public/data.html +5 -5
  202. package/payload/server/public/graph.html +6 -6
  203. package/payload/server/public/index.html +5 -5
  204. package/payload/server/public/public.html +4 -4
  205. package/payload/server/server.js +74 -275
  206. package/payload/server/public/assets/AdminShell-C6_5h1cC.js +0 -1
  207. package/payload/server/public/assets/architecture-YZFGNWBL-YM-TtgPY.js +0 -1
  208. package/payload/server/public/assets/channel-BRPH0atd.js +0 -1
  209. package/payload/server/public/assets/chunk-426QAEUC-QhauxjvK.js +0 -1
  210. package/payload/server/public/assets/chunk-QZHKN3VN-BDAQvtxz.js +0 -1
  211. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BJv89PB6.js +0 -1
  212. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DNUszH5M.js +0 -1
  213. package/payload/server/public/assets/clone-CREg9jLM.js +0 -1
  214. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CtOPqykB.js +0 -1
  215. package/payload/server/public/assets/info-OMHHGYJF-Jba5enA8.js +0 -1
  216. package/payload/server/public/assets/infoDiagram-42DDH7IO-Df9BlkPA.js +0 -2
  217. package/payload/server/public/assets/packet-4T2RLAQJ-D_eWzeAP.js +0 -1
  218. package/payload/server/public/assets/pie-ZZUOXDRM-BDiy1Ob2.js +0 -1
  219. package/payload/server/public/assets/radar-PYXPWWZC-C5mlfmtg.js +0 -1
  220. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-C5zlCV4X.js +0 -1
  221. package/payload/server/public/assets/treeView-SZITEDCU-CM-9m-cS.js +0 -1
  222. package/payload/server/public/assets/treemap-W4RFUUIX-DDHPB-Xh.js +0 -1
  223. package/payload/server/public/assets/wardley-RL74JXVD-CUb3Br4q.js +0 -1
  224. package/payload/server/public/assets/whatsapp-BE79pNh8.js +0 -1
  225. package/payload/server/public/whatsapp.html +0 -18
  226. /package/payload/server/public/assets/{_baseFor-BHtDrjIo.js → _baseFor-Cam2PbSt.js} +0 -0
  227. /package/payload/server/public/assets/{array-DetWRiSa.js → array-DYRGGQae.js} +0 -0
  228. /package/payload/server/public/assets/{chunk-CWOGyPgy.js → chunk-CnGqDkHZ.js} +0 -0
  229. /package/payload/server/public/assets/{cytoscape.esm-C9yNhe1u.js → cytoscape.esm-nWsJMTNI.js} +0 -0
  230. /package/payload/server/public/assets/{defaultLocale-_WRwicXn.js → defaultLocale-Du1XY3Dp.js} +0 -0
  231. /package/payload/server/public/assets/{init-sTEcj9YX.js → init-B5BXBRcm.js} +0 -0
  232. /package/payload/server/public/assets/{katex-s61Rgv6l.js → katex-HOUACuRw.js} +0 -0
  233. /package/payload/server/public/assets/{path-B0Ik7Tu9.js → path-CNO468J-.js} +0 -0
  234. /package/payload/server/public/assets/{rough.esm-DKRO8IF-.js → rough.esm-DRO6hWPh.js} +0 -0
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env bash
2
+ # Stop hook (Task 719): after the admin agent finishes a turn, flag the turn when
3
+ # the per-turn routing directive fired, the turn was non-trivial, and NO route was
4
+ # taken — i.e. the agent answered from memory instead of dispatching a specialist,
5
+ # loading a skill, or calling the owning plugin's tool. This is the standing
6
+ # compliance signal the directive hook (prompt-optimiser-directive.sh) cannot
7
+ # self-emit, because "was a route taken" is only knowable after the turn ends.
8
+ #
9
+ # Classification (all derived from the just-finished turn in the transcript):
10
+ # directive fired = the marker "PROMPT-OPTIMISER DIRECTIVE" appears in the turn
11
+ # slice (robust to CC-version differences in how the
12
+ # UserPromptSubmit additionalContext is recorded: a
13
+ # type:"attachment"/hook_success on 2.1.x, a
14
+ # type:"hook_additional_context" on the Pi).
15
+ # route taken = the turn contains a tool_use named Agent, Skill, ToolSearch,
16
+ # or matching mcp__*.
17
+ # trivial = the prompt is a slash-command or a one-word confirmation.
18
+ # "Direct continuation" is NOT detectable from the transcript and is a stated
19
+ # known limitation, not guessed.
20
+ #
21
+ # Emits, only on (directive fired AND not trivial AND no route):
22
+ # <ts> [prompt-optimiser-compliance] directive-fired no-route-taken session=<id8> prompt="<clip>"
23
+ # to $LOG_DIR/prompt-optimiser-directive.log (same log as the fired breadcrumb,
24
+ # so the two interleave into one greppable timeline) and to stderr.
25
+ #
26
+ # Input (stdin, Stop contract): { "transcript_path": "...", "session_id": "...", ... }
27
+ # Fail-open everywhere: no python3, no transcript_path, unreadable transcript, or
28
+ # any parse error -> exit 0 with no output. A Stop hook must never block a turn.
29
+
30
+ set -uo pipefail
31
+
32
+ INPUT=$(cat 2>/dev/null || true)
33
+ command -v python3 >/dev/null 2>&1 || exit 0
34
+
35
+ RESULT=$(printf '%s' "$INPUT" | python3 -c '
36
+ import json, sys, os, datetime
37
+
38
+ def fail_open():
39
+ sys.exit(0)
40
+
41
+ try:
42
+ inp = json.load(sys.stdin)
43
+ except Exception:
44
+ fail_open()
45
+
46
+ tp = inp.get("transcript_path")
47
+ session = inp.get("session_id") or "?"
48
+ if not isinstance(tp, str) or not tp or not os.path.exists(tp):
49
+ fail_open()
50
+
51
+ rows = []
52
+ try:
53
+ with open(tp, "r", errors="replace") as f:
54
+ for line in f:
55
+ line = line.strip()
56
+ if not line:
57
+ continue
58
+ try:
59
+ rows.append(json.loads(line))
60
+ except Exception:
61
+ continue
62
+ except OSError:
63
+ fail_open()
64
+
65
+ # Flatten a message.content into plain text; mark whether it is purely tool_result
66
+ # (a tool output row, not a user prompt).
67
+ def flatten(content):
68
+ if isinstance(content, str):
69
+ return content, False
70
+ if isinstance(content, list):
71
+ only_tool_result = bool(content)
72
+ parts = []
73
+ for b in content:
74
+ if not isinstance(b, dict):
75
+ only_tool_result = False
76
+ if isinstance(b, str):
77
+ parts.append(b)
78
+ continue
79
+ t = b.get("type")
80
+ if t != "tool_result":
81
+ only_tool_result = False
82
+ if t == "text" and isinstance(b.get("text"), str):
83
+ parts.append(b["text"])
84
+ return " ".join(parts), only_tool_result
85
+ return "", False
86
+
87
+ # A row is synthetic (not a genuine prompt) when Claude Code stamps it isMeta /
88
+ # isSidechain / etc. Claude Code injects such user rows AFTER the real prompt
89
+ # within the same turn — skill bodies, system-reminders, additionalContext
90
+ # echoes — so a naive "last text-bearing user row" would land on the injection,
91
+ # truncate the slice, and read the injected body as the prompt.
92
+ def is_synthetic(r):
93
+ return any(r.get(k) for k in ("isMeta", "isSidechain", "isCompactSummary", "isVisibleInTranscriptOnly"))
94
+
95
+ # Boundary: the last user row that carries a genuine prompt. A genuine prompt is
96
+ # either a non-synthetic user turn (typed claude.ai) OR a synthetic turn whose
97
+ # text is channel-wrapped — WhatsApp/native channels stamp the inbound prompt
98
+ # isMeta:true and wrap it in <channel ...>, and that inbound IS the prompt. Every
99
+ # other synthetic row (skill body, system-reminder) is skipped. The turn slice is
100
+ # everything from the boundary to EOF.
101
+ boundary = None
102
+ prompt_text = ""
103
+ for i, r in enumerate(rows):
104
+ if not isinstance(r, dict) or r.get("type") != "user":
105
+ continue
106
+ msg = r.get("message") if isinstance(r.get("message"), dict) else {}
107
+ text, only_tool_result = flatten(msg.get("content"))
108
+ if only_tool_result:
109
+ continue
110
+ stripped = text.strip()
111
+ if not stripped:
112
+ continue
113
+ if is_synthetic(r) and not stripped.startswith("<channel"):
114
+ continue
115
+ boundary = i
116
+ prompt_text = stripped
117
+
118
+ if boundary is None:
119
+ fail_open()
120
+
121
+ slice_rows = rows[boundary:]
122
+
123
+ # Strip a leading <channel ...>...</channel> wrapper to reach the inner prompt for
124
+ # the trivial check (WhatsApp/native-channel prompts arrive wrapped).
125
+ inner = prompt_text
126
+ if inner.startswith("<channel"):
127
+ end = inner.find(">")
128
+ close = inner.rfind("</channel>")
129
+ if end != -1 and close != -1 and close > end:
130
+ inner = inner[end + 1:close].strip()
131
+
132
+ # Trivial-turn filter.
133
+ is_slash = inner.startswith("/")
134
+ tokens = inner.split()
135
+ is_one_word = len(tokens) <= 1
136
+
137
+ # Directive fired = marker present anywhere in the slice (any record shape).
138
+ marker = "PROMPT-OPTIMISER DIRECTIVE"
139
+ directive_fired = any(marker in json.dumps(r, ensure_ascii=False) for r in slice_rows)
140
+
141
+ # Route taken = an assistant tool_use with a routing tool name.
142
+ ROUTE_TOOLS = ("Agent", "Skill", "ToolSearch")
143
+ def is_route(name):
144
+ return name in ROUTE_TOOLS or (isinstance(name, str) and name.startswith("mcp__"))
145
+
146
+ route_taken = False
147
+ for r in slice_rows:
148
+ if not isinstance(r, dict) or r.get("type") != "assistant":
149
+ continue
150
+ msg = r.get("message") if isinstance(r.get("message"), dict) else {}
151
+ content = msg.get("content")
152
+ if isinstance(content, list):
153
+ for b in content:
154
+ if isinstance(b, dict) and b.get("type") == "tool_use" and is_route(b.get("name")):
155
+ route_taken = True
156
+ break
157
+ if route_taken:
158
+ break
159
+
160
+ if directive_fired and not is_slash and not is_one_word and not route_taken:
161
+ clip = prompt_text.replace("\n", " ")[:80]
162
+ ts = datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
163
+ sid8 = session[:8] if isinstance(session, str) else "?"
164
+ print("%s [prompt-optimiser-compliance] directive-fired no-route-taken session=%s prompt=\"%s\"" % (ts, sid8, clip))
165
+ ' 2>/dev/null) || exit 0
166
+
167
+ [ -n "$RESULT" ] || exit 0
168
+
169
+ # Durable + stderr. Fail-open on an unwritable/absent LOG_DIR.
170
+ if [ -n "${LOG_DIR:-}" ] && [ -d "$LOG_DIR" ]; then
171
+ printf '%s\n' "$RESULT" >> "$LOG_DIR/prompt-optimiser-directive.log" 2>/dev/null || true
172
+ fi
173
+ printf '%s\n' "$RESULT" >&2
174
+ exit 0
@@ -32,8 +32,9 @@
32
32
 
33
33
  set -uo pipefail
34
34
 
35
- # Drain stdin; the directive does not depend on the prompt text.
36
- cat >/dev/null 2>&1 || true
35
+ # Capture stdin: the directive does not depend on the prompt text, but the
36
+ # UserPromptSubmit payload carries session_id, used for the durable breadcrumb.
37
+ HOOK_INPUT=$(cat 2>/dev/null || true)
37
38
 
38
39
  # Fail-open if the JSON encoder is unavailable.
39
40
  command -v python3 >/dev/null 2>&1 || exit 0
@@ -65,6 +66,8 @@ PROMPT-OPTIMISER DIRECTIVE (standing)
65
66
  Before acting on this turn's request, run the prompt-optimiser skill on the user's raw prompt in its in-session restatement mode, then treat the restated task as the authoritative statement of what was asked and proceed from it. Set aside your own first reading of the raw wording; the restatement governs. The raw prompt stays in context for reference only.
66
67
  Skip the restatement when the prompt is a one-word confirmation, a slash-command invocation, or a direct continuation of the immediately preceding turn; restatement adds nothing in those cases.
67
68
 
69
+ CAPABILITY QUESTIONS ARE OWNED WORK. A question about what this platform can do or how to do it — "how do I set up X", "do you have instructions for X", any configuration or how-to about a platform feature — is answered from the owning specialist or the owning plugin's tool or reference, never from your training memory. Your prior on the platform's own features is stale relative to what shipped, so memory is the wrong source here even when it feels confident. Route the question (dispatch the owning specialist, or skill-load / call the owning plugin's tool or reference) and source the answer from what that route returns. Freestyle tier 3 is not a route for these: "there is no instruction surface for this" is itself something you establish by routing and finding nothing, not by recalling.
70
+
68
71
  ROUTING LADDER (apply to the restated task, in this order):
69
72
  1) Delegate to a specialist. If an installed specialist owns this deliverable's type, dispatch it with the Agent tool and the matching subagent_type. Ownership covers origination, not just the final render: you may not author the substance here and hand the specialist only the formatting, the voice pass, or the PDF step. The brief states the outcome (what is true when the specialist returns) plus the binding constraints (account, file scope, deadline, acceptance check). It never names lines, anchors, or literal text to insert; deriving those is the specialist's job. Wrong shape: naming the file, the line range, and the exact text to drop in. Right shape: "on the realagent-code site, the footer respects iOS safe-area-inset-bottom on mobile; the site's CSS is the only file in scope." Installed specialists:
70
73
  DIRECTIVE_EOF
@@ -93,5 +96,22 @@ print(json.dumps({
93
96
 
94
97
  [ -n "$OUT" ] || exit 0
95
98
  printf '%s\n' "$OUT"
99
+
100
+ # Durable breadcrumb: capture the per-turn injection in $LOG_DIR so "directive
101
+ # fired on this turn" is greppable for compliance review, not only on stderr
102
+ # (Task 719). Fail-open: no LOG_DIR, missing dir, or unwritable -> skip the file;
103
+ # the stderr line below still emits. session_id is parsed from the captured
104
+ # stdin; absent -> "?".
105
+ if [ -n "${LOG_DIR:-}" ] && [ -d "$LOG_DIR" ]; then
106
+ SID=$(printf '%s' "$HOOK_INPUT" | python3 -c 'import json,sys
107
+ try:
108
+ print(json.load(sys.stdin).get("session_id","") or "")
109
+ except Exception:
110
+ print("")' 2>/dev/null)
111
+ TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
112
+ printf '%s [prompt-optimiser-directive] injected len=%s session=%s\n' \
113
+ "$TS" "${#DIRECTIVE}" "${SID:-?}" >> "$LOG_DIR/prompt-optimiser-directive.log" 2>/dev/null || true
114
+ fi
115
+
96
116
  echo "[prompt-optimiser-directive] injected len=${#DIRECTIVE}" >&2
97
117
  exit 0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Maxy 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:2002a63079af7332d583e86fd68fe798a5736452310f3412e20b99320194b383
4
+ content-hash: sha256:add28451435be577d674216c86cd03078f5b25d03ce6def9fc61962971c8e9ed
5
5
  brand: maxy-code
6
6
  product-name: Maxy
7
7
  ---
@@ -145,6 +145,8 @@ Everything Maxy can do is provided by a plugin. Each plugin is a self-contained
145
145
 
146
146
  **How tools and roles reach the session.** Each `claude` PTY spawn registers every plugin's MCP server and every bundled subagent directory before the operator's first turn — a per-spawn `mcp-config.json` written by the session manager and passed as `--mcp-config` on the PTY argv, plus one `--add-dir` per agents directory. Admin sessions see every plugin and every role; public sessions see only plugins with at least one public-allowlisted tool. The manager refuses to start when a plugin's `PLUGIN.md` declares tools without a matching `mcp:` block (forensic signal: `boot-failed reason=mcp-allowlist-without-server …`). See `internals.md` "Spawn-time MCP and subagent registration" for the full mechanism and `internals.md` "Tool Eagerness" for the separate ToolSearch-vs-eager registration concern.
147
147
 
148
+ **MCP helper death observability (Task 706).** `claude` spawns each plugin MCP helper as its own child, so the manager cannot see a helper die. Every spawn-capable plugin therefore wraps its `mcp:` command with `lib/mcp-spawn-tee`, a parent-side node wrapper that is the helper's real parent and observes its true exit code, signal, and lifetime (including SIGKILL / transport crashes). The wrapper tees the helper's stderr to a wrapper-only per-session file `~/.{brand}/logs/mcp-<server>-<sessionId>.log` — never mixed with the admin-server enumeration copy — and emits lifecycle lines keyed `session=<id8> server=<name>`: `[mcp-helper] op=spawn … pid= entry=`, `[mcp-helper] op=boot … head=<first stderr bytes>`, and `[mcp-helper] op=exit … code= signal= lifetimeMs= stderr-tail=` on every exit (including a clean one). Lines are written synchronously to the per-session file and best-effort mirrored to `server.log` via the loopback log-ingest route. Diagnose a dead helper by `grep '\[mcp-helper\]' ~/.{brand}/logs/server.log` filtered by `session=<id8>`, then read the per-session file for its last output. Full contract and diagnostic path in [`.docs/mcp-helper-observability.md`](../../../.docs/mcp-helper-observability.md). The alive-but-wedged case (no process exit) is the deferred `[mcp-helper-census]` reconciler (Task 710).
149
+
148
150
  **Where premium bundle subs live.** Bundle subs (`loop`, `property-data`, `brochures`, etc. inside `real-agent`) live exclusively at `premium-plugins/<bundle>/plugins/<sub>/` and are registered via the resolver's bundle-descent walk. Standalone premiums (no `BUNDLE.md`, e.g. `writer-craft`, `teaching`, `venture-studio`) live exclusively at `premium-plugins/<name>/` and are registered via the resolver's dual-root scan (`platform/plugins/` and `premium-plugins/` are both `pluginsRoots`). Neither shape is flat-copied into `platform/plugins/<name>/`. A divergent flat copy of a bundle sub is treated as an operator override: the resolver refuses to boot with `boot-failed reason=mcp-plugin-duplicate <plugin> declared by more than one plugins root: <pathA> (sha=…) vs <pathB> (sha=…)` so the operator can `sha256sum` both paths and remove the stale one. Byte-identical bundle-sub flat copies left over from installer versions that flat-copied bundle subs are reaped on the first post-upgrade boot (`[premium-auto-deliver] reaped sub=<name> reason=duplicate-of-premium-tree`). Standalone flat copies (leaked by the pre-fix `autoDeliverPremiumPlugins` standalone branch) are reaped unconditionally — there is no documented override path for standalones at `platform/plugins/<name>/` — and the reaper logs `[premium-auto-deliver] reaped standalone=<name> matches-source=<true|false>` so divergent reaps leave a forensic trail.
149
151
 
150
152
  Plugins are installed and managed through conversation. You can add marketplace plugins (like Stripe) or use Maxy's built-in ones (contacts, memory, Telegram).
@@ -1033,7 +1035,7 @@ Each installation has its own Cloudflare account. The **tunnel** sign-in is OAut
1033
1035
  | **Domain scope** (which zones the operator can route) | The operator picks the zone in the dashboard during OAuth or names it in chat; the agent can also enumerate zones via the API with a minted read-scoped token. |
1034
1036
  | **Local tunnel state** | `~/{configDir}/cloudflared/` — `cert.pem`, `<UUID>.json`, `config.yml`, `alias-domains.json`. |
1035
1037
 
1036
- Tunnel auth on the operator-owned path (Mode A) is the OAuth cert (`cert.pem`); API operations use a narrow token the agent mints from your master token. To switch Cloudflare accounts, the agent runs the reset flow from `plugins/cloudflare/references/reset-guide.md` (deletes the cert and every tunnel on the current account), then the manual-setup flow again — `cloudflared tunnel login` picks a fresh account when you sign in.
1038
+ Tunnel auth on the operator-owned path (Mode A) is the OAuth cert (`cert.pem`); API operations use a narrow token the agent mints from your master token. That master may be account-scoped (`cfat_…`) or user-scoped (`cfut_…`); the agent detects the type and routes API endpoints accordingly (the account vs user token endpoints) — see `plugins/cloudflare/references/api.md`. To switch Cloudflare accounts, the agent runs the reset flow from `plugins/cloudflare/references/reset-guide.md` (deletes the cert and every tunnel on the current account), then the manual-setup flow again — `cloudflared tunnel login` picks a fresh account when you sign in.
1037
1039
 
1038
1040
  ## Setup flow
1039
1041