@rubytech/create-realagent 1.0.406

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 (817) hide show
  1. package/dist/index.js +915 -0
  2. package/dist/uninstall.js +569 -0
  3. package/package.json +31 -0
  4. package/payload/maxy/package.json +9 -0
  5. package/payload/maxy/public/assets/ChatInput-7sHhJaNJ.js +42 -0
  6. package/payload/maxy/public/assets/ChatInput-oLFewltq.css +1 -0
  7. package/payload/maxy/public/assets/admin-k0izNYS1.js +352 -0
  8. package/payload/maxy/public/assets/cormorant-cyrillic-300-normal-CzPHYadL.woff +0 -0
  9. package/payload/maxy/public/assets/cormorant-cyrillic-300-normal-DFUoTmrg.woff2 +0 -0
  10. package/payload/maxy/public/assets/cormorant-cyrillic-400-normal-C8QS47vb.woff2 +0 -0
  11. package/payload/maxy/public/assets/cormorant-cyrillic-400-normal-D3EsxgFc.woff +0 -0
  12. package/payload/maxy/public/assets/cormorant-cyrillic-500-normal-B7dJQtg-.woff +0 -0
  13. package/payload/maxy/public/assets/cormorant-cyrillic-500-normal-BLlg2W5x.woff2 +0 -0
  14. package/payload/maxy/public/assets/cormorant-cyrillic-ext-300-normal-BXl3lXsi.woff2 +0 -0
  15. package/payload/maxy/public/assets/cormorant-cyrillic-ext-300-normal-DmxSOTe3.woff +0 -0
  16. package/payload/maxy/public/assets/cormorant-cyrillic-ext-400-normal-Bgrpe4p1.woff +0 -0
  17. package/payload/maxy/public/assets/cormorant-cyrillic-ext-400-normal-BlcaxZtM.woff2 +0 -0
  18. package/payload/maxy/public/assets/cormorant-cyrillic-ext-500-normal-CdQuyvtc.woff +0 -0
  19. package/payload/maxy/public/assets/cormorant-cyrillic-ext-500-normal-pZw22qtS.woff2 +0 -0
  20. package/payload/maxy/public/assets/cormorant-latin-300-normal-CJ5dfen0.woff2 +0 -0
  21. package/payload/maxy/public/assets/cormorant-latin-300-normal-DQZObO_3.woff +0 -0
  22. package/payload/maxy/public/assets/cormorant-latin-400-normal-BGH8Vunh.woff2 +0 -0
  23. package/payload/maxy/public/assets/cormorant-latin-400-normal-C3_-2Ua-.woff +0 -0
  24. package/payload/maxy/public/assets/cormorant-latin-500-normal-Dj3SQ6fR.woff +0 -0
  25. package/payload/maxy/public/assets/cormorant-latin-500-normal-EBdSCOD3.woff2 +0 -0
  26. package/payload/maxy/public/assets/cormorant-latin-ext-300-normal-CkiUx0UG.woff +0 -0
  27. package/payload/maxy/public/assets/cormorant-latin-ext-300-normal-De3D72RL.woff2 +0 -0
  28. package/payload/maxy/public/assets/cormorant-latin-ext-400-normal-DuQ88yz3.woff2 +0 -0
  29. package/payload/maxy/public/assets/cormorant-latin-ext-400-normal-DuXFa1Dr.woff +0 -0
  30. package/payload/maxy/public/assets/cormorant-latin-ext-500-normal-AH9qog1s.woff2 +0 -0
  31. package/payload/maxy/public/assets/cormorant-latin-ext-500-normal-DAuUCO41.woff +0 -0
  32. package/payload/maxy/public/assets/cormorant-vietnamese-300-normal-BVqIp_mg.woff2 +0 -0
  33. package/payload/maxy/public/assets/cormorant-vietnamese-300-normal-CEMS9Pw-.woff +0 -0
  34. package/payload/maxy/public/assets/cormorant-vietnamese-400-normal-C-RiYxEf.woff2 +0 -0
  35. package/payload/maxy/public/assets/cormorant-vietnamese-400-normal-DmUuA7Y2.woff +0 -0
  36. package/payload/maxy/public/assets/cormorant-vietnamese-500-normal-DsPuwQHi.woff2 +0 -0
  37. package/payload/maxy/public/assets/cormorant-vietnamese-500-normal-tGBW_mI7.woff +0 -0
  38. package/payload/maxy/public/assets/dm-sans-latin-400-normal-BwCSEQnW.woff +0 -0
  39. package/payload/maxy/public/assets/dm-sans-latin-400-normal-CW0RaeGs.woff2 +0 -0
  40. package/payload/maxy/public/assets/dm-sans-latin-500-normal-B9HHJjqV.woff2 +0 -0
  41. package/payload/maxy/public/assets/dm-sans-latin-500-normal-Dr3UlScf.woff +0 -0
  42. package/payload/maxy/public/assets/dm-sans-latin-ext-400-normal-BjWJ59Pq.woff +0 -0
  43. package/payload/maxy/public/assets/dm-sans-latin-ext-400-normal-BtiwyxMk.woff2 +0 -0
  44. package/payload/maxy/public/assets/dm-sans-latin-ext-500-normal-BJfUCQsA.woff2 +0 -0
  45. package/payload/maxy/public/assets/dm-sans-latin-ext-500-normal-DR84L5F-.woff +0 -0
  46. package/payload/maxy/public/assets/public-3Y1Xk7cO.js +5 -0
  47. package/payload/maxy/public/brand/claude.png +0 -0
  48. package/payload/maxy/public/brand/maxy-black.png +0 -0
  49. package/payload/maxy/public/brand/maxy-monochrome.png +0 -0
  50. package/payload/maxy/public/brand/maxy.png +0 -0
  51. package/payload/maxy/public/brand-constants.json +8 -0
  52. package/payload/maxy/public/brand-defaults.css +12 -0
  53. package/payload/maxy/public/favicon.ico +0 -0
  54. package/payload/maxy/public/index.html +16 -0
  55. package/payload/maxy/public/public.html +16 -0
  56. package/payload/maxy/public/robots.txt +5 -0
  57. package/payload/maxy/public/vnc-popout.html +59 -0
  58. package/payload/maxy/server-init.cjs +115 -0
  59. package/payload/maxy/server.js +9876 -0
  60. package/payload/platform/config/brand.json +42 -0
  61. package/payload/platform/config/cloudflared.yml +17 -0
  62. package/payload/platform/knowledge/maxy.md +772 -0
  63. package/payload/platform/neo4j/migrations/001-backfill-scope.cypher +30 -0
  64. package/payload/platform/neo4j/schema.cypher +557 -0
  65. package/payload/platform/package-lock.json +2534 -0
  66. package/payload/platform/package.json +20 -0
  67. package/payload/platform/plugins/admin/PLUGIN.md +47 -0
  68. package/payload/platform/plugins/admin/hooks/agent-creation-approval.sh +153 -0
  69. package/payload/platform/plugins/admin/hooks/agent-creation-gate.sh +309 -0
  70. package/payload/platform/plugins/admin/hooks/agent-creation-post.sh +157 -0
  71. package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +49 -0
  72. package/payload/platform/plugins/admin/hooks/session-start.sh +88 -0
  73. package/payload/platform/plugins/admin/hooks/test-agent-creation-gate.sh +878 -0
  74. package/payload/platform/plugins/admin/mcp/dist/index.d.ts +2 -0
  75. package/payload/platform/plugins/admin/mcp/dist/index.d.ts.map +1 -0
  76. package/payload/platform/plugins/admin/mcp/dist/index.js +616 -0
  77. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -0
  78. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.d.ts +5 -0
  79. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.d.ts.map +1 -0
  80. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +34 -0
  81. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -0
  82. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts +23 -0
  83. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts.map +1 -0
  84. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js +160 -0
  85. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js.map +1 -0
  86. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.test.d.ts +2 -0
  87. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.test.d.ts.map +1 -0
  88. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.test.js +224 -0
  89. package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.test.js.map +1 -0
  90. package/payload/platform/plugins/admin/mcp/package.json +21 -0
  91. package/payload/platform/plugins/admin/references/chat-ui-guide.md +31 -0
  92. package/payload/platform/plugins/admin/references/contextual-ui.md +107 -0
  93. package/payload/platform/plugins/admin/skills/access-manager/SKILL.md +28 -0
  94. package/payload/platform/plugins/admin/skills/access-manager/references/operations.md +197 -0
  95. package/payload/platform/plugins/admin/skills/business-profile/SKILL.md +42 -0
  96. package/payload/platform/plugins/admin/skills/datetime/SKILL.md +91 -0
  97. package/payload/platform/plugins/admin/skills/onboarding/skill.md +136 -0
  98. package/payload/platform/plugins/admin/skills/plugin-management/skill.md +76 -0
  99. package/payload/platform/plugins/admin/skills/public-agent-manager/skill.md +212 -0
  100. package/payload/platform/plugins/admin/skills/qr-code/SKILL.md +35 -0
  101. package/payload/platform/plugins/admin/skills/qr-code/references/data-formats.md +113 -0
  102. package/payload/platform/plugins/admin/skills/skill-builder/SKILL.md +112 -0
  103. package/payload/platform/plugins/admin/skills/skill-builder/references/lean-pattern.md +110 -0
  104. package/payload/platform/plugins/admin/skills/specialist-management/skill.md +44 -0
  105. package/payload/platform/plugins/admin/skills/stream-log-review/SKILL.md +40 -0
  106. package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md +161 -0
  107. package/payload/platform/plugins/admin/skills/update-knowledge/skill.md +47 -0
  108. package/payload/platform/plugins/anthropic/PLUGIN.md +38 -0
  109. package/payload/platform/plugins/anthropic/references/setup-guide.md +114 -0
  110. package/payload/platform/plugins/anthropic/skills/get-api-key.md +57 -0
  111. package/payload/platform/plugins/business-assistant/PLUGIN.md +59 -0
  112. package/payload/platform/plugins/business-assistant/references/crm.md +112 -0
  113. package/payload/platform/plugins/business-assistant/references/document-management.md +96 -0
  114. package/payload/platform/plugins/business-assistant/references/escalation.md +126 -0
  115. package/payload/platform/plugins/business-assistant/references/invoicing.md +163 -0
  116. package/payload/platform/plugins/business-assistant/references/profiling.md +50 -0
  117. package/payload/platform/plugins/business-assistant/references/quoting.md +56 -0
  118. package/payload/platform/plugins/business-assistant/references/scheduling.md +127 -0
  119. package/payload/platform/plugins/business-assistant/references/task-management.md +155 -0
  120. package/payload/platform/plugins/cloudflare/PLUGIN.md +48 -0
  121. package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts +2 -0
  122. package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts.map +1 -0
  123. package/payload/platform/plugins/cloudflare/mcp/dist/index.js +698 -0
  124. package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -0
  125. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +101 -0
  126. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -0
  127. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +525 -0
  128. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -0
  129. package/payload/platform/plugins/cloudflare/mcp/package.json +19 -0
  130. package/payload/platform/plugins/cloudflare/references/setup-guide.md +126 -0
  131. package/payload/platform/plugins/cloudflare/skills/setup-tunnel.md +217 -0
  132. package/payload/platform/plugins/contacts/PLUGIN.md +20 -0
  133. package/payload/platform/plugins/contacts/mcp/dist/index.d.ts +2 -0
  134. package/payload/platform/plugins/contacts/mcp/dist/index.d.ts.map +1 -0
  135. package/payload/platform/plugins/contacts/mcp/dist/index.js +210 -0
  136. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -0
  137. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts +5 -0
  138. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts.map +1 -0
  139. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +34 -0
  140. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -0
  141. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +19 -0
  142. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -0
  143. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +68 -0
  144. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -0
  145. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.d.ts +12 -0
  146. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.d.ts.map +1 -0
  147. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.js +35 -0
  148. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.js.map +1 -0
  149. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts +22 -0
  150. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts.map +1 -0
  151. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js +47 -0
  152. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js.map +1 -0
  153. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +20 -0
  154. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -0
  155. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +57 -0
  156. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -0
  157. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts +13 -0
  158. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts.map +1 -0
  159. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js +54 -0
  160. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js.map +1 -0
  161. package/payload/platform/plugins/contacts/mcp/package.json +19 -0
  162. package/payload/platform/plugins/deep-research/PLUGIN.md +14 -0
  163. package/payload/platform/plugins/deep-research/skills/deep-research/SKILL.md +46 -0
  164. package/payload/platform/plugins/deep-research/skills/deep-research/references/citation-styles.md +52 -0
  165. package/payload/platform/plugins/deep-research/skills/deep-research/references/research-modes.md +22 -0
  166. package/payload/platform/plugins/deep-research/skills/deep-research/references/search-strategy.md +24 -0
  167. package/payload/platform/plugins/docs/PLUGIN.md +44 -0
  168. package/payload/platform/plugins/docs/references/access-control.md +51 -0
  169. package/payload/platform/plugins/docs/references/contacts-guide.md +59 -0
  170. package/payload/platform/plugins/docs/references/deployment.md +71 -0
  171. package/payload/platform/plugins/docs/references/getting-started.md +45 -0
  172. package/payload/platform/plugins/docs/references/memory-guide.md +87 -0
  173. package/payload/platform/plugins/docs/references/platform.md +64 -0
  174. package/payload/platform/plugins/docs/references/plugins-guide.md +83 -0
  175. package/payload/platform/plugins/docs/references/settings.md +89 -0
  176. package/payload/platform/plugins/docs/references/telegram-guide.md +58 -0
  177. package/payload/platform/plugins/docs/references/troubleshooting.md +88 -0
  178. package/payload/platform/plugins/documents/mcp/dist/index.d.ts +2 -0
  179. package/payload/platform/plugins/documents/mcp/dist/index.d.ts.map +1 -0
  180. package/payload/platform/plugins/documents/mcp/dist/index.js +98 -0
  181. package/payload/platform/plugins/documents/mcp/dist/index.js.map +1 -0
  182. package/payload/platform/plugins/email/PLUGIN.md +222 -0
  183. package/payload/platform/plugins/email/mcp/dist/index.d.ts +2 -0
  184. package/payload/platform/plugins/email/mcp/dist/index.d.ts.map +1 -0
  185. package/payload/platform/plugins/email/mcp/dist/index.js +288 -0
  186. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -0
  187. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +111 -0
  188. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -0
  189. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +357 -0
  190. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -0
  191. package/payload/platform/plugins/email/mcp/dist/lib/embedding.d.ts +2 -0
  192. package/payload/platform/plugins/email/mcp/dist/lib/embedding.d.ts.map +1 -0
  193. package/payload/platform/plugins/email/mcp/dist/lib/embedding.js +24 -0
  194. package/payload/platform/plugins/email/mcp/dist/lib/embedding.js.map +1 -0
  195. package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts +87 -0
  196. package/payload/platform/plugins/email/mcp/dist/lib/graph.d.ts.map +1 -0
  197. package/payload/platform/plugins/email/mcp/dist/lib/graph.js +324 -0
  198. package/payload/platform/plugins/email/mcp/dist/lib/graph.js.map +1 -0
  199. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +215 -0
  200. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -0
  201. package/payload/platform/plugins/email/mcp/dist/lib/imap.js +735 -0
  202. package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -0
  203. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.d.ts +5 -0
  204. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.d.ts.map +1 -0
  205. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +34 -0
  206. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -0
  207. package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts +25 -0
  208. package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts.map +1 -0
  209. package/payload/platform/plugins/email/mcp/dist/lib/providers.js +116 -0
  210. package/payload/platform/plugins/email/mcp/dist/lib/providers.js.map +1 -0
  211. package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +29 -0
  212. package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts.map +1 -0
  213. package/payload/platform/plugins/email/mcp/dist/lib/screening.js +101 -0
  214. package/payload/platform/plugins/email/mcp/dist/lib/screening.js.map +1 -0
  215. package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts +21 -0
  216. package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts.map +1 -0
  217. package/payload/platform/plugins/email/mcp/dist/lib/smtp.js +77 -0
  218. package/payload/platform/plugins/email/mcp/dist/lib/smtp.js.map +1 -0
  219. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.d.ts +38 -0
  220. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.d.ts.map +1 -0
  221. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +844 -0
  222. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -0
  223. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +25 -0
  224. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts.map +1 -0
  225. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +214 -0
  226. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -0
  227. package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.d.ts +19 -0
  228. package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.d.ts.map +1 -0
  229. package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.js +151 -0
  230. package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.js.map +1 -0
  231. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts +22 -0
  232. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.d.ts.map +1 -0
  233. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js +188 -0
  234. package/payload/platform/plugins/email/mcp/dist/tools/email-graph-query.js.map +1 -0
  235. package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.d.ts +15 -0
  236. package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.d.ts.map +1 -0
  237. package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.js +142 -0
  238. package/payload/platform/plugins/email/mcp/dist/tools/email-otp-extract.js.map +1 -0
  239. package/payload/platform/plugins/email/mcp/dist/tools/email-read.d.ts +14 -0
  240. package/payload/platform/plugins/email/mcp/dist/tools/email-read.d.ts.map +1 -0
  241. package/payload/platform/plugins/email/mcp/dist/tools/email-read.js +75 -0
  242. package/payload/platform/plugins/email/mcp/dist/tools/email-read.js.map +1 -0
  243. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts +10 -0
  244. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts.map +1 -0
  245. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js +83 -0
  246. package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js.map +1 -0
  247. package/payload/platform/plugins/email/mcp/dist/tools/email-search.d.ts +15 -0
  248. package/payload/platform/plugins/email/mcp/dist/tools/email-search.d.ts.map +1 -0
  249. package/payload/platform/plugins/email/mcp/dist/tools/email-search.js +63 -0
  250. package/payload/platform/plugins/email/mcp/dist/tools/email-search.js.map +1 -0
  251. package/payload/platform/plugins/email/mcp/dist/tools/email-send.d.ts +10 -0
  252. package/payload/platform/plugins/email/mcp/dist/tools/email-send.d.ts.map +1 -0
  253. package/payload/platform/plugins/email/mcp/dist/tools/email-send.js +25 -0
  254. package/payload/platform/plugins/email/mcp/dist/tools/email-send.js.map +1 -0
  255. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts +22 -0
  256. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts.map +1 -0
  257. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js +183 -0
  258. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js.map +1 -0
  259. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts +6 -0
  260. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -0
  261. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +43 -0
  262. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -0
  263. package/payload/platform/plugins/email/mcp/package.json +23 -0
  264. package/payload/platform/plugins/memory/PLUGIN.md +52 -0
  265. package/payload/platform/plugins/memory/mcp/dist/index.d.ts +2 -0
  266. package/payload/platform/plugins/memory/mcp/dist/index.d.ts.map +1 -0
  267. package/payload/platform/plugins/memory/mcp/dist/index.js +899 -0
  268. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -0
  269. package/payload/platform/plugins/memory/mcp/dist/lib/attachments.d.ts +37 -0
  270. package/payload/platform/plugins/memory/mcp/dist/lib/attachments.d.ts.map +1 -0
  271. package/payload/platform/plugins/memory/mcp/dist/lib/attachments.js +68 -0
  272. package/payload/platform/plugins/memory/mcp/dist/lib/attachments.js.map +1 -0
  273. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.d.ts +31 -0
  274. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.d.ts.map +1 -0
  275. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js +62 -0
  276. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js.map +1 -0
  277. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts +3 -0
  278. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts.map +1 -0
  279. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js +29 -0
  280. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js.map +1 -0
  281. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts +5 -0
  282. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts.map +1 -0
  283. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +34 -0
  284. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -0
  285. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts +61 -0
  286. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts.map +1 -0
  287. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js +266 -0
  288. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js.map +1 -0
  289. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.test.d.ts +2 -0
  290. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.test.d.ts.map +1 -0
  291. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.test.js +233 -0
  292. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.test.js.map +1 -0
  293. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +19 -0
  294. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts.map +1 -0
  295. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +98 -0
  296. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -0
  297. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.d.ts +17 -0
  298. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.d.ts.map +1 -0
  299. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.js +92 -0
  300. package/payload/platform/plugins/memory/mcp/dist/tools/memory-edit-attachment.js.map +1 -0
  301. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.d.ts +40 -0
  302. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.d.ts.map +1 -0
  303. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +116 -0
  304. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js.map +1 -0
  305. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.d.ts +20 -0
  306. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.d.ts.map +1 -0
  307. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.js +108 -0
  308. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-web.js.map +1 -0
  309. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +35 -0
  310. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -0
  311. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +233 -0
  312. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -0
  313. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.d.ts +17 -0
  314. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.d.ts.map +1 -0
  315. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +86 -0
  316. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -0
  317. package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.d.ts +12 -0
  318. package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.d.ts.map +1 -0
  319. package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.js +100 -0
  320. package/payload/platform/plugins/memory/mcp/dist/tools/memory-read-attachment.js.map +1 -0
  321. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts +8 -0
  322. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -0
  323. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +71 -0
  324. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -0
  325. package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.d.ts +13 -0
  326. package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.d.ts.map +1 -0
  327. package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.js +63 -0
  328. package/payload/platform/plugins/memory/mcp/dist/tools/memory-rename-attachment.js.map +1 -0
  329. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts +34 -0
  330. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -0
  331. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +380 -0
  332. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -0
  333. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts +13 -0
  334. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -0
  335. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +62 -0
  336. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -0
  337. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +21 -0
  338. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -0
  339. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +60 -0
  340. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -0
  341. package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.d.ts +13 -0
  342. package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.d.ts.map +1 -0
  343. package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.js +18 -0
  344. package/payload/platform/plugins/memory/mcp/dist/tools/profile-delete.js.map +1 -0
  345. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts +41 -0
  346. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts.map +1 -0
  347. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +192 -0
  348. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -0
  349. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +21 -0
  350. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -0
  351. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +235 -0
  352. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -0
  353. package/payload/platform/plugins/memory/mcp/package.json +19 -0
  354. package/payload/platform/plugins/memory/references/schema-base.md +102 -0
  355. package/payload/platform/plugins/memory/references/schema-creator.md +35 -0
  356. package/payload/platform/plugins/memory/references/schema-estate-agent.md +35 -0
  357. package/payload/platform/plugins/memory/references/schema-food-beverage.md +32 -0
  358. package/payload/platform/plugins/memory/references/schema-hospitality.md +31 -0
  359. package/payload/platform/plugins/memory/references/schema-logistics.md +30 -0
  360. package/payload/platform/plugins/memory/references/schema-professional-services.md +33 -0
  361. package/payload/platform/plugins/memory/references/schema-retail.md +33 -0
  362. package/payload/platform/plugins/memory/references/schema-trades.md +36 -0
  363. package/payload/platform/plugins/memory/skills/conversational-memory.md +99 -0
  364. package/payload/platform/plugins/projects/PLUGIN.md +87 -0
  365. package/payload/platform/plugins/projects/references/investigation.md +63 -0
  366. package/payload/platform/plugins/projects/references/retrospective.md +71 -0
  367. package/payload/platform/plugins/projects/references/review.md +51 -0
  368. package/payload/platform/plugins/projects/references/sprint.md +168 -0
  369. package/payload/platform/plugins/sales/PLUGIN.md +106 -0
  370. package/payload/platform/plugins/sales/references/close-tracking.md +69 -0
  371. package/payload/platform/plugins/sales/references/comparisons.md +99 -0
  372. package/payload/platform/plugins/sales/references/competitive-positioning.md +51 -0
  373. package/payload/platform/plugins/sales/references/faq.md +62 -0
  374. package/payload/platform/plugins/sales/references/objection-handling.md +157 -0
  375. package/payload/platform/plugins/sales/references/pricing.md +71 -0
  376. package/payload/platform/plugins/scheduling/PLUGIN.md +79 -0
  377. package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts +2 -0
  378. package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts.map +1 -0
  379. package/payload/platform/plugins/scheduling/mcp/dist/index.js +201 -0
  380. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -0
  381. package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.d.ts +2 -0
  382. package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.d.ts.map +1 -0
  383. package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.js +19 -0
  384. package/payload/platform/plugins/scheduling/mcp/dist/lib/embedding.js.map +1 -0
  385. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts +5 -0
  386. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts.map +1 -0
  387. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +34 -0
  388. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -0
  389. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +20 -0
  390. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -0
  391. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +475 -0
  392. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -0
  393. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.d.ts +7 -0
  394. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.d.ts.map +1 -0
  395. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js +23 -0
  396. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-cancel.js.map +1 -0
  397. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +23 -0
  398. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -0
  399. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +107 -0
  400. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -0
  401. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts +25 -0
  402. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.d.ts.map +1 -0
  403. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js +53 -0
  404. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-get.js.map +1 -0
  405. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts +20 -0
  406. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts.map +1 -0
  407. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js +58 -0
  408. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js.map +1 -0
  409. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts +18 -0
  410. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -0
  411. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +167 -0
  412. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -0
  413. package/payload/platform/plugins/scheduling/mcp/package.json +21 -0
  414. package/payload/platform/plugins/tasks/.claude-plugin/plugin.json +18 -0
  415. package/payload/platform/plugins/tasks/.mcp.json +13 -0
  416. package/payload/platform/plugins/tasks/PLUGIN.md +56 -0
  417. package/payload/platform/plugins/tasks/mcp/dist/index.d.ts +2 -0
  418. package/payload/platform/plugins/tasks/mcp/dist/index.d.ts.map +1 -0
  419. package/payload/platform/plugins/tasks/mcp/dist/index.js +287 -0
  420. package/payload/platform/plugins/tasks/mcp/dist/index.js.map +1 -0
  421. package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.d.ts +7 -0
  422. package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.d.ts.map +1 -0
  423. package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.js +24 -0
  424. package/payload/platform/plugins/tasks/mcp/dist/lib/embeddings.js.map +1 -0
  425. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.d.ts +5 -0
  426. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.d.ts.map +1 -0
  427. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +34 -0
  428. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -0
  429. package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.d.ts +20 -0
  430. package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.d.ts.map +1 -0
  431. package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.js +37 -0
  432. package/payload/platform/plugins/tasks/mcp/dist/tools/session-list.js.map +1 -0
  433. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts +6 -0
  434. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts.map +1 -0
  435. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.js +13 -0
  436. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.js.map +1 -0
  437. package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.d.ts +16 -0
  438. package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.d.ts.map +1 -0
  439. package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.js +33 -0
  440. package/payload/platform/plugins/tasks/mcp/dist/tools/task-complete.js.map +1 -0
  441. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts +18 -0
  442. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts.map +1 -0
  443. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js +55 -0
  444. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js.map +1 -0
  445. package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.d.ts +19 -0
  446. package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.d.ts.map +1 -0
  447. package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.js +51 -0
  448. package/payload/platform/plugins/tasks/mcp/dist/tools/task-get.js.map +1 -0
  449. package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.d.ts +18 -0
  450. package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.d.ts.map +1 -0
  451. package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.js +66 -0
  452. package/payload/platform/plugins/tasks/mcp/dist/tools/task-list.js.map +1 -0
  453. package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.d.ts +21 -0
  454. package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.d.ts.map +1 -0
  455. package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.js +54 -0
  456. package/payload/platform/plugins/tasks/mcp/dist/tools/task-ready.js.map +1 -0
  457. package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.d.ts +12 -0
  458. package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.d.ts.map +1 -0
  459. package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.js +31 -0
  460. package/payload/platform/plugins/tasks/mcp/dist/tools/task-relate.js.map +1 -0
  461. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts +11 -0
  462. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts.map +1 -0
  463. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js +62 -0
  464. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js.map +1 -0
  465. package/payload/platform/plugins/tasks/mcp/package.json +20 -0
  466. package/payload/platform/plugins/waitlist/PLUGIN.md +63 -0
  467. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts +2 -0
  468. package/payload/platform/plugins/waitlist/mcp/dist/index.d.ts.map +1 -0
  469. package/payload/platform/plugins/waitlist/mcp/dist/index.js +276 -0
  470. package/payload/platform/plugins/waitlist/mcp/dist/index.js.map +1 -0
  471. package/payload/platform/plugins/waitlist/mcp/dist/lib/anthropic.d.ts +23 -0
  472. package/payload/platform/plugins/waitlist/mcp/dist/lib/anthropic.d.ts.map +1 -0
  473. package/payload/platform/plugins/waitlist/mcp/dist/lib/anthropic.js +115 -0
  474. package/payload/platform/plugins/waitlist/mcp/dist/lib/anthropic.js.map +1 -0
  475. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts +3 -0
  476. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.d.ts.map +1 -0
  477. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js +48 -0
  478. package/payload/platform/plugins/waitlist/mcp/dist/lib/embedding.js.map +1 -0
  479. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts +5 -0
  480. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts.map +1 -0
  481. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +34 -0
  482. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -0
  483. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts +12 -0
  484. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.d.ts.map +1 -0
  485. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js +197 -0
  486. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-extract.js.map +1 -0
  487. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts +22 -0
  488. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.d.ts.map +1 -0
  489. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js +57 -0
  490. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-list.js.map +1 -0
  491. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +60 -0
  492. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts.map +1 -0
  493. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +342 -0
  494. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +1 -0
  495. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts +18 -0
  496. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.d.ts.map +1 -0
  497. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js +80 -0
  498. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-review.js.map +1 -0
  499. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts +27 -0
  500. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.d.ts.map +1 -0
  501. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js +40 -0
  502. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-scan.js.map +1 -0
  503. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts +31 -0
  504. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +1 -0
  505. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +336 -0
  506. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -0
  507. package/payload/platform/plugins/waitlist/mcp/package.json +21 -0
  508. package/payload/platform/plugins/workflows/.claude-plugin/plugin.json +17 -0
  509. package/payload/platform/plugins/workflows/.mcp.json +12 -0
  510. package/payload/platform/plugins/workflows/PLUGIN.md +187 -0
  511. package/payload/platform/plugins/workflows/mcp/dist/index.d.ts +2 -0
  512. package/payload/platform/plugins/workflows/mcp/dist/index.d.ts.map +1 -0
  513. package/payload/platform/plugins/workflows/mcp/dist/index.js +408 -0
  514. package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -0
  515. package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.d.ts +2 -0
  516. package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.d.ts.map +1 -0
  517. package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.js +19 -0
  518. package/payload/platform/plugins/workflows/mcp/dist/lib/embeddings.js.map +1 -0
  519. package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +48 -0
  520. package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts.map +1 -0
  521. package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.js +281 -0
  522. package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.js.map +1 -0
  523. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.d.ts +5 -0
  524. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.d.ts.map +1 -0
  525. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +34 -0
  526. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -0
  527. package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.d.ts +71 -0
  528. package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.d.ts.map +1 -0
  529. package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.js +183 -0
  530. package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.js.map +1 -0
  531. package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.d.ts +24 -0
  532. package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.d.ts.map +1 -0
  533. package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.js +60 -0
  534. package/payload/platform/plugins/workflows/mcp/dist/lib/validate-capabilities.js.map +1 -0
  535. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.d.ts +35 -0
  536. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.d.ts.map +1 -0
  537. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +124 -0
  538. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -0
  539. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.d.ts +6 -0
  540. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.d.ts.map +1 -0
  541. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.js +25 -0
  542. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-delete.js.map +1 -0
  543. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts +50 -0
  544. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts.map +1 -0
  545. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +383 -0
  546. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -0
  547. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.d.ts +27 -0
  548. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.d.ts.map +1 -0
  549. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.js +49 -0
  550. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-get.js.map +1 -0
  551. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.d.ts +16 -0
  552. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.d.ts.map +1 -0
  553. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.js +43 -0
  554. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-list.js.map +1 -0
  555. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.d.ts +27 -0
  556. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.d.ts.map +1 -0
  557. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.js +64 -0
  558. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-runs.js.map +1 -0
  559. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.d.ts +11 -0
  560. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.d.ts.map +1 -0
  561. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +162 -0
  562. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -0
  563. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.d.ts +13 -0
  564. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.d.ts.map +1 -0
  565. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.js +53 -0
  566. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-validate.js.map +1 -0
  567. package/payload/platform/plugins/workflows/mcp/package.json +20 -0
  568. package/payload/platform/plugins/workflows/mcp/test-runner.mjs +710 -0
  569. package/payload/platform/plugins/workflows/mcp/test-workflows.sh +73 -0
  570. package/payload/platform/plugins/workflows/skills/workflow-manager/skill.md +88 -0
  571. package/payload/platform/scripts/hooks/pre-commit +111 -0
  572. package/payload/platform/scripts/resume-tunnel.sh +86 -0
  573. package/payload/platform/scripts/seed-neo4j.sh +273 -0
  574. package/payload/platform/scripts/setup.sh +177 -0
  575. package/payload/platform/scripts/vnc.sh +127 -0
  576. package/payload/platform/templates/account.json +13 -0
  577. package/payload/platform/templates/agents/admin/AGENTS.md +10 -0
  578. package/payload/platform/templates/agents/admin/IDENTITY.md +124 -0
  579. package/payload/platform/templates/agents/admin/LEARNINGS.md +21 -0
  580. package/payload/platform/templates/agents/admin/SOUL.md +1 -0
  581. package/payload/platform/templates/agents/public/IDENTITY.md +18 -0
  582. package/payload/platform/templates/agents/public/SOUL.md +7 -0
  583. package/payload/platform/templates/agents/public/config.json +9 -0
  584. package/payload/platform/templates/specialists/.claude-plugin/plugin.json +4 -0
  585. package/payload/platform/templates/specialists/agents/admin-specialist.md +13 -0
  586. package/payload/platform/templates/specialists/agents/browser-specialist.md +35 -0
  587. package/payload/platform/templates/specialists/agents/document-specialist.md +70 -0
  588. package/payload/platform/templates/specialists/agents/memory-specialist.md +13 -0
  589. package/payload/platform/templates/specialists/agents/researcher.md +52 -0
  590. package/payload/platform/templates/specialists/agents/scheduler.md +11 -0
  591. package/payload/platform/tsconfig.base.json +18 -0
  592. package/payload/premium-plugins/real-agency/PLUGIN.md +101 -0
  593. package/payload/premium-plugins/real-agency/references/agent-performance-atomic-habits.md +52 -0
  594. package/payload/premium-plugins/real-agency/references/agent-performance-daily-routine-scorecard.md +104 -0
  595. package/payload/premium-plugins/real-agency/references/agent-performance-hp6-model.md +63 -0
  596. package/payload/premium-plugins/real-agency/references/agent-performance-twelve-week-year.md +71 -0
  597. package/payload/premium-plugins/real-agency/references/bespoke-coaching-coaching-boundaries.md +56 -0
  598. package/payload/premium-plugins/real-agency/references/bespoke-coaching-feedback-framework.md +61 -0
  599. package/payload/premium-plugins/real-agency/references/bespoke-coaching-performance-framework.md +109 -0
  600. package/payload/premium-plugins/real-agency/references/bootstrap-onboarding-flow.md +63 -0
  601. package/payload/premium-plugins/real-agency/references/business-growth-buy-back-your-time.md +37 -0
  602. package/payload/premium-plugins/real-agency/references/business-growth-firewave-gost-scorecards.md +14 -0
  603. package/payload/premium-plugins/real-agency/references/business-growth-keller-org-model.md +17 -0
  604. package/payload/premium-plugins/real-agency/references/business-growth-lencioni-team-models.md +22 -0
  605. package/payload/premium-plugins/real-agency/references/business-growth-listing-management-system.md +11 -0
  606. package/payload/premium-plugins/real-agency/references/business-growth-net-figure-form.md +11 -0
  607. package/payload/premium-plugins/real-agency/references/business-growth-serhant-bizinbox-notes.md +13 -0
  608. package/payload/premium-plugins/real-agency/references/business-growth-team-roles-commission.md +14 -0
  609. package/payload/premium-plugins/real-agency/references/business-growth-va-2026-ops.md +43 -0
  610. package/payload/premium-plugins/real-agency/references/business-growth-wingman-structure.md +13 -0
  611. package/payload/premium-plugins/real-agency/references/business-operations-crm-systems.md +57 -0
  612. package/payload/premium-plugins/real-agency/references/business-operations-hiring-guide.md +59 -0
  613. package/payload/premium-plugins/real-agency/references/business-operations-impact-framework.md +47 -0
  614. package/payload/premium-plugins/real-agency/references/business-operations-minutes-equal-money.md +55 -0
  615. package/payload/premium-plugins/real-agency/references/business-operations-team-management.md +48 -0
  616. package/payload/premium-plugins/real-agency/references/buyer-management-buyer-qualification-questions.md +16 -0
  617. package/payload/premium-plugins/real-agency/references/buyer-management-buyer-qualification.md +59 -0
  618. package/payload/premium-plugins/real-agency/references/buyer-management-buyer-scripts.md +63 -0
  619. package/payload/premium-plugins/real-agency/references/buyer-management-buyer-working-scripts.md +54 -0
  620. package/payload/premium-plugins/real-agency/references/buyer-management-feedback-collection.md +42 -0
  621. package/payload/premium-plugins/real-agency/references/buyer-management-offer-capture.md +38 -0
  622. package/payload/premium-plugins/real-agency/references/buyer-management-viewing-booking.md +32 -0
  623. package/payload/premium-plugins/real-agency/references/buyer-management-viewing-management.md +52 -0
  624. package/payload/premium-plugins/real-agency/references/buyer-seller-guides-care-fees-guide.md +68 -0
  625. package/payload/premium-plugins/real-agency/references/buyer-seller-guides-divorce-sales-guide.md +61 -0
  626. package/payload/premium-plugins/real-agency/references/buyer-seller-guides-downsizing-guide.md +45 -0
  627. package/payload/premium-plugins/real-agency/references/buyer-seller-guides-first-time-buyers.md +92 -0
  628. package/payload/premium-plugins/real-agency/references/buyer-seller-guides-first-time-sellers.md +78 -0
  629. package/payload/premium-plugins/real-agency/references/buyer-seller-guides-probate-guide.md +53 -0
  630. package/payload/premium-plugins/real-agency/references/buyer-seller-guides-upsizing-guide.md +41 -0
  631. package/payload/premium-plugins/real-agency/references/coaching-toolkit-coaching-exercises.md +86 -0
  632. package/payload/premium-plugins/real-agency/references/coaching-toolkit-goal-setting.md +78 -0
  633. package/payload/premium-plugins/real-agency/references/coaching-toolkit-one-to-one-framework.md +92 -0
  634. package/payload/premium-plugins/real-agency/references/coaching-toolkit-soi-workbook.md +103 -0
  635. package/payload/premium-plugins/real-agency/references/content-directory-module-delivery.md +65 -0
  636. package/payload/premium-plugins/real-agency/references/content-directory-progress-tracking.md +47 -0
  637. package/payload/premium-plugins/real-agency/references/exp-partnership-12-reasons.md +39 -0
  638. package/payload/premium-plugins/real-agency/references/exp-partnership-95-5-system.md +66 -0
  639. package/payload/premium-plugins/real-agency/references/exp-partnership-agent-attraction-scripts.md +90 -0
  640. package/payload/premium-plugins/real-agency/references/exp-partnership-business-partnership.md +92 -0
  641. package/payload/premium-plugins/real-agency/references/exp-partnership-exp-model-overview.md +66 -0
  642. package/payload/premium-plugins/real-agency/references/exp-partnership-model-comparison.md +66 -0
  643. package/payload/premium-plugins/real-agency/references/exp-partnership-revenue-share-explained.md +57 -0
  644. package/payload/premium-plugins/real-agency/references/home-preparation-kerb-appeal.md +38 -0
  645. package/payload/premium-plugins/real-agency/references/home-preparation-photo-day.md +59 -0
  646. package/payload/premium-plugins/real-agency/references/home-preparation-situational-tips.md +50 -0
  647. package/payload/premium-plugins/real-agency/references/home-preparation-staging-guide.md +52 -0
  648. package/payload/premium-plugins/real-agency/references/lead-nurturing-buyer-search-letter.md +28 -0
  649. package/payload/premium-plugins/real-agency/references/lead-nurturing-buyer-search-letters.md +37 -0
  650. package/payload/premium-plugins/real-agency/references/lead-nurturing-database-reactivation.md +30 -0
  651. package/payload/premium-plugins/real-agency/references/lead-nurturing-email-nurture-sequences.md +45 -0
  652. package/payload/premium-plugins/real-agency/references/lead-nurturing-facebook-referrals.md +30 -0
  653. package/payload/premium-plugins/real-agency/references/lead-nurturing-firewave-email-nurture-sequences.md +41 -0
  654. package/payload/premium-plugins/real-agency/references/lead-nurturing-keller-33-touch.md +34 -0
  655. package/payload/premium-plugins/real-agency/references/lead-nurturing-neighbour-letters.md +31 -0
  656. package/payload/premium-plugins/real-agency/references/lead-nurturing-neighbour-notification-letter.md +20 -0
  657. package/payload/premium-plugins/real-agency/references/lead-nurturing-ofi-follow-up-dialogue.md +22 -0
  658. package/payload/premium-plugins/real-agency/references/lead-nurturing-ofi-follow-up.md +26 -0
  659. package/payload/premium-plugins/real-agency/references/lead-nurturing-serhant-three-fs-plus.md +21 -0
  660. package/payload/premium-plugins/real-agency/references/lead-nurturing-sharran-10x10x10.md +18 -0
  661. package/payload/premium-plugins/real-agency/references/lead-nurturing-sms-templates.md +40 -0
  662. package/payload/premium-plugins/real-agency/references/lead-nurturing-sphere-of-influence-notes.md +34 -0
  663. package/payload/premium-plugins/real-agency/references/lead-nurturing-sphere-of-influence.md +60 -0
  664. package/payload/premium-plugins/real-agency/references/lead-nurturing-tom-panos-sms-templates.md +59 -0
  665. package/payload/premium-plugins/real-agency/references/listing-presentation-booking-script.md +51 -0
  666. package/payload/premium-plugins/real-agency/references/listing-presentation-objection-scripts.md +193 -0
  667. package/payload/premium-plugins/real-agency/references/listing-presentation-penhaul-presentation.md +123 -0
  668. package/payload/premium-plugins/real-agency/references/listing-presentation-pre-listing-kit.md +139 -0
  669. package/payload/premium-plugins/real-agency/references/listing-presentation-set-to-sell.md +55 -0
  670. package/payload/premium-plugins/real-agency/references/listing-presentation-sharran-frameworks.md +107 -0
  671. package/payload/premium-plugins/real-agency/references/negotiation-deal-saving.md +47 -0
  672. package/payload/premium-plugins/real-agency/references/negotiation-negotiation-deep-guide.md +64 -0
  673. package/payload/premium-plugins/real-agency/references/negotiation-negotiation-prep-principles.md +29 -0
  674. package/payload/premium-plugins/real-agency/references/negotiation-negotiation-techniques.md +42 -0
  675. package/payload/premium-plugins/real-agency/references/negotiation-offer-presentation.md +43 -0
  676. package/payload/premium-plugins/real-agency/references/personal-branding-attraction-agent-notes.md +31 -0
  677. package/payload/premium-plugins/real-agency/references/personal-branding-attraction-agent.md +58 -0
  678. package/payload/premium-plugins/real-agency/references/personal-branding-authenticity-boundaries.md +28 -0
  679. package/payload/premium-plugins/real-agency/references/personal-branding-become-a-brand-leader-notes.md +19 -0
  680. package/payload/premium-plugins/real-agency/references/personal-branding-blast-formula.md +42 -0
  681. package/payload/premium-plugins/real-agency/references/personal-branding-brand-leader.md +48 -0
  682. package/payload/premium-plugins/real-agency/references/personal-branding-brand-strategy-system.md +59 -0
  683. package/payload/premium-plugins/real-agency/references/personal-branding-content-engine.md +49 -0
  684. package/payload/premium-plugins/real-agency/references/personal-branding-firewave-blast-and-blogging.md +23 -0
  685. package/payload/premium-plugins/real-agency/references/personal-branding-gary-v-content.md +52 -0
  686. package/payload/premium-plugins/real-agency/references/personal-branding-gary-v-principles.md +20 -0
  687. package/payload/premium-plugins/real-agency/references/personal-branding-oversubscribed-positioning.md +18 -0
  688. package/payload/premium-plugins/real-agency/references/personal-branding-platforms.md +41 -0
  689. package/payload/premium-plugins/real-agency/references/personal-branding-priestley-oversubscribed.md +54 -0
  690. package/payload/premium-plugins/real-agency/references/personal-branding-storeys-style-examples.md +25 -0
  691. package/payload/premium-plugins/real-agency/references/personal-branding-visual-identity.md +27 -0
  692. package/payload/premium-plugins/real-agency/references/property-marketing-auction-report-template.md +41 -0
  693. package/payload/premium-plugins/real-agency/references/property-marketing-coming-soon-campaign.md +43 -0
  694. package/payload/premium-plugins/real-agency/references/property-marketing-direct-mail-templates.md +121 -0
  695. package/payload/premium-plugins/real-agency/references/property-marketing-eoi-form-template.md +62 -0
  696. package/payload/premium-plugins/real-agency/references/property-marketing-monthly-scorecard.md +63 -0
  697. package/payload/premium-plugins/real-agency/references/prospecting-database-matching.md +30 -0
  698. package/payload/premium-plugins/real-agency/references/prospecting-database-value.md +53 -0
  699. package/payload/premium-plugins/real-agency/references/prospecting-prospecting-dialogues.md +24 -0
  700. package/payload/premium-plugins/real-agency/references/prospecting-reactivation.md +34 -0
  701. package/payload/premium-plugins/real-agency/references/sales-closer-serhant-emotion-stages.md +36 -0
  702. package/payload/premium-plugins/real-agency/references/sales-discovery-chris-voss-discovery.md +88 -0
  703. package/payload/premium-plugins/real-agency/references/sales-discovery-firewave-gost-journey.md +68 -0
  704. package/payload/premium-plugins/real-agency/references/sales-discovery-phil-jones-openers.md +78 -0
  705. package/payload/premium-plugins/real-agency/references/sales-discovery-pre-listing-checklist.md +77 -0
  706. package/payload/premium-plugins/real-agency/references/sales-discovery-serhant-improv.md +22 -0
  707. package/payload/premium-plugins/real-agency/references/sales-discovery-tom-ferry-discovery.md +103 -0
  708. package/payload/premium-plugins/real-agency/references/sales-discovery-vendor-motivation-competitor.md +52 -0
  709. package/payload/premium-plugins/real-agency/references/sales-negotiation-chris-voss-negotiation.md +138 -0
  710. package/payload/premium-plugins/real-agency/references/sales-negotiation-phil-jones-price-words.md +68 -0
  711. package/payload/premium-plugins/real-agency/references/sales-negotiation-serhant-negotiation-plus.md +55 -0
  712. package/payload/premium-plugins/real-agency/references/sales-negotiation-tom-panos-commission-pricing.md +102 -0
  713. package/payload/premium-plugins/real-agency/references/sales-negotiation-tony-morris-questioning.md +71 -0
  714. package/payload/premium-plugins/real-agency/references/sales-progression-conveyancing-guide.md +54 -0
  715. package/payload/premium-plugins/real-agency/references/sales-progression-transaction-tracking.md +66 -0
  716. package/payload/premium-plugins/real-agency/references/serhant-training-agent-training-guide.md +70 -0
  717. package/payload/premium-plugins/real-agency/references/serhant-training-business-in-a-box.md +72 -0
  718. package/payload/premium-plugins/real-agency/references/serhant-training-buyers-guide.md +53 -0
  719. package/payload/premium-plugins/real-agency/references/serhant-training-codo-method.md +72 -0
  720. package/payload/premium-plugins/real-agency/references/serhant-training-website-planning-guide.md +79 -0
  721. package/payload/premium-plugins/real-agency/references/vendor-communication-fee-protection-and-agenda.md +28 -0
  722. package/payload/premium-plugins/real-agency/references/vendor-communication-listing-scripts.md +44 -0
  723. package/payload/premium-plugins/real-agency/references/vendor-communication-negotiation-deep-guide.md +70 -0
  724. package/payload/premium-plugins/real-agency/references/vendor-communication-price-alignment-scripts.md +33 -0
  725. package/payload/premium-plugins/real-agency/references/vendor-communication-price-alignment.md +34 -0
  726. package/payload/premium-plugins/real-agency/references/vendor-communication-scenario-scripts.md +38 -0
  727. package/payload/premium-plugins/real-agency/references/vendor-communication-seller-engagement.md +51 -0
  728. package/payload/premium-plugins/real-agency/references/vendor-communication-valuation-booking.md +76 -0
  729. package/payload/premium-plugins/real-agency/references/vendor-communication-vendor-scripts.md +63 -0
  730. package/payload/premium-plugins/real-agency/references/vendor-communication-vendor-updates.md +41 -0
  731. package/payload/premium-plugins/real-agency/skills/agent-performance.md +367 -0
  732. package/payload/premium-plugins/real-agency/skills/bespoke-coaching.md +28 -0
  733. package/payload/premium-plugins/real-agency/skills/bootstrap.md +26 -0
  734. package/payload/premium-plugins/real-agency/skills/business-growth.md +138 -0
  735. package/payload/premium-plugins/real-agency/skills/business-operations.md +32 -0
  736. package/payload/premium-plugins/real-agency/skills/buyer-feedback.md +109 -0
  737. package/payload/premium-plugins/real-agency/skills/buyer-management.md +41 -0
  738. package/payload/premium-plugins/real-agency/skills/buyer-seller-guides.md +407 -0
  739. package/payload/premium-plugins/real-agency/skills/coaching-toolkit.md +419 -0
  740. package/payload/premium-plugins/real-agency/skills/content-directory.md +39 -0
  741. package/payload/premium-plugins/real-agency/skills/exp-partnership.md +52 -0
  742. package/payload/premium-plugins/real-agency/skills/home-preparation.md +28 -0
  743. package/payload/premium-plugins/real-agency/skills/lead-nurturing.md +143 -0
  744. package/payload/premium-plugins/real-agency/skills/listing-presentation.md +286 -0
  745. package/payload/premium-plugins/real-agency/skills/negotiation.md +34 -0
  746. package/payload/premium-plugins/real-agency/skills/personal-branding.md +117 -0
  747. package/payload/premium-plugins/real-agency/skills/property-enquiry.md +126 -0
  748. package/payload/premium-plugins/real-agency/skills/property-marketing.md +337 -0
  749. package/payload/premium-plugins/real-agency/skills/prospecting.md +33 -0
  750. package/payload/premium-plugins/real-agency/skills/sales-closer.md +27 -0
  751. package/payload/premium-plugins/real-agency/skills/sales-discovery.md +34 -0
  752. package/payload/premium-plugins/real-agency/skills/sales-negotiation.md +31 -0
  753. package/payload/premium-plugins/real-agency/skills/sales-progression.md +27 -0
  754. package/payload/premium-plugins/real-agency/skills/serhant-training.md +410 -0
  755. package/payload/premium-plugins/real-agency/skills/valuation-booking.md +182 -0
  756. package/payload/premium-plugins/real-agency/skills/vendor-communication.md +42 -0
  757. package/payload/premium-plugins/real-agency/skills/vendor-updates.md +153 -0
  758. package/payload/premium-plugins/real-agency/skills/viewing-management.md +111 -0
  759. package/payload/premium-plugins/teaching/PLUGIN.md +58 -0
  760. package/payload/premium-plugins/teaching/references/assessment.md +70 -0
  761. package/payload/premium-plugins/teaching/references/classroom-conduct.md +43 -0
  762. package/payload/premium-plugins/teaching/references/context-gathering.md +41 -0
  763. package/payload/premium-plugins/teaching/references/disaggregation.md +49 -0
  764. package/payload/premium-plugins/teaching/references/materials.md +116 -0
  765. package/payload/premium-plugins/teaching/references/plan-structure.md +94 -0
  766. package/payload/premium-plugins/teaching/references/teaching-modes.md +83 -0
  767. package/payload/premium-plugins/teaching/skills/interactive-tutor.md +59 -0
  768. package/payload/premium-plugins/teaching/skills/lesson-planner.md +48 -0
  769. package/payload/premium-plugins/teaching/skills/study-pack-builder.md +52 -0
  770. package/payload/premium-plugins/writer-craft/PLUGIN.md +88 -0
  771. package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +92 -0
  772. package/payload/premium-plugins/writer-craft/references/audience-analysis.md +73 -0
  773. package/payload/premium-plugins/writer-craft/references/blueprinting-and-scene-cards.md +118 -0
  774. package/payload/premium-plugins/writer-craft/references/blueprinting-exercises.md +118 -0
  775. package/payload/premium-plugins/writer-craft/references/blueprinting-process.md +128 -0
  776. package/payload/premium-plugins/writer-craft/references/book-and-chapter-models.md +77 -0
  777. package/payload/premium-plugins/writer-craft/references/cause-effect-setup-payoff.md +79 -0
  778. package/payload/premium-plugins/writer-craft/references/citation-rules.md +103 -0
  779. package/payload/premium-plugins/writer-craft/references/conflict-escalation.md +81 -0
  780. package/payload/premium-plugins/writer-craft/references/copyediting.md +73 -0
  781. package/payload/premium-plugins/writer-craft/references/crafting-persuasive-story.md +76 -0
  782. package/payload/premium-plugins/writer-craft/references/developmental-editing.md +85 -0
  783. package/payload/premium-plugins/writer-craft/references/genre-specific-editing.md +78 -0
  784. package/payload/premium-plugins/writer-craft/references/hooking-readers.md +67 -0
  785. package/payload/premium-plugins/writer-craft/references/indirect-narration.md +72 -0
  786. package/payload/premium-plugins/writer-craft/references/inner-issue-and-protagonist-goal.md +66 -0
  787. package/payload/premium-plugins/writer-craft/references/journal-article-models.md +74 -0
  788. package/payload/premium-plugins/writer-craft/references/line-editing.md +55 -0
  789. package/payload/premium-plugins/writer-craft/references/misbelief-desire-worldview.md +87 -0
  790. package/payload/premium-plugins/writer-craft/references/neurochemistry-of-engagement.md +94 -0
  791. package/payload/premium-plugins/writer-craft/references/origin-scenes-and-escalation.md +82 -0
  792. package/payload/premium-plugins/writer-craft/references/other-source-models.md +146 -0
  793. package/payload/premium-plugins/writer-craft/references/persuasion-case-studies.md +67 -0
  794. package/payload/premium-plugins/writer-craft/references/pov-types-and-voice.md +91 -0
  795. package/payload/premium-plugins/writer-craft/references/prose-review-checklist.md +112 -0
  796. package/payload/premium-plugins/writer-craft/references/protagonist-filter.md +71 -0
  797. package/payload/premium-plugins/writer-craft/references/punctuation-and-grammar.md +72 -0
  798. package/payload/premium-plugins/writer-craft/references/reference-list-rules.md +70 -0
  799. package/payload/premium-plugins/writer-craft/references/repetition.md +71 -0
  800. package/payload/premium-plugins/writer-craft/references/review-manuscript-checklist.md +119 -0
  801. package/payload/premium-plugins/writer-craft/references/scene-analysis-framework.md +95 -0
  802. package/payload/premium-plugins/writer-craft/references/self-editing.md +89 -0
  803. package/payload/premium-plugins/writer-craft/references/sound-and-rhythm.md +64 -0
  804. package/payload/premium-plugins/writer-craft/references/tense-and-person.md +85 -0
  805. package/payload/premium-plugins/writer-craft/references/transformation-framework.md +86 -0
  806. package/payload/premium-plugins/writer-craft/references/word-economy.md +93 -0
  807. package/payload/premium-plugins/writer-craft/skills/citation-style.md +94 -0
  808. package/payload/premium-plugins/writer-craft/skills/editorial-practice.md +108 -0
  809. package/payload/premium-plugins/writer-craft/skills/persuasive-storytelling.md +114 -0
  810. package/payload/premium-plugins/writer-craft/skills/point-of-view.md +97 -0
  811. package/payload/premium-plugins/writer-craft/skills/prose-craft.md +100 -0
  812. package/payload/premium-plugins/writer-craft/skills/reader-engagement.md +100 -0
  813. package/payload/premium-plugins/writer-craft/skills/review-manuscript.md +111 -0
  814. package/payload/premium-plugins/writer-craft/skills/review-prose.md +99 -0
  815. package/payload/premium-plugins/writer-craft/skills/review-scene.md +99 -0
  816. package/payload/premium-plugins/writer-craft/skills/story-architecture.md +106 -0
  817. package/payload/premium-plugins/writer-craft/skills/story-blueprint.md +133 -0
@@ -0,0 +1,878 @@
1
+ #!/usr/bin/env bash
2
+ # End-to-end test for the agent creation gate lifecycle.
3
+ #
4
+ # Validates that the hook scripts correctly:
5
+ # - Block writes to agent files without a state file
6
+ # - Block Bash writes to agent files without a state file
7
+ # - Exempt admin agent files
8
+ # - Create state on mcp__admin__plugin-read for public-agent-manager
9
+ # - Do NOT create state for other plugin-read calls
10
+ # - Block writes when gates are pending
11
+ # - Advance gates on user approval (_componentDone via UserPromptSubmit)
12
+ # - Allow writes after gates pass
13
+ # - Allow Bash writes after gates pass
14
+ # - Allow all gated writes when all gates pass
15
+ # - Clean up state immediately when all files exist on disk (PostToolUse)
16
+ # - Detect and clean up completed state on session start (all gates true)
17
+ # - Ignore non-document-editor/form components
18
+ # - Ignore _componentDone for admin agent
19
+ # - Handle gate advancement idempotently
20
+ # - render-component does NOT advance gates (removed in Task 148)
21
+ #
22
+ # Usage: bash test-agent-creation-gate.sh
23
+ # Exit 0 = all tests pass, exit 1 = failure
24
+ #
25
+ # No Claude Code runtime needed — tests the hook scripts directly
26
+ # by piping JSON input and checking exit codes / state files.
27
+
28
+ set -euo pipefail
29
+
30
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
31
+ TMPDIR_ROOT=$(mktemp -d)
32
+ STATE_FILE="$TMPDIR_ROOT/state.json"
33
+ ACCOUNT_DIR="$TMPDIR_ROOT/account"
34
+ GATE_LOG="$TMPDIR_ROOT/gate.log"
35
+
36
+ # Create mock account structure
37
+ mkdir -p "$ACCOUNT_DIR/agents/test-agent"
38
+ mkdir -p "$ACCOUNT_DIR/agents/admin"
39
+ mkdir -p "$ACCOUNT_DIR/.claude"
40
+
41
+ export AGENT_CREATE_STATE_FILE="$STATE_FILE"
42
+ export ACCOUNT_DIR="$ACCOUNT_DIR"
43
+ export GATE_LOG_FILE="$GATE_LOG"
44
+
45
+ PASS=0
46
+ FAIL=0
47
+
48
+ pass() {
49
+ PASS=$((PASS + 1))
50
+ echo " PASS: $1"
51
+ }
52
+
53
+ fail() {
54
+ FAIL=$((FAIL + 1))
55
+ echo " FAIL: $1" >&2
56
+ }
57
+
58
+ cleanup() {
59
+ rm -rf "$TMPDIR_ROOT"
60
+ }
61
+ trap cleanup EXIT
62
+
63
+ echo "=== Agent Creation Gate — Lifecycle Test ==="
64
+ echo ""
65
+
66
+ # ---------------------------------------------------------------------------
67
+ # Test 1: Write blocked without state file
68
+ # ---------------------------------------------------------------------------
69
+ echo "Test 1: Write blocked without state file"
70
+ rm -f "$STATE_FILE"
71
+
72
+ EXIT_CODE=0
73
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"test"}}' \
74
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
75
+
76
+ if [ "$EXIT_CODE" -eq 2 ]; then
77
+ pass "Write to agents/test-agent/SOUL.md blocked (exit 2)"
78
+ else
79
+ fail "Write to agents/test-agent/SOUL.md should exit 2, got $EXIT_CODE"
80
+ fi
81
+
82
+ # ---------------------------------------------------------------------------
83
+ # Test 2: Bash blocked without state file
84
+ # ---------------------------------------------------------------------------
85
+ echo "Test 2: Bash blocked without state file"
86
+ rm -f "$STATE_FILE"
87
+
88
+ EXIT_CODE=0
89
+ echo '{"tool_name":"Bash","tool_input":{"command":"cat > '"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md << EOF\ntest\nEOF"}}' \
90
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
91
+
92
+ if [ "$EXIT_CODE" -eq 2 ]; then
93
+ pass "Bash write to agents/test-agent/SOUL.md blocked (exit 2)"
94
+ else
95
+ fail "Bash write to agents/test-agent/SOUL.md should exit 2, got $EXIT_CODE"
96
+ fi
97
+
98
+ # ---------------------------------------------------------------------------
99
+ # Test 3: Admin agent exempt
100
+ # ---------------------------------------------------------------------------
101
+ echo "Test 3: Admin agent exempt"
102
+ rm -f "$STATE_FILE"
103
+
104
+ EXIT_CODE=0
105
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/admin/SOUL.md","content":"test"}}' \
106
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
107
+
108
+ if [ "$EXIT_CODE" -eq 0 ]; then
109
+ pass "Write to agents/admin/SOUL.md allowed (exit 0)"
110
+ else
111
+ fail "Write to agents/admin/SOUL.md should exit 0, got $EXIT_CODE"
112
+ fi
113
+
114
+ # ---------------------------------------------------------------------------
115
+ # Test 4: Non-PAM plugin-read does NOT create state
116
+ # ---------------------------------------------------------------------------
117
+ echo "Test 4: Non-PAM plugin-read does NOT create state"
118
+ rm -f "$STATE_FILE"
119
+
120
+ echo '{"tool_name":"mcp__admin__plugin-read","tool_input":{"pluginName":"admin","file":"skills/skill-builder/SKILL.md"}}' \
121
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
122
+
123
+ if [ ! -f "$STATE_FILE" ]; then
124
+ pass "plugin-read for skill-builder did not create state file"
125
+ else
126
+ fail "plugin-read for skill-builder should NOT create state file"
127
+ fi
128
+
129
+ # ---------------------------------------------------------------------------
130
+ # Test 5: State file creation on plugin-read for public-agent-manager
131
+ # ---------------------------------------------------------------------------
132
+ echo "Test 5: State file creation on plugin-read for public-agent-manager"
133
+ rm -f "$STATE_FILE"
134
+
135
+ echo '{"tool_name":"mcp__admin__plugin-read","tool_input":{"pluginName":"admin","file":"skills/public-agent-manager/skill.md"}}' \
136
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
137
+
138
+ if [ -f "$STATE_FILE" ]; then
139
+ # Verify all gates are false
140
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
141
+ KNOWLEDGE_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['knowledge'])" 2>/dev/null)
142
+ CONFIG_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['config'])" 2>/dev/null)
143
+
144
+ if [ "$SOUL_GATE" = "False" ] && [ "$KNOWLEDGE_GATE" = "False" ] && [ "$CONFIG_GATE" = "False" ]; then
145
+ pass "State file created with all gates false"
146
+ else
147
+ fail "State file gates should all be False, got soul=$SOUL_GATE knowledge=$KNOWLEDGE_GATE config=$CONFIG_GATE"
148
+ fi
149
+ else
150
+ fail "State file not created after plugin-read for public-agent-manager"
151
+ fi
152
+
153
+ # ---------------------------------------------------------------------------
154
+ # Test 6: Write blocked with pending gate
155
+ # ---------------------------------------------------------------------------
156
+ echo "Test 6: Write blocked with pending gate (soul=false)"
157
+
158
+ EXIT_CODE=0
159
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"test"}}' \
160
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
161
+
162
+ if [ "$EXIT_CODE" -eq 2 ]; then
163
+ pass "Write blocked when soul gate is false (exit 2)"
164
+ else
165
+ fail "Write should be blocked when soul gate is false, got exit $EXIT_CODE"
166
+ fi
167
+
168
+ # ---------------------------------------------------------------------------
169
+ # Test 7: Gate advancement — soul (user approval via _componentDone)
170
+ # ---------------------------------------------------------------------------
171
+ echo "Test 7: Gate advancement on user approval (soul)"
172
+
173
+ python3 -c "
174
+ import json
175
+ payload = json.dumps({'action': 'approve', 'content': 'personality content', 'filePath': '$ACCOUNT_DIR/agents/test-agent/SOUL.md'})
176
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
177
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
178
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
179
+
180
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
181
+ if [ "$SOUL_GATE" = "True" ]; then
182
+ pass "Soul gate advanced to true"
183
+ else
184
+ fail "Soul gate should be True after user approval, got $SOUL_GATE"
185
+ fi
186
+
187
+ # ---------------------------------------------------------------------------
188
+ # Test 8: Write allowed after gate passes
189
+ # ---------------------------------------------------------------------------
190
+ echo "Test 8: Write allowed after soul gate passes"
191
+
192
+ EXIT_CODE=0
193
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"test"}}' \
194
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
195
+
196
+ if [ "$EXIT_CODE" -eq 0 ]; then
197
+ pass "Write to SOUL.md allowed after soul gate passes (exit 0)"
198
+ else
199
+ fail "Write to SOUL.md should be allowed after soul gate passes, got exit $EXIT_CODE"
200
+ fi
201
+
202
+ # ---------------------------------------------------------------------------
203
+ # Test 9: Bash allowed after gate passes
204
+ # ---------------------------------------------------------------------------
205
+ echo "Test 9: Bash write allowed after soul gate passes"
206
+
207
+ EXIT_CODE=0
208
+ echo '{"tool_name":"Bash","tool_input":{"command":"cat > '"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md << EOF\ntest\nEOF"}}' \
209
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
210
+
211
+ if [ "$EXIT_CODE" -eq 0 ]; then
212
+ pass "Bash write to SOUL.md allowed after soul gate passes (exit 0)"
213
+ else
214
+ fail "Bash write to SOUL.md should be allowed after soul gate passes, got exit $EXIT_CODE"
215
+ fi
216
+
217
+ # ---------------------------------------------------------------------------
218
+ # Test 10: All gates advanced — multiple writes succeed
219
+ # ---------------------------------------------------------------------------
220
+ echo "Test 10: All gates advanced, multiple gated writes succeed"
221
+
222
+ # Advance knowledge gate (user approval)
223
+ python3 -c "
224
+ import json
225
+ payload = json.dumps({'action': 'approve', 'content': 'knowledge content', 'filePath': '$ACCOUNT_DIR/agents/test-agent/KNOWLEDGE.md'})
226
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
227
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
228
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
229
+
230
+ # Advance config gate (form submission)
231
+ python3 -c "
232
+ import json
233
+ payload = 'Form submitted: {\"liveMemory\": true, \"model\": \"claude-haiku-4-5-20251001\"}'
234
+ wrapper = json.dumps({'_componentDone': True, 'component': 'form', 'payload': payload})
235
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
236
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
237
+
238
+ # All gates should be true — state file persists (6h TTL handles cleanup)
239
+ if [ -f "$STATE_FILE" ]; then
240
+ ALL_TRUE=$(python3 -c "import json; g=json.load(open('$STATE_FILE'))['gates']; print(all(g.values()))" 2>/dev/null)
241
+ if [ "$ALL_TRUE" = "True" ]; then
242
+ # Write all three gated files — each should succeed
243
+ ALL_WRITES_OK=true
244
+ for FILE in SOUL.md KNOWLEDGE.md config.json; do
245
+ EXIT_CODE=0
246
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/'"$FILE"'","content":"test"}}' \
247
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
248
+ if [ "$EXIT_CODE" -ne 0 ]; then
249
+ ALL_WRITES_OK=false
250
+ fail "Write to $FILE blocked after all gates true (exit $EXIT_CODE)"
251
+ fi
252
+ done
253
+ if [ "$ALL_WRITES_OK" = true ]; then
254
+ pass "All three gated files writable when all gates true"
255
+ fi
256
+ else
257
+ fail "All gates should be true after three approvals"
258
+ fi
259
+ else
260
+ fail "State file should still exist after approval hook"
261
+ fi
262
+
263
+ # ---------------------------------------------------------------------------
264
+ # Test 11: Non-agent file writes always allowed
265
+ # ---------------------------------------------------------------------------
266
+ echo "Test 11: Non-agent file writes always allowed"
267
+ rm -f "$STATE_FILE"
268
+
269
+ EXIT_CODE=0
270
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/some-other-file.md","content":"test"}}' \
271
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
272
+
273
+ if [ "$EXIT_CODE" -eq 0 ]; then
274
+ pass "Write to non-agent file allowed (exit 0)"
275
+ else
276
+ fail "Write to non-agent file should exit 0, got $EXIT_CODE"
277
+ fi
278
+
279
+ # ===========================================================================
280
+ # Hardening Tests
281
+ # ===========================================================================
282
+
283
+ # ---------------------------------------------------------------------------
284
+ # Test 12: Stale state rejected (started > 6 hours ago)
285
+ # ---------------------------------------------------------------------------
286
+ echo "Test 12: Stale state rejected (started > 6 hours ago)"
287
+ rm -f "$STATE_FILE"
288
+
289
+ python3 -c "
290
+ import json
291
+ from datetime import datetime, timezone, timedelta
292
+ state = {
293
+ 'slug': 'test-agent',
294
+ 'started': (datetime.now(timezone.utc) - timedelta(hours=7)).isoformat(),
295
+ 'gates': {'soul': False, 'knowledge': False, 'config': False}
296
+ }
297
+ with open('$STATE_FILE', 'w') as f:
298
+ json.dump(state, f)
299
+ "
300
+
301
+ EXIT_CODE=0
302
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"test"}}' \
303
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
304
+
305
+ if [ "$EXIT_CODE" -eq 2 ]; then
306
+ if [ ! -f "$STATE_FILE" ]; then
307
+ pass "Stale state rejected (exit 2) and state file deleted"
308
+ else
309
+ fail "Stale state rejected (exit 2) but state file not deleted"
310
+ fi
311
+ else
312
+ fail "Stale state should exit 2, got $EXIT_CODE"
313
+ fi
314
+
315
+ # ---------------------------------------------------------------------------
316
+ # Test 13: Malformed state rejected (missing gate keys)
317
+ # ---------------------------------------------------------------------------
318
+ echo "Test 13: Malformed state rejected (missing gate keys)"
319
+ rm -f "$STATE_FILE"
320
+
321
+ python3 -c "
322
+ import json
323
+ from datetime import datetime, timezone
324
+ state = {
325
+ 'slug': 'test-agent',
326
+ 'started': datetime.now(timezone.utc).isoformat(),
327
+ 'gates': {'soul': True}
328
+ }
329
+ with open('$STATE_FILE', 'w') as f:
330
+ json.dump(state, f)
331
+ "
332
+
333
+ EXIT_CODE=0
334
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"test"}}' \
335
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
336
+
337
+ if [ "$EXIT_CODE" -eq 2 ]; then
338
+ if [ ! -f "$STATE_FILE" ]; then
339
+ pass "Malformed state rejected (exit 2) and state file deleted"
340
+ else
341
+ fail "Malformed state rejected (exit 2) but state file not deleted"
342
+ fi
343
+ else
344
+ fail "Malformed state should exit 2, got $EXIT_CODE"
345
+ fi
346
+
347
+ # ---------------------------------------------------------------------------
348
+ # Test 14: Legacy state rejected (no 'started' field)
349
+ # ---------------------------------------------------------------------------
350
+ echo "Test 14: Legacy state rejected (no 'started' field)"
351
+ rm -f "$STATE_FILE"
352
+
353
+ echo '{"gates":{"soul":true,"knowledge":true,"config":true}}' > "$STATE_FILE"
354
+
355
+ EXIT_CODE=0
356
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"test"}}' \
357
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
358
+
359
+ if [ "$EXIT_CODE" -eq 2 ]; then
360
+ if [ ! -f "$STATE_FILE" ]; then
361
+ pass "Legacy state (no started) rejected (exit 2) and state file deleted"
362
+ else
363
+ fail "Legacy state rejected (exit 2) but state file not deleted"
364
+ fi
365
+ else
366
+ fail "Legacy state should exit 2, got $EXIT_CODE"
367
+ fi
368
+
369
+ # ---------------------------------------------------------------------------
370
+ # Test 15: Bash blocked from writing state file
371
+ # ---------------------------------------------------------------------------
372
+ echo "Test 15: Bash blocked from writing state file"
373
+ rm -f "$STATE_FILE"
374
+
375
+ EXIT_CODE=0
376
+ echo '{"tool_name":"Bash","tool_input":{"command":"echo '\''{}'\'' > /tmp/maxy-agent-create-state.json"}}' \
377
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
378
+
379
+ if [ "$EXIT_CODE" -eq 2 ]; then
380
+ pass "Bash write to state file blocked (exit 2)"
381
+ else
382
+ fail "Bash write to state file should exit 2, got $EXIT_CODE"
383
+ fi
384
+
385
+ # ---------------------------------------------------------------------------
386
+ # Test 16: Bash blocked from deleting state file
387
+ # ---------------------------------------------------------------------------
388
+ echo "Test 16: Bash blocked from deleting state file"
389
+ rm -f "$STATE_FILE"
390
+
391
+ EXIT_CODE=0
392
+ echo '{"tool_name":"Bash","tool_input":{"command":"rm /tmp/maxy-agent-create-state.json"}}' \
393
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
394
+
395
+ if [ "$EXIT_CODE" -eq 2 ]; then
396
+ pass "Bash delete of state file blocked (exit 2)"
397
+ else
398
+ fail "Bash delete of state file should exit 2, got $EXIT_CODE"
399
+ fi
400
+
401
+ # ---------------------------------------------------------------------------
402
+ # Test 17: All-gates-true — state file persists, all writes allowed
403
+ # ---------------------------------------------------------------------------
404
+ echo "Test 17: All-gates-true state file persists across multiple writes"
405
+ rm -f "$STATE_FILE"
406
+
407
+ python3 -c "
408
+ import json
409
+ from datetime import datetime, timezone
410
+ state = {
411
+ 'slug': 'test-agent',
412
+ 'started': datetime.now(timezone.utc).isoformat(),
413
+ 'gates': {'soul': True, 'knowledge': True, 'config': True}
414
+ }
415
+ with open('$STATE_FILE', 'w') as f:
416
+ json.dump(state, f)
417
+ "
418
+
419
+ # Write SOUL.md — should succeed and state file should persist
420
+ EXIT_CODE=0
421
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"test"}}' \
422
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
423
+
424
+ if [ "$EXIT_CODE" -eq 0 ] && [ -f "$STATE_FILE" ]; then
425
+ # Write config.json — should also succeed (regression: previously blocked)
426
+ EXIT_CODE=0
427
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/config.json","content":"test"}}' \
428
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
429
+ if [ "$EXIT_CODE" -eq 0 ]; then
430
+ pass "All-gates-true: multiple writes allowed, state file persists (6h TTL cleanup)"
431
+ else
432
+ fail "All-gates-true: second write blocked (exit $EXIT_CODE) — state file deleted prematurely"
433
+ fi
434
+ else
435
+ fail "All-gates-true: first write should exit 0 with state file persisting, got exit=$EXIT_CODE file_exists=$([ -f '$STATE_FILE' ] && echo yes || echo no)"
436
+ fi
437
+
438
+ # ---------------------------------------------------------------------------
439
+ # Test 18: Session-start staleness check (stale durable not recovered)
440
+ # ---------------------------------------------------------------------------
441
+ echo "Test 18: Session-start staleness check (stale durable not recovered)"
442
+ rm -f "$STATE_FILE"
443
+ DURABLE_FILE="$ACCOUNT_DIR/.claude/agent-create-state.json"
444
+
445
+ python3 -c "
446
+ import json
447
+ from datetime import datetime, timezone, timedelta
448
+ state = {
449
+ 'slug': 'test-agent',
450
+ 'started': (datetime.now(timezone.utc) - timedelta(hours=7)).isoformat(),
451
+ 'gates': {'soul': True, 'knowledge': False, 'config': False}
452
+ }
453
+ with open('$DURABLE_FILE', 'w') as f:
454
+ json.dump(state, f)
455
+ "
456
+
457
+ bash "$SCRIPT_DIR/session-start.sh" "$ACCOUNT_DIR" admin 2>/dev/null || true
458
+
459
+ if [ ! -f "$STATE_FILE" ]; then
460
+ if [ ! -f "$DURABLE_FILE" ]; then
461
+ pass "Stale durable state not recovered, both files deleted"
462
+ else
463
+ fail "Stale durable state not recovered but durable file not deleted"
464
+ fi
465
+ else
466
+ fail "Stale durable state should NOT be recovered to volatile"
467
+ fi
468
+
469
+ # ---------------------------------------------------------------------------
470
+ # Test 19: Write tool blocked from targeting state file
471
+ # ---------------------------------------------------------------------------
472
+ echo "Test 19: Write tool blocked from targeting state file"
473
+ rm -f "$STATE_FILE"
474
+
475
+ EXIT_CODE=0
476
+ echo '{"tool_name":"Write","tool_input":{"file_path":"/tmp/maxy-agent-create-state.json","content":"{\"gates\":{\"soul\":true,\"knowledge\":true,\"config\":true}}"}}' \
477
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
478
+
479
+ if [ "$EXIT_CODE" -eq 2 ]; then
480
+ pass "Write to state file blocked (exit 2)"
481
+ else
482
+ fail "Write to state file should exit 2, got $EXIT_CODE"
483
+ fi
484
+
485
+ # ---------------------------------------------------------------------------
486
+ # Test 20: Edit tool blocked from targeting durable state file
487
+ # ---------------------------------------------------------------------------
488
+ echo "Test 20: Edit tool blocked from targeting durable state file"
489
+ rm -f "$STATE_FILE"
490
+
491
+ EXIT_CODE=0
492
+ echo '{"tool_name":"Edit","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/.claude/agent-create-state.json","old_string":"false","new_string":"true"}}' \
493
+ | bash "$SCRIPT_DIR/agent-creation-gate.sh" 2>/dev/null || EXIT_CODE=$?
494
+
495
+ if [ "$EXIT_CODE" -eq 2 ]; then
496
+ pass "Edit to durable state file blocked (exit 2)"
497
+ else
498
+ fail "Edit to durable state file should exit 2, got $EXIT_CODE"
499
+ fi
500
+
501
+ # ===========================================================================
502
+ # Approval hook tests — _componentDone gate advancement edge cases
503
+ # ===========================================================================
504
+
505
+ # ---------------------------------------------------------------------------
506
+ # Test 21: Non-document-editor/form component does NOT advance any gate
507
+ # ---------------------------------------------------------------------------
508
+ echo "Test 21: Non-document-editor/form component does NOT advance any gate"
509
+ rm -f "$STATE_FILE"
510
+
511
+ # Create fresh state file
512
+ echo '{"tool_name":"mcp__admin__plugin-read","tool_input":{"pluginName":"admin","file":"skills/public-agent-manager/skill.md"}}' \
513
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
514
+
515
+ # Submit a single-select component
516
+ python3 -c "
517
+ import json
518
+ wrapper = json.dumps({'_componentDone': True, 'component': 'single-select', 'payload': 'option-a'})
519
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
520
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
521
+
522
+ CONFIG_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['config'])" 2>/dev/null)
523
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
524
+ if [ "$CONFIG_GATE" = "False" ] && [ "$SOUL_GATE" = "False" ]; then
525
+ pass "Non-document-editor/form component did not advance any gate"
526
+ else
527
+ fail "Non-gated component should not advance gates, got soul=$SOUL_GATE config=$CONFIG_GATE"
528
+ fi
529
+
530
+ # ---------------------------------------------------------------------------
531
+ # Test 22: Document-editor for admin slug does NOT advance gate
532
+ # ---------------------------------------------------------------------------
533
+ echo "Test 22: Document-editor approval for admin slug does NOT advance gate"
534
+
535
+ python3 -c "
536
+ import json
537
+ payload = json.dumps({'action': 'approve', 'content': 'admin content', 'filePath': '$ACCOUNT_DIR/agents/admin/SOUL.md'})
538
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
539
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
540
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
541
+
542
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
543
+ if [ "$SOUL_GATE" = "False" ]; then
544
+ pass "Document-editor approval for admin slug did not advance soul gate"
545
+ else
546
+ fail "Document-editor approval for admin slug should not advance soul gate, got $SOUL_GATE"
547
+ fi
548
+
549
+ # ---------------------------------------------------------------------------
550
+ # Test 23: Gate advancement is idempotent
551
+ # ---------------------------------------------------------------------------
552
+ echo "Test 23: Gate advancement is idempotent"
553
+
554
+ # Advance soul gate
555
+ python3 -c "
556
+ import json
557
+ payload = json.dumps({'action': 'approve', 'content': 'personality', 'filePath': '$ACCOUNT_DIR/agents/test-agent/SOUL.md'})
558
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
559
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
560
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
561
+
562
+ # Advance soul gate again (should be idempotent)
563
+ python3 -c "
564
+ import json
565
+ payload = json.dumps({'action': 'approve', 'content': 'updated personality', 'filePath': '$ACCOUNT_DIR/agents/test-agent/SOUL.md'})
566
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
567
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
568
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
569
+
570
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
571
+ if [ "$SOUL_GATE" = "True" ]; then
572
+ pass "Gate advancement is idempotent (soul still true after double approval)"
573
+ else
574
+ fail "Gate advancement should be idempotent, got soul=$SOUL_GATE"
575
+ fi
576
+
577
+ # ---------------------------------------------------------------------------
578
+ # Test 24: Approval without state file is a no-op
579
+ # ---------------------------------------------------------------------------
580
+ echo "Test 24: Approval without state file is a no-op"
581
+ rm -f "$STATE_FILE"
582
+
583
+ python3 -c "
584
+ import json
585
+ payload = json.dumps({'action': 'approve', 'content': 'test', 'filePath': '$ACCOUNT_DIR/agents/test-agent/SOUL.md'})
586
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
587
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
588
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
589
+
590
+ if [ ! -f "$STATE_FILE" ]; then
591
+ pass "Approval without state file did not create state"
592
+ else
593
+ fail "Approval without state file should not create state"
594
+ fi
595
+
596
+ # ---------------------------------------------------------------------------
597
+ # Test 25: render-component does NOT advance gates (removed in Task 148)
598
+ # ---------------------------------------------------------------------------
599
+ echo "Test 25: render-component does NOT advance gates (PostToolUse)"
600
+ rm -f "$STATE_FILE"
601
+
602
+ # Create fresh state
603
+ echo '{"tool_name":"mcp__admin__plugin-read","tool_input":{"pluginName":"admin","file":"skills/public-agent-manager/skill.md"}}' \
604
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
605
+
606
+ # Pipe render-component to the post hook — should NOT advance
607
+ echo '{"tool_name":"mcp__admin__render-component","tool_input":{"name":"document-editor","data":{"title":"SOUL.md","content":"test","filePath":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md"}}}' \
608
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
609
+
610
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
611
+ if [ "$SOUL_GATE" = "False" ]; then
612
+ pass "render-component to PostToolUse does NOT advance gates"
613
+ else
614
+ fail "render-component should NOT advance gates (Task 148 removed this), got soul=$SOUL_GATE"
615
+ fi
616
+
617
+ # ---------------------------------------------------------------------------
618
+ # Test 26: Gate advancement order independence (config → knowledge → soul)
619
+ # ---------------------------------------------------------------------------
620
+ echo "Test 26: Gate advancement in non-standard order (config → knowledge → soul)"
621
+
622
+ # State file from test 25 still exists with all gates false
623
+
624
+ # Advance config first (form submission)
625
+ python3 -c "
626
+ import json
627
+ wrapper = json.dumps({'_componentDone': True, 'component': 'form', 'payload': 'Form submitted: {\"liveMemory\": true}'})
628
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
629
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
630
+
631
+ CONFIG_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['config'])" 2>/dev/null)
632
+ if [ "$CONFIG_GATE" != "True" ]; then
633
+ fail "Config gate should be True, got $CONFIG_GATE"
634
+ fi
635
+
636
+ # Advance knowledge second
637
+ python3 -c "
638
+ import json
639
+ payload = json.dumps({'action': 'approve', 'content': 'knowledge', 'filePath': '$ACCOUNT_DIR/agents/test-agent/KNOWLEDGE.md'})
640
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
641
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
642
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
643
+
644
+ KNOWLEDGE_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['knowledge'])" 2>/dev/null)
645
+ if [ "$KNOWLEDGE_GATE" != "True" ]; then
646
+ fail "Knowledge gate should be True, got $KNOWLEDGE_GATE"
647
+ fi
648
+
649
+ # Advance soul last
650
+ python3 -c "
651
+ import json
652
+ payload = json.dumps({'action': 'approve', 'content': 'personality', 'filePath': '$ACCOUNT_DIR/agents/test-agent/SOUL.md'})
653
+ wrapper = json.dumps({'_componentDone': True, 'component': 'document-editor', 'payload': payload})
654
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
655
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
656
+
657
+ # All gates true — state file persists (6h TTL handles cleanup)
658
+ if [ -f "$STATE_FILE" ]; then
659
+ ALL_TRUE=$(python3 -c "import json; g=json.load(open('$STATE_FILE'))['gates']; print(all(g.values()))" 2>/dev/null)
660
+ if [ "$ALL_TRUE" = "True" ]; then
661
+ pass "Gates advanced in non-standard order, all true"
662
+ else
663
+ fail "All gates should be true after three approvals in any order"
664
+ fi
665
+ else
666
+ fail "State file should still exist (cleanup is PreToolUse's job, not approval hook)"
667
+ fi
668
+
669
+ # ---------------------------------------------------------------------------
670
+ # Test 27: Diagnostics log file is written
671
+ # ---------------------------------------------------------------------------
672
+ echo "Test 27: Diagnostics log file is written"
673
+
674
+ if [ -f "$GATE_LOG" ] && [ -s "$GATE_LOG" ]; then
675
+ pass "Gate log file exists and contains entries"
676
+ else
677
+ fail "Gate log file should exist and contain diagnostic entries"
678
+ fi
679
+
680
+ # ---------------------------------------------------------------------------
681
+ # Test 28: Non-JSON user prompt is a no-op
682
+ # ---------------------------------------------------------------------------
683
+ echo "Test 28: Non-JSON user prompt is a no-op"
684
+ rm -f "$STATE_FILE"
685
+
686
+ # Create state
687
+ echo '{"tool_name":"mcp__admin__plugin-read","tool_input":{"pluginName":"admin","file":"skills/public-agent-manager/skill.md"}}' \
688
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
689
+
690
+ # Send a plain text prompt (no _componentDone wrapper)
691
+ python3 -c "
692
+ import json
693
+ print(json.dumps({'prompt': 'I approve the SOUL.md file', 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
694
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
695
+
696
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
697
+ if [ "$SOUL_GATE" = "False" ]; then
698
+ pass "Plain text prompt did not advance any gate"
699
+ else
700
+ fail "Plain text prompt should not advance gates, got soul=$SOUL_GATE"
701
+ fi
702
+
703
+ # ---------------------------------------------------------------------------
704
+ # Test 29: _componentDone with missing component key is a no-op
705
+ # ---------------------------------------------------------------------------
706
+ echo "Test 29: _componentDone with missing component key is a no-op"
707
+
708
+ python3 -c "
709
+ import json
710
+ wrapper = json.dumps({'_componentDone': True, 'payload': 'some content'})
711
+ print(json.dumps({'prompt': wrapper, 'session_id': 'test', 'hook_event_name': 'UserPromptSubmit'}))
712
+ " | bash "$SCRIPT_DIR/agent-creation-approval.sh" 2>/dev/null || true
713
+
714
+ SOUL_GATE=$(python3 -c "import json; print(json.load(open('$STATE_FILE'))['gates']['soul'])" 2>/dev/null)
715
+ if [ "$SOUL_GATE" = "False" ]; then
716
+ pass "_componentDone without component key did not advance any gate"
717
+ else
718
+ fail "_componentDone without component key should not advance gates"
719
+ fi
720
+
721
+ rm -f "$STATE_FILE"
722
+
723
+ # ---------------------------------------------------------------------------
724
+ # Test 30: Session-start does NOT recover completed state (all gates true)
725
+ # ---------------------------------------------------------------------------
726
+ echo "Test 30: Session-start does NOT recover completed state (all gates true)"
727
+ rm -f "$STATE_FILE"
728
+ DURABLE_FILE="$ACCOUNT_DIR/.claude/agent-create-state.json"
729
+
730
+ python3 -c "
731
+ import json
732
+ from datetime import datetime, timezone
733
+ state = {
734
+ 'slug': 'test-agent',
735
+ 'started': datetime.now(timezone.utc).isoformat(),
736
+ 'gates': {'soul': True, 'knowledge': True, 'config': True}
737
+ }
738
+ with open('$DURABLE_FILE', 'w') as f:
739
+ json.dump(state, f)
740
+ "
741
+
742
+ bash "$SCRIPT_DIR/session-start.sh" "$ACCOUNT_DIR" admin 2>/dev/null || true
743
+
744
+ if [ ! -f "$STATE_FILE" ]; then
745
+ if [ ! -f "$DURABLE_FILE" ]; then
746
+ pass "Completed state (all gates true) not recovered, both files deleted"
747
+ else
748
+ fail "Completed state not recovered but durable file not deleted"
749
+ fi
750
+ else
751
+ fail "Completed state (all gates true) should NOT be recovered to volatile"
752
+ fi
753
+
754
+ # ---------------------------------------------------------------------------
755
+ # Test 31: PostToolUse cleans up state after last gated file is written
756
+ # ---------------------------------------------------------------------------
757
+ echo "Test 31: PostToolUse cleans up state after last gated file is written"
758
+ rm -f "$STATE_FILE"
759
+ DURABLE_FILE="$ACCOUNT_DIR/.claude/agent-create-state.json"
760
+
761
+ # Create state with all gates true
762
+ python3 -c "
763
+ import json
764
+ from datetime import datetime, timezone
765
+ state = {
766
+ 'slug': 'test-agent',
767
+ 'started': datetime.now(timezone.utc).isoformat(),
768
+ 'gates': {'soul': True, 'knowledge': True, 'config': True}
769
+ }
770
+ with open('$STATE_FILE', 'w') as f:
771
+ json.dump(state, f)
772
+ with open('$DURABLE_FILE', 'w') as f:
773
+ json.dump(state, f)
774
+ "
775
+
776
+ # Create all three gated files on disk
777
+ touch "$ACCOUNT_DIR/agents/test-agent/SOUL.md"
778
+ touch "$ACCOUNT_DIR/agents/test-agent/KNOWLEDGE.md"
779
+ touch "$ACCOUNT_DIR/agents/test-agent/config.json"
780
+
781
+ # Simulate a Write PostToolUse for config.json (the last file)
782
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/config.json","content":"{}"}}' \
783
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
784
+
785
+ if [ ! -f "$STATE_FILE" ] && [ ! -f "$DURABLE_FILE" ]; then
786
+ pass "State files cleaned up immediately after all gated files exist"
787
+ else
788
+ fail "State files should be deleted when all gates true and all files exist (volatile=$([ -f '$STATE_FILE' ] && echo yes || echo no) durable=$([ -f '$DURABLE_FILE' ] && echo yes || echo no))"
789
+ fi
790
+
791
+ # ---------------------------------------------------------------------------
792
+ # Test 32: PostToolUse does NOT clean up when a gated file is missing
793
+ # ---------------------------------------------------------------------------
794
+ echo "Test 32: PostToolUse does NOT clean up when a gated file is missing"
795
+ rm -f "$STATE_FILE"
796
+ rm -f "$DURABLE_FILE"
797
+
798
+ # Create state with all gates true
799
+ python3 -c "
800
+ import json
801
+ from datetime import datetime, timezone
802
+ state = {
803
+ 'slug': 'test-agent',
804
+ 'started': datetime.now(timezone.utc).isoformat(),
805
+ 'gates': {'soul': True, 'knowledge': True, 'config': True}
806
+ }
807
+ with open('$STATE_FILE', 'w') as f:
808
+ json.dump(state, f)
809
+ with open('$DURABLE_FILE', 'w') as f:
810
+ json.dump(state, f)
811
+ "
812
+
813
+ # Only two files on disk — KNOWLEDGE.md missing
814
+ touch "$ACCOUNT_DIR/agents/test-agent/SOUL.md"
815
+ rm -f "$ACCOUNT_DIR/agents/test-agent/KNOWLEDGE.md"
816
+ touch "$ACCOUNT_DIR/agents/test-agent/config.json"
817
+
818
+ # Simulate a Write PostToolUse for config.json
819
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/config.json","content":"{}"}}' \
820
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
821
+
822
+ if [ -f "$STATE_FILE" ] && [ -f "$DURABLE_FILE" ]; then
823
+ pass "State files preserved when KNOWLEDGE.md is missing on disk"
824
+ else
825
+ fail "State files should NOT be deleted when a gated file is missing"
826
+ fi
827
+
828
+ # ---------------------------------------------------------------------------
829
+ # Test 33: PostToolUse does NOT clean up when gates are not all true
830
+ # ---------------------------------------------------------------------------
831
+ echo "Test 33: PostToolUse does NOT clean up when gates are not all true"
832
+ rm -f "$STATE_FILE"
833
+ rm -f "$DURABLE_FILE"
834
+
835
+ # Create state with one gate still false
836
+ python3 -c "
837
+ import json
838
+ from datetime import datetime, timezone
839
+ state = {
840
+ 'slug': 'test-agent',
841
+ 'started': datetime.now(timezone.utc).isoformat(),
842
+ 'gates': {'soul': True, 'knowledge': False, 'config': True}
843
+ }
844
+ with open('$STATE_FILE', 'w') as f:
845
+ json.dump(state, f)
846
+ with open('$DURABLE_FILE', 'w') as f:
847
+ json.dump(state, f)
848
+ "
849
+
850
+ # All three files on disk
851
+ touch "$ACCOUNT_DIR/agents/test-agent/SOUL.md"
852
+ touch "$ACCOUNT_DIR/agents/test-agent/KNOWLEDGE.md"
853
+ touch "$ACCOUNT_DIR/agents/test-agent/config.json"
854
+
855
+ # Simulate a Write PostToolUse for SOUL.md
856
+ echo '{"tool_name":"Write","tool_input":{"file_path":"'"$ACCOUNT_DIR"'/agents/test-agent/SOUL.md","content":"personality"}}' \
857
+ | bash "$SCRIPT_DIR/agent-creation-post.sh" 2>/dev/null || true
858
+
859
+ if [ -f "$STATE_FILE" ] && [ -f "$DURABLE_FILE" ]; then
860
+ pass "State files preserved when knowledge gate is still false"
861
+ else
862
+ fail "State files should NOT be deleted when not all gates are true"
863
+ fi
864
+
865
+ # Clean up agent files for other tests
866
+ rm -f "$ACCOUNT_DIR/agents/test-agent/SOUL.md" "$ACCOUNT_DIR/agents/test-agent/KNOWLEDGE.md" "$ACCOUNT_DIR/agents/test-agent/config.json"
867
+ rm -f "$STATE_FILE" "$DURABLE_FILE"
868
+
869
+ # ---------------------------------------------------------------------------
870
+ # Summary
871
+ # ---------------------------------------------------------------------------
872
+ echo ""
873
+ echo "=== Results: $PASS passed, $FAIL failed ==="
874
+
875
+ if [ "$FAIL" -gt 0 ]; then
876
+ exit 1
877
+ fi
878
+ exit 0