@rubytech/create-sitedesk-code 0.1.532 → 0.1.533

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 (187) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +10 -7
  3. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
  4. package/payload/platform/plugins/docs/references/calendar-booking.md +9 -6
  5. package/payload/platform/plugins/whatsapp/PLUGIN.md +4 -2
  6. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +34 -5
  7. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  8. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +9 -1
  9. package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +10 -0
  10. package/payload/server/{chunk-UH6GCQO4.js → chunk-AJC3SQSF.js} +79 -12
  11. package/payload/server/{manager-H34562SN.js → manager-PLRHVALC.js} +1 -1
  12. package/payload/server/public/activity.html +5 -5
  13. package/payload/server/public/agents.html +4 -4
  14. package/payload/server/public/assets/{AdminLoginScreens-7Czw3MAC.js → AdminLoginScreens-CGRty7xT.js} +1 -1
  15. package/payload/server/public/assets/AdminLoginScreens-CGRty7xT.js.br +0 -0
  16. package/payload/server/public/assets/AdminLoginScreens-CGRty7xT.js.gz +0 -0
  17. package/payload/server/public/assets/{AdminShell-D5GApZ_n.js → AdminShell-BQy9Ob22.js} +1 -1
  18. package/payload/server/public/assets/AdminShell-BQy9Ob22.js.br +0 -0
  19. package/payload/server/public/assets/AdminShell-BQy9Ob22.js.gz +0 -0
  20. package/payload/server/public/assets/{CdpScreencastSurface-BbekDUFw.js → CdpScreencastSurface-BrDZji8F.js} +1 -1
  21. package/payload/server/public/assets/CdpScreencastSurface-BrDZji8F.js.br +0 -0
  22. package/payload/server/public/assets/CdpScreencastSurface-BrDZji8F.js.gz +0 -0
  23. package/payload/server/public/assets/{activity-ClI-RgJu.js → activity-0IcMRF5a.js} +1 -1
  24. package/payload/server/public/assets/activity-0IcMRF5a.js.br +0 -0
  25. package/payload/server/public/assets/activity-0IcMRF5a.js.gz +0 -0
  26. package/payload/server/public/assets/{admin-svtCmBPk.js → admin-CKy-bmrs.js} +1 -1
  27. package/payload/server/public/assets/admin-CKy-bmrs.js.br +0 -0
  28. package/payload/server/public/assets/admin-CKy-bmrs.js.gz +0 -0
  29. package/payload/server/public/assets/{agents-BO8YBj8d.js → agents-xjw-fJjo.js} +1 -1
  30. package/payload/server/public/assets/agents-xjw-fJjo.js.br +0 -0
  31. package/payload/server/public/assets/agents-xjw-fJjo.js.gz +0 -0
  32. package/payload/server/public/assets/{browser-Bj8oTG5R.js → browser-ByWKTnUQ.js} +1 -1
  33. package/payload/server/public/assets/browser-ByWKTnUQ.js.br +0 -0
  34. package/payload/server/public/assets/browser-ByWKTnUQ.js.gz +0 -0
  35. package/payload/server/public/assets/calendar-DX2tE1B2.js +1 -0
  36. package/payload/server/public/assets/calendar-DX2tE1B2.js.br +0 -0
  37. package/payload/server/public/assets/calendar-DX2tE1B2.js.gz +0 -0
  38. package/payload/server/public/assets/chat-DkNDthRg.js +1 -0
  39. package/payload/server/public/assets/chat-DkNDthRg.js.br +0 -0
  40. package/payload/server/public/assets/chat-DkNDthRg.js.gz +0 -0
  41. package/payload/server/public/assets/chevron-left-CPwk14nY.js +1 -0
  42. package/payload/server/public/assets/chevron-right-Bz6INVTF.js +1 -0
  43. package/payload/server/public/assets/chevron-right-Bz6INVTF.js.br +0 -0
  44. package/payload/server/public/assets/clock-3YLNejcB.js +1 -0
  45. package/payload/server/public/assets/clock-3YLNejcB.js.br +0 -0
  46. package/payload/server/public/assets/clock-3YLNejcB.js.gz +0 -0
  47. package/payload/server/public/assets/data-DiDeaOUN.js +1 -0
  48. package/payload/server/public/assets/data-DiDeaOUN.js.br +0 -0
  49. package/payload/server/public/assets/data-DiDeaOUN.js.gz +0 -0
  50. package/payload/server/public/assets/{file-download-Di_s0_4w.js → file-download-ChX5qAB2.js} +1 -1
  51. package/payload/server/public/assets/file-download-ChX5qAB2.js.br +0 -0
  52. package/payload/server/public/assets/file-download-ChX5qAB2.js.gz +0 -0
  53. package/payload/server/public/assets/{file-text-CP1KIrJV.js → file-text-DziWy8hF.js} +1 -1
  54. package/payload/server/public/assets/file-text-DziWy8hF.js.br +0 -0
  55. package/payload/server/public/assets/file-text-DziWy8hF.js.gz +0 -0
  56. package/payload/server/public/assets/{graph-BCMscnCV.js → graph-Ci8RmSp3.js} +1 -1
  57. package/payload/server/public/assets/graph-Ci8RmSp3.js.br +0 -0
  58. package/payload/server/public/assets/{graph-BCMscnCV.js.gz → graph-Ci8RmSp3.js.gz} +0 -0
  59. package/payload/server/public/assets/{graph-labels-CgP17xHK.js → graph-labels-JkRVzaVL.js} +1 -1
  60. package/payload/server/public/assets/graph-labels-JkRVzaVL.js.br +0 -0
  61. package/payload/server/public/assets/graph-labels-JkRVzaVL.js.gz +0 -0
  62. package/payload/server/public/assets/{maximize-2-DkQzDv-g.js → maximize-2-DnINkTp0.js} +1 -1
  63. package/payload/server/public/assets/maximize-2-DnINkTp0.js.br +0 -0
  64. package/payload/server/public/assets/maximize-2-DnINkTp0.js.gz +0 -0
  65. package/payload/server/public/assets/{operator-CLbCar9e.js → operator-CFOJBXCH.js} +1 -1
  66. package/payload/server/public/assets/operator-CFOJBXCH.js.br +0 -0
  67. package/payload/server/public/assets/operator-CFOJBXCH.js.gz +0 -0
  68. package/payload/server/public/assets/{page-CPVUAwb8.js → page-BGv8bLm5.js} +1 -1
  69. package/payload/server/public/assets/page-BGv8bLm5.js.br +0 -0
  70. package/payload/server/public/assets/page-BGv8bLm5.js.gz +0 -0
  71. package/payload/server/public/assets/{page-CNJl3tWT.js → page-DXTCBZRa.js} +1 -1
  72. package/payload/server/public/assets/page-DXTCBZRa.js.br +0 -0
  73. package/payload/server/public/assets/page-DXTCBZRa.js.gz +0 -0
  74. package/payload/server/public/assets/{public-DQea3Ybz.js → public-yBY2wTJN.js} +1 -1
  75. package/payload/server/public/assets/public-yBY2wTJN.js.br +0 -0
  76. package/payload/server/public/assets/public-yBY2wTJN.js.gz +0 -0
  77. package/payload/server/public/assets/{rotate-ccw-DPw0vXC0.js → rotate-ccw-CfaIgRAI.js} +1 -1
  78. package/payload/server/public/assets/rotate-ccw-CfaIgRAI.js.br +0 -0
  79. package/payload/server/public/assets/rotate-ccw-CfaIgRAI.js.gz +0 -0
  80. package/payload/server/public/assets/{routines-CwiiYpfK.js → routines-BIlcD8sn.js} +1 -1
  81. package/payload/server/public/assets/routines-BIlcD8sn.js.br +0 -0
  82. package/payload/server/public/assets/routines-BIlcD8sn.js.gz +0 -0
  83. package/payload/server/public/assets/{skills-0FOjKUM-.js → skills-DGID2WqF.js} +1 -1
  84. package/payload/server/public/assets/skills-DGID2WqF.js.br +0 -0
  85. package/payload/server/public/assets/skills-DGID2WqF.js.gz +0 -0
  86. package/payload/server/public/assets/{tasks-BUVsPEGm.js → tasks-BukjwR7A.js} +1 -1
  87. package/payload/server/public/assets/tasks-BukjwR7A.js.br +0 -0
  88. package/payload/server/public/assets/tasks-BukjwR7A.js.gz +0 -0
  89. package/payload/server/public/assets/{time-entry-format-B6fX_19a.js → time-entry-format-DNl35lg9.js} +1 -1
  90. package/payload/server/public/assets/time-entry-format-DNl35lg9.js.br +0 -0
  91. package/payload/server/public/assets/time-entry-format-DNl35lg9.js.gz +0 -0
  92. package/payload/server/public/assets/{triangle-alert-vAaSDhVq.js → triangle-alert-DI_VASJO.js} +1 -1
  93. package/payload/server/public/assets/triangle-alert-DI_VASJO.js.br +0 -0
  94. package/payload/server/public/assets/triangle-alert-DI_VASJO.js.gz +0 -0
  95. package/payload/server/public/assets/{useCopyFeedback-BvIRgs7W.js → useCopyFeedback-Bu0ZQZQM.js} +1 -1
  96. package/payload/server/public/assets/useCopyFeedback-Bu0ZQZQM.js.br +0 -0
  97. package/payload/server/public/assets/useCopyFeedback-Bu0ZQZQM.js.gz +0 -0
  98. package/payload/server/public/assets/{useSubAccountSwitcher-DM5Y9eio.css → useSubAccountSwitcher-CZBZ3iV8.css} +1 -1
  99. package/payload/server/public/assets/useSubAccountSwitcher-CZBZ3iV8.css.br +0 -0
  100. package/payload/server/public/assets/{useSubAccountSwitcher-DM5Y9eio.css.gz → useSubAccountSwitcher-CZBZ3iV8.css.gz} +0 -0
  101. package/payload/server/public/assets/{useVoiceRecorder-CiDOh8PG.js → useVoiceRecorder-CbVwXEjY.js} +1 -1
  102. package/payload/server/public/assets/useVoiceRecorder-CbVwXEjY.js.br +0 -0
  103. package/payload/server/public/assets/useVoiceRecorder-CbVwXEjY.js.gz +0 -0
  104. package/payload/server/public/assets/{wrench-BNBtwT2p.js → wrench-p4gW_ImW.js} +1 -1
  105. package/payload/server/public/assets/wrench-p4gW_ImW.js.br +0 -0
  106. package/payload/server/public/assets/wrench-p4gW_ImW.js.gz +0 -0
  107. package/payload/server/public/browser.html +5 -5
  108. package/payload/server/public/calendar.html +7 -7
  109. package/payload/server/public/chat.html +13 -13
  110. package/payload/server/public/data.html +12 -12
  111. package/payload/server/public/graph.html +9 -9
  112. package/payload/server/public/index.html +16 -16
  113. package/payload/server/public/operator.html +15 -15
  114. package/payload/server/public/public.html +13 -13
  115. package/payload/server/public/routines.html +7 -7
  116. package/payload/server/public/skills.html +5 -5
  117. package/payload/server/public/tasks.html +6 -6
  118. package/payload/server/server.js +1180 -871
  119. package/payload/server/public/assets/AdminLoginScreens-7Czw3MAC.js.br +0 -0
  120. package/payload/server/public/assets/AdminLoginScreens-7Czw3MAC.js.gz +0 -0
  121. package/payload/server/public/assets/AdminShell-D5GApZ_n.js.br +0 -0
  122. package/payload/server/public/assets/AdminShell-D5GApZ_n.js.gz +0 -0
  123. package/payload/server/public/assets/CdpScreencastSurface-BbekDUFw.js.br +0 -0
  124. package/payload/server/public/assets/CdpScreencastSurface-BbekDUFw.js.gz +0 -0
  125. package/payload/server/public/assets/activity-ClI-RgJu.js.br +0 -0
  126. package/payload/server/public/assets/activity-ClI-RgJu.js.gz +0 -0
  127. package/payload/server/public/assets/admin-svtCmBPk.js.br +0 -0
  128. package/payload/server/public/assets/admin-svtCmBPk.js.gz +0 -0
  129. package/payload/server/public/assets/agents-BO8YBj8d.js.br +0 -0
  130. package/payload/server/public/assets/agents-BO8YBj8d.js.gz +0 -0
  131. package/payload/server/public/assets/browser-Bj8oTG5R.js.br +0 -0
  132. package/payload/server/public/assets/browser-Bj8oTG5R.js.gz +0 -0
  133. package/payload/server/public/assets/calendar-CrkSY8U7.js +0 -1
  134. package/payload/server/public/assets/calendar-CrkSY8U7.js.br +0 -0
  135. package/payload/server/public/assets/calendar-CrkSY8U7.js.gz +0 -0
  136. package/payload/server/public/assets/chat-Bvxoni2e.js +0 -1
  137. package/payload/server/public/assets/chat-Bvxoni2e.js.br +0 -0
  138. package/payload/server/public/assets/chat-Bvxoni2e.js.gz +0 -0
  139. package/payload/server/public/assets/chevron-left-CdUzxzeB.js +0 -1
  140. package/payload/server/public/assets/chevron-left-CdUzxzeB.js.br +0 -0
  141. package/payload/server/public/assets/chevron-right-CKGwd-M0.js +0 -1
  142. package/payload/server/public/assets/chevron-right-CKGwd-M0.js.br +0 -0
  143. package/payload/server/public/assets/clock-Cf8Oe9qi.js +0 -1
  144. package/payload/server/public/assets/clock-Cf8Oe9qi.js.br +0 -0
  145. package/payload/server/public/assets/clock-Cf8Oe9qi.js.gz +0 -0
  146. package/payload/server/public/assets/data-DF0Pstdp.js +0 -1
  147. package/payload/server/public/assets/data-DF0Pstdp.js.br +0 -1
  148. package/payload/server/public/assets/data-DF0Pstdp.js.gz +0 -0
  149. package/payload/server/public/assets/file-download-Di_s0_4w.js.br +0 -0
  150. package/payload/server/public/assets/file-download-Di_s0_4w.js.gz +0 -0
  151. package/payload/server/public/assets/file-text-CP1KIrJV.js.br +0 -1
  152. package/payload/server/public/assets/file-text-CP1KIrJV.js.gz +0 -0
  153. package/payload/server/public/assets/graph-BCMscnCV.js.br +0 -0
  154. package/payload/server/public/assets/graph-labels-CgP17xHK.js.br +0 -0
  155. package/payload/server/public/assets/graph-labels-CgP17xHK.js.gz +0 -0
  156. package/payload/server/public/assets/maximize-2-DkQzDv-g.js.br +0 -0
  157. package/payload/server/public/assets/maximize-2-DkQzDv-g.js.gz +0 -0
  158. package/payload/server/public/assets/operator-CLbCar9e.js.br +0 -0
  159. package/payload/server/public/assets/operator-CLbCar9e.js.gz +0 -0
  160. package/payload/server/public/assets/page-CNJl3tWT.js.br +0 -0
  161. package/payload/server/public/assets/page-CNJl3tWT.js.gz +0 -0
  162. package/payload/server/public/assets/page-CPVUAwb8.js.br +0 -0
  163. package/payload/server/public/assets/page-CPVUAwb8.js.gz +0 -0
  164. package/payload/server/public/assets/public-DQea3Ybz.js.br +0 -0
  165. package/payload/server/public/assets/public-DQea3Ybz.js.gz +0 -0
  166. package/payload/server/public/assets/rotate-ccw-DPw0vXC0.js.br +0 -0
  167. package/payload/server/public/assets/rotate-ccw-DPw0vXC0.js.gz +0 -0
  168. package/payload/server/public/assets/routines-CwiiYpfK.js.br +0 -0
  169. package/payload/server/public/assets/routines-CwiiYpfK.js.gz +0 -0
  170. package/payload/server/public/assets/skills-0FOjKUM-.js.br +0 -0
  171. package/payload/server/public/assets/skills-0FOjKUM-.js.gz +0 -0
  172. package/payload/server/public/assets/tasks-BUVsPEGm.js.br +0 -0
  173. package/payload/server/public/assets/tasks-BUVsPEGm.js.gz +0 -0
  174. package/payload/server/public/assets/time-entry-format-B6fX_19a.js.br +0 -0
  175. package/payload/server/public/assets/time-entry-format-B6fX_19a.js.gz +0 -0
  176. package/payload/server/public/assets/triangle-alert-vAaSDhVq.js.br +0 -0
  177. package/payload/server/public/assets/triangle-alert-vAaSDhVq.js.gz +0 -0
  178. package/payload/server/public/assets/useCopyFeedback-BvIRgs7W.js.br +0 -0
  179. package/payload/server/public/assets/useCopyFeedback-BvIRgs7W.js.gz +0 -0
  180. package/payload/server/public/assets/useSubAccountSwitcher-DM5Y9eio.css.br +0 -0
  181. package/payload/server/public/assets/useVoiceRecorder-CiDOh8PG.js.br +0 -0
  182. package/payload/server/public/assets/useVoiceRecorder-CiDOh8PG.js.gz +0 -0
  183. package/payload/server/public/assets/wrench-BNBtwT2p.js.br +0 -0
  184. package/payload/server/public/assets/wrench-BNBtwT2p.js.gz +0 -0
  185. /package/payload/server/public/assets/{useSubAccountSwitcher-BEwQMRMo.js → useSubAccountSwitcher-B6Ns2Z43.js} +0 -0
  186. /package/payload/server/public/assets/{useSubAccountSwitcher-BEwQMRMo.js.br → useSubAccountSwitcher-B6Ns2Z43.js.br} +0 -0
  187. /package/payload/server/public/assets/{useSubAccountSwitcher-BEwQMRMo.js.gz → useSubAccountSwitcher-B6Ns2Z43.js.gz} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-sitedesk-code",
3
- "version": "0.1.532",
3
+ "version": "0.1.533",
4
4
  "description": "Install SiteDesk — automated back office for independent building contractors",
5
5
  "bin": {
6
6
  "create-sitedesk-code": "./dist/index.js"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what SiteDesk 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:10987c045e406cec5ecac35344dbae665a350a08b55ef996d2691be4bff0605f
4
+ content-hash: sha256:f91190d8f389cf2175b5cad4d336863a69ae213bcd574ff730d3beb4078ab138
5
5
  brand: sitedesk-code
6
6
  product-name: SiteDesk
7
7
  ---
@@ -2763,15 +2763,18 @@ SiteDesk gives you a calendar of your schedule and a public page where people ca
2763
2763
 
2764
2764
  ## The admin calendar
2765
2765
 
2766
- Open `/calendar` on your SiteDesk address (the same sign-in as the dashboard). It shows your schedule in four views:
2766
+ Open `/calendar` on your SiteDesk address (the same sign-in as the dashboard). It shows your schedule in five views:
2767
2767
 
2768
- - **Day** and **Week** show an hour grid with each timed entry as a block.
2769
- - **Month** shows the familiar month grid with a few entries per day.
2770
- - **Year** shows twelve small months; days with something on them carry a dot, and clicking a month opens it.
2768
+ - **Schedule** is a plain list of what is coming up, thirty days at a time, grouped by day. Every entry shows its time, title, place, who is attending, and what kind of entry it is, all on the row. Days with nothing on them are left out. This is the view the calendar opens on.
2769
+ - **Day** and **Week** show an hour grid with each timed entry as a block. The block always shows the title; it adds the time underneath when the entry is long enough for a second line to fit (about three quarters of an hour in Week, a little over half an hour in Day). The title comes first because the block's position in the grid already tells you when it is.
2770
+ - **Month** shows the familiar month grid with up to three entries per day. Each chip gives its whole width to the title. When a day holds more, **+2 more** is a button that opens that day.
2771
+ - **Year** shows twelve small months. A day with something on it carries the number of entries, and clicking a month opens it.
2771
2772
 
2772
- Use **Today** and the arrows to move around, and the view buttons to switch. The calendar reads everything time-bound in your graph: meetings imported from a calendar export or created by a booking, appointments SiteDesk schedules for you in chat, and tasks that have a due date (shown on their day).
2773
+ Use **Today** and the arrows to move around, and the view buttons to switch. In Schedule the arrows move a whole thirty days, so you can step back into the past as well as forward. The calendar reads everything time-bound in your graph: meetings imported from a calendar export or created by a booking, appointments SiteDesk schedules for you in chat, and tasks that have a due date (shown on their day).
2773
2774
 
2774
- Click any entry to open its details: the full title, time, location, and who is attending, with each attendee on its own line (name, and email beneath it). For a booked meeting you can also edit its title, time, or location, or delete it, and the grid updates straight away. You can **Download** a booked meeting as a calendar file (`.ics`) to add it to Apple, Google, or Outlook calendars; when the meeting has attendees, Download asks whether to include them in the file before it saves, and a meeting with no attendees downloads straight away. The private note is never written into the downloaded file, since the file can travel outside your admin. In the edit view you can add an attendee (give a name, an email, or both) and remove one; adding someone who is already a contact reuses that contact rather than making a duplicate, and removing them takes them off the meeting but keeps the contact. The edit view also has a private note for that meeting, a place for your own reminders that only you and your team ever see; it never appears on the public booking page or anywhere outside your admin. Appointments SiteDesk schedules and due-dated tasks are shown for detail only and are changed where they are created, not here. New meetings are still made by a booking or by asking SiteDesk in chat, not from the calendar.
2775
+ Hover over any entry in Day, Week or Month, or reach it with the Tab key, and a small card shows what the row itself has no room for: the full title, the start and end time, the place, who is attending, and the kind of entry. You do not have to open anything to see this. On the Year view the same card appears, but on hover only, not by keyboard. Schedule needs no card, since its rows already carry all of it.
2776
+
2777
+ Click any entry to open its details, where you can also edit it: the full title, time, location, and who is attending, with each attendee on its own line (name, and email beneath it). For a booked meeting you can also edit its title, time, or location, or delete it, and the grid updates straight away. You can **Download** a booked meeting as a calendar file (`.ics`) to add it to Apple, Google, or Outlook calendars; when the meeting has attendees, Download asks whether to include them in the file before it saves, and a meeting with no attendees downloads straight away. The private note is never written into the downloaded file, since the file can travel outside your admin. In the edit view you can add an attendee (give a name, an email, or both) and remove one; adding someone who is already a contact reuses that contact rather than making a duplicate, and removing them takes them off the meeting but keeps the contact. The edit view also has a private note for that meeting, a place for your own reminders that only you and your team ever see; it never appears on the public booking page or anywhere outside your admin. Appointments SiteDesk schedules and due-dated tasks are shown for detail only and are changed where they are created, not here. New meetings are still made by a booking or by asking SiteDesk in chat, not from the calendar.
2775
2778
 
2776
2779
  Everything on the calendar comes from records the rest of SiteDesk already uses, scoped to your account.
2777
2780
 
@@ -9,6 +9,13 @@ 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-07-31 (0.1.533)
13
+
14
+ - WhatsApp sending now goes out on the account's own connection, and settings changes apply to the account making them rather than always the main one. Each outbound line names the account it went out on.
15
+ - Each account can now hold its own WhatsApp reply policy, with the main account's used only where an account has not set one. Every incoming message records which of the two decided it.
16
+ - A scheduled message is now refused if the event's account does not match where it would be sent, with standing checks for a seat set up under the wrong account.
17
+ - The calendar now shows enough on each entry to recognise it, with a new Schedule view, titles first in the month grid, and a hover card.
18
+
12
19
  ## 2026-07-31 (0.1.532)
13
20
 
14
21
  - One phone number can now be both a house admin and an account manager. Which account an incoming message belongs to is decided by the number it was sent to, not by which list the sender happens to be on.
@@ -4,15 +4,18 @@ SiteDesk gives you a calendar of your schedule and a public page where people ca
4
4
 
5
5
  ## The admin calendar
6
6
 
7
- Open `/calendar` on your SiteDesk address (the same sign-in as the dashboard). It shows your schedule in four views:
7
+ Open `/calendar` on your SiteDesk address (the same sign-in as the dashboard). It shows your schedule in five views:
8
8
 
9
- - **Day** and **Week** show an hour grid with each timed entry as a block.
10
- - **Month** shows the familiar month grid with a few entries per day.
11
- - **Year** shows twelve small months; days with something on them carry a dot, and clicking a month opens it.
9
+ - **Schedule** is a plain list of what is coming up, thirty days at a time, grouped by day. Every entry shows its time, title, place, who is attending, and what kind of entry it is, all on the row. Days with nothing on them are left out. This is the view the calendar opens on.
10
+ - **Day** and **Week** show an hour grid with each timed entry as a block. The block always shows the title; it adds the time underneath when the entry is long enough for a second line to fit (about three quarters of an hour in Week, a little over half an hour in Day). The title comes first because the block's position in the grid already tells you when it is.
11
+ - **Month** shows the familiar month grid with up to three entries per day. Each chip gives its whole width to the title. When a day holds more, **+2 more** is a button that opens that day.
12
+ - **Year** shows twelve small months. A day with something on it carries the number of entries, and clicking a month opens it.
12
13
 
13
- Use **Today** and the arrows to move around, and the view buttons to switch. The calendar reads everything time-bound in your graph: meetings imported from a calendar export or created by a booking, appointments SiteDesk schedules for you in chat, and tasks that have a due date (shown on their day).
14
+ Use **Today** and the arrows to move around, and the view buttons to switch. In Schedule the arrows move a whole thirty days, so you can step back into the past as well as forward. The calendar reads everything time-bound in your graph: meetings imported from a calendar export or created by a booking, appointments SiteDesk schedules for you in chat, and tasks that have a due date (shown on their day).
14
15
 
15
- Click any entry to open its details: the full title, time, location, and who is attending, with each attendee on its own line (name, and email beneath it). For a booked meeting you can also edit its title, time, or location, or delete it, and the grid updates straight away. You can **Download** a booked meeting as a calendar file (`.ics`) to add it to Apple, Google, or Outlook calendars; when the meeting has attendees, Download asks whether to include them in the file before it saves, and a meeting with no attendees downloads straight away. The private note is never written into the downloaded file, since the file can travel outside your admin. In the edit view you can add an attendee (give a name, an email, or both) and remove one; adding someone who is already a contact reuses that contact rather than making a duplicate, and removing them takes them off the meeting but keeps the contact. The edit view also has a private note for that meeting, a place for your own reminders that only you and your team ever see; it never appears on the public booking page or anywhere outside your admin. Appointments SiteDesk schedules and due-dated tasks are shown for detail only and are changed where they are created, not here. New meetings are still made by a booking or by asking SiteDesk in chat, not from the calendar.
16
+ Hover over any entry in Day, Week or Month, or reach it with the Tab key, and a small card shows what the row itself has no room for: the full title, the start and end time, the place, who is attending, and the kind of entry. You do not have to open anything to see this. On the Year view the same card appears, but on hover only, not by keyboard. Schedule needs no card, since its rows already carry all of it.
17
+
18
+ Click any entry to open its details, where you can also edit it: the full title, time, location, and who is attending, with each attendee on its own line (name, and email beneath it). For a booked meeting you can also edit its title, time, or location, or delete it, and the grid updates straight away. You can **Download** a booked meeting as a calendar file (`.ics`) to add it to Apple, Google, or Outlook calendars; when the meeting has attendees, Download asks whether to include them in the file before it saves, and a meeting with no attendees downloads straight away. The private note is never written into the downloaded file, since the file can travel outside your admin. In the edit view you can add an attendee (give a name, an email, or both) and remove one; adding someone who is already a contact reuses that contact rather than making a duplicate, and removing them takes them off the meeting but keeps the contact. The edit view also has a private note for that meeting, a place for your own reminders that only you and your team ever see; it never appears on the public booking page or anywhere outside your admin. Appointments SiteDesk schedules and due-dated tasks are shown for detail only and are changed where they are created, not here. New meetings are still made by a booking or by asking SiteDesk in chat, not from the calendar.
16
19
 
17
20
  Everything on the calendar comes from records the rest of SiteDesk already uses, scoped to your account.
18
21
 
@@ -106,7 +106,7 @@ A native admin channel session runs a per-sender `whatsapp-channel` MCP server (
106
106
 
107
107
  ## Agent-initiated admin send
108
108
 
109
- `whatsapp-send-admin` is the one outbound path that does **not** require a bound inbound conversation, so a webchat session or a scheduled run can push a text summary over WhatsApp. It is hard-gated to the cold-send-ban carve-out: the destination must already be a **registered recipient** — on the house `whatsapp.adminPhones` list (managed via `whatsapp-config add-admin-phone`) **or** a registered account manager in `whatsapp.accountManagers` (managed via `whatsapp-config add-account-manager`). Both lists are read from the socket-owning house account (`resolveAccount`), and the send always rides the house's paired socket. A destination in neither list is refused with `[whatsapp:outbound] op=send-refused reason=not-admin-phone` and no send is attempted — never a cold first contact. An **account-manager** phone (in `accountManagers`, which may overlap `adminPhones` — a phone can hold both roles, and the number it messaged decides its inbound scope) **is** a valid `send-admin` destination regardless of its binding mode: the operator registered it, so it is not a cold stranger. `passive` governs the manager's **inbound** behaviour only (no auto-reply, intake-only) and never gates this outbound send. A successful send logs its admit basis (`op=send-admin-ok via=admin-phone|account-manager`). Delivery reuses `sendTextMessage`, so the sent id is tracked for echo suppression and the send is recorded as outbound activity. Text only; for files use the bound `reply-document` surface.
109
+ `whatsapp-send-admin` is the one outbound path that does **not** require a bound inbound conversation, so a webchat session or a scheduled run can push a text summary over WhatsApp. It is hard-gated to the cold-send-ban carve-out: the destination must already be a **registered recipient** — on the house `whatsapp.adminPhones` list (managed via `whatsapp-config add-admin-phone`) **or** a registered account manager in `whatsapp.accountManagers` (managed via `whatsapp-config add-account-manager`). Both lists are read from the socket-owning house account (`resolveAccount`), and the send rides the **calling session's own** paired socket: a sub-account session transmits on its own line, an unsigned caller falls back to the house line, and a session whose account has no socket gets a 503 naming the key miss rather than a silent fall-back to the house. A destination in neither list is refused with `[whatsapp:outbound] op=send-refused reason=not-admin-phone` and no send is attempted — never a cold first contact. An **account-manager** phone (in `accountManagers`, which may overlap `adminPhones` — a phone can hold both roles, and the number it messaged decides its inbound scope) **is** a valid `send-admin` destination regardless of its binding mode: the operator registered it, so it is not a cold stranger. `passive` governs the manager's **inbound** behaviour only (no auto-reply, intake-only) and never gates this outbound send. A successful send logs its admit basis and both accounts (`op=send-admin-ok via=admin-phone|account-manager callerAccount=… socketAccount=…`), and every `[whatsapp:outbound]` line carries `account=`. A send that carries no caller identity falls back to the house socket, emits `op=outbound-caller-unsigned` at WARN and increments `outboundSocketReconcile.unsignedFallbacks` on `GET /api/whatsapp/status`, because a send on the wrong line is otherwise a successful write with no event. The two accounts on the success line are for a human to read and are deliberately not compared: they are different namespaces, since the house connection's key is the credential dirname while the caller is a platform UUID. Delivery reuses `sendTextMessage`, so the sent id is tracked for echo suppression and the send is recorded as outbound activity. Text only; for files use the bound `reply-document` surface.
110
110
 
111
111
  ## Self-chat command lane
112
112
 
@@ -128,7 +128,9 @@ Every `messages.upsert` event (both `notify` and `append`, both `fromMe` directi
128
128
 
129
129
  **Sub-account recall.** Recall is account-scoped as a read-time projection: a sub-account session sees only the house-store threads whose counterparty is one of its bound account-manager phones (the same filter the operator dashboard uses, shared via `counterpartyBoundToSubAccount`). The write path and the store key are unchanged — messages stay house-keyed; "sub-account scope" is a projection, not a move. `whatsapp-conversation-graph-state` defaults its `accountId` to the calling session's own `ACCOUNT_ID`, so a sub-account recalls its own history with no argument while the house admin may still pass any account id explicitly. Body search is not restored by this projection (it has been absent since the on-disk store cutover).
130
130
 
131
- **Caller-scope enforcement.** The three read tools `whatsapp-conversation-graph-state`, `whatsapp-conversations`, `whatsapp-messages` forward the caller's own account (`ACCOUNT_ID`) and its house-admin scope (`HOUSE_ADMIN_SCOPE`) to the route as headers, distinct from the caller-controlled `accountId` argument. The route enforces caller-scope: a house admin reads any account; any other session (a sub-account, or a specialist under any account) may read only its own account and gets a 403 if it passes a different `accountId`. This closes the override where a sub-account could pass an explicit house or sibling id and read that store. It defends only the loopback route against the agent-controlled argument; the route still trusts localhost, so forging these headers on a direct loopback call remains possible closing that is a separate, tracked follow-up.
131
+ **Config action authority.** The three account-manager actions (`add-account-manager`, `remove-account-manager`, `list-account-managers`) are per-account **bindings** and scope to the caller: any session may bind a phone to its **own** account, `list` returns only that account's bindings, and naming another account is refused 403 with `reason: "binding-account-scope-mismatch"`. Removing a phone that holds no binding is refused for the same reason, because there is no binding value to prove the phone is yours. A house admin is unrestricted and unfiltered on all three. Every other action on this route is install-wide and stays house-only. The bindings are written to the house `account.json` regardless of who wrote them, because that is the file the inbound gate reads and `purgeNonSocketAccountManagersAtBoot` deletes a map written anywhere else.
132
+
133
+ **Caller-scope enforcement.** The three read tools — `whatsapp-conversation-graph-state`, `whatsapp-conversations`, `whatsapp-messages` — and `whatsapp-send-admin` forward the caller's own account (`ACCOUNT_ID`) and its house-admin scope (`HOUSE_ADMIN_SCOPE`) to the route as headers, distinct from the caller-controlled `accountId` argument. The route enforces caller-scope: a house admin reads any account; any other session (a sub-account, or a specialist under any account) may read only its own account and gets a 403 if it passes a different `accountId`. This closes the override where a sub-account could pass an explicit house or sibling id and read that store. It defends only the loopback route against the agent-controlled argument; the route still trusts localhost, so forging these headers on a direct loopback call remains possible — closing that is a separate, tracked follow-up.
132
134
 
133
135
  ## Skills
134
136
 
@@ -178,6 +178,8 @@ lifelineTool(server, "whatsapp-config", [
178
178
  " - update-config (change any WhatsApp config field — pass `fields` as a JSON string of field/value pairs)",
179
179
  " - get-config (return the full current WhatsApp config object)",
180
180
  " - set-dispatch-inbound (turn a paired socket into an OBSERVE socket or back; requires `accountId` and boolean `dispatchInbound`. false = the account's WhatsApp is read-only: messages are stored and readable but never dispatched to an agent. Scoped to your own account.)",
181
+ " - set-account-policy (set THIS account's own inbound policy: pass `policy` with any of `dmPolicy` ('open'|'allowlist'|'disabled'), `adminPhones`, `allowFrom`. Pass every field you want in ONE call — dmPolicy 'open' requires allowFrom to contain '*', checked on the whole object. Scoped to your own account; a house admin may name another. The HOUSE is refused: its three fields are the top-level config, set with update-config.)",
182
+ " - get-account-policy (read this account's three effective inbound policy values and, for each, whether it is the account's own or inherited from the house)",
181
183
  " - schema (return all config field definitions — names, types, defaults, descriptions, constraints)",
182
184
  " - list-groups (return WhatsApp groups the account belongs to — names, JIDs, participant counts)",
183
185
  "Groups are observation-only — the agent never responds in a group, so there is no per-group config. list-groups still lists them for reference.",
@@ -198,6 +200,8 @@ lifelineTool(server, "whatsapp-config", [
198
200
  "update-config",
199
201
  "get-config",
200
202
  "set-dispatch-inbound",
203
+ "set-account-policy",
204
+ "get-account-policy",
201
205
  "schema",
202
206
  "list-groups",
203
207
  ]).describe("The config action to perform"),
@@ -206,9 +210,14 @@ lifelineTool(server, "whatsapp-config", [
206
210
  mode: z.enum(["active", "passive"]).optional().describe("Account-manager mode for add-account-manager (default 'active'). 'active' = a full admin session that can reply and manage the sub-account. 'passive' = a constrained requirement-intake agent: it interprets each message, files exactly one task scoped to the sub-account, and never replies."),
207
211
  slug: z.string().optional().describe("Agent slug (required for set-public-agent)"),
208
212
  fields: z.string().optional().describe('JSON string of config fields to update (required for update-config, e.g. \'{"dmPolicy":"open","allowFrom":["*"]}\')'),
209
- accountId: z.string().optional().describe('Account ID. Defaults to the calling session’s own account; the house admin may pass another account id explicitly. Used by list-groups and set-dispatch-inbound.'),
213
+ accountId: z.string().optional().describe('Account ID. Defaults to the calling session’s own account; the house admin may pass another account id explicitly. Used by list-groups, set-dispatch-inbound, set-account-policy and get-account-policy.'),
210
214
  dispatchInbound: z.boolean().optional().describe("For set-dispatch-inbound: false makes the account an observe socket (stored + readable, never dispatched); true restores agent dispatch."),
211
- }, async ({ action, phone, managesAccount, mode, slug, fields, accountId, dispatchInbound }) => {
215
+ policy: z.object({
216
+ dmPolicy: z.enum(["open", "allowlist", "disabled"]).optional(),
217
+ adminPhones: z.array(z.string()).optional(),
218
+ allowFrom: z.array(z.string()).optional(),
219
+ }).optional().describe("For set-account-policy: the fields to set on this account's own inbound policy. At least one required. dmPolicy 'open' requires allowFrom to contain '*' in the same call."),
220
+ }, async ({ action, phone, managesAccount, mode, slug, fields, accountId, dispatchInbound, policy }) => {
212
221
  try {
213
222
  // Parse fields JSON string for update-config
214
223
  let parsedFields;
@@ -220,9 +229,25 @@ lifelineTool(server, "whatsapp-config", [
220
229
  return textResult('Invalid JSON in "fields" parameter. Expected a JSON object, e.g. {"dmPolicy":"open","allowFrom":["*"]}', true);
221
230
  }
222
231
  }
223
- const result = await callApi("whatsapp-config", "/api/whatsapp/config", "POST", { action, phone, managesAccount, mode, slug, fields: parsedFields, accountId, dispatchInbound }, callerScopeHeaders(process.env));
232
+ const result = await callApi("whatsapp-config", "/api/whatsapp/config", "POST", { action, phone, managesAccount, mode, slug, fields: parsedFields, accountId, dispatchInbound, policy }, callerScopeHeaders(process.env));
224
233
  if (!result.ok)
225
234
  return textResult(result.error ?? "Config operation failed.", true);
235
+ // Task 2235 — an inherited value and a chosen one read identically, so the
236
+ // source is rendered beside every value rather than left to the operator.
237
+ if (action === "get-account-policy") {
238
+ const p = result.policy ?? {};
239
+ const s = result.sources ?? {};
240
+ const lines = [
241
+ `Inbound policy for account ${result.key}:`,
242
+ ` dmPolicy: ${p.dmPolicy} (${s.dmPolicy === "account" ? "this account's own" : "inherited from the house"})`,
243
+ ` adminPhones: ${(p.adminPhones ?? []).length === 0 ? "(none)" : (p.adminPhones ?? []).join(", ")} (${s.adminPhones === "account" ? "this account's own" : "inherited from the house"})`,
244
+ ` allowFrom: ${(p.allowFrom ?? []).length === 0 ? "(none)" : (p.allowFrom ?? []).join(", ")} (${s.allowFrom === "account" ? "this account's own" : "inherited from the house"})`,
245
+ ];
246
+ return textResult(lines.join("\n"));
247
+ }
248
+ if (action === "set-account-policy") {
249
+ return textResult(`Inbound policy updated on account slice "${result.key}".`);
250
+ }
226
251
  if (action === "list-admin-phones") {
227
252
  const phones = result.phones ?? [];
228
253
  if (phones.length === 0)
@@ -282,10 +307,14 @@ lifelineTool(server, "whatsapp-config", [
282
307
  lifelineTool(server, "whatsapp-send-admin", "Send a WhatsApp text message to a registered recipient — a phone on this install's admin-phone list, OR a registered account manager. Refuses any other number (the cold-send-ban guard — never cold-contact a stranger). Needs no bound inbound conversation, so use it to push a summary or notification over WhatsApp from a webchat session or a scheduled run. Register a recipient first with whatsapp-config (add-admin-phone or add-account-manager).", {
283
308
  phone: z.string().describe("Destination in E.164 (e.g. +441234567890) — must already be a registered admin phone or account manager"),
284
309
  text: z.string().describe("Message body to send"),
285
- accountId: z.string().optional().describe('Ignored — the send always rides the install\'s single house-owned WhatsApp socket. Present only for backward compatibility.'),
310
+ accountId: z.string().optional().describe('Ignored — the send rides the calling session\'s own WhatsApp socket, resolved from the session identity rather than from this argument. Present only for backward compatibility.'),
286
311
  }, async ({ phone, text, accountId }) => {
287
312
  try {
288
- const result = await callApi("whatsapp-send-admin", "/api/whatsapp/send-admin", "POST", { phone, text, accountId });
313
+ // Task 2233 forward the caller's own account and house-admin scope, as
314
+ // every other write tool here does. The route resolves the TRANSMITTING
315
+ // socket from these headers; without them a sub-account send silently
316
+ // left on the house line.
317
+ const result = await callApi("whatsapp-send-admin", "/api/whatsapp/send-admin", "POST", { phone, text, accountId }, callerScopeHeaders(process.env));
289
318
  if (result.error)
290
319
  return textResult(`Send failed: ${result.error}`, true);
291
320
  return textResult(`Sent to ${phone}${result.messageId ? ` (id ${result.messageId})` : ""}.`);
@@ -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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"}
@@ -24,6 +24,14 @@ Outbound on an observe socket is `whatsapp-reply`: reply-only into an existing c
24
24
 
25
25
  The `whatsapp-status` output stamps each account's resolved mode (`<accountId>:up:dispatch` or `<accountId>:down:observe`), so an observe account that came up dispatching, or lost its mode across a boot, is a visible mismatch. A standing safety net at the router logs `[whatsapp:observe] op=BREACH` if any dispatch ever reaches it from an observe account; that line must never appear.
26
26
 
27
+ ## Per-account inbound policy
28
+
29
+ `dmPolicy`, `adminPhones` and `allowFrom` resolve per account: the account's own config slice wins, and the top-level value is the fallback. Set an account's own three fields with `whatsapp-config action: set-account-policy`, passing a `policy` object with any of them, and read them back with `get-account-policy`. A house admin may name any account; every other caller only its own. The HOUSE is refused: those three fields are its top-level config, written by `update-config` and the admin-phone actions, and a per-account slice for the house would be a second home for the same setting with no operator-visible precedence between them.
30
+
31
+ The per-account slice is keyed by the account's **WhatsApp credential directory name**, not its platform account UUID — that is the key the inbound gate reads. The two coincide for a sub-account, whose credential dir is named after its own UUID, and diverge for the house, whose dir is `default`. A target with no credential directory is refused rather than written, because a slice for an account with no socket is one nothing would ever read.
32
+
33
+ Every resolved policy now names where it came from. The `[whatsapp:manager] inbound` verdict line carries `policySource=account|house policyField=<field>` for the field that decided it, and carries neither on the arms that consult no policy field (self-phone, both account-manager arms). `get-account-policy` reports the source of each field, and `whatsapp-status` carries a `policyInheritance` row per account naming all three. Before this, an inherited policy was indistinguishable from a chosen one at every surface, so a house flipped to `disabled` or `allowlist` took every inheriting account dark at once with no event to hang a log line on.
34
+
27
35
  ## Observation-only in groups: the agent
28
36
 
29
37
  The agent **never responds in a group chat.** Every inbound group message is stored, recorded, and persisted to the graph (observation is fully preserved — `list-groups`, `whatsapp-group-info`, conversations, and the `/whatsapp` reader all still work), but it is never dispatched to a responding session and never produces an outbound message into the group. `checkGroupAccess` is a structural observe-only deny — there is no group policy, allowlist, per-group activation, or @mention setting to turn responses on. A belt invariant in the manager's `reply` closure refuses any `@g.us` recipient (`op=group-reply-blocked`), and `admitReply` refuses one at the gateway (`group-send-blocked`).
@@ -139,7 +147,7 @@ A passive-bound phone that DMs a requirement gets exactly one `:Task` filed unde
139
147
 
140
148
  **Reader display of a manager's thread — additive, house-stored.** A manager's inbound persists to the message store under the **house** account (the socket owner), not the sub-account it routed to — the write path is house-anchored and unchanged. So the operator Conversations reader, which scopes store rows to the viewed account, would otherwise show a manager's WhatsApp thread only in the **house** view. When a **sub-account** is viewed (`multiAccount` and the viewed account is not the house), the reader additionally lists every house-stored thread whose counterparty phone matches an `accountManagers` entry bound to that sub (`managerPhonesForAccount` + `phonesMatch`, the same match primitive as the gate). These extra rows carry `accountId=<house>`, so opening one streams from the house store file via `/store-stream` exactly as stored. This is **display only and additive**: the thread still appears in the house view (its own store, untouched); nothing is moved. Single-account and house views are unchanged. The join is observable on the reader's pull-based `op=list` line: `houseResolved=<8|null> managerPhonesBound=<n> managedStoreRows=<m>` — `managerPhonesBound>0 managedStoreRows=0` is a phone-format or house-config-read failure, `houseResolved=null` on a `multiAccount=true` list means the house is unresolvable and every sub silently shows none. The agent read tools `whatsapp-conversations`, `whatsapp-messages`, and `whatsapp-conversation-graph-state` project the same way: on a sub-account session they read the durable house store filtered to that sub-account's bound manager phones, so the agent recalls exactly the threads the operator reader shows for that sub-account. Each logs `projected=<bool> storeAccount=<house|self> managerPhonesBound=<n>`.
141
149
 
142
- **HTTP-route caller-scope — reads and the house socket are house-scoped.** The loopback routes decide access from platform-stamped headers the MCP tool forwards from its spawn env (`ACCOUNT_ID` → `x-maxy-caller-account`, `HOUSE_ADMIN_SCOPE` → `x-maxy-house-admin-scope`), never from a caller-controlled body param — the agent cannot forge them, and an absent signal fails closed. Two families share one decision (`authorizeRecallRead`): a house admin (house scope set) is authorised; otherwise the caller's own account must equal the requested account; otherwise denied. **Read routes** (`/conversations`, `/messages`, `/conversation-graph-state`) scope on the requested `accountId`, so a sub-account may read only its own recall and never pass an explicit `accountId=<house>` to read the house store. **The house-scoped routes** — `/config` for every action *except* `set-dispatch-inbound` (`add`/`remove`/`list-account-manager`, `add`/`remove`/`list-admin-phone`, `set`/`get`/`list-public-agent`, `update-config`, `get-config`, `schema`, `list-groups`) — act on the house's own socket and settings, so each resolves the house/sole account and gates against it: a client sub-account session may neither read nor mutate the house WhatsApp config, a house admin may. **The self-or-house routes** — `/login/start`, `/login/wait`, `/disconnect`, `/reconnect`, `/reply`, and `/config action=set-dispatch-inbound` — scope to the TARGET account instead, so a sub-account pairs and manages its own line and only its own. On the four lifecycle routes an omitted `accountId` resolves to the **caller's own account**, and to the literal `default` credential dir when the caller is the house (admin scope set, or the house account's own session). Earlier an omission resolved to `default` for every caller, so a sub-account pairing its own number asked for the house socket and was refused. An explicit `accountId` is never rewritten, so a sub-account naming a foreign account (or `default`) is still refused. **`/status` is projected, not gated**: a house caller reads every account's row plus the install-wide key-space audit, any other signed caller reads exactly its own row with the audit omitted (an account that never paired reads an empty list, HTTP 200), and an unsigned caller is refused. The two internal callers of `/config` both forward these headers: the `whatsapp-config` agent tool, and the operator-only `account_roster` (its house session carries the scope, so the account-manager column keeps resolving). A denial logs `[whatsapp-read-tool] op=authz-deny requested=… caller=…` for a read and `[whatsapp:api] op=authz-deny route=… target=… targetSource=… caller=… houseAdmin=…` for a scoped route, and returns HTTP 403 with no side effect. `targetSource` names **who chose the target** — `explicit` (the body named it), `caller-default` (resolved from the caller's own account), `house-default` (the literal `default`, because the caller is the house). It exists because a denial naming `target=default` read as if a sub-account had asked for the house socket when it had asked for nothing and the route had chosen; `targetSource=house-default` on a caller that is neither house-admin-scoped nor the house account is that defect's signature. `/status` additionally logs `op=status-projection caller=<8> scope=house|self rows=<n>` on every call, so an empty projection is distinguishable from an account that never paired.
150
+ **HTTP-route caller-scope — reads and the house socket are house-scoped.** The loopback routes decide access from platform-stamped headers the MCP tool forwards from its spawn env (`ACCOUNT_ID` → `x-maxy-caller-account`, `HOUSE_ADMIN_SCOPE` → `x-maxy-house-admin-scope`), never from a caller-controlled body param — the agent cannot forge them, and an absent signal fails closed. Two families share one decision (`authorizeRecallRead`): a house admin (house scope set) is authorised; otherwise the caller's own account must equal the requested account; otherwise denied. **Read routes** (`/conversations`, `/messages`, `/conversation-graph-state`) scope on the requested `accountId`, so a sub-account may read only its own recall and never pass an explicit `accountId=<house>` to read the house store. **The house-scoped routes** — `/config` for every action *except* `set-dispatch-inbound`, `set-account-policy` and `get-account-policy` (`add`/`remove`/`list-account-manager`, `add`/`remove`/`list-admin-phone`, `set`/`get`/`list-public-agent`, `update-config`, `get-config`, `schema`, `list-groups`) — act on the house's own socket and settings, so each resolves the house/sole account and gates against it: a client sub-account session may neither read nor mutate the house WhatsApp config, a house admin may. **The self-or-house routes** — `/login/start`, `/login/wait`, `/disconnect`, `/reconnect`, `/reply`, and `/config action=set-dispatch-inbound|set-account-policy|get-account-policy` — scope to the TARGET account instead, so a sub-account pairs and manages its own line and only its own. On the four lifecycle routes an omitted `accountId` resolves to the **caller's own account**, and to the literal `default` credential dir when the caller is the house (admin scope set, or the house account's own session). Earlier an omission resolved to `default` for every caller, so a sub-account pairing its own number asked for the house socket and was refused. An explicit `accountId` is never rewritten, so a sub-account naming a foreign account (or `default`) is still refused. **`/status` is projected, not gated**: a house caller reads every account's row plus the install-wide key-space audit, any other signed caller reads exactly its own row with the audit omitted (an account that never paired reads an empty list, HTTP 200), and an unsigned caller is refused. The two internal callers of `/config` both forward these headers: the `whatsapp-config` agent tool, and the operator-only `account_roster` (its house session carries the scope, so the account-manager column keeps resolving). A denial logs `[whatsapp-read-tool] op=authz-deny requested=… caller=…` for a read and `[whatsapp:api] op=authz-deny route=… target=… targetSource=… caller=… houseAdmin=…` for a scoped route, and returns HTTP 403 with no side effect. `targetSource` names **who chose the target** — `explicit` (the body named it), `caller-default` (resolved from the caller's own account), `house-default` (the literal `default`, because the caller is the house). It exists because a denial naming `target=default` read as if a sub-account had asked for the house socket when it had asked for nothing and the route had chosen; `targetSource=house-default` on a caller that is neither house-admin-scoped nor the house account is that defect's signature. `/status` additionally logs `op=status-projection caller=<8> scope=house|self rows=<n>` on every call, so an empty projection is distinguishable from an account that never paired.
143
151
 
144
152
  **Recall surfaces the attachment, not just the text.** A recalled message that carried media now includes an `attachment` reference on its read-tool row (`whatsapp-messages` and both modes of `whatsapp-conversation-graph-state`): `attachmentId`, `filename`, `mimeType`, a `sizeBytes` (bytes, as stored — the line renders it as KB/MB), an absolute on-disk `path` to the stored bytes, and a `readableTextPath` when an extracted-text sibling exists. The reference resolves against the same store account the route read the thread from (the house account when projecting a sub-account), so the path always points at the house-stored bytes, never the sub-account's own empty uploads dir. The read-tool output renders it as an indented `[attachment: <name> (<mime>, <size>); Read: <path>]` line, and the agent reads that path directly (an image renders when Read). Inbound WhatsApp media runs best-effort text extraction (the earlier `skipDocToText` opt-out was retired): a convertible container (xlsx, docx, ods, and the rest of `CONVERTIBLE_DOC_MIME`) gets an `.extracted.txt` sibling, so `readableTextPath` is populated for those; an image or other non-convertible type has no sibling and surfaces the bytes `path` alone. Observable on each read route's result line as `withAttachments=<n>`; a record that names an attachment whose bytes are missing under the store account logs `[whatsapp-read-tool] op=attachment-miss attachmentId=<8> storeAccount=<id>`, which separates a genuine house-store gap from a sub-account mis-resolution.
145
153
 
@@ -61,6 +61,16 @@ This is different from an account manager binding. A binding routes a manager's
61
61
 
62
62
  The agent's outbound on an observe socket is `whatsapp-reply`: reply into an existing conversation only, never a new chat. Cold first-contact stays unavailable, the same as every other WhatsApp surface.
63
63
 
64
+ **Per-account inbound policy:**
65
+
66
+ `dmPolicy`, `adminPhones` and `allowFrom` can be set per account, not just install-wide. An account with none of its own inherits the house's.
67
+
68
+ Read the current position with `whatsapp-config action: get-account-policy` — it returns each of the three values and whether it is the account's own or inherited from the house. Set them with `whatsapp-config action: set-account-policy`, passing a `policy` object containing any of `dmPolicy`, `adminPhones`, `allowFrom`. Pass every field you want in ONE call: `dmPolicy: "open"` requires `allowFrom` to contain `"*"`, and that is checked on the whole object.
69
+
70
+ A sub-account may set only its own; a house admin may set any. The house itself is refused, because its three fields ARE the top-level settings above — use `update-config` (or the admin-phone actions) for those. An account that has never paired is refused too: it has no socket, so it has no policy slice anything would read.
71
+
72
+ Confirm with `whatsapp-status`, which carries a `policyInheritance` row per account naming the source of each field.
73
+
64
74
  **Public agent:**
65
75
 
66
76
  Call `whatsapp-config action: list-public-agents` to get available agents, and `whatsapp-config action: get-public-agent` to get the current selection.
@@ -240,8 +240,7 @@ function discardAuthDirSync(authDir) {
240
240
  return false;
241
241
  }
242
242
  }
243
- function listCredentialAccountIds(configDir2) {
244
- const credsRoot = path.join(os.homedir(), configDir2, "credentials", "whatsapp");
243
+ function listCredentialAccountIdsAtRoot(credsRoot) {
245
244
  try {
246
245
  const entries = fsSync.readdirSync(credsRoot, { withFileTypes: true });
247
246
  return entries.filter((e) => e.isDirectory() && hasCredsSync(path.join(credsRoot, e.name))).map((e) => e.name);
@@ -249,6 +248,11 @@ function listCredentialAccountIds(configDir2) {
249
248
  return [];
250
249
  }
251
250
  }
251
+ function listCredentialAccountIds(configDir2) {
252
+ return listCredentialAccountIdsAtRoot(
253
+ path.join(os.homedir(), configDir2, "credentials", "whatsapp")
254
+ );
255
+ }
252
256
  function listCredentialSelfPhones(credsRoot) {
253
257
  try {
254
258
  return fsSync.readdirSync(credsRoot, { withFileTypes: true }).filter((e) => e.isDirectory() && hasCredsSync(path.join(credsRoot, e.name))).map((e) => ({ accountId: e.name, selfPhone: readSelfId(path.join(credsRoot, e.name)).e164 }));
@@ -1640,7 +1644,12 @@ function resolveAccountConfig(config, accountConfig) {
1640
1644
  selfChatMode: accountConfig?.selfChatMode ?? false,
1641
1645
  // Account-manager bindings are a house-level routing table only — never a
1642
1646
  // per-account override, so this reads the top-level map unconditionally.
1643
- accountManagers: config.accountManagers ?? {}
1647
+ accountManagers: config.accountManagers ?? {},
1648
+ sources: {
1649
+ dmPolicy: accountConfig?.dmPolicy !== void 0 ? "account" : "house",
1650
+ adminPhones: accountConfig?.adminPhones !== void 0 ? "account" : "house",
1651
+ allowFrom: accountConfig?.allowFrom !== void 0 ? "account" : "house"
1652
+ }
1644
1653
  };
1645
1654
  }
1646
1655
  function isAdminPhone(phone, adminPhones) {
@@ -1671,28 +1680,67 @@ function checkDmAccess(params) {
1671
1680
  return managerAdmit(managed);
1672
1681
  }
1673
1682
  if (isAdminPhone(senderPhone, cfg.adminPhones)) {
1674
- return { allowed: true, reason: "admin-binding", agentType: "admin", effectiveAccountId: accountId };
1683
+ return {
1684
+ allowed: true,
1685
+ reason: "admin-binding",
1686
+ agentType: "admin",
1687
+ effectiveAccountId: accountId,
1688
+ policyField: "adminPhones",
1689
+ policySource: cfg.sources.adminPhones
1690
+ };
1675
1691
  }
1676
1692
  if (managed && houseAccountId !== void 0 && accountId === houseAccountId) {
1677
1693
  return managerAdmit(managed);
1678
1694
  }
1679
1695
  switch (cfg.dmPolicy) {
1680
1696
  case "open":
1681
- return { allowed: true, reason: "dm-policy-open", agentType: "public", effectiveAccountId: accountId };
1697
+ return {
1698
+ allowed: true,
1699
+ reason: "dm-policy-open",
1700
+ agentType: "public",
1701
+ effectiveAccountId: accountId,
1702
+ policyField: "dmPolicy",
1703
+ policySource: cfg.sources.dmPolicy
1704
+ };
1682
1705
  case "allowlist": {
1683
1706
  const inList = cfg.allowFrom.some((entry2) => {
1684
1707
  if (entry2 === "*") return true;
1685
1708
  return phonesMatch(entry2, senderPhone);
1686
1709
  });
1687
1710
  if (inList) {
1688
- return { allowed: true, reason: "allowlist-match", agentType: "public", effectiveAccountId: accountId };
1711
+ return {
1712
+ allowed: true,
1713
+ reason: "allowlist-match",
1714
+ agentType: "public",
1715
+ effectiveAccountId: accountId,
1716
+ policyField: "allowFrom",
1717
+ policySource: cfg.sources.allowFrom
1718
+ };
1689
1719
  }
1690
- return { allowed: false, reason: "not-in-allowlist", agentType: "public" };
1720
+ return {
1721
+ allowed: false,
1722
+ reason: "not-in-allowlist",
1723
+ agentType: "public",
1724
+ policyField: "allowFrom",
1725
+ policySource: cfg.sources.allowFrom
1726
+ };
1691
1727
  }
1692
1728
  case "disabled":
1693
- return { allowed: false, reason: "dm-policy-disabled", agentType: "public" };
1729
+ return {
1730
+ allowed: false,
1731
+ reason: "dm-policy-disabled",
1732
+ agentType: "public",
1733
+ policyField: "dmPolicy",
1734
+ policySource: cfg.sources.dmPolicy
1735
+ };
1694
1736
  default:
1695
- return { allowed: false, reason: "unknown-dm-policy", agentType: "public" };
1737
+ return {
1738
+ allowed: false,
1739
+ reason: "unknown-dm-policy",
1740
+ agentType: "public",
1741
+ policyField: "dmPolicy",
1742
+ policySource: cfg.sources.dmPolicy
1743
+ };
1696
1744
  }
1697
1745
  }
1698
1746
  async function resolveDmAccess(params) {
@@ -1713,6 +1761,16 @@ async function resolveDmAccess(params) {
1713
1761
  function checkGroupAccess(_params) {
1714
1762
  return { allowed: false, reason: "group-observe-only", agentType: "public" };
1715
1763
  }
1764
+ function buildPolicyInheritance(params) {
1765
+ const rows = params.accountKeys.map((accountId) => {
1766
+ const { sources } = resolveAccountConfig(params.config, params.config.accounts?.[accountId]);
1767
+ return { accountId, dmPolicy: sources.dmPolicy, adminPhones: sources.adminPhones, allowFrom: sources.allowFrom };
1768
+ });
1769
+ const inheritedCount = rows.filter(
1770
+ (r) => r.dmPolicy === "house" || r.adminPhones === "house" || r.allowFrom === "house"
1771
+ ).length;
1772
+ return { rows, inheritedCount };
1773
+ }
1716
1774
 
1717
1775
  // app/lib/whatsapp/inbound/dispatch-mode.ts
1718
1776
  function shouldDispatchInbound(config, accountId) {
@@ -2231,7 +2289,7 @@ async function sendTextMessage(sock, to, text, opts) {
2231
2289
  const messageId = result?.key?.id;
2232
2290
  if (messageId) {
2233
2291
  trackAgentSentMessage(messageId);
2234
- console.error(`${TAG9} sent text to=${jid} id=${messageId}`);
2292
+ console.error(`${TAG9} sent text to=${jid} id=${messageId} account=${opts?.accountId ?? "unknown"}`);
2235
2293
  }
2236
2294
  if (opts?.accountId) {
2237
2295
  recordActivity({ accountId: opts.accountId, direction: "outbound", jid, messageType: "text" });
@@ -2315,7 +2373,7 @@ async function sendMediaMessage(sock, to, media, opts) {
2315
2373
  const messageId = result?.key?.id;
2316
2374
  if (messageId) {
2317
2375
  trackAgentSentMessage(messageId);
2318
- console.error(`${TAG9} sent ${media.type} to=${jid} id=${messageId}`);
2376
+ console.error(`${TAG9} sent ${media.type} to=${jid} id=${messageId} account=${opts?.accountId ?? "unknown"}`);
2319
2377
  }
2320
2378
  if (opts?.accountId) {
2321
2379
  recordActivity({ accountId: opts.accountId, direction: "outbound", jid, messageType: media.type });
@@ -5063,7 +5121,11 @@ async function handleInboundMessage(conn, msg) {
5063
5121
  });
5064
5122
  }
5065
5123
  console.error(
5066
- `${TAG17} inbound account=${conn.accountId} from=${senderPhone} group=${isGroup} access=${accessResult.allowed ? "allowed" : "blocked"}(${accessResult.reason}) agent=${accessResult.agentType} effectiveAccount=${accessResult.effectiveAccountId ?? ""} destAccount=${conn.platformAccountId}` + (extracted.mediaType ? ` media=${extracted.mediaType}` : "") + (extracted.quotedMessage ? ` replyTo=${extracted.quotedMessage.id}` : "")
5124
+ `${TAG17} inbound account=${conn.accountId} from=${senderPhone} group=${isGroup} access=${accessResult.allowed ? "allowed" : "blocked"}(${accessResult.reason}) agent=${accessResult.agentType} effectiveAccount=${accessResult.effectiveAccountId ?? ""} destAccount=${conn.platformAccountId}` + // Task 2235 an inherited policy behaves exactly like a set one until the
5125
+ // house changes, so the verdict has to say which it was. Emitted only for the
5126
+ // arms a policy field actually decided; the self-phone and account-manager
5127
+ // arms consult none, and stamping them would assert something untrue.
5128
+ (accessResult.policySource ? ` policySource=${accessResult.policySource} policyField=${accessResult.policyField}` : "") + (extracted.mediaType ? ` media=${extracted.mediaType}` : "") + (extracted.quotedMessage ? ` replyTo=${extracted.quotedMessage.id}` : "")
5067
5129
  );
5068
5130
  if (!accessResult.allowed && accessResult.reason === "account-manager-unresolved") {
5069
5131
  console.error(
@@ -5202,6 +5264,7 @@ export {
5202
5264
  readConversationSummaries,
5203
5265
  readAllConversations,
5204
5266
  enumerateValidAccountIds,
5267
+ isProvisionedAccount,
5205
5268
  resolveHouseOrSoleAccountId,
5206
5269
  getAccountsDirFromEnv,
5207
5270
  validateAccountIdEnv,
@@ -5226,6 +5289,7 @@ export {
5226
5289
  getAuthAgeMs,
5227
5290
  clearAuth,
5228
5291
  discardAuthDirSync,
5292
+ listCredentialAccountIdsAtRoot,
5229
5293
  listCredentialSelfPhones,
5230
5294
  startVersionDriftCensus,
5231
5295
  drainCredsSaveQueue,
@@ -5248,7 +5312,9 @@ export {
5248
5312
  readLidMap,
5249
5313
  managedAccountFor,
5250
5314
  managerPhonesForAccount,
5315
+ resolveAccountConfig,
5251
5316
  isAdminPhone,
5317
+ buildPolicyInheritance,
5252
5318
  shouldDispatchInbound,
5253
5319
  formatSenderPhone,
5254
5320
  checkAccessRateLimit,
@@ -5280,6 +5346,7 @@ export {
5280
5346
  writeChatMetadataMerged,
5281
5347
  groupEntriesFromUpdates,
5282
5348
  resolvePlatformAccountId,
5349
+ resolveHouseAccountId,
5283
5350
  warnNonUuidAccount,
5284
5351
  isHouseManagedService,
5285
5352
  isCustomerTurnSuppressed,
@@ -30,7 +30,7 @@ import {
30
30
  startConnection,
31
31
  stopConnection,
32
32
  storeMessage
33
- } from "./chunk-UH6GCQO4.js";
33
+ } from "./chunk-AJC3SQSF.js";
34
34
  import "./chunk-BP7LH7MC.js";
35
35
  import "./chunk-PFF6I7KP.js";
36
36
  export {