@rubytech/create-sitedesk-code 0.1.520 → 0.1.521

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 (201) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +4 -2
  3. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +6 -0
  4. package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
  5. package/payload/platform/plugins/email/mcp/dist/__tests__/attachment-metadata-calendar.test.js +46 -1
  6. package/payload/platform/plugins/email/mcp/dist/__tests__/attachment-metadata-calendar.test.js.map +1 -1
  7. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +14 -0
  8. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
  9. package/payload/platform/plugins/email/mcp/dist/lib/imap.js +35 -4
  10. package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
  11. package/payload/platform/plugins/email/references/email-reference.md +1 -1
  12. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +3 -1
  13. package/payload/platform/scripts/check-architecture-skill-no-drift.mjs +20 -6
  14. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +17 -5
  15. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  16. package/payload/platform/services/whatsapp-channel/dist/notification.js +30 -6
  17. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  18. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  19. package/payload/platform/services/whatsapp-channel/dist/server.js +53 -21
  20. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  21. package/payload/platform/services/whatsapp-channel/dist/turn-follow.d.ts +16 -0
  22. package/payload/platform/services/whatsapp-channel/dist/turn-follow.d.ts.map +1 -1
  23. package/payload/platform/services/whatsapp-channel/dist/turn-follow.js +41 -2
  24. package/payload/platform/services/whatsapp-channel/dist/turn-follow.js.map +1 -1
  25. package/payload/server/{chunk-TIIWMF5G.js → chunk-AZLT4LVO.js} +40 -7
  26. package/payload/server/{manager-B6OFOXSW.js → manager-CQBSUJXR.js} +1 -1
  27. package/payload/server/public/activity.html +5 -5
  28. package/payload/server/public/agents.html +4 -4
  29. package/payload/server/public/assets/{AdminLoginScreens-SW7mEMcP.js → AdminLoginScreens-Dar_MMJm.js} +1 -1
  30. package/payload/server/public/assets/AdminLoginScreens-Dar_MMJm.js.br +0 -0
  31. package/payload/server/public/assets/AdminLoginScreens-Dar_MMJm.js.gz +0 -0
  32. package/payload/server/public/assets/AdminShell-CpaI2F_p.js +2 -0
  33. package/payload/server/public/assets/AdminShell-CpaI2F_p.js.br +0 -0
  34. package/payload/server/public/assets/AdminShell-CpaI2F_p.js.gz +0 -0
  35. package/payload/server/public/assets/{activity-sqbyX0pX.js → activity-B1rt4GIy.js} +1 -1
  36. package/payload/server/public/assets/activity-B1rt4GIy.js.br +0 -0
  37. package/payload/server/public/assets/activity-B1rt4GIy.js.gz +0 -0
  38. package/payload/server/public/assets/{admin-D9Bt47GY.js → admin-DE3lLNje.js} +1 -1
  39. package/payload/server/public/assets/admin-DE3lLNje.js.br +0 -0
  40. package/payload/server/public/assets/admin-DE3lLNje.js.gz +0 -0
  41. package/payload/server/public/assets/{agents-BFYM5EDA.js → agents-BXq8woVf.js} +1 -1
  42. package/payload/server/public/assets/agents-BXq8woVf.js.br +0 -0
  43. package/payload/server/public/assets/agents-BXq8woVf.js.gz +0 -0
  44. package/payload/server/public/assets/{browser-DP5GZe4G.js → browser-1QSCPl3X.js} +1 -1
  45. package/payload/server/public/assets/browser-1QSCPl3X.js.br +0 -0
  46. package/payload/server/public/assets/browser-1QSCPl3X.js.gz +0 -0
  47. package/payload/server/public/assets/{calendar-BKaemLDG.js → calendar-D009qWVV.js} +1 -1
  48. package/payload/server/public/assets/calendar-D009qWVV.js.br +0 -0
  49. package/payload/server/public/assets/calendar-D009qWVV.js.gz +0 -0
  50. package/payload/server/public/assets/chat-CUg1fTqJ.js +1 -0
  51. package/payload/server/public/assets/chat-CUg1fTqJ.js.br +1 -0
  52. package/payload/server/public/assets/chat-CUg1fTqJ.js.gz +0 -0
  53. package/payload/server/public/assets/chevron-left-C2JEy7uU.js +1 -0
  54. package/payload/server/public/assets/chevron-left-C2JEy7uU.js.br +0 -0
  55. package/payload/server/public/assets/chevron-right-DWa047Ys.js +1 -0
  56. package/payload/server/public/assets/chevron-right-DWa047Ys.js.br +0 -0
  57. package/payload/server/public/assets/clock-C3OqfCnn.js +1 -0
  58. package/payload/server/public/assets/clock-C3OqfCnn.js.br +0 -0
  59. package/payload/server/public/assets/clock-C3OqfCnn.js.gz +0 -0
  60. package/payload/server/public/assets/data-Bu_yCScC.js +1 -0
  61. package/payload/server/public/assets/data-Bu_yCScC.js.br +0 -0
  62. package/payload/server/public/assets/data-Bu_yCScC.js.gz +0 -0
  63. package/payload/server/public/assets/{file-text-BKK7R-k_.js → file-text-DwGAfCsd.js} +1 -1
  64. package/payload/server/public/assets/file-text-DwGAfCsd.js.br +0 -0
  65. package/payload/server/public/assets/file-text-DwGAfCsd.js.gz +0 -0
  66. package/payload/server/public/assets/{graph-FuxYySjK.js → graph-D-DGlfhW.js} +2 -2
  67. package/payload/server/public/assets/graph-D-DGlfhW.js.br +0 -0
  68. package/payload/server/public/assets/graph-D-DGlfhW.js.gz +0 -0
  69. package/payload/server/public/assets/{graph-labels-Cip6fmKK.js → graph-labels-BbX3fXzl.js} +1 -1
  70. package/payload/server/public/assets/graph-labels-BbX3fXzl.js.br +0 -0
  71. package/payload/server/public/assets/graph-labels-BbX3fXzl.js.gz +0 -0
  72. package/payload/server/public/assets/{maximize-2-D79AhVDo.js → maximize-2-C_-KapxH.js} +1 -1
  73. package/payload/server/public/assets/maximize-2-C_-KapxH.js.br +0 -0
  74. package/payload/server/public/assets/maximize-2-C_-KapxH.js.gz +0 -0
  75. package/payload/server/public/assets/{operator-BPAfgFhP.js → operator-CFrZVcv6.js} +1 -1
  76. package/payload/server/public/assets/operator-CFrZVcv6.js.br +0 -0
  77. package/payload/server/public/assets/operator-CFrZVcv6.js.gz +0 -0
  78. package/payload/server/public/assets/{page-BqEyS0W4.js → page-CHt62f1_.js} +1 -1
  79. package/payload/server/public/assets/page-CHt62f1_.js.br +0 -0
  80. package/payload/server/public/assets/page-CHt62f1_.js.gz +0 -0
  81. package/payload/server/public/assets/page-E74MYB18.js +32 -0
  82. package/payload/server/public/assets/page-E74MYB18.js.br +0 -0
  83. package/payload/server/public/assets/page-E74MYB18.js.gz +0 -0
  84. package/payload/server/public/assets/{public-D1xs3FzD.js → public-CI6K1sNW.js} +1 -1
  85. package/payload/server/public/assets/public-CI6K1sNW.js.br +0 -0
  86. package/payload/server/public/assets/public-CI6K1sNW.js.gz +0 -0
  87. package/payload/server/public/assets/{rotate-ccw-CcU_XD8B.js → rotate-ccw-PWu_QGrD.js} +1 -1
  88. package/payload/server/public/assets/rotate-ccw-PWu_QGrD.js.br +0 -0
  89. package/payload/server/public/assets/rotate-ccw-PWu_QGrD.js.gz +0 -0
  90. package/payload/server/public/assets/routines-Cp3_XS7S.js +1 -0
  91. package/payload/server/public/assets/routines-Cp3_XS7S.js.br +0 -0
  92. package/payload/server/public/assets/routines-Cp3_XS7S.js.gz +0 -0
  93. package/payload/server/public/assets/skills-g8HvunPA.js +1 -0
  94. package/payload/server/public/assets/skills-g8HvunPA.js.br +0 -0
  95. package/payload/server/public/assets/skills-g8HvunPA.js.gz +0 -0
  96. package/payload/server/public/assets/{tasks-DgieyZqz.js → tasks-CMC_jDVm.js} +1 -1
  97. package/payload/server/public/assets/tasks-CMC_jDVm.js.br +0 -0
  98. package/payload/server/public/assets/tasks-CMC_jDVm.js.gz +0 -0
  99. package/payload/server/public/assets/{time-entry-format-IFqinQJj.js → time-entry-format-BXWuQ6Sw.js} +1 -1
  100. package/payload/server/public/assets/time-entry-format-BXWuQ6Sw.js.br +2 -0
  101. package/payload/server/public/assets/time-entry-format-BXWuQ6Sw.js.gz +0 -0
  102. package/payload/server/public/assets/{triangle-alert-C5vH__sq.js → triangle-alert-BNshRC13.js} +1 -1
  103. package/payload/server/public/assets/triangle-alert-BNshRC13.js.br +0 -0
  104. package/payload/server/public/assets/triangle-alert-BNshRC13.js.gz +0 -0
  105. package/payload/server/public/assets/{useCopyFeedback-BeL2gPl6.js → useCopyFeedback-CwTZ9DqH.js} +1 -1
  106. package/payload/server/public/assets/useCopyFeedback-CwTZ9DqH.js.br +0 -0
  107. package/payload/server/public/assets/useCopyFeedback-CwTZ9DqH.js.gz +0 -0
  108. package/payload/server/public/assets/useSubAccountSwitcher-BuUYMDWl.js +14 -0
  109. package/payload/server/public/assets/useSubAccountSwitcher-BuUYMDWl.js.br +0 -0
  110. package/payload/server/public/assets/useSubAccountSwitcher-BuUYMDWl.js.gz +0 -0
  111. package/payload/server/public/assets/useSubAccountSwitcher-dzDnmWq9.css +1 -0
  112. package/payload/server/public/assets/useSubAccountSwitcher-dzDnmWq9.css.br +0 -0
  113. package/payload/server/public/assets/useSubAccountSwitcher-dzDnmWq9.css.gz +0 -0
  114. package/payload/server/public/assets/{useVoiceRecorder-Cpw3aOSt.js → useVoiceRecorder-BGqV5R6u.js} +1 -1
  115. package/payload/server/public/assets/useVoiceRecorder-BGqV5R6u.js.br +0 -0
  116. package/payload/server/public/assets/useVoiceRecorder-BGqV5R6u.js.gz +0 -0
  117. package/payload/server/public/assets/{wrench-BBEup3hd.js → wrench-DQ045Pyk.js} +1 -1
  118. package/payload/server/public/assets/wrench-DQ045Pyk.js.br +0 -0
  119. package/payload/server/public/assets/wrench-DQ045Pyk.js.gz +0 -0
  120. package/payload/server/public/browser.html +4 -4
  121. package/payload/server/public/calendar.html +7 -7
  122. package/payload/server/public/chat.html +13 -13
  123. package/payload/server/public/data.html +11 -11
  124. package/payload/server/public/graph.html +9 -9
  125. package/payload/server/public/index.html +14 -14
  126. package/payload/server/public/operator.html +14 -14
  127. package/payload/server/public/public.html +13 -13
  128. package/payload/server/public/routines.html +6 -6
  129. package/payload/server/public/skills.html +5 -5
  130. package/payload/server/public/tasks.html +6 -6
  131. package/payload/server/server.js +234 -49
  132. package/payload/server/public/assets/AdminLoginScreens-SW7mEMcP.js.br +0 -0
  133. package/payload/server/public/assets/AdminLoginScreens-SW7mEMcP.js.gz +0 -0
  134. package/payload/server/public/assets/AdminShell-Djg6ndne.js +0 -2
  135. package/payload/server/public/assets/AdminShell-Djg6ndne.js.br +0 -0
  136. package/payload/server/public/assets/AdminShell-Djg6ndne.js.gz +0 -0
  137. package/payload/server/public/assets/activity-sqbyX0pX.js.br +0 -0
  138. package/payload/server/public/assets/activity-sqbyX0pX.js.gz +0 -0
  139. package/payload/server/public/assets/admin-D9Bt47GY.js.br +0 -0
  140. package/payload/server/public/assets/admin-D9Bt47GY.js.gz +0 -0
  141. package/payload/server/public/assets/agents-BFYM5EDA.js.br +0 -0
  142. package/payload/server/public/assets/agents-BFYM5EDA.js.gz +0 -0
  143. package/payload/server/public/assets/browser-DP5GZe4G.js.br +0 -0
  144. package/payload/server/public/assets/browser-DP5GZe4G.js.gz +0 -0
  145. package/payload/server/public/assets/calendar-BKaemLDG.js.br +0 -0
  146. package/payload/server/public/assets/calendar-BKaemLDG.js.gz +0 -0
  147. package/payload/server/public/assets/chat-DPhT6urD.js +0 -1
  148. package/payload/server/public/assets/chat-DPhT6urD.js.br +0 -1
  149. package/payload/server/public/assets/chat-DPhT6urD.js.gz +0 -0
  150. package/payload/server/public/assets/chevron-left-BSdXvJcH.js +0 -1
  151. package/payload/server/public/assets/chevron-right-DI7vI3IB.js +0 -1
  152. package/payload/server/public/assets/chevron-right-DI7vI3IB.js.br +0 -0
  153. package/payload/server/public/assets/clock-YUTPXZH5.js +0 -1
  154. package/payload/server/public/assets/clock-YUTPXZH5.js.br +0 -0
  155. package/payload/server/public/assets/clock-YUTPXZH5.js.gz +0 -0
  156. package/payload/server/public/assets/data-CfjttTvR.js +0 -1
  157. package/payload/server/public/assets/data-CfjttTvR.js.br +0 -2
  158. package/payload/server/public/assets/data-CfjttTvR.js.gz +0 -0
  159. package/payload/server/public/assets/file-text-BKK7R-k_.js.br +0 -0
  160. package/payload/server/public/assets/file-text-BKK7R-k_.js.gz +0 -0
  161. package/payload/server/public/assets/graph-FuxYySjK.js.br +0 -0
  162. package/payload/server/public/assets/graph-FuxYySjK.js.gz +0 -0
  163. package/payload/server/public/assets/graph-labels-Cip6fmKK.js.br +0 -0
  164. package/payload/server/public/assets/graph-labels-Cip6fmKK.js.gz +0 -0
  165. package/payload/server/public/assets/maximize-2-D79AhVDo.js.br +0 -0
  166. package/payload/server/public/assets/maximize-2-D79AhVDo.js.gz +0 -0
  167. package/payload/server/public/assets/operator-BPAfgFhP.js.br +0 -0
  168. package/payload/server/public/assets/operator-BPAfgFhP.js.gz +0 -0
  169. package/payload/server/public/assets/page--78CbdFs.js +0 -32
  170. package/payload/server/public/assets/page--78CbdFs.js.br +0 -0
  171. package/payload/server/public/assets/page--78CbdFs.js.gz +0 -0
  172. package/payload/server/public/assets/page-BqEyS0W4.js.br +0 -0
  173. package/payload/server/public/assets/page-BqEyS0W4.js.gz +0 -0
  174. package/payload/server/public/assets/public-D1xs3FzD.js.br +0 -0
  175. package/payload/server/public/assets/public-D1xs3FzD.js.gz +0 -0
  176. package/payload/server/public/assets/rotate-ccw-CcU_XD8B.js.br +0 -0
  177. package/payload/server/public/assets/rotate-ccw-CcU_XD8B.js.gz +0 -0
  178. package/payload/server/public/assets/routines-CA7D0myr.js +0 -1
  179. package/payload/server/public/assets/routines-CA7D0myr.js.br +0 -0
  180. package/payload/server/public/assets/routines-CA7D0myr.js.gz +0 -0
  181. package/payload/server/public/assets/skills-CfVPPSxO.js +0 -1
  182. package/payload/server/public/assets/skills-CfVPPSxO.js.br +0 -0
  183. package/payload/server/public/assets/skills-CfVPPSxO.js.gz +0 -0
  184. package/payload/server/public/assets/tasks-DgieyZqz.js.br +0 -0
  185. package/payload/server/public/assets/tasks-DgieyZqz.js.gz +0 -0
  186. package/payload/server/public/assets/time-entry-format-IFqinQJj.js.br +0 -0
  187. package/payload/server/public/assets/time-entry-format-IFqinQJj.js.gz +0 -0
  188. package/payload/server/public/assets/triangle-alert-C5vH__sq.js.br +0 -0
  189. package/payload/server/public/assets/triangle-alert-C5vH__sq.js.gz +0 -0
  190. package/payload/server/public/assets/useCopyFeedback-BeL2gPl6.js.br +0 -0
  191. package/payload/server/public/assets/useCopyFeedback-BeL2gPl6.js.gz +0 -0
  192. package/payload/server/public/assets/useSubAccountSwitcher-CH9qm2Ad.js +0 -14
  193. package/payload/server/public/assets/useSubAccountSwitcher-CH9qm2Ad.js.br +0 -0
  194. package/payload/server/public/assets/useSubAccountSwitcher-CH9qm2Ad.js.gz +0 -0
  195. package/payload/server/public/assets/useSubAccountSwitcher-DLqUQzOl.css +0 -1
  196. package/payload/server/public/assets/useSubAccountSwitcher-DLqUQzOl.css.br +0 -0
  197. package/payload/server/public/assets/useSubAccountSwitcher-DLqUQzOl.css.gz +0 -0
  198. package/payload/server/public/assets/useVoiceRecorder-Cpw3aOSt.js.br +0 -0
  199. package/payload/server/public/assets/useVoiceRecorder-Cpw3aOSt.js.gz +0 -0
  200. package/payload/server/public/assets/wrench-BBEup3hd.js.br +0 -0
  201. package/payload/server/public/assets/wrench-BBEup3hd.js.gz +0 -0
@@ -276,15 +276,22 @@ export async function subscribeInbound(opts) {
276
276
  let jsonlPath = sessionId ? findJsonlFn(sessionId) : null;
277
277
  // Task 839 — one session-long follower reports every assistant end_turn; the
278
278
  // channel server counts the inbounds it emits (pendingTurns) and delivers a
279
- // turn-end decision only while an inbound is outstanding. A turn queued
280
- // mid-turn is covered by the next end_turn the follower reports, and a
281
- // claude.ai-driven turn (pendingTurns === 0) delivers nothing.
279
+ // turn-end decision only while an inbound is outstanding. A claude.ai-driven
280
+ // turn (pendingTurns === 0) delivers nothing.
281
+ // Task 2111 — an inbound queued mid-turn is usually answered by the RUNNING
282
+ // turn, not the next one: the harness injects it as a `queued_command` row
283
+ // into the turn already in flight. Each end_turn is therefore attributed by
284
+ // what its own segment shows it answered, not by position in a sequence.
282
285
  let pendingTurns = 0;
283
286
  let followerStarted = false;
284
- // Task 1539 — the interactive intent of each outstanding inbound, FIFO in
285
- // lockstep with pendingTurns. `source !== 'schedule'` means a real person is
286
- // waiting, so the turn's end-turn answer is delivered as a fallback; a
287
- // scheduled inject stays silent.
287
+ // Task 1539 — the interactive intent of each outstanding inbound.
288
+ // `source !== 'schedule'` means a real person is waiting, so the turn's
289
+ // end-turn answer is delivered as a fallback; a scheduled inject stays silent.
290
+ // Task 2111 this is NOT in lockstep with turn count. The harness answers
291
+ // every inbound queued while it was busy in ONE turn, so N inbounds produce
292
+ // fewer than N turns. Each turn-end therefore consumes
293
+ // `outcome.consumedInbounds` entries, counted from the turn's own JSONL
294
+ // segment, rather than one per turn.
288
295
  const pendingInteractive = [];
289
296
  const url = `${GATEWAY_URL}/wa-channel/inbound?senderId=${encodeURIComponent(SENDER_ID)}`;
290
297
  for (;;) {
@@ -396,9 +403,10 @@ export async function subscribeInbound(opts) {
396
403
  // Task 839 — count this inbound and ensure the session-long follower
397
404
  // is running. The follower reports every assistant end_turn; each
398
405
  // callback delivers a turn-end decision (and decrements) only while an
399
- // inbound is outstanding, so a turn queued mid-turn is covered by the
400
- // next end_turn the follower reports, and a claude.ai-driven turn
401
- // (pendingTurns === 0) delivers nothing. Re-resolve the path lazily
406
+ // inbound is outstanding, and a claude.ai-driven turn
407
+ // (pendingTurns === 0) delivers nothing. An inbound queued mid-turn is
408
+ // usually answered by the running turn and counted in ITS segment
409
+ // (Task 2111). Re-resolve the path lazily
402
410
  // when it was absent at startup (brand-new session whose JSONL appears
403
411
  // on the first turn). The follower is detached so the SSE read loop
404
412
  // keeps receiving.
@@ -414,19 +422,34 @@ export async function subscribeInbound(opts) {
414
422
  void followTurns(followPath, followStart, (outcome) => {
415
423
  if (pendingTurns <= 0)
416
424
  return;
425
+ // Task 2111 — a turn that answered no channel inbound decides
426
+ // nothing and consumes nothing. `followTurnEnds` segments on ANY
427
+ // assistant end_turn, so subagent turns, operator turns driven
428
+ // from claude.ai, and resumed turns all arrive here: measured on
429
+ // session e59ed04e, 26 of 100 segments hold zero channel rows.
430
+ // Consuming one entry each would take 111 against 85 pushes and
431
+ // steal a waiting person's entry.
432
+ if (outcome.consumedInbounds <= 0)
433
+ return;
417
434
  // Task 2072 — the FIFO state this decision is made against, read
418
- // before the decrement and before the shift, so a stale entry is
435
+ // before the decrement and before the splice, so a stale entry is
419
436
  // readable from the gateway log without reproducing the drop.
420
437
  const pendingTurnsBefore = pendingTurns;
421
438
  const queueDepth = pendingInteractive.length;
422
- pendingTurns--;
423
439
  // Task 1539 — restore the interactive delivery fallback (removed
424
440
  // in 1464). For a turn a real person is waiting on, the trimmed
425
441
  // end-turn assistant text is the answer; ship it (outbound-guarded)
426
442
  // so the gateway force-sends it when the agent did not route the
427
443
  // answer through the reply tool. A scheduled inject ships an empty
428
444
  // finalText and stays silent.
429
- const interactive = pendingInteractive.shift() ?? true;
445
+ // Task 2111 consume exactly the inbounds this turn answered, no
446
+ // more and no fewer, so the queue stays in bijection with the
447
+ // pushes. `some(Boolean)` makes a turn that answered a person
448
+ // alongside a scheduled inject interactive: a person is waiting,
449
+ // which is the guarantee 1539 exists to hold.
450
+ const consumed = pendingInteractive.splice(0, outcome.consumedInbounds);
451
+ pendingTurns -= consumed.length;
452
+ const interactive = consumed.some(Boolean);
430
453
  // Task 2072 — measured before the interactive gate, so a turn that
431
454
  // ships '' still reports the size of the answer it withheld.
432
455
  const finalBytes = Buffer.byteLength(outcome.finalText.trim(), 'utf8');
@@ -434,7 +457,7 @@ export async function subscribeInbound(opts) {
434
457
  void fetch(`${GATEWAY_URL}/wa-channel/turn-end`, {
435
458
  method: 'POST',
436
459
  headers: { 'content-type': 'application/json' },
437
- body: JSON.stringify(buildTurnEndPostBody(SENDER_ID, sessionId ?? '', outcome.replied, interactive, finalText, finalBytes, queueDepth, pendingTurnsBefore)),
460
+ body: JSON.stringify(buildTurnEndPostBody(SENDER_ID, sessionId ?? '', outcome.replied, interactive, finalText, finalBytes, queueDepth, pendingTurnsBefore, consumed.length)),
438
461
  }).catch(() => { });
439
462
  }).finally(() => {
440
463
  // The follower only settles on a stat failure (file unreadable —
@@ -493,9 +516,11 @@ function makeMultiTurnFollow(targets, followTurns) {
493
516
  const sessionId = process.env.CHANNEL_SESSION_ID ?? '';
494
517
  let pendingTurns = 0;
495
518
  let followerStarted = false;
496
- // Task 1539 — the interactive intent of each outstanding inbound, FIFO in
497
- // lockstep with pendingTurns, so a scheduled multi-target dispatch does not
498
- // promote its end-turn text on the webchat reader.
519
+ // Task 1539 — the interactive intent of each outstanding inbound, so a
520
+ // scheduled multi-target dispatch does not promote its end-turn text on the
521
+ // webchat reader. Task 2111 NOT in lockstep with turn count; each turn-end
522
+ // consumes `outcome.consumedInbounds` entries. See the single-target twin in
523
+ // subscribeInbound for the full reasoning.
499
524
  const pendingInteractive = [];
500
525
  return (jsonlPath, turnStartOffset, interactive) => {
501
526
  if (!webchat || !jsonlPath)
@@ -508,15 +533,22 @@ function makeMultiTurnFollow(targets, followTurns) {
508
533
  void followTurns(jsonlPath, turnStartOffset, (outcome) => {
509
534
  if (pendingTurns <= 0)
510
535
  return;
536
+ // Task 2111 — a turn that answered no channel inbound decides nothing and
537
+ // consumes nothing; see the single-target twin for the measurement.
538
+ if (outcome.consumedInbounds <= 0)
539
+ return;
511
540
  // Task 2072 — the FIFO state this decision is made against, read before the
512
- // decrement and before the shift.
541
+ // decrement and before the splice.
513
542
  const pendingTurnsBefore = pendingTurns;
514
543
  const queueDepth = pendingInteractive.length;
515
- pendingTurns--;
516
544
  // Reader-side delivery on webchat (Task 1539): the answer text never leaves
517
545
  // this server; only interactive + the trimmed end-turn byte length travel,
518
546
  // so the gateway can classify delivered=fallback|reply|none for the lifeline.
519
- const interactiveTurn = pendingInteractive.shift() ?? true;
547
+ // Task 2111 consume exactly the inbounds this turn answered; see the
548
+ // single-target twin in subscribeInbound for the full reasoning.
549
+ const consumed = pendingInteractive.splice(0, outcome.consumedInbounds);
550
+ pendingTurns -= consumed.length;
551
+ const interactiveTurn = consumed.some(Boolean);
520
552
  // Measured before the interactive gate below, so the WhatsApp door reports
521
553
  // the size of an answer it withholds (Task 2072). Shared with the webchat
522
554
  // POST, whose body is unchanged.
@@ -540,7 +572,7 @@ function makeMultiTurnFollow(targets, followTurns) {
540
572
  void fetch(whatsapp.url, {
541
573
  method: 'POST',
542
574
  headers: { 'content-type': 'application/json' },
543
- body: JSON.stringify(buildTurnEndPostBody(whatsapp.senderId, sessionId, outcome.replied, interactiveTurn, finalText, finalBytes, queueDepth, pendingTurnsBefore)),
575
+ body: JSON.stringify(buildTurnEndPostBody(whatsapp.senderId, sessionId, outcome.replied, interactiveTurn, finalText, finalBytes, queueDepth, pendingTurnsBefore, consumed.length)),
544
576
  }).catch(() => { });
545
577
  }
546
578
  }).finally(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,22 @@ export interface TurnOutcome {
5
5
  finalText: string;
6
6
  /** The turn reached an assistant end_turn. */
7
7
  reachedEndTurn: boolean;
8
+ /**
9
+ * Task 2111 — how many channel inbounds this turn answered. The harness answers
10
+ * every inbound queued while it was busy in ONE turn, so turn count and inbound
11
+ * count differ and a per-turn counter cannot stay in bijection with the pushes.
12
+ * An inbound arriving at idle is journalled as a `type:'user'` row; one arriving
13
+ * mid-turn is injected into the running turn as a `queued_command` attachment
14
+ * row. (parse-transcript.ts records that the mid-turn twin can also appear as a
15
+ * plain `type:'user'` channel row depending on runtime version; both shapes
16
+ * count once here, so the count is version-independent.) Both are counted, so a
17
+ * turn-end consumes its own inbounds and no others. Measured on session
18
+ * e59ed04e: 75 user rows + 11 queued_command rows against 85 logged inbounds;
19
+ * user rows alone give 75 and leave the drift open. Zero is a real answer —
20
+ * 26 of that session's 100 turn segments hold no channel row at all — and the
21
+ * caller must consume nothing on those rather than flooring to one.
22
+ */
23
+ consumedInbounds: number;
8
24
  }
9
25
  /** Fold one turn's JSONL line strings into the delivery decision. Pure. */
10
26
  export declare function reduceTurnFromLines(lines: string[]): TurnOutcome;
@@ -1 +1 @@
1
- {"version":3,"file":"turn-follow.d.ts","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAA;IAChB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,cAAc,EAAE,OAAO,CAAA;CACxB;AAUD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAoChE;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;AActD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAuEf"}
1
+ {"version":3,"file":"turn-follow.d.ts","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAA;IAChB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,cAAc,EAAE,OAAO,CAAA;IACvB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAkDD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAwChE;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;AActD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAuEf"}
@@ -20,11 +20,47 @@ const REPLY_TOOL_NAMES = new Set([
20
20
  'mcp__channel__reply',
21
21
  'mcp__channel__reply-document',
22
22
  ]);
23
+ // The `<channel source="…">` envelope Claude Code wraps a channel notification in.
24
+ // Platform channels also stamp the row `isMeta: true` + `origin.kind === 'channel'`;
25
+ // native Claude Code channels (maxy-lite) emit the wrapper with no stamp, which
26
+ // is why parse-transcript.ts accepts stamp-or-wrapper on its user-row branch.
27
+ // The wrapper fallback is carried on the attachment branch too — parse-transcript
28
+ // requires the stamp there — because an unstamped queued_command carrying the
29
+ // envelope is still one inbound the turn answered, and under-counting it is the
30
+ // drift this task exists to close. The two discriminators never disagreed across
31
+ // session e59ed04e's 86 channel prompts (75/75 user rows, 11/11 attachments).
32
+ const CHANNEL_WRAPPER_PREFIX = /^<channel\b[^>]*>/;
33
+ function isChannelStamped(v) {
34
+ return (v?.isMeta === true &&
35
+ typeof v.origin === 'object' &&
36
+ v.origin !== null &&
37
+ v.origin.kind === 'channel');
38
+ }
39
+ /** True iff this JSONL row is one channel inbound the turn answered. */
40
+ function isConsumedInbound(ev) {
41
+ if (ev.type === 'user') {
42
+ const content = ev.message?.content;
43
+ // Array content is a tool_result carrier, never an inbound.
44
+ if (typeof content !== 'string')
45
+ return false;
46
+ return isChannelStamped(ev) || CHANNEL_WRAPPER_PREFIX.test(content);
47
+ }
48
+ if (ev.type === 'attachment') {
49
+ const att = ev.attachment;
50
+ if (att?.type !== 'queued_command' || typeof att.prompt !== 'string')
51
+ return false;
52
+ return isChannelStamped(att) || CHANNEL_WRAPPER_PREFIX.test(att.prompt);
53
+ }
54
+ // `queue-operation` rows carry the same prompt text on enqueue/remove, so
55
+ // counting them would multiply each inbound. They are never counted.
56
+ return false;
57
+ }
23
58
  /** Fold one turn's JSONL line strings into the delivery decision. Pure. */
24
59
  export function reduceTurnFromLines(lines) {
25
60
  let replied = false;
26
61
  let finalText = '';
27
62
  let reachedEndTurn = false;
63
+ let consumedInbounds = 0;
28
64
  for (const line of lines) {
29
65
  if (!line)
30
66
  continue;
@@ -35,8 +71,11 @@ export function reduceTurnFromLines(lines) {
35
71
  catch {
36
72
  continue;
37
73
  }
38
- if (ev.type !== 'assistant')
74
+ if (ev.type !== 'assistant') {
75
+ if (isConsumedInbound(ev))
76
+ consumedInbounds++;
39
77
  continue;
78
+ }
40
79
  const msg = ev.message;
41
80
  const isEnd = msg?.stop_reason === 'end_turn';
42
81
  if (!msg || !Array.isArray(msg.content)) {
@@ -60,7 +99,7 @@ export function reduceTurnFromLines(lines) {
60
99
  finalText = endText;
61
100
  }
62
101
  }
63
- return { replied, finalText, reachedEndTurn };
102
+ return { replied, finalText, reachedEndTurn, consumedInbounds };
64
103
  }
65
104
  /** True iff `line` is an assistant message with stop_reason 'end_turn'. */
66
105
  function isAssistantEndTurn(line) {
@@ -1 +1 @@
1
- {"version":3,"file":"turn-follow.js","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn-follow.js","sourceRoot":"","sources":["../src/turn-follow.ts"],"names":[],"mappings":"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"}
@@ -971,12 +971,6 @@ function jidToE164(jid) {
971
971
  if (lidMatch) return lidMatch[1];
972
972
  return null;
973
973
  }
974
- function senderJidFromTelephone(senderTelephone) {
975
- if (!senderTelephone) return null;
976
- if (isGroupJid(senderTelephone)) return null;
977
- if (isUserJid(senderTelephone)) return senderTelephone;
978
- return null;
979
- }
980
974
  function isGroupJid(value) {
981
975
  const candidate = stripWhatsAppPrefix(value);
982
976
  const lower = candidate.toLowerCase();
@@ -2241,12 +2235,16 @@ async function persistWhatsAppMessage(input) {
2241
2235
  body: input.body,
2242
2236
  fromMe: input.fromMe,
2243
2237
  senderTelephone,
2238
+ // Spread rather than assigned, so a record with no sender JID has no key at
2239
+ // all on disk instead of an explicit `null` a reader would have to special-case.
2240
+ ...input.senderJid ? { senderJid: input.senderJid } : {},
2244
2241
  senderName: input.pushName ?? null,
2245
2242
  remoteJid: canonicalRemoteJid,
2246
2243
  msgKeyId: input.msgKeyId,
2247
2244
  quotedId: input.quoted?.id ?? null,
2248
2245
  quotedSender: input.quoted?.sender ?? null,
2249
2246
  scope,
2247
+ ...input.origin ? { origin: input.origin } : {},
2250
2248
  ...input.attachmentId ? { attachmentId: input.attachmentId } : {},
2251
2249
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2252
2250
  };
@@ -3578,6 +3576,7 @@ var connections = /* @__PURE__ */ new Map();
3578
3576
  var configDir = null;
3579
3577
  var whatsAppConfig = {};
3580
3578
  var onInboundMessage = null;
3579
+ var onMediaStanza = null;
3581
3580
  var onNotify = null;
3582
3581
  function buildNotifyPending(args) {
3583
3582
  const { body, truncated } = formatNotifyBody(args.text, args.mediaType);
@@ -3668,6 +3667,7 @@ async function init(opts) {
3668
3667
  configDir = opts.configDir;
3669
3668
  onInboundMessage = opts.onMessage;
3670
3669
  onNotify = opts.onNotify ?? null;
3670
+ onMediaStanza = opts.onMediaStanza ?? null;
3671
3671
  loadConfig(opts.accountConfig);
3672
3672
  const accountIds = listCredentialAccountIds(configDir);
3673
3673
  if (accountIds.length === 0) {
@@ -4326,7 +4326,38 @@ function monitorInbound(conn) {
4326
4326
  msgKeyId: msg.key.id,
4327
4327
  fromMe,
4328
4328
  senderPhone,
4329
+ // Task 2096 — the sender's wire JID, carried so the reader can
4330
+ // identify a group participant. `senderPhone` above cannot: an
4331
+ // unmapped LID reaches it as bare digits indistinguishable from a
4332
+ // phone number, and anything built from those digits addresses a
4333
+ // different WhatsApp account.
4334
+ //
4335
+ // Inbound only. On a `fromMe` echo the sender is this install, and
4336
+ // `senderJid` above holds the counterparty for a DM (the message's
4337
+ // remoteJid), so passing it would record the wrong person as the
4338
+ // sender of the operator's own message.
4339
+ senderJid: fromMe ? void 0 : senderJid,
4329
4340
  selfPhone: conn.selfPhone,
4341
+ // Task 2096 — the group-outbound audit's discriminator. This cache
4342
+ // holds the ids of sends THIS process made through the outbound
4343
+ // helpers, so a stamp here means the agent path produced the
4344
+ // message; an operator typing on their phone or another linked
4345
+ // device leaves it absent.
4346
+ //
4347
+ // Two routes write their own record synchronously after their send
4348
+ // resolves, under the same messageId and store account: the reader
4349
+ // composer (stamping `operator-manual`) and the agent's own
4350
+ // `/api/whatsapp/reply` (stamping `agent` itself). This expression
4351
+ // is still evaluated for their echoes — every `fromMe` message
4352
+ // reaches it — but `appendMessage` then dedupes on `messageId` and
4353
+ // the value computed here is discarded. So the stamp that survives
4354
+ // for those two is the one their route wrote, and this site is what
4355
+ // covers every other agent send, the document path among them.
4356
+ //
4357
+ // Read-only against the same cache the echo suppression below uses
4358
+ // (a hit does not consume the entry), so the ordering of the two is
4359
+ // free.
4360
+ origin: fromMe && msg.key.id && isAgentSentMessage(msg.key.id) ? "agent" : void 0,
4330
4361
  timestamp: ts,
4331
4362
  pushName: msg.pushName ?? void 0,
4332
4363
  quoted: extracted.quotedMessage ? {
@@ -4609,6 +4640,9 @@ async function handleInboundMessage(conn, msg) {
4609
4640
  sendReadReceipt(conn.sock, remoteJid, [msg.key.id], isGroup ? senderJid : void 0, conn.accountId);
4610
4641
  }
4611
4642
  let mediaResult;
4643
+ if (extracted.mediaType && extracted.mediaType !== "audio") {
4644
+ onMediaStanza?.(senderPhone, Date.now());
4645
+ }
4612
4646
  if (extracted.mediaType && conn.sock) {
4613
4647
  const maxMb = whatsAppConfig.mediaMaxMb ?? 50;
4614
4648
  mediaResult = await downloadInboundMedia(msg, conn.sock, {
@@ -4751,7 +4785,6 @@ export {
4751
4785
  normalizeE164,
4752
4786
  toWhatsappJid,
4753
4787
  jidToE164,
4754
- senderJidFromTelephone,
4755
4788
  isGroupJid,
4756
4789
  isUserJid,
4757
4790
  normalizeTarget,
@@ -27,7 +27,7 @@ import {
27
27
  startConnection,
28
28
  stopConnection,
29
29
  storeMessage
30
- } from "./chunk-TIIWMF5G.js";
30
+ } from "./chunk-AZLT4LVO.js";
31
31
  import "./chunk-PXNY2TAP.js";
32
32
  import "./chunk-PFF6I7KP.js";
33
33
  export {
@@ -5,12 +5,12 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Activity — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/activity-sqbyX0pX.js"></script>
8
+ <script type="module" crossorigin src="/assets/activity-B1rt4GIy.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CH9qm2Ad.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-Djg6ndne.js">
12
- <link rel="modulepreload" crossorigin href="/assets/triangle-alert-C5vH__sq.js">
13
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DLqUQzOl.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BuUYMDWl.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CpaI2F_p.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/triangle-alert-BNshRC13.js">
13
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-dzDnmWq9.css">
14
14
  <link rel="stylesheet" href="/brand-defaults.css">
15
15
  </head>
16
16
  <body>
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Agents — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/agents-BFYM5EDA.js"></script>
8
+ <script type="module" crossorigin src="/assets/agents-BXq8woVf.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CH9qm2Ad.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-Djg6ndne.js">
12
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DLqUQzOl.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-BuUYMDWl.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CpaI2F_p.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-dzDnmWq9.css">
13
13
  <link rel="stylesheet" href="/brand-defaults.css">
14
14
  </head>
15
15
  <body>
@@ -1 +1 @@
1
- import{o as e}from"./chunk-CltuBf4Z.js";import{I as t,L as n,U as r,V as i,q as a,z as o}from"./useSubAccountSwitcher-CH9qm2Ad.js";import{k as s}from"./useVoiceRecorder-Cpw3aOSt.js";import{C as c,T as l,w as u}from"./AdminShell-Djg6ndne.js";var d=e(a(),1);function f(e=`admin`){let[t,n]=(0,d.useState)(`loading`),[i,a]=(0,d.useState)(``),[o,c]=(0,d.useState)(``),[u,f]=(0,d.useState)(``),[p,m]=(0,d.useState)(!1),[h,g]=(0,d.useState)(!1),[_,v]=(0,d.useState)(!1),[y,b]=(0,d.useState)(!1),[x,S]=(0,d.useState)(!1),[C,w]=(0,d.useState)(null),[T,E]=(0,d.useState)(null),[D,O]=(0,d.useState)(void 0),[k,A]=(0,d.useState)(null),[j,M]=(0,d.useState)(void 0),[N,P]=(0,d.useState)(null),[F,I]=(0,d.useState)(null),[L,R]=(0,d.useState)(void 0),z=(0,d.useRef)(void 0),[B,V]=(0,d.useState)(!1),[H,U]=(0,d.useState)(!0);(0,d.useEffect)(()=>{typeof window>`u`||fetch(`/api/remote-auth/status`).then(e=>e.ok?e.json():null).then(e=>{e?.configured&&V(!0)}).catch(()=>{})},[]);let W=(0,d.useRef)(null),G=(0,d.useRef)(null);(0,d.useEffect)(()=>{async function e(){let e=null;try{e=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!e)return!1;try{let t=await fetch(`/api/admin/session?session_key=${encodeURIComponent(e)}`);if(t.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return!1}if(!t.ok)return!1;let r=await t.json();w(r.session_key),I(r.sessionId??null),O(r.businessName),A(r.role??null),M(r.userName===void 0?null:r.userName),P(r.avatar??null);let i=s(r.thinkingView);return z.current=i,R(i),n(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function t(r=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check returned ${i.status} after retries`),n(`set-pin`);return}let a=await i.json();if(!a.pin_configured){n(`set-pin`);return}U(!!a.claude_authenticated);let o=!1;try{o=new URLSearchParams(window.location.search).get(`connect`)===`claude`}catch{}if(o){try{let e=new URL(window.location.href);e.searchParams.delete(`connect`),window.history.replaceState(null,``,e.pathname+e.search+e.hash)}catch{}if(!a.claude_authenticated){n(`connect-claude`);return}}if(await e())return;n(`enter-pin`)}catch(e){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check failed:`,e),n(`set-pin`)}}t()},[]),(0,d.useEffect)(()=>{t===`chat`&&C&&fetch(`/api/admin/claude-info?session_key=${encodeURIComponent(C)}`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&E(e)}).catch(()=>{})},[t,C]);let K=(0,d.useRef)(null);(0,d.useEffect)(()=>{if(t!==`chat`)return;let e=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let t=await e.json();U(t.auth_status!==`dead`&&t.auth_status!==`missing`)}}catch{}if(C)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(C)}`);if(e.status!==401)return;let t=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;if(t===`remote-auth-required`){r(`heartbeat`,`/api/admin/session`);return}console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${t}`),K.current?.()}catch{}},300*1e3);return()=>clearInterval(e)},[t,C]),(0,d.useEffect)(()=>{t===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&(U(!0),n(`enter-pin`))}).catch(()=>{})},[t]);async function q(e,t){g(!0);try{let i=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...t?{accountId:t}:{}})});if(!i.ok){let e=await i.json().catch(()=>({}));if(i.status===401&&e?.code===`remote-auth-required`){r(`enter-pin`,`/api/admin/session`);return}f(e.error||`Invalid PIN`);return}let o=await i.json();w(o.session_key),I(o.sessionId??null),O(o.businessName),A(o.role??null),M(o.userName===void 0?null:o.userName),P(o.avatar??null);let c=s(o.thinkingView);z.current=c,R(c);try{sessionStorage.setItem(`maxy-admin-session-key`,o.session_key)}catch{}a(``),n(`chat`)}catch(e){console.error(`[admin] connection error:`,e),f(`Could not connect.`)}finally{g(!1)}}let J=(0,d.useCallback)(async e=>{if(e.preventDefault(),h)return;f(``);let t=o.trim();if(!t){f(`Please enter your name.`);return}if(i.length<4){f(`PIN must be at least 4 characters.`);return}let s=i;g(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:s,name:t})});if(!e.ok){let t=await e.json().catch(()=>({}));if(e.status===401&&t?.code===`remote-auth-required`){r(`set-pin`,`/api/onboarding/set-pin`);return}if(e.status===409){console.log(`[admin] PIN already configured — re-checking health`);try{let e=await fetch(`/api/health`);if(e.ok){let r=await e.json();r.pin_configured&&r.claude_authenticated?n(`enter-pin`):r.pin_configured?n(`connect-claude`):f(t.error||`Failed to set PIN.`)}else n(`enter-pin`)}catch{n(`enter-pin`)}return}f(t.error||`Failed to set PIN.`);return}let i=await fetch(`/api/health`);if((i.ok?await i.json():null)?.claude_authenticated){await q(s);return}a(``),n(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),f(`Could not connect.`)}finally{g(!1)}},[i,h,o]),Y=(0,d.useCallback)(async e=>{e.preventDefault(),f(``),await q(i)},[i]),X=(0,d.useCallback)(async()=>{S(!0);try{if(!await l())return console.warn(`[admin-ui] claude-disconnect not verified — credentials may persist; staying put`),!1;U(!1),w(null),A(null),M(void 0),P(null);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return n(`connect-claude`),!0}finally{S(!1)}},[]),Z=(0,d.useCallback)(()=>{w(null),A(null),M(void 0),P(null);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}a(``),f(``),n(`enter-pin`)},[]);return(0,d.useEffect)(()=>{K.current=Z},[Z]),{appState:t,setAppState:n,pin:i,setPin:a,operatorName:o,setOperatorName:c,pinError:u,setPinError:f,showPin:p,setShowPin:m,pinLoading:h,authPolling:_,setAuthPolling:v,authLoading:y,setAuthLoading:b,disconnecting:x,cacheKey:C,setCacheKey:w,claudeInfo:T,setClaudeInfo:E,businessName:D,role:k,userName:j,userAvatar:N,sessionId:F,setSessionId:I,expandAll:L,setExpandAll:R,expandAllDefaultRef:z,remoteAuthEnabled:B,claudeConnected:H,pinInputRef:W,setPinFormRef:G,handleSetPin:J,handleLogin:Y,handleDisconnect:X,handleLogout:Z}}var p=i();function m({inputRef:e,value:t,onChange:n,onComplete:r,showPin:i,autoFocus:a}){let o=(0,d.useRef)([]);function s(e,r){r.key===`Backspace`?(r.preventDefault(),t[e]?n(t.slice(0,e)+t.slice(e+1)):e>0&&(n(t.slice(0,e-1)+t.slice(e)),o.current[e-1]?.focus())):r.key===`ArrowLeft`&&e>0?o.current[e-1]?.focus():r.key===`ArrowRight`&&e<5?o.current[e+1]?.focus():r.key===`Enter`&&(r.preventDefault(),r.currentTarget.form?.requestSubmit())}function c(e,i){let a=i.nativeEvent.data;if(!a||!/^\d$/.test(a))return;let s=t.split(``);for(s[e]=a;s.length<e;)s.push(``);let c=s.join(``).replace(/\D/g,``).slice(0,6);n(c),c.length===6?r?.(c):e<5&&o.current[e+1]?.focus()}function l(e){e.preventDefault();let t=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,6);t&&(n(t),t.length===6?r?.(t):o.current[t.length]?.focus())}return(0,p.jsx)(`div`,{className:`pin-field`,children:Array.from({length:6}).map((n,r)=>(0,p.jsx)(`input`,{ref:t=>{o.current[r]=t,r===0&&e&&(e.current=t)},type:`text`,inputMode:`numeric`,className:`pin-box${t[r]?` pin-box-filled`:``}`,value:t[r]?i?t[r]:`•`:``,onKeyDown:e=>s(r,e),onInput:e=>c(r,e),onPaste:l,onFocus:e=>e.target.select(),autoFocus:a&&r===0,autoComplete:`off`,maxLength:1,"aria-label":`PIN digit ${r+1}`},r))})}function h(e){let{pin:t,setPin:r,showPin:i,setShowPin:a,pinLoading:s,pinError:l,pinInputRef:d,setPinFormRef:f,onSubmit:h,operatorName:g,setOperatorName:_}=e;return(0,p.jsx)(`div`,{className:`connect-page`,children:(0,p.jsxs)(`div`,{className:`connect-content`,children:[(0,p.jsx)(`img`,{src:o,alt:n.productName,className:`connect-logo connect-logo--maxy`}),!n.logoContainsName&&(0,p.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,n.productName]}),(0,p.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,n.productName,` who you are, then choose a PIN.`]}),(0,p.jsxs)(`form`,{ref:f,onSubmit:h,className:`connect-pin-form`,children:[(0,p.jsxs)(`div`,{className:`pin-input-row`,children:[(0,p.jsx)(`input`,{type:`text`,className:`connect-name-input`,placeholder:`Your full name`,value:g,onChange:e=>_(e.target.value),autoComplete:`name`,autoFocus:!0,required:!0,"aria-label":`Your full name`}),(0,p.jsx)(`div`,{style:{width:38,flexShrink:0},"aria-hidden":`true`})]}),(0,p.jsxs)(`div`,{className:`pin-input-row`,children:[(0,p.jsx)(m,{inputRef:d,value:t,onChange:r,onComplete:()=>{},showPin:i}),(0,p.jsx)(c,{variant:`send`,type:`submit`,disabled:!t||!g.trim(),loading:s,"aria-label":`Set PIN`,children:(0,p.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,p.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,p.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,p.jsx)(u,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`})]}),l&&(0,p.jsx)(`p`,{className:`admin-pin-error`,children:l})]})})}function g(e){let{pin:t,setPin:r,showPin:i,setShowPin:a,pinLoading:s,pinError:l,pinInputRef:d,onSubmit:f,remoteAuthEnabled:h,onSignOutRemote:g}=e;return(0,p.jsxs)(`div`,{className:`connect-page`,children:[h&&g&&(0,p.jsx)(`button`,{type:`button`,className:`connect-signout`,onClick:g,children:`Sign out`}),(0,p.jsxs)(`div`,{className:`connect-content`,children:[(0,p.jsx)(`img`,{src:o,alt:n.productName,className:`connect-logo connect-logo--maxy`}),!n.logoContainsName&&(0,p.jsx)(`h1`,{className:`connect-title`,children:n.productName}),(0,p.jsxs)(`form`,{onSubmit:f,className:`connect-pin-form`,children:[(0,p.jsxs)(`div`,{className:`pin-input-row`,children:[(0,p.jsx)(m,{inputRef:d,value:t,onChange:r,onComplete:()=>{},showPin:i,autoFocus:!0}),(0,p.jsx)(c,{variant:`send`,type:`submit`,disabled:!t,loading:s,children:(0,p.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,p.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,p.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,p.jsx)(`div`,{className:`pin-options`,children:(0,p.jsx)(u,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`})})]}),l&&(0,p.jsx)(`p`,{className:`admin-pin-error`,children:l})]})]})}function _(e){let{authPolling:t,setAuthPolling:r,authLoading:i,setAuthLoading:a,pinError:s,setPinError:l,setAppState:u}=e,[f,m]=(0,d.useState)(!1),[h,g]=(0,d.useState)(!1),[_,v]=(0,d.useState)(``),[y,b]=(0,d.useState)(``),[x,S]=(0,d.useState)(``);async function C(){S(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`paste-code`,code:y})})).json();e.accepted?(S(`Code submitted. Finishing sign-in…`),b(``)):S(e.error||`Could not submit code.`)}catch(e){console.error(`[admin] paste-code error:`,e),S(`Could not submit code.`)}}async function w(){g(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`launch-browser`})})).json();e.launched?m(!0):e.error&&l(e.error)}catch(e){console.error(`[admin] browser launch error:`,e),l(`Could not launch browser.`)}g(!1)}async function T(){a(!0),l(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){r(!0),m(!0),a(!1),v(e.transport||``);for(let e=0;e<120;e++)if(await new Promise(e=>setTimeout(e,2e3)),(await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`wait`})})).json()).authenticated){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),u(`enter-pin`);return}l(`Timed out waiting for sign-in. Try again.`),r(!1)}else e.error&&l(e.error)}catch(e){console.error(`[admin] auth flow error:`,e),l(`Could not start auth flow.`)}a(!1)}async function E(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),r(!1),l(``)}return t||f?(0,p.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100dvh`,overflow:`auto`},children:[(0,p.jsxs)(`header`,{className:`chat-header`,style:{paddingBottom:`12px`,flexShrink:0,position:`relative`,maxWidth:`680px`,width:`100%`,margin:`0 auto`,padding:`24px 20px 12px`},children:[t?(0,p.jsx)(`button`,{onClick:E,style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Cancel`,children:`✕`}):(0,p.jsx)(`button`,{onClick:()=>m(!1),style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Close browser`,children:`✕`}),(0,p.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`chat-logo`}),(0,p.jsx)(`h1`,{className:`chat-tagline`,children:`Connect Claude`}),(0,p.jsx)(`p`,{className:`chat-intro`,children:t?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!t&&(0,p.jsx)(`div`,{style:{marginTop:`12px`},children:(0,p.jsx)(c,{variant:`primary`,onClick:T,disabled:i,children:i?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})}),t&&_===`native`&&(0,p.jsxs)(`div`,{style:{marginTop:`14px`,maxWidth:`420px`,margin:`14px auto 0`,display:`flex`,flexDirection:`column`,gap:`8px`},children:[(0,p.jsx)(`label`,{style:{fontSize:`12px`,color:`#999`,lineHeight:1.4},children:`If the browser didn't finish sign-in, paste the code or full redirect URL from Claude's page:`}),(0,p.jsxs)(`div`,{style:{display:`flex`,gap:`8px`},children:[(0,p.jsx)(`input`,{type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Paste code or redirect URL`,style:{flex:1,padding:`8px 10px`,fontSize:`13px`,border:`1px solid #ccc`,borderRadius:`6px`}}),(0,p.jsx)(c,{variant:`primary`,onClick:C,disabled:!y.trim(),children:`Submit`})]}),x&&(0,p.jsx)(`p`,{style:{fontSize:`12px`,color:`#999`,margin:0},children:x})]})]}),(0,p.jsx)(`div`,{style:{flex:1,display:`flex`,flexDirection:`column`,minHeight:0,gap:`10px`,padding:`0 0 16px`},children:(0,p.jsx)(`iframe`,{src:`/vnc-viewer.html`,style:{flex:1,width:`100%`,minHeight:0,border:`none`,background:`#111`,display:`block`},title:`Claude Sign-in`})}),s&&(0,p.jsx)(`p`,{className:`admin-pin-error`,style:{textAlign:`center`,padding:`0 20px 16px`},children:s})]}):(0,p.jsx)(`div`,{className:`connect-page`,children:(0,p.jsxs)(`div`,{className:`connect-content`,children:[(0,p.jsxs)(`div`,{className:`connect-logos`,children:[(0,p.jsx)(`div`,{className:`connect-logo-wrap`,children:(0,p.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`connect-logo`})}),(0,p.jsx)(`svg`,{className:`connect-arrow`,viewBox:`0 0 48 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:(0,p.jsx)(`path`,{d:`M0 12h44m0 0l-8-8m8 8l-8 8`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,p.jsxs)(`div`,{className:`connect-logo-wrap`,children:[(0,p.jsx)(`img`,{src:o,alt:n.productName,className:`connect-logo connect-logo--maxy`}),!n.logoContainsName&&(0,p.jsx)(`span`,{className:`connect-logo-label`,children:n.productName})]})]}),(0,p.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,n.productName]}),(0,p.jsx)(`p`,{className:`connect-subtitle`,children:`Sign in with your Anthropic account to get started.`}),(0,p.jsx)(c,{variant:`primary`,onClick:T,disabled:i,children:i?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`}),(0,p.jsx)(`p`,{style:{marginTop:`6px`,fontSize:`11px`,color:`#999`,maxWidth:`300px`,textAlign:`center`,lineHeight:`1.4`},children:`First time? You may need to sign into your email and Anthropic account in the browser before connecting.`}),(0,p.jsx)(`button`,{onClick:w,disabled:h,style:{marginTop:`12px`,background:`none`,border:`none`,color:`var(--color-primary, #666)`,fontSize:`13px`,cursor:`pointer`,textDecoration:`underline`,textUnderlineOffset:`3px`},children:h?`Launching…`:`Open browser first`}),s&&(0,p.jsx)(`p`,{className:`admin-pin-error`,children:s})]})})}function v({auth:e}){return e.appState===`loading`?(0,p.jsx)(t,{surface:`gate`}):e.appState===`set-pin`?(0,p.jsx)(h,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,setPinFormRef:e.setPinFormRef,onSubmit:e.handleSetPin,operatorName:e.operatorName,setOperatorName:e.setOperatorName}):e.appState===`connect-claude`?(0,p.jsx)(_,{authPolling:e.authPolling,setAuthPolling:e.setAuthPolling,authLoading:e.authLoading,setAuthLoading:e.setAuthLoading,pinError:e.pinError,setPinError:e.setPinError,setAppState:e.setAppState}):e.appState===`enter-pin`?(0,p.jsx)(g,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,onSubmit:e.handleLogin,remoteAuthEnabled:e.remoteAuthEnabled,onSignOutRemote:()=>{console.info(`[admin-ui] remote-auth sign-out → /__remote-auth/logout`),window.location.href=`/__remote-auth/logout`}}):null}export{f as n,v as t};
1
+ import{o as e}from"./chunk-CltuBf4Z.js";import{I as t,L as n,U as r,V as i,q as a,z as o}from"./useSubAccountSwitcher-BuUYMDWl.js";import{k as s}from"./useVoiceRecorder-BGqV5R6u.js";import{E as c,T as l,w as u}from"./AdminShell-CpaI2F_p.js";var d=e(a(),1);function f(e=`admin`){let[t,n]=(0,d.useState)(`loading`),[i,a]=(0,d.useState)(``),[o,l]=(0,d.useState)(``),[u,f]=(0,d.useState)(``),[p,m]=(0,d.useState)(!1),[h,g]=(0,d.useState)(!1),[_,v]=(0,d.useState)(!1),[y,b]=(0,d.useState)(!1),[x,S]=(0,d.useState)(!1),[C,w]=(0,d.useState)(null),[T,E]=(0,d.useState)(null),[D,O]=(0,d.useState)(void 0),[k,A]=(0,d.useState)(null),[j,M]=(0,d.useState)(void 0),[N,P]=(0,d.useState)(null),[F,I]=(0,d.useState)(null),[L,R]=(0,d.useState)(void 0),z=(0,d.useRef)(void 0),[B,V]=(0,d.useState)(!1),[H,U]=(0,d.useState)(!0);(0,d.useEffect)(()=>{typeof window>`u`||fetch(`/api/remote-auth/status`).then(e=>e.ok?e.json():null).then(e=>{e?.configured&&V(!0)}).catch(()=>{})},[]);let W=(0,d.useRef)(null),G=(0,d.useRef)(null);(0,d.useEffect)(()=>{async function e(){let e=null;try{e=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!e)return!1;try{let t=await fetch(`/api/admin/session?session_key=${encodeURIComponent(e)}`);if(t.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return!1}if(!t.ok)return!1;let r=await t.json();w(r.session_key),I(r.sessionId??null),O(r.businessName),A(r.role??null),M(r.userName===void 0?null:r.userName),P(r.avatar??null);let i=s(r.thinkingView);return z.current=i,R(i),n(`chat`),!0}catch(e){return console.error(`[admin] session restore failed:`,e),!1}}async function t(r=2){try{let i=await fetch(`/api/health`);if(!i.ok){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check returned ${i.status} after retries`),n(`set-pin`);return}let a=await i.json();if(!a.pin_configured){n(`set-pin`);return}U(!!a.claude_authenticated);let o=!1;try{o=new URLSearchParams(window.location.search).get(`connect`)===`claude`}catch{}if(o){try{let e=new URL(window.location.href);e.searchParams.delete(`connect`),window.history.replaceState(null,``,e.pathname+e.search+e.hash)}catch{}if(!a.claude_authenticated){n(`connect-claude`);return}}if(await e())return;n(`enter-pin`)}catch(e){if(r>0)return await new Promise(e=>setTimeout(e,1500)),t(r-1);console.error(`[admin] health check failed:`,e),n(`set-pin`)}}t()},[]),(0,d.useEffect)(()=>{t===`chat`&&C&&fetch(`/api/admin/claude-info?session_key=${encodeURIComponent(C)}`).then(e=>{if(e.ok)return e.json()}).then(e=>{e&&E(e)}).catch(()=>{})},[t,C]);let K=(0,d.useRef)(null);(0,d.useEffect)(()=>{if(t!==`chat`)return;let e=setInterval(async()=>{try{let e=await fetch(`/api/health`);if(e.ok){let t=await e.json();U(t.auth_status!==`dead`&&t.auth_status!==`missing`)}}catch{}if(C)try{let e=await fetch(`/api/admin/session?session_key=${encodeURIComponent(C)}`);if(e.status!==401)return;let t=(await e.clone().json().catch(()=>null))?.code??`unknown-401`;if(t===`remote-auth-required`){r(`heartbeat`,`/api/admin/session`);return}console.warn(`[admin-auth] outcome=heartbeat-detected-expiry code=${t}`),K.current?.()}catch{}},300*1e3);return()=>clearInterval(e)},[t,C]),(0,d.useEffect)(()=>{t===`connect-claude`&&fetch(`/api/health`).then(e=>e.ok?e.json():null).then(e=>{e?.claude_authenticated&&(U(!0),n(`enter-pin`))}).catch(()=>{})},[t]);async function q(e,t){g(!0);try{let i=await fetch(`/api/admin/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:e,...t?{accountId:t}:{}})});if(!i.ok){let e=await i.json().catch(()=>({}));if(i.status===401&&e?.code===`remote-auth-required`){r(`enter-pin`,`/api/admin/session`);return}f(e.error||`Invalid PIN`);return}let o=await i.json();w(o.session_key),I(o.sessionId??null),O(o.businessName),A(o.role??null),M(o.userName===void 0?null:o.userName),P(o.avatar??null);let c=s(o.thinkingView);z.current=c,R(c);try{sessionStorage.setItem(`maxy-admin-session-key`,o.session_key)}catch{}a(``),n(`chat`)}catch(e){console.error(`[admin] connection error:`,e),f(`Could not connect.`)}finally{g(!1)}}let J=(0,d.useCallback)(async e=>{if(e.preventDefault(),h)return;f(``);let t=o.trim();if(!t){f(`Please enter your name.`);return}if(i.length<4){f(`PIN must be at least 4 characters.`);return}let s=i;g(!0);try{let e=await fetch(`/api/onboarding/set-pin`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({pin:s,name:t})});if(!e.ok){let t=await e.json().catch(()=>({}));if(e.status===401&&t?.code===`remote-auth-required`){r(`set-pin`,`/api/onboarding/set-pin`);return}if(e.status===409){console.log(`[admin] PIN already configured — re-checking health`);try{let e=await fetch(`/api/health`);if(e.ok){let r=await e.json();r.pin_configured&&r.claude_authenticated?n(`enter-pin`):r.pin_configured?n(`connect-claude`):f(t.error||`Failed to set PIN.`)}else n(`enter-pin`)}catch{n(`enter-pin`)}return}f(t.error||`Failed to set PIN.`);return}let i=await fetch(`/api/health`);if((i.ok?await i.json():null)?.claude_authenticated){await q(s);return}a(``),n(`connect-claude`)}catch(e){console.error(`[admin] connection error:`,e),f(`Could not connect.`)}finally{g(!1)}},[i,h,o]),Y=(0,d.useCallback)(async e=>{e.preventDefault(),f(``),await q(i)},[i]),X=(0,d.useCallback)(async()=>{S(!0);try{if(!await c())return console.warn(`[admin-ui] claude-disconnect not verified — credentials may persist; staying put`),!1;U(!1),w(null),A(null),M(void 0),P(null);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}return n(`connect-claude`),!0}finally{S(!1)}},[]),Z=(0,d.useCallback)(()=>{w(null),A(null),M(void 0),P(null);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}a(``),f(``),n(`enter-pin`)},[]);return(0,d.useEffect)(()=>{K.current=Z},[Z]),{appState:t,setAppState:n,pin:i,setPin:a,operatorName:o,setOperatorName:l,pinError:u,setPinError:f,showPin:p,setShowPin:m,pinLoading:h,authPolling:_,setAuthPolling:v,authLoading:y,setAuthLoading:b,disconnecting:x,cacheKey:C,setCacheKey:w,claudeInfo:T,setClaudeInfo:E,businessName:D,role:k,userName:j,userAvatar:N,sessionId:F,setSessionId:I,expandAll:L,setExpandAll:R,expandAllDefaultRef:z,remoteAuthEnabled:B,claudeConnected:H,pinInputRef:W,setPinFormRef:G,handleSetPin:J,handleLogin:Y,handleDisconnect:X,handleLogout:Z}}var p=i();function m({inputRef:e,value:t,onChange:n,onComplete:r,showPin:i,autoFocus:a}){let o=(0,d.useRef)([]);function s(e,r){r.key===`Backspace`?(r.preventDefault(),t[e]?n(t.slice(0,e)+t.slice(e+1)):e>0&&(n(t.slice(0,e-1)+t.slice(e)),o.current[e-1]?.focus())):r.key===`ArrowLeft`&&e>0?o.current[e-1]?.focus():r.key===`ArrowRight`&&e<5?o.current[e+1]?.focus():r.key===`Enter`&&(r.preventDefault(),r.currentTarget.form?.requestSubmit())}function c(e,i){let a=i.nativeEvent.data;if(!a||!/^\d$/.test(a))return;let s=t.split(``);for(s[e]=a;s.length<e;)s.push(``);let c=s.join(``).replace(/\D/g,``).slice(0,6);n(c),c.length===6?r?.(c):e<5&&o.current[e+1]?.focus()}function l(e){e.preventDefault();let t=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,6);t&&(n(t),t.length===6?r?.(t):o.current[t.length]?.focus())}return(0,p.jsx)(`div`,{className:`pin-field`,children:Array.from({length:6}).map((n,r)=>(0,p.jsx)(`input`,{ref:t=>{o.current[r]=t,r===0&&e&&(e.current=t)},type:`text`,inputMode:`numeric`,className:`pin-box${t[r]?` pin-box-filled`:``}`,value:t[r]?i?t[r]:`•`:``,onKeyDown:e=>s(r,e),onInput:e=>c(r,e),onPaste:l,onFocus:e=>e.target.select(),autoFocus:a&&r===0,autoComplete:`off`,maxLength:1,"aria-label":`PIN digit ${r+1}`},r))})}function h(e){let{pin:t,setPin:r,showPin:i,setShowPin:a,pinLoading:s,pinError:c,pinInputRef:d,setPinFormRef:f,onSubmit:h,operatorName:g,setOperatorName:_}=e;return(0,p.jsx)(`div`,{className:`connect-page`,children:(0,p.jsxs)(`div`,{className:`connect-content`,children:[(0,p.jsx)(`img`,{src:o,alt:n.productName,className:`connect-logo connect-logo--maxy`}),!n.logoContainsName&&(0,p.jsxs)(`h1`,{className:`connect-title`,children:[`Welcome to `,n.productName]}),(0,p.jsxs)(`p`,{className:`connect-subtitle`,children:[`Tell `,n.productName,` who you are, then choose a PIN.`]}),(0,p.jsxs)(`form`,{ref:f,onSubmit:h,className:`connect-pin-form`,children:[(0,p.jsxs)(`div`,{className:`pin-input-row`,children:[(0,p.jsx)(`input`,{type:`text`,className:`connect-name-input`,placeholder:`Your full name`,value:g,onChange:e=>_(e.target.value),autoComplete:`name`,autoFocus:!0,required:!0,"aria-label":`Your full name`}),(0,p.jsx)(`div`,{style:{width:38,flexShrink:0},"aria-hidden":`true`})]}),(0,p.jsxs)(`div`,{className:`pin-input-row`,children:[(0,p.jsx)(m,{inputRef:d,value:t,onChange:r,onComplete:()=>{},showPin:i}),(0,p.jsx)(u,{variant:`send`,type:`submit`,disabled:!t||!g.trim(),loading:s,"aria-label":`Set PIN`,children:(0,p.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,p.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,p.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,p.jsx)(l,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`})]}),c&&(0,p.jsx)(`p`,{className:`admin-pin-error`,children:c})]})})}function g(e){let{pin:t,setPin:r,showPin:i,setShowPin:a,pinLoading:s,pinError:c,pinInputRef:d,onSubmit:f,remoteAuthEnabled:h,onSignOutRemote:g}=e;return(0,p.jsxs)(`div`,{className:`connect-page`,children:[h&&g&&(0,p.jsx)(`button`,{type:`button`,className:`connect-signout`,onClick:g,children:`Sign out`}),(0,p.jsxs)(`div`,{className:`connect-content`,children:[(0,p.jsx)(`img`,{src:o,alt:n.productName,className:`connect-logo connect-logo--maxy`}),!n.logoContainsName&&(0,p.jsx)(`h1`,{className:`connect-title`,children:n.productName}),(0,p.jsxs)(`form`,{onSubmit:f,className:`connect-pin-form`,children:[(0,p.jsxs)(`div`,{className:`pin-input-row`,children:[(0,p.jsx)(m,{inputRef:d,value:t,onChange:r,onComplete:()=>{},showPin:i,autoFocus:!0}),(0,p.jsx)(u,{variant:`send`,type:`submit`,disabled:!t,loading:s,children:(0,p.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,p.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,p.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,p.jsx)(`div`,{className:`pin-options`,children:(0,p.jsx)(l,{checked:i,onChange:()=>a(e=>!e),label:`Show PIN`})})]}),c&&(0,p.jsx)(`p`,{className:`admin-pin-error`,children:c})]})]})}function _(e){let{authPolling:t,setAuthPolling:r,authLoading:i,setAuthLoading:a,pinError:s,setPinError:c,setAppState:l}=e,[f,m]=(0,d.useState)(!1),[h,g]=(0,d.useState)(!1),[_,v]=(0,d.useState)(``),[y,b]=(0,d.useState)(``),[x,S]=(0,d.useState)(``);async function C(){S(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`paste-code`,code:y})})).json();e.accepted?(S(`Code submitted. Finishing sign-in…`),b(``)):S(e.error||`Could not submit code.`)}catch(e){console.error(`[admin] paste-code error:`,e),S(`Could not submit code.`)}}async function w(){g(!0),c(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`launch-browser`})})).json();e.launched?m(!0):e.error&&c(e.error)}catch(e){console.error(`[admin] browser launch error:`,e),c(`Could not launch browser.`)}g(!1)}async function T(){a(!0),c(``);try{let e=await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`})).json();if(e.started){r(!0),m(!0),a(!1),v(e.transport||``);for(let e=0;e<120;e++)if(await new Promise(e=>setTimeout(e,2e3)),(await(await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`wait`})})).json()).authenticated){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),l(`enter-pin`);return}c(`Timed out waiting for sign-in. Try again.`),r(!1)}else e.error&&c(e.error)}catch(e){console.error(`[admin] auth flow error:`,e),c(`Could not start auth flow.`)}a(!1)}async function E(){await fetch(`/api/onboarding/claude-auth`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:`stop`})}),r(!1),c(``)}return t||f?(0,p.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100dvh`,overflow:`auto`},children:[(0,p.jsxs)(`header`,{className:`chat-header`,style:{paddingBottom:`12px`,flexShrink:0,position:`relative`,maxWidth:`680px`,width:`100%`,margin:`0 auto`,padding:`24px 20px 12px`},children:[t?(0,p.jsx)(`button`,{onClick:E,style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Cancel`,children:`✕`}):(0,p.jsx)(`button`,{onClick:()=>m(!1),style:{position:`absolute`,top:`12px`,right:`12px`,background:`none`,border:`none`,color:`#999`,fontSize:`13px`,cursor:`pointer`,padding:`4px 8px`},"aria-label":`Close browser`,children:`✕`}),(0,p.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`chat-logo`}),(0,p.jsx)(`h1`,{className:`chat-tagline`,children:`Connect Claude`}),(0,p.jsx)(`p`,{className:`chat-intro`,children:t?`Sign in and authorize in the browser below.`:`Open your email or prepare your accounts, then sign in.`}),!t&&(0,p.jsx)(`div`,{style:{marginTop:`12px`},children:(0,p.jsx)(u,{variant:`primary`,onClick:T,disabled:i,children:i?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`})}),t&&_===`native`&&(0,p.jsxs)(`div`,{style:{marginTop:`14px`,maxWidth:`420px`,margin:`14px auto 0`,display:`flex`,flexDirection:`column`,gap:`8px`},children:[(0,p.jsx)(`label`,{style:{fontSize:`12px`,color:`#999`,lineHeight:1.4},children:`If the browser didn't finish sign-in, paste the code or full redirect URL from Claude's page:`}),(0,p.jsxs)(`div`,{style:{display:`flex`,gap:`8px`},children:[(0,p.jsx)(`input`,{type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Paste code or redirect URL`,style:{flex:1,padding:`8px 10px`,fontSize:`13px`,border:`1px solid #ccc`,borderRadius:`6px`}}),(0,p.jsx)(u,{variant:`primary`,onClick:C,disabled:!y.trim(),children:`Submit`})]}),x&&(0,p.jsx)(`p`,{style:{fontSize:`12px`,color:`#999`,margin:0},children:x})]})]}),(0,p.jsx)(`div`,{style:{flex:1,display:`flex`,flexDirection:`column`,minHeight:0,gap:`10px`,padding:`0 0 16px`},children:(0,p.jsx)(`iframe`,{src:`/vnc-viewer.html`,style:{flex:1,width:`100%`,minHeight:0,border:`none`,background:`#111`,display:`block`},title:`Claude Sign-in`})}),s&&(0,p.jsx)(`p`,{className:`admin-pin-error`,style:{textAlign:`center`,padding:`0 20px 16px`},children:s})]}):(0,p.jsx)(`div`,{className:`connect-page`,children:(0,p.jsxs)(`div`,{className:`connect-content`,children:[(0,p.jsxs)(`div`,{className:`connect-logos`,children:[(0,p.jsx)(`div`,{className:`connect-logo-wrap`,children:(0,p.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`connect-logo`})}),(0,p.jsx)(`svg`,{className:`connect-arrow`,viewBox:`0 0 48 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:(0,p.jsx)(`path`,{d:`M0 12h44m0 0l-8-8m8 8l-8 8`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,p.jsxs)(`div`,{className:`connect-logo-wrap`,children:[(0,p.jsx)(`img`,{src:o,alt:n.productName,className:`connect-logo connect-logo--maxy`}),!n.logoContainsName&&(0,p.jsx)(`span`,{className:`connect-logo-label`,children:n.productName})]})]}),(0,p.jsxs)(`h1`,{className:`connect-title`,children:[`Connect Claude to power `,n.productName]}),(0,p.jsx)(`p`,{className:`connect-subtitle`,children:`Sign in with your Anthropic account to get started.`}),(0,p.jsx)(u,{variant:`primary`,onClick:T,disabled:i,children:i?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`span`,{className:`spin`,style:{display:`inline-block`},children:`✱`}),` Connecting…`]}):`Sign in to Claude`}),(0,p.jsx)(`p`,{style:{marginTop:`6px`,fontSize:`11px`,color:`#999`,maxWidth:`300px`,textAlign:`center`,lineHeight:`1.4`},children:`First time? You may need to sign into your email and Anthropic account in the browser before connecting.`}),(0,p.jsx)(`button`,{onClick:w,disabled:h,style:{marginTop:`12px`,background:`none`,border:`none`,color:`var(--color-primary, #666)`,fontSize:`13px`,cursor:`pointer`,textDecoration:`underline`,textUnderlineOffset:`3px`},children:h?`Launching…`:`Open browser first`}),s&&(0,p.jsx)(`p`,{className:`admin-pin-error`,children:s})]})})}function v({auth:e}){return e.appState===`loading`?(0,p.jsx)(t,{surface:`gate`}):e.appState===`set-pin`?(0,p.jsx)(h,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,setPinFormRef:e.setPinFormRef,onSubmit:e.handleSetPin,operatorName:e.operatorName,setOperatorName:e.setOperatorName}):e.appState===`connect-claude`?(0,p.jsx)(_,{authPolling:e.authPolling,setAuthPolling:e.setAuthPolling,authLoading:e.authLoading,setAuthLoading:e.setAuthLoading,pinError:e.pinError,setPinError:e.setPinError,setAppState:e.setAppState}):e.appState===`enter-pin`?(0,p.jsx)(g,{pin:e.pin,setPin:e.setPin,showPin:e.showPin,setShowPin:e.setShowPin,pinLoading:e.pinLoading,pinError:e.pinError,pinInputRef:e.pinInputRef,onSubmit:e.handleLogin,remoteAuthEnabled:e.remoteAuthEnabled,onSignOutRemote:()=>{console.info(`[admin-ui] remote-auth sign-out → /__remote-auth/logout`),window.location.href=`/__remote-auth/logout`}}):null}export{f as n,v as t};