@rubytech/create-realagent-code 0.1.608 → 0.1.610

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 (251) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/graph-write/dist/__tests__/account-id-gate.test.js +86 -0
  3. package/payload/platform/lib/graph-write/dist/__tests__/account-id-gate.test.js.map +1 -1
  4. package/payload/platform/lib/graph-write/dist/index.d.ts +30 -9
  5. package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
  6. package/payload/platform/lib/graph-write/dist/index.js +22 -2
  7. package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
  8. package/payload/platform/lib/graph-write/src/__tests__/account-id-gate.test.ts +99 -1
  9. package/payload/platform/lib/graph-write/src/index.ts +47 -12
  10. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +45 -1
  11. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  12. package/payload/platform/plugins/docs/references/telegram-guide.md +44 -0
  13. package/payload/platform/plugins/memory/mcp/dist/index.js +65 -0
  14. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  15. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/xacct-counters.test.d.ts +2 -0
  16. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/xacct-counters.test.d.ts.map +1 -0
  17. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/xacct-counters.test.js +169 -0
  18. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/xacct-counters.test.js.map +1 -0
  19. package/payload/platform/plugins/memory/mcp/dist/lib/xacct-counters.d.ts +63 -0
  20. package/payload/platform/plugins/memory/mcp/dist/lib/xacct-counters.d.ts.map +1 -0
  21. package/payload/platform/plugins/memory/mcp/dist/lib/xacct-counters.js +114 -0
  22. package/payload/platform/plugins/memory/mcp/dist/lib/xacct-counters.js.map +1 -0
  23. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-cross-account.test.d.ts +2 -0
  24. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-cross-account.test.d.ts.map +1 -0
  25. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-cross-account.test.js +123 -0
  26. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-cross-account.test.js.map +1 -0
  27. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/xacct-write-gate.test.d.ts +2 -0
  28. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/xacct-write-gate.test.d.ts.map +1 -0
  29. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/xacct-write-gate.test.js +110 -0
  30. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/xacct-write-gate.test.js.map +1 -0
  31. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
  32. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +7 -0
  33. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  34. package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
  35. package/payload/platform/services/claude-session-manager/dist/claude-trust-preflight.d.ts +43 -0
  36. package/payload/platform/services/claude-session-manager/dist/claude-trust-preflight.d.ts.map +1 -0
  37. package/payload/platform/services/claude-session-manager/dist/claude-trust-preflight.js +88 -0
  38. package/payload/platform/services/claude-session-manager/dist/claude-trust-preflight.js.map +1 -0
  39. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/http-server.js +125 -4
  41. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  42. package/payload/platform/services/claude-session-manager/dist/index.js +26 -1
  43. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  44. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts +1 -1
  45. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts.map +1 -1
  46. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +26 -0
  47. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
  48. package/payload/platform/services/claude-session-manager/dist/recover-account.d.ts +54 -0
  49. package/payload/platform/services/claude-session-manager/dist/recover-account.d.ts.map +1 -0
  50. package/payload/platform/services/claude-session-manager/dist/recover-account.js +141 -0
  51. package/payload/platform/services/claude-session-manager/dist/recover-account.js.map +1 -0
  52. package/payload/platform/services/claude-session-manager/dist/session-account-census.d.ts +30 -0
  53. package/payload/platform/services/claude-session-manager/dist/session-account-census.d.ts.map +1 -0
  54. package/payload/platform/services/claude-session-manager/dist/session-account-census.js +96 -0
  55. package/payload/platform/services/claude-session-manager/dist/session-account-census.js.map +1 -0
  56. package/payload/platform/services/telegram-channel/dist/instructions.d.ts +9 -0
  57. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  58. package/payload/platform/services/telegram-channel/dist/instructions.js +15 -0
  59. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  60. package/payload/platform/services/telegram-channel/dist/notification.d.ts +6 -4
  61. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  62. package/payload/platform/services/telegram-channel/dist/notification.js +15 -1
  63. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  64. package/payload/server/{chunk-GI5AVCRG.js → chunk-DRDU74ZM.js} +1 -1
  65. package/payload/server/{chunk-MNN2RWJR.js → chunk-IOPUA7QV.js} +1 -1
  66. package/payload/server/{chunk-6AQYMT6C.js → chunk-T6NXRWMG.js} +43 -8
  67. package/payload/server/{manager-VDHT3YYI.js → manager-O5L2SKW7.js} +2 -2
  68. package/payload/server/maxy-edge.js +2 -2
  69. package/payload/server/public/activity.html +6 -6
  70. package/payload/server/public/agents.html +5 -5
  71. package/payload/server/public/assets/{AdminLoginScreens-DuQ3ax5U.js → AdminLoginScreens-uk2gBvI9.js} +1 -1
  72. package/payload/server/public/assets/AdminLoginScreens-uk2gBvI9.js.br +0 -0
  73. package/payload/server/public/assets/AdminLoginScreens-uk2gBvI9.js.gz +0 -0
  74. package/payload/server/public/assets/AdminShell-DyOPTLdb.js +3 -0
  75. package/payload/server/public/assets/AdminShell-DyOPTLdb.js.br +0 -0
  76. package/payload/server/public/assets/AdminShell-DyOPTLdb.js.gz +0 -0
  77. package/payload/server/public/assets/{activity-C2qWlcJ5.js → activity-DfIud5UH.js} +1 -1
  78. package/payload/server/public/assets/activity-DfIud5UH.js.br +0 -0
  79. package/payload/server/public/assets/activity-DfIud5UH.js.gz +0 -0
  80. package/payload/server/public/assets/admin-Duy2d3ks.js +1 -0
  81. package/payload/server/public/assets/admin-Duy2d3ks.js.br +0 -0
  82. package/payload/server/public/assets/admin-Duy2d3ks.js.gz +0 -0
  83. package/payload/server/public/assets/{agents-DoGVAjIT.js → agents-Rcdk-pni.js} +1 -1
  84. package/payload/server/public/assets/agents-Rcdk-pni.js.br +0 -0
  85. package/payload/server/public/assets/agents-Rcdk-pni.js.gz +0 -0
  86. package/payload/server/public/assets/{browser-DjqS897k.js → browser-Bt6h1Pjb.js} +1 -1
  87. package/payload/server/public/assets/browser-Bt6h1Pjb.js.br +0 -0
  88. package/payload/server/public/assets/browser-Bt6h1Pjb.js.gz +0 -0
  89. package/payload/server/public/assets/{calendar-DJeOm0WS.js → calendar-Di0yArmc.js} +1 -1
  90. package/payload/server/public/assets/calendar-Di0yArmc.js.br +0 -0
  91. package/payload/server/public/assets/calendar-Di0yArmc.js.gz +0 -0
  92. package/payload/server/public/assets/chat-xJTrFY2U.js +1 -0
  93. package/payload/server/public/assets/chat-xJTrFY2U.js.br +1 -0
  94. package/payload/server/public/assets/chat-xJTrFY2U.js.gz +0 -0
  95. package/payload/server/public/assets/{chevron-left-D9z1aK3p.js → chevron-left-QGcFX-3R.js} +1 -1
  96. package/payload/server/public/assets/chevron-left-QGcFX-3R.js.br +0 -0
  97. package/payload/server/public/assets/clock-PkEm8y4i.js +1 -0
  98. package/payload/server/public/assets/clock-PkEm8y4i.js.br +0 -0
  99. package/payload/server/public/assets/clock-PkEm8y4i.js.gz +0 -0
  100. package/payload/server/public/assets/copy-RSaF-402.js +1 -0
  101. package/payload/server/public/assets/copy-RSaF-402.js.br +0 -0
  102. package/payload/server/public/assets/copy-RSaF-402.js.gz +0 -0
  103. package/payload/server/public/assets/data-CLmmCyzs.js +1 -0
  104. package/payload/server/public/assets/data-CLmmCyzs.js.br +1 -0
  105. package/payload/server/public/assets/data-CLmmCyzs.js.gz +0 -0
  106. package/payload/server/public/assets/{field-WRk67lvr.js → field-nfpVNHyk.js} +1 -1
  107. package/payload/server/public/assets/field-nfpVNHyk.js.br +0 -0
  108. package/payload/server/public/assets/field-nfpVNHyk.js.gz +0 -0
  109. package/payload/server/public/assets/{file-text-BJDCb334.js → file-text-Cws2LExM.js} +1 -1
  110. package/payload/server/public/assets/file-text-Cws2LExM.js.br +0 -0
  111. package/payload/server/public/assets/file-text-Cws2LExM.js.gz +0 -0
  112. package/payload/server/public/assets/graph-56nTCvKa.js +51 -0
  113. package/payload/server/public/assets/graph-56nTCvKa.js.br +0 -0
  114. package/payload/server/public/assets/graph-56nTCvKa.js.gz +0 -0
  115. package/payload/server/public/assets/{graph-labels-CEDmX7qW.js → graph-labels-qHDVYalh.js} +1 -1
  116. package/payload/server/public/assets/graph-labels-qHDVYalh.js.br +0 -0
  117. package/payload/server/public/assets/graph-labels-qHDVYalh.js.gz +0 -0
  118. package/payload/server/public/assets/{jsx-runtime-hPFGo4rC.css → jsx-runtime-B5zQuMcr.css} +1 -1
  119. package/payload/server/public/assets/jsx-runtime-B5zQuMcr.css.br +0 -0
  120. package/payload/server/public/assets/{jsx-runtime-hPFGo4rC.css.gz → jsx-runtime-B5zQuMcr.css.gz} +0 -0
  121. package/payload/server/public/assets/{operator-1WFztEQA.js → operator-D-P6oemk.js} +1 -1
  122. package/payload/server/public/assets/operator-D-P6oemk.js.br +2 -0
  123. package/payload/server/public/assets/operator-D-P6oemk.js.gz +0 -0
  124. package/payload/server/public/assets/page-8goE0IWS.js +32 -0
  125. package/payload/server/public/assets/page-8goE0IWS.js.br +0 -0
  126. package/payload/server/public/assets/page-8goE0IWS.js.gz +0 -0
  127. package/payload/server/public/assets/page-iL446JAc.js +1 -0
  128. package/payload/server/public/assets/page-iL446JAc.js.br +0 -0
  129. package/payload/server/public/assets/page-iL446JAc.js.gz +0 -0
  130. package/payload/server/public/assets/play-B8bxRax6.js +1 -0
  131. package/payload/server/public/assets/play-B8bxRax6.js.br +0 -0
  132. package/payload/server/public/assets/play-B8bxRax6.js.gz +0 -0
  133. package/payload/server/public/assets/{public-DAea6w7w.js → public-BwfIj7tM.js} +1 -1
  134. package/payload/server/public/assets/public-BwfIj7tM.js.br +0 -0
  135. package/payload/server/public/assets/public-BwfIj7tM.js.gz +0 -0
  136. package/payload/server/public/assets/{rotate-ccw-CqlRlGsY.js → rotate-ccw-X7-7vE7t.js} +1 -1
  137. package/payload/server/public/assets/rotate-ccw-X7-7vE7t.js.br +0 -0
  138. package/payload/server/public/assets/rotate-ccw-X7-7vE7t.js.gz +0 -0
  139. package/payload/server/public/assets/{routines-vy5xsyqx.js → routines-sFud5tka.js} +2 -2
  140. package/payload/server/public/assets/routines-sFud5tka.js.br +0 -0
  141. package/payload/server/public/assets/routines-sFud5tka.js.gz +0 -0
  142. package/payload/server/public/assets/{skills-X7FTilVy.js → skills-_Dc3eG9T.js} +1 -1
  143. package/payload/server/public/assets/skills-_Dc3eG9T.js.br +0 -0
  144. package/payload/server/public/assets/skills-_Dc3eG9T.js.gz +0 -0
  145. package/payload/server/public/assets/tasks-C0u8AtqT.js +3 -0
  146. package/payload/server/public/assets/tasks-C0u8AtqT.js.br +0 -0
  147. package/payload/server/public/assets/tasks-C0u8AtqT.js.gz +0 -0
  148. package/payload/server/public/assets/{triangle-alert-CuWcGaRo.js → triangle-alert-DD4kSK45.js} +1 -1
  149. package/payload/server/public/assets/triangle-alert-DD4kSK45.js.br +0 -0
  150. package/payload/server/public/assets/triangle-alert-DD4kSK45.js.gz +0 -0
  151. package/payload/server/public/assets/{useCopyFeedback-DLSKs6r2.js → useCopyFeedback-Dq-Putj7.js} +1 -1
  152. package/payload/server/public/assets/useCopyFeedback-Dq-Putj7.js.br +0 -0
  153. package/payload/server/public/assets/useCopyFeedback-Dq-Putj7.js.gz +0 -0
  154. package/payload/server/public/assets/useMediaQuery-Cm_fvNIH.js +6 -0
  155. package/payload/server/public/assets/useMediaQuery-Cm_fvNIH.js.br +0 -0
  156. package/payload/server/public/assets/useMediaQuery-Cm_fvNIH.js.gz +0 -0
  157. package/payload/server/public/assets/useVoiceRecorder-C6xqnm7i.js +2 -0
  158. package/payload/server/public/assets/useVoiceRecorder-C6xqnm7i.js.br +0 -0
  159. package/payload/server/public/assets/useVoiceRecorder-C6xqnm7i.js.gz +0 -0
  160. package/payload/server/public/assets/{wrench-nDMQ6x-6.js → wrench-Bjw6eVl_.js} +1 -1
  161. package/payload/server/public/assets/wrench-Bjw6eVl_.js.br +0 -0
  162. package/payload/server/public/assets/wrench-Bjw6eVl_.js.gz +0 -0
  163. package/payload/server/public/browser.html +5 -5
  164. package/payload/server/public/calendar.html +8 -8
  165. package/payload/server/public/chat.html +14 -14
  166. package/payload/server/public/data.html +12 -12
  167. package/payload/server/public/field.html +3 -3
  168. package/payload/server/public/graph.html +10 -10
  169. package/payload/server/public/index.html +14 -14
  170. package/payload/server/public/operator.html +16 -16
  171. package/payload/server/public/public.html +14 -14
  172. package/payload/server/public/routines.html +8 -8
  173. package/payload/server/public/skills.html +6 -6
  174. package/payload/server/public/tasks.html +7 -7
  175. package/payload/server/server.js +511 -283
  176. package/payload/server/public/assets/AdminLoginScreens-DuQ3ax5U.js.br +0 -0
  177. package/payload/server/public/assets/AdminLoginScreens-DuQ3ax5U.js.gz +0 -0
  178. package/payload/server/public/assets/AdminShell-1HyATV_t.js +0 -3
  179. package/payload/server/public/assets/AdminShell-1HyATV_t.js.br +0 -0
  180. package/payload/server/public/assets/AdminShell-1HyATV_t.js.gz +0 -0
  181. package/payload/server/public/assets/activity-C2qWlcJ5.js.br +0 -0
  182. package/payload/server/public/assets/activity-C2qWlcJ5.js.gz +0 -0
  183. package/payload/server/public/assets/admin-DqpfY8-t.js +0 -1
  184. package/payload/server/public/assets/admin-DqpfY8-t.js.br +0 -0
  185. package/payload/server/public/assets/admin-DqpfY8-t.js.gz +0 -0
  186. package/payload/server/public/assets/agents-DoGVAjIT.js.br +0 -0
  187. package/payload/server/public/assets/agents-DoGVAjIT.js.gz +0 -0
  188. package/payload/server/public/assets/browser-DjqS897k.js.br +0 -0
  189. package/payload/server/public/assets/browser-DjqS897k.js.gz +0 -0
  190. package/payload/server/public/assets/calendar-DJeOm0WS.js.br +0 -0
  191. package/payload/server/public/assets/calendar-DJeOm0WS.js.gz +0 -0
  192. package/payload/server/public/assets/chat-BrRE0Dck.js +0 -1
  193. package/payload/server/public/assets/chat-BrRE0Dck.js.br +0 -0
  194. package/payload/server/public/assets/chat-BrRE0Dck.js.gz +0 -0
  195. package/payload/server/public/assets/chevron-left-D9z1aK3p.js.br +0 -0
  196. package/payload/server/public/assets/clock-BqHWMICF.js +0 -1
  197. package/payload/server/public/assets/clock-BqHWMICF.js.br +0 -0
  198. package/payload/server/public/assets/clock-BqHWMICF.js.gz +0 -0
  199. package/payload/server/public/assets/copy-p9ZM9fnn.js +0 -1
  200. package/payload/server/public/assets/copy-p9ZM9fnn.js.br +0 -0
  201. package/payload/server/public/assets/copy-p9ZM9fnn.js.gz +0 -0
  202. package/payload/server/public/assets/data-CPsqW0qW.js +0 -1
  203. package/payload/server/public/assets/data-CPsqW0qW.js.br +0 -0
  204. package/payload/server/public/assets/data-CPsqW0qW.js.gz +0 -0
  205. package/payload/server/public/assets/field-WRk67lvr.js.br +0 -0
  206. package/payload/server/public/assets/field-WRk67lvr.js.gz +0 -0
  207. package/payload/server/public/assets/file-text-BJDCb334.js.br +0 -0
  208. package/payload/server/public/assets/file-text-BJDCb334.js.gz +0 -0
  209. package/payload/server/public/assets/graph-CAU2xh2Z.js +0 -51
  210. package/payload/server/public/assets/graph-CAU2xh2Z.js.br +0 -0
  211. package/payload/server/public/assets/graph-CAU2xh2Z.js.gz +0 -0
  212. package/payload/server/public/assets/graph-labels-CEDmX7qW.js.br +0 -0
  213. package/payload/server/public/assets/graph-labels-CEDmX7qW.js.gz +0 -0
  214. package/payload/server/public/assets/jsx-runtime-hPFGo4rC.css.br +0 -0
  215. package/payload/server/public/assets/operator-1WFztEQA.js.br +0 -0
  216. package/payload/server/public/assets/operator-1WFztEQA.js.gz +0 -0
  217. package/payload/server/public/assets/page-B72XigcU.js +0 -32
  218. package/payload/server/public/assets/page-B72XigcU.js.br +0 -0
  219. package/payload/server/public/assets/page-B72XigcU.js.gz +0 -0
  220. package/payload/server/public/assets/page-nT8l_cX1.js +0 -1
  221. package/payload/server/public/assets/page-nT8l_cX1.js.br +0 -0
  222. package/payload/server/public/assets/page-nT8l_cX1.js.gz +0 -0
  223. package/payload/server/public/assets/play-CYqOCqm6.js +0 -1
  224. package/payload/server/public/assets/play-CYqOCqm6.js.br +0 -0
  225. package/payload/server/public/assets/play-CYqOCqm6.js.gz +0 -0
  226. package/payload/server/public/assets/public-DAea6w7w.js.br +0 -0
  227. package/payload/server/public/assets/public-DAea6w7w.js.gz +0 -0
  228. package/payload/server/public/assets/rotate-ccw-CqlRlGsY.js.br +0 -0
  229. package/payload/server/public/assets/rotate-ccw-CqlRlGsY.js.gz +0 -0
  230. package/payload/server/public/assets/routines-vy5xsyqx.js.br +0 -0
  231. package/payload/server/public/assets/routines-vy5xsyqx.js.gz +0 -0
  232. package/payload/server/public/assets/skills-X7FTilVy.js.br +0 -0
  233. package/payload/server/public/assets/skills-X7FTilVy.js.gz +0 -0
  234. package/payload/server/public/assets/tasks-BXx_jk_p.js +0 -3
  235. package/payload/server/public/assets/tasks-BXx_jk_p.js.br +0 -0
  236. package/payload/server/public/assets/tasks-BXx_jk_p.js.gz +0 -0
  237. package/payload/server/public/assets/triangle-alert-CuWcGaRo.js.br +0 -0
  238. package/payload/server/public/assets/triangle-alert-CuWcGaRo.js.gz +0 -0
  239. package/payload/server/public/assets/useCopyFeedback-DLSKs6r2.js.br +0 -0
  240. package/payload/server/public/assets/useCopyFeedback-DLSKs6r2.js.gz +0 -0
  241. package/payload/server/public/assets/useMediaQuery-C_1CV_iW.js +0 -6
  242. package/payload/server/public/assets/useMediaQuery-C_1CV_iW.js.br +0 -0
  243. package/payload/server/public/assets/useMediaQuery-C_1CV_iW.js.gz +0 -0
  244. package/payload/server/public/assets/useVoiceRecorder-DBzM_HIx.js +0 -2
  245. package/payload/server/public/assets/useVoiceRecorder-DBzM_HIx.js.br +0 -0
  246. package/payload/server/public/assets/useVoiceRecorder-DBzM_HIx.js.gz +0 -0
  247. package/payload/server/public/assets/wrench-nDMQ6x-6.js.br +0 -0
  248. package/payload/server/public/assets/wrench-nDMQ6x-6.js.gz +0 -0
  249. /package/payload/server/public/assets/{jsx-runtime-CvVXOszc.js → jsx-runtime-DeRQuYlX.js} +0 -0
  250. /package/payload/server/public/assets/{jsx-runtime-CvVXOszc.js.br → jsx-runtime-DeRQuYlX.js.br} +0 -0
  251. /package/payload/server/public/assets/{jsx-runtime-CvVXOszc.js.gz → jsx-runtime-DeRQuYlX.js.gz} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-realagent-code",
3
- "version": "0.1.608",
3
+ "version": "0.1.610",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent-code": "./dist/index.js"
@@ -149,6 +149,92 @@ function captureStderr() {
149
149
  strict_1.default.equal(result.nodeId, "new-element-id");
150
150
  strict_1.default.equal(result.edgesCreated, 1);
151
151
  });
152
+ // Task 2731 — the cross-account write path. `expectedAccountId` is the account
153
+ // the caller's authority check resolved (own account, or a house-authorised
154
+ // sub-account target). It must be the authority the gate compares against, and
155
+ // the process's own ACCOUNT_ID must not be a second accepted value: a
156
+ // house-scoped session writing into a sub-account stamps the SUB-ACCOUNT id, so
157
+ // an env that still won would refuse every authorised cross-account write.
158
+ (0, node_test_1.default)("expectedAccountId overrides a differing process ACCOUNT_ID", async () => {
159
+ const houseAccount = "aaaaaaaa-1111-2222-3333-444444444444";
160
+ const subAccount = "8a160746-1111-2222-3333-444444444444";
161
+ const original = process.env.ACCOUNT_ID;
162
+ process.env.ACCOUNT_ID = houseAccount;
163
+ try {
164
+ const result = await (0, index_js_1.writeNodeWithEdges)({
165
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
166
+ session: makeStubSession(TARGET_ID),
167
+ labels: ["Conversation"],
168
+ props: { accountId: subAccount },
169
+ relationships: REL,
170
+ createdBy: { agent: "test-agent", session: "s" },
171
+ expectedAccountId: subAccount,
172
+ });
173
+ strict_1.default.equal(result.nodeId, "new-element-id");
174
+ }
175
+ finally {
176
+ if (original === undefined)
177
+ delete process.env.ACCOUNT_ID;
178
+ else
179
+ process.env.ACCOUNT_ID = original;
180
+ }
181
+ });
182
+ (0, node_test_1.default)("process ACCOUNT_ID is not a second accepted value once expectedAccountId is set", async () => {
183
+ const houseAccount = "aaaaaaaa-1111-2222-3333-444444444444";
184
+ const subAccount = "8a160746-1111-2222-3333-444444444444";
185
+ const original = process.env.ACCOUNT_ID;
186
+ process.env.ACCOUNT_ID = houseAccount;
187
+ try {
188
+ await strict_1.default.rejects(() => (0, index_js_1.writeNodeWithEdges)({
189
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
190
+ session: makeStubSession(TARGET_ID),
191
+ labels: ["Conversation"],
192
+ // The house id the process was spawned with — authorised for its own
193
+ // writes, but not for this call, which resolved the sub-account.
194
+ props: { accountId: houseAccount },
195
+ relationships: REL,
196
+ createdBy: { agent: "test-agent", session: "s" },
197
+ expectedAccountId: subAccount,
198
+ }), /invalid-account-id/);
199
+ }
200
+ finally {
201
+ if (original === undefined)
202
+ delete process.env.ACCOUNT_ID;
203
+ else
204
+ process.env.ACCOUNT_ID = original;
205
+ }
206
+ });
207
+ // The write-outcome line must distinguish an account-gate refusal from any
208
+ // other write failure without matching on the message prose. A caller reads the
209
+ // discriminator, never the sentence.
210
+ (0, node_test_1.default)("the account-gate rejection is identifiable without matching prose", async () => {
211
+ const err = await (0, index_js_1.writeNodeWithEdges)({
212
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
+ session: makeStubSession(TARGET_ID),
214
+ labels: ["Conversation"],
215
+ props: { accountId: "ffffffff-1111-2222-3333-444444444444" },
216
+ relationships: REL,
217
+ createdBy: { agent: "test-agent", session: "s" },
218
+ expectedAccountId: VALID_UUID,
219
+ }).then(() => null, (e) => e);
220
+ strict_1.default.ok(err !== null, "expected the gate to reject");
221
+ strict_1.default.equal((0, index_js_1.isInvalidAccountIdError)(err), true);
222
+ });
223
+ (0, node_test_1.default)("a non-gate failure is not reported as an account-gate rejection", async () => {
224
+ // Zero relationships is a different doctrine rejection, thrown from the same
225
+ // function. It must not be mistaken for an account-gate refusal.
226
+ const err = await (0, index_js_1.writeNodeWithEdges)({
227
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
228
+ session: makeStubSession(TARGET_ID),
229
+ labels: ["Conversation"],
230
+ props: { accountId: VALID_UUID },
231
+ relationships: [],
232
+ createdBy: { agent: "test-agent", session: "s" },
233
+ expectedAccountId: VALID_UUID,
234
+ }).then(() => null, (e) => e);
235
+ strict_1.default.ok(err !== null, "expected the zero-relationship gate to reject");
236
+ strict_1.default.equal((0, index_js_1.isInvalidAccountIdError)(err), false);
237
+ });
152
238
  (0, node_test_1.default)("system bootstrap exemption: bad accountId still proceeds", async () => {
153
239
  const result = await (0, index_js_1.writeNodeWithEdges)({
154
240
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1 +1 @@
1
- {"version":3,"file":"account-id-gate.test.js","sourceRoot":"","sources":["../../src/__tests__/account-id-gate.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account-id-gate.test.js","sourceRoot":"","sources":["../../src/__tests__/account-id-gate.test.ts"],"names":[],"mappings":"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"}
@@ -105,6 +105,16 @@ export interface CreatedBy {
105
105
  /** Subsystem name ("workflow-execute", "persist-tool-call", ...) for system writes. */
106
106
  source?: string;
107
107
  }
108
+ /**
109
+ * The reason code carried by an account-gate rejection. `writeNodeWithEdges`
110
+ * throws for several distinct doctrine violations; a caller that logs which one
111
+ * fired must not tell them apart by matching the message prose, so the account
112
+ * gate stamps its reason on the error and `isInvalidAccountIdError` reads it.
113
+ * Task 2731's `[xacct] op=write-outcome` line is the caller this exists for.
114
+ */
115
+ export declare const INVALID_ACCOUNT_ID_REASON = "invalid-account-id";
116
+ /** True only for the account-gate rejection thrown by `writeNodeWithEdges`. */
117
+ export declare function isInvalidAccountIdError(err: unknown): boolean;
108
118
  export interface WriteNodeWithEdgesParams {
109
119
  session: Session;
110
120
  labels: string[];
@@ -113,15 +123,26 @@ export interface WriteNodeWithEdgesParams {
113
123
  relationships: GraphRelationship[];
114
124
  createdBy: CreatedBy;
115
125
  /**
116
- * Override for the accountId gate. Production callers leave
117
- * this unset — the gate compares `props.accountId` against
118
- * `process.env.ACCOUNT_ID`, which the MCP server / UI server validates at
119
- * boot time. Tests pass an explicit value to avoid env coupling.
120
- * Reading from env var (instead of an on-disk dir enumeration) keeps
121
- * graph-write out of the `node:fs` import chain the lib is bundled
122
- * transitively into the ESM payload via cloudflare-task-tracker.ts, and
123
- * any CJS-side fs require shims to a runtime-fatal `__require("fs")`
124
- * after esbuild's CJS-to-ESM conversion strips the `node:` prefix.
126
+ * The account this write is authorised for. The gate compares
127
+ * `props.accountId` against it, and against nothing else — the process's own
128
+ * `ACCOUNT_ID` is not a second accepted value.
129
+ *
130
+ * A caller that resolves per-call authority supplies it. The memory plugin's
131
+ * cross-account path (Task 1455) is the production case: a house-scoped
132
+ * session may target a sub-account, `resolveToolAccount` proves the session
133
+ * is house-scoped and the target is provisioned on disk, and the resolved
134
+ * target is both stamped onto `props.accountId` and passed here. Omitting it
135
+ * there produced Task 2731 — `decision=allow` from the resolver followed by
136
+ * `reason=invalid-account-id` from this gate, one for one, in one process.
137
+ *
138
+ * Unset, the gate falls back to `process.env.ACCOUNT_ID`, which the MCP
139
+ * server / UI server validates at boot. That remains correct for any caller
140
+ * that only ever writes its own account. Reading from an env var (instead of
141
+ * an on-disk dir enumeration) keeps graph-write out of the `node:fs` import
142
+ * chain — the lib is bundled transitively into the ESM payload via
143
+ * cloudflare-task-tracker.ts, and any CJS-side fs require shims to a
144
+ * runtime-fatal `__require("fs")` after esbuild's CJS-to-ESM conversion
145
+ * strips the `node:` prefix.
125
146
  */
126
147
  expectedAccountId?: string;
127
148
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAK3B,cAAc,8BAA8B,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAQvD,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAIvD,CAAC;AASH;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAgBpD,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAEtD,CAAC;AAuCH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,4EAA4E;IAC5E,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAgBD,uDAAuD;AACvD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,SAAS,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAiU1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAK3B,cAAc,8BAA8B,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAQvD,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAIvD,CAAC;AASH;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAgBpD,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAEtD,CAAC;AAuCH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAW9D,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK7D;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,4EAA4E;IAC5E,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAgBD,uDAAuD;AACvD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,SAAS,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,eAAe,CAAC,CA+T1B"}
@@ -14,7 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.DOCUMENT_ARCHIVE_LABELS = exports.VECTOR_INDEXED_LABELS = exports.PROVENANCE_SOURCE_LABELS = exports.ACTION_PROVENANCE_LABELS = void 0;
17
+ exports.INVALID_ACCOUNT_ID_REASON = exports.DOCUMENT_ARCHIVE_LABELS = exports.VECTOR_INDEXED_LABELS = exports.PROVENANCE_SOURCE_LABELS = exports.ACTION_PROVENANCE_LABELS = void 0;
18
+ exports.isInvalidAccountIdError = isInvalidAccountIdError;
18
19
  exports.stampCreatedBy = stampCreatedBy;
19
20
  exports.writeNodeWithEdges = writeNodeWithEdges;
20
21
  // re-export the post-write audit so consumers (graph-mcp shim)
@@ -182,6 +183,25 @@ function boundedEmbedText(labels, props) {
182
183
  function findProvenanceCandidates(relationships) {
183
184
  return relationships.filter((r) => r.type === "PRODUCED" && r.direction === "incoming");
184
185
  }
186
+ /**
187
+ * The reason code carried by an account-gate rejection. `writeNodeWithEdges`
188
+ * throws for several distinct doctrine violations; a caller that logs which one
189
+ * fired must not tell them apart by matching the message prose, so the account
190
+ * gate stamps its reason on the error and `isInvalidAccountIdError` reads it.
191
+ * Task 2731's `[xacct] op=write-outcome` line is the caller this exists for.
192
+ */
193
+ exports.INVALID_ACCOUNT_ID_REASON = "invalid-account-id";
194
+ /** An account-gate rejection, carrying `reason` for callers to discriminate on. */
195
+ function invalidAccountIdError(slice) {
196
+ const err = new Error(`Write doctrine violated: ${exports.INVALID_ACCOUNT_ID_REASON} (${slice}) — accountId must equal the account this write is authorised for: \`expectedAccountId\` when the caller resolves authority per call, otherwise the ACCOUNT_ID set by the spawning process. See .docs/neo4j.md "Account isolation invariant".`);
197
+ err.reason = exports.INVALID_ACCOUNT_ID_REASON;
198
+ return err;
199
+ }
200
+ /** True only for the account-gate rejection thrown by `writeNodeWithEdges`. */
201
+ function isInvalidAccountIdError(err) {
202
+ return (err instanceof Error &&
203
+ err.reason === exports.INVALID_ACCOUNT_ID_REASON);
204
+ }
185
205
  /**
186
206
  * Properties a `mergeOn` write sets on creation only, so a re-import
187
207
  * preserves the original provenance and creation time rather than restamping
@@ -237,7 +257,7 @@ async function writeNodeWithEdges(params) {
237
257
  accountId !== expectedAccountId) {
238
258
  const slice = typeof accountId === "string" ? accountId.slice(0, 8) : "missing";
239
259
  process.stderr.write(`[graph-write] reject reason=invalid-account-id accountId=${slice} writer=${agentLabel}\n`);
240
- throw new Error(`Write doctrine violated: invalid-account-id (${slice}) — accountId must equal ACCOUNT_ID set by the spawning process. See .docs/neo4j.md "Account isolation invariant".`);
260
+ throw invalidAccountIdError(slice);
241
261
  }
242
262
  }
243
263
  // review-detector / review-digest feature is removed entirely.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import test from "node:test";
2
2
  import assert from "node:assert/strict";
3
- import { writeNodeWithEdges, type GraphRelationship } from "../index.js";
3
+ import {
4
+ writeNodeWithEdges,
5
+ isInvalidAccountIdError,
6
+ type GraphRelationship,
7
+ } from "../index.js";
4
8
 
5
9
  interface StubTx {
6
10
  run(cypher: string, params?: Record<string, unknown>): Promise<{
@@ -174,6 +178,100 @@ test("accepts matching accountId from non-system writer", async () => {
174
178
  assert.equal(result.edgesCreated, 1);
175
179
  });
176
180
 
181
+ // Task 2731 — the cross-account write path. `expectedAccountId` is the account
182
+ // the caller's authority check resolved (own account, or a house-authorised
183
+ // sub-account target). It must be the authority the gate compares against, and
184
+ // the process's own ACCOUNT_ID must not be a second accepted value: a
185
+ // house-scoped session writing into a sub-account stamps the SUB-ACCOUNT id, so
186
+ // an env that still won would refuse every authorised cross-account write.
187
+ test("expectedAccountId overrides a differing process ACCOUNT_ID", async () => {
188
+ const houseAccount = "aaaaaaaa-1111-2222-3333-444444444444";
189
+ const subAccount = "8a160746-1111-2222-3333-444444444444";
190
+ const original = process.env.ACCOUNT_ID;
191
+ process.env.ACCOUNT_ID = houseAccount;
192
+ try {
193
+ const result = await writeNodeWithEdges({
194
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
195
+ session: makeStubSession(TARGET_ID) as any,
196
+ labels: ["Conversation"],
197
+ props: { accountId: subAccount },
198
+ relationships: REL,
199
+ createdBy: { agent: "test-agent", session: "s" },
200
+ expectedAccountId: subAccount,
201
+ });
202
+ assert.equal(result.nodeId, "new-element-id");
203
+ } finally {
204
+ if (original === undefined) delete process.env.ACCOUNT_ID;
205
+ else process.env.ACCOUNT_ID = original;
206
+ }
207
+ });
208
+
209
+ test("process ACCOUNT_ID is not a second accepted value once expectedAccountId is set", async () => {
210
+ const houseAccount = "aaaaaaaa-1111-2222-3333-444444444444";
211
+ const subAccount = "8a160746-1111-2222-3333-444444444444";
212
+ const original = process.env.ACCOUNT_ID;
213
+ process.env.ACCOUNT_ID = houseAccount;
214
+ try {
215
+ await assert.rejects(
216
+ () =>
217
+ writeNodeWithEdges({
218
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
219
+ session: makeStubSession(TARGET_ID) as any,
220
+ labels: ["Conversation"],
221
+ // The house id the process was spawned with — authorised for its own
222
+ // writes, but not for this call, which resolved the sub-account.
223
+ props: { accountId: houseAccount },
224
+ relationships: REL,
225
+ createdBy: { agent: "test-agent", session: "s" },
226
+ expectedAccountId: subAccount,
227
+ }),
228
+ /invalid-account-id/,
229
+ );
230
+ } finally {
231
+ if (original === undefined) delete process.env.ACCOUNT_ID;
232
+ else process.env.ACCOUNT_ID = original;
233
+ }
234
+ });
235
+
236
+ // The write-outcome line must distinguish an account-gate refusal from any
237
+ // other write failure without matching on the message prose. A caller reads the
238
+ // discriminator, never the sentence.
239
+ test("the account-gate rejection is identifiable without matching prose", async () => {
240
+ const err = await writeNodeWithEdges({
241
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
242
+ session: makeStubSession(TARGET_ID) as any,
243
+ labels: ["Conversation"],
244
+ props: { accountId: "ffffffff-1111-2222-3333-444444444444" },
245
+ relationships: REL,
246
+ createdBy: { agent: "test-agent", session: "s" },
247
+ expectedAccountId: VALID_UUID,
248
+ }).then(
249
+ () => null,
250
+ (e: unknown) => e,
251
+ );
252
+ assert.ok(err !== null, "expected the gate to reject");
253
+ assert.equal(isInvalidAccountIdError(err), true);
254
+ });
255
+
256
+ test("a non-gate failure is not reported as an account-gate rejection", async () => {
257
+ // Zero relationships is a different doctrine rejection, thrown from the same
258
+ // function. It must not be mistaken for an account-gate refusal.
259
+ const err = await writeNodeWithEdges({
260
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
261
+ session: makeStubSession(TARGET_ID) as any,
262
+ labels: ["Conversation"],
263
+ props: { accountId: VALID_UUID },
264
+ relationships: [],
265
+ createdBy: { agent: "test-agent", session: "s" },
266
+ expectedAccountId: VALID_UUID,
267
+ }).then(
268
+ () => null,
269
+ (e: unknown) => e,
270
+ );
271
+ assert.ok(err !== null, "expected the zero-relationship gate to reject");
272
+ assert.equal(isInvalidAccountIdError(err), false);
273
+ });
274
+
177
275
  test("system bootstrap exemption: bad accountId still proceeds", async () => {
178
276
  const result = await writeNodeWithEdges({
179
277
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -194,6 +194,32 @@ export interface CreatedBy {
194
194
  source?: string;
195
195
  }
196
196
 
197
+ /**
198
+ * The reason code carried by an account-gate rejection. `writeNodeWithEdges`
199
+ * throws for several distinct doctrine violations; a caller that logs which one
200
+ * fired must not tell them apart by matching the message prose, so the account
201
+ * gate stamps its reason on the error and `isInvalidAccountIdError` reads it.
202
+ * Task 2731's `[xacct] op=write-outcome` line is the caller this exists for.
203
+ */
204
+ export const INVALID_ACCOUNT_ID_REASON = "invalid-account-id";
205
+
206
+ /** An account-gate rejection, carrying `reason` for callers to discriminate on. */
207
+ function invalidAccountIdError(slice: string): Error {
208
+ const err = new Error(
209
+ `Write doctrine violated: ${INVALID_ACCOUNT_ID_REASON} (${slice}) — accountId must equal the account this write is authorised for: \`expectedAccountId\` when the caller resolves authority per call, otherwise the ACCOUNT_ID set by the spawning process. See .docs/neo4j.md "Account isolation invariant".`,
210
+ );
211
+ (err as Error & { reason?: string }).reason = INVALID_ACCOUNT_ID_REASON;
212
+ return err;
213
+ }
214
+
215
+ /** True only for the account-gate rejection thrown by `writeNodeWithEdges`. */
216
+ export function isInvalidAccountIdError(err: unknown): boolean {
217
+ return (
218
+ err instanceof Error &&
219
+ (err as Error & { reason?: string }).reason === INVALID_ACCOUNT_ID_REASON
220
+ );
221
+ }
222
+
197
223
  export interface WriteNodeWithEdgesParams {
198
224
  session: Session;
199
225
  labels: string[];
@@ -202,15 +228,26 @@ export interface WriteNodeWithEdgesParams {
202
228
  relationships: GraphRelationship[];
203
229
  createdBy: CreatedBy;
204
230
  /**
205
- * Override for the accountId gate. Production callers leave
206
- * this unset — the gate compares `props.accountId` against
207
- * `process.env.ACCOUNT_ID`, which the MCP server / UI server validates at
208
- * boot time. Tests pass an explicit value to avoid env coupling.
209
- * Reading from env var (instead of an on-disk dir enumeration) keeps
210
- * graph-write out of the `node:fs` import chain the lib is bundled
211
- * transitively into the ESM payload via cloudflare-task-tracker.ts, and
212
- * any CJS-side fs require shims to a runtime-fatal `__require("fs")`
213
- * after esbuild's CJS-to-ESM conversion strips the `node:` prefix.
231
+ * The account this write is authorised for. The gate compares
232
+ * `props.accountId` against it, and against nothing else — the process's own
233
+ * `ACCOUNT_ID` is not a second accepted value.
234
+ *
235
+ * A caller that resolves per-call authority supplies it. The memory plugin's
236
+ * cross-account path (Task 1455) is the production case: a house-scoped
237
+ * session may target a sub-account, `resolveToolAccount` proves the session
238
+ * is house-scoped and the target is provisioned on disk, and the resolved
239
+ * target is both stamped onto `props.accountId` and passed here. Omitting it
240
+ * there produced Task 2731 — `decision=allow` from the resolver followed by
241
+ * `reason=invalid-account-id` from this gate, one for one, in one process.
242
+ *
243
+ * Unset, the gate falls back to `process.env.ACCOUNT_ID`, which the MCP
244
+ * server / UI server validates at boot. That remains correct for any caller
245
+ * that only ever writes its own account. Reading from an env var (instead of
246
+ * an on-disk dir enumeration) keeps graph-write out of the `node:fs` import
247
+ * chain — the lib is bundled transitively into the ESM payload via
248
+ * cloudflare-task-tracker.ts, and any CJS-side fs require shims to a
249
+ * runtime-fatal `__require("fs")` after esbuild's CJS-to-ESM conversion
250
+ * strips the `node:` prefix.
214
251
  */
215
252
  expectedAccountId?: string;
216
253
  /**
@@ -315,9 +352,7 @@ export async function writeNodeWithEdges(
315
352
  process.stderr.write(
316
353
  `[graph-write] reject reason=invalid-account-id accountId=${slice} writer=${agentLabel}\n`,
317
354
  );
318
- throw new Error(
319
- `Write doctrine violated: invalid-account-id (${slice}) — accountId must equal ACCOUNT_ID set by the spawning process. See .docs/neo4j.md "Account isolation invariant".`,
320
- );
355
+ throw invalidAccountIdError(slice);
321
356
  }
322
357
  }
323
358
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Real Agent ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:91d181f269c43daa00e505bc526da955baa0aa8df0a096c7c4e23c31afb58200
4
+ content-hash: sha256:1587aee1488f6a532941002608db6be34fe30f24519e853fea4aaa86d8faceb1
5
5
  brand: realagent-code
6
6
  product-name: Real Agent
7
7
  ---
@@ -3057,6 +3057,50 @@ Two things to know:
3057
3057
  Text only for now. Photos, files and voice notes are not available on Telegram
3058
3058
  from the dashboard.
3059
3059
 
3060
+ ### What the agent knows about a message you typed
3061
+
3062
+ When you type into a public bot's conversation, that agent's own memory is
3063
+ updated with what you sent, so its next answer does not contradict you. It knows
3064
+ the words came from you and that the visitor has already received them, so it
3065
+ sends nothing in reply. The visitor sees one message, yours.
3066
+
3067
+ This matters because without it the agent carries on from what it believed. On a
3068
+ live conversation an operator sent a visitor the real prices by hand, and the
3069
+ agent's memory still held a visitor asking for a price it had never given.
3070
+
3071
+ Four situations record nothing, and each one says which in the log rather than
3072
+ failing quietly:
3073
+
3074
+ - The bot is not a public bot. Your own admin bot and any specialist bot are
3075
+ conversations with your own side, so there is no agent knowledge to correct.
3076
+ - The agent has been switched off. Nothing is woken behind your back, which is
3077
+ the whole point of having switched it off. Your message still goes out.
3078
+ - The chat belongs to a connected business account. Those conversations are held
3079
+ separately and this route cannot reach them.
3080
+ - The conversation has not started yet. There is nothing to keep consistent, and
3081
+ an agent started this way would be holding a visitor nobody asked it to answer.
3082
+
3083
+ To check it is working, look at the log after sending:
3084
+
3085
+ ```bash
3086
+ grep -hE 'op=(sent|context-recorded)|telegram-manual-census|op=text-suppressed' ~/.maxy-code/logs/server.log
3087
+ ```
3088
+
3089
+ A healthy send shows one `op=sent … ok=true`, one `op=context-recorded …
3090
+ suppressed=yes reason=-`, and one `op=text-suppressed … reason=operator-sent` for
3091
+ that conversation. The standing line
3092
+ `[telegram-manual-census] sent=N recorded=N suppressed=N unrecorded=0 skipped=0
3093
+ leaked=0 window=60m` should show `recorded` and `suppressed` both equal to `sent`,
3094
+ once the four situations above are set aside.
3095
+
3096
+ - **`unrecorded`** above zero: a send reached no conversation and nothing said
3097
+ why.
3098
+ - **`leaked`** above zero: a send reached a conversation, and ten minutes later
3099
+ nothing had reported holding that turn's reply back. Either the agent never
3100
+ woke, or it answered on top of your message and the visitor saw it twice.
3101
+ - **`skipped`** above zero is normal. It is one of the four situations above, and
3102
+ the `reason=` on that send's own line says which.
3103
+
3060
3104
  ## Building your own Telegram functionality
3061
3105
 
3062
3106
  Telegram is a core plugin, so it is on every install and cannot be switched off.
@@ -9,6 +9,18 @@ Invoked by the admin agent directly.
9
9
 
10
10
  This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
11
11
 
12
+ ## 2026-08-15 (0.1.610)
13
+
14
+ - The show-more control on a long chat message now sits in the message footer rather than over the text, and it is readable on a Telegram bubble, where it previously blended into the background.
15
+
16
+ ## 2026-08-15 (0.1.609)
17
+
18
+ - An account created after an install now starts its first conversation. It halted on a folder-trust prompt, which finishes the fix begun in the previous release for accounts that already existed.
19
+ - A message you send by hand now reaches the conversation. It was accepted and went nowhere.
20
+ - Writing a memory into another account works. It was permitted and then refused at the point of writing, so the feature had never once succeeded.
21
+ - A stuck sub-account conversation restarts under its own account rather than the main one, and starting a conversation no longer reports success when the assistant behind it never came up.
22
+ - An account being set up is no longer reported as a privacy leak. The check counted it while provisioning was still in progress.
23
+
12
24
  ## 2026-08-15 (0.1.608)
13
25
 
14
26
  - You can now steer a public agent while it is mid-conversation with someone, rather than waiting for the exchange to end.
@@ -234,6 +234,50 @@ Two things to know:
234
234
  Text only for now. Photos, files and voice notes are not available on Telegram
235
235
  from the dashboard.
236
236
 
237
+ ### What the agent knows about a message you typed
238
+
239
+ When you type into a public bot's conversation, that agent's own memory is
240
+ updated with what you sent, so its next answer does not contradict you. It knows
241
+ the words came from you and that the visitor has already received them, so it
242
+ sends nothing in reply. The visitor sees one message, yours.
243
+
244
+ This matters because without it the agent carries on from what it believed. On a
245
+ live conversation an operator sent a visitor the real prices by hand, and the
246
+ agent's memory still held a visitor asking for a price it had never given.
247
+
248
+ Four situations record nothing, and each one says which in the log rather than
249
+ failing quietly:
250
+
251
+ - The bot is not a public bot. Your own admin bot and any specialist bot are
252
+ conversations with your own side, so there is no agent knowledge to correct.
253
+ - The agent has been switched off. Nothing is woken behind your back, which is
254
+ the whole point of having switched it off. Your message still goes out.
255
+ - The chat belongs to a connected business account. Those conversations are held
256
+ separately and this route cannot reach them.
257
+ - The conversation has not started yet. There is nothing to keep consistent, and
258
+ an agent started this way would be holding a visitor nobody asked it to answer.
259
+
260
+ To check it is working, look at the log after sending:
261
+
262
+ ```bash
263
+ grep -hE 'op=(sent|context-recorded)|telegram-manual-census|op=text-suppressed' ~/.maxy-code/logs/server.log
264
+ ```
265
+
266
+ A healthy send shows one `op=sent … ok=true`, one `op=context-recorded …
267
+ suppressed=yes reason=-`, and one `op=text-suppressed … reason=operator-sent` for
268
+ that conversation. The standing line
269
+ `[telegram-manual-census] sent=N recorded=N suppressed=N unrecorded=0 skipped=0
270
+ leaked=0 window=60m` should show `recorded` and `suppressed` both equal to `sent`,
271
+ once the four situations above are set aside.
272
+
273
+ - **`unrecorded`** above zero: a send reached no conversation and nothing said
274
+ why.
275
+ - **`leaked`** above zero: a send reached a conversation, and ten minutes later
276
+ nothing had reported holding that turn's reply back. Either the agent never
277
+ woke, or it answered on top of your message and the visitor saw it twice.
278
+ - **`skipped`** above zero is normal. It is one of the four situations above, and
279
+ the `reason=` on that send's own line says which.
280
+
237
281
  ## Building your own Telegram functionality
238
282
 
239
283
  Telegram is a core plugin, so it is on every install and cannot be switched off.