@rubytech/create-realagent-code 0.1.582 → 0.1.583

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 (311) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/routine-templates/dist/index.d.ts +1 -1
  3. package/payload/platform/lib/routine-templates/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/routine-templates/dist/index.js +5 -1
  5. package/payload/platform/lib/routine-templates/dist/index.js.map +1 -1
  6. package/payload/platform/lib/routine-templates/src/index.ts +4 -0
  7. package/payload/platform/lib/telegram-managed-bot/dist/index.d.ts +269 -0
  8. package/payload/platform/lib/telegram-managed-bot/dist/index.d.ts.map +1 -0
  9. package/payload/platform/lib/telegram-managed-bot/dist/index.js +351 -0
  10. package/payload/platform/lib/telegram-managed-bot/dist/index.js.map +1 -0
  11. package/payload/platform/lib/telegram-managed-bot/src/__tests__/managed-bot.test.ts +251 -0
  12. package/payload/platform/lib/telegram-managed-bot/src/index.ts +529 -0
  13. package/payload/platform/lib/telegram-managed-bot/tsconfig.json +9 -0
  14. package/payload/platform/lib/telegram-managed-bot/vitest.config.ts +9 -0
  15. package/payload/platform/lib/telegram-reach/dist/index.d.ts +80 -0
  16. package/payload/platform/lib/telegram-reach/dist/index.d.ts.map +1 -0
  17. package/payload/platform/lib/telegram-reach/dist/index.js +211 -0
  18. package/payload/platform/lib/telegram-reach/dist/index.js.map +1 -0
  19. package/payload/platform/lib/telegram-reach/src/__tests__/telegram-reach.test.ts +216 -0
  20. package/payload/platform/lib/telegram-reach/src/index.ts +262 -0
  21. package/payload/platform/lib/telegram-reach/tsconfig.json +9 -0
  22. package/payload/platform/lib/telegram-reach/vitest.config.ts +9 -0
  23. package/payload/platform/package.json +2 -2
  24. package/payload/platform/plugins/admin/PLUGIN.md +1 -1
  25. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +9 -0
  26. package/payload/platform/plugins/admin/hooks/__tests__/preference-consult-directive.test.sh +26 -0
  27. package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +20 -3
  28. package/payload/platform/plugins/admin/hooks/preference-consult-directive.sh +50 -5
  29. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +142 -8
  30. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +10 -0
  31. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.d.ts +2 -0
  32. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.d.ts.map +1 -0
  33. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.js +100 -0
  34. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.js.map +1 -0
  35. package/payload/platform/plugins/contacts/mcp/dist/index.js +11 -5
  36. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -1
  37. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +5 -0
  38. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -1
  39. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +21 -4
  40. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -1
  41. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +5 -0
  42. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -1
  43. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +29 -1
  44. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -1
  45. package/payload/platform/plugins/contacts/mcp/vitest.config.ts +14 -0
  46. package/payload/platform/plugins/docs/references/admin-ui.md +17 -3
  47. package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +15 -0
  48. package/payload/platform/plugins/docs/references/telegram-guide.md +109 -4
  49. package/payload/platform/plugins/filesystem/PLUGIN.md +2 -2
  50. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.d.ts +2 -0
  51. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.d.ts.map +1 -0
  52. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.js +108 -0
  53. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.js.map +1 -0
  54. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.d.ts +17 -0
  55. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.d.ts.map +1 -0
  56. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.js +162 -0
  57. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.js.map +1 -0
  58. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.d.ts +2 -0
  59. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.d.ts.map +1 -0
  60. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.js +116 -0
  61. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.js.map +1 -0
  62. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.d.ts.map +1 -1
  63. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js +9 -0
  64. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js.map +1 -1
  65. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.d.ts.map +1 -1
  66. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js +10 -0
  67. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js.map +1 -1
  68. package/payload/platform/plugins/scheduling/PLUGIN.md +8 -2
  69. package/payload/platform/plugins/scheduling/mcp/dist/index.js +7 -2
  70. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  71. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js +53 -6
  72. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js.map +1 -1
  73. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js +38 -0
  74. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js.map +1 -1
  75. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts +5 -3
  76. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts.map +1 -1
  77. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js +18 -3
  78. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js.map +1 -1
  79. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts +30 -0
  80. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts.map +1 -1
  81. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js +112 -39
  82. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js.map +1 -1
  83. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +14 -1
  84. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  85. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js +258 -8
  86. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js.map +1 -1
  87. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js +206 -3
  88. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map +1 -1
  89. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +29 -21
  90. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  91. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +94 -14
  92. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  93. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
  94. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +29 -1
  95. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  96. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts +30 -0
  97. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts.map +1 -1
  98. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js +69 -6
  99. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js.map +1 -1
  100. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +12 -0
  101. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts +36 -5
  102. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts.map +1 -1
  103. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js +103 -10
  104. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js.map +1 -1
  105. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  106. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +2 -0
  107. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  108. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  109. package/payload/platform/services/claude-session-manager/dist/http-server.js +42 -4
  110. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  111. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  112. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +19 -5
  113. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  114. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +9 -0
  115. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  116. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +5 -1
  117. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  118. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  119. package/payload/platform/services/telegram-channel/dist/instructions.js +13 -0
  120. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  121. package/payload/platform/services/telegram-channel/dist/notification.d.ts +13 -0
  122. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  123. package/payload/platform/services/telegram-channel/dist/notification.js +13 -2
  124. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  125. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +52 -0
  126. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  127. package/payload/platform/services/whatsapp-channel/dist/notification.js +64 -1
  128. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  129. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  130. package/payload/platform/services/whatsapp-channel/dist/server.js +14 -2
  131. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  132. package/payload/platform/templates/account-schema/SCHEMA.md +17 -10
  133. package/payload/platform/templates/agents/admin/IDENTITY.md +5 -0
  134. package/payload/platform/templates/specialists/agents/data-manager.md +2 -2
  135. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  136. package/payload/server/{chunk-BFRB2U75.js → chunk-CV6AEMKH.js} +1 -0
  137. package/payload/server/{manager-CTVTF4YB.js → manager-FQSQSSJ3.js} +1 -1
  138. package/payload/server/public/activity.html +6 -6
  139. package/payload/server/public/agents.html +5 -5
  140. package/payload/server/public/assets/{AdminLoginScreens-AnJZfgFz.js → AdminLoginScreens-BLsDYWVi.js} +1 -1
  141. package/payload/server/public/assets/AdminLoginScreens-BLsDYWVi.js.br +0 -0
  142. package/payload/server/public/assets/AdminLoginScreens-BLsDYWVi.js.gz +0 -0
  143. package/payload/server/public/assets/{AdminShell-CEVqyQqg.js → AdminShell-BZS8jzFA.js} +1 -1
  144. package/payload/server/public/assets/AdminShell-BZS8jzFA.js.br +0 -0
  145. package/payload/server/public/assets/AdminShell-BZS8jzFA.js.gz +0 -0
  146. package/payload/server/public/assets/{activity-czUaUl8I.js → activity-DOjvoLdd.js} +1 -1
  147. package/payload/server/public/assets/activity-DOjvoLdd.js.br +0 -0
  148. package/payload/server/public/assets/activity-DOjvoLdd.js.gz +0 -0
  149. package/payload/server/public/assets/{admin-B0iRcfuk.js → admin-JrSNg29g.js} +1 -1
  150. package/payload/server/public/assets/admin-JrSNg29g.js.br +0 -0
  151. package/payload/server/public/assets/admin-JrSNg29g.js.gz +0 -0
  152. package/payload/server/public/assets/{agents-BocONCeQ.js → agents--9WMJVLC.js} +1 -1
  153. package/payload/server/public/assets/agents--9WMJVLC.js.br +0 -0
  154. package/payload/server/public/assets/agents--9WMJVLC.js.gz +0 -0
  155. package/payload/server/public/assets/{browser-Cy-rJm3t.js → browser-DiiMmTrM.js} +1 -1
  156. package/payload/server/public/assets/browser-DiiMmTrM.js.br +0 -0
  157. package/payload/server/public/assets/browser-DiiMmTrM.js.gz +0 -0
  158. package/payload/server/public/assets/{calendar-DUTKxWtd.js → calendar-CazmCzgO.js} +1 -1
  159. package/payload/server/public/assets/calendar-CazmCzgO.js.br +0 -0
  160. package/payload/server/public/assets/calendar-CazmCzgO.js.gz +0 -0
  161. package/payload/server/public/assets/chat-CB0TcyXX.js +1 -0
  162. package/payload/server/public/assets/chat-CB0TcyXX.js.br +0 -0
  163. package/payload/server/public/assets/chat-CB0TcyXX.js.gz +0 -0
  164. package/payload/server/public/assets/chevron-left-0tVo23Dh.js +1 -0
  165. package/payload/server/public/assets/chevron-left-0tVo23Dh.js.br +0 -0
  166. package/payload/server/public/assets/clock-D2cZ0sge.js +1 -0
  167. package/payload/server/public/assets/clock-D2cZ0sge.js.br +0 -0
  168. package/payload/server/public/assets/clock-D2cZ0sge.js.gz +0 -0
  169. package/payload/server/public/assets/{copy-DE9qmAs5.js → copy-C87QIN_o.js} +1 -1
  170. package/payload/server/public/assets/copy-C87QIN_o.js.br +0 -0
  171. package/payload/server/public/assets/copy-C87QIN_o.js.gz +0 -0
  172. package/payload/server/public/assets/data-CK7AMxPt.js +1 -0
  173. package/payload/server/public/assets/data-CK7AMxPt.js.br +0 -0
  174. package/payload/server/public/assets/data-CK7AMxPt.js.gz +0 -0
  175. package/payload/server/public/assets/{field-DE2tEfTo.js → field-C3kQgGWE.js} +1 -1
  176. package/payload/server/public/assets/field-C3kQgGWE.js.br +0 -0
  177. package/payload/server/public/assets/field-C3kQgGWE.js.gz +0 -0
  178. package/payload/server/public/assets/{file-text-BHfL2gqo.js → file-text-rWowl9RN.js} +1 -1
  179. package/payload/server/public/assets/file-text-rWowl9RN.js.br +0 -0
  180. package/payload/server/public/assets/file-text-rWowl9RN.js.gz +0 -0
  181. package/payload/server/public/assets/{graph-08S_BofN.js → graph-CVJKz1Uo.js} +1 -1
  182. package/payload/server/public/assets/graph-CVJKz1Uo.js.br +0 -0
  183. package/payload/server/public/assets/graph-CVJKz1Uo.js.gz +0 -0
  184. package/payload/server/public/assets/{graph-labels-C640Er5R.js → graph-labels-kneGnsHB.js} +1 -1
  185. package/payload/server/public/assets/graph-labels-kneGnsHB.js.br +0 -0
  186. package/payload/server/public/assets/graph-labels-kneGnsHB.js.gz +0 -0
  187. package/payload/server/public/assets/{jsx-runtime-FxjwOUbA.css → jsx-runtime-rMaiYjNu.css} +1 -1
  188. package/payload/server/public/assets/jsx-runtime-rMaiYjNu.css.br +0 -0
  189. package/payload/server/public/assets/{jsx-runtime-FxjwOUbA.css.gz → jsx-runtime-rMaiYjNu.css.gz} +0 -0
  190. package/payload/server/public/assets/{operator-DH5Kw3fL.js → operator-BGvB4hu4.js} +1 -1
  191. package/payload/server/public/assets/operator-BGvB4hu4.js.br +0 -0
  192. package/payload/server/public/assets/operator-BGvB4hu4.js.gz +0 -0
  193. package/payload/server/public/assets/{page-BDpa4HWT.js → page-DBQLOasI.js} +1 -1
  194. package/payload/server/public/assets/page-DBQLOasI.js.br +0 -0
  195. package/payload/server/public/assets/page-DBQLOasI.js.gz +0 -0
  196. package/payload/server/public/assets/{page-yn7ivq8O.js → page-DyVAu7tm.js} +1 -1
  197. package/payload/server/public/assets/page-DyVAu7tm.js.br +0 -0
  198. package/payload/server/public/assets/page-DyVAu7tm.js.gz +0 -0
  199. package/payload/server/public/assets/play-DgP7vl0r.js +1 -0
  200. package/payload/server/public/assets/play-DgP7vl0r.js.br +0 -0
  201. package/payload/server/public/assets/play-DgP7vl0r.js.gz +0 -0
  202. package/payload/server/public/assets/{public-D_qjqet7.js → public-BvUQR3hd.js} +1 -1
  203. package/payload/server/public/assets/public-BvUQR3hd.js.br +0 -0
  204. package/payload/server/public/assets/public-BvUQR3hd.js.gz +0 -0
  205. package/payload/server/public/assets/{rotate-ccw-Ixkq1iUA.js → rotate-ccw-Dnn7gbPh.js} +1 -1
  206. package/payload/server/public/assets/rotate-ccw-Dnn7gbPh.js.br +0 -0
  207. package/payload/server/public/assets/rotate-ccw-Dnn7gbPh.js.gz +0 -0
  208. package/payload/server/public/assets/{routines-Cxjlmcp7.js → routines-N8NmxPOZ.js} +1 -1
  209. package/payload/server/public/assets/routines-N8NmxPOZ.js.br +0 -0
  210. package/payload/server/public/assets/routines-N8NmxPOZ.js.gz +0 -0
  211. package/payload/server/public/assets/{skills-DEo9hSVX.js → skills-B2CRgO-U.js} +1 -1
  212. package/payload/server/public/assets/skills-B2CRgO-U.js.br +0 -0
  213. package/payload/server/public/assets/skills-B2CRgO-U.js.gz +0 -0
  214. package/payload/server/public/assets/{tasks-BxApOIXI.js → tasks-8QLGtlSj.js} +1 -1
  215. package/payload/server/public/assets/tasks-8QLGtlSj.js.br +0 -0
  216. package/payload/server/public/assets/tasks-8QLGtlSj.js.gz +0 -0
  217. package/payload/server/public/assets/{triangle-alert-BYzMcXv8.js → triangle-alert-el772yUQ.js} +1 -1
  218. package/payload/server/public/assets/triangle-alert-el772yUQ.js.br +0 -0
  219. package/payload/server/public/assets/triangle-alert-el772yUQ.js.gz +0 -0
  220. package/payload/server/public/assets/{useCopyFeedback-Bk2HVcjy.js → useCopyFeedback-DfNAu8hQ.js} +1 -1
  221. package/payload/server/public/assets/useCopyFeedback-DfNAu8hQ.js.br +0 -0
  222. package/payload/server/public/assets/useCopyFeedback-DfNAu8hQ.js.gz +0 -0
  223. package/payload/server/public/assets/{useMediaQuery-DEti-vAx.js → useMediaQuery-B469O83-.js} +1 -1
  224. package/payload/server/public/assets/useMediaQuery-B469O83-.js.br +0 -0
  225. package/payload/server/public/assets/{useMediaQuery-DEti-vAx.js.gz → useMediaQuery-B469O83-.js.gz} +0 -0
  226. package/payload/server/public/assets/{useVoiceRecorder-kQ92rL-f.js → useVoiceRecorder-Bb-51cJv.js} +1 -1
  227. package/payload/server/public/assets/useVoiceRecorder-Bb-51cJv.js.br +0 -0
  228. package/payload/server/public/assets/useVoiceRecorder-Bb-51cJv.js.gz +0 -0
  229. package/payload/server/public/assets/{wrench-BhLkHffv.js → wrench-Ck4phkdB.js} +1 -1
  230. package/payload/server/public/assets/wrench-Ck4phkdB.js.br +0 -0
  231. package/payload/server/public/assets/wrench-Ck4phkdB.js.gz +0 -0
  232. package/payload/server/public/browser.html +5 -5
  233. package/payload/server/public/calendar.html +8 -8
  234. package/payload/server/public/chat.html +14 -14
  235. package/payload/server/public/data.html +12 -12
  236. package/payload/server/public/field.html +3 -3
  237. package/payload/server/public/graph.html +10 -10
  238. package/payload/server/public/index.html +14 -14
  239. package/payload/server/public/operator.html +16 -16
  240. package/payload/server/public/public.html +14 -14
  241. package/payload/server/public/routines.html +8 -8
  242. package/payload/server/public/skills.html +6 -6
  243. package/payload/server/public/tasks.html +7 -7
  244. package/payload/server/server.js +3020 -1267
  245. package/payload/server/public/assets/AdminLoginScreens-AnJZfgFz.js.br +0 -0
  246. package/payload/server/public/assets/AdminLoginScreens-AnJZfgFz.js.gz +0 -0
  247. package/payload/server/public/assets/AdminShell-CEVqyQqg.js.br +0 -0
  248. package/payload/server/public/assets/AdminShell-CEVqyQqg.js.gz +0 -0
  249. package/payload/server/public/assets/activity-czUaUl8I.js.br +0 -0
  250. package/payload/server/public/assets/activity-czUaUl8I.js.gz +0 -0
  251. package/payload/server/public/assets/admin-B0iRcfuk.js.br +0 -0
  252. package/payload/server/public/assets/admin-B0iRcfuk.js.gz +0 -0
  253. package/payload/server/public/assets/agents-BocONCeQ.js.br +0 -0
  254. package/payload/server/public/assets/agents-BocONCeQ.js.gz +0 -0
  255. package/payload/server/public/assets/browser-Cy-rJm3t.js.br +0 -0
  256. package/payload/server/public/assets/browser-Cy-rJm3t.js.gz +0 -0
  257. package/payload/server/public/assets/calendar-DUTKxWtd.js.br +0 -0
  258. package/payload/server/public/assets/calendar-DUTKxWtd.js.gz +0 -0
  259. package/payload/server/public/assets/chat-Cis7sHsZ.js +0 -1
  260. package/payload/server/public/assets/chat-Cis7sHsZ.js.br +0 -0
  261. package/payload/server/public/assets/chat-Cis7sHsZ.js.gz +0 -0
  262. package/payload/server/public/assets/chevron-left-Bhhx8j2r.js +0 -1
  263. package/payload/server/public/assets/chevron-left-Bhhx8j2r.js.br +0 -0
  264. package/payload/server/public/assets/clock-Ca3nx7Cc.js +0 -1
  265. package/payload/server/public/assets/clock-Ca3nx7Cc.js.br +0 -0
  266. package/payload/server/public/assets/clock-Ca3nx7Cc.js.gz +0 -0
  267. package/payload/server/public/assets/copy-DE9qmAs5.js.br +0 -0
  268. package/payload/server/public/assets/copy-DE9qmAs5.js.gz +0 -0
  269. package/payload/server/public/assets/data-CkaAEeP1.js +0 -1
  270. package/payload/server/public/assets/data-CkaAEeP1.js.br +0 -0
  271. package/payload/server/public/assets/data-CkaAEeP1.js.gz +0 -0
  272. package/payload/server/public/assets/field-DE2tEfTo.js.br +0 -0
  273. package/payload/server/public/assets/field-DE2tEfTo.js.gz +0 -0
  274. package/payload/server/public/assets/file-text-BHfL2gqo.js.br +0 -0
  275. package/payload/server/public/assets/file-text-BHfL2gqo.js.gz +0 -0
  276. package/payload/server/public/assets/graph-08S_BofN.js.br +0 -0
  277. package/payload/server/public/assets/graph-08S_BofN.js.gz +0 -0
  278. package/payload/server/public/assets/graph-labels-C640Er5R.js.br +0 -0
  279. package/payload/server/public/assets/graph-labels-C640Er5R.js.gz +0 -0
  280. package/payload/server/public/assets/jsx-runtime-FxjwOUbA.css.br +0 -0
  281. package/payload/server/public/assets/operator-DH5Kw3fL.js.br +0 -0
  282. package/payload/server/public/assets/operator-DH5Kw3fL.js.gz +0 -0
  283. package/payload/server/public/assets/page-BDpa4HWT.js.br +0 -0
  284. package/payload/server/public/assets/page-BDpa4HWT.js.gz +0 -0
  285. package/payload/server/public/assets/page-yn7ivq8O.js.br +0 -0
  286. package/payload/server/public/assets/page-yn7ivq8O.js.gz +0 -0
  287. package/payload/server/public/assets/play-CMN7ht-S.js +0 -1
  288. package/payload/server/public/assets/play-CMN7ht-S.js.br +0 -0
  289. package/payload/server/public/assets/play-CMN7ht-S.js.gz +0 -0
  290. package/payload/server/public/assets/public-D_qjqet7.js.br +0 -0
  291. package/payload/server/public/assets/public-D_qjqet7.js.gz +0 -0
  292. package/payload/server/public/assets/rotate-ccw-Ixkq1iUA.js.br +0 -0
  293. package/payload/server/public/assets/rotate-ccw-Ixkq1iUA.js.gz +0 -0
  294. package/payload/server/public/assets/routines-Cxjlmcp7.js.br +0 -0
  295. package/payload/server/public/assets/routines-Cxjlmcp7.js.gz +0 -0
  296. package/payload/server/public/assets/skills-DEo9hSVX.js.br +0 -0
  297. package/payload/server/public/assets/skills-DEo9hSVX.js.gz +0 -0
  298. package/payload/server/public/assets/tasks-BxApOIXI.js.br +0 -0
  299. package/payload/server/public/assets/tasks-BxApOIXI.js.gz +0 -0
  300. package/payload/server/public/assets/triangle-alert-BYzMcXv8.js.br +0 -0
  301. package/payload/server/public/assets/triangle-alert-BYzMcXv8.js.gz +0 -0
  302. package/payload/server/public/assets/useCopyFeedback-Bk2HVcjy.js.br +0 -0
  303. package/payload/server/public/assets/useCopyFeedback-Bk2HVcjy.js.gz +0 -0
  304. package/payload/server/public/assets/useMediaQuery-DEti-vAx.js.br +0 -0
  305. package/payload/server/public/assets/useVoiceRecorder-kQ92rL-f.js.br +0 -0
  306. package/payload/server/public/assets/useVoiceRecorder-kQ92rL-f.js.gz +0 -0
  307. package/payload/server/public/assets/wrench-BhLkHffv.js.br +0 -0
  308. package/payload/server/public/assets/wrench-BhLkHffv.js.gz +0 -0
  309. /package/payload/server/public/assets/{jsx-runtime-BL3pljPe.js → jsx-runtime-BmNepPEn.js} +0 -0
  310. /package/payload/server/public/assets/{jsx-runtime-BL3pljPe.js.br → jsx-runtime-BmNepPEn.js.br} +0 -0
  311. /package/payload/server/public/assets/{jsx-runtime-BL3pljPe.js.gz → jsx-runtime-BmNepPEn.js.gz} +0 -0
@@ -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:87f4881ba67eadbd909f8786045ba0230381273d125d591ab998ad2b47d26b0c
4
+ content-hash: sha256:8994bfc27989b0255dd286327b6a7bb0127110ed1285b7c6daff4ddf264e2609
5
5
  brand: realagent-code
6
6
  product-name: Real Agent
7
7
  ---
@@ -2042,6 +2042,21 @@ for that door alone.
2042
2042
  census prints every cycle, including when the counts agree: an absent line means
2043
2043
  the census stopped, never that delivery is healthy.
2044
2044
 
2045
+ ## Which channels can start a conversation
2046
+
2047
+ Answering an inbound and starting a new conversation are different powers, and
2048
+ only the first is available on every door.
2049
+
2050
+ | Channel | Can start a conversation with | Cannot |
2051
+ |---|---|---|
2052
+ | WhatsApp | a registered admin phone, a registered account manager, or a registered party, through `whatsapp-send-admin` | any other number. The cold-send tools were removed after one such send tripped WhatsApp's anti-automation enforcement and restricted the account, and no setting re-enables them. |
2053
+ | Telegram | any chat that has already messaged the bot | a chat that has not. Telegram itself refuses it. |
2054
+ | Email | any address, once a mailbox is attached | nothing, once a mailbox is attached |
2055
+ | Admin webchat | nobody. It is a browser chat the operator opens | anything outbound |
2056
+
2057
+ The admin identity carries the same rule under its `## Channel reality` section,
2058
+ so an agent that has loaded no plugin skill still knows it. The two must agree.
2059
+
2045
2060
  ## Which door an answer reaches
2046
2061
 
2047
2062
  The door the message arrived on, and no other. A question asked on WhatsApp is
@@ -2816,6 +2831,24 @@ The Telegram plugin connects Real Agent to a Telegram bot. Once set up, you can:
2816
2831
 
2817
2832
  ## Setup
2818
2833
 
2834
+ ### Adding a second bot: no BotFather at all
2835
+
2836
+ Once you have one working admin bot, you never need BotFather again to add another. Tell
2837
+ Real Agent: "create a new Telegram bot." It sends you a single button. Tap it, give the bot a
2838
+ name, and Telegram hands the bot straight to Real Agent — it stores the credentials, locks the
2839
+ bot so only you can reach it, and connects it. No token is shown to anyone and nothing is copied or
2840
+ pasted.
2841
+
2842
+ One thing has to be switched on first, once per managing bot: open @BotFather, go to its Mini App,
2843
+ select your admin bot and turn on management of other bots. Real Agent checks this before
2844
+ sending the button and tells you if it is missing, so you never end up with a button that does
2845
+ nothing.
2846
+
2847
+ A bot made this way arrives switched off: it answers nobody until you tell Real Agent which
2848
+ assistant should run on it.
2849
+
2850
+ Your **first** bot still comes from BotFather, below, and so does any bot you already own.
2851
+
2819
2852
  ### Step 1: Create a Telegram bot
2820
2853
 
2821
2854
  1. Open Telegram and search for `@BotFather`
@@ -2827,11 +2860,59 @@ The Telegram plugin connects Real Agent to a Telegram bot. Once set up, you can:
2827
2860
 
2828
2861
  Tell Real Agent: "Set up Telegram" or "Configure the Telegram bot." Setup runs entirely in the admin chat — there is no settings page.
2829
2862
 
2830
- Real Agent asks for your bot token, then asks whether this is an **admin bot** (only your numeric Telegram IDs may message it) or a **public bot** (customer-facing, with a DM policy). It verifies the token, registers the bot's webhook on your brand's edge, stores the token under your brand's config (never in a shared system directory), and — for a public bot — sets the agent that will answer. The bot is now connected.
2863
+ Real Agent asks for your bot token, then asks what kind of bot this is:
2864
+
2865
+ - an **admin bot** — only your numeric Telegram IDs may message it, and it answers as your admin agent;
2866
+ - a **public bot** — customer-facing, with a DM policy, answering as one of your account's agents;
2867
+ - a **specialist bot** — bound to one of your own specialists, so messaging it runs that specialist with its own instructions and its own tools rather than your admin agent. You name the specialist and the numeric IDs allowed to reach it. Both are required: there is no open setting for this kind, because the specialist has real tools rather than the reply-only surface a public bot gets.
2868
+
2869
+ It verifies the token, registers the bot's webhook on your brand's edge, stores the token under your brand's config (never in a shared system directory), and sets whichever agent or specialist will answer. The bot is now connected.
2831
2870
 
2832
2871
  ### Step 3: Start the bot
2833
2872
 
2834
- In Telegram, open your bot and send `/start`, then a message. Real Agent receives it and replies in the same chat. Admin-bot messages from your registered IDs reach the admin agent; public-bot messages reach the public agent you selected.
2873
+ In Telegram, open your bot and send `/start`, then a message. Real Agent receives it and replies in the same chat. Admin-bot messages from your registered IDs reach the admin agent; public-bot messages reach the public agent you selected; specialist-bot messages reach that specialist, in a conversation that stays the same one from one day to the next.
2874
+
2875
+ ### Step 4 (optional): Use the bot in a group
2876
+
2877
+ Only a **public** bot can work in a group. An admin bot added to a group answers nobody, on purpose: it runs your own agent, with your own standing rules and tools, and a group is a room other people read.
2878
+
2879
+ Three things have to be true:
2880
+
2881
+ 1. **Group privacy is on.** In BotFather: `/mybots`, pick the bot, Bot Settings, Group Privacy, Turn on. With privacy on the bot sees only messages that name it — a command, an @mention, or a reply to something it said. It cannot read the rest of the conversation. Real Agent refuses to connect a bot with privacy off and tells you this step.
2882
+ 2. **The bot is in the group.** A group admin adds it, the same way any member is added.
2883
+ 3. **You allowlist the group.** Tell Real Agent: "Let the bot answer in this group," and give it the group's chat ID (see Getting a Chat ID below). Until you do, the bot stays silent there.
2884
+
2885
+ Once a group is allowlisted, **anyone in that group can talk to the bot** — not only the people on your DM allowlist. Allowlisting a room is a decision about the room, not about its members.
2886
+
2887
+ Everyone in the group shares one conversation, and each message tells Real Agent who sent it. If the group uses topics, an answer comes back inside the topic the question was asked in.
2888
+
2889
+ ### Step 5 (optional): Use the bot in a channel
2890
+
2891
+ A channel is a broadcast: a post goes to every subscriber, and it cannot be taken back. So this one
2892
+ is worth reading twice before you set it up.
2893
+
2894
+ Only a **public** bot can work in a channel, for the same reason only a public bot can work in a
2895
+ group.
2896
+
2897
+ Two things have to be true:
2898
+
2899
+ 1. **The bot is a channel admin with permission to post.** A channel admin adds it and ticks "Post
2900
+ Messages". Without that tick the bot can still read the channel but every attempt to post fails
2901
+ quietly.
2902
+ 2. **You allowlist the channel.** Tell Real Agent: "Let the bot use this channel," and give it
2903
+ the channel's chat ID. Until you do, the bot neither reads that channel nor posts to it.
2904
+
2905
+ Unlike a group, allowlisting a channel decides **both directions at once**. Once a channel is on the
2906
+ list, Real Agent can post to it. A channel that is not on the list is refused before anything
2907
+ is sent, and you are told which channel and why.
2908
+
2909
+ Posts in a channel have no author — Telegram does not say who wrote one — so Real Agent sees
2910
+ the post as coming from the channel itself, by name.
2911
+
2912
+ **Comments.** If your channel has a linked discussion group, people can comment under each post.
2913
+ Allowlist that group too (Step 4) and Real Agent can read the comments and answer them under
2914
+ the right post. Somebody who comments anonymously shows up as the group rather than as a person,
2915
+ because that is all Telegram sends.
2835
2916
 
2836
2917
  ## Sending Messages via Real Agent
2837
2918
 
@@ -2843,13 +2924,28 @@ Once connected, tell Real Agent to send messages on your behalf:
2843
2924
 
2844
2925
  Real Agent needs a chat ID or username to target a specific person or group. For groups, you'll need to add the bot to the group first.
2845
2926
 
2927
+ ## Who your bot can message
2928
+
2929
+ Telegram does not let a bot start a conversation. Anyone who has messaged one of your bots can be
2930
+ messaged back at any time; anyone who never has must write to the bot first. That is Telegram's own
2931
+ rule and nothing here can get around it.
2932
+
2933
+ Ask Real Agent: "Who can you reach on Telegram?" It lists every bot you have registered, the
2934
+ people who have messaged each one and when they last wrote, and anyone on a bot's admin list who has
2935
+ never messaged. Being on the admin list is not the same as having opened the chat, so those people
2936
+ are listed separately as not reachable yet.
2937
+
2938
+ If Real Agent ever says a Telegram message cannot be sent, ask it to check that list first.
2939
+
2846
2940
  ## Getting a Chat ID
2847
2941
 
2848
2942
  To message a specific person or group, Real Agent needs their chat ID. The easiest way:
2849
2943
 
2850
2944
  1. Have the person (or yourself) send any message to your bot
2851
- 2. Ask Real Agent: "What chat IDs have messaged the bot recently?"
2852
- 3. Real Agent will look up the message history and show you the IDs
2945
+ 2. Ask Real Agent: "Who can you reach on Telegram?"
2946
+ 3. Real Agent will show you every chat that has messaged, with its ID
2947
+
2948
+ A group's ID is a long negative number, like `-1001234567890`. To find it, @mention the bot once in the group and then ask Real Agent the same question — the group will be in the list even though the bot is not yet allowed to answer there.
2853
2949
 
2854
2950
  ## Message History
2855
2951
 
@@ -2861,6 +2957,10 @@ Ask Real Agent: "What messages has the bot received?" or "Show recent Telegram a
2861
2957
 
2862
2958
  **Can't send to a group:** The bot must be a member of the group. Add it via the group settings in Telegram, then try again.
2863
2959
 
2960
+ **"That channel isn't on the allowlist":** Real Agent refuses to post to a channel or group you haven't allowlisted, and it refuses before anything is sent. Give it the chat ID and say you want the bot to use it. This applies to public bots only — an admin bot cannot post to any channel or group at all.
2961
+
2962
+ **The bot reads a channel but can't post to it:** It is a channel admin without the "Post Messages" permission. Turn that on in the channel's admin settings.
2963
+
2864
2964
  **Messages not arriving:** Make sure the bot hasn't been blocked. Try sending `/start` to the bot directly.
2865
2965
 
2866
2966
  ## Sending from the dashboard
@@ -2942,6 +3042,26 @@ One limit, and it is Telegram's. A message sent on behalf of a business account
2942
3042
  that opens a small web page, so a checklist and a job-sheet button arrive as two messages rather than
2943
3043
  one.
2944
3044
 
3045
+ ## Your customers' messages
3046
+
3047
+ Connecting the bot to your business account does more than unlock checklists. From that moment,
3048
+ messages your customers send to the business account reach Real Agent too, and it can answer
3049
+ them in the customer's own chat.
3050
+
3051
+ Those conversations are kept entirely separate from your own. A customer talking to your business
3052
+ account never lands in the chat you use with Real Agent, even if it is somebody who also
3053
+ messages you directly, and Real Agent answers a customer as your public assistant rather than as
3054
+ your personal one. Your own notes and standing instructions are never visible in a customer's
3055
+ conversation.
3056
+
3057
+ When a customer edits a message, the message you are looking at changes to match. When they delete
3058
+ one, it stays in view but crossed out and marked deleted, so you can still see what was withdrawn.
3059
+
3060
+ **The one thing worth knowing: Telegram gives you 24 hours.** You may reply to a customer only within
3061
+ 24 hours of their last message. After that Telegram closes the door and there is no way to reopen it
3062
+ except for the customer to write again. Real Agent will refuse a late reply and tell you the
3063
+ window has closed, rather than letting it fail silently.
3064
+
2945
3065
  Five of the 185 are deliberately refused, because they would break your own
2946
3066
  inbound messages: setting or deleting the webhook by hand, polling Telegram for
2947
3067
  updates instead, and the two that move the bot off Telegram's cloud servers.
@@ -4679,17 +4799,31 @@ another account's directory, for every session including a house-scoped one, and
4679
4799
  the Bash snapshot pair watches the account's own layout. All of them live in the
4680
4800
  account's `.claude/settings.json`, and a hook that is not registered there runs
4681
4801
  never and emits nothing, so the silence reads identical to a clean account. The
4682
- same pass therefore checks the five registrations per account and reports any
4802
+ same pass therefore checks the six registrations per account and reports any
4683
4803
  absence as
4684
4804
  `[fs-reconcile] op=hook-registration account=<id8> missing=<matcher>:<hook>,…`,
4685
4805
  with `hooks-missing=0 hooks-unaudited=0` on the summary line as the per-cycle
4686
4806
  proof the fence is wired everywhere. An account whose settings cannot be read
4687
4807
  counts as unaudited rather than clean, so an install where none of them can be
4688
- read never reports itself as fenced. The refusal itself is agent-facing and lands
4689
- in the session's own child log as
4808
+ read never reports itself as fenced. The sixth row is the per-turn filing
4809
+ directive, whose template entry carries no matcher at all, so that row is
4810
+ reported by its event as `UserPromptSubmit:preference-consult-directive.sh`. The
4811
+ refusal itself is agent-facing and lands in the session's own child log as
4690
4812
  `[fs-guard] blocked path=<abs> reason=cross-account target=<id8>`, not in
4691
4813
  `server.log`.
4692
4814
 
4815
+ The same pass also emits
4816
+ `[fs-reconcile] op=entity-subdirs account=<id8> entities=<n> archive=<m> stray=<s>`
4817
+ for every account on every cycle, not only on drift: `archive/` is the one folder
4818
+ permitted under an entity folder, a write that wrongly succeeds emits nothing,
4819
+ and `stray` above zero is the only signature an over-wide rule leaves.
4820
+ `entities` is on the same line because `stray=0` cannot otherwise be told from a
4821
+ walker that read nothing. The `file-write` and `file-edit` tools carry the same
4822
+ five-reason fence as the native route; their refusals log the same
4823
+ `[fs-guard] blocked` line into `mcp-filesystem-<sessionId>.log`, the plugin
4824
+ server's own tee sink, because `lib/mcp-spawn-tee` mirrors only its
4825
+ `[mcp-helper]` lifecycle lines into `server.log`.
4826
+
4693
4827
  ### Graph
4694
4828
 
4695
4829
  | Mount | Purpose |
@@ -9,6 +9,16 @@ 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-09 (0.1.583)
13
+
14
+ - A connected Telegram Business account can now be answered. Its customer chats were being received and dropped, so the bot could not see or reply to a single one of them.
15
+ - A Telegram bot can work in a group, be set up without going through BotFather, and be tied to a particular specialist. Previously a bot named as a personal assistant still booted the main admin persona, so handing work to a specialist was a request rather than a route — and adding the admin bot to a group would have put the admin persona in a room other people read.
16
+ - The assistant no longer refuses things it can actually do, or offers things it cannot. It recommended sending on WhatsApp, which no tool can start, while refusing a Telegram message that one call would have sent because the chat was invisible to it. Both now match what the channels really support.
17
+ - A standing instruction about where work gets filed now reaches every conversation, not only those arriving over a channel.
18
+ - A Telegram channel works in both directions. A channel post was dropped by a check that insisted on a human sender, and no comment on it could be attributed or answered.
19
+ - When Telegram would do the job better than WhatsApp, the assistant now says so, rather than leaving the weaker channel as the default by saying nothing.
20
+ - Three checks that could not fail have been fixed: one asked the database a question that could only ever answer yes and then discarded the answer; one accepted a prompt that forbade the very thing it was meant to require, because it only looked for the words anywhere in the text; and the mail position marker was case-sensitive on the folder name, so renaming a folder's capitalisation silently restarted it from the beginning.
21
+
12
22
  ## 2026-08-09 (0.1.582)
13
23
 
14
24
  - Telegram now understands the full range of what arrives, not a quarter of it. Only four of the twenty-six kinds of update were handled, so a reply reached the assistant without the message it was replying to, a reaction never arrived at all, and a Stars payment could not complete.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=telegram-user-id.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-user-id.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/telegram-user-id.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ const runs = [];
3
+ let records = [];
4
+ vi.mock("../lib/neo4j.js", () => ({
5
+ getSession: () => ({
6
+ run: async (query, params) => {
7
+ runs.push({ query, params });
8
+ return {
9
+ records: records.map((r) => ({ get: (k) => r[k] })),
10
+ };
11
+ },
12
+ close: async () => { },
13
+ }),
14
+ closeDriver: async () => { },
15
+ }));
16
+ const { contactCreate } = await import("../tools/contact-create.js");
17
+ const { contactLookup } = await import("../tools/contact-lookup.js");
18
+ const KIT = 8860040117;
19
+ let errors;
20
+ beforeEach(() => {
21
+ runs.length = 0;
22
+ records = [];
23
+ errors = [];
24
+ vi.spyOn(console, "error").mockImplementation((...a) => {
25
+ errors.push(a.join(" "));
26
+ });
27
+ });
28
+ afterEach(() => {
29
+ vi.restoreAllMocks();
30
+ });
31
+ // Both assertions ride ONE call, on the dedup-hit path. That is deliberate: a
32
+ // dedup MISS runs on into computeEmbedding (a real fetch to Ollama) and
33
+ // writeNodeWithEdges, neither of which this test has any business exercising.
34
+ // The dedup query is the first thing contactCreate runs, so a hit proves both
35
+ // that the condition was built and that the match short-circuits the write.
36
+ describe("contact-create dedupes on telegramUserId", () => {
37
+ it("builds the dedup condition and returns the existing person", async () => {
38
+ records = [{ nodeId: "4:x:9", email: null, telephone: null, telegramUserId: KIT }];
39
+ const out = await contactCreate({
40
+ givenName: "Kit",
41
+ telegramUserId: KIT,
42
+ source: "telegram",
43
+ relationships: [{ type: "KNOWN_VIA", direction: "outgoing", targetNodeId: "4:x:1" }],
44
+ accountId: "acct",
45
+ createdBy: { tool: "contact-create" },
46
+ });
47
+ expect(runs).toHaveLength(1);
48
+ expect(runs[0].query).toContain("p.telegramUserId = $telegramUserId");
49
+ expect(runs[0].params.telegramUserId).toBe(KIT);
50
+ expect(out.alreadyExists).toBe(true);
51
+ expect(out.nodeId).toBe("4:x:9");
52
+ expect(out.identifier).toBe(String(KIT));
53
+ });
54
+ });
55
+ describe("contact-lookup finds by telegramUserId", () => {
56
+ it("matches on the property and logs a hit", async () => {
57
+ records = [
58
+ {
59
+ p: {
60
+ properties: {
61
+ givenName: "Kit",
62
+ source: "telegram",
63
+ status: "active",
64
+ createdOn: "x",
65
+ telegramUserId: KIT,
66
+ },
67
+ },
68
+ nodeId: "4:x:9",
69
+ prefs: [],
70
+ },
71
+ ];
72
+ const out = await contactLookup({ telegramUserId: KIT, accountId: "acct" });
73
+ expect(runs[0].query).toContain("p.telegramUserId = $telegramUserId");
74
+ expect(out).toHaveLength(1);
75
+ expect(out[0].telegramUserId).toBe(KIT);
76
+ expect(errors).toContain("[contacts] op=lookup key=telegramUserId hit=true");
77
+ });
78
+ it("logs a miss when nothing matches", async () => {
79
+ records = [];
80
+ await contactLookup({ telegramUserId: KIT, accountId: "acct" });
81
+ expect(errors).toContain("[contacts] op=lookup key=telegramUserId hit=false");
82
+ });
83
+ it("logs nothing about telegramUserId on a lookup that does not carry it", async () => {
84
+ records = [];
85
+ await contactLookup({ email: "a@b.c", accountId: "acct" });
86
+ expect(errors.join("\n")).not.toContain("key=telegramUserId");
87
+ });
88
+ // Email wins the branch race, so the query never touches telegramUserId. A
89
+ // hit logged here would report the id path as working on the day it broke,
90
+ // which is precisely what this line exists to detect.
91
+ it("logs nothing when the id was supplied but a higher-priority key took the branch", async () => {
92
+ records = [
93
+ { p: { properties: { givenName: "Kit", source: "x", status: "y", createdOn: "z" } }, nodeId: "4:x:9", prefs: [] },
94
+ ];
95
+ await contactLookup({ email: "a@b.c", telegramUserId: KIT, accountId: "acct" });
96
+ expect(runs[0].query).toContain("p.email = $email");
97
+ expect(errors.join("\n")).not.toContain("key=telegramUserId");
98
+ });
99
+ });
100
+ //# sourceMappingURL=telegram-user-id.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-user-id.test.js","sourceRoot":"","sources":["../../src/__tests__/telegram-user-id.test.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,16 @@ const sessionId = process.env.SESSION_ID;
38
38
  // Task 476 — boot signal so a stale spawn-env contract is visible at the
39
39
  // first byte of stderr.
40
40
  process.stderr.write(`[contacts] boot accountId=${accountId ?? "-"} sessionId=${sessionId || "-"} agentSlug=${agentSlug || "-"}\n`);
41
- eagerTool(server, "contact-create", "Create a new contact (schema:Person) in the graph. Any single identifying property — name, email, or telephone — suffices; the agent judges what to capture and dedup/conflicts are managed downstream. When email or telephone is supplied, contact-create deduplicates against existing live persons and returns the match instead of writing a duplicate. The new contact must link to at least one existing node (typically a Conversation or Organization) — pass elementIds found via memory-search.", {
41
+ eagerTool(server, "contact-create", "Create a new contact (schema:Person) in the graph. Any single identifying property — name, email, telephone, or Telegram user id — suffices; the agent judges what to capture and dedup/conflicts are managed downstream. When email, telephone or telegramUserId is supplied, contact-create deduplicates against existing live persons and returns the match instead of writing a duplicate. Supply telegramUserId for anyone reached on Telegram, so they can be found by it later. The new contact must link to at least one existing node (typically a Conversation or Organization) — pass elementIds found via memory-search.", {
42
42
  givenName: z.string().optional().describe("First name (optional — supply whichever identifying fields you have)"),
43
43
  familyName: z.string().optional().describe("Last name"),
44
44
  email: z.string().email().optional().describe("Email address — when present, used as the dedup key"),
45
45
  telephone: z.string().min(1).max(30).optional().describe("Phone number — when present, used as the dedup key"),
46
+ telegramUserId: z
47
+ .number()
48
+ .int()
49
+ .optional()
50
+ .describe("Numeric Telegram user id — when present, used as the dedup key. This is the only stable identifier a Telegram chat gives you; telegram-reach reports it for everyone who has messaged one of this account's bots."),
46
51
  jobTitle: z.string().optional().describe("Job title"),
47
52
  source: z
48
53
  .string()
@@ -103,16 +108,17 @@ eagerTool(server, "contact-create", "Create a new contact (schema:Person) in the
103
108
  };
104
109
  }
105
110
  });
106
- eagerTool(server, "contact-lookup", "Search for contacts by email, telephone, name, or list recent contacts. Returns each schema:Person node's open-by-default properties and any preferences attached to it, so a caller can honour contact-level routing (an always-CC or an alternate address) before drafting.", {
111
+ eagerTool(server, "contact-lookup", "Search for contacts by email, telephone, Telegram user id, name, or list recent contacts. Returns each schema:Person node's open-by-default properties and any preferences attached to it, so a caller can honour contact-level routing (an always-CC or an alternate address) before drafting.", {
107
112
  email: z.string().optional().describe("Exact email match"),
108
113
  telephone: z.string().optional().describe("Exact phone number match"),
114
+ telegramUserId: z.number().int().optional().describe("Exact numeric Telegram user id match — use this to put a name to a chat id that telegram-reach reported"),
109
115
  name: z.string().optional().describe("Partial or full name search, matched against the composed givenName + familyName display name"),
110
116
  limit: z.number().int().optional().describe("Max results (default 10)"),
111
- }, async ({ email, telephone, name, limit }) => {
117
+ }, async ({ email, telephone, telegramUserId, name, limit }) => {
112
118
  if (!accountId)
113
119
  return refuseNoAccount("contact-lookup");
114
120
  try {
115
- const results = await contactLookup({ email, telephone, name, accountId, limit });
121
+ const results = await contactLookup({ email, telephone, telegramUserId, name, accountId, limit });
116
122
  if (results.length === 0) {
117
123
  return {
118
124
  content: [
@@ -143,7 +149,7 @@ eagerTool(server, "contact-update", "Update properties of an existing contact. I
143
149
  nodeId: z.string().optional().describe("Find contact by node ID"),
144
150
  updates: z
145
151
  .record(z.string(), z.unknown())
146
- .describe("Properties to update (e.g. status, telephone, jobTitle)"),
152
+ .describe("Properties to update (e.g. status, telephone, jobTitle, telegramUserId — the numeric Telegram user id, which is what makes the contact findable by contact-lookup from a chat id)"),
147
153
  }, async ({ email, telephone, nodeId, updates }) => {
148
154
  if (!accountId)
149
155
  return refuseNoAccount("contact-update");
@@ -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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"}
@@ -4,6 +4,11 @@ interface ContactCreateParams {
4
4
  familyName?: string;
5
5
  email?: string;
6
6
  telephone?: string;
7
+ /** Task 2625 — the person's numeric Telegram user id, a dedup key alongside
8
+ * email and telephone. On Telegram it is the ONLY stable identifier a chat
9
+ * hands you, so a contact created from a Telegram conversation previously had
10
+ * nothing it could later be found by. */
11
+ telegramUserId?: number;
7
12
  jobTitle?: string;
8
13
  source: string;
9
14
  status?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contact-create.d.ts","sourceRoot":"","sources":["../../src/tools/contact-create.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,8CAA8C,CAAC;AAqBtD,UAAU,mBAAmB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CA6H9B"}
1
+ {"version":3,"file":"contact-create.d.ts","sourceRoot":"","sources":["../../src/tools/contact-create.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,8CAA8C,CAAC;AAqBtD,UAAU,mBAAmB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;8CAG0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAiJ9B"}
@@ -21,7 +21,7 @@ async function computeEmbedding(text) {
21
21
  }
22
22
  }
23
23
  export async function contactCreate(params) {
24
- const { givenName, familyName, email, telephone, jobTitle, source, status = "prospect", accountId, relationships, createdBy, } = params;
24
+ const { givenName, familyName, email, telephone, telegramUserId, jobTitle, source, status = "prospect", accountId, relationships, createdBy, } = params;
25
25
  const normalizedEmail = email?.toLowerCase().trim();
26
26
  const normalizedPhone = telephone?.trim();
27
27
  const session = getSession();
@@ -40,6 +40,10 @@ export async function contactCreate(params) {
40
40
  dedupConditions.push("p.telephone = $telephone");
41
41
  dedupParams.telephone = normalizedPhone;
42
42
  }
43
+ if (telegramUserId !== undefined) {
44
+ dedupConditions.push("p.telegramUserId = $telegramUserId");
45
+ dedupParams.telegramUserId = telegramUserId;
46
+ }
43
47
  if (dedupConditions.length > 0) {
44
48
  // Trashed persons already have null email/telephone
45
49
  // (UNIQUE_KEYS_BY_LABEL snapshot), so OR-matching by those keys would
@@ -47,11 +51,19 @@ export async function contactCreate(params) {
47
51
  // legacy deletedAt soft-delete state.
48
52
  const existing = await session.run(`MATCH (p:Person {accountId: $accountId})
49
53
  WHERE (${dedupConditions.join(" OR ")}) AND ${notTrashed("p")}
50
- RETURN elementId(p) AS nodeId, p.email AS email, p.telephone AS telephone`, dedupParams);
54
+ RETURN elementId(p) AS nodeId, p.email AS email, p.telephone AS telephone,
55
+ p.telegramUserId AS telegramUserId`, dedupParams);
51
56
  if (existing.records.length > 0) {
52
57
  const matchedEmail = existing.records[0].get("email");
53
58
  const matchedPhone = existing.records[0].get("telephone");
54
- const matchedIdentifier = matchedEmail ?? matchedPhone ?? "unknown";
59
+ // A telegram-only match has neither of the other two, and reporting it
60
+ // as "unknown" would tell the caller nothing about who it just found.
61
+ const matchedTelegram = existing.records[0].get("telegramUserId");
62
+ const matchedIdentifier = matchedEmail ??
63
+ matchedPhone ??
64
+ (matchedTelegram === null || matchedTelegram === undefined
65
+ ? "unknown"
66
+ : String(matchedTelegram));
55
67
  return {
56
68
  nodeId: existing.records[0].get("nodeId"),
57
69
  identifier: matchedIdentifier,
@@ -72,6 +84,8 @@ export async function contactCreate(params) {
72
84
  props.email = normalizedEmail;
73
85
  if (normalizedPhone)
74
86
  props.telephone = normalizedPhone;
87
+ if (telegramUserId !== undefined)
88
+ props.telegramUserId = telegramUserId;
75
89
  if (familyName)
76
90
  props.familyName = familyName;
77
91
  if (jobTitle)
@@ -108,7 +122,10 @@ export async function contactCreate(params) {
108
122
  createdBy,
109
123
  });
110
124
  const nameIdentifier = [givenName, familyName].filter(Boolean).join(" ");
111
- const primaryIdentifier = normalizedEmail ?? normalizedPhone ?? (nameIdentifier || "unknown");
125
+ const primaryIdentifier = normalizedEmail ??
126
+ normalizedPhone ??
127
+ (telegramUserId === undefined ? undefined : String(telegramUserId)) ??
128
+ (nameIdentifier || "unknown");
112
129
  return {
113
130
  nodeId: result.nodeId,
114
131
  identifier: primaryIdentifier,
@@ -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":"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"}
@@ -1,6 +1,10 @@
1
1
  interface ContactLookupParams {
2
2
  email?: string;
3
3
  telephone?: string;
4
+ /** Task 2625 — the person's numeric Telegram user id. Tried after email and
5
+ * telephone and before name, matching the identifier priority everywhere else
6
+ * in this plugin: an exact key beats a substring search. */
7
+ telegramUserId?: number;
4
8
  name?: string;
5
9
  accountId?: string;
6
10
  limit?: number;
@@ -19,6 +23,7 @@ export interface ContactRecord {
19
23
  familyName?: string;
20
24
  email?: string;
21
25
  telephone?: string;
26
+ telegramUserId?: number;
22
27
  jobTitle?: string;
23
28
  source: string;
24
29
  status: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contact-lookup.d.ts","sourceRoot":"","sources":["../../src/tools/contact-lookup.ts"],"names":[],"mappings":"AAIA,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,aAAa,EAAE,CAAC,CAwF1B;AAUD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CA0BrE"}
1
+ {"version":3,"file":"contact-lookup.d.ts","sourceRoot":"","sources":["../../src/tools/contact-lookup.ts"],"names":[],"mappings":"AAIA,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;iEAE6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,aAAa,EAAE,CAAC,CAoH1B;AAUD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CA0BrE"}