@rubytech/create-maxy-code 0.1.499 → 0.1.501

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 (221) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/graph-style/dist/index.d.ts +9 -0
  3. package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/graph-style/dist/index.js +152 -6
  5. package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
  6. package/payload/platform/lib/graph-style/src/__tests__/caption-coverage.test.ts +69 -0
  7. package/payload/platform/lib/graph-style/src/__tests__/coverage-source.ts +73 -0
  8. package/payload/platform/lib/graph-style/src/__tests__/icons.test.ts +20 -3
  9. package/payload/platform/lib/graph-style/src/index.ts +166 -5
  10. package/payload/platform/plugins/admin/PLUGIN.md +2 -1
  11. package/payload/platform/plugins/admin/hooks/__tests__/admin-authoring-observer.test.sh +135 -0
  12. package/payload/platform/plugins/admin/hooks/__tests__/prompt-optimiser-directive.test.sh +11 -2
  13. package/payload/platform/plugins/admin/hooks/prompt-optimiser-directive.sh +6 -3
  14. package/payload/platform/plugins/admin/mcp/dist/index.js +52 -107
  15. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  16. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.d.ts +8 -4
  17. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.d.ts.map +1 -1
  18. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +67 -50
  19. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
  20. package/payload/platform/plugins/admin/mcp/dist/store-skill-core.d.ts +33 -0
  21. package/payload/platform/plugins/admin/mcp/dist/store-skill-core.d.ts.map +1 -0
  22. package/payload/platform/plugins/admin/mcp/dist/store-skill-core.js +122 -0
  23. package/payload/platform/plugins/admin/mcp/dist/store-skill-core.js.map +1 -0
  24. package/payload/platform/plugins/admin/skills/agent-builder/SKILL.md +15 -0
  25. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +59 -3
  26. package/payload/platform/plugins/admin/skills/summarise/SKILL.md +37 -0
  27. package/payload/platform/plugins/contacts/.claude-plugin/plugin.json +1 -1
  28. package/payload/platform/plugins/contacts/PLUGIN.md +1 -1
  29. package/payload/platform/plugins/contacts/mcp/dist/index.js +3 -12
  30. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -1
  31. package/payload/platform/plugins/contacts/mcp/dist/tools/__tests__/contact-lookup.test.js +105 -2
  32. package/payload/platform/plugins/contacts/mcp/dist/tools/__tests__/contact-lookup.test.js.map +1 -1
  33. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +11 -1
  34. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -1
  35. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +56 -4
  36. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -1
  37. package/payload/platform/plugins/docs/references/admin-ui.md +50 -0
  38. package/payload/platform/plugins/docs/references/contacts-guide.md +2 -0
  39. package/payload/platform/plugins/docs/references/outlook-guide.md +4 -0
  40. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -2
  41. package/payload/platform/plugins/docs/references/summarise-skill.md +7 -0
  42. package/payload/platform/plugins/email/skills/email-composition/SKILL.md +9 -1
  43. package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +6 -0
  44. package/payload/platform/plugins/prompt-optimiser/skills/prompt-optimiser/SKILL.md +1 -1
  45. package/payload/platform/plugins/prompt-optimiser/skills/prompt-optimiser/__tests__/restatement-ladder.test.sh +2 -1
  46. package/payload/platform/services/claude-session-manager/dist/index.js +26 -1
  47. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  48. package/payload/platform/services/claude-session-manager/dist/skill-registration-drift.d.ts +15 -0
  49. package/payload/platform/services/claude-session-manager/dist/skill-registration-drift.d.ts.map +1 -1
  50. package/payload/platform/services/claude-session-manager/dist/skill-registration-drift.js +61 -0
  51. package/payload/platform/services/claude-session-manager/dist/skill-registration-drift.js.map +1 -1
  52. package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
  53. package/payload/server/public/activity.html +6 -6
  54. package/payload/server/public/assets/{AdminLoginScreens-Ce5aBBWF.js → AdminLoginScreens-C3LZOPIY.js} +1 -1
  55. package/payload/server/public/assets/AdminShell-BlbUNAPc.js +2 -0
  56. package/payload/server/public/assets/{activity-CKUYOLd2.js → activity-CVdVSw5V.js} +1 -1
  57. package/payload/server/public/assets/admin-If1QLlS3.js +1 -0
  58. package/payload/server/public/assets/{arc-CpWWSum8.js → arc-CvlzUHOf.js} +1 -1
  59. package/payload/server/public/assets/architecture-YZFGNWBL-BQc779DH.js +1 -0
  60. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-D2EzaII0.js → architectureDiagram-Q4EWVU46-I1Hs0RJA.js} +1 -1
  61. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-8kDpaNSZ.js → blockDiagram-DXYQGD6D-Df5jTGtl.js} +1 -1
  62. package/payload/server/public/assets/{bot-DESMpxSQ.js → bot-8b26IlQY.js} +1 -1
  63. package/payload/server/public/assets/{browser-CpLq_DIo.js → browser-F40DXfKA.js} +1 -1
  64. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CbwmZpK3.js → c4Diagram-AHTNJAMY-B6WY5IDv.js} +1 -1
  65. package/payload/server/public/assets/{calendar-ClOwyuz-.js → calendar-DZiHiBwV.js} +1 -1
  66. package/payload/server/public/assets/channel-AqnC3SHu.js +1 -0
  67. package/payload/server/public/assets/chat-uD28FVCS.js +1 -0
  68. package/payload/server/public/assets/chevron-left-lBxD57tD.js +1 -0
  69. package/payload/server/public/assets/chevron-right-C-lDig9Y.js +1 -0
  70. package/payload/server/public/assets/{chunk-2KRD3SAO-PFheZ9mw.js → chunk-2KRD3SAO-BsIIFDkc.js} +1 -1
  71. package/payload/server/public/assets/{chunk-336JU56O-CCFOp5VK.js → chunk-336JU56O-j9z1VtyC.js} +2 -2
  72. package/payload/server/public/assets/chunk-426QAEUC-CO02gU5d.js +1 -0
  73. package/payload/server/public/assets/{chunk-4BX2VUAB-Hz4JWOf2.js → chunk-4BX2VUAB-C9i7prxq.js} +1 -1
  74. package/payload/server/public/assets/{chunk-4TB4RGXK-4xeV0s85.js → chunk-4TB4RGXK-DH0QVGcv.js} +1 -1
  75. package/payload/server/public/assets/{chunk-55IACEB6-4QKgBpoh.js → chunk-55IACEB6-Dnd_YCPA.js} +1 -1
  76. package/payload/server/public/assets/{chunk-5FUZZQ4R-ms3K6Z5z.js → chunk-5FUZZQ4R-D5sSz3yN.js} +1 -1
  77. package/payload/server/public/assets/{chunk-5PVQY5BW-CIC4GIGi.js → chunk-5PVQY5BW-CJrwWjAT.js} +1 -1
  78. package/payload/server/public/assets/{chunk-67CJDMHE-B-XrWVmV.js → chunk-67CJDMHE-SjP6_hUw.js} +1 -1
  79. package/payload/server/public/assets/{chunk-7N4EOEYR-C7ECOUYQ.js → chunk-7N4EOEYR-fAuhVJD0.js} +1 -1
  80. package/payload/server/public/assets/{chunk-AA7GKIK3-DOZ6Fxwk.js → chunk-AA7GKIK3-DZxa7KVg.js} +1 -1
  81. package/payload/server/public/assets/{chunk-BSJP7CBP-4cJ_b0c6.js → chunk-BSJP7CBP-DjeG3eQ-.js} +1 -1
  82. package/payload/server/public/assets/{chunk-CIAEETIT--mhZipWM.js → chunk-CIAEETIT-RYQULNJm.js} +1 -1
  83. package/payload/server/public/assets/{chunk-EDXVE4YY-jZpVwob_.js → chunk-EDXVE4YY-Cahapnon.js} +1 -1
  84. package/payload/server/public/assets/{chunk-ENJZ2VHE-Nn-p-xIA.js → chunk-ENJZ2VHE-1146X1L4.js} +1 -1
  85. package/payload/server/public/assets/{chunk-FMBD7UC4-DyNpcKOS.js → chunk-FMBD7UC4-BCFumtcP.js} +1 -1
  86. package/payload/server/public/assets/{chunk-FOC6F5B3-C0P8q1uz.js → chunk-FOC6F5B3-CkrtX8Zt.js} +1 -1
  87. package/payload/server/public/assets/{chunk-ICPOFSXX-CdXQ5SfI.js → chunk-ICPOFSXX-Ba1y3DaW.js} +2 -2
  88. package/payload/server/public/assets/{chunk-K5T4RW27-BVZJKKsT.js → chunk-K5T4RW27-CF-PI3uQ.js} +1 -1
  89. package/payload/server/public/assets/{chunk-KGLVRYIC-QlVWTe0V.js → chunk-KGLVRYIC-SFFC6ZC-.js} +1 -1
  90. package/payload/server/public/assets/{chunk-LIHQZDEY-CpGVZutP.js → chunk-LIHQZDEY-DbOLEP4R.js} +1 -1
  91. package/payload/server/public/assets/{chunk-ORNJ4GCN-WVcS6fUC.js → chunk-ORNJ4GCN-VB963bkN.js} +1 -1
  92. package/payload/server/public/assets/{chunk-OYMX7WX6-B7hiSTed.js → chunk-OYMX7WX6-DWYY1pQa.js} +1 -1
  93. package/payload/server/public/assets/chunk-QZHKN3VN-BiFMbK8t.js +1 -0
  94. package/payload/server/public/assets/{chunk-U2HBQHQK-DJPnZxGy.js → chunk-U2HBQHQK-DAH1diYP.js} +1 -1
  95. package/payload/server/public/assets/{chunk-X2U36JSP-DilBs1Yc.js → chunk-X2U36JSP-Dmw9coXz.js} +1 -1
  96. package/payload/server/public/assets/{chunk-XPW4576I-B5-uyrJ0.js → chunk-XPW4576I-DaAUON1-.js} +1 -1
  97. package/payload/server/public/assets/{chunk-YZCP3GAM-BNO4z0Mv.js → chunk-YZCP3GAM-BUcfkEef.js} +1 -1
  98. package/payload/server/public/assets/{chunk-ZZ45TVLE-BzHMQpip.js → chunk-ZZ45TVLE-BLD-vFRO.js} +1 -1
  99. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BdRqzScB.js +1 -0
  100. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-ChPLgHbS.js +1 -0
  101. package/payload/server/public/assets/clock-DqRNsY40.js +1 -0
  102. package/payload/server/public/assets/clone-TKtrjWBC.js +1 -0
  103. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-3DWYmn1o.js → cose-bilkent-S5V4N54A-CoZX0uki.js} +1 -1
  104. package/payload/server/public/assets/{dagre-Cpy31xJW.js → dagre-Bmjs8zJA.js} +1 -1
  105. package/payload/server/public/assets/{dagre-KV5264BT-C8fyxHFd.js → dagre-KV5264BT-BZCP2wnq.js} +1 -1
  106. package/payload/server/public/assets/data-BsFyBN85.js +1 -0
  107. package/payload/server/public/assets/{diagram-5BDNPKRD-ycyhnLvr.js → diagram-5BDNPKRD-8Nt9a4xX.js} +1 -1
  108. package/payload/server/public/assets/{diagram-G4DWMVQ6-BkeYicIt.js → diagram-G4DWMVQ6-vh5tcYqJ.js} +1 -1
  109. package/payload/server/public/assets/{diagram-MMDJMWI5-BcGZU-Q3.js → diagram-MMDJMWI5-DGf--jc8.js} +1 -1
  110. package/payload/server/public/assets/{diagram-TYMM5635-DuBDCFb_.js → diagram-TYMM5635-CsO7TIdw.js} +1 -1
  111. package/payload/server/public/assets/{dist-BYc_arNy.js → dist-cdnE4DqK.js} +1 -1
  112. package/payload/server/public/assets/{erDiagram-SMLLAGMA-DmkeOzvp.js → erDiagram-SMLLAGMA-4a78yV8_.js} +1 -1
  113. package/payload/server/public/assets/file-text-B1HjPFbM.js +1 -0
  114. package/payload/server/public/assets/{flatten-QjnJ1Gcl.js → flatten-BtIc9jX7.js} +1 -1
  115. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-CkE-pjuB.js → flowDiagram-DWJPFMVM-BoQBXs6t.js} +1 -1
  116. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Cjiy3kvE.js → ganttDiagram-T4ZO3ILL-CvzqwCC8.js} +1 -1
  117. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DfcaTE9L.js +1 -0
  118. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-CsI4lKZm.js → gitGraphDiagram-UUTBAWPF-D_nBxay_.js} +1 -1
  119. package/payload/server/public/assets/graph-CIC-mgKR.js +51 -0
  120. package/payload/server/public/assets/graph-labels-BnpHCHaQ.js +1 -0
  121. package/payload/server/public/assets/{graphlib-BkXxC6D5.js → graphlib-D0NdsKJI.js} +1 -1
  122. package/payload/server/public/assets/info-OMHHGYJF-CD-u6gw9.js +1 -0
  123. package/payload/server/public/assets/infoDiagram-42DDH7IO-C6gPQCvO.js +2 -0
  124. package/payload/server/public/assets/{isEmpty-BavJI9Cn.js → isEmpty-Bu4fZ8Kf.js} +1 -1
  125. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-D8lZtjRc.js → ishikawaDiagram-UXIWVN3A-auW-s0i0.js} +1 -1
  126. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-kLE7SiR_.js → journeyDiagram-VCZTEJTY-3Q6AWK4A.js} +1 -1
  127. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-ove6JuD3.js → kanban-definition-6JOO6SKY-B4MPFp98.js} +1 -1
  128. package/payload/server/public/assets/{line-CZMSoxM6.js → line-26MdeG5Z.js} +1 -1
  129. package/payload/server/public/assets/{linear-Be8IK9hK.js → linear-Dq9s_bDO.js} +1 -1
  130. package/payload/server/public/assets/{maximize-2-BbzPm7o8.js → maximize-2-BL7QVTcQ.js} +1 -1
  131. package/payload/server/public/assets/{mermaid-parser.core-BBADqbnp.js → mermaid-parser.core-vLEpOXgf.js} +2 -2
  132. package/payload/server/public/assets/{mermaid.core-mH3N7K0I.js → mermaid.core-Durk4m6D.js} +3 -3
  133. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BjwwwWil.js → mindmap-definition-QFDTVHPH-DOIg-TyG.js} +1 -1
  134. package/payload/server/public/assets/{operator-DCNWUKP_.js → operator-B62h_TaC.js} +1 -1
  135. package/payload/server/public/assets/{ordinal-BHeIKG-K.js → ordinal-C2TEWKNu.js} +1 -1
  136. package/payload/server/public/assets/packet-4T2RLAQJ-BaLYeIrU.js +1 -0
  137. package/payload/server/public/assets/page-BUUBseJZ.js +32 -0
  138. package/payload/server/public/assets/page-Bw-tYjw7.js +1 -0
  139. package/payload/server/public/assets/{pdf-render-fJz4vym9.js → pdf-render-C257cidb.js} +1 -1
  140. package/payload/server/public/assets/pie-ZZUOXDRM-CL-XJtk-.js +1 -0
  141. package/payload/server/public/assets/{pieDiagram-DEJITSTG-D-lXWWta.js → pieDiagram-DEJITSTG-DtgBHZfi.js} +1 -1
  142. package/payload/server/public/assets/{public-DXJXQPwe.js → public-BI21tOkm.js} +1 -1
  143. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-13QyG_AO.js → quadrantDiagram-34T5L4WZ-BTc5Qn2y.js} +1 -1
  144. package/payload/server/public/assets/radar-PYXPWWZC-Cn-g6F_h.js +1 -0
  145. package/payload/server/public/assets/{reduce-Fm685to3.js → reduce-BGpN5lgn.js} +1 -1
  146. package/payload/server/public/assets/{requirementDiagram-MS252O5E-Bx45Bgn4.js → requirementDiagram-MS252O5E-BNgOO5YW.js} +1 -1
  147. package/payload/server/public/assets/{rotate-ccw-L42fL8ey.js → rotate-ccw-C_20Bc3E.js} +1 -1
  148. package/payload/server/public/assets/routines-Ci3N8wqV.js +1 -0
  149. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-Cj-Gq25v.js → sankeyDiagram-XADWPNL6-MyUATmVt.js} +1 -1
  150. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-B8RDRq93.js → sequenceDiagram-FGHM5R23-CBJrF5Vi.js} +1 -1
  151. package/payload/server/public/assets/skills-CiflzOko.js +1 -0
  152. package/payload/server/public/assets/{src-D3VYuW_Z.js → src-DekKlUCp.js} +1 -1
  153. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DoyFF1Kl.js → stateDiagram-FHFEXIEX-6wbUjn1Q.js} +1 -1
  154. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BdMdfBeC.js +1 -0
  155. package/payload/server/public/assets/{tasks-GNtvZL8F.js → tasks-DC2Yf2Ev.js} +1 -1
  156. package/payload/server/public/assets/{time-entry-format-BreNpFLJ.js → time-entry-format-CNcjs2HV.js} +1 -1
  157. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Df4RQXm6.js → timeline-definition-GMOUNBTQ-BHjTMCGY.js} +1 -1
  158. package/payload/server/public/assets/treeView-SZITEDCU-CmZoOGlC.js +1 -0
  159. package/payload/server/public/assets/treemap-W4RFUUIX-H27WFS-y.js +1 -0
  160. package/payload/server/public/assets/{triangle-alert-DumCWC08.js → triangle-alert-CngnWtjD.js} +1 -1
  161. package/payload/server/public/assets/{useCopyFeedback-DHCtz8qX.js → useCopyFeedback-DZ9Bw5CI.js} +1 -1
  162. package/payload/server/public/assets/{useSubAccountSwitcher-Bc7XHr0L.js → useSubAccountSwitcher-CHwQhkaI.js} +1 -1
  163. package/payload/server/public/assets/{useSubAccountSwitcher-DPHQJO7E.css → useSubAccountSwitcher-yFQqnpQ8.css} +1 -1
  164. package/payload/server/public/assets/useVoiceRecorder-C3G6aqZr.js +2 -0
  165. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-D2o5og9l.js → vennDiagram-DHZGUBPP-yo3-cf0U.js} +1 -1
  166. package/payload/server/public/assets/wardley-RL74JXVD-DNpWIvU4.js +1 -0
  167. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BDueObbS.js → wardleyDiagram-NUSXRM2D-DZlyFzrg.js} +1 -1
  168. package/payload/server/public/assets/{wrench-iWkROE1V.js → wrench-dky2-13x.js} +1 -1
  169. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-BTYs4Fgh.js → xychartDiagram-5P7HB3ND-B5HV5h80.js} +1 -1
  170. package/payload/server/public/browser.html +5 -5
  171. package/payload/server/public/calendar.html +8 -8
  172. package/payload/server/public/chat.html +16 -15
  173. package/payload/server/public/data.html +13 -12
  174. package/payload/server/public/graph.html +10 -10
  175. package/payload/server/public/index.html +17 -16
  176. package/payload/server/public/operator.html +17 -16
  177. package/payload/server/public/public.html +16 -15
  178. package/payload/server/public/routines.html +7 -7
  179. package/payload/server/public/skills.html +19 -0
  180. package/payload/server/public/tasks.html +7 -7
  181. package/payload/server/server.js +714 -402
  182. package/payload/server/public/assets/AdminShell-BFVVkWFC.js +0 -2
  183. package/payload/server/public/assets/admin-BWb8me-E.js +0 -1
  184. package/payload/server/public/assets/architecture-YZFGNWBL-D-AX2VuA.js +0 -1
  185. package/payload/server/public/assets/channel-DZ5sh6YQ.js +0 -1
  186. package/payload/server/public/assets/chat-MvnxPJZ5.js +0 -1
  187. package/payload/server/public/assets/chevron-left-BzIg4in6.js +0 -1
  188. package/payload/server/public/assets/chevron-right-BcFSa9C3.js +0 -1
  189. package/payload/server/public/assets/chunk-426QAEUC-CcjBLp4a.js +0 -1
  190. package/payload/server/public/assets/chunk-QZHKN3VN-B2WjDYBE.js +0 -1
  191. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CT3jNrze.js +0 -1
  192. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DJRsjAkC.js +0 -1
  193. package/payload/server/public/assets/clock-Dr3NGtjR.js +0 -1
  194. package/payload/server/public/assets/clone-FcEDnoMT.js +0 -1
  195. package/payload/server/public/assets/data-BjqC4hyM.js +0 -1
  196. package/payload/server/public/assets/gitGraph-7Q5UKJZL-D1uhnP9U.js +0 -1
  197. package/payload/server/public/assets/graph-B7niLM97.js +0 -51
  198. package/payload/server/public/assets/graph-labels-DykmXYHA.js +0 -1
  199. package/payload/server/public/assets/info-OMHHGYJF-oNm27GAV.js +0 -1
  200. package/payload/server/public/assets/infoDiagram-42DDH7IO-LxTftqyS.js +0 -2
  201. package/payload/server/public/assets/packet-4T2RLAQJ-eQNVGiK3.js +0 -1
  202. package/payload/server/public/assets/page-C4TrTU6r.js +0 -32
  203. package/payload/server/public/assets/page-DUgrGrJp.js +0 -1
  204. package/payload/server/public/assets/pie-ZZUOXDRM-E1u-48rt.js +0 -1
  205. package/payload/server/public/assets/radar-PYXPWWZC-Cn2cGN90.js +0 -1
  206. package/payload/server/public/assets/routines-JOV6xdYh.js +0 -1
  207. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bml-X4-H.js +0 -1
  208. package/payload/server/public/assets/treeView-SZITEDCU-CimabhXy.js +0 -1
  209. package/payload/server/public/assets/treemap-W4RFUUIX-Cg264rpM.js +0 -1
  210. package/payload/server/public/assets/useVoiceRecorder-Cu6zvuFx.js +0 -2
  211. package/payload/server/public/assets/wardley-RL74JXVD-tbgfCg0E.js +0 -1
  212. /package/payload/server/public/assets/{_baseFor-Bvwvhrz4.js → _baseFor-Be3EKK3K.js} +0 -0
  213. /package/payload/server/public/assets/{array-D3d-WgFW.js → array-X0JlPOfd.js} +0 -0
  214. /package/payload/server/public/assets/{chunk-fQC6bEKA.js → chunk-CCr-iYLO.js} +0 -0
  215. /package/payload/server/public/assets/{cytoscape.esm-Cun-OM6a.js → cytoscape.esm-CI2IWMLB.js} +0 -0
  216. /package/payload/server/public/assets/{defaultLocale-CisKV5Ew.js → defaultLocale-B6RGN4id.js} +0 -0
  217. /package/payload/server/public/assets/{init-D9ZOVaZ3.js → init-BmUWJJHz.js} +0 -0
  218. /package/payload/server/public/assets/{katex-C-3ZDK8o.js → katex-BjZuzSQn.js} +0 -0
  219. /package/payload/server/public/assets/{path-BMOgQSLM.js → path-CoPyR7c2.js} +0 -0
  220. /package/payload/server/public/assets/{preload-helper-DL2DwvxV.js → preload-helper-BQrMkyGX.js} +0 -0
  221. /package/payload/server/public/assets/{rough.esm-BrTFrov0.js → rough.esm-jSt7UMyi.js} +0 -0
@@ -1,6 +1,10 @@
1
1
  export interface SkillOwner {
2
2
  pluginName: string;
3
3
  file: string;
4
+ /** Absolute plugins dir this owner was found under — the platform
5
+ * `<root>/plugins` dir or an account `<accountDir>/plugins` dir. Callers
6
+ * build the SKILL.md absolute path as `resolve(root, pluginName, file)`. */
7
+ root: string;
4
8
  }
5
9
  export type SkillFindResult = {
6
10
  status: "unique";
@@ -25,8 +29,8 @@ export interface SeatEnv {
25
29
  export declare function isAdminSeat(env: SeatEnv): boolean;
26
30
  export declare function skillSlugFromReadArgs(pluginName: string, file: string): string | undefined;
27
31
  export declare function adminAuthoringSkillBlock(slug: string | undefined, env: SeatEnv): boolean;
28
- export declare function findSkillOwners(platformRoot: string, skillName: string): SkillFindResult;
29
- export declare function computePluginReadHint(platformRoot: string, pluginName: string, file: string): PluginReadHint | null;
32
+ export declare function findSkillOwners(platformRoot: string, skillName: string, accountPluginsDir?: string): SkillFindResult;
33
+ export declare function computePluginReadHint(platformRoot: string, pluginName: string, file: string, accountPluginsDir?: string): PluginReadHint | null;
30
34
  export type SkillLoadOutcome = {
31
35
  status: "unique";
32
36
  pluginName: string;
@@ -51,6 +55,6 @@ export declare function parseSkillFrontmatter(skillBody: string): {
51
55
  name: string;
52
56
  description: string;
53
57
  };
54
- export declare function searchSkills(platformRoot: string, query: string, limit?: number): SkillSearchHit[];
55
- export declare function loadSkill(platformRoot: string, skillName: string): Promise<SkillLoadOutcome>;
58
+ export declare function searchSkills(platformRoot: string, query: string, limit?: number, accountPluginsDir?: string): SkillSearchHit[];
59
+ export declare function loadSkill(platformRoot: string, skillName: string, accountPluginsDir?: string): Promise<SkillLoadOutcome>;
56
60
  //# sourceMappingURL=skill-resolution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-resolution.d.ts","sourceRoot":"","sources":["../src/skill-resolution.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,UAAU,EAAE,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,EAAE,CAAA;CAAE,CAAC;AAU5C,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAeD,eAAO,MAAM,iCAAiC,EAAE,WAAW,CAAC,MAAM,CAEjE,CAAC;AAKF,eAAO,MAAM,uBAAuB,uHACkF,CAAC;AAEvH,MAAM,WAAW,OAAO;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAOD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1F;AAID,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAGxF;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CA4BxF;AAcD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,cAAc,GAAG,IAAI,CASvB;AAgBD,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1F;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,UAAU,EAAE,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAwB5B,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,SAAS,CAoB7E;AAWD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AASD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAkC9F;AA0BD,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,cAAc,EAAE,CAoH7F;AAED,wBAAsB,SAAS,CAC7B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAY3B"}
1
+ {"version":3,"file":"skill-resolution.d.ts","sourceRoot":"","sources":["../src/skill-resolution.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb;;iFAE6E;IAC7E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,UAAU,EAAE,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,EAAE,CAAA;CAAE,CAAC;AAU5C,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAeD,eAAO,MAAM,iCAAiC,EAAE,WAAW,CAAC,MAAM,CAEjE,CAAC;AAKF,eAAO,MAAM,uBAAuB,uHACkF,CAAC;AAEvH,MAAM,WAAW,OAAO;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAOD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1F;AAID,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAGxF;AA8BD,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE,MAAM,GACzB,eAAe,CAQjB;AAcD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,MAAM,GACzB,cAAc,GAAG,IAAI,CASvB;AAeD,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1F;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,UAAU,EAAE,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAwB5B,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,SAAS,CAoB7E;AAWD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AASD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAkC9F;AA0BD,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,SAAI,EACT,iBAAiB,CAAC,EAAE,MAAM,GACzB,cAAc,EAAE,CAwHlB;AAED,wBAAsB,SAAS,CAC7B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAY3B"}
@@ -63,18 +63,18 @@ export function adminAuthoringSkillBlock(slug, env) {
63
63
  return false;
64
64
  return isAdminSeat(env) && CONTENT_PRODUCER_AUTHORING_SKILLS.has(slug);
65
65
  }
66
- export function findSkillOwners(platformRoot, skillName) {
67
- const owners = [];
68
- const pluginsDir = resolve(platformRoot, "plugins");
69
- if (!existsSync(pluginsDir)) {
70
- return { status: "not-found", candidates: [] };
71
- }
66
+ // Append every plugin under `pluginsDir` that owns `skillName` to `into`,
67
+ // tagging each owner with the `pluginsDir` it was found under. Two-level,
68
+ // non-recursive (plugin dir → skill dir), matching the historical walk shape.
69
+ function collectOwners(pluginsDir, skillName, into) {
70
+ if (!existsSync(pluginsDir))
71
+ return;
72
72
  let entries;
73
73
  try {
74
74
  entries = readdirSync(pluginsDir);
75
75
  }
76
76
  catch {
77
- return { status: "not-found", candidates: [] };
77
+ return;
78
78
  }
79
79
  for (const pluginName of entries) {
80
80
  const skillFile = resolve(pluginsDir, pluginName, "skills", skillName, "SKILL.md");
@@ -87,8 +87,19 @@ export function findSkillOwners(platformRoot, skillName) {
87
87
  catch {
88
88
  continue;
89
89
  }
90
- owners.push({ pluginName, file: `skills/${skillName}/SKILL.md` });
90
+ into.push({ pluginName, file: `skills/${skillName}/SKILL.md`, root: pluginsDir });
91
91
  }
92
+ }
93
+ // Walk `<platformRoot>/plugins` first, then — when `accountPluginsDir` is given
94
+ // (Task 1962) — the account's operator-plugin root. A slug owned across both
95
+ // roots flows through the existing multi-owner ambiguous path. Account plugin
96
+ // names never collide with a shipped plugin name (store-skill refuses that at
97
+ // write time), so a same-name plugin cannot appear under both roots.
98
+ export function findSkillOwners(platformRoot, skillName, accountPluginsDir) {
99
+ const owners = [];
100
+ collectOwners(resolve(platformRoot, "plugins"), skillName, owners);
101
+ if (accountPluginsDir)
102
+ collectOwners(accountPluginsDir, skillName, owners);
92
103
  if (owners.length === 0)
93
104
  return { status: "not-found", candidates: [] };
94
105
  if (owners.length === 1)
@@ -107,11 +118,11 @@ export function findSkillOwners(platformRoot, skillName) {
107
118
  //
108
119
  // The file argument wins when both shapes match — it carries the more
109
120
  // specific intent (the agent named a file directly).
110
- export function computePluginReadHint(platformRoot, pluginName, file) {
121
+ export function computePluginReadHint(platformRoot, pluginName, file, accountPluginsDir) {
111
122
  const skillName = file.match(SKILL_FILE_PATH)?.[1] ?? pluginName.match(SKILL_IN_PLUGIN_NAME)?.[1];
112
123
  if (!skillName)
113
124
  return null;
114
- const result = findSkillOwners(platformRoot, skillName);
125
+ const result = findSkillOwners(platformRoot, skillName, accountPluginsDir);
115
126
  if (result.status !== "unique")
116
127
  return null;
117
128
  const owner = result.candidates[0];
@@ -235,7 +246,7 @@ function stripQuotes(s) {
235
246
  // skill against every skill that merely shares a common trigger word. Ties
236
247
  // break by slug ascending so the order is deterministic. A query that matches
237
248
  // nothing returns `[]` (not an error).
238
- export function searchSkills(platformRoot, query, limit = 5) {
249
+ export function searchSkills(platformRoot, query, limit = 5, accountPluginsDir) {
239
250
  const terms = Array.from(new Set(query
240
251
  .toLowerCase()
241
252
  .split(/[^a-z0-9]+/)
@@ -252,55 +263,61 @@ export function searchSkills(platformRoot, query, limit = 5) {
252
263
  // RegExps are stateless under `.test`.
253
264
  const termRe = new Map(terms.map(t => [t, new RegExp(`\\b${t}`)]));
254
265
  const matches = (hay, term) => termRe.get(term).test(hay);
255
- const pluginsDir = resolve(platformRoot, "plugins");
256
- if (!existsSync(pluginsDir))
257
- return [];
258
- let plugins;
259
- try {
260
- plugins = readdirSync(pluginsDir);
261
- }
262
- catch {
263
- return [];
264
- }
265
266
  const candidates = [];
266
- for (const pluginName of plugins) {
267
- const skillsDir = resolve(pluginsDir, pluginName, "skills");
268
- if (!existsSync(skillsDir))
267
+ // Enumerate the platform plugins root first, then — Task 1962 — the account's
268
+ // operator-plugin root. Same two-level, non-recursive shape for both.
269
+ const roots = [resolve(platformRoot, "plugins")];
270
+ if (accountPluginsDir)
271
+ roots.push(accountPluginsDir);
272
+ for (const pluginsDir of roots) {
273
+ if (!existsSync(pluginsDir))
269
274
  continue;
270
- let skills;
275
+ let plugins;
271
276
  try {
272
- skills = readdirSync(skillsDir);
277
+ plugins = readdirSync(pluginsDir);
273
278
  }
274
279
  catch {
275
280
  continue;
276
281
  }
277
- for (const skillName of skills) {
278
- const skillFile = resolve(skillsDir, skillName, "SKILL.md");
279
- if (!existsSync(skillFile))
282
+ for (const pluginName of plugins) {
283
+ const skillsDir = resolve(pluginsDir, pluginName, "skills");
284
+ if (!existsSync(skillsDir))
280
285
  continue;
286
+ let skills;
281
287
  try {
282
- if (!statSync(skillFile).isFile())
283
- continue;
288
+ skills = readdirSync(skillsDir);
284
289
  }
285
290
  catch {
286
291
  continue;
287
292
  }
288
- let body;
289
- try {
290
- body = readFileSync(skillFile, "utf-8");
291
- }
292
- catch {
293
- continue;
293
+ for (const skillName of skills) {
294
+ const skillFile = resolve(skillsDir, skillName, "SKILL.md");
295
+ if (!existsSync(skillFile))
296
+ continue;
297
+ try {
298
+ if (!statSync(skillFile).isFile())
299
+ continue;
300
+ }
301
+ catch {
302
+ continue;
303
+ }
304
+ let body;
305
+ try {
306
+ body = readFileSync(skillFile, "utf-8");
307
+ }
308
+ catch {
309
+ continue;
310
+ }
311
+ const { name, description } = parseSkillFrontmatter(body);
312
+ candidates.push({
313
+ pluginName,
314
+ skillName,
315
+ description,
316
+ name,
317
+ nameHay: `${skillName} ${name}`.toLowerCase(),
318
+ descHay: description.toLowerCase(),
319
+ });
294
320
  }
295
- const { name, description } = parseSkillFrontmatter(body);
296
- candidates.push({
297
- pluginName,
298
- skillName,
299
- description,
300
- name,
301
- nameHay: `${skillName} ${name}`.toLowerCase(),
302
- descHay: description.toLowerCase(),
303
- });
304
321
  }
305
322
  }
306
323
  if (candidates.length === 0)
@@ -342,16 +359,16 @@ export function searchSkills(platformRoot, query, limit = 5) {
342
359
  a.pluginName.localeCompare(b.pluginName));
343
360
  return hits.slice(0, limit);
344
361
  }
345
- export async function loadSkill(platformRoot, skillName) {
346
- const result = findSkillOwners(platformRoot, skillName);
362
+ export async function loadSkill(platformRoot, skillName, accountPluginsDir) {
363
+ const result = findSkillOwners(platformRoot, skillName, accountPluginsDir);
347
364
  if (result.status === "ambiguous") {
348
365
  return { status: "ambiguous", candidates: result.candidates };
349
366
  }
350
367
  if (result.status === "not-found") {
351
368
  return { status: "not-found" };
352
369
  }
353
- const [{ pluginName, file }] = result.candidates;
354
- const absolutePath = resolve(platformRoot, "plugins", pluginName, file);
370
+ const [{ pluginName, file, root }] = result.candidates;
371
+ const absolutePath = resolve(root, pluginName, file);
355
372
  const body = await readFile(absolutePath, "utf-8");
356
373
  return { status: "unique", pluginName, file, absolutePath, body };
357
374
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skill-resolution.js","sourceRoot":"","sources":["../src/skill-resolution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-resolution.js","sourceRoot":"","sources":["../src/skill-resolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type SkillFindResult } from "./skill-resolution.js";
2
+ export interface StoreSkillReference {
3
+ filename: string;
4
+ content: string;
5
+ }
6
+ export interface StoreSkillArgs {
7
+ accountDir: string;
8
+ platformRoot: string;
9
+ pluginName: string;
10
+ skillName: string;
11
+ description: string;
12
+ publicEmbed: boolean;
13
+ body: string;
14
+ references: StoreSkillReference[];
15
+ /** Test seam for the post-write resolve. Defaults to `findSkillOwners`.
16
+ * Injected only by tests to exercise the fail-closed (not-found) branch,
17
+ * which a real write under the walked account root cannot otherwise reach. */
18
+ resolveOwners?: (platformRoot: string, skillName: string, accountPluginsDir: string) => SkillFindResult;
19
+ }
20
+ export type StoreSkillResult = {
21
+ ok: true;
22
+ action: "create" | "overwrite";
23
+ canonicalPluginDir: string;
24
+ refCount: number;
25
+ bodyBytes: number;
26
+ } | {
27
+ ok: false;
28
+ reason: "collision-with-shipped" | "resolve-failed" | "write-error";
29
+ detail: string;
30
+ canonicalPluginDir: string;
31
+ };
32
+ export declare function storeSkillToAccount(args: StoreSkillArgs): Promise<StoreSkillResult>;
33
+ //# sourceMappingURL=store-skill-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-skill-core.d.ts","sourceRoot":"","sources":["../src/store-skill-core.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC;;mFAE+E;IAC/E,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,eAAe,CAAC;CACzG;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7G;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,wBAAwB,GAAG,gBAAgB,GAAG,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnI,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2GzF"}
@@ -0,0 +1,122 @@
1
+ // Task 1962 — write an operator-authored skill to the per-account plugins
2
+ // root and confirm it resolves. This is the write counterpart to `loadSkill`
3
+ // (skill-resolution.ts). Operator plugins live ONLY under
4
+ // <accountDir>/plugins/<plugin>/ — never the immutable PLATFORM_ROOT/plugins
5
+ // tree (chattr +i), and never a platform mirror. `data/` is excluded from the
6
+ // installer wipe, so the account copy is durable.
7
+ //
8
+ // The canonical write is not evidence the skill loaded: this function resolves
9
+ // the written skill through the same account-root walk the admin resolvers use
10
+ // and fails closed (ok=false) if it does not resolve, so a write that cannot be
11
+ // loaded never reports success.
12
+ //
13
+ // Input validation (kebab-case names, reference filename shape) stays in the
14
+ // MCP handler; this seam owns the filesystem write + post-write resolve so it
15
+ // is unit-testable without the MCP stdio transport.
16
+ import { existsSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
17
+ import { resolve } from "node:path";
18
+ import { findSkillOwners } from "./skill-resolution.js";
19
+ export async function storeSkillToAccount(args) {
20
+ const { accountDir, platformRoot, pluginName, skillName, description, publicEmbed, body, references } = args;
21
+ const resolveOwners = args.resolveOwners ?? findSkillOwners;
22
+ const accountPluginsDir = resolve(accountDir, "plugins");
23
+ const canonicalPluginDir = resolve(accountPluginsDir, pluginName);
24
+ const canonicalPluginMd = resolve(canonicalPluginDir, "PLUGIN.md");
25
+ const shippedPluginMd = resolve(platformRoot, "plugins", pluginName, "PLUGIN.md");
26
+ // Collision: a shipped platform plugin already owns this name. Refuse rather
27
+ // than shadow it (platform wins name clashes across roots).
28
+ if (existsSync(shippedPluginMd) && !existsSync(canonicalPluginMd)) {
29
+ return {
30
+ ok: false,
31
+ reason: "collision-with-shipped",
32
+ detail: `pluginName "${pluginName}" collides with a shipped plugin`,
33
+ canonicalPluginDir,
34
+ };
35
+ }
36
+ const skillDir = resolve(canonicalPluginDir, "skills", skillName);
37
+ const action = existsSync(resolve(skillDir, "SKILL.md")) ? "overwrite" : "create";
38
+ let refCount = 0;
39
+ let bodyBytes = 0;
40
+ try {
41
+ mkdirSync(canonicalPluginDir, { recursive: true });
42
+ // Compose PLUGIN.md only on first write.
43
+ if (!existsSync(canonicalPluginMd)) {
44
+ const pluginMd = `---
45
+ name: ${pluginName}
46
+ description: "Operator-authored plugin"
47
+ tools: []
48
+ hidden: []
49
+ requires: []
50
+ metadata: {"platform":{"embed":["admin","public"],"optional":false}}
51
+ ---
52
+
53
+ # ${pluginName}
54
+
55
+ Operator-authored plugin. Skills under \`skills/\` were created via the admin skill-builder.
56
+ `;
57
+ writeFileSync(canonicalPluginMd, pluginMd);
58
+ }
59
+ // Reset the skill dir before write so removed reference files don't linger.
60
+ if (existsSync(skillDir)) {
61
+ rmSync(skillDir, { recursive: true, force: true });
62
+ }
63
+ mkdirSync(skillDir, { recursive: true });
64
+ // Normalise description to a single YAML line. The manifest frontmatter
65
+ // reader (`frontmatterField` in spawn-context.ts) matches the value with a
66
+ // single-line, `m`-flag regex; an embedded newline would truncate it.
67
+ const singleLineDescription = description.replace(/[\r\n\t]+/g, " ").trim();
68
+ const escapedDescription = singleLineDescription.replace(/"/g, '\\"');
69
+ const skillMd = `---
70
+ name: ${skillName}
71
+ description: "${escapedDescription}"
72
+ publicEmbed: ${publicEmbed}
73
+ ---
74
+
75
+ ${body}
76
+ `;
77
+ writeFileSync(resolve(skillDir, "SKILL.md"), skillMd);
78
+ if (references.length > 0) {
79
+ const refsDir = resolve(skillDir, "references");
80
+ mkdirSync(refsDir, { recursive: true });
81
+ for (const ref of references) {
82
+ writeFileSync(resolve(refsDir, ref.filename), ref.content);
83
+ refCount++;
84
+ }
85
+ }
86
+ bodyBytes = Buffer.byteLength(body, "utf-8");
87
+ }
88
+ catch (err) {
89
+ return {
90
+ ok: false,
91
+ reason: "write-error",
92
+ detail: err instanceof Error ? err.message : String(err),
93
+ canonicalPluginDir,
94
+ };
95
+ }
96
+ // Written bytes are not evidence the skill loaded. Confirm the account's own
97
+ // copy is among the resolver's owners, using the same account-root walk the
98
+ // admin resolvers use. Fault B ("canonical never loaded") surfaces as
99
+ // not-found. A slug also owned by a platform skill resolves as ambiguous — the
100
+ // skill DID load and is reachable (plugin-qualified via plugin-read, or after
101
+ // the agent disambiguates), so ambiguous-with-our-owner is success, not a
102
+ // write failure. Fail closed only when our own owner is absent.
103
+ const owners = resolveOwners(platformRoot, skillName, accountPluginsDir);
104
+ const ourOwnerPresent = owners.status !== "not-found" &&
105
+ owners.candidates.some((c) => c.pluginName === pluginName && c.root === accountPluginsDir);
106
+ if (!ourOwnerPresent) {
107
+ // Remove the just-written skill dir so disk state matches the reported
108
+ // "did not register" outcome (no orphan left behind).
109
+ try {
110
+ rmSync(skillDir, { recursive: true, force: true });
111
+ }
112
+ catch { /* best-effort */ }
113
+ return {
114
+ ok: false,
115
+ reason: "resolve-failed",
116
+ detail: `written skill "${skillName}" did not resolve under the account root (status=${owners.status})`,
117
+ canonicalPluginDir,
118
+ };
119
+ }
120
+ return { ok: true, action, canonicalPluginDir, refCount, bodyBytes };
121
+ }
122
+ //# sourceMappingURL=store-skill-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-skill-core.js","sourceRoot":"","sources":["../src/store-skill-core.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,21 @@ Load `references/agent-pattern.md`. It is the canonical shape: the two kinds of
28
28
  deny-by-default tool rule, model-choice guidance, and the three-part contract body. Use it
29
29
  throughout. Do not paraphrase the pattern from memory; the reference is the source.
30
30
 
31
+ ## Step 0: Check for a deliverable catalogue
32
+
33
+ When the operator asks what can be built here, rather than naming a specific agent, first look for
34
+ a shipped suggestion catalogue. A premium bundle can ship a `DELIVERABLES.md` at its root listing
35
+ deliverables it supports beyond the agents it already ships. Get the enabled bundles from
36
+ `capabilities-here`, then for each one read `$PLATFORM_ROOT/../premium-plugins/<bundle>/DELIVERABLES.md`
37
+ if it exists, the bundle root where its `BUNDLE.md` and `agents/` live. Offer the operator the entries you find, grouped by bundle. If
38
+ no enabled bundle ships one, skip this step and go to Step 1.
39
+
40
+ The catalogue is a suggestion list, not a shipped roster. Each entry is authored bespoke for this
41
+ account when the operator picks it, because a generic version carries none of the customer's own
42
+ determinism. On a pick, run Steps 1 through 7 to author the skill and agent into the account's own
43
+ plugins tree, and name the agent for the customer's actual deliverable rather than the catalogue's
44
+ ontology label, exactly as the catalogue instructs. The ontology name is grounding, not a file name.
45
+
31
46
  ## Step 1: Name the deliverable
32
47
 
33
48
  Ask: **"What is the one thing this agent hands back?"**
@@ -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:de872279f0c40b8dee0a8ef51dba6534e2452d6034ca2765d6ab912447bc95b3
4
+ content-hash: sha256:70e0125f4ead8ba83c01b87f6a9ccc15f51d9492c5dd55bd4f83106769280a7e
5
5
  brand: maxy-code
6
6
  product-name: Maxy
7
7
  ---
@@ -460,9 +460,9 @@ Ask Maxy: "What plugins do I have?" or "List my plugins."
460
460
 
461
461
  Skills you create at runtime through the admin `skill-builder` skill are saved on disk as their own plugin under `data/accounts/{accountId}/plugins/{pluginName}/`. The admin agent calls `mcp__plugin_admin_admin__store-skill`, which composes `PLUGIN.md` (on first call) and `skills/{skillName}/SKILL.md` plus any reference files. The agent supplies `pluginName`, `skillName`, `description`, `publicEmbed`, `body`, and optional references — the path is computed by the tool, never by the agent.
462
462
 
463
- These operator-authored plugins survive reinstall because the installer's wipe zone excludes `data/`. At admin session start the platform mirrors `data/accounts/{accountId}/plugins/*` into the runtime plugins directory so the same `parsePluginFrontmatter` / `assemblePublicPluginContent` / `loadEmbeddedPlugins` loaders that read shipped and premium plugins also pick up operator-authored ones no special-case loader path. The admin agent sees every operator skill by default; per-skill `publicEmbed: true|false` controls which skills surface to the public agent.
463
+ These operator-authored plugins survive reinstall because the installer's wipe zone excludes `data/`. They are loaded directly from `data/accounts/{accountId}/plugins/*`: the spawn manifest and the admin skill resolvers (`skill-load`, `skill-find`, `skill-search`, `plugin-read`) walk that per-account root alongside the shipped and premium plugin roots, so no copy into the platform plugins tree is made or needed. `store-skill` confirms the written skill resolves through that same walk before reporting success. Operator plugins are always active for their own account; the admin agent sees every operator skill by default, and per-skill `publicEmbed: true|false` controls which skills surface to the public agent.
464
464
 
465
- To edit an operator-authored skill later, ask Maxy to update it — the admin agent re-runs `store-skill` for the same `pluginName`/`skillName` and the new content overwrites in place. To remove one, delete the directory under `data/accounts/{accountId}/plugins/{pluginName}/skills/{skillName}/` (or the whole plugin) — the next session start re-mirrors the remaining skills only.
465
+ To edit an operator-authored skill later, ask Maxy to update it — the admin agent re-runs `store-skill` for the same `pluginName`/`skillName` and the new content overwrites in place. To remove one, delete the directory under `data/accounts/{accountId}/plugins/{pluginName}/skills/{skillName}/` (or the whole plugin) — the next session no longer surfaces it, since skills load directly from that path.
466
466
 
467
467
  `pluginName` collisions with shipped plugin names are refused by `store-skill` with a structured error. See [.docs/agents.md](../../../../.docs/agents.md) § "Operator-authored skills as plugin files" for the full contract.
468
468
 
@@ -1514,6 +1514,8 @@ Ask naturally:
1514
1514
 
1515
1515
  Maxy searches by name, email, phone number, or any detail you provide.
1516
1516
 
1517
+ When Maxy drafts an email to a contact, it reads that contact's record first. If the record carries routing you have set (for example an address to always copy, or a preferred send-to address), Maxy applies it to the draft and shows it to you for approval before anything is sent.
1518
+
1517
1519
  ## Updating a Contact
1518
1520
 
1519
1521
  Tell Maxy what changed:
@@ -2156,6 +2158,10 @@ The `outlook` plugin gives the admin agent access to Microsoft 365 / Outlook.com
2156
2158
  | `outlook-draft-edit` | Update an existing draft in place (`PATCH /me/messages/{draftId}`) and/or add and remove attachments. Graph drafts are mutable — pass draftId plus the fields to change (to/cc/bcc/subject/body/isHtml/attachments/removeAttachments). `attachments` adds; `removeAttachments` takes files off by name or attachment id; both together replace a file in one call. Sent messages cannot be edited. Needs `Mail.ReadWrite`. |
2157
2159
  | `outlook-draft-send` | Send an existing draft by id (`POST /me/messages/{id}/send`). Graph consumes the draft, returns 202. Needs `Mail.Send`. |
2158
2160
 
2161
+ ## Drafting to a Contact
2162
+
2163
+ When the admin agent drafts or sends a message to a known contact, it reads that contact's record first and applies any routing the record carries, for example a preferred send-to address, showing the result for your approval before anything is sent.
2164
+
2159
2165
  ## Observability
2160
2166
 
2161
2167
  All log lines start with `[outlook-mcp]` and write to `server.log`. They are key=value, account-scoped:
@@ -3039,6 +3045,37 @@ routines exist for the account is the account-scope-miss signature; the logged
3039
3045
  `cron=` on `outcome=ok` confirms the persisted expression without opening the
3040
3046
  graph.
3041
3047
 
3048
+ ### Skills
3049
+
3050
+ The Skills surface (`/skills`) is the admin view of the account's operator-
3051
+ authored skills — the `SKILL.md` files the store-skill tool writes under
3052
+ `<accountDir>/plugins/<plugin>/skills/<skill>/` (the durable per-account plugin
3053
+ root, never the immutable `PLATFORM_ROOT/plugins` tree). It renders one card per
3054
+ skill (name, owning plugin, frontmatter description, reference count); a card
3055
+ opens a **read-only** detail modal showing the frontmatter, the SKILL.md body,
3056
+ and the reference filenames. The page is read-only by design — skills are
3057
+ authored and edited through the chat interface — with one exception: a **delete**
3058
+ behind an explicit confirm step in the modal. A confirmed delete removes the
3059
+ skill directory, and the whole plugin directory when that was its last skill.
3060
+
3061
+ The route (`server/routes/admin/skills.ts`) walks only the account tree, so
3062
+ shipped platform skills never appear. Plugin and skill path params are kebab-case
3063
+ validated (`/^[a-z0-9][a-z0-9-]*$/`) — the traversal guard; anything else 400s.
3064
+
3065
+ | Route | Behaviour |
3066
+ |-------|-----------|
3067
+ | `GET /api/admin/skills` | Enumerates `plugins/*/skills/*/SKILL.md`, returns `{plugin, skill, description, refCount}` per skill, sorted plugin then skill. A per-entry read error logs `op=list-skip` rather than silently shortening the list. |
3068
+ | `GET /api/admin/skills/:plugin/:skill` | One skill's parsed frontmatter (`name`, `description`, `publicEmbed`), the SKILL.md body, and the reference filenames. Unknown skill 404s. |
3069
+ | `DELETE /api/admin/skills/:plugin/:skill` | Removes the skill dir; removes the plugin dir when its `skills/` empties. Returns `{ok, skillDirGone, pluginDirRemoved}` measured after the rm. |
3070
+
3071
+ Observability rides `[admin:skills]`: `op=list accountId=<8> plugins=<n>
3072
+ skills=<n>` (the surface's own heartbeat — `skills=0` against a populated
3073
+ `plugins/*/skills/` is the broken-walk signature), `op=get plugin=<…> skill=<…>
3074
+ found=<bool>`, and `op=delete plugin=<…> skill=<…> outcome=ok
3075
+ skillDirGone=<bool> pluginDirRemoved=<bool>` (`skillDirGone=false` with
3076
+ `outcome=ok` is a named failure) / `outcome=rejected reason=<invalid-name|
3077
+ not-found|rm-error>`.
3078
+
3042
3079
  ### Graph
3043
3080
 
3044
3081
  | Mount | Purpose |
@@ -3050,6 +3087,25 @@ graph.
3050
3087
  | `/graph-labels-in-graph` | Distinct label list for the filter dropdown. |
3051
3088
  | `/graph-default-view` | Account-scoped saved view (zoom, focal id, filters). |
3052
3089
 
3090
+ **Node visual encoding.** Every node type that can appear on the canvas renders
3091
+ a coloured disc with a white Lucide glyph, sized by incident-edge count, with a
3092
+ matching legend swatch. Colour, shape, and glyph are three per-label registries
3093
+ in `platform/lib/graph-style/src/index.ts`. Coverage is reconciled against the
3094
+ true node-label universe, not the colour registry itself: the standing test
3095
+ `__tests__/icons.test.ts` assembles the universe from the `Neo4j Label` column
3096
+ of every `schema-*.md` node-type table, the `sourceLabel`/`targetLabel` set in
3097
+ `typed-edge-schema.ts`, and the `CODE_EMITTED_NODE_LABELS` list, then fails the
3098
+ build if any member lacks a colour or glyph. Labels that only ever stack on a
3099
+ base node (`ADDITIONAL_BASE_LABELS`) inherit the base node's colour and are
3100
+ excluded. A node type carries a coloured glyph even when its text caption is its
3101
+ bare type: the glyph and the caption are independent channels (caption coverage
3102
+ is the separate `caption-coverage.test.ts` gate). At runtime, a per-session
3103
+ `op=icon-fallback` census (emitted from `app/graph/page.tsx` across the initial
3104
+ render and every live-update poll) names any label that reached the canvas with
3105
+ no glyph; an empty census is the healthy signal, a non-empty one means a
3106
+ code-emitted label that no static source declares and should be added to
3107
+ `CODE_EMITTED_NODE_LABELS`.
3108
+
3053
3109
  ### Artefacts and files
3054
3110
 
3055
3111
  | Mount | Purpose |
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: summarise
3
+ description: Use when the user types /summarise, or asks for a summary, recap, or "in short" version of what the agent just said or asked. Restates the agent's own immediately preceding turn under the plainly rules: precise, concise, plain English, every claim already evidenced in that turn. When that turn concluded an investigation, the summary carries exactly two things: the diagnosis and the proposed resolution.
4
+ ---
5
+
6
+ # summarise
7
+
8
+ Invoked by the admin agent directly.
9
+
10
+ The subject is the agent's own last turn, not the codebase, not the conversation as a whole, and not the user's message. Whatever was just said or asked gets restated so a reader who skipped the turn ends up with the same working understanding, in a fraction of the words.
11
+
12
+ ## What success looks like
13
+
14
+ The summary is precise, concise, plain English, with every claim already evidenced in the turn being summarised. It also satisfies the shipped `plainly` skill (`skills/plainly/SKILL.md`): spoken register, no acronyms, no formulas, no AI tells, no em-dashes. Read `plainly` before writing; do not summarise from memory of what it says.
15
+
16
+ Three sentences is the ceiling for an ordinary turn. If the turn ended in a question, the summary states the question and what turns on the answer, and nothing else.
17
+
18
+ ## Investigations
19
+
20
+ When the preceding turn concluded an investigation, the summary has exactly two parts, in this order:
21
+
22
+ 1. **Diagnosis.** What is actually wrong, and the evidence that establishes it. Name the cause, not the layer where the symptom surfaced.
23
+ 2. **Proposed resolution.** What would fix that cause, and its scope boundary.
24
+
25
+ Both parts are mandatory. A diagnosis with no proposed resolution is an unfinished summary; a proposed resolution with no diagnosis is speculation wearing a summary's clothes. Neither part introduces a finding, a fix, or a caveat that was absent from the turn being summarised. If the investigation reached a diagnosis but no resolution, say that in the resolution slot rather than inventing one.
26
+
27
+ ## Constraints
28
+
29
+ - **No new content.** The summary is a compression, never an extension. Anything not in the turn being summarised does not belong here.
30
+ - **Drop the scaffolding, keep the load.** File paths, tool names, and step-by-step narration go unless the reader needs them to act. The outcome stays.
31
+ - **No hedging.** The original turn either established a claim or it did not. Do not soften a confirmed finding into "appears to", and do not harden a speculation into a fact.
32
+ - **No follow-up offers.** End on the summary.
33
+
34
+ ## When NOT to use
35
+
36
+ - The user wants the summary of a document, a file, or someone else's text: that is ordinary reading work, and the `plainly` skill fits better.
37
+ - The last turn was already one or two plain sentences: there is nothing to compress, so say so and stop.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "contacts",
3
- "description": "CRM contacts plugin. Provides contact-create, contact-lookup, contact-update, contact-delete, contact-list, contact-export, contact-erase, group-create, and group-manage tools for managing the customer contact graph and group conversations.",
3
+ "description": "CRM contacts plugin. Provides contact-create, contact-lookup (returns a person's open-by-default properties and any attached preferences so drafting can honour contact-level routing), contact-update, contact-delete, contact-list, contact-export, contact-erase, group-create, and group-manage tools for managing the customer contact graph and group conversations.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"