@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
@@ -5,7 +5,7 @@ import { z } from "zod";
5
5
  import { readFile, writeFile } from "node:fs/promises";
6
6
  import { resolve, join } from "node:path";
7
7
  import { execFile, execFileSync } from "node:child_process";
8
- import { appendFileSync, cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
8
+ import { appendFileSync, cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, statSync, writeFileSync } from "node:fs";
9
9
  import { writeAdminEntry, removeAdminFromAccount, logUsersAudit, formatAuditRowIds } from "../../../../lib/admins-write/dist/index.js";
10
10
  import { setAccessPassword as setAccessPasswordHash, clearAccessPassword as clearAccessPasswordHash, accessPasswordCollides } from "../../../../lib/admin-access-password/dist/index.js";
11
11
  import { resolveCredentialTarget } from "./credential-identity.js";
@@ -20,6 +20,7 @@ import { homedir, hostname as osHostname } from "node:os";
20
20
  import QRCode from "qrcode";
21
21
  import { getSession, closeDriver } from "./lib/neo4j.js";
22
22
  import { findSkillOwners, searchSkills, computePluginReadHint, loadSkill, parseRequiredInputs, adminAuthoringSkillBlock, skillSlugFromReadArgs, AUTHORING_DISPATCH_HINT } from "./skill-resolution.js";
23
+ import { storeSkillToAccount } from "./store-skill-core.js";
23
24
  import { resolvePublicHostname } from "./lib/public-hostname.js";
24
25
  import { resolveAdminHostname } from "./lib/admin-hostname.js";
25
26
  import { publishSite } from "./tools/publish-site.js";
@@ -1808,15 +1809,16 @@ eagerTool(server, "cpu-triage-read", "Read a cpu-triage run started by cpu-triag
1808
1809
  }
1809
1810
  return { content: [{ type: "text", text: JSON.stringify(out, null, 2) }] };
1810
1811
  });
1811
- // operator-authored skills are written to disk as a plugin so the
1812
- // existing plugin-manifest loader picks them up (parsePluginFrontmatter +
1813
- // assemblePublicPluginContent + loadEmbeddedPlugins all read from
1814
- // <PLATFORM_ROOT>/plugins/<dir>/). Canonical = <accountDir>/plugins/<plugin>
1815
- // survives installer rmSync (data/ excluded); the mirror under
1816
- // <PLATFORM_ROOT>/plugins/<plugin> is rehydrated at admin session start by
1817
- // autoDeliverUserPlugins. The agent supplies pluginName/skillName/body
1818
- // path is computed by this tool from ACCOUNT_ID. Symmetric write counterpart
1819
- // to plugin-read.
1812
+ // Task 1962 — operator-authored skills are written as a plugin under the
1813
+ // per-account root <accountDir>/plugins/<plugin>/ ONLY. That copy survives the
1814
+ // installer wipe (data/ is excluded) and is loaded directly by the spawn
1815
+ // manifest (computeActivePlugins) and the admin skill resolvers, which walk the
1816
+ // account root. Nothing is written to the immutable PLATFORM_ROOT/plugins tree
1817
+ // (chattr +i) and there is no platform mirror. The write+resolve core lives in
1818
+ // store-skill-core.ts and fails closed if the written skill does not resolve,
1819
+ // so success is never reported for a skill that cannot load. The agent supplies
1820
+ // pluginName/skillName/body — the path is computed from ACCOUNT_ID. Symmetric
1821
+ // write counterpart to plugin-read.
1820
1822
  eagerTool(server, "store-skill", "Save an operator-authored skill on disk as part of an admin-managed plugin. " +
1821
1823
  "The skill becomes immediately discoverable by the admin agent (and the public agent if publicEmbed=true). " +
1822
1824
  "Path is computed internally from the active account; the agent supplies content + names only. " +
@@ -1850,97 +1852,31 @@ eagerTool(server, "store-skill", "Save an operator-authored skill on disk as par
1850
1852
  }
1851
1853
  }
1852
1854
  const accountDir = getAccountDir();
1853
- const canonicalPluginDir = resolve(accountDir, "plugins", pluginName);
1854
- const mirrorPluginDir = resolve(PLATFORM_ROOT, "plugins", pluginName);
1855
- const canonicalPluginMd = resolve(canonicalPluginDir, "PLUGIN.md");
1856
- const mirrorPluginMd = resolve(mirrorPluginDir, "PLUGIN.md");
1857
- // Collision: mirror dir exists from a shipped plugin (no canonical mirror).
1858
- // Refuse rather than silently shadow.
1859
- if (existsSync(mirrorPluginMd) && !existsSync(canonicalPluginMd)) {
1860
- console.error(`[store-skill] ERROR pluginName=${pluginName} skillName=${skillName} reason=collision-with-shipped path=${mirrorPluginDir}`);
1861
- return { content: [{ type: "text", text: `pluginName "${pluginName}" collides with a shipped plugin. Choose a different pluginName.` }], isError: true };
1862
- }
1863
- const skillDir = resolve(canonicalPluginDir, "skills", skillName);
1864
- const action = existsSync(resolve(skillDir, "SKILL.md")) ? "overwrite" : "create";
1865
- try {
1866
- mkdirSync(canonicalPluginDir, { recursive: true });
1867
- // Compose PLUGIN.md only on first write. embed=["admin","public"] +
1868
- // optional=false matches assemblePublicPluginContent / loadEmbeddedPlugins
1869
- // expectations. metadata is single-line JSON (parsePluginFrontmatter at
1870
- // plugin-manifest.ts:67 expects single-line) — multi-line silently falls
1871
- // back to platform={}.
1872
- if (!existsSync(canonicalPluginMd)) {
1873
- const pluginMd = `---
1874
- name: ${pluginName}
1875
- description: "Operator-authored plugin"
1876
- tools: []
1877
- hidden: []
1878
- requires: []
1879
- metadata: {"platform":{"embed":["admin","public"],"optional":false}}
1880
- ---
1881
-
1882
- # ${pluginName}
1883
-
1884
- Operator-authored plugin. Skills under \`skills/\` were created via the admin skill-builder.
1885
- `;
1886
- writeFileSync(canonicalPluginMd, pluginMd);
1887
- }
1888
- // Reset skill dir before write so removed reference files don't linger.
1889
- if (existsSync(skillDir)) {
1890
- rmSync(skillDir, { recursive: true, force: true });
1891
- }
1892
- mkdirSync(skillDir, { recursive: true });
1893
- // Normalise description — strip newlines and tabs to keep YAML
1894
- // frontmatter on a single line. parsePluginFrontmatter uses a
1895
- // single-line regex; an embedded newline (or `\n---\n`) would
1896
- // otherwise corrupt the frontmatter parse and silently drop body
1897
- // content from the agent prompt.
1898
- const singleLineDescription = description.replace(/[\r\n\t]+/g, " ").trim();
1899
- const escapedDescription = singleLineDescription.replace(/"/g, '\\"');
1900
- const skillMd = `---
1901
- name: ${skillName}
1902
- description: "${escapedDescription}"
1903
- publicEmbed: ${publicEmbed}
1904
- ---
1905
-
1906
- ${body}
1907
- `;
1908
- writeFileSync(resolve(skillDir, "SKILL.md"), skillMd);
1909
- let refCount = 0;
1910
- if (references.length > 0) {
1911
- const refsDir = resolve(skillDir, "references");
1912
- mkdirSync(refsDir, { recursive: true });
1913
- for (const ref of references) {
1914
- writeFileSync(resolve(refsDir, ref.filename), ref.content);
1915
- refCount++;
1916
- }
1917
- }
1918
- // Write the `.user-mirror` marker to CANONICAL first — cpSync will
1919
- // carry it into the platform-side mirror as part of the same recursive
1920
- // copy. This eliminates the post-cpSync writeFileSync race: if cpSync
1921
- // succeeds, the marker is already in target; if cpSync fails partway,
1922
- // canonical's marker is intact and the next autoDeliverUserPlugins
1923
- // call retries the copy. autoDeliverUserPlugins relies on the marker
1924
- // arriving with the source tree — never writes its own marker.
1925
- writeFileSync(resolve(canonicalPluginDir, ".user-mirror"), `pluginName=${pluginName}\nsource=${canonicalPluginDir}\n`);
1926
- // Mirror to <PLATFORM_ROOT>/plugins/<pluginName>/ so the change is
1927
- // visible to the loader without a session restart.
1928
- mkdirSync(mirrorPluginDir, { recursive: true });
1929
- cpSync(canonicalPluginDir, mirrorPluginDir, { recursive: true, force: true });
1930
- const bodyBytes = Buffer.byteLength(body, "utf-8");
1931
- console.log(`[store-skill] write pluginName=${pluginName} skillName=${skillName} publicEmbed=${publicEmbed} path=${canonicalPluginDir} bodyBytes=${bodyBytes} referenceCount=${refCount} action=${action}`);
1932
- return {
1933
- content: [{
1934
- type: "text",
1935
- text: `Skill "${skillName}" saved to plugin "${pluginName}" (${action}). publicEmbed=${publicEmbed}, references=${refCount}. Active immediately for the admin agent${publicEmbed ? "; surfaces in the public agent on next session start" : ""}.`,
1936
- }],
1937
- };
1938
- }
1939
- catch (err) {
1940
- const msg = err instanceof Error ? err.message : String(err);
1941
- console.error(`[store-skill] ERROR pluginName=${pluginName} skillName=${skillName} reason=${msg.slice(0, 120)} path=${canonicalPluginDir}`);
1942
- return { content: [{ type: "text", text: `Failed to write skill: ${msg}` }], isError: true };
1943
- }
1855
+ const result = await storeSkillToAccount({
1856
+ accountDir,
1857
+ platformRoot: PLATFORM_ROOT,
1858
+ pluginName,
1859
+ skillName,
1860
+ description,
1861
+ publicEmbed,
1862
+ body,
1863
+ references,
1864
+ });
1865
+ if (!result.ok) {
1866
+ const isCollision = result.reason === "collision-with-shipped";
1867
+ console.error(`[store-skill] op=store-skill root=account path=${result.canonicalPluginDir} resolved=false reason=${result.reason} pluginName=${pluginName} skillName=${skillName} detail=${result.detail.slice(0, 120)}`);
1868
+ const text = isCollision
1869
+ ? `pluginName "${pluginName}" collides with a shipped plugin. Choose a different pluginName.`
1870
+ : `Skill "${skillName}" was written to "${pluginName}" but did not register: ${result.detail}. Not activating.`;
1871
+ return { content: [{ type: "text", text }], isError: true };
1872
+ }
1873
+ console.log(`[store-skill] op=store-skill root=account path=${result.canonicalPluginDir} resolved=true pluginName=${pluginName} skillName=${skillName} publicEmbed=${publicEmbed} bodyBytes=${result.bodyBytes} referenceCount=${result.refCount} action=${result.action}`);
1874
+ return {
1875
+ content: [{
1876
+ type: "text",
1877
+ text: `Skill "${skillName}" saved to plugin "${pluginName}" (${result.action}). publicEmbed=${publicEmbed}, references=${result.refCount}. Active immediately for the admin agent${publicEmbed ? "; surfaces in the public agent on next session start" : ""}.`,
1878
+ }],
1879
+ };
1944
1880
  });
1945
1881
  eagerTool(server, "plugin-read", "Read a plugin definition (PLUGIN.md) or one of its reference files.", {
1946
1882
  pluginName: z.string().describe("Name of the plugin directory (e.g. 'sales', 'business-assistant')"),
@@ -1960,14 +1896,23 @@ eagerTool(server, "plugin-read", "Read a plugin definition (PLUGIN.md) or one of
1960
1896
  console.log(`[admin-skill-gate] role=admin skill=${authoringSlug} decision=block reason=content-producer-owned`);
1961
1897
  return { content: [{ type: "text", text: AUTHORING_DISPATCH_HINT }], isError: true };
1962
1898
  }
1963
- const pluginPath = resolve(PLATFORM_ROOT, "plugins", pluginName, resolvedFile);
1899
+ // Task 1962 operator-authored plugins live under the account root, not
1900
+ // the platform tree. Prefer the platform copy; fall back to the account
1901
+ // root so an operator plugin's PLUGIN.md / SKILL.md / references resolve.
1902
+ const accountPluginsDir = resolve(getAccountDir(), "plugins");
1903
+ const platformPath = resolve(PLATFORM_ROOT, "plugins", pluginName, resolvedFile);
1904
+ const accountPath = resolve(accountPluginsDir, pluginName, resolvedFile);
1905
+ const pluginPath = existsSync(platformPath) ? platformPath : accountPath;
1906
+ const pluginRootDir = existsSync(platformPath)
1907
+ ? resolve(PLATFORM_ROOT, "plugins", pluginName)
1908
+ : resolve(accountPluginsDir, pluginName);
1964
1909
  if (!existsSync(pluginPath)) {
1965
1910
  // when the agent's pluginName/file combination misses
1966
1911
  // a skill that DOES live under `plugins/*/skills/<slug>/SKILL.md`,
1967
1912
  // surface the corrected pluginName AND the canonical file path so
1968
1913
  // the next call is deterministic. Both wrong-`file` and wrong-`pluginName`
1969
1914
  // shapes feed through `computePluginReadHint`.
1970
- const hint = computePluginReadHint(PLATFORM_ROOT, pluginName, resolvedFile);
1915
+ const hint = computePluginReadHint(PLATFORM_ROOT, pluginName, resolvedFile, accountPluginsDir);
1971
1916
  const hintText = hint ? ` Did you mean pluginName="${hint.pluginName}", file="${hint.file}"?` : "";
1972
1917
  console.log(`[plugin-read] ${pluginName}/${resolvedFile} not-found hint=${hint ? hint.pluginName : "none"}`);
1973
1918
  return {
@@ -1984,7 +1929,7 @@ eagerTool(server, "plugin-read", "Read a plugin definition (PLUGIN.md) or one of
1984
1929
  // Append file inventory on default calls (PLUGIN.md) so agents can discover
1985
1930
  // skill and reference paths without guessing
1986
1931
  if (resolvedFile === "PLUGIN.md") {
1987
- const pluginRoot = resolve(PLATFORM_ROOT, "plugins", pluginName);
1932
+ const pluginRoot = pluginRootDir;
1988
1933
  const skills = [];
1989
1934
  const references = [];
1990
1935
  const scanDir = (base, prefix, target) => {
@@ -2044,7 +1989,7 @@ lifelineTool(server, "skill-find", "Find which plugin owns a skill by name. Walk
2044
1989
  if (!ACCOUNT_ID)
2045
1990
  return refuseNoAccount("skill-find");
2046
1991
  const start = Date.now();
2047
- const result = findSkillOwners(PLATFORM_ROOT, skillName);
1992
+ const result = findSkillOwners(PLATFORM_ROOT, skillName, resolve(getAccountDir(), "plugins"));
2048
1993
  const ms = Date.now() - start;
2049
1994
  console.log(`[skill-find] skillName=${skillName} result=${result.status} candidates=${result.candidates.length} ms=${ms}`);
2050
1995
  if (result.status === "unique") {
@@ -2085,7 +2030,7 @@ eagerTool(server, "skill-search", "Find skills by free-text intent when you do n
2085
2030
  if (!ACCOUNT_ID)
2086
2031
  return refuseNoAccount("skill-search");
2087
2032
  const start = Date.now();
2088
- const hits = searchSkills(PLATFORM_ROOT, query);
2033
+ const hits = searchSkills(PLATFORM_ROOT, query, 5, resolve(getAccountDir(), "plugins"));
2089
2034
  const ms = Date.now() - start;
2090
2035
  const top = hits.length > 0 ? `${hits[0].pluginName}:${hits[0].skillName}` : "none";
2091
2036
  console.log(`[skill-search] query=${JSON.stringify(query)} hits=${hits.length} top=${top} ms=${ms}`);
@@ -2134,7 +2079,7 @@ eagerTool(server, "skill-load", "Load a plugin skill's SKILL.md body by skill na
2134
2079
  }
2135
2080
  const start = Date.now();
2136
2081
  try {
2137
- const outcome = await loadSkill(PLATFORM_ROOT, skillName);
2082
+ const outcome = await loadSkill(PLATFORM_ROOT, skillName, resolve(getAccountDir(), "plugins"));
2138
2083
  if (outcome.status === "ambiguous") {
2139
2084
  const ms = Date.now() - start;
2140
2085
  console.log(`[skill-load] skillName=${skillName} result=ambiguous pluginName=none file=none bodyBytes=0 ms=${ms}`);