@rubytech/create-maxy-code 0.1.543 → 0.1.545
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.
- package/dist/__tests__/public-instruction-seed.test.js +102 -0
- package/dist/index.js +10 -0
- package/dist/public-instruction-seed.js +70 -0
- package/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +2 -0
- package/payload/platform/plugins/admin/hooks/__tests__/public-tool-surface.test.sh +173 -0
- package/payload/platform/plugins/admin/hooks/public-tool-surface.sh +123 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.js +13 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.js.map +1 -1
- package/payload/platform/plugins/admin/skills/channel-instruction/SKILL.md +60 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +6 -1
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
- package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +2 -0
- package/payload/platform/plugins/docs/references/internals.md +2 -0
- package/payload/platform/plugins/docs/references/platform.md +1 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/availability-snapshot.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/availability-snapshot.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/availability-snapshot.test.js +80 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/availability-snapshot.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/publish-availability-logging.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/publish-availability-logging.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/publish-availability-logging.test.js +32 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/publish-availability-logging.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/availability-snapshot.d.ts +67 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/availability-snapshot.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/availability-snapshot.js +88 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/availability-snapshot.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/publish-availability.d.ts +2 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/publish-availability.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/publish-availability.js +59 -54
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/publish-availability.js.map +1 -1
- package/payload/platform/scripts/__tests__/public-surface-registered.test.sh +102 -0
- package/payload/platform/scripts/lib/__tests__/account-settings-public-surface.test.sh +109 -0
- package/payload/platform/scripts/lib/account-settings-public-surface.sh +109 -0
- package/payload/platform/scripts/lib/provision-account-dir.sh +6 -3
- package/payload/platform/scripts/setup-account.sh +14 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +22 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +23 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +157 -13
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +86 -40
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +64 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-surface-audit.d.ts +24 -3
- package/payload/platform/services/claude-session-manager/dist/public-surface-audit.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-surface-audit.js +29 -3
- package/payload/platform/services/claude-session-manager/dist/public-surface-audit.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.d.ts +27 -0
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.js +32 -0
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts +15 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js +8 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts +18 -9
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js +18 -9
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.d.ts +60 -0
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.js +93 -0
- package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts +12 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.js +41 -13
- package/payload/platform/services/claude-session-manager/dist/stuck-turn.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.js +17 -16
- package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/notification.d.ts +10 -4
- package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/notification.js +19 -12
- package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/server.js +3 -0
- package/payload/platform/services/telegram-channel/dist/server.js.map +1 -1
- package/payload/platform/services/webchat-channel/dist/instructions.js +21 -21
- package/payload/platform/services/webchat-channel/dist/instructions.js.map +1 -1
- package/payload/platform/services/webchat-channel/dist/notification.d.ts +9 -2
- package/payload/platform/services/webchat-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/webchat-channel/dist/notification.js +20 -10
- package/payload/platform/services/webchat-channel/dist/notification.js.map +1 -1
- package/payload/platform/services/webchat-channel/dist/server.d.ts.map +1 -1
- package/payload/platform/services/webchat-channel/dist/server.js +5 -0
- package/payload/platform/services/webchat-channel/dist/server.js.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +43 -23
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.js +86 -35
- package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/server.js +15 -6
- package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/targets.d.ts +17 -6
- package/payload/platform/services/whatsapp-channel/dist/targets.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/targets.js +13 -2
- package/payload/platform/services/whatsapp-channel/dist/targets.js.map +1 -1
- package/payload/platform/templates/agents/admin/INSTRUCTION.md +0 -15
- package/payload/server/{chunk-MGW536C5.js → chunk-CVUSUNXM.js} +1 -1
- package/payload/server/{chunk-BIHII3CT.js → chunk-DU7GPDJJ.js} +1 -0
- package/payload/server/{chunk-RSNVIN4G.js → chunk-X2RRMHVV.js} +1 -1
- package/payload/server/{manager-GJHKO7WW.js → manager-TI2YJQVZ.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/activity.html +5 -5
- package/payload/server/public/agents.html +4 -4
- package/payload/server/public/assets/{AdminLoginScreens-C1iXeR-9.js → AdminLoginScreens-BGKtDqAk.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-BGKtDqAk.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-BGKtDqAk.js.gz +0 -0
- package/payload/server/public/assets/{AdminShell-BeIGNC1Q.js → AdminShell-DnfgsAQl.js} +1 -1
- package/payload/server/public/assets/AdminShell-DnfgsAQl.js.br +0 -0
- package/payload/server/public/assets/AdminShell-DnfgsAQl.js.gz +0 -0
- package/payload/server/public/assets/{activity-AaFvfwrZ.js → activity-ByJSut0Q.js} +1 -1
- package/payload/server/public/assets/activity-ByJSut0Q.js.br +0 -0
- package/payload/server/public/assets/activity-ByJSut0Q.js.gz +0 -0
- package/payload/server/public/assets/{admin-Bz34CZqL.js → admin-CkeJO6kA.js} +1 -1
- package/payload/server/public/assets/admin-CkeJO6kA.js.br +0 -0
- package/payload/server/public/assets/admin-CkeJO6kA.js.gz +0 -0
- package/payload/server/public/assets/{agents-N0z7qg8a.js → agents-D8phtRX5.js} +1 -1
- package/payload/server/public/assets/agents-D8phtRX5.js.br +0 -0
- package/payload/server/public/assets/agents-D8phtRX5.js.gz +0 -0
- package/payload/server/public/assets/{browser-_k-v0iky.js → browser-DQSTjdom.js} +1 -1
- package/payload/server/public/assets/browser-DQSTjdom.js.br +0 -0
- package/payload/server/public/assets/browser-DQSTjdom.js.gz +0 -0
- package/payload/server/public/assets/{calendar-D_DvVRJS.js → calendar-DFJu1XjP.js} +1 -1
- package/payload/server/public/assets/calendar-DFJu1XjP.js.br +0 -0
- package/payload/server/public/assets/calendar-DFJu1XjP.js.gz +0 -0
- package/payload/server/public/assets/chat-DUqtIsOt.js +1 -0
- package/payload/server/public/assets/chat-DUqtIsOt.js.br +0 -0
- package/payload/server/public/assets/chat-DUqtIsOt.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-DFK18xVX.js +1 -0
- package/payload/server/public/assets/chevron-left-DFK18xVX.js.br +0 -0
- package/payload/server/public/assets/chevron-right-DJ4oaHoN.js +1 -0
- package/payload/server/public/assets/chevron-right-DJ4oaHoN.js.br +0 -0
- package/payload/server/public/assets/clock-wHIan2DW.js +1 -0
- package/payload/server/public/assets/clock-wHIan2DW.js.br +0 -0
- package/payload/server/public/assets/{copy-BDoxl3Oi.js → copy-lFFhXRGk.js} +1 -1
- package/payload/server/public/assets/copy-lFFhXRGk.js.br +0 -0
- package/payload/server/public/assets/copy-lFFhXRGk.js.gz +0 -0
- package/payload/server/public/assets/data-Cxv97ARy.js +1 -0
- package/payload/server/public/assets/data-Cxv97ARy.js.br +0 -0
- package/payload/server/public/assets/data-Cxv97ARy.js.gz +0 -0
- package/payload/server/public/assets/{file-text-DRGn4gjH.js → file-text-D2Y-bkNy.js} +1 -1
- package/payload/server/public/assets/file-text-D2Y-bkNy.js.br +0 -0
- package/payload/server/public/assets/file-text-D2Y-bkNy.js.gz +0 -0
- package/payload/server/public/assets/{graph-D7ECsLPs.js → graph-C-3yN6JD.js} +1 -1
- package/payload/server/public/assets/graph-C-3yN6JD.js.br +0 -0
- package/payload/server/public/assets/graph-C-3yN6JD.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-ClzmLEoK.js → graph-labels-DiaPLP27.js} +1 -1
- package/payload/server/public/assets/graph-labels-DiaPLP27.js.br +0 -0
- package/payload/server/public/assets/graph-labels-DiaPLP27.js.gz +0 -0
- package/payload/server/public/assets/{operator-jSdha7TP.js → operator-KuGPvSa9.js} +1 -1
- package/payload/server/public/assets/operator-KuGPvSa9.js.br +0 -0
- package/payload/server/public/assets/operator-KuGPvSa9.js.gz +0 -0
- package/payload/server/public/assets/{page-Cq4SkWbr.js → page-BhGeFXWA.js} +1 -1
- package/payload/server/public/assets/page-BhGeFXWA.js.br +0 -0
- package/payload/server/public/assets/page-BhGeFXWA.js.gz +0 -0
- package/payload/server/public/assets/{page-DrwRXi3K.js → page-EnbVC-yM.js} +1 -1
- package/payload/server/public/assets/page-EnbVC-yM.js.br +0 -0
- package/payload/server/public/assets/page-EnbVC-yM.js.gz +0 -0
- package/payload/server/public/assets/play-jZFZAG-t.js +1 -0
- package/payload/server/public/assets/play-jZFZAG-t.js.br +0 -0
- package/payload/server/public/assets/play-jZFZAG-t.js.gz +0 -0
- package/payload/server/public/assets/{public-D7MfkWvM.js → public-CdSgMNC7.js} +1 -1
- package/payload/server/public/assets/public-CdSgMNC7.js.br +0 -0
- package/payload/server/public/assets/public-CdSgMNC7.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-CaWP-njL.js → rotate-ccw-rTRuTqei.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-rTRuTqei.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-rTRuTqei.js.gz +0 -0
- package/payload/server/public/assets/{routines-XTk0vJUD.js → routines-DNRxNRSQ.js} +1 -1
- package/payload/server/public/assets/routines-DNRxNRSQ.js.br +0 -0
- package/payload/server/public/assets/routines-DNRxNRSQ.js.gz +0 -0
- package/payload/server/public/assets/{skills-sjTaAr0v.js → skills-DFWtZNkW.js} +1 -1
- package/payload/server/public/assets/skills-DFWtZNkW.js.br +0 -0
- package/payload/server/public/assets/skills-DFWtZNkW.js.gz +0 -0
- package/payload/server/public/assets/{tasks-D0-qwWZR.js → tasks-B94AuKSy.js} +1 -1
- package/payload/server/public/assets/tasks-B94AuKSy.js.br +0 -0
- package/payload/server/public/assets/tasks-B94AuKSy.js.gz +0 -0
- package/payload/server/public/assets/{triangle-alert-BCndBPvE.js → triangle-alert-DtWUg6jR.js} +1 -1
- package/payload/server/public/assets/triangle-alert-DtWUg6jR.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-DtWUg6jR.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-BFMmBvVw.js → useCopyFeedback-CjKYO-Qf.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-CjKYO-Qf.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-CjKYO-Qf.js.gz +0 -0
- package/payload/server/public/assets/{useMediaQuery-CXdUnGSe.css → useMediaQuery-DlOWP56H.css} +1 -1
- package/payload/server/public/assets/useMediaQuery-DlOWP56H.css.br +0 -0
- package/payload/server/public/assets/{useMediaQuery-CXdUnGSe.css.gz → useMediaQuery-DlOWP56H.css.gz} +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-DmW6CW7B.js → useVoiceRecorder-BKFAYuzz.js} +1 -1
- package/payload/server/public/assets/useVoiceRecorder-BKFAYuzz.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BKFAYuzz.js.gz +0 -0
- package/payload/server/public/assets/{wrench-BBl51xDU.js → wrench-Ct4kf-uv.js} +1 -1
- package/payload/server/public/assets/wrench-Ct4kf-uv.js.br +0 -0
- package/payload/server/public/assets/wrench-Ct4kf-uv.js.gz +0 -0
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +8 -8
- package/payload/server/public/chat.html +13 -13
- package/payload/server/public/data.html +11 -11
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +14 -14
- package/payload/server/public/operator.html +14 -14
- package/payload/server/public/public.html +13 -13
- package/payload/server/public/routines.html +6 -6
- package/payload/server/public/skills.html +5 -5
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/server.js +48 -21
- package/payload/server/public/assets/AdminLoginScreens-C1iXeR-9.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-C1iXeR-9.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-BeIGNC1Q.js.br +0 -0
- package/payload/server/public/assets/AdminShell-BeIGNC1Q.js.gz +0 -0
- package/payload/server/public/assets/activity-AaFvfwrZ.js.br +0 -0
- package/payload/server/public/assets/activity-AaFvfwrZ.js.gz +0 -0
- package/payload/server/public/assets/admin-Bz34CZqL.js.br +0 -0
- package/payload/server/public/assets/admin-Bz34CZqL.js.gz +0 -0
- package/payload/server/public/assets/agents-N0z7qg8a.js.br +0 -0
- package/payload/server/public/assets/agents-N0z7qg8a.js.gz +0 -0
- package/payload/server/public/assets/browser-_k-v0iky.js.br +0 -0
- package/payload/server/public/assets/browser-_k-v0iky.js.gz +0 -0
- package/payload/server/public/assets/calendar-D_DvVRJS.js.br +0 -0
- package/payload/server/public/assets/calendar-D_DvVRJS.js.gz +0 -0
- package/payload/server/public/assets/chat-BbAsvXL_.js +0 -1
- package/payload/server/public/assets/chat-BbAsvXL_.js.br +0 -1
- package/payload/server/public/assets/chat-BbAsvXL_.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-trZmu0ZU.js +0 -1
- package/payload/server/public/assets/chevron-left-trZmu0ZU.js.br +0 -0
- package/payload/server/public/assets/chevron-right-BiGJuNSX.js +0 -1
- package/payload/server/public/assets/chevron-right-BiGJuNSX.js.br +0 -0
- package/payload/server/public/assets/clock-DAeRdj4p.js +0 -1
- package/payload/server/public/assets/clock-DAeRdj4p.js.br +0 -0
- package/payload/server/public/assets/clock-DAeRdj4p.js.gz +0 -0
- package/payload/server/public/assets/copy-BDoxl3Oi.js.br +0 -0
- package/payload/server/public/assets/copy-BDoxl3Oi.js.gz +0 -0
- package/payload/server/public/assets/data-DB6T1I-w.js +0 -1
- package/payload/server/public/assets/data-DB6T1I-w.js.br +0 -1
- package/payload/server/public/assets/data-DB6T1I-w.js.gz +0 -0
- package/payload/server/public/assets/file-text-DRGn4gjH.js.br +0 -0
- package/payload/server/public/assets/file-text-DRGn4gjH.js.gz +0 -0
- package/payload/server/public/assets/graph-D7ECsLPs.js.br +0 -0
- package/payload/server/public/assets/graph-D7ECsLPs.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-ClzmLEoK.js.br +0 -0
- package/payload/server/public/assets/graph-labels-ClzmLEoK.js.gz +0 -0
- package/payload/server/public/assets/operator-jSdha7TP.js.br +0 -0
- package/payload/server/public/assets/operator-jSdha7TP.js.gz +0 -0
- package/payload/server/public/assets/page-Cq4SkWbr.js.br +0 -0
- package/payload/server/public/assets/page-Cq4SkWbr.js.gz +0 -0
- package/payload/server/public/assets/page-DrwRXi3K.js.br +0 -0
- package/payload/server/public/assets/page-DrwRXi3K.js.gz +0 -0
- package/payload/server/public/assets/play-CWyPEXiB.js +0 -1
- package/payload/server/public/assets/play-CWyPEXiB.js.br +0 -0
- package/payload/server/public/assets/play-CWyPEXiB.js.gz +0 -0
- package/payload/server/public/assets/public-D7MfkWvM.js.br +0 -0
- package/payload/server/public/assets/public-D7MfkWvM.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-CaWP-njL.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-CaWP-njL.js.gz +0 -0
- package/payload/server/public/assets/routines-XTk0vJUD.js.br +0 -0
- package/payload/server/public/assets/routines-XTk0vJUD.js.gz +0 -0
- package/payload/server/public/assets/skills-sjTaAr0v.js.br +0 -0
- package/payload/server/public/assets/skills-sjTaAr0v.js.gz +0 -0
- package/payload/server/public/assets/tasks-D0-qwWZR.js.br +0 -0
- package/payload/server/public/assets/tasks-D0-qwWZR.js.gz +0 -0
- package/payload/server/public/assets/triangle-alert-BCndBPvE.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-BCndBPvE.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-BFMmBvVw.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-BFMmBvVw.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-CXdUnGSe.css.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DmW6CW7B.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DmW6CW7B.js.gz +0 -0
- package/payload/server/public/assets/wrench-BBl51xDU.js.br +0 -0
- package/payload/server/public/assets/wrench-BBl51xDU.js.gz +0 -0
- /package/payload/server/public/assets/{useMediaQuery-q9BSy1Ld.js → useMediaQuery-BYIHo-xL.js} +0 -0
- /package/payload/server/public/assets/{useMediaQuery-q9BSy1Ld.js.br → useMediaQuery-BYIHo-xL.js.br} +0 -0
- /package/payload/server/public/assets/{useMediaQuery-q9BSy1Ld.js.gz → useMediaQuery-BYIHo-xL.js.gz} +0 -0
|
@@ -27,7 +27,7 @@ import { parseWaChannelBody, sessionIdFieldsFor } from './public-spawn-session.j
|
|
|
27
27
|
import { buildWebchatChannelMcpServers, buildWebchatChannelArgv, webchatChannelMcpConfigPath, WEBCHAT_CHANNEL_SERVER_NAME } from './webchat-channel-mcp.js';
|
|
28
28
|
import { buildTelegramChannelMcpServers, buildTelegramChannelArgv, telegramChannelMcpConfigPath, TELEGRAM_CHANNEL_SERVER_NAME } from './telegram-channel-mcp.js';
|
|
29
29
|
import { buildChannelMcpServers, buildChannelArgv, channelMcpConfigPath, CHANNEL_SERVER_NAME } from './channel-mcp.js';
|
|
30
|
-
import { buildRcPublicLockdownArgv, formatToolAllowlistLine } from './rc-public-lockdown.js';
|
|
30
|
+
import { buildRcPublicLockdownArgv, formatToolAllowlistLine, PUBLIC_ALLOWED_TOOLS_ENV, allowedToolsFromArgv, formatRoleResolutionLine, } from './rc-public-lockdown.js';
|
|
31
31
|
import { mergeTarget, isMultiTarget, targetKinds } from './channel-targets.js';
|
|
32
32
|
import { randomUUID, createHash } from 'node:crypto';
|
|
33
33
|
import { execFile, execFileSync } from 'node:child_process';
|
|
@@ -1170,6 +1170,13 @@ export function buildHttpApp(deps) {
|
|
|
1170
1170
|
// webchatChannel above. This door could attach webchat but never WhatsApp,
|
|
1171
1171
|
// which is why the public WhatsApp route had nowhere to land before.
|
|
1172
1172
|
const waChannel = parseWaChannelBody(body.waChannel);
|
|
1173
|
+
// Task 2338 — the telegram twin. `parseWaChannelBody` is shape-identical
|
|
1174
|
+
// for telegram (senderId + http gateway + absolute server path), so it is
|
|
1175
|
+
// reused rather than duplicated. pty-spawner has accepted a
|
|
1176
|
+
// `telegramChannel` arg since the public allowlist gained its telegram arm
|
|
1177
|
+
// (pty-spawner.ts:844, public-allowlist.ts:24); this route could not supply
|
|
1178
|
+
// one, so a public telegram spawn fell through to the deny-basis allowlist.
|
|
1179
|
+
const telegramChannel = parseWaChannelBody(body.telegramChannel);
|
|
1173
1180
|
// Task 2262 — the caller's deterministic per-sender id, so a public visitor
|
|
1174
1181
|
// keeps one conversation across cold starts instead of meeting a fresh agent
|
|
1175
1182
|
// every time. Shape-gated to the same UUID v4 pattern the other id fields on
|
|
@@ -1206,6 +1213,30 @@ export function buildHttpApp(deps) {
|
|
|
1206
1213
|
timed(deps.logger, 'POST', '/public-spawn', 400, Date.now() - start);
|
|
1207
1214
|
return c.json({ error: 'invalid-arguments', detail: { senderId: !!senderId, role, channel } }, 400);
|
|
1208
1215
|
}
|
|
1216
|
+
// Task 2274 — a public spawn may not name a specialist. `isPublic` and
|
|
1217
|
+
// `isSpecialistSpawn` are independent in pty-spawner and the specialist
|
|
1218
|
+
// branch wins at two of the four lockdown levers: the `--allowed-tools` push
|
|
1219
|
+
// is skipped entirely, and `effectiveMode` resolves the caller-supplied mode
|
|
1220
|
+
// (defaulting to `bypassPermissions`) instead of the fail-closed `dontAsk`.
|
|
1221
|
+
// The `permissionMode` this body may also carry is parsed further down and
|
|
1222
|
+
// would be honoured on that branch, which is why the refusal sits above the
|
|
1223
|
+
// parse rather than beside it.
|
|
1224
|
+
//
|
|
1225
|
+
// Neither production issuer sends the combination: the channel bridge
|
|
1226
|
+
// (`manager-client.ts`) is the only one whose role can be 'public' and it
|
|
1227
|
+
// carries no `specialist` field, while the cookie-auth wrapper
|
|
1228
|
+
// (`claude-sessions.ts`) types its role as the literal 'admin'. Refusing
|
|
1229
|
+
// states that invariant at the door; `spawnClaudeSession` refuses the same
|
|
1230
|
+
// pairing again at the chokepoint, so a future route cannot reinherit it.
|
|
1231
|
+
//
|
|
1232
|
+
// `specialist` here is the shape-gated value, so a body whose field failed
|
|
1233
|
+
// the slug pattern resolved to undefined and is an ordinary public spawn —
|
|
1234
|
+
// the same value the spawner would have seen.
|
|
1235
|
+
if (role === 'public' && specialist !== undefined) {
|
|
1236
|
+
deps.logger(`[spawn] op=public-specialist-refused site=public-spawn specialist=${specialist} channel=${channel} senderId=${senderId}`);
|
|
1237
|
+
timed(deps.logger, 'POST', '/public-spawn', 400, Date.now() - start);
|
|
1238
|
+
return c.json({ error: 'specialist-not-permitted-on-public', detail: { specialist } }, 400);
|
|
1239
|
+
}
|
|
1209
1240
|
// Task 1489 — a passive intake spawn rides role:'public' on this path but is
|
|
1210
1241
|
// a trusted, sub-account-bound account manager, not an anonymous visitor. It
|
|
1211
1242
|
// is exempt from the anonymous-visitor limiter: `!passive` keeps a manager's
|
|
@@ -1316,6 +1347,22 @@ export function buildHttpApp(deps) {
|
|
|
1316
1347
|
deps.logger(`[spawn] op=agent-account-scope route=public-spawn account=${agentAccountId} applied=true`);
|
|
1317
1348
|
}
|
|
1318
1349
|
}
|
|
1350
|
+
// Task 2338 — the write-through /rc-spawn has always made (:3336, :3346,
|
|
1351
|
+
// :3355) and this route never did. Without it a session first spawned here
|
|
1352
|
+
// has no binding on disk, so the stuck-turn recycler has nothing to re-post
|
|
1353
|
+
// and the respawn loses the visitor's reply transport. A public spawn is
|
|
1354
|
+
// wa XOR webchat XOR telegram (pty-spawner.ts:1893), so at most one of
|
|
1355
|
+
// these fires. Gated on a caller-supplied sessionId because that is the
|
|
1356
|
+
// only id that exists before the spawn returns; a route that mints its own
|
|
1357
|
+
// id has no session to key on and no recycler re-post to serve.
|
|
1358
|
+
if (callerSessionId) {
|
|
1359
|
+
if (waChannel)
|
|
1360
|
+
deps.waChannelStore.set(callerSessionId, waChannel);
|
|
1361
|
+
if (webchatChannel)
|
|
1362
|
+
deps.webchatChannelStore?.set(callerSessionId, webchatChannel);
|
|
1363
|
+
if (telegramChannel)
|
|
1364
|
+
deps.telegramChannelStore?.set(callerSessionId, telegramChannel);
|
|
1365
|
+
}
|
|
1319
1366
|
const result = await spawnClaudeSession({
|
|
1320
1367
|
...deps,
|
|
1321
1368
|
spawnCwd,
|
|
@@ -1377,6 +1424,7 @@ export function buildHttpApp(deps) {
|
|
|
1377
1424
|
visitorId,
|
|
1378
1425
|
webchatChannel,
|
|
1379
1426
|
waChannel,
|
|
1427
|
+
telegramChannel,
|
|
1380
1428
|
...sessionIdFields,
|
|
1381
1429
|
previousContext,
|
|
1382
1430
|
targetAccountId,
|
|
@@ -3099,9 +3147,15 @@ export function buildHttpApp(deps) {
|
|
|
3099
3147
|
// `{ sessionId }` resumes that wedged-session recovery (index.ts, the
|
|
3100
3148
|
// recoverWedgedSession resumeSpawn) and the re-seat route send would be
|
|
3101
3149
|
// refused for carrying no role, when their role has been on disk all along.
|
|
3102
|
-
|
|
3103
|
-
|
|
3150
|
+
// Task 2267 — the whole read outcome, not just the sidecar. `readSidecar`
|
|
3151
|
+
// returns `ok` | `missing` | `parse-failed` and both failure verdicts yield
|
|
3152
|
+
// a null sidecar, so collapsing to `.sidecar` here made a damaged file
|
|
3153
|
+
// indistinguishable from a session that legitimately has none. The lockdown
|
|
3154
|
+
// gate below and the resolution line both read the verdict.
|
|
3155
|
+
const priorSidecarRead = sessionId
|
|
3156
|
+
? readSidecar(sidecarPathForSessionId(effectiveAccountDir, sessionId), deps.logger)
|
|
3104
3157
|
: null;
|
|
3158
|
+
const priorSidecar = priorSidecarRead?.sidecar ?? null;
|
|
3105
3159
|
// Task 2325 — the session's role, from the body or inherited from disk.
|
|
3106
3160
|
// The refusal sits here rather than at the body parse because an absent
|
|
3107
3161
|
// `role` has THREE legitimate readings and only one of them is an error:
|
|
@@ -3131,6 +3185,21 @@ export function buildHttpApp(deps) {
|
|
|
3131
3185
|
timed(deps.logger, 'POST', '/rc-spawn', 400, Date.now() - start);
|
|
3132
3186
|
return c.json({ error: 'invalid-arguments', detail: { role: body.role ?? null } }, 400);
|
|
3133
3187
|
}
|
|
3188
|
+
// Task 2267 — one line per channel-bound rc-spawn naming where the role came
|
|
3189
|
+
// from. Emitted only for a channel-bound spawn: a one-shot admin job has no
|
|
3190
|
+
// channel and no sidecar, so a line on every rc-spawn would be dominated by
|
|
3191
|
+
// that benign case. `source=unresolved` is the fail-closed spawn, and the
|
|
3192
|
+
// outcome behind it separates a deleted sidecar from a corrupted one.
|
|
3193
|
+
// Hoisted from the Task 1214 voice gate below, which reads the same value
|
|
3194
|
+
// and now shares this one binding.
|
|
3195
|
+
const channelBound = !!(effectiveWebchatChannel || effectiveWaChannel || effectiveTelegramChannel);
|
|
3196
|
+
if (sessionId && channelBound) {
|
|
3197
|
+
deps.logger(formatRoleResolutionLine({
|
|
3198
|
+
sessionId,
|
|
3199
|
+
source: rcRole ? 'body' : priorSidecar?.role ? 'sidecar' : 'unresolved',
|
|
3200
|
+
outcome: priorSidecarRead?.outcome ?? 'missing',
|
|
3201
|
+
}));
|
|
3202
|
+
}
|
|
3134
3203
|
// Task 850 — assemble the bound target set and choose the channel server:
|
|
3135
3204
|
// - ≥2 kinds: ONE unified `channel` server (one reply tool fanning to every
|
|
3136
3205
|
// target's existing gateway endpoint). The mature per-kind servers are
|
|
@@ -3251,9 +3320,28 @@ export function buildHttpApp(deps) {
|
|
|
3251
3320
|
// the first. `priorSidecar` is already read for any channel-bound session,
|
|
3252
3321
|
// which is every public spawn that can reply. Pushed after the channel argv
|
|
3253
3322
|
// so `--strict-mcp-config` leaves exactly the per-spawn channel server
|
|
3254
|
-
// registered; `admin`
|
|
3323
|
+
// registered; an `admin` spawn produces byte-identical argv.
|
|
3255
3324
|
// Task 2325 — resolved once, above, beside the refusal.
|
|
3256
|
-
|
|
3325
|
+
//
|
|
3326
|
+
// Task 2267 — a null role on a channel-bound spawn takes the lockdown too.
|
|
3327
|
+
// `effectiveRcRole` is null when neither the body nor the sidecar produced a
|
|
3328
|
+
// role, and a live public session always had a sidecar written at spawn
|
|
3329
|
+
// (pty-spawner kills the PTY when that write throws), so null on a
|
|
3330
|
+
// channel-bound session means the file was damaged after the spawn
|
|
3331
|
+
// succeeded, not that the session is legitimately roleless. Reaching here
|
|
3332
|
+
// with null is always a resume: a fresh spawn with no resolvable role is
|
|
3333
|
+
// refused with a 400 above, so no mode test is added. A roleless spawn with
|
|
3334
|
+
// NO channel binding — the one-shot admin jobs and the bare claude.ai/code
|
|
3335
|
+
// bridge resume — still produces byte-identical argv.
|
|
3336
|
+
//
|
|
3337
|
+
// The cost is stated rather than hidden. A channel-bound ADMIN resume whose
|
|
3338
|
+
// sidecar is unreadable comes back holding only its channel reply tool, and
|
|
3339
|
+
// stays that way on every later resume, because the sidecar write below is
|
|
3340
|
+
// itself gated on a non-null role and so never repairs the file. The
|
|
3341
|
+
// `op=role-resolution` line above is what makes that state greppable.
|
|
3342
|
+
const publicLockdown = effectiveRcRole === 'public' || (effectiveRcRole === null && channelBound)
|
|
3343
|
+
? buildRcPublicLockdownArgv(channelServerName)
|
|
3344
|
+
: null;
|
|
3257
3345
|
if (publicLockdown) {
|
|
3258
3346
|
// A re-seat fork pushes its own caller-picked --permission-mode above,
|
|
3259
3347
|
// before the role is known. Two conflicting flags do not reliably
|
|
@@ -3295,7 +3383,9 @@ export function buildHttpApp(deps) {
|
|
|
3295
3383
|
// overlay: a missing/empty/headingless file degrades to no voice segment and
|
|
3296
3384
|
// never fails the spawn. `voiceBytes` rides the op=argv line as the
|
|
3297
3385
|
// at-a-glance present/absent signal whose absence hid this bug.
|
|
3298
|
-
|
|
3386
|
+
// Task 2267 — `channelBound` was declared here; it is now resolved once,
|
|
3387
|
+
// beside the role resolution above, because the public lockdown gate needs
|
|
3388
|
+
// the same value earlier. Same expression, same meaning.
|
|
3299
3389
|
let voiceBytes = 0;
|
|
3300
3390
|
if (adminBinding && channelBound) {
|
|
3301
3391
|
let voice = null;
|
|
@@ -3372,13 +3462,25 @@ export function buildHttpApp(deps) {
|
|
|
3372
3462
|
// (effectiveAccountId !== house) spawns — fail-closed, no escalation.
|
|
3373
3463
|
const acctIsHouse = isHouseAccount(deps.platformRoot, effectiveAccountId);
|
|
3374
3464
|
const rcHouseAdminScope = houseAdminScopeFor({
|
|
3375
|
-
// Task
|
|
3376
|
-
// resume that omits the role
|
|
3377
|
-
//
|
|
3378
|
-
//
|
|
3379
|
-
//
|
|
3380
|
-
//
|
|
3381
|
-
|
|
3465
|
+
// Task 2335 — the SESSION's role (body, else prior sidecar), not the
|
|
3466
|
+
// body's `rcRole` alone. A resume that omits the role — the stuck-turn
|
|
3467
|
+
// recycler posts `{ sessionId, targetAccountId }` — used to fail the
|
|
3468
|
+
// `role === 'admin'` test and come back with no cross-account authority
|
|
3469
|
+
// while the same session's fresh spawn carried it. That divergence was
|
|
3470
|
+
// measured on one house session as a single `inject=false` line between
|
|
3471
|
+
// four `inject=true` lines, on the recycle resume 21s after a wedge kill.
|
|
3472
|
+
// Inheriting is not a widening, for two reasons that hold together. The
|
|
3473
|
+
// sidecar is read from `sidecarPathForSessionId(effectiveAccountDir, …)`
|
|
3474
|
+
// above — the SAME account that decides `isHouse` — so an inherited role
|
|
3475
|
+
// can only come from the resolved account's own record of this session;
|
|
3476
|
+
// a sub-account session resumed against the house account finds no
|
|
3477
|
+
// sidecar there and resolves null. And that record is read back through
|
|
3478
|
+
// the `['admin','public']` allowlist in `parseSidecar`, which rejects the
|
|
3479
|
+
// whole row on anything else, so the only role that can arrive here from
|
|
3480
|
+
// disk and open the gate is the `admin` this session's own fresh spawn
|
|
3481
|
+
// asserted on this account. `isHouse` still excludes every sub-account
|
|
3482
|
+
// resume on top of that.
|
|
3483
|
+
role: effectiveRcRole,
|
|
3382
3484
|
accountId: effectiveAccountId,
|
|
3383
3485
|
isHouse: acctIsHouse,
|
|
3384
3486
|
isSpecialist: false,
|
|
@@ -3528,6 +3630,15 @@ export function buildHttpApp(deps) {
|
|
|
3528
3630
|
strictMcp: publicLockdown !== null,
|
|
3529
3631
|
mode: effectiveRcPermissionMode,
|
|
3530
3632
|
}));
|
|
3633
|
+
// Task 2339 — the realised-surface hook's only input. `tool-allowlist` above
|
|
3634
|
+
// records the surface this spawn was GIVEN; nothing recorded the surface it
|
|
3635
|
+
// REALISES, so five tools ran under a one-tool allowlist and produced no
|
|
3636
|
+
// line. Stamped here rather than inside buildRcChildEnv so it lands after
|
|
3637
|
+
// the last argv push and the value is this spawn's final `--allowed-tools`
|
|
3638
|
+
// set. Public spawns only; its presence is the signal the hook keys on.
|
|
3639
|
+
if (publicLockdown) {
|
|
3640
|
+
env[PUBLIC_ALLOWED_TOOLS_ENV] = allowedToolsFromArgv(argv).join(',');
|
|
3641
|
+
}
|
|
3531
3642
|
deps.logger(`[rc-spawn] op=argv unitToken=${unitToken} cwd=${effectiveAccountDir} permissionMode=${effectiveRcPermissionMode} model=${effectiveRcModel ?? 'unset'} effort=${effectiveRcEffort ?? 'unset'} positionalBytes=${positionalBytes} voiceBytes=${voiceBytes} argv=${JSON.stringify([deps.claudeBin, ...argv])}`);
|
|
3532
3643
|
emitRcLife(deps.logger, 'argv', 'rc-spawn', 'node-pty', rcLifeMode, unitToken, {
|
|
3533
3644
|
cwd: effectiveAccountDir,
|
|
@@ -3679,6 +3790,11 @@ export function buildHttpApp(deps) {
|
|
|
3679
3790
|
// into the child env above (rcHouseAdminScope), so env and sidecar
|
|
3680
3791
|
// are one decision with two consumers and can never drift again.
|
|
3681
3792
|
houseAdminScope: rcHouseAdminScope,
|
|
3793
|
+
// Task 2338 — the route that produced this process. Only
|
|
3794
|
+
// /public-spawn composes a persona, so a `public` role recorded
|
|
3795
|
+
// here with route `rc-spawn` is a session running without its
|
|
3796
|
+
// soul file, which is what the persona audit counts.
|
|
3797
|
+
spawnRoute: 'rc-spawn',
|
|
3682
3798
|
}, deps.logger);
|
|
3683
3799
|
deps.watcher.refreshSidecar?.(sessionId);
|
|
3684
3800
|
}
|
|
@@ -3695,6 +3811,34 @@ export function buildHttpApp(deps) {
|
|
|
3695
3811
|
deps.watcher.refreshSidecar?.(sessionId);
|
|
3696
3812
|
}
|
|
3697
3813
|
}
|
|
3814
|
+
// Task 2338 — the route stamp sits OUTSIDE the classification block above,
|
|
3815
|
+
// and that placement is the whole point. That block is gated on a channel
|
|
3816
|
+
// in the request BODY (`adminChannel`, :3037), and the resume shapes that
|
|
3817
|
+
// matter here carry none: the claude.ai/code bridge posts
|
|
3818
|
+
// `{ sessionId, name }` and wedged-session recovery posts `{ sessionId }`
|
|
3819
|
+
// (see the note at :3390). Inside the block, a bare resume of a public
|
|
3820
|
+
// session would leave `spawnRoute` reading `public-spawn` and the persona
|
|
3821
|
+
// audit would report zero through a live defect — which is exactly the
|
|
3822
|
+
// 2026-08-01 sequence this task exists to make visible.
|
|
3823
|
+
//
|
|
3824
|
+
// Patched, never written fresh: with no prior sidecar there is no row to
|
|
3825
|
+
// record a route on, and inventing one here would bypass the role/channel
|
|
3826
|
+
// allowlist the write above enforces. Patched only when the value would
|
|
3827
|
+
// change, so a repeated rc-spawn resume does not rewrite the file each turn.
|
|
3828
|
+
if (sessionId && priorSidecar && priorSidecar.spawnRoute !== 'rc-spawn') {
|
|
3829
|
+
const routeSidecarPath = sidecarPathForSessionId(effectiveAccountDir, sessionId);
|
|
3830
|
+
try {
|
|
3831
|
+
const patched = updateSidecar(routeSidecarPath, { spawnRoute: 'rc-spawn' }, deps.logger);
|
|
3832
|
+
if (patched)
|
|
3833
|
+
deps.watcher.refreshSidecar?.(sessionId);
|
|
3834
|
+
}
|
|
3835
|
+
catch (err) {
|
|
3836
|
+
// Non-fatal, same contract as the classification write: the PTY here is
|
|
3837
|
+
// already serving a live thread and a diagnostic write must not tear it
|
|
3838
|
+
// down.
|
|
3839
|
+
deps.logger(`[rc-spawn] op=spawn-route-patch-failed sessionId=${sessionId.slice(0, 8)} err=${JSON.stringify(err instanceof Error ? err.message : String(err))}`);
|
|
3840
|
+
}
|
|
3841
|
+
}
|
|
3698
3842
|
// Task 626 — one-shot job (LinkedIn ingest, public session-end review):
|
|
3699
3843
|
// stop the PTY once its single assistant turn lands `end_turn`. closeAfterTurn
|
|
3700
3844
|
// implies a sessionId (validated above), so trackerKey === sessionId and the
|