@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
@@ -17,8 +17,8 @@
17
17
  // routing and cannot drift without breaking their entire dashboard; it
18
18
  // is the most stable surface to key off.
19
19
  //
20
- // Why href-only (no page-text fallback): Task 599 removed an earlier
21
- // <main>-wide FQDN text walker ("Source B") after a reproduction returned
20
+ // Why href-only (no page-text fallback): an earlier
21
+ // <main>-wide FQDN text walker ("Source B") was removed after a reproduction returned
22
22
  // `count=1` with a bogus string (`leg.interest` — a static footer FQDN-shape
23
23
  // that hit the regex). The walker's non-empty result short-circuited the
24
24
  // poll-to-success branch before zones hydrated 500 ms later, silently
@@ -52,13 +52,13 @@ import { fileURLToPath } from "node:url";
52
52
  // for in-process tests (`scrapeCurrentPage` / `scrapeDomains` under JSDOM)
53
53
  // does not require an installed brand on disk.
54
54
  //
55
- // Task 954 source-of-truth contract:
55
+ // source-of-truth contract:
56
56
  // Runtime: brand.json `cdpPort` at `${MAXY_PLATFORM_ROOT}/config/brand.json`
57
57
  // is authoritative. Wrapper exports MAXY_PLATFORM_ROOT and BRAND. Missing
58
58
  // env / file / field → loud-fail with one of three named reasons. The
59
59
  // pre-Task-954 silent CDP-port default made every non-Maxy brand fail
60
60
  // `cdp-unreachable` because the helper hit Maxy's port instead of the
61
- // brand's; Task 787 / NEO4J_URI sets the precedent that runtime config
61
+ // brand's / NEO4J_URI sets the precedent that runtime config
62
62
  // never falls back silently.
63
63
  //
64
64
  // Test overrides: when BOTH `LIST_CF_DOMAINS_CDP_HOST` and
@@ -83,10 +83,10 @@ type Reason =
83
83
  | "navigate-failed"
84
84
  | "table-wait-timeout"
85
85
  | "runtime-error"
86
- // Task 954 — config-class failures. The first three short-circuit before
86
+ // config-class failures. The first three short-circuit before
87
87
  // any CDP work begins; the route maps them to `field='config'` so the
88
88
  // form renders a config-card naming the brand + path instead of a Retry
89
- // button (retrying re-fires the same wrongly-resolved spawn — Task 787
89
+ // button (retrying re-fires the same wrongly-resolved spawn
90
90
  // pattern).
91
91
  | "brand-config-missing"
92
92
  | "cdp-port-unresolved";
@@ -106,10 +106,10 @@ function logPhase(line: string): void {
106
106
  process.stderr.write(`[list-cf-domains] ${line}\n`);
107
107
 
108
108
  // Stream log: direct write by the TS helper (not via wrapper tee) so phase
109
- // lines reach the per-conversation file the Task 592 tailer reads, even on
109
+ // lines reach the per-conversation file the tailer reads, even on
110
110
  // exit 0 where runFormSpawn discards `result.stderr`. Format parity with
111
111
  // `_stream-log.sh phase_line`: `[<ISO-ts>] [script:<scope>] <content>\n` —
112
- // the `script:` prefix is Task 605's chat-surface namespace so the line
112
+ // the `script:` prefix is the chat-surface namespace so the line
113
113
  // passes the tightened tailer regex (`[mcp:*]` / `[init]` / `[api-wait-*]`
114
114
  // lines in the same file are excluded by construction). Asserted by the
115
115
  // vitest regression under platform/ui/__tests__. Sync append so the
@@ -143,7 +143,7 @@ interface CdpEndpoint {
143
143
  source: "env-override" | "brand.json";
144
144
  }
145
145
 
146
- // Task 954 — single source of truth for the CDP endpoint. Called once from
146
+ // single source of truth for the CDP endpoint. Called once from
147
147
  // `main()` so the JSDOM scrape test (which imports `scrapeCurrentPage`
148
148
  // directly without invoking `main`) does not need an installed brand.
149
149
  function resolveCdpEndpoint(): CdpEndpoint {
@@ -425,7 +425,7 @@ export function scrapeCurrentPage(
425
425
 
426
426
  // The only scrape source: `/<accountId>/<host>` hrefs — the canonical CF
427
427
  // routing pattern the overview page uses to link each zone to its
428
- // management screens. Task 599 removed a full-<main> FQDN text walker
428
+ // management screens. The full-<main> FQDN text walker was removed
429
429
  // after it returned a bogus FQDN-shaped string from static page copy
430
430
  // (see module header). When this source returns empty, the caller's
431
431
  // `empty-or-drift` branch snapshots the page HTML for diagnosis — loud
@@ -456,7 +456,7 @@ export type CdpEvaluator = (expression: string) => Promise<unknown>;
456
456
 
457
457
  // Trailing-run length (consecutive polls at `max_count`) the complete-line
458
458
  // asserts before it declares `unstable=false`. Two iterations at 500 ms each
459
- // = 1 s of continuous observation at the high-water mark. Task 615 removed
459
+ // = 1 s of continuous observation at the high-water mark. removed
460
460
  // the early-exit on this threshold (it shortcuts multi-zone accounts where
461
461
  // the first zone hydrates one poll ahead of the second — the plateau at the
462
462
  // intermediate count trips the threshold before the final zone arrives);
@@ -465,9 +465,9 @@ const STABLE_POLL_THRESHOLD = 2;
465
465
 
466
466
  // Cap on `document.documentElement.outerHTML` captured into the dump file.
467
467
  // The observed Cloudflare dashboard outerHTML is ~1 MB; 5 MB is 5× headroom
468
- // and still fits comfortably in one `writeFile` syscall on the Pi. Pre-Task
469
- // 615 this was 100 KB the dump ended mid-`<head>` CSS on every scrape,
470
- // rendering the forensic artifact premise of Task 608 silently broken: the
468
+ // and still fits comfortably in one `writeFile` syscall on the Pi. An earlier
469
+ // 100 KB cap truncated the dump mid-`<head>` CSS on every scrape,
470
+ // rendering the forensic artifact silently broken: the
471
471
  // zone table lived past the cutoff and `grep <zone-host> <dump>` always
472
472
  // returned nothing, forcing re-scrapes to answer post-hoc questions.
473
473
  const OUTER_HTML_CAPTURE_MAX_CHARS = 5_000_000;
@@ -510,7 +510,7 @@ async function dumpHtml(
510
510
  // CONFIG_DIR is set by list-cf-domains.sh before the spawn. A silent
511
511
  // fallback would dump logs into the wrong brand's directory on a Real
512
512
  // Agent install — a silent-miswrite masking the wrapper-side break it
513
- // came from. Per Task 473 doctrine: loud-fail on absent runtime-derived
513
+ // came from. doctrine: loud-fail on absent runtime-derived
514
514
  // values.
515
515
  const configDir = process.env.CONFIG_DIR;
516
516
  if (!configDir) {
@@ -568,7 +568,7 @@ function dumpField(result: DumpResult, mode: DumpMode): string {
568
568
 
569
569
  export async function scrapeDomains(evaluator: CdpEvaluator): Promise<string[]> {
570
570
  const deadline = Date.now() + SCRAPE_POLL_MS;
571
- // Task 615: pure poll-to-deadline. The earlier "first N stable polls wins"
571
+ // pure poll-to-deadline. The earlier "first N stable polls wins"
572
572
  // heuristic short-circuited on the first plateau a multi-zone dashboard
573
573
  // rendered — a 2-zone account whose second zone hydrates one poll later
574
574
  // than the first would lock `count=1` before the second zone arrived.
@@ -21,7 +21,7 @@ set -euo pipefail
21
21
 
22
22
  # --------------------------------------------------------------------------
23
23
  # Shared stream-log helpers (require STREAM_LOG_PATH, phase_line, tee_subprocess).
24
- # Task 556: any cloudflared subprocess this script spawns is teed line-by-line
24
+ # any cloudflared subprocess this script spawns is teed line-by-line
25
25
  # into the per-conversation stream log so the chat UI tailer renders live
26
26
  # progress — same contract as setup-tunnel.sh.
27
27
  # --------------------------------------------------------------------------
@@ -20,7 +20,7 @@
20
20
  # `DISPLAY=${DISPLAY:-${BRAND_VNC_DISPLAY}} /usr/bin/chromium <url> &` — no reliance on
21
21
  # cloudflared's optimistic xdg-open, no CDP auto-click, no DOM matcher.
22
22
  # The operator clicks the zone row + Authorize on the VNC themselves.
23
- # This is the wrappers-faithfully-relay-third-party-cli doctrine (Task 858);
23
+ # This is the wrappers-faithfully-relay-third-party-cli doctrine;
24
24
  # any layer that auto-clicks Authorize for the operator is forbidden.
25
25
  # cloudflared's stdout+stderr is teed line-by-line into STREAM_LOG_PATH so
26
26
  # the chat UI's server-side tailer renders live progress in-turn.
@@ -31,8 +31,8 @@ set -euo pipefail
31
31
  # (see packages/create-maxy-code/src/index.ts:installTunnelScripts), so the raw
32
32
  # BASH_SOURCE[0] points at $HOME, not the scripts directory where the sibling
33
33
  # helpers (_stream-log.sh, tunnel-ingress.ts) live. Factored to SCRIPT_DIR so
34
- # Task 600's stream-log-contract scanner can statically resolve the
35
- # tunnel-ingress.ts target (Task 054).
34
+ # the stream-log-contract scanner can statically resolve the
35
+ # tunnel-ingress.ts target.
36
36
  SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
37
37
 
38
38
  # --------------------------------------------------------------------------
@@ -59,7 +59,7 @@ shift 2
59
59
  HOSTNAMES=("$@")
60
60
 
61
61
  # --------------------------------------------------------------------------
62
- # Task 009 — SSH/SMB ingress env vars.
62
+ # SSH/SMB ingress env vars.
63
63
  #
64
64
  # SSH and SMB hostnames arrive via environment, NOT positional argv, so the
65
65
  # existing form/endpoint contract (which passes admin/public/apex as
@@ -99,7 +99,7 @@ phase_line setup-tunnel step=start brand="${BRAND}" port="${PORT}" hostnames="${
99
99
  CFG_DIR="${HOME}/.${BRAND}/cloudflared"
100
100
  mkdir -p "${CFG_DIR}"
101
101
 
102
- # Per-brand X display (Task 553). Each brand owns its own Xtigervnc display
102
+ # Per-brand X display. Each brand owns its own Xtigervnc display
103
103
  # so the Chromium tab opened to drive the OAuth Authorize click lands in
104
104
  # THIS brand's isolated VNC, not whichever brand booted first on a shared
105
105
  # device. Read from the brand manifest if MAXY_PLATFORM_ROOT is exported
@@ -117,14 +117,14 @@ if [ -n "${SETUP_TUNNEL_BRAND_JSON}" ] && command -v jq >/dev/null 2>&1; then
117
117
  fi
118
118
  fi
119
119
 
120
- # Task 929 — read the install-time-resolved non-snap Chromium binary path so
120
+ # read the install-time-resolved non-snap Chromium binary path so
121
121
  # the OAuth-URL spawn below uses the same binary vnc.sh's start_chrome runs.
122
122
  # Hardcoded `/usr/bin/chromium` would re-introduce the snap-AppArmor failure
123
123
  # on Ubuntu Noble laptop. The installer writes this file under platform/config/
124
124
  # during installSystemDeps; the spawn at step=browser-spawn fails loud if the
125
125
  # file is absent rather than silently falling back to /usr/bin/chromium.
126
126
  #
127
- # Task 957 — four discrete branches (env-unset / file-missing / file-empty /
127
+ # four discrete branches (env-unset / file-missing / file-empty /
128
128
  # binary-not-executable) so the failure message names the actual condition.
129
129
  # Pre-957 the four were conflated into one "cannot resolve a non-snap Chromium
130
130
  # binary" message, which masked the env-propagation defect that closed three
@@ -179,11 +179,11 @@ fi
179
179
  # click, poll for cert.pem,
180
180
  # mv.
181
181
  #
182
- # Control flow when both certs are missing (Task 858 — wrappers faithfully
182
+ # Control flow when both certs are missing
183
183
  # relay third-party CLI):
184
184
  # 1. Spawn cloudflared with stdout+stderr teed line-by-line to
185
185
  # $STREAM_LOG_PATH with prefix [script:setup-tunnel:cloudflared]
186
- # (Task 605's chat-surface namespace — see _stream-log.sh header).
186
+ # (the chat-surface namespace — see _stream-log.sh header).
187
187
  # 2. Extract the authorize URL with a tolerant regex as it streams.
188
188
  # 3. The instant the URL is extracted, mechanically open it on the Pi
189
189
  # VNC chromium via `DISPLAY=${DISPLAY:-${BRAND_VNC_DISPLAY}} /usr/bin/chromium <url> &`.
@@ -203,7 +203,7 @@ fi
203
203
  # Every failure branch exits 1 loudly naming the cause.
204
204
  # --------------------------------------------------------------------------
205
205
 
206
- # Pre-flight cert-promotion (Task 855). When ${CFG_DIR}/cert.pem is missing
206
+ # Pre-flight cert-promotion. When ${CFG_DIR}/cert.pem is missing
207
207
  # but the OAuth-default ~/.cloudflared/cert.pem is present, a prior run
208
208
  # reached the cloudflared callback but did not survive to the brand-scoped
209
209
  # mv at the end of Step 1. The cert is bound to the account already; the
@@ -252,7 +252,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
252
252
  CHROMIUM_UNIT=""
253
253
  cleanup_oauth() {
254
254
  [ -n "${CF_PIPELINE_PID}" ] && kill "${CF_PIPELINE_PID}" 2>/dev/null || true
255
- # Task 982 — stop the transient chromium unit on any early exit between
255
+ # stop the transient chromium unit on any early exit between
256
256
  # browser-spawn and the explicit step=browser-close site below. Best-
257
257
  # effort: no phase_line here because the EXIT trap fires on every path
258
258
  # (including the happy one where step=browser-close already ran and
@@ -318,14 +318,14 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
318
318
  # to re-target the same URL on the VNC; same end-effect as this spawn.
319
319
  printf 'OAUTH_URL: %s\n' "${AUTH_URL}"
320
320
 
321
- # Mechanically open the URL on the Pi VNC chromium (Task 858). Chromium
321
+ # Mechanically open the URL on the Pi VNC chromium. Chromium
322
322
  # is already running on this brand's ${BRAND_VNC_DISPLAY} with CDP enabled
323
323
  # (vnc.sh start_chrome at boot); invoking the resolved binary <url> against
324
324
  # a running instance IPCs the URL into it as a new tab. Replaces
325
325
  # cloudflared's own optimistic xdg-open, which does not reliably target
326
326
  # the brand's VNC display in this environment.
327
327
  #
328
- # Task 982 — chromium is launched under a transient systemd-user unit so
328
+ # chromium is launched under a transient systemd-user unit so
329
329
  # the full process tree (including any standalone chromium that lands
330
330
  # when no existing instance is running for IPC) lives in its own cgroup.
331
331
  # On cert.pem arrival the unit is stopped, SIGTERMing the whole cgroup
@@ -338,7 +338,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
338
338
  # Binary path: SETUP_TUNNEL_CHROMIUM_BIN is read at startup from
339
339
  # ${MAXY_PLATFORM_ROOT}/config/chromium-binary.path — `/usr/bin/chromium`
340
340
  # on Pi Bookworm and `/usr/bin/google-chrome-stable` on Ubuntu Noble laptop
341
- # where the system chromium is snap-confined (Task 929). Hardcoding
341
+ # where the system chromium is snap-confined. Hardcoding
342
342
  # `/usr/bin/chromium` here would re-introduce the AppArmor SingletonLock
343
343
  # failure on the laptop.
344
344
  CHROMIUM_UNIT="maxy-oauth-chromium-${BRAND}-$$.service"
@@ -400,7 +400,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
400
400
  # Heartbeat every 2 s after the click. t=0 is the browser-drive
401
401
  # phase line above; the first heartbeat fires at t=2. Without this line
402
402
  # the tailer sees silence for the full 1-20 s round-trip — the exact
403
- # state Task 588 forbids.
403
+ # state the heartbeat contract forbids.
404
404
  if [ "${LOGIN_WAIT}" -gt 0 ] && [ $((LOGIN_WAIT % 2)) -eq 0 ]; then
405
405
  phase_line setup-tunnel step=oauth-login result=awaiting-cert \
406
406
  elapsed="${LOGIN_WAIT}s" timeout="${LOGIN_TIMEOUT}s"
@@ -413,7 +413,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
413
413
  phase_line setup-tunnel step=oauth-login result=ok \
414
414
  path="${CFG_DIR}/cert.pem" waited="${LOGIN_WAIT}s"
415
415
 
416
- # Task 982 — SIGTERM the OAuth chromium cgroup now that cert.pem has
416
+ # SIGTERM the OAuth chromium cgroup now that cert.pem has
417
417
  # landed. The transient unit was created above at step=browser-spawn; if
418
418
  # chromium IPCs'd to a running brand-VNC instance and exited cleanly, the
419
419
  # unit is already auto-collected and `systemctl stop` returns 0 (no-such-
@@ -454,7 +454,7 @@ if [ ! -f "${CFG_DIR}/cert.pem" ]; then
454
454
  fi
455
455
 
456
456
  # --------------------------------------------------------------------------
457
- # Step 2+3: Resolve the tunnel identity from operator input (Task 886 §B).
457
+ # Step 2+3: Resolve the tunnel identity from operator input.
458
458
  #
459
459
  # Pre-Task-886 the script derived TUNNEL_NAME locally as "${BRAND}-$(hostname
460
460
  # -s)" and reused-or-created. That breaks the same doctrine as pre-Task-589
@@ -538,10 +538,10 @@ echo "tunnel: ${TUNNEL_NAME} (${TUNNEL_ID}) [${TUNNEL_SOURCE}]"
538
538
  # parent zone is not on Cloudflare, refuse the whole run before calling
539
539
  # `cloudflared tunnel route dns`.
540
540
  #
541
- # DESIGN NOTE — what this catches and what it does NOT catch (Task 559):
541
+ # DESIGN NOTE — what this catches and what it does NOT catch:
542
542
  # CATCHES: parent zone does not exist, or its NS records do not point
543
543
  # at Cloudflare's nameservers. Pre-529 the shell relied on a post-
544
- # flight sed of cloudflared's stdout for this defence; Task 559
544
+ # flight sed of cloudflared's stdout for this defence
545
545
  # deletes that parser because it rejects the idempotent no-op output
546
546
  # shape (session 25674fe3) and replaces it with this inline NS probe.
547
547
  # Same primitive the MCP path uses in
@@ -552,7 +552,7 @@ echo "tunnel: ${TUNNEL_NAME} (${TUNNEL_ID}) [${TUNNEL_SOURCE}]"
552
552
  # exist as of 2026-04) or persisting the bound account's zones at
553
553
  # tunnel-login time (deferred — separate task). The wrong-account
554
554
  # case is detected post-hoc by tunnel-status's hostname probe, not
555
- # here. This is an explicitly accepted gap per Task 559's scope.
555
+ # here. This is an explicitly accepted gap per the scope.
556
556
  #
557
557
  # Probe uses 1.1.1.1 directly to bypass the device's local resolver
558
558
  # (matching Resolver.setServers in the MCP path) — avoids cache /
@@ -628,7 +628,7 @@ phase_line setup-tunnel step=zone-preflight result=ok \
628
628
  # another zone on the account. Skip CLI routing for apex; collect for the
629
629
  # ACTION REQUIRED summary at the end.
630
630
  #
631
- # Control flow (Task 559): cloudflared's exit code is the sole decision
631
+ # Control flow: cloudflared's exit code is the sole decision
632
632
  # signal. No stdout parsing. `cloudflared tunnel route dns --overwrite-dns`
633
633
  # exits 0 on every legitimate outcome (create, overwrite, already-correct
634
634
  # no-op) and non-zero on every legitimate failure. The pre-flight above
@@ -651,7 +651,7 @@ for H in "${HOSTNAMES[@]}"; do
651
651
  ROUTE_LOG="$(mktemp -t maxy-route-dns.XXXXXX)"
652
652
  # tee_subprocess_capture streams cloudflared's combined stdout+stderr
653
653
  # into STREAM_LOG_PATH line-by-line with the [script:setup-tunnel:cloudflared]
654
- # tag (live-tailable — Task 605 chat-surface namespace) AND passes the same output through this shell's
654
+ # tag (live-tailable chat-surface namespace) AND passes the same output through this shell's
655
655
  # stdout so the `> "${ROUTE_LOG}"` redirection can capture it for the
656
656
  # failure-path phase_line. Exit code is cloudflared's PIPESTATUS[0].
657
657
  if tee_subprocess_capture setup-tunnel:cloudflared -- \
@@ -673,7 +673,7 @@ for H in "${HOSTNAMES[@]}"; do
673
673
  done
674
674
 
675
675
  # --------------------------------------------------------------------------
676
- # Task 009 — Rehydrate SSH/SMB hostnames from tunnel.state when env unset.
676
+ # Rehydrate SSH/SMB hostnames from tunnel.state when env unset.
677
677
  #
678
678
  # A re-run without SSH_HOSTNAME / SMB_HOSTNAME should keep the previously
679
679
  # configured ingress rather than silently dropping them. The Node helper
@@ -703,9 +703,9 @@ if [ -z "${SSH_HOSTNAME}${SMB_HOSTNAME}" ] && [ -f "${CFG_DIR}/tunnel.state" ];
703
703
  fi
704
704
 
705
705
  # --------------------------------------------------------------------------
706
- # Task 009 — Samba presence probe (gates SMB ingress on Task 034 stanza).
706
+ # Samba presence probe (gates SMB ingress stanza).
707
707
  #
708
- # Per Task 034, the brand's Samba stanza `[<brand>]` is written to
708
+ #, the brand's Samba stanza `[<brand>]` is written to
709
709
  # /etc/samba/smb.conf at install time. If the stanza is absent, this Pi
710
710
  # has no SMB share to expose and the SMB ingress is skipped loudly.
711
711
  # Probe via grep on the Pi filesystem (NOT brand.json — Samba is a
@@ -724,7 +724,7 @@ if [ -n "${SMB_HOSTNAME}" ]; then
724
724
  fi
725
725
 
726
726
  # --------------------------------------------------------------------------
727
- # Task 009 — Step 4b: Route DNS for SSH/SMB hostnames (after HTTPS pass).
727
+ # Step 4b: Route DNS for SSH/SMB hostnames (after HTTPS pass).
728
728
  #
729
729
  # Two-phase ordering: HTTPS hostnames are routed first (loop above). If a
730
730
  # subsequent SSH or SMB route DNS fails, emit `*-ingress-deferred` and
@@ -858,7 +858,7 @@ fi
858
858
  rm -f "${STATE_SPEC_FILE}"
859
859
 
860
860
  # --------------------------------------------------------------------------
861
- # Task 009 — Access policy ACTION REQUIRED.
861
+ # Access policy ACTION REQUIRED.
862
862
  #
863
863
  # The Cloudflare Access policy that gates these new SSH/SMB hostnames must
864
864
  # be authored in the dashboard by the operator: CF API/SDK is banned
@@ -918,7 +918,7 @@ fi
918
918
  # admin agent invokes it via the Bash tool. `systemctl --user restart
919
919
  # ${BRAND}.service` from inside that cgroup SIGTERMs the whole cgroup —
920
920
  # the node server, the claude subprocess, the Bash child, and this script
921
- # itself (Task 558). Dispatching the restart to a transient systemd-run
921
+ # itself. Dispatching the restart to a transient systemd-run
922
922
  # unit is the ONLY primitive that creates a new cgroup outside the service
923
923
  # — setsid/nohup/disown/& all inherit cgroup membership, and
924
924
  # `systemd-run --scope` runs in the caller's scope.
@@ -1,4 +1,4 @@
1
- // Task 009 — Pure tunnel-ingress rendering + state I/O.
1
+ // Pure tunnel-ingress rendering + state I/O.
2
2
  //
3
3
  // Mirror of `samba-provision.ts`: pure decision functions in this file with
4
4
  // no side effects; `setup-tunnel.sh` orchestrates I/O around them. Invoked
@@ -24,7 +24,7 @@
24
24
 
25
25
  import { readFileSync, existsSync, appendFileSync } from "node:fs";
26
26
 
27
- // Task 054 — STREAM_LOG_PATH writer (Task 598/600 contract). The four CLI
27
+ // STREAM_LOG_PATH writer (contract). The four CLI
28
28
  // subcommands invoked from setup-tunnel.sh (probe-samba, render-config,
29
29
  // render-state, action-req) emit a `phase=<cmd>-start` line on entry and
30
30
  // `phase=<cmd>-ok` / `phase=<cmd>-fail` on exit. Pattern ported verbatim
@@ -156,8 +156,8 @@ export function readPersistedHostnames(statePath: string): {
156
156
  // ---------------------------------------------------------------------------
157
157
 
158
158
  /**
159
- * Probe whether Task 034's per-brand Samba stanza exists in /etc/samba/smb.conf.
160
- * The brand stanza header is `[<brand>]` at the start of a line (Task 034's
159
+ * Probe whether the per-brand Samba stanza exists in /etc/samba/smb.conf.
160
+ * The brand stanza header is `[<brand>]` at the start of a line (the
161
161
  * `renderBrandStanza` output). Source of truth is the Pi filesystem, not
162
162
  * brand.json — Samba is provisioned by the installer's post-install step,
163
163
  * not declared up-front.
@@ -244,7 +244,7 @@ const isCli =
244
244
 
245
245
  if (isCli) {
246
246
  const [, , cmd, ...rest] = process.argv;
247
- // Track which subcommands carry the Task 054 stream-log contract — for these
247
+ // Track which subcommands carry the stream-log contract — for these
248
248
  // we emit start/ok/fail phase pairs. Unknown subcommands and read-state are
249
249
  // out of scope per the task (read-state has no setup-tunnel.sh caller line).
250
250
  const instrumented = new Set(["probe-samba", "render-config", "render-state", "action-req"]);
@@ -22,7 +22,7 @@ Any Cloudflare action outside these four surfaces is a discipline violation —
22
22
 
23
23
  Use this when the operator wants Cloudflare set up (or re-set up) end-to-end on the device. The script handles OAuth login, tunnel creation, DNS routing for each subdomain, config.yml + tunnel.state, and dispatches the `${BRAND}.service` restart to a transient `systemd-run` unit — all in one invocation. The restart fires a few seconds after the script exits so the script does not kill its own cgroup when invoked via the Bash tool; the chat UI receives a `server_shutdown` SSE frame and reconnects automatically. Post-restart hostname verification is out of scope for the script (connector is not up when the script exits) — verify via the next admin turn or manually with `curl -I https://<hostname>`. Apex hostnames cannot be routed by the CLI; when one is passed, the script prints an `ACTION REQUIRED` block naming the exact dashboard record to edit.
24
24
 
25
- Step 1's OAuth flow is a state machine over two observable variables: the brand-scoped cert path (`${CFG_DIR}/cert.pem`) and the OAuth-default cert path (`~/.cloudflared/cert.pem`). When the brand-scoped cert is missing but the default-path cert is present from any prior partial run, the wrapper promotes it (`mv`) and emits `step=oauth-login result=ok reason=cert-promoted-from-default-path` without re-spawning cloudflared. When both are missing, the wrapper spawns `cloudflared tunnel login`, extracts the argotunnel URL from its stdout, and the instant the URL surfaces, mechanically opens it on the brand's VNC chromium under a transient `systemd-run --user --unit=maxy-oauth-chromium-${BRAND}-$$.service` so the chromium process tree lives in its own cgroup (Task 982 — pre-Task-982 the spawn was `&` fire-and-forget and orphaned chromium on display `:101` when no pre-existing brand-VNC chromium was available for IPC). The launch uses the install-time-resolved binary (`SETUP_TUNNEL_CHROMIUM_BIN` from `${MAXY_PLATFORM_ROOT}/config/chromium-binary.path` so Ubuntu Noble laptop's snap-replaced Google Chrome is honoured per Task 929) — emitting `step=browser-spawn result=ok unit=<transient-unit>` and `step=browser-drive mode=operator-click`. The operator clicks the zone row + Authorize on the VNC; cloudflared's callback writes `~/.cloudflared/cert.pem`; the wrapper's cert-poll (180 s budget) picks it up and `mv`s it to the brand-scoped path; the wrapper then `systemctl --user stop`s the transient unit, emitting `step=browser-close result=ok` (or `result=orphan reason=stop-failed` when SIGTERM didn't reach the cgroup — operator-visible signal that an orphan chromium MAY still be alive). There is no CDP auto-click, no DOM matcher, no consent-page driver — the wrapper's job is to faithfully relay `cloudflared tunnel login`, never to layer automation on top.
25
+ Step 1's OAuth flow is a state machine over two observable variables: the brand-scoped cert path (`${CFG_DIR}/cert.pem`) and the OAuth-default cert path (`~/.cloudflared/cert.pem`). When the brand-scoped cert is missing but the default-path cert is present from any prior partial run, the wrapper promotes it (`mv`) and emits `step=oauth-login result=ok reason=cert-promoted-from-default-path` without re-spawning cloudflared. When both are missing, the wrapper spawns `cloudflared tunnel login`, extracts the argotunnel URL from its stdout, and the instant the URL surfaces, mechanically opens it on the brand's VNC chromium under a transient `systemd-run --user --unit=maxy-oauth-chromium-${BRAND}-$$.service` so the chromium process tree lives in its own cgroup (earlier the spawn was `&` fire-and-forget and orphaned chromium on display `:101` when no pre-existing brand-VNC chromium was available for IPC). The launch uses the install-time-resolved binary (`SETUP_TUNNEL_CHROMIUM_BIN` from `${MAXY_PLATFORM_ROOT}/config/chromium-binary.path` so Ubuntu Noble laptop's snap-replaced Google Chrome is honoured) — emitting `step=browser-spawn result=ok unit=<transient-unit>` and `step=browser-drive mode=operator-click`. The operator clicks the zone row + Authorize on the VNC; cloudflared's callback writes `~/.cloudflared/cert.pem`; the wrapper's cert-poll (180 s budget) picks it up and `mv`s it to the brand-scoped path; the wrapper then `systemctl --user stop`s the transient unit, emitting `step=browser-close result=ok` (or `result=orphan reason=stop-failed` when SIGTERM didn't reach the cgroup — operator-visible signal that an orphan chromium MAY still be alive). There is no CDP auto-click, no DOM matcher, no consent-page driver — the wrapper's job is to faithfully relay `cloudflared tunnel login`, never to layer automation on top.
26
26
 
27
27
  ### How inputs reach the script
28
28
 
@@ -46,7 +46,7 @@ Example ({{productName}} on `maxy.bot` with a public subdomain and the `maxy.cha
46
46
  ~/setup-tunnel.sh maxy 19200 admin.maxy.bot public.maxy.bot maxy.chat
47
47
  ```
48
48
 
49
- ### Optional SSH and SMB ingress (Task 009)
49
+ ### Optional SSH and SMB ingress
50
50
 
51
51
  The same script also wires the off-LAN SSH and SMB ingress when the
52
52
  corresponding hostnames are passed via environment variables (NOT positional
@@ -66,7 +66,7 @@ Behaviour:
66
66
  `[tunnel-install] {ssh,smb}-ingress-deferred` and leaves the HTTPS
67
67
  ingress durable (no rollback, no `exit 1`).
68
68
  - `SSH_HOSTNAME` adds an ingress entry `service: ssh://localhost:22`.
69
- - `SMB_HOSTNAME` adds `service: tcp://localhost:445`, gated on Task 034's
69
+ - `SMB_HOSTNAME` adds `service: tcp://localhost:445`, gated's
70
70
  Samba stanza being present in `/etc/samba/smb.conf`. Absent stanza →
71
71
  `[tunnel-install] smb-ingress-skipped reason=samba-not-provisioned` and
72
72
  the SMB pass is skipped entirely.
@@ -15,8 +15,8 @@ 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
22
  throw new Error("[contacts] NEO4J_URI unset — refusing to default to bolt://localhost:7687");
@@ -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,2EAA2E,CAC5E,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,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACtD,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,2EAA2E,CAC5E,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,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACtD,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"}
@@ -8,7 +8,7 @@
8
8
  * Used by: contact-delete, contact-update, contact-export, contact-erase.
9
9
  * NOT used by: contact-create (dedup OR logic), contact-lookup (name search).
10
10
  *
11
- * Task 602 — trashed Person nodes are excluded by default. `contact-erase`
11
+ * trashed Person nodes are excluded by default. `contact-erase`
12
12
  * passes `includeTrashed: true` because GDPR Article 17 must cascade-delete
13
13
  * trashed persons too (they were marked but not yet emptied). Trashed
14
14
  * persons also have nulled email/telephone (UNIQUE_KEYS_BY_LABEL snapshot),
@@ -8,7 +8,7 @@
8
8
  * Used by: contact-delete, contact-update, contact-export, contact-erase.
9
9
  * NOT used by: contact-create (dedup OR logic), contact-lookup (name search).
10
10
  *
11
- * Task 602 — trashed Person nodes are excluded by default. `contact-erase`
11
+ * trashed Person nodes are excluded by default. `contact-erase`
12
12
  * passes `includeTrashed: true` because GDPR Article 17 must cascade-delete
13
13
  * trashed persons too (they were marked but not yet emptied). Trashed
14
14
  * persons also have nulled email/telephone (UNIQUE_KEYS_BY_LABEL snapshot),
@@ -28,7 +28,7 @@ export async function contactCreate(params) {
28
28
  try {
29
29
  // Dedup only fires when a stable identifier (email/telephone) is present.
30
30
  // With no identifier the agent has explicitly chosen to write a sparse
31
- // Person; dedup/conflict resolution moves downstream (Task 894 doctrine:
31
+ // Person; dedup/conflict resolution moves downstream
32
32
  // "agent and user manage dedup and conflicts").
33
33
  const dedupConditions = [];
34
34
  const dedupParams = { accountId };
@@ -85,7 +85,7 @@ export async function contactCreate(params) {
85
85
  if (embedding.length > 0) {
86
86
  props.embedding = embedding;
87
87
  }
88
- // Task 997 — direct admin asks ("add Anneke as person") need a PRODUCED
88
+ // direct admin asks ("add Anneke as person") need a PRODUCED
89
89
  // edge from the active :AdminConversation rather than a synthetic :Task.
90
90
  // The admin server stamps `CONVERSATION_NODE_ID` in the spawn env; the
91
91
  // helper resolves the node, verifies accountId parity, and prepends the
@@ -1 +1 @@
1
- {"version":3,"file":"contact-create.js","sourceRoot":"","sources":["../../src/tools/contact-create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contact-create.js","sourceRoot":"","sources":["../../src/tools/contact-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAG7B,MAAM,8CAA8C,CAAC;AAEtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,wBAAwB,CAAC;AACtE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,kBAAkB,CAAC;AAElE,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,YAAY,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA+B,CAAC;QAC9D,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA2B;IAE3B,MAAM,EACJ,SAAS,EACT,UAAU,EACV,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,MAAM,GAAG,UAAU,EACnB,SAAS,EACT,aAAa,EACb,SAAS,GACV,GAAG,MAAM,CAAC;IAEX,MAAM,eAAe,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAE1C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,0EAA0E;QAC1E,uEAAuE;QACvE,qDAAqD;QACrD,gDAAgD;QAChD,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,WAAW,GAA4B,EAAE,SAAS,EAAE,CAAC;QAE3D,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACzC,WAAW,CAAC,KAAK,GAAG,eAAe,CAAC;QACtC,CAAC;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjD,WAAW,CAAC,SAAS,GAAG,eAAe,CAAC;QAC1C,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,oDAAoD;YACpD,sEAAsE;YACtE,qEAAqE;YACrE,sCAAsC;YACtC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC;kBACU,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,UAAU,CAAC,GAAG,CAAC;mFACa,EAC3E,WAAW,CACZ,CAAC;YAEF,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;gBACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAEhD,CAAC;gBACT,MAAM,iBAAiB,GAAG,YAAY,IAAI,YAAY,IAAI,SAAS,CAAC;gBAEpE,OAAO;oBACL,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAW;oBACnD,UAAU,EAAE,iBAAiB;oBAC7B,OAAO,EAAE,KAAK;oBACd,aAAa,EAAE,IAAI;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAA4B;YACrC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3C,IAAI,eAAe;YAAE,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC;QACnD,IAAI,eAAe;YAAE,KAAK,CAAC,SAAS,GAAG,eAAe,CAAC;QACvD,IAAI,UAAU;YAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9C,IAAI,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAExC,MAAM,cAAc,GAAG,eAAe;YACpC,CAAC,CAAC,IAAI,eAAe,GAAG;YACxB,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,MAAM,gBAAgB,GACpB,WAAW,QAAQ,IAAI,WAAW,IAAI,cAAc,YAAY,MAAM,YAAY,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QACpG,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAC9B,CAAC;QAED,6DAA6D;QAC7D,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,qEAAqE;QACrE,kCAAkC;QAClC,MAAM,qBAAqB,GAAG,MAAM,4BAA4B,CAAC;YAC/D,OAAO;YACP,aAAa;YACb,SAAS,EAAE,SAAS,IAAI,EAAE;YAC1B,WAAW,EAAE,CAAC,QAAQ,CAAC;YACvB,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACpD,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,OAAO;YACP,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,KAAK;YACL,aAAa,EAAE,qBAAqB;YACpC,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,MAAM,iBAAiB,GACrB,eAAe,IAAI,eAAe,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,CAAC;QAEtE,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -30,7 +30,7 @@ export async function groupCreate(params) {
30
30
  }
31
31
  // Pre-resolve every participant so we reject the whole call if fewer
32
32
  // than one matches — creating a group Conversation with zero live
33
- // participants is a write-doctrine orphan (Task 673). Participant
33
+ // participants is a write-doctrine orphan. Participant
34
34
  // PARTICIPATES_IN edges are added inside the same transaction as the
35
35
  // Conversation node to guarantee ≥1 adjacency at commit time.
36
36
  const resolvedParticipants = [];
@@ -1 +1 @@
1
- {"version":3,"file":"group-create.js","sourceRoot":"","sources":["../../src/tools/group-create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group-create.js","sourceRoot":"","sources":["../../src/tools/group-create.ts"],"names":[],"mappings":"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"}
@@ -52,7 +52,36 @@ Grep for both in `~/.<brand>/logs/install-*.log`. Absence after a clean install
52
52
 
53
53
  The first user-domain write the agent attempts (e.g. recording who the operator is) hits the graph-write gate's `Write blocked (no-admin-user)` or `Write blocked (no-local-business)` error. The agent then asks the persona question, persists the answer through the `business-profile` skill or `profile-update.personFields`, and proceeds. The error itself is the signal — grep `Write blocked` in `~/.<brand>/logs/server.log` to confirm.
54
54
 
55
- Cloudflare, WhatsApp, Telegram, and any other dormant capability surfaces on owner request via the `<dormant-plugins>` rule in `platform/templates/agents/admin/IDENTITY.md`. Execution is the existing plugin skill (`cloudflare:setup-tunnel`, etc.) — no banner, no per-step flag.
55
+ Cloudflare, WhatsApp, Telegram, and any other dormant capability surfaces on owner request via the `<dormant-plugins>` sentinel the manager injects per-spawn. Execution is the existing plugin skill (`cloudflare:setup-tunnel`, etc.) — no banner, no per-step flag.
56
+
57
+ ### Per-spawn system-prompt sentinels
58
+
59
+ Every PTY spawn injects an `--append-system-prompt` block composed of six sentinel sections in fixed order:
60
+
61
+ | Sentinel | Source | Behaviour on resolve failure |
62
+ |---|---|---|
63
+ | `<host>` | brand.json + boot-time LAN resolution | spawn refuses with `host-context-unresolved` |
64
+ | `<attachment-ceiling>` | hard-coded 30 MiB rule | always present |
65
+ | `<identity>` | `<accountDir>/agents/<role>/IDENTITY.md` | spawn refuses with `identity-unresolved` |
66
+ | `<soul>` | `<accountDir>/agents/<role>/SOUL.md` | spawn refuses with `identity-unresolved` |
67
+ | `<about-owner>` | upstream `loadUserProfile` + `formatProfileSummary` (UI process) | sentinel carries `coverage-unresolved: <reason>`; spawn proceeds |
68
+ | `<dormant-plugins>` | installed-minus-enabled set from `platform/plugins/` and `account.json` | sentinel omitted when set is empty |
69
+
70
+ Diagnostic line per spawn (`~/.<brand>/logs/server.log`):
71
+
72
+ ```
73
+ [pty-spawn] sessionId=<id> appendSystemPromptBytes=<n> identityBytes=<n> soulBytes=<n> aboutOwnerBytes=<n> dormantPluginsBytes=<n> accountDir=<path> role=<admin|public> hostname=<h> lanIPv4=<ip> adminUrl=<url> tunnelUrl=<url|none>
74
+ ```
75
+
76
+ Zero `aboutOwnerBytes` on a fresh-account spawn (sparse profile) is a regression: the upstream resolver returned ok:false with a reason, and the operator should see `coverage-unresolved: <reason>` in the agent's first turn. Zero `dormantPluginsBytes` on a Maxy install with `cloudflare` not enabled is likewise a regression.
77
+
78
+ The manager also runs a boot-time self-test that renders a fixture compose call against synthetic inputs and refuses to start if any sentinel is missing:
79
+
80
+ ```
81
+ [claude-session-manager] startup-self-test system-prompt-sentinels=ok
82
+ ```
83
+
84
+ LOUD-FAIL output is `startup-self-test system-prompt-sentinels=fail missing=<tag>` followed by an immediate process exit. Catches IDENTITY-promise-vs-emitter drift at boot rather than at the first real spawn.
56
85
 
57
86
  ## Service Management
58
87
 
@@ -18,7 +18,6 @@ These are part of {{productName}}'s foundation and cannot be disabled:
18
18
  | `memory` | Graph memory — search, write, reindex, and ingest knowledge |
19
19
  | `maxy-guide` | User guide and platform documentation (this plugin) |
20
20
  | `cloudflare` | Cloudflare Tunnel — remote access via your custom domain |
21
- | `anthropic` | Claude connection — API key acquisition and configuration |
22
21
  | `scheduling` | Calendar and scheduling — events, appointments, recurring triggers. Any activity involving time (date, timestamp, day of week, month, duration) routes through `time-resolve` first. Two read-only tools (`current-datetime`, `time-resolve`) are always available to every public agent regardless of enabled plugins. |
23
22
  | `email` | Agent email account — setup, read, send, reply, search, auto-respond |
24
23
  | `tasks` | Task lifecycle — create, update, list, relate, complete |
@@ -67,8 +66,6 @@ Install verbatim:
67
66
  - `claude plugin install meeting-prep-agent@claude-for-financial-services`
68
67
  - `claude plugin install pdf-viewer@knowledge-work-plugins`
69
68
 
70
- Onboarding observability for this group: Step 1 emits `[plugin-onboarding] group=anthropic-verticals presented=3` when the three entries are offered, then `[plugin-onboarding] group=anthropic-verticals accepted=<n> declined=<n>` when Step 1 completes — derived from your submission against the closed set above. Grep `~/.{productName}/logs/server.log` for the full prefix to see both halves of the funnel.
71
-
72
69
  ### Premium Plugins
73
70
 
74
71
  Brand decides which premium plugins ship. Maxy installs ship only `platform/plugins/*`. Real Agent installs ship every plugin under `platform/plugins/*` plus every bundle under `premium-plugins/*`. There is no per-account purchase record; brand identity is the gate.
@@ -76,12 +73,12 @@ Brand decides which premium plugins ship. Maxy installs ship only `platform/plug
76
73
  | Plugin | Type | What it does | Public agent |
77
74
  |--------|------|-------------|-------------|
78
75
  | `teaching` | Skills | Interactive tutoring, lesson planning, and study pack generation from your knowledge base | Yes — all 3 skills serve students and parents |
79
- | `real-agent` | Bundle (11 sub-plugins) | UK estate agency skills — sales, listings, vendor management, buyer management, lead generation, coaching, business operations, onboarding, teaching, Loop CRM, and property brochures. 3 specialist roles (negotiator, valuer, compliance) | 5 sub-plugins (estate-sales, buyers, estate-coaching, estate-teaching, estate-onboarding) |
76
+ | `real-agent` | Bundle (10 sub-plugins) | UK estate agency skills — sales, listings, vendor management, buyer management, lead generation, coaching, business operations, teaching, Loop CRM, and property brochures. 3 specialist roles (negotiator, valuer, compliance) | 4 sub-plugins (estate-sales, buyers, estate-coaching, estate-teaching) |
80
77
  | `writer-craft` | Skills + Agent | Manuscript review and writing craft — story architecture, reader engagement, prose craft, editorial practice, and multi-level review | No — writing craft serves the author |
81
78
 
82
79
  **How it works:** Every boot {{productName}} delivers the brand's premium plugins from staging into `platform/plugins/` and stamps `enabledPlugins` against what is actually on disk. No conversation needed — the brand's full set is active from the first turn after install. Updates and reinstalls re-deliver from staging.
83
80
 
84
- Some premium plugins are **bundles** — multiple sub-plugins shipped under one directory in `premium-plugins/`, each independently activatable. For example, Real Agent ships 11 sub-plugins covering different aspects of estate agency work. They are all enabled by default. Sub-plugins you don't want active can be turned off individually with "disable <name>"; enabling or disabling individual sub-plugins does not affect the others.
81
+ Some premium plugins are **bundles** — multiple sub-plugins shipped under one directory in `premium-plugins/`, each independently activatable. For example, Real Agent ships 10 sub-plugins covering different aspects of estate agency work. They are all enabled by default. Sub-plugins you don't want active can be turned off individually with "disable <name>"; enabling or disabling individual sub-plugins does not affect the others.
85
82
 
86
83
  If you ask {{productName}} about a tool from a plugin your brand does not ship (for example, a Maxy install asking about a Real Agent Loop CRM tool), {{productName}} responds with a structured `<tool-surface-error>` envelope naming the missing plugin and the remedy, rather than improvising with a generic alternative.
87
84
 
@@ -537,12 +537,12 @@ sudo systemctl --user start maxy-ui
537
537
 
538
538
  **Steady-state invariants at `/` (post-Task-067):**
539
539
 
540
- - `grep -c '\[admin-ui\] onboarding-banner-mount' ~/.maxy/logs/admin-ui-console.log` equals page-load count plus onboarding-flip count, not the render count. Sustained climb at idle means the banner mount log regressed back into the render body (Task 050 fix).
540
+ - `grep -c '\[admin-ui\] onboarding-banner-mount' ~/.maxy/logs/admin-ui-console.log` equals page-load count plus onboarding-flip count, not the render count. Sustained climb at idle means the banner mount log regressed back into the render body (fix).
541
541
  - `grep -c '\[admin-ui\] sessions-poll' ~/.maxy/logs/admin-ui-console.log` over a 60-minute idle window equals zero. The hook no longer installs a `setInterval`; every `sessions-poll` line is operator-triggered (initial mount, refresh button, post-mutation refetch). One or more lines during operator idle means `setInterval` was reinstated.
542
542
  - `outcome=error` lines name a real fetch failure on an operator-triggered refetch, set the `error` field, and surface in the sidebar.
543
543
 
544
- **Reconcile signal (Task 067):**
544
+ **Reconcile signal:**
545
545
 
546
546
  - `grep -c '\[admin-ui\] sidebar-meta-pane-reconcile' ~/.maxy/logs/admin-ui-console.log` should equal the count of End / Resume / Purge clicks while the metadata pane was open. A `to=gone` line without a paired Close click means the pane's auto-close logic regressed.
547
547
 
548
- **Why this matters.** The render-body log was misleading: it read as "the admin agent is checking onboarding state continuously", when in fact `onboardingComplete` had not changed at all. The Task 050 fix moved the log into `useEffect(…, [])`; Task 067 then dropped the per-tick poll entirely, so a quiet console is now the steady state. With both fixes in place, console output is a faithful record of what the page actually did each operator click.
548
+ **Why this matters.** The render-body log was misleading: it read as "the admin agent is checking onboarding state continuously", when in fact `onboardingComplete` had not changed at all. The fix moved the log into `useEffect(…, [])` then dropped the per-tick poll entirely, so a quiet console is now the steady state. With both fixes in place, console output is a faithful record of what the page actually did each operator click.