@rubytech/create-maxy-code 0.1.33 → 0.1.34

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 (444) hide show
  1. package/dist/__tests__/account-id-env.test.js +1 -1
  2. package/dist/__tests__/apt-resolve.test.js +7 -7
  3. package/dist/__tests__/brew-install.test.js +1 -1
  4. package/dist/__tests__/brew-resolve.test.js +1 -1
  5. package/dist/__tests__/cdp-port-no-silent-fallback.test.js +4 -4
  6. package/dist/__tests__/init-logging.test.js +1 -1
  7. package/dist/__tests__/launchd-plist.test.js +1 -1
  8. package/dist/__tests__/macos-version.test.js +1 -1
  9. package/dist/__tests__/peer-brand-detect.test.js +1 -1
  10. package/dist/__tests__/platform-detect.test.js +2 -2
  11. package/dist/__tests__/port-canonicalisation.test.js +1 -1
  12. package/dist/__tests__/preflight-port-classifier.test.js +6 -6
  13. package/dist/__tests__/samba-provision.test.js +1 -1
  14. package/dist/__tests__/snap-chromium.test.js +1 -1
  15. package/dist/apt-resolve.js +5 -5
  16. package/dist/brew-install.js +1 -1
  17. package/dist/brew-resolve.js +3 -3
  18. package/dist/index.js +146 -122
  19. package/dist/init-logging.js +1 -1
  20. package/dist/launchd-plist.js +1 -1
  21. package/dist/macos-version.js +2 -2
  22. package/dist/peer-brand-detect.js +1 -1
  23. package/dist/pinned-binaries.js +1 -1
  24. package/dist/platform-detect.js +1 -1
  25. package/dist/port-resolution.js +2 -2
  26. package/dist/preflight-port-classifier.js +3 -3
  27. package/dist/samba-provision.js +1 -1
  28. package/dist/snap-chromium.js +3 -3
  29. package/dist/uninstall.js +28 -28
  30. package/package.json +1 -1
  31. package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js +1 -1
  32. package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js.map +1 -1
  33. package/payload/platform/lib/account-enumeration/dist/index.d.ts +1 -1
  34. package/payload/platform/lib/account-enumeration/src/__tests__/validate-env.test.ts +1 -1
  35. package/payload/platform/lib/account-enumeration/src/index.ts +1 -1
  36. package/payload/platform/lib/admins-write/dist/index.js +3 -3
  37. package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
  38. package/payload/platform/lib/admins-write/src/index.ts +4 -4
  39. package/payload/platform/lib/entitlement/dist/index.d.ts +1 -1
  40. package/payload/platform/lib/entitlement/dist/index.js +2 -2
  41. package/payload/platform/lib/entitlement/dist/index.js.map +1 -1
  42. package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js +1 -1
  43. package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js.map +1 -1
  44. package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.d.ts +3 -3
  45. package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.js +3 -3
  46. package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.d.ts +1 -1
  47. package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.js +1 -1
  48. package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.d.ts +1 -1
  49. package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.js +1 -1
  50. package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts +1 -1
  51. package/payload/platform/lib/graph-mcp/dist/cypher-validate.js +1 -1
  52. package/payload/platform/lib/graph-mcp/dist/index.d.ts +1 -1
  53. package/payload/platform/lib/graph-mcp/dist/index.js +24 -24
  54. package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
  55. package/payload/platform/lib/graph-mcp/dist/schema-cache.d.ts +1 -1
  56. package/payload/platform/lib/graph-mcp/dist/schema-cache.js +2 -2
  57. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts +3 -3
  58. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js +3 -3
  59. package/payload/platform/lib/graph-mcp/src/__tests__/warnings-envelope.test.ts +1 -1
  60. package/payload/platform/lib/graph-mcp/src/cypher-rewrite-stamp.ts +3 -3
  61. package/payload/platform/lib/graph-mcp/src/cypher-shim-read.ts +1 -1
  62. package/payload/platform/lib/graph-mcp/src/cypher-shim-write.ts +1 -1
  63. package/payload/platform/lib/graph-mcp/src/cypher-validate.ts +1 -1
  64. package/payload/platform/lib/graph-mcp/src/index.ts +29 -29
  65. package/payload/platform/lib/graph-mcp/src/schema-cache.ts +2 -2
  66. package/payload/platform/lib/graph-mcp/src/schema-cypher-parser.ts +3 -3
  67. package/payload/platform/lib/graph-search/dist/index.d.ts +12 -12
  68. package/payload/platform/lib/graph-search/dist/index.js +11 -11
  69. package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
  70. package/payload/platform/lib/graph-search/src/__tests__/bm25-label-gate.test.ts +2 -2
  71. package/payload/platform/lib/graph-search/src/__tests__/bm25-strong-bypass-threshold.test.ts +2 -2
  72. package/payload/platform/lib/graph-search/src/__tests__/brochure-threshold.test.ts +3 -3
  73. package/payload/platform/lib/graph-search/src/__tests__/expand-batch.test.ts +2 -2
  74. package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +6 -6
  75. package/payload/platform/lib/graph-search/src/__tests__/hybrid.test.ts +5 -5
  76. package/payload/platform/lib/graph-search/src/__tests__/vector-threshold.test.ts +2 -2
  77. package/payload/platform/lib/graph-search/src/index.ts +18 -18
  78. package/payload/platform/lib/graph-trash/dist/index.d.ts +3 -3
  79. package/payload/platform/lib/graph-trash/dist/index.js +3 -3
  80. package/payload/platform/lib/graph-trash/src/index.ts +3 -3
  81. package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js +4 -4
  82. package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js.map +1 -1
  83. package/payload/platform/lib/graph-write/dist/audit.d.ts +2 -2
  84. package/payload/platform/lib/graph-write/dist/audit.js +2 -2
  85. package/payload/platform/lib/graph-write/dist/conversation-provenance.js +1 -1
  86. package/payload/platform/lib/graph-write/dist/conversation-provenance.js.map +1 -1
  87. package/payload/platform/lib/graph-write/dist/index.d.ts +5 -5
  88. package/payload/platform/lib/graph-write/dist/index.js +12 -12
  89. package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
  90. package/payload/platform/lib/graph-write/src/__tests__/action-provenance-gate.test.ts +4 -4
  91. package/payload/platform/lib/graph-write/src/audit.ts +2 -2
  92. package/payload/platform/lib/graph-write/src/conversation-provenance.ts +1 -1
  93. package/payload/platform/lib/graph-write/src/index.ts +13 -13
  94. package/payload/platform/lib/mcp-eager/dist/index.d.ts +2 -2
  95. package/payload/platform/lib/mcp-eager/dist/index.js +2 -2
  96. package/payload/platform/lib/mcp-eager/src/index.ts +2 -2
  97. package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +2 -2
  98. package/payload/platform/lib/mcp-spawn-tee/dist/index.js +2 -2
  99. package/payload/platform/lib/mcp-spawn-tee/src/index.ts +2 -2
  100. package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts +1 -1
  101. package/payload/platform/lib/mcp-stderr-tee/dist/index.js +4 -4
  102. package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -1
  103. package/payload/platform/lib/mcp-stderr-tee/src/index.ts +4 -4
  104. package/payload/platform/lib/oauth-llm/dist/index.d.ts +4 -4
  105. package/payload/platform/lib/oauth-llm/dist/index.js +3 -3
  106. package/payload/platform/lib/oauth-llm/dist/index.js.map +1 -1
  107. package/payload/platform/lib/oauth-llm/src/index.ts +6 -6
  108. package/payload/platform/lib/persistent-components/dist/index.d.ts +1 -1
  109. package/payload/platform/lib/persistent-components/dist/index.js +1 -1
  110. package/payload/platform/lib/persistent-components/src/index.ts +1 -1
  111. package/payload/platform/lib/task-secrets/dist/index.js +1 -1
  112. package/payload/platform/lib/task-secrets/dist/index.js.map +1 -1
  113. package/payload/platform/lib/task-secrets/src/__tests__/redact-secrets.test.ts +1 -1
  114. package/payload/platform/lib/task-secrets/src/index.ts +1 -1
  115. package/payload/platform/neo4j/edge-annotations.json +9 -9
  116. package/payload/platform/neo4j/schema.cypher +32 -33
  117. package/payload/platform/package.json +2 -2
  118. package/payload/platform/plugins/admin/PLUGIN.md +0 -2
  119. package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +4 -4
  120. package/payload/platform/plugins/admin/hooks/__tests__/playwright-file-guard.test.sh +1 -1
  121. package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-base64-guard.test.sh +1 -1
  122. package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +13 -13
  123. package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +7 -7
  124. package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js +2 -2
  125. package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js.map +1 -1
  126. package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js +1 -1
  127. package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js.map +1 -1
  128. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js +2 -2
  129. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js.map +1 -1
  130. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js +1 -1
  131. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js.map +1 -1
  132. package/payload/platform/plugins/admin/mcp/dist/index.js +38 -65
  133. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  134. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +2 -2
  135. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -1
  136. package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js +2 -2
  137. package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js.map +1 -1
  138. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +5 -5
  139. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
  140. package/payload/platform/plugins/admin/skills/plugin-management/SKILL.md +1 -1
  141. package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +0 -1
  142. package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +1 -1
  143. package/payload/platform/plugins/admin/skills/unzip-attachment/SKILL.md +2 -2
  144. package/payload/platform/plugins/cloudflare/mcp/dist/index.js +1 -1
  145. package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
  146. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +1 -1
  147. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +6 -6
  148. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
  149. package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts +2 -2
  150. package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js +2 -2
  151. package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +1 -1
  152. package/payload/platform/plugins/cloudflare/references/manual-setup.md +4 -4
  153. package/payload/platform/plugins/cloudflare/scripts/__tests__/tunnel-ingress.test.ts +1 -1
  154. package/payload/platform/plugins/cloudflare/scripts/_stream-log.sh +8 -8
  155. package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.sh +2 -2
  156. package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.ts +16 -16
  157. package/payload/platform/plugins/cloudflare/scripts/reset-tunnel.sh +1 -1
  158. package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +28 -28
  159. package/payload/platform/plugins/cloudflare/scripts/tunnel-ingress.ts +5 -5
  160. package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +3 -3
  161. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +2 -2
  162. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -1
  163. package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.d.ts +1 -1
  164. package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.js +1 -1
  165. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +2 -2
  166. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -1
  167. package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js +1 -1
  168. package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js.map +1 -1
  169. package/payload/platform/plugins/docs/references/deployment.md +30 -1
  170. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -5
  171. package/payload/platform/plugins/docs/references/troubleshooting.md +3 -3
  172. package/payload/platform/plugins/email/mcp/dist/index.js +1 -1
  173. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
  174. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +2 -2
  175. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +1 -1
  176. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +1 -1
  177. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +1 -1
  178. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +2 -2
  179. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -1
  180. package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +1 -1
  181. package/payload/platform/plugins/email/mcp/dist/lib/screening.js +1 -1
  182. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +6 -6
  183. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
  184. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +1 -1
  185. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +2 -2
  186. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
  187. package/payload/platform/plugins/email/references/email-reference.md +2 -2
  188. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
  189. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
  190. package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
  191. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +24 -24
  192. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +6 -6
  193. package/payload/platform/plugins/memory/mcp/dist/index.js +8 -8
  194. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  195. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +33 -33
  196. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
  197. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +12 -12
  198. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
  199. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +3 -3
  200. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
  201. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +2 -2
  202. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -1
  203. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.d.ts.map +1 -1
  204. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js +1 -1
  205. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js.map +1 -1
  206. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts.map +1 -1
  207. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js +1 -2
  208. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js.map +1 -1
  209. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js +2 -2
  210. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js.map +1 -1
  211. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js +1 -1
  212. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js.map +1 -1
  213. package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.d.ts +2 -2
  214. package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.js +2 -2
  215. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js +6 -6
  216. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js.map +1 -1
  217. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +1 -1
  218. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +1 -1
  219. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +2 -2
  220. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +7 -7
  221. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
  222. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +2 -2
  223. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +2 -2
  224. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +9 -9
  225. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
  226. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +25 -25
  227. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
  228. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +1 -1
  229. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +5 -5
  230. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
  231. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +2 -2
  232. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -1
  233. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +4 -4
  234. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +3 -3
  235. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
  236. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +3 -3
  237. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +5 -5
  238. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
  239. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js +1 -1
  240. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js.map +1 -1
  241. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +5 -5
  242. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js.map +1 -1
  243. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js +1 -1
  244. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js.map +1 -1
  245. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js +2 -2
  246. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js.map +1 -1
  247. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js +4 -4
  248. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js.map +1 -1
  249. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +6 -6
  250. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -1
  251. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +7 -7
  252. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
  253. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js +2 -2
  254. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js.map +1 -1
  255. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js +3 -3
  256. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js.map +1 -1
  257. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +1 -1
  258. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +3 -3
  259. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -1
  260. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts +1 -1
  261. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js +1 -1
  262. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +2 -2
  263. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
  264. package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts +1 -1
  265. package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +1 -1
  266. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +2 -2
  267. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +1 -1
  268. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
  269. package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts +3 -3
  270. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +2 -2
  271. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js.map +1 -1
  272. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +9 -9
  273. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
  274. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +10 -11
  275. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
  276. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +1 -1
  277. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -1
  278. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +1 -1
  279. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
  280. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +1 -1
  281. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
  282. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +1 -1
  283. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +3 -3
  284. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  285. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +9 -9
  286. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
  287. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +5 -5
  288. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +9 -9
  289. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
  290. package/payload/platform/plugins/memory/mcp/scripts/boot-smoke.sh +1 -1
  291. package/payload/platform/plugins/memory/mcp/scripts/graph/fixture.cypher +1 -1
  292. package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -2
  293. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +1 -1
  294. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  295. package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +1 -1
  296. package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
  297. package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js +1 -1
  298. package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js.map +1 -1
  299. package/payload/platform/plugins/scheduling/mcp/dist/index.js +1 -1
  300. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  301. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +3 -3
  302. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js.map +1 -1
  303. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts +2 -2
  304. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +5 -5
  305. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -1
  306. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +1 -1
  307. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +6 -6
  308. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  309. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +1 -1
  310. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  311. package/payload/platform/plugins/tasks/mcp/dist/index.js +1 -1
  312. package/payload/platform/plugins/tasks/mcp/dist/index.js.map +1 -1
  313. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +2 -2
  314. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -1
  315. package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js +2 -2
  316. package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js.map +1 -1
  317. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts +1 -1
  318. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts.map +1 -1
  319. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts +5 -5
  320. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js +3 -3
  321. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js.map +1 -1
  322. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts +4 -4
  323. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js +2 -2
  324. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js.map +1 -1
  325. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +2 -2
  326. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -1
  327. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +2 -2
  328. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -1
  329. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +3 -3
  330. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +1 -1
  331. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +1 -1
  332. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +3 -3
  333. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +1 -1
  334. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +5 -5
  335. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
  336. package/payload/platform/plugins/whatsapp/mcp/dist/call-api.d.ts +1 -1
  337. package/payload/platform/plugins/whatsapp/mcp/dist/call-api.js +1 -1
  338. package/payload/platform/plugins/workflows/mcp/dist/index.js +1 -1
  339. package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
  340. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +1 -1
  341. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +1 -1
  342. package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +1 -1
  343. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +2 -2
  344. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -1
  345. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +1 -1
  346. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -1
  347. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +4 -4
  348. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
  349. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +1 -1
  350. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -1
  351. package/payload/platform/plugins/workflows/mcp/test-workflows.sh +2 -2
  352. package/payload/platform/scripts/__tests__/first-token-creates-stream-log.test.sh +1 -1
  353. package/payload/platform/scripts/__tests__/logs-read-prefix.sh +6 -6
  354. package/payload/platform/scripts/admin-conversation-recover.mjs +5 -5
  355. package/payload/platform/scripts/admin-persist-audit.ts +4 -4
  356. package/payload/platform/scripts/check-no-conversation-id-leaks.mjs +1 -1
  357. package/payload/platform/scripts/check-no-direct-clipboard.mjs +1 -1
  358. package/payload/platform/scripts/check-no-task-id-leaks.mjs +2 -2
  359. package/payload/platform/scripts/check-skill-load-coverage.mjs +1 -1
  360. package/payload/platform/scripts/component-knowledgedoc-backfill.ts +1 -1
  361. package/payload/platform/scripts/dedupe-userprofile-ghosts.sh +2 -2
  362. package/payload/platform/scripts/generate-entitlement-fixture.mjs +1 -1
  363. package/payload/platform/scripts/installer-device-verify.sh +6 -6
  364. package/payload/platform/scripts/lib/resolve-account-dir.sh +6 -6
  365. package/payload/platform/scripts/log-adherence-check.sh +3 -3
  366. package/payload/platform/scripts/logs-read.sh +13 -13
  367. package/payload/platform/scripts/logs-read.test.sh +1 -1
  368. package/payload/platform/scripts/migrate-import.sh +4 -4
  369. package/payload/platform/scripts/redact-install-logs.sh +1 -1
  370. package/payload/platform/scripts/seed-neo4j.sh +26 -32
  371. package/payload/platform/scripts/test-laptop-vnc-boot.sh +3 -3
  372. package/payload/platform/scripts/verify-skill-tool-surface.sh +17 -2
  373. package/payload/platform/scripts/vnc.sh +9 -9
  374. package/payload/platform/services/claude-session-manager/dist/config.d.ts +7 -2
  375. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  376. package/payload/platform/services/claude-session-manager/dist/config.js +3 -1
  377. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  378. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +2 -2
  379. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  380. package/payload/platform/services/claude-session-manager/dist/http-server.js +133 -90
  381. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  382. package/payload/platform/services/claude-session-manager/dist/index.js +17 -4
  383. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  384. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +2 -2
  385. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
  386. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +4 -4
  387. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
  388. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +1 -1
  389. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +1 -1
  390. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +2 -2
  391. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
  392. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +37 -18
  393. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  394. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +101 -44
  395. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  396. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js +1 -1
  397. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js.map +1 -1
  398. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +36 -11
  399. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
  400. package/payload/platform/services/claude-session-manager/dist/session-store.js +53 -2
  401. package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
  402. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js +2 -2
  403. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js.map +1 -1
  404. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +46 -1
  405. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  406. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +131 -24
  407. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  408. package/payload/platform/services/claude-session-manager/dist/tool-surface.js +1 -1
  409. package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
  410. package/payload/platform/services/claude-session-manager/dist/types.d.ts +8 -1
  411. package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
  412. package/payload/platform/services/claude-session-manager/dist/url-capture.js +1 -1
  413. package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -1
  414. package/payload/platform/templates/agents/admin/IDENTITY.md +14 -0
  415. package/payload/platform/templates/agents/admin/SOUL.md +1 -3
  416. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -3
  417. package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
  418. package/payload/platform/templates/systemd/edge.service.template +3 -3
  419. package/payload/premium-plugins/real-agent/BUNDLE.md +2 -4
  420. package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -5
  421. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
  422. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
  423. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
  424. package/payload/server/{chunk-ZGJ6CUU2.js → chunk-3G6JMV7N.js} +1 -1
  425. package/payload/server/{chunk-KVGTWNKQ.js → chunk-NNHHGQJL.js} +314 -5
  426. package/payload/server/{chunk-RZQMYJVY.js → chunk-QC5LHYPH.js} +3 -3
  427. package/payload/server/{cloudflare-task-tracker-4PKOLE4H.js → cloudflare-task-tracker-NEB3X6O2.js} +2 -2
  428. package/payload/server/maxy-edge.js +2 -2
  429. package/payload/server/public/assets/{admin-Cuu1QdAA.js → admin-CF2ZQvXu.js} +1 -1
  430. package/payload/server/public/index.html +1 -1
  431. package/payload/server/server.js +274 -396
  432. package/payload/platform/plugins/anthropic/.claude-plugin/plugin.json +0 -8
  433. package/payload/platform/plugins/anthropic/PLUGIN.md +0 -40
  434. package/payload/platform/plugins/anthropic/references/console-api.md +0 -186
  435. package/payload/platform/plugins/anthropic/references/setup-guide.md +0 -36
  436. package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +0 -136
  437. package/payload/platform/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
  438. package/payload/platform/plugins/estate-onboarding/PLUGIN.md +0 -30
  439. package/payload/platform/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
  440. package/payload/platform/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
  441. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
  442. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/PLUGIN.md +0 -30
  443. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
  444. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
@@ -3,7 +3,7 @@ name: personal-assistant
3
3
  description: "Your personal assistant. Scheduling, platform administration, messaging channels (Telegram, WhatsApp, email, Outlook), system health, Cloudflare tunnel setup, and browser automation. Delegate when a task involves managing your calendar, configuring the platform, operating messaging channels, setting up a tunnel or domain, or completing interactive browser tasks."
4
4
  summary: "Handles the operational tasks you'd give a personal assistant: scheduling meetings, managing your platform settings, connecting messaging channels, and completing browser-based tasks on your behalf."
5
5
  model: claude-sonnet-4-6
6
- tools: mcp__admin__system-status, mcp__admin__brand-settings, mcp__admin__account-manage, mcp__admin__account-update, mcp__admin__logs-read, mcp__admin__plugin-read, mcp__admin__api-key-store, mcp__admin__api-key-verify, mcp__admin__file-attach, mcp__admin__wifi, mcp__contacts__contact-create, mcp__contacts__contact-lookup, mcp__contacts__contact-update, mcp__contacts__contact-delete, mcp__contacts__contact-list, mcp__contacts__contact-export, mcp__contacts__contact-erase, mcp__contacts__group-create, mcp__contacts__group-manage, mcp__telegram__message, mcp__telegram__message-history, mcp__telegram__telegram-webhook-register, mcp__whatsapp__whatsapp-login-start, mcp__whatsapp__whatsapp-login-wait, mcp__whatsapp__whatsapp-status, mcp__whatsapp__whatsapp-disconnect, mcp__whatsapp__whatsapp-send, mcp__whatsapp__whatsapp-send-document, mcp__whatsapp__whatsapp-config, mcp__whatsapp__whatsapp-activity, mcp__whatsapp__whatsapp-conversations, mcp__whatsapp__whatsapp-messages, mcp__whatsapp__whatsapp-conversation-graph-state, mcp__whatsapp__whatsapp-group-info, mcp__email__email-setup, mcp__email__email-read, mcp__email__email-send, mcp__email__email-reply, mcp__email__email-search, mcp__email__email-graph-query, mcp__email__email-otp-extract, mcp__email__email-status, mcp__email__email-auto-respond-config, mcp__outlook__outlook-account-register, mcp__outlook__outlook-mail-list, mcp__outlook__outlook-mail-search, mcp__outlook__outlook-calendar-list, mcp__outlook__outlook-calendar-event, mcp__outlook__outlook-contacts-list, mcp__outlook__outlook-mailbox-info, mcp__scheduling__schedule-event, mcp__scheduling__schedule-list, mcp__scheduling__schedule-get, mcp__scheduling__schedule-update, mcp__scheduling__schedule-cancel, mcp__scheduling__schedule-export-ics, mcp__scheduling__schedule-import-ics, mcp__scheduling__time-resolve, mcp__memory__memory-search, mcp__memory__profile-update, mcp__plugin_playwright_playwright__browser_navigate, mcp__plugin_playwright_playwright__browser_navigate_back, mcp__plugin_playwright_playwright__browser_snapshot, mcp__plugin_playwright_playwright__browser_click, mcp__plugin_playwright_playwright__browser_fill, mcp__plugin_playwright_playwright__browser_fill_form, mcp__plugin_playwright_playwright__browser_type, mcp__plugin_playwright_playwright__browser_press_key, mcp__plugin_playwright_playwright__browser_hover, mcp__plugin_playwright_playwright__browser_select_option, mcp__plugin_playwright_playwright__browser_wait_for, mcp__plugin_playwright_playwright__browser_handle_dialog, mcp__plugin_playwright_playwright__browser_evaluate, mcp__plugin_playwright_playwright__browser_console_messages, mcp__plugin_playwright_playwright__browser_resize, mcp__plugin_playwright_playwright__browser_tabs, mcp__plugin_playwright_playwright__browser_close
6
+ tools: mcp__admin__system-status, mcp__admin__brand-settings, mcp__admin__account-manage, mcp__admin__account-update, mcp__admin__logs-read, mcp__admin__plugin-read, mcp__admin__file-attach, mcp__admin__wifi, mcp__contacts__contact-create, mcp__contacts__contact-lookup, mcp__contacts__contact-update, mcp__contacts__contact-delete, mcp__contacts__contact-list, mcp__contacts__contact-export, mcp__contacts__contact-erase, mcp__contacts__group-create, mcp__contacts__group-manage, mcp__telegram__message, mcp__telegram__message-history, mcp__telegram__telegram-webhook-register, mcp__whatsapp__whatsapp-login-start, mcp__whatsapp__whatsapp-login-wait, mcp__whatsapp__whatsapp-status, mcp__whatsapp__whatsapp-disconnect, mcp__whatsapp__whatsapp-send, mcp__whatsapp__whatsapp-send-document, mcp__whatsapp__whatsapp-config, mcp__whatsapp__whatsapp-activity, mcp__whatsapp__whatsapp-conversations, mcp__whatsapp__whatsapp-messages, mcp__whatsapp__whatsapp-conversation-graph-state, mcp__whatsapp__whatsapp-group-info, mcp__email__email-setup, mcp__email__email-read, mcp__email__email-send, mcp__email__email-reply, mcp__email__email-search, mcp__email__email-graph-query, mcp__email__email-otp-extract, mcp__email__email-status, mcp__email__email-auto-respond-config, mcp__outlook__outlook-account-register, mcp__outlook__outlook-mail-list, mcp__outlook__outlook-mail-search, mcp__outlook__outlook-calendar-list, mcp__outlook__outlook-calendar-event, mcp__outlook__outlook-contacts-list, mcp__outlook__outlook-mailbox-info, mcp__scheduling__schedule-event, mcp__scheduling__schedule-list, mcp__scheduling__schedule-get, mcp__scheduling__schedule-update, mcp__scheduling__schedule-cancel, mcp__scheduling__schedule-export-ics, mcp__scheduling__schedule-import-ics, mcp__scheduling__time-resolve, mcp__memory__memory-search, mcp__memory__profile-update, mcp__plugin_playwright_playwright__browser_navigate, mcp__plugin_playwright_playwright__browser_navigate_back, mcp__plugin_playwright_playwright__browser_snapshot, mcp__plugin_playwright_playwright__browser_click, mcp__plugin_playwright_playwright__browser_fill, mcp__plugin_playwright_playwright__browser_fill_form, mcp__plugin_playwright_playwright__browser_type, mcp__plugin_playwright_playwright__browser_press_key, mcp__plugin_playwright_playwright__browser_hover, mcp__plugin_playwright_playwright__browser_select_option, mcp__plugin_playwright_playwright__browser_wait_for, mcp__plugin_playwright_playwright__browser_handle_dialog, mcp__plugin_playwright_playwright__browser_evaluate, mcp__plugin_playwright_playwright__browser_console_messages, mcp__plugin_playwright_playwright__browser_resize, mcp__plugin_playwright_playwright__browser_tabs, mcp__plugin_playwright_playwright__browser_close
7
7
  ---
8
8
 
9
9
  # Personal Assistant
@@ -40,8 +40,6 @@ Each domain has a small set of tools and, where it exists, a skill that drives t
40
40
 
41
41
  **Browser is visible.** Playwright is rendered to the operator's VNC viewer. They see every navigation, every fill, every click. After `browser_navigate`, call `browser_tabs` with `action: "select"` on the current tab index so the VNC viewer shows the page you just opened. Prefer `browser_snapshot` (accessibility tree with `ref` IDs) over `browser_take_screenshot`; take a screenshot only when you need to verify layout, colour, image, or canvas content. Use `browser_fill_form` over repeated `browser_fill`. Use `browser_evaluate` for state checks. Check `browser_console_messages` when something behaves unexpectedly. Dismiss cookie consent before the main task. Report CAPTCHA or bot detection as a blocker; do not try to solve it.
42
42
 
43
- **Anthropic API key acquisition is cookie-based.** Tell the operator the Anthropic Console will appear in the VNC browser already mounted in the chat (no extra tool call). Credits must exist before key creation; keys on zero-balance accounts are permanently rejected. The operator signs in themselves. Never fill credentials yourself. After creation, store via `api-key-store` and verify via `api-key-verify`.
44
-
45
43
  ## Optional capabilities
46
44
 
47
45
  Some tools come from optional plugins. When a brief needs a capability and the tools are absent from your tool list, name the gap in your output so admin can suggest activation. Telegram, WhatsApp, business-assistant (behaviour, no tools), sales (behaviour, no tools).
@@ -38,7 +38,7 @@ A workflow is a named, persistent composition of executable steps. Steps are eit
38
38
 
39
39
  Confirm name and steps with the user before creating. `workflow-validate` checks every referenced tool and plugin is available; a workflow with unmet dependencies stays in `draft`. Status moves through `draft`, `active`, `paused`. Runs are `completed`, `partial`, or `failed`; read history via `workflow-runs`.
40
40
 
41
- Workflows can be triggered by scheduled events through the `check-due-events` dispatcher. As of Task 039 the dispatcher is not currently scheduled; migration to Desktop scheduled tasks is tracked separately. Until that lands, a workflow scheduled via `action: { plugin: "workflows", tool: "workflow-execute", args: { workflowId: "..." } }` stays inert until an operator invokes the dispatcher manually.
41
+ Workflows can be triggered by scheduled events through the `check-due-events` dispatcher. The dispatcher is not currently scheduled; migration to Desktop scheduled tasks is tracked separately. Until that lands, a workflow scheduled via `action: { plugin: "workflows", tool: "workflow-execute", args: { workflowId: "..." } }` stays inert until an operator invokes the dispatcher manually.
42
42
 
43
43
  ## Graph adjacency at write time
44
44
 
@@ -9,9 +9,9 @@ Description=Edge service (public port + VNC transport — independent of the mai
9
9
  Type=simple
10
10
  # ExecStartPre owns the VNC stack so an `npx -y @rubytech/create-maxy@latest`
11
11
  # run from the admin UI can restart the main brand service without taking
12
- # Xtigervnc or websockify down with it. Task 647. Task 664 removed the ttyd
13
- # transport — upgrades now run via systemd-run --user transient units that
14
- # are peers of maxy-ui and survive its restart structurally.
12
+ # Xtigervnc or websockify down with it. The ttyd transport was removed
13
+ # upgrades now run via systemd-run --user transient units that are peers
14
+ # of maxy-ui and survive its restart structurally.
15
15
  ExecStartPre=/bin/bash __INSTALL_DIR__/platform/scripts/vnc.sh start
16
16
  ExecStart=/usr/bin/node __INSTALL_DIR__/server/maxy-edge.js
17
17
  ExecStopPost=/bin/bash __INSTALL_DIR__/platform/scripts/vnc.sh stop
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: real-agent
3
- description: "UK estate agency skills + Loop CRM integration — 11 sub-plugins covering sales, listings, vendor management, buyer management, lead generation, coaching, business operations, onboarding, teaching, Loop CRM, and property brochures. 3 specialist roles (negotiator, valuer, compliance). 32 skills + 23 MCP tools."
3
+ description: "UK estate agency skills + Loop CRM integration — 10 sub-plugins covering sales, listings, vendor management, buyer management, lead generation, coaching, business operations, teaching, Loop CRM, and property brochures. 3 specialist roles (negotiator, valuer, compliance). 31 skills + 23 MCP tools."
4
4
  plugins:
5
5
  - estate-sales
6
6
  - listings
@@ -9,7 +9,6 @@ plugins:
9
9
  - leads
10
10
  - estate-coaching
11
11
  - estate-business
12
- - estate-onboarding
13
12
  - estate-teaching
14
13
  - loop
15
14
  - brochures
@@ -17,7 +16,7 @@ plugins:
17
16
 
18
17
  # Real Agent
19
18
 
20
- Premium plugin bundle for UK estate agency professionals. Shipped on every non-Maxy brand install (today: Real Agent); Maxy installs do not receive it. All 11 sub-plugins ship as a set, each independently activatable via `enabledPlugins`. Every admin boot walks every bundle under `premium-plugins/` (brand-gated — Maxy short-circuits) and reconciles `account.json` `enabledPlugins` against on-disk presence: any sub-plugin from the `plugins:` list above whose `platform/plugins/<sub>/PLUGIN.md` exists gets stamped via an idempotent set-union, so `mcp__loop__*` tools and the other sub-plugin surfaces are visible to the admin agent from the first turn after install — and on first boot post-deploy for accounts that already had the bundle on disk from a prior install. Disable individual sub-plugins with `plugin-toggle-enabled`. The bundle also delivers three specialist roles (negotiator, valuer, and compliance) that embed domain knowledge from the sub-plugins and operate autonomously with Loop CRM tools.
19
+ Premium plugin bundle for UK estate agency professionals. Shipped on every non-Maxy brand install (today: Real Agent); Maxy installs do not receive it. All 10 sub-plugins ship as a set, each independently activatable via `enabledPlugins`. Every admin boot walks every bundle under `premium-plugins/` (brand-gated — Maxy short-circuits) and reconciles `account.json` `enabledPlugins` against on-disk presence: any sub-plugin from the `plugins:` list above whose `platform/plugins/<sub>/PLUGIN.md` exists gets stamped via an idempotent set-union, so `mcp__loop__*` tools and the other sub-plugin surfaces are visible to the admin agent from the first turn after install — and on first boot post-deploy for accounts that already had the bundle on disk from a prior install. Disable individual sub-plugins with `plugin-toggle-enabled`. The bundle also delivers three specialist roles (negotiator, valuer, and compliance) that embed domain knowledge from the sub-plugins and operate autonomously with Loop CRM tools.
21
20
 
22
21
  ## Specialist Roles
23
22
 
@@ -38,7 +37,6 @@ Premium plugin bundle for UK estate agency professionals. Shipped on every non-M
38
37
  | `leads` | 2 | — | Pipeline building — nurturing and prospecting |
39
38
  | `estate-coaching` | 4 | — | People development — coaching, training, performance |
40
39
  | `estate-business` | 4 | — | Business owner skills — growth, operations, brand, partnerships |
41
- | `estate-onboarding` | 1 | — | First-run member onboarding |
42
40
  | `estate-teaching` | 1 | — | Structured education module browsing and delivery |
43
41
  | `loop` | — | 23 | Loop CRM integration — properties, people, viewings, feedback, team, marketing, customer preferences, supplier |
44
42
  | `brochures` | 5 | — | Property brochure pipeline — brand extract, property extract, A4 layout, print constraints |
@@ -24,11 +24,6 @@
24
24
  "source": "./estate-coaching",
25
25
  "version": "0.1.0"
26
26
  },
27
- {
28
- "name": "estate-onboarding",
29
- "source": "./estate-onboarding",
30
- "version": "0.1.0"
31
- },
32
27
  {
33
28
  "name": "estate-sales",
34
29
  "source": "./estate-sales",
@@ -15,11 +15,11 @@ function readPassword() {
15
15
  }
16
16
  export function getDriver() {
17
17
  if (!driver) {
18
- // Task 580: NEO4J_URI must be explicit. Silent default to :7687 was the
19
- // vector for Task 577's orphan data in Maxy's DB from a realagent install.
18
+ // NEO4J_URI must be explicit. Silent default to:7687 was the
19
+ // vector for the orphan data in Maxy's DB from a realagent install.
20
20
  const uri = process.env.NEO4J_URI;
21
21
  if (!uri) {
22
- throw new Error("[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687 (Task 580)");
22
+ throw new Error("[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687");
23
23
  }
24
24
  const user = process.env.NEO4J_USER ?? "neo4j";
25
25
  const password = readPassword();
@@ -1 +1 @@
1
- {"version":3,"file":"neo4j.js","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACxE,wBAAwB,CACzB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,gCAAgC,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"neo4j.js","sourceRoot":"","sources":["../../src/lib/neo4j.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EACxE,wBAAwB,CACzB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,gCAAgC,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,6DAA6D;QAC7D,oEAAoE;QACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -23,12 +23,12 @@ function readPassword(): string {
23
23
 
24
24
  export function getDriver(): Driver {
25
25
  if (!driver) {
26
- // Task 580: NEO4J_URI must be explicit. Silent default to :7687 was the
27
- // vector for Task 577's orphan data in Maxy's DB from a realagent install.
26
+ // NEO4J_URI must be explicit. Silent default to:7687 was the
27
+ // vector for the orphan data in Maxy's DB from a realagent install.
28
28
  const uri = process.env.NEO4J_URI;
29
29
  if (!uri) {
30
30
  throw new Error(
31
- "[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687 (Task 580)"
31
+ "[loop] NEO4J_URI unset — refusing to default to bolt://localhost:7687"
32
32
  );
33
33
  }
34
34
  const user = process.env.NEO4J_USER ?? "neo4j";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConversationOwner
3
- } from "./chunk-KVGTWNKQ.js";
3
+ } from "./chunk-NNHHGQJL.js";
4
4
 
5
5
  // node_modules/hono/dist/compose.js
6
6
  var compose = (middleware, onError, onNotFound) => {
@@ -229,7 +229,7 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
229
229
  OPTIONAL MATCH (tail:Message)-[:PART_OF]->(c)
230
230
  WHERE NOT (tail)-[:NEXT]->(:Message)
231
231
  AND (tail:UserMessage OR tail:AssistantMessage)
232
- // Task 857 \u2014 sublabel-scope the tail to the agent-path's own sublabels.
232
+ // sublabel-scope the tail to the agent-path's own sublabels.
233
233
  // Without this, a Task-857 :WhatsAppMessage row (no outgoing :NEXT)
234
234
  // would be picked as tail and the agent-path would chain
235
235
  // :WhatsAppMessage\u2192:UserMessage, crossing the live-channel chain.
@@ -277,7 +277,7 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
277
277
  textOffset: comp.textOffset,
278
278
  submitted: false,
279
279
  createdAt: datetime(),
280
- // Task 942 \u2014 store the artefact attachmentId on the :Component
280
+ // store the artefact attachmentId on the:Component
281
281
  // itself when this is a PERSISTENT_COMPONENTS write whose disk
282
282
  // write succeeded. Field is null for non-persistent / mime-skip
283
283
  // / disk-fail components. Lets the audit + backfill scripts
@@ -288,7 +288,7 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
288
288
  attachmentId: comp.artefactAttachmentId
289
289
  })
290
290
  )
291
- // Task 942 \u2014 for PERSISTENT_COMPONENTS whose disk write succeeded
291
+ // for PERSISTENT_COMPONENTS whose disk write succeeded
292
292
  // (artefactAttachmentId is non-null), MERGE the sibling
293
293
  // :KnowledgeDocument projection AND a :HAS_KNOWLEDGE_DOCUMENT edge
294
294
  // from the parent :Message in the same Cypher tx. ON CREATE stamps
@@ -346,13 +346,13 @@ async function persistMessage(conversationId, role, content, accountId, tokens,
346
346
  data: comp.data,
347
347
  ordinal: neo4j.int(comp.ordinal),
348
348
  textOffset: neo4j.int(comp.textOffset),
349
- // Task 942 — null for non-persistent / mime-skip / disk-fail
349
+ // null for non-persistent / mime-skip / disk-fail
350
350
  // components; the FOREACH stamps this directly onto the
351
351
  // :Component row so audit + backfill read attachmentId without
352
352
  // re-deriving from componentId.
353
353
  artefactAttachmentId: comp.artefactAttachmentId ?? null
354
354
  })),
355
- // Task 942 — :KnowledgeDocument MERGE list. One row per
355
+ //:KnowledgeDocument MERGE list. One row per
356
356
  // PERSISTENT_COMPONENTS component whose disk write succeeded;
357
357
  // text-only / mime-skip / disk-fail components are absent so
358
358
  // the FOREACH no-ops on them. attachmentId here matches the
@@ -860,6 +860,10 @@ async function renameConversation(conversationId, label) {
860
860
  await session.close();
861
861
  }
862
862
  }
863
+ var DECAY_THRESHOLD_DAYS = 14;
864
+ var DECAY_RATE_PER_DAY = 0.05;
865
+ var INJECTION_THRESHOLD = 0.4;
866
+ var MAX_SUMMARY_PREFERENCES = 30;
863
867
  async function getUserTimezone(accountId, userId) {
864
868
  const session = getSession();
865
869
  try {
@@ -968,6 +972,14 @@ async function writeAdminUserAndPerson(params) {
968
972
  await session.close();
969
973
  }
970
974
  }
975
+ var PROFILE_CATEGORIES = [
976
+ "communication",
977
+ "scheduling",
978
+ "decision",
979
+ "workflow",
980
+ "content",
981
+ "interaction"
982
+ ];
971
983
  var PROFILE_FIELD_TEMPLATES = {
972
984
  communication: [
973
985
  "preferredChannel",
@@ -1014,6 +1026,302 @@ var TOTAL_PROFILE_FIELDS = Object.values(PROFILE_FIELD_TEMPLATES).reduce(
1014
1026
  (n, fs) => n + fs.length,
1015
1027
  0
1016
1028
  );
1029
+ function computeAbsentFields(preferences, extraTemplates = {}) {
1030
+ const covered = /* @__PURE__ */ new Set();
1031
+ for (const pref of preferences) {
1032
+ const isCovered = pref.notApplicable === true || pref.confidence >= INJECTION_THRESHOLD;
1033
+ if (isCovered) covered.add(`${pref.category}.${pref.key}`);
1034
+ }
1035
+ const absent = [];
1036
+ for (const [category, fields] of Object.entries(PROFILE_FIELD_TEMPLATES)) {
1037
+ for (const field of fields) {
1038
+ const dotted = `${category}.${field}`;
1039
+ if (!covered.has(dotted)) absent.push(dotted);
1040
+ }
1041
+ }
1042
+ for (const [category, fields] of Object.entries(extraTemplates)) {
1043
+ if (category in PROFILE_FIELD_TEMPLATES) continue;
1044
+ for (const field of fields) {
1045
+ const dotted = `${category}.${field}`;
1046
+ if (!covered.has(dotted)) absent.push(dotted);
1047
+ }
1048
+ }
1049
+ return absent;
1050
+ }
1051
+ function parsePluginProfileKeys(manifest) {
1052
+ const fm = manifest.match(/^---\n([\s\S]*?)\n---/);
1053
+ if (!fm) return [];
1054
+ const out = [];
1055
+ let inBlock = false;
1056
+ for (const line of fm[1].split("\n")) {
1057
+ if (/^profileKeys:/.test(line)) {
1058
+ inBlock = true;
1059
+ continue;
1060
+ }
1061
+ if (inBlock) {
1062
+ const m = line.match(/^\s+-\s+(.+?)\s*$/);
1063
+ if (m) out.push(m[1]);
1064
+ else break;
1065
+ }
1066
+ }
1067
+ return out;
1068
+ }
1069
+ function loadEnabledPluginProfileKeys(accountId) {
1070
+ const accountFile = resolve(PLATFORM_ROOT, "..", "data/accounts", accountId, "account.json");
1071
+ if (!existsSync(accountFile)) return {};
1072
+ let enabled;
1073
+ try {
1074
+ const raw = readFileSync(accountFile, "utf-8");
1075
+ const parsed = JSON.parse(raw);
1076
+ enabled = Array.isArray(parsed.enabledPlugins) ? parsed.enabledPlugins.filter((p) => typeof p === "string") : [];
1077
+ } catch (err) {
1078
+ console.error(
1079
+ `[profile-keys] account.json read failed for ${accountId.slice(0, 8)}\u2026: ${err instanceof Error ? err.message : String(err)}`
1080
+ );
1081
+ return {};
1082
+ }
1083
+ const merged = {};
1084
+ for (const pluginName of enabled) {
1085
+ const manifestPath = resolve(PLATFORM_ROOT, "plugins", pluginName, "PLUGIN.md");
1086
+ if (!existsSync(manifestPath)) continue;
1087
+ let manifest;
1088
+ try {
1089
+ manifest = readFileSync(manifestPath, "utf-8");
1090
+ } catch {
1091
+ continue;
1092
+ }
1093
+ for (const dotted of parsePluginProfileKeys(manifest)) {
1094
+ const dot = dotted.indexOf(".");
1095
+ if (dot <= 0 || dot === dotted.length - 1) {
1096
+ console.error(`[profile-keys] malformed dotted key in ${pluginName}: ${dotted}`);
1097
+ continue;
1098
+ }
1099
+ const category = dotted.slice(0, dot);
1100
+ const key = dotted.slice(dot + 1);
1101
+ if (!merged[category]) merged[category] = /* @__PURE__ */ new Set();
1102
+ merged[category].add(key);
1103
+ }
1104
+ }
1105
+ const out = {};
1106
+ for (const [cat, set] of Object.entries(merged)) out[cat] = [...set];
1107
+ return out;
1108
+ }
1109
+ var sparseStateLogged = /* @__PURE__ */ new Set();
1110
+ async function loadUserProfile(accountId, userId, conversationId) {
1111
+ console.error(
1112
+ `[profile] loadUserProfile entry accountId=${accountId.slice(0, 8)}\u2026 userId=${userId} conversationId=${conversationId ? `${conversationId.slice(0, 8)}\u2026` : "<none>"}`
1113
+ );
1114
+ const session = getSession();
1115
+ try {
1116
+ const serverTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
1117
+ const mergeResult = await session.run(
1118
+ `MATCH (au:AdminUser {userId: $userId})
1119
+ MERGE (au)-[:HAS_PROFILE]->(up:UserProfile {accountId: $accountId, userId: $userId})
1120
+ ON CREATE SET
1121
+ up.createdAt = $now,
1122
+ up.updatedAt = $now,
1123
+ up.profileVersion = 0,
1124
+ up.scope = 'admin',
1125
+ up.timezone = $serverTimezone
1126
+ ON MATCH SET
1127
+ up.timezone = CASE WHEN up.timezone IS NULL OR trim(up.timezone) = '' THEN $serverTimezone ELSE up.timezone END
1128
+ RETURN up.createdAt = $now AS isNew`,
1129
+ { accountId, userId, now: (/* @__PURE__ */ new Date()).toISOString(), serverTimezone }
1130
+ );
1131
+ if (mergeResult.records.length === 0) {
1132
+ console.error(`[profile] loadUserProfile: AdminUser not found for userId=${userId} accountId=${accountId.slice(0, 8)}\u2026 \u2014 profile not created, invariant violated`);
1133
+ return null;
1134
+ }
1135
+ const isNew = mergeResult.records[0].get("isNew");
1136
+ if (isNew) {
1137
+ console.error(`[profile] created new profile: userId=${userId} accountId=${accountId.slice(0, 8)}\u2026 timezone=${serverTimezone}`);
1138
+ }
1139
+ const nowMs = Date.now();
1140
+ const thresholdMs = DECAY_THRESHOLD_DAYS * 24 * 60 * 60 * 1e3;
1141
+ const staleResult = await session.run(
1142
+ `MATCH (up:UserProfile {accountId: $accountId, userId: $userId})-[:HAS_PREFERENCE]->(pref:Preference)
1143
+ WHERE pref.observedAt IS NOT NULL
1144
+ RETURN pref.preferenceId AS preferenceId,
1145
+ pref.observedAt AS observedAt,
1146
+ pref.confidence AS confidence`,
1147
+ { accountId, userId }
1148
+ );
1149
+ let decayCount = 0;
1150
+ for (const record of staleResult.records) {
1151
+ const observedAt = record.get("observedAt");
1152
+ const confidence = record.get("confidence");
1153
+ const observedMs = new Date(observedAt).getTime();
1154
+ const ageMs = nowMs - observedMs;
1155
+ if (ageMs > thresholdMs && confidence > 0) {
1156
+ const daysPastThreshold = (ageMs - thresholdMs) / (24 * 60 * 60 * 1e3);
1157
+ const decayedConfidence = Math.max(0, confidence - DECAY_RATE_PER_DAY * daysPastThreshold);
1158
+ if (decayedConfidence !== confidence) {
1159
+ await session.run(
1160
+ `MATCH (pref:Preference {preferenceId: $preferenceId, accountId: $accountId})
1161
+ SET pref.confidence = $confidence`,
1162
+ {
1163
+ preferenceId: record.get("preferenceId"),
1164
+ accountId,
1165
+ confidence: decayedConfidence
1166
+ }
1167
+ );
1168
+ decayCount++;
1169
+ }
1170
+ }
1171
+ }
1172
+ const result = await session.run(
1173
+ `MATCH (up:UserProfile {accountId: $accountId, userId: $userId})
1174
+ OPTIONAL MATCH (au:AdminUser {userId: $userId})-[:OWNS]->(p:Person {accountId: $accountId})
1175
+ OPTIONAL MATCH (up)-[:HAS_PREFERENCE]->(pref:Preference)
1176
+ WHERE pref.confidence >= $threshold OR pref.notApplicable = true
1177
+ WITH up, p, pref
1178
+ ORDER BY pref.confidence DESC
1179
+ WITH up, p, collect(pref) AS allPrefs
1180
+ WITH up, p, allPrefs[0..$limit] AS prefs
1181
+ RETURN up, p AS person, prefs`,
1182
+ { accountId, userId, threshold: INJECTION_THRESHOLD, limit: MAX_SUMMARY_PREFERENCES }
1183
+ );
1184
+ if (result.records.length === 0 || !result.records[0].get("up")) {
1185
+ return null;
1186
+ }
1187
+ const upNode = result.records[0].get("up");
1188
+ const profileProps = { ...upNode.properties };
1189
+ const personNode = result.records[0].get("person");
1190
+ if (personNode?.properties) {
1191
+ if (personNode.properties.givenName !== void 0) profileProps.givenName = personNode.properties.givenName;
1192
+ if (personNode.properties.familyName !== void 0) profileProps.familyName = personNode.properties.familyName;
1193
+ if (personNode.properties.email !== void 0) profileProps.email = personNode.properties.email;
1194
+ if (personNode.properties.telephone !== void 0) profileProps.telephone = personNode.properties.telephone;
1195
+ }
1196
+ const prefNodes = result.records[0].get("prefs");
1197
+ const preferences = prefNodes.map((p) => ({
1198
+ preferenceId: p.properties.preferenceId,
1199
+ category: p.properties.category,
1200
+ key: p.properties.key,
1201
+ value: p.properties.value,
1202
+ confidence: p.properties.confidence,
1203
+ source: p.properties.source,
1204
+ observedAt: p.properties.observedAt,
1205
+ notApplicable: p.properties.notApplicable === true
1206
+ }));
1207
+ const extraTemplates = loadEnabledPluginProfileKeys(accountId);
1208
+ const extraFieldCount = Object.values(extraTemplates).reduce((n, fs) => n + fs.length, 0);
1209
+ const summary = formatProfileSummary(profileProps, preferences, extraTemplates);
1210
+ const absentFields = computeAbsentFields(preferences, extraTemplates);
1211
+ const totalFields = TOTAL_PROFILE_FIELDS + extraFieldCount;
1212
+ const fieldCoverageCount = totalFields - absentFields.length;
1213
+ const presentCategories = new Set(
1214
+ preferences.filter((p) => p.notApplicable === true || p.confidence >= INJECTION_THRESHOLD).map((p) => p.category)
1215
+ );
1216
+ const absentCategories = PROFILE_CATEGORIES.filter((c) => !presentCategories.has(c));
1217
+ const categoryCoverage = PROFILE_CATEGORIES.length - absentCategories.length;
1218
+ console.error(
1219
+ `[profile] loaded for userId=${userId} accountId=${accountId.slice(0, 8)}\u2026 preferences=${preferences.length} fieldCoverage=${fieldCoverageCount}/${totalFields} categoryCoverage=${categoryCoverage}/${PROFILE_CATEGORIES.length} (decay: ${decayCount} updated)`
1220
+ );
1221
+ const identityKeys = [
1222
+ { prop: "email", token: "email" },
1223
+ // Schema-canonical name. `phone` is the synonym (rejected at tool
1224
+ // surface); the log uses `telephone` to keep grep aligned with
1225
+ // schema-base.md doctrine the brief enforces.
1226
+ { prop: "telephone", token: "telephone" },
1227
+ { prop: "givenName", token: "givenName" },
1228
+ { prop: "familyName", token: "familyName" },
1229
+ { prop: "role", token: "role" }
1230
+ ];
1231
+ const absentIdentity = identityKeys.filter((k) => {
1232
+ const v = profileProps[k.prop];
1233
+ return typeof v !== "string" || v.trim().length === 0;
1234
+ });
1235
+ const sparseFired = absentCategories.length > 0 || absentFields.length > 0 || absentIdentity.length > 0;
1236
+ if (conversationId && sparseFired) {
1237
+ const dedupeKey = `${accountId}:${userId}:${conversationId}`;
1238
+ if (!sparseStateLogged.has(dedupeKey)) {
1239
+ sparseStateLogged.add(dedupeKey);
1240
+ const FIELDS_LOG_CAP = 10;
1241
+ const absentFieldsTruncated = absentFields.length <= FIELDS_LOG_CAP ? absentFields.join(",") : `${absentFields.slice(0, FIELDS_LOG_CAP).join(",")}+${absentFields.length - FIELDS_LOG_CAP} more`;
1242
+ console.error(
1243
+ `[profile] sparse-state injected accountId=${accountId.slice(0, 8)}\u2026 userId=${userId} conversationId=${conversationId.slice(0, 8)}\u2026 absentCategories=${absentCategories.join(",")} absentFields=${absentFieldsTruncated || "none"} absentIdentity=${absentIdentity.map((k) => k.token).join(",") || "none"}`
1244
+ );
1245
+ }
1246
+ }
1247
+ return summary;
1248
+ } catch (err) {
1249
+ console.error(`[profile] loadUserProfile failed: ${err instanceof Error ? err.message : String(err)}`);
1250
+ return null;
1251
+ } finally {
1252
+ await session.close();
1253
+ }
1254
+ }
1255
+ function formatProfileSummary(profile, preferences, extraTemplates = {}) {
1256
+ const givenName = typeof profile.givenName === "string" ? profile.givenName.trim() : "";
1257
+ const familyName = typeof profile.familyName === "string" ? profile.familyName.trim() : "";
1258
+ const joined = familyName ? `${givenName} ${familyName}` : givenName;
1259
+ const name = joined || "Owner";
1260
+ const role = profile.role ? ` (${profile.role})` : "";
1261
+ const tz = profile.timezone ? ` \u2014 ${profile.timezone}` : "";
1262
+ const locale = profile.locale ? `, ${profile.locale}` : "";
1263
+ const expertise = profile.expertise ? `
1264
+ Expertise: ${typeof profile.expertise === "string" ? profile.expertise : JSON.stringify(profile.expertise)}` : "";
1265
+ const lines = [`## About the Owner
1266
+ `];
1267
+ lines.push(`${name}${role}${tz}${locale}${expertise}
1268
+ `);
1269
+ const categories = {};
1270
+ for (const pref of preferences) {
1271
+ if (pref.notApplicable === true) continue;
1272
+ if (!categories[pref.category]) categories[pref.category] = [];
1273
+ categories[pref.category].push(pref);
1274
+ }
1275
+ const categoryLabels = {
1276
+ communication: "Communication",
1277
+ scheduling: "Scheduling",
1278
+ decision: "Decisions",
1279
+ workflow: "Workflow",
1280
+ content: "Content",
1281
+ interaction: "Interaction patterns"
1282
+ };
1283
+ const workCategories = ["communication", "scheduling", "decision", "workflow", "content"];
1284
+ const workPrefs = workCategories.filter((c) => categories[c]);
1285
+ if (workPrefs.length > 0) {
1286
+ lines.push(`### How they work`);
1287
+ for (const cat of workPrefs) {
1288
+ const label = categoryLabels[cat] || cat;
1289
+ const items = categories[cat].map((p) => p.value).join("; ");
1290
+ lines.push(`- ${label}: ${items}`);
1291
+ }
1292
+ lines.push("");
1293
+ }
1294
+ if (categories.interaction) {
1295
+ lines.push(`### Interaction patterns`);
1296
+ for (const pref of categories.interaction) {
1297
+ lines.push(`- ${pref.value}`);
1298
+ }
1299
+ lines.push("");
1300
+ }
1301
+ const identityFields = [
1302
+ { key: "email", label: "email" },
1303
+ { key: "telephone", label: "phone" },
1304
+ { key: "givenName", label: "first name" },
1305
+ { key: "familyName", label: "last name" },
1306
+ { key: "role", label: "role" }
1307
+ ];
1308
+ const absentIdentity = identityFields.filter((f) => {
1309
+ const v = profile[f.key];
1310
+ return typeof v !== "string" || v.trim().length === 0;
1311
+ });
1312
+ if (absentIdentity.length > 0) {
1313
+ lines.push(`### Identity coverage`);
1314
+ lines.push(`Missing: ${absentIdentity.map((f) => f.label).join(", ")}`);
1315
+ lines.push("");
1316
+ }
1317
+ const absentFields = computeAbsentFields(preferences, extraTemplates);
1318
+ if (absentFields.length > 0) {
1319
+ lines.push(`### Coverage`);
1320
+ lines.push(`Missing: ${absentFields.join(", ")}`);
1321
+ lines.push("");
1322
+ }
1323
+ return lines.join("\n");
1324
+ }
1017
1325
  var RECENT_FAILURES_TAIL_BYTES = 10 * 1024;
1018
1326
  var AGENT_FILE_ROLES = [
1019
1327
  { filename: "IDENTITY.md", role: "identity" },
@@ -1205,6 +1513,7 @@ export {
1205
1513
  getUserTimezone,
1206
1514
  loadAdminUserName,
1207
1515
  writeAdminUserAndPerson,
1516
+ loadUserProfile,
1208
1517
  projectAgent,
1209
1518
  deleteAgentProjection
1210
1519
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getSession
3
- } from "./chunk-KVGTWNKQ.js";
3
+ } from "./chunk-NNHHGQJL.js";
4
4
  import {
5
5
  __commonJS,
6
6
  __toESM
@@ -219,7 +219,7 @@ var require_dist = __commonJS({
219
219
  const actionToolField = reviewDigestActionTool ? "review-digest-compose" : "n/a";
220
220
  process.stderr.write(`[graph-write] reject reason=removed-feature labels=${labelCsv} actionTool=${actionToolField} agent=${agentLabel}
221
221
  `);
222
- throw new Error("Write doctrine violated: review-detector feature removed (Task 884) \u2014 `:ReviewAlert` and `:Event {actionTool:'review-digest-compose'}` writes are not allowed.");
222
+ throw new Error("Write doctrine violated: review-detector feature removed \u2014 `:ReviewAlert` and `:Event {actionTool:'review-digest-compose'}` writes are not allowed.");
223
223
  }
224
224
  if (!relationships || relationships.length < 1) {
225
225
  process.stderr.write(`[graph-write] reject reason=zero-relationships labels=${labelCsv} agent=${agentLabel}
@@ -468,7 +468,7 @@ async function completeCloudflareTask(params) {
468
468
  const now = (/* @__PURE__ */ new Date()).toISOString();
469
469
  if (status === "failed" && (!errorMessage || errorMessage.trim().length === 0)) {
470
470
  throw new Error(
471
- "cloudflare-task-tracker: errorMessage is required when status='failed' (Task 885 process-provenance contract)."
471
+ "cloudflare-task-tracker: errorMessage is required when status='failed' (process-provenance contract)."
472
472
  );
473
473
  }
474
474
  const session = getSession();
@@ -7,8 +7,8 @@ import {
7
7
  readTunnelState,
8
8
  recoverRunningCloudflareTasks,
9
9
  resolveUnitGoneVerdict
10
- } from "./chunk-RZQMYJVY.js";
11
- import "./chunk-KVGTWNKQ.js";
10
+ } from "./chunk-QC5LHYPH.js";
11
+ import "./chunk-NNHHGQJL.js";
12
12
  import "./chunk-JSBRDJBE.js";
13
13
  export {
14
14
  CLOUDFLARE_TASK_DIAGNOSTICS,
@@ -18,8 +18,8 @@ import {
18
18
  streamActionEvents,
19
19
  vncLog,
20
20
  websockifyLog
21
- } from "./chunk-ZGJ6CUU2.js";
22
- import "./chunk-KVGTWNKQ.js";
21
+ } from "./chunk-3G6JMV7N.js";
22
+ import "./chunk-NNHHGQJL.js";
23
23
  import "./chunk-JSBRDJBE.js";
24
24
 
25
25
  // server/edge.ts