@rubytech/create-maxy-code 0.1.600 → 0.1.602

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 (274) hide show
  1. package/dist/__tests__/email-sampler-unit.test.js +31 -0
  2. package/dist/index.js +18 -2
  3. package/dist/port-resolution.js +24 -0
  4. package/package.json +1 -1
  5. package/payload/platform/plugins/admin/hooks/video-frames-inject.sh +141 -0
  6. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +5 -1
  7. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +10 -0
  8. package/payload/platform/plugins/docs/references/admin-ui.md +2 -0
  9. package/payload/platform/plugins/docs/references/telegram-guide.md +2 -0
  10. package/payload/platform/plugins/email/PLUGIN.md +7 -1
  11. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +27 -0
  12. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  13. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +78 -0
  14. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  15. package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/sample-mailbox.test.d.ts +2 -0
  16. package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/sample-mailbox.test.d.ts.map +1 -0
  17. package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/sample-mailbox.test.js +96 -0
  18. package/payload/platform/plugins/email/mcp/dist/sampler/__tests__/sample-mailbox.test.js.map +1 -0
  19. package/payload/platform/plugins/email/mcp/dist/sampler/main.d.ts +2 -0
  20. package/payload/platform/plugins/email/mcp/dist/sampler/main.d.ts.map +1 -0
  21. package/payload/platform/plugins/email/mcp/dist/sampler/main.js +75 -0
  22. package/payload/platform/plugins/email/mcp/dist/sampler/main.js.map +1 -0
  23. package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.d.ts +48 -0
  24. package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.d.ts.map +1 -0
  25. package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.js +77 -0
  26. package/payload/platform/plugins/email/mcp/dist/sampler/sample-mailbox.js.map +1 -0
  27. package/payload/platform/plugins/scheduling/PLUGIN.md +2 -0
  28. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js +67 -1
  29. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js.map +1 -1
  30. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js +89 -1
  31. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js.map +1 -1
  32. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/outage-marker.test.d.ts +2 -0
  33. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/outage-marker.test.d.ts.map +1 -0
  34. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/outage-marker.test.js +160 -0
  35. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/outage-marker.test.js.map +1 -0
  36. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.js +16 -0
  37. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/routine-run.test.js.map +1 -1
  38. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts +31 -1
  39. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts.map +1 -1
  40. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js +42 -4
  41. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js.map +1 -1
  42. package/payload/platform/plugins/scheduling/mcp/dist/lib/outage-marker.d.ts +101 -0
  43. package/payload/platform/plugins/scheduling/mcp/dist/lib/outage-marker.d.ts.map +1 -0
  44. package/payload/platform/plugins/scheduling/mcp/dist/lib/outage-marker.js +130 -0
  45. package/payload/platform/plugins/scheduling/mcp/dist/lib/outage-marker.js.map +1 -0
  46. package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts +10 -1
  47. package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts.map +1 -1
  48. package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.js.map +1 -1
  49. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts +24 -0
  50. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts.map +1 -1
  51. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js +89 -0
  52. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js.map +1 -1
  53. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +67 -1
  54. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
  55. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js +31 -0
  56. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js.map +1 -1
  57. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +10 -1
  58. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  59. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +46 -1
  60. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  61. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +72 -4
  62. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  63. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js +81 -4
  64. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map +1 -1
  65. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts +50 -0
  66. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts.map +1 -1
  67. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js +48 -7
  68. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js.map +1 -1
  69. package/payload/platform/plugins/telegram/PLUGIN.md +4 -0
  70. package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin-registry.test.js +33 -1
  71. package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin-registry.test.js.map +1 -1
  72. package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.js +166 -1
  73. package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.js.map +1 -1
  74. package/payload/platform/plugins/telegram/mcp/dist/index.js +39 -14
  75. package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
  76. package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.d.ts +95 -0
  77. package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.d.ts.map +1 -1
  78. package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.js +125 -0
  79. package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.js.map +1 -1
  80. package/payload/platform/scripts/logs-read.sh +18 -3
  81. package/payload/platform/services/telegram-channel/dist/notification.d.ts +6 -0
  82. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  83. package/payload/platform/services/telegram-channel/dist/notification.js +12 -5
  84. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  85. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +5 -0
  86. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  87. package/payload/platform/services/whatsapp-channel/dist/notification.js +9 -3
  88. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  89. package/payload/platform/templates/account-settings.json +6 -0
  90. package/payload/server/chunk-CYU75QAV.js +377 -0
  91. package/payload/server/{chunk-34FPJYHN.js → chunk-GI5AVCRG.js} +87 -146
  92. package/payload/server/chunk-KUVNCAE4.js +77 -0
  93. package/payload/server/{manager-7BXVB76I.js → manager-VDHT3YYI.js} +2 -1
  94. package/payload/server/maxy-edge.js +33 -1
  95. package/payload/server/public/activity.html +6 -6
  96. package/payload/server/public/agents.html +5 -5
  97. package/payload/server/public/assets/{AdminLoginScreens-B3W6J6Bl.js → AdminLoginScreens-CaQqLuxZ.js} +1 -1
  98. package/payload/server/public/assets/AdminLoginScreens-CaQqLuxZ.js.br +0 -0
  99. package/payload/server/public/assets/AdminLoginScreens-CaQqLuxZ.js.gz +0 -0
  100. package/payload/server/public/assets/{AdminShell-C3R-vMZ5.js → AdminShell-D8WTrqem.js} +1 -1
  101. package/payload/server/public/assets/AdminShell-D8WTrqem.js.br +0 -0
  102. package/payload/server/public/assets/AdminShell-D8WTrqem.js.gz +0 -0
  103. package/payload/server/public/assets/{activity-tzv68iBs.js → activity-B3fiJrC2.js} +1 -1
  104. package/payload/server/public/assets/activity-B3fiJrC2.js.br +0 -0
  105. package/payload/server/public/assets/activity-B3fiJrC2.js.gz +0 -0
  106. package/payload/server/public/assets/admin-ouF-DflP.js +1 -0
  107. package/payload/server/public/assets/admin-ouF-DflP.js.br +0 -0
  108. package/payload/server/public/assets/admin-ouF-DflP.js.gz +0 -0
  109. package/payload/server/public/assets/{agents-DUZfeY3X.js → agents-C8RSXHdh.js} +1 -1
  110. package/payload/server/public/assets/agents-C8RSXHdh.js.br +0 -0
  111. package/payload/server/public/assets/agents-C8RSXHdh.js.gz +0 -0
  112. package/payload/server/public/assets/{browser-DwLaXqjO.js → browser-Dbv6-Rag.js} +1 -1
  113. package/payload/server/public/assets/browser-Dbv6-Rag.js.br +0 -0
  114. package/payload/server/public/assets/browser-Dbv6-Rag.js.gz +0 -0
  115. package/payload/server/public/assets/{calendar-Cli8Qjl9.js → calendar-vJjtsH9n.js} +1 -1
  116. package/payload/server/public/assets/calendar-vJjtsH9n.js.br +0 -0
  117. package/payload/server/public/assets/calendar-vJjtsH9n.js.gz +0 -0
  118. package/payload/server/public/assets/chat-cqL4qPUy.js +1 -0
  119. package/payload/server/public/assets/chat-cqL4qPUy.js.br +1 -0
  120. package/payload/server/public/assets/chat-cqL4qPUy.js.gz +0 -0
  121. package/payload/server/public/assets/chevron-left-DB98DSG3.js +1 -0
  122. package/payload/server/public/assets/chevron-left-DB98DSG3.js.br +0 -0
  123. package/payload/server/public/assets/clock-4YwsYe4L.js +1 -0
  124. package/payload/server/public/assets/clock-4YwsYe4L.js.br +0 -0
  125. package/payload/server/public/assets/clock-4YwsYe4L.js.gz +0 -0
  126. package/payload/server/public/assets/{copy-yhhwfEbQ.js → copy-DyG7sC5o.js} +1 -1
  127. package/payload/server/public/assets/copy-DyG7sC5o.js.br +0 -0
  128. package/payload/server/public/assets/copy-DyG7sC5o.js.gz +0 -0
  129. package/payload/server/public/assets/data-BAzLtx9C.js +1 -0
  130. package/payload/server/public/assets/data-BAzLtx9C.js.br +0 -0
  131. package/payload/server/public/assets/data-BAzLtx9C.js.gz +0 -0
  132. package/payload/server/public/assets/{field-jg0YQNDy.js → field-Bx6pM-vq.js} +1 -1
  133. package/payload/server/public/assets/field-Bx6pM-vq.js.br +0 -0
  134. package/payload/server/public/assets/field-Bx6pM-vq.js.gz +0 -0
  135. package/payload/server/public/assets/{file-text-D0EdW7h4.js → file-text-CpHWsMGe.js} +1 -1
  136. package/payload/server/public/assets/file-text-CpHWsMGe.js.br +0 -0
  137. package/payload/server/public/assets/file-text-CpHWsMGe.js.gz +0 -0
  138. package/payload/server/public/assets/{graph--AUr4uBc.js → graph-DjOywuv_.js} +1 -1
  139. package/payload/server/public/assets/graph-DjOywuv_.js.br +0 -0
  140. package/payload/server/public/assets/graph-DjOywuv_.js.gz +0 -0
  141. package/payload/server/public/assets/{graph-labels-DM0CiAX1.js → graph-labels-CGWtqa-m.js} +1 -1
  142. package/payload/server/public/assets/graph-labels-CGWtqa-m.js.br +0 -0
  143. package/payload/server/public/assets/graph-labels-CGWtqa-m.js.gz +0 -0
  144. package/payload/server/public/assets/{jsx-runtime-lfcjzaWi.css → jsx-runtime-D75_aR1J.css} +1 -1
  145. package/payload/server/public/assets/jsx-runtime-D75_aR1J.css.br +0 -0
  146. package/payload/server/public/assets/{jsx-runtime-lfcjzaWi.css.gz → jsx-runtime-D75_aR1J.css.gz} +0 -0
  147. package/payload/server/public/assets/{operator-CNYKStFX.js → operator-_DN0RF1R.js} +1 -1
  148. package/payload/server/public/assets/operator-_DN0RF1R.js.br +0 -0
  149. package/payload/server/public/assets/operator-_DN0RF1R.js.gz +0 -0
  150. package/payload/server/public/assets/page-DI4qQIK0.js +1 -0
  151. package/payload/server/public/assets/page-DI4qQIK0.js.br +0 -0
  152. package/payload/server/public/assets/page-DI4qQIK0.js.gz +0 -0
  153. package/payload/server/public/assets/page-zCwgrs8m.js +32 -0
  154. package/payload/server/public/assets/page-zCwgrs8m.js.br +0 -0
  155. package/payload/server/public/assets/page-zCwgrs8m.js.gz +0 -0
  156. package/payload/server/public/assets/play-CHQ5a9yh.js +1 -0
  157. package/payload/server/public/assets/play-CHQ5a9yh.js.br +0 -0
  158. package/payload/server/public/assets/play-CHQ5a9yh.js.gz +0 -0
  159. package/payload/server/public/assets/{public-7gXDqCog.js → public-DDVWBNSH.js} +1 -1
  160. package/payload/server/public/assets/public-DDVWBNSH.js.br +0 -0
  161. package/payload/server/public/assets/public-DDVWBNSH.js.gz +0 -0
  162. package/payload/server/public/assets/{rotate-ccw-DhqNTPpo.js → rotate-ccw-xTwkf-m7.js} +1 -1
  163. package/payload/server/public/assets/rotate-ccw-xTwkf-m7.js.br +0 -0
  164. package/payload/server/public/assets/rotate-ccw-xTwkf-m7.js.gz +0 -0
  165. package/payload/server/public/assets/{routines-DN_yDtEj.js → routines-Bu5MdNmG.js} +1 -1
  166. package/payload/server/public/assets/routines-Bu5MdNmG.js.br +0 -0
  167. package/payload/server/public/assets/routines-Bu5MdNmG.js.gz +0 -0
  168. package/payload/server/public/assets/{skills-pb_3BdOl.js → skills-DRunh5vy.js} +1 -1
  169. package/payload/server/public/assets/skills-DRunh5vy.js.br +0 -0
  170. package/payload/server/public/assets/skills-DRunh5vy.js.gz +0 -0
  171. package/payload/server/public/assets/{tasks-BQm4boat.js → tasks-DI2fznvd.js} +1 -1
  172. package/payload/server/public/assets/tasks-DI2fznvd.js.br +0 -0
  173. package/payload/server/public/assets/tasks-DI2fznvd.js.gz +0 -0
  174. package/payload/server/public/assets/{triangle-alert-d7yjaIqv.js → triangle-alert-B6CHZeUf.js} +1 -1
  175. package/payload/server/public/assets/triangle-alert-B6CHZeUf.js.br +0 -0
  176. package/payload/server/public/assets/triangle-alert-B6CHZeUf.js.gz +0 -0
  177. package/payload/server/public/assets/{useCopyFeedback-CZ6Qhfkj.js → useCopyFeedback-6rU2IEPk.js} +1 -1
  178. package/payload/server/public/assets/useCopyFeedback-6rU2IEPk.js.br +2 -0
  179. package/payload/server/public/assets/useCopyFeedback-6rU2IEPk.js.gz +0 -0
  180. package/payload/server/public/assets/{useMediaQuery-R1smYLx4.js → useMediaQuery-D7A5Bzs3.js} +1 -1
  181. package/payload/server/public/assets/useMediaQuery-D7A5Bzs3.js.br +0 -0
  182. package/payload/server/public/assets/useMediaQuery-D7A5Bzs3.js.gz +0 -0
  183. package/payload/server/public/assets/useVoiceRecorder-CptrerVA.js +2 -0
  184. package/payload/server/public/assets/useVoiceRecorder-CptrerVA.js.br +0 -0
  185. package/payload/server/public/assets/useVoiceRecorder-CptrerVA.js.gz +0 -0
  186. package/payload/server/public/assets/{wrench-DL1pbaCs.js → wrench-DyX4C8aY.js} +1 -1
  187. package/payload/server/public/assets/wrench-DyX4C8aY.js.br +0 -0
  188. package/payload/server/public/assets/wrench-DyX4C8aY.js.gz +0 -0
  189. package/payload/server/public/browser.html +5 -5
  190. package/payload/server/public/calendar.html +8 -8
  191. package/payload/server/public/chat.html +14 -14
  192. package/payload/server/public/data.html +12 -12
  193. package/payload/server/public/field.html +3 -3
  194. package/payload/server/public/graph.html +10 -10
  195. package/payload/server/public/index.html +14 -14
  196. package/payload/server/public/operator.html +15 -15
  197. package/payload/server/public/public.html +14 -14
  198. package/payload/server/public/routines.html +8 -8
  199. package/payload/server/public/skills.html +6 -6
  200. package/payload/server/public/tasks.html +7 -7
  201. package/payload/server/server.js +634 -461
  202. package/payload/server/video-extract.js +36 -0
  203. package/payload/server/public/assets/AdminLoginScreens-B3W6J6Bl.js.br +0 -0
  204. package/payload/server/public/assets/AdminLoginScreens-B3W6J6Bl.js.gz +0 -0
  205. package/payload/server/public/assets/AdminShell-C3R-vMZ5.js.br +0 -0
  206. package/payload/server/public/assets/AdminShell-C3R-vMZ5.js.gz +0 -0
  207. package/payload/server/public/assets/activity-tzv68iBs.js.br +0 -0
  208. package/payload/server/public/assets/activity-tzv68iBs.js.gz +0 -0
  209. package/payload/server/public/assets/admin-CzW_9jm3.js +0 -1
  210. package/payload/server/public/assets/admin-CzW_9jm3.js.br +0 -0
  211. package/payload/server/public/assets/admin-CzW_9jm3.js.gz +0 -0
  212. package/payload/server/public/assets/agents-DUZfeY3X.js.br +0 -0
  213. package/payload/server/public/assets/agents-DUZfeY3X.js.gz +0 -0
  214. package/payload/server/public/assets/browser-DwLaXqjO.js.br +0 -0
  215. package/payload/server/public/assets/browser-DwLaXqjO.js.gz +0 -0
  216. package/payload/server/public/assets/calendar-Cli8Qjl9.js.br +0 -0
  217. package/payload/server/public/assets/calendar-Cli8Qjl9.js.gz +0 -0
  218. package/payload/server/public/assets/chat-ByAgBgm1.js +0 -1
  219. package/payload/server/public/assets/chat-ByAgBgm1.js.br +0 -1
  220. package/payload/server/public/assets/chat-ByAgBgm1.js.gz +0 -0
  221. package/payload/server/public/assets/chevron-left-BIYVnwvk.js +0 -1
  222. package/payload/server/public/assets/chevron-left-BIYVnwvk.js.br +0 -0
  223. package/payload/server/public/assets/clock-Dzy79hq3.js +0 -1
  224. package/payload/server/public/assets/clock-Dzy79hq3.js.br +0 -0
  225. package/payload/server/public/assets/clock-Dzy79hq3.js.gz +0 -0
  226. package/payload/server/public/assets/copy-yhhwfEbQ.js.br +0 -0
  227. package/payload/server/public/assets/copy-yhhwfEbQ.js.gz +0 -0
  228. package/payload/server/public/assets/data-CsMMki2A.js +0 -1
  229. package/payload/server/public/assets/data-CsMMki2A.js.br +0 -0
  230. package/payload/server/public/assets/data-CsMMki2A.js.gz +0 -0
  231. package/payload/server/public/assets/field-jg0YQNDy.js.br +0 -0
  232. package/payload/server/public/assets/field-jg0YQNDy.js.gz +0 -0
  233. package/payload/server/public/assets/file-text-D0EdW7h4.js.br +0 -0
  234. package/payload/server/public/assets/file-text-D0EdW7h4.js.gz +0 -0
  235. package/payload/server/public/assets/graph--AUr4uBc.js.br +0 -0
  236. package/payload/server/public/assets/graph--AUr4uBc.js.gz +0 -0
  237. package/payload/server/public/assets/graph-labels-DM0CiAX1.js.br +0 -0
  238. package/payload/server/public/assets/graph-labels-DM0CiAX1.js.gz +0 -0
  239. package/payload/server/public/assets/jsx-runtime-lfcjzaWi.css.br +0 -0
  240. package/payload/server/public/assets/operator-CNYKStFX.js.br +0 -0
  241. package/payload/server/public/assets/operator-CNYKStFX.js.gz +0 -0
  242. package/payload/server/public/assets/page-DSsEpl8J.js +0 -32
  243. package/payload/server/public/assets/page-DSsEpl8J.js.br +0 -0
  244. package/payload/server/public/assets/page-DSsEpl8J.js.gz +0 -0
  245. package/payload/server/public/assets/page-DjhmwxnY.js +0 -1
  246. package/payload/server/public/assets/page-DjhmwxnY.js.br +0 -0
  247. package/payload/server/public/assets/page-DjhmwxnY.js.gz +0 -0
  248. package/payload/server/public/assets/play-DhZlml5b.js +0 -1
  249. package/payload/server/public/assets/play-DhZlml5b.js.br +0 -0
  250. package/payload/server/public/assets/play-DhZlml5b.js.gz +0 -0
  251. package/payload/server/public/assets/public-7gXDqCog.js.br +0 -0
  252. package/payload/server/public/assets/public-7gXDqCog.js.gz +0 -0
  253. package/payload/server/public/assets/rotate-ccw-DhqNTPpo.js.br +0 -0
  254. package/payload/server/public/assets/rotate-ccw-DhqNTPpo.js.gz +0 -0
  255. package/payload/server/public/assets/routines-DN_yDtEj.js.br +0 -0
  256. package/payload/server/public/assets/routines-DN_yDtEj.js.gz +0 -0
  257. package/payload/server/public/assets/skills-pb_3BdOl.js.br +0 -0
  258. package/payload/server/public/assets/skills-pb_3BdOl.js.gz +0 -0
  259. package/payload/server/public/assets/tasks-BQm4boat.js.br +0 -0
  260. package/payload/server/public/assets/tasks-BQm4boat.js.gz +0 -0
  261. package/payload/server/public/assets/triangle-alert-d7yjaIqv.js.br +0 -0
  262. package/payload/server/public/assets/triangle-alert-d7yjaIqv.js.gz +0 -0
  263. package/payload/server/public/assets/useCopyFeedback-CZ6Qhfkj.js.br +0 -0
  264. package/payload/server/public/assets/useCopyFeedback-CZ6Qhfkj.js.gz +0 -0
  265. package/payload/server/public/assets/useMediaQuery-R1smYLx4.js.br +0 -0
  266. package/payload/server/public/assets/useMediaQuery-R1smYLx4.js.gz +0 -0
  267. package/payload/server/public/assets/useVoiceRecorder-DM1v6sRa.js +0 -2
  268. package/payload/server/public/assets/useVoiceRecorder-DM1v6sRa.js.br +0 -0
  269. package/payload/server/public/assets/useVoiceRecorder-DM1v6sRa.js.gz +0 -0
  270. package/payload/server/public/assets/wrench-DL1pbaCs.js.br +0 -0
  271. package/payload/server/public/assets/wrench-DL1pbaCs.js.gz +0 -0
  272. /package/payload/server/public/assets/{jsx-runtime-BtDK2X5t.js → jsx-runtime-B2Q1UOSJ.js} +0 -0
  273. /package/payload/server/public/assets/{jsx-runtime-BtDK2X5t.js.br → jsx-runtime-B2Q1UOSJ.js.br} +0 -0
  274. /package/payload/server/public/assets/{jsx-runtime-BtDK2X5t.js.gz → jsx-runtime-B2Q1UOSJ.js.gz} +0 -0
@@ -0,0 +1,377 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+
3
+ // app/lib/stt/index.ts
4
+ import { execFile } from "child_process";
5
+ import { unlink, stat } from "fs/promises";
6
+ import { promisify } from "util";
7
+ var execFileAsync = promisify(execFile);
8
+ var TAG = "[stt]";
9
+ var WHISPER_BINARY = process.env.WHISPER_BINARY ?? "/opt/whisper.cpp/build/bin/whisper-cli";
10
+ var WHISPER_MODEL = process.env.WHISPER_MODEL ?? "/opt/whisper.cpp/models/ggml-base.bin";
11
+ var WHISPER_TIMEOUT_MS = 20 * 60 * 1e3;
12
+ var SPECIAL_TOKEN_RE = /\[_[A-Z]+(?:_\d+)?_?\]/g;
13
+ function stripSpecialTokens(input) {
14
+ const matches = input.match(SPECIAL_TOKEN_RE);
15
+ const count = matches ? matches.length : 0;
16
+ if (!count) return { text: input, count: 0 };
17
+ const text = input.replace(SPECIAL_TOKEN_RE, "").replace(/[ \t]{2,}/g, " ").trim();
18
+ return { text, count };
19
+ }
20
+ var SEGMENT_RE = /^\[(\d{2}):(\d{2}):(\d{2})\.(\d{3})\s*-->\s*(\d{2}):(\d{2}):(\d{2})\.(\d{3})\]\s*(.*)$/;
21
+ function toMs(h, m, s, ms) {
22
+ return ((Number(h) * 60 + Number(m)) * 60 + Number(s)) * 1e3 + Number(ms);
23
+ }
24
+ function parseWhisperSegments(stdout) {
25
+ const segments = [];
26
+ for (const line of stdout.split("\n")) {
27
+ const m = SEGMENT_RE.exec(line.trim());
28
+ if (!m) continue;
29
+ const { text } = stripSpecialTokens(m[9].trim());
30
+ if (!text) continue;
31
+ segments.push({
32
+ startMs: toMs(m[1], m[2], m[3], m[4]),
33
+ endMs: toMs(m[5], m[6], m[7], m[8]),
34
+ text
35
+ });
36
+ }
37
+ return segments;
38
+ }
39
+ async function transcribeWithTimestamps(audioPath, mimetype) {
40
+ const startMs = Date.now();
41
+ const wavPath = audioPath.replace(/\.[^.]+$/, "") + ".video.wav";
42
+ try {
43
+ await execFileAsync("ffmpeg", [
44
+ "-i",
45
+ audioPath,
46
+ "-ar",
47
+ "16000",
48
+ "-ac",
49
+ "1",
50
+ "-c:a",
51
+ "pcm_s16le",
52
+ "-y",
53
+ wavPath
54
+ ], { timeout: 6e4 });
55
+ } catch (err) {
56
+ const reason = err instanceof Error ? err.message : String(err);
57
+ console.error(`${TAG} timestamps failed: ffmpeg conversion error=${reason}`);
58
+ return void 0;
59
+ }
60
+ try {
61
+ const { stdout } = await execFileAsync(WHISPER_BINARY, [
62
+ "-m",
63
+ WHISPER_MODEL,
64
+ "-f",
65
+ wavPath,
66
+ "-l",
67
+ "auto"
68
+ ], { timeout: WHISPER_TIMEOUT_MS, maxBuffer: 10 * 1024 * 1024 });
69
+ const segments = parseWhisperSegments(stdout);
70
+ const durationMs = Date.now() - startMs;
71
+ if (segments.length === 0) {
72
+ console.error(
73
+ `${TAG} timestamps: no segments parsed duration_ms=${durationMs} mimetype=${mimetype}`
74
+ );
75
+ return void 0;
76
+ }
77
+ console.error(
78
+ `${TAG} timestamps done segments=${segments.length} duration_ms=${durationMs}`
79
+ );
80
+ return segments;
81
+ } catch (err) {
82
+ const durationMs = Date.now() - startMs;
83
+ const reason = err instanceof Error ? err.message : String(err);
84
+ console.error(`${TAG} timestamps failed duration_ms=${durationMs} error=${reason}`);
85
+ return void 0;
86
+ } finally {
87
+ unlink(wavPath).catch(() => {
88
+ });
89
+ }
90
+ }
91
+ async function transcribe(audioPath, mimetype) {
92
+ const startMs = Date.now();
93
+ let audioBytes = 0;
94
+ try {
95
+ const s = await stat(audioPath);
96
+ audioBytes = s.size;
97
+ } catch {
98
+ console.error(`${TAG} failed: file not readable path=${audioPath}`);
99
+ return void 0;
100
+ }
101
+ console.error(
102
+ `${TAG} start provider=whisper-local audio_bytes=${audioBytes} mimetype=${mimetype} path=${audioPath}`
103
+ );
104
+ const wavPath = audioPath.replace(/\.[^.]+$/, "") + ".wav";
105
+ try {
106
+ await execFileAsync("ffmpeg", [
107
+ "-i",
108
+ audioPath,
109
+ "-ar",
110
+ "16000",
111
+ "-ac",
112
+ "1",
113
+ "-c:a",
114
+ "pcm_s16le",
115
+ "-y",
116
+ // overwrite without prompting
117
+ wavPath
118
+ ], { timeout: 3e4 });
119
+ } catch (err) {
120
+ const reason = err instanceof Error ? err.message : String(err);
121
+ console.error(`${TAG} failed: ffmpeg conversion error=${reason}`);
122
+ return void 0;
123
+ }
124
+ try {
125
+ const { stdout, stderr } = await execFileAsync(WHISPER_BINARY, [
126
+ "-m",
127
+ WHISPER_MODEL,
128
+ "-f",
129
+ wavPath,
130
+ "--no-timestamps",
131
+ "-l",
132
+ "auto"
133
+ ], { timeout: WHISPER_TIMEOUT_MS, maxBuffer: 10 * 1024 * 1024 });
134
+ const durationMs = Date.now() - startMs;
135
+ const { text, count: stripped } = stripSpecialTokens(stdout.trim());
136
+ if (!text) {
137
+ console.error(`${TAG} failed: whisper returned empty output duration_ms=${durationMs}`);
138
+ return void 0;
139
+ }
140
+ const langMatch = stderr.match(/auto-detected language:\s*(\w+)/);
141
+ const language = langMatch?.[1] ?? "unknown";
142
+ const words = text.split(/\s+/).filter(Boolean).length;
143
+ console.error(
144
+ `${TAG} done provider=whisper-local duration_ms=${durationMs} words=${words} stripped=${stripped} lang=${language}`
145
+ );
146
+ return { text, language, durationMs };
147
+ } catch (err) {
148
+ const durationMs = Date.now() - startMs;
149
+ const reason = err instanceof Error ? err.message : String(err);
150
+ console.error(`${TAG} failed provider=whisper-local duration_ms=${durationMs} error=${reason}`);
151
+ return void 0;
152
+ } finally {
153
+ unlink(wavPath).catch(() => {
154
+ });
155
+ }
156
+ }
157
+
158
+ // app/lib/video/frames.ts
159
+ import { execFile as execFile2 } from "child_process";
160
+ import { join } from "path";
161
+ import { promisify as promisify2 } from "util";
162
+ var execFileAsync2 = promisify2(execFile2);
163
+ var TAG2 = "[video]";
164
+ var SCENE_THRESHOLD = 0.3;
165
+ var DENSITY_INTERVAL_S = 4;
166
+ var MIN_FRAMES = 3;
167
+ var MAX_FRAMES = 24;
168
+ var DEDUPE_TOLERANCE_S = 0.5;
169
+ function round3(n) {
170
+ return Math.round(n * 1e3) / 1e3;
171
+ }
172
+ function selectFrameTimestamps(durationSec, sceneTimes) {
173
+ if (!Number.isFinite(durationSec) || durationSec <= 0) return [];
174
+ const floorTimes = [];
175
+ for (let t = 0; t < durationSec; t += DENSITY_INTERVAL_S) floorTimes.push(round3(t));
176
+ const inRange = sceneTimes.filter((t) => Number.isFinite(t) && t >= 0 && t < durationSec);
177
+ const sorted = [...floorTimes, ...inRange].sort((a, b) => a - b);
178
+ const merged = [];
179
+ for (const t of sorted) {
180
+ if (merged.length === 0 || t - merged[merged.length - 1] >= DEDUPE_TOLERANCE_S) {
181
+ merged.push(round3(t));
182
+ }
183
+ }
184
+ if (merged.length < MIN_FRAMES) {
185
+ const step = durationSec / MIN_FRAMES;
186
+ return Array.from({ length: MIN_FRAMES }, (_, i) => round3(i * step));
187
+ }
188
+ if (merged.length > MAX_FRAMES) {
189
+ const last = merged.length - 1;
190
+ const picked = [];
191
+ for (let i = 0; i < MAX_FRAMES; i++) {
192
+ picked.push(merged[Math.round(i * last / (MAX_FRAMES - 1))]);
193
+ }
194
+ return picked;
195
+ }
196
+ return merged;
197
+ }
198
+ var defaultExec = async (file, args) => {
199
+ const { stdout, stderr } = await execFileAsync2(file, args, {
200
+ timeout: 12e4,
201
+ maxBuffer: 10 * 1024 * 1024
202
+ });
203
+ return { stdout, stderr };
204
+ };
205
+ var PTS_TIME_RE = /pts_time:([0-9]+(?:\.[0-9]+)?)/g;
206
+ async function detectSceneTimes(path, execImpl = defaultExec) {
207
+ try {
208
+ const { stdout, stderr } = await execImpl("ffmpeg", [
209
+ "-v",
210
+ "error",
211
+ "-i",
212
+ path,
213
+ "-vf",
214
+ `select='gt(scene,${SCENE_THRESHOLD})',metadata=print:file=-`,
215
+ "-an",
216
+ "-f",
217
+ "null",
218
+ "-"
219
+ ]);
220
+ const times = [];
221
+ for (const m of `${stdout}
222
+ ${stderr}`.matchAll(PTS_TIME_RE)) {
223
+ const t = Number(m[1]);
224
+ if (Number.isFinite(t)) times.push(t);
225
+ }
226
+ return times.sort((a, b) => a - b);
227
+ } catch (err) {
228
+ const reason = err instanceof Error ? err.message : String(err);
229
+ console.error(`${TAG2} scene detect failed error=${reason} path=${path}`);
230
+ return [];
231
+ }
232
+ }
233
+ async function extractFrames(path, timestamps, outDir, execImpl = defaultExec) {
234
+ const stem = `video-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
235
+ const refs = [];
236
+ for (const tSec of timestamps) {
237
+ const out = join(outDir, `${stem}-${tSec.toFixed(3).replace(".", "_")}.jpg`);
238
+ try {
239
+ await execImpl("ffmpeg", [
240
+ "-v",
241
+ "error",
242
+ "-ss",
243
+ String(tSec),
244
+ "-i",
245
+ path,
246
+ "-frames:v",
247
+ "1",
248
+ "-q:v",
249
+ "4",
250
+ "-y",
251
+ out
252
+ ]);
253
+ refs.push({ tSec, path: out });
254
+ } catch (err) {
255
+ const reason = err instanceof Error ? err.message : String(err);
256
+ console.error(`${TAG2} frame extract failed t=${tSec} error=${reason}`);
257
+ }
258
+ }
259
+ return refs;
260
+ }
261
+
262
+ // app/lib/video/probe.ts
263
+ import { execFile as execFile3 } from "child_process";
264
+ import { promisify as promisify3 } from "util";
265
+ var execFileAsync3 = promisify3(execFile3);
266
+ var TAG3 = "[video]";
267
+ var defaultExec2 = async (file, args) => {
268
+ const { stdout } = await execFileAsync3(file, args, { timeout: 3e4 });
269
+ return { stdout };
270
+ };
271
+ async function probeVideo(path, execImpl = defaultExec2) {
272
+ try {
273
+ const { stdout } = await execImpl("ffprobe", [
274
+ "-v",
275
+ "error",
276
+ "-show_entries",
277
+ "format=duration",
278
+ "-show_entries",
279
+ "stream=codec_type",
280
+ "-of",
281
+ "json",
282
+ path
283
+ ]);
284
+ const parsed = JSON.parse(stdout);
285
+ const durationSec = Number(parsed.format?.duration);
286
+ if (!Number.isFinite(durationSec) || durationSec <= 0) {
287
+ console.error(`${TAG3} probe failed: unparseable duration path=${path}`);
288
+ return void 0;
289
+ }
290
+ const kinds = (parsed.streams ?? []).map((s) => s.codec_type);
291
+ return {
292
+ durationSec,
293
+ hasAudio: kinds.includes("audio"),
294
+ hasVideo: kinds.includes("video")
295
+ };
296
+ } catch (err) {
297
+ const reason = err instanceof Error ? err.message : String(err);
298
+ console.error(`${TAG3} probe failed: ffprobe error=${reason} path=${path}`);
299
+ return void 0;
300
+ }
301
+ }
302
+
303
+ // app/lib/video/timeline.ts
304
+ function stamp(totalSec) {
305
+ const s = Math.floor(totalSec % 60);
306
+ const m = Math.floor(totalSec / 60 % 60);
307
+ const h = Math.floor(totalSec / 3600);
308
+ const mm = String(m).padStart(2, "0");
309
+ const ss = String(s).padStart(2, "0");
310
+ return h > 0 ? `${h}:${mm}:${ss}` : `${mm}:${ss}`;
311
+ }
312
+ function renderTimeline(frames, segments) {
313
+ const events = [];
314
+ for (const s of segments) {
315
+ const tSec = s.startMs / 1e3;
316
+ events.push({ tSec, rank: 0, line: `[${stamp(tSec)}] ${s.text}` });
317
+ }
318
+ for (const f of frames) {
319
+ events.push({ tSec: f.tSec, rank: 1, line: `[${stamp(f.tSec)}] frame \u2192 ${f.path}` });
320
+ }
321
+ events.sort((a, b) => a.tSec - b.tSec || a.rank - b.rank);
322
+ const header = segments.length > 0 ? `Video timeline \u2014 ${frames.length} frame(s) and the spoken transcript, on the video's own clock.` : `Video timeline \u2014 ${frames.length} frame(s); no speech was transcribed from this video.`;
323
+ return [
324
+ header,
325
+ "Read each frame path below to see that moment.",
326
+ "",
327
+ ...events.map((e) => e.line)
328
+ ].join("\n");
329
+ }
330
+
331
+ // app/lib/video/index.ts
332
+ var TAG4 = "[video]";
333
+ var MAX_DURATION_S = 300;
334
+ var MEDIA_DIR = "/tmp/maxy-media";
335
+ var defaults = {
336
+ probe: probeVideo,
337
+ detectScenes: detectSceneTimes,
338
+ extract: extractFrames,
339
+ transcribe: transcribeWithTimestamps,
340
+ outDir: MEDIA_DIR
341
+ };
342
+ async function extractVideo(path, mimetype, deps = {}) {
343
+ const d = { ...defaults, ...deps };
344
+ const startedMs = Date.now();
345
+ const probe = await d.probe(path);
346
+ if (!probe) {
347
+ console.error(`${TAG4} skipped=probe-failed path=${path}`);
348
+ return void 0;
349
+ }
350
+ if (!probe.hasVideo) {
351
+ console.error(`${TAG4} skipped=no-video-stream path=${path}`);
352
+ return void 0;
353
+ }
354
+ if (probe.durationSec > MAX_DURATION_S) {
355
+ console.error(
356
+ `${TAG4} skipped=duration duration_s=${probe.durationSec.toFixed(1)} max_s=${MAX_DURATION_S} path=${path}`
357
+ );
358
+ return void 0;
359
+ }
360
+ const sceneTimes = await d.detectScenes(path);
361
+ const timestamps = selectFrameTimestamps(probe.durationSec, sceneTimes);
362
+ const frames = await d.extract(path, timestamps, d.outDir);
363
+ if (frames.length === 0) {
364
+ console.error(`${TAG4} skipped=no-frames path=${path}`);
365
+ return void 0;
366
+ }
367
+ const segments = probe.hasAudio ? await d.transcribe(path, mimetype) : void 0;
368
+ console.error(
369
+ `${TAG4} done frames=${frames.length} segments=${segments?.length ?? 0} duration_ms=${Date.now() - startedMs} video_s=${probe.durationSec.toFixed(1)}`
370
+ );
371
+ return renderTimeline(frames, segments ?? []);
372
+ }
373
+
374
+ export {
375
+ transcribe,
376
+ extractVideo
377
+ };