@rubytech/create-sitedesk-code 0.1.529 → 0.1.531
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/index.js +13 -0
- package/package.json +1 -1
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +4 -0
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +4 -0
- package/payload/platform/lib/learning-constants/dist/index.d.ts +35 -0
- package/payload/platform/lib/learning-constants/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/learning-constants/dist/index.js +50 -0
- package/payload/platform/lib/learning-constants/dist/index.js.map +1 -0
- package/payload/platform/lib/learning-constants/package.json +7 -0
- package/payload/platform/lib/learning-constants/src/index.test.ts +47 -0
- package/payload/platform/lib/learning-constants/src/index.ts +57 -0
- package/payload/platform/lib/learning-constants/tsconfig.json +9 -0
- package/payload/platform/lib/routine-templates/dist/index.d.ts +19 -3
- package/payload/platform/lib/routine-templates/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/routine-templates/dist/index.js +22 -4
- package/payload/platform/lib/routine-templates/dist/index.js.map +1 -1
- package/payload/platform/lib/routine-templates/dist/roster.d.ts +19 -6
- package/payload/platform/lib/routine-templates/dist/roster.d.ts.map +1 -1
- package/payload/platform/lib/routine-templates/dist/roster.js +127 -17
- package/payload/platform/lib/routine-templates/dist/roster.js.map +1 -1
- package/payload/platform/lib/routine-templates/src/__tests__/roster.test.ts +46 -3
- package/payload/platform/lib/routine-templates/src/__tests__/seed.test.ts +52 -10
- package/payload/platform/lib/routine-templates/src/index.ts +30 -4
- package/payload/platform/lib/routine-templates/src/roster.ts +147 -17
- package/payload/platform/neo4j/schema.cypher +24 -0
- package/payload/platform/package.json +1 -1
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js +2 -2
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/insight/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +64 -12
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +13 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +6 -2
- package/payload/platform/plugins/docs/references/linkedin-extension.md +18 -9
- package/payload/platform/plugins/docs/references/session-retrospective.md +39 -0
- package/payload/platform/plugins/linkedin-extension/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/linkedin-extension/PLUGIN.md +7 -10
- package/payload/platform/plugins/linkedin-extension/extension/README.md +20 -17
- package/payload/platform/plugins/linkedin-extension/extension/background/sw.js +96 -13
- package/payload/platform/plugins/linkedin-extension/extension/manifest.json +3 -18
- package/payload/platform/plugins/linkedin-extension/extension/options/options.html +2 -2
- package/payload/platform/plugins/linkedin-extension/extension/options/options.js +1 -1
- package/payload/platform/plugins/memory/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +15 -1
- package/payload/platform/plugins/memory/mcp/dist/index.js +169 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/session-jsonl.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/session-jsonl.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/session-jsonl.test.js +95 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/session-jsonl.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/session-jsonl.d.ts +60 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/session-jsonl.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/session-jsonl.js +153 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/session-jsonl.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/cross-account.test.js +6 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/cross-account.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-derive.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-derive.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-derive.test.js +160 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-derive.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-recall.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-recall.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-recall.test.js +64 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-recall.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-scan.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-scan.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-scan.test.js +78 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/learnings-scan.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-derive.d.ts +41 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-derive.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-derive.js +225 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-derive.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-recall.d.ts +31 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-recall.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-recall.js +67 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-recall.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-scan.d.ts +40 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-scan.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-scan.js +55 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/learnings-scan.js.map +1 -0
- package/payload/platform/plugins/memory/references/schema-base.md +3 -0
- package/payload/platform/plugins/memory/skills/learnings-recall/SKILL.md +27 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +5 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.js +100 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.d.ts +36 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.js +82 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/dispatcher-env.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts +31 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js +99 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +12 -12
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.js +79 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/converge-startdate-utc.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.js +23 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/dispatch-lateness.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +61 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +33 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +96 -7
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +21 -69
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts +24 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js +87 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.js +123 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-startdate.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.js +71 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-startdate.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js +14 -3
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +9 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +19 -3
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +24 -9
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js +4 -4
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +3 -3
- package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +6 -2
- package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +5 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +3 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/learning-index.d.ts +28 -0
- package/payload/platform/services/claude-session-manager/dist/learning-index.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/learning-index.js +70 -0
- package/payload/platform/services/claude-session-manager/dist/learning-index.js.map +1 -0
- 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 +18 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +6 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +17 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/templates/specialists/agents/librarian.md +1 -1
- package/payload/server/{chunk-UTIHI6KV.js → chunk-SVB5NZ64.js} +53 -42
- package/payload/server/{manager-B4LRDZKC.js → manager-4Q3DTLXO.js} +5 -1
- package/payload/server/package.json +1 -1
- package/payload/server/public/activity.html +5 -5
- package/payload/server/public/agents.html +4 -4
- package/payload/server/public/assets/{AdminLoginScreens-zfexKfbT.js → AdminLoginScreens-7Czw3MAC.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-7Czw3MAC.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-7Czw3MAC.js.gz +0 -0
- package/payload/server/public/assets/{AdminShell-Cbk0TL1B.js → AdminShell-D5GApZ_n.js} +1 -1
- package/payload/server/public/assets/AdminShell-D5GApZ_n.js.br +0 -0
- package/payload/server/public/assets/AdminShell-D5GApZ_n.js.gz +0 -0
- package/payload/server/public/assets/{CdpScreencastSurface-CLSQHh4e.js → CdpScreencastSurface-BbekDUFw.js} +1 -1
- package/payload/server/public/assets/CdpScreencastSurface-BbekDUFw.js.br +0 -0
- package/payload/server/public/assets/CdpScreencastSurface-BbekDUFw.js.gz +0 -0
- package/payload/server/public/assets/{activity-u275Oc-u.js → activity-ClI-RgJu.js} +1 -1
- package/payload/server/public/assets/activity-ClI-RgJu.js.br +0 -0
- package/payload/server/public/assets/activity-ClI-RgJu.js.gz +0 -0
- package/payload/server/public/assets/{admin-Du1nR_hP.js → admin-svtCmBPk.js} +1 -1
- package/payload/server/public/assets/admin-svtCmBPk.js.br +0 -0
- package/payload/server/public/assets/admin-svtCmBPk.js.gz +0 -0
- package/payload/server/public/assets/{agents-DJTxRLLU.js → agents-BO8YBj8d.js} +1 -1
- package/payload/server/public/assets/agents-BO8YBj8d.js.br +0 -0
- package/payload/server/public/assets/agents-BO8YBj8d.js.gz +0 -0
- package/payload/server/public/assets/{browser-Bft6zVkX.js → browser-Bj8oTG5R.js} +1 -1
- package/payload/server/public/assets/browser-Bj8oTG5R.js.br +0 -0
- package/payload/server/public/assets/browser-Bj8oTG5R.js.gz +0 -0
- package/payload/server/public/assets/{calendar-Ct-DCCqY.js → calendar-CrkSY8U7.js} +1 -1
- package/payload/server/public/assets/calendar-CrkSY8U7.js.br +0 -0
- package/payload/server/public/assets/calendar-CrkSY8U7.js.gz +0 -0
- package/payload/server/public/assets/chat-Bvxoni2e.js +1 -0
- package/payload/server/public/assets/chat-Bvxoni2e.js.br +0 -0
- package/payload/server/public/assets/chat-Bvxoni2e.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-CdUzxzeB.js +1 -0
- package/payload/server/public/assets/chevron-left-CdUzxzeB.js.br +0 -0
- package/payload/server/public/assets/chevron-right-CKGwd-M0.js +1 -0
- package/payload/server/public/assets/chevron-right-CKGwd-M0.js.br +0 -0
- package/payload/server/public/assets/clock-Cf8Oe9qi.js +1 -0
- package/payload/server/public/assets/clock-Cf8Oe9qi.js.br +0 -0
- package/payload/server/public/assets/clock-Cf8Oe9qi.js.gz +0 -0
- package/payload/server/public/assets/data-DF0Pstdp.js +1 -0
- package/payload/server/public/assets/data-DF0Pstdp.js.br +1 -0
- package/payload/server/public/assets/data-DF0Pstdp.js.gz +0 -0
- package/payload/server/public/assets/{file-download-C_fSe4dm.js → file-download-Di_s0_4w.js} +1 -1
- package/payload/server/public/assets/file-download-Di_s0_4w.js.br +0 -0
- package/payload/server/public/assets/file-download-Di_s0_4w.js.gz +0 -0
- package/payload/server/public/assets/{file-text-D7GbEcqj.js → file-text-CP1KIrJV.js} +1 -1
- package/payload/server/public/assets/file-text-CP1KIrJV.js.br +1 -0
- package/payload/server/public/assets/file-text-CP1KIrJV.js.gz +0 -0
- package/payload/server/public/assets/{graph-yl5qU1kO.js → graph-BCMscnCV.js} +1 -1
- package/payload/server/public/assets/graph-BCMscnCV.js.br +0 -0
- package/payload/server/public/assets/graph-BCMscnCV.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-Dlcb6cW7.js → graph-labels-CgP17xHK.js} +1 -1
- package/payload/server/public/assets/graph-labels-CgP17xHK.js.br +0 -0
- package/payload/server/public/assets/graph-labels-CgP17xHK.js.gz +0 -0
- package/payload/server/public/assets/{maximize-2-BS689r4W.js → maximize-2-DkQzDv-g.js} +1 -1
- package/payload/server/public/assets/maximize-2-DkQzDv-g.js.br +0 -0
- package/payload/server/public/assets/maximize-2-DkQzDv-g.js.gz +0 -0
- package/payload/server/public/assets/{operator-CvapnpIW.js → operator-CLbCar9e.js} +1 -1
- package/payload/server/public/assets/operator-CLbCar9e.js.br +0 -0
- package/payload/server/public/assets/operator-CLbCar9e.js.gz +0 -0
- package/payload/server/public/assets/{page-DWkUH4Z_.js → page-CNJl3tWT.js} +1 -1
- package/payload/server/public/assets/page-CNJl3tWT.js.br +0 -0
- package/payload/server/public/assets/page-CNJl3tWT.js.gz +0 -0
- package/payload/server/public/assets/{page-987y4JbQ.js → page-CPVUAwb8.js} +1 -1
- package/payload/server/public/assets/page-CPVUAwb8.js.br +0 -0
- package/payload/server/public/assets/page-CPVUAwb8.js.gz +0 -0
- package/payload/server/public/assets/{public-D5pi-VFn.js → public-DQea3Ybz.js} +1 -1
- package/payload/server/public/assets/public-DQea3Ybz.js.br +0 -0
- package/payload/server/public/assets/public-DQea3Ybz.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-zNxnK36R.js → rotate-ccw-DPw0vXC0.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-DPw0vXC0.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-DPw0vXC0.js.gz +0 -0
- package/payload/server/public/assets/{routines-mZzrGA5y.js → routines-CwiiYpfK.js} +2 -2
- package/payload/server/public/assets/routines-CwiiYpfK.js.br +0 -0
- package/payload/server/public/assets/routines-CwiiYpfK.js.gz +0 -0
- package/payload/server/public/assets/{skills-5A8PockT.js → skills-0FOjKUM-.js} +1 -1
- package/payload/server/public/assets/skills-0FOjKUM-.js.br +0 -0
- package/payload/server/public/assets/skills-0FOjKUM-.js.gz +0 -0
- package/payload/server/public/assets/{tasks-B1_2wc6L.js → tasks-BUVsPEGm.js} +1 -1
- package/payload/server/public/assets/tasks-BUVsPEGm.js.br +0 -0
- package/payload/server/public/assets/tasks-BUVsPEGm.js.gz +0 -0
- package/payload/server/public/assets/{time-entry-format-CJ2FSSQt.js → time-entry-format-B6fX_19a.js} +1 -1
- package/payload/server/public/assets/time-entry-format-B6fX_19a.js.br +0 -0
- package/payload/server/public/assets/time-entry-format-B6fX_19a.js.gz +0 -0
- package/payload/server/public/assets/{triangle-alert-CedsrgME.js → triangle-alert-vAaSDhVq.js} +1 -1
- package/payload/server/public/assets/triangle-alert-vAaSDhVq.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-vAaSDhVq.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-zjZZUC2-.js → useCopyFeedback-BvIRgs7W.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-BvIRgs7W.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-BvIRgs7W.js.gz +0 -0
- package/payload/server/public/assets/{useSubAccountSwitcher-72THldvm.css → useSubAccountSwitcher-DM5Y9eio.css} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-DM5Y9eio.css.br +0 -0
- package/payload/server/public/assets/{useSubAccountSwitcher-72THldvm.css.gz → useSubAccountSwitcher-DM5Y9eio.css.gz} +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-CJecnefX.js → useVoiceRecorder-CiDOh8PG.js} +1 -1
- package/payload/server/public/assets/useVoiceRecorder-CiDOh8PG.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-CiDOh8PG.js.gz +0 -0
- package/payload/server/public/assets/{wrench-D8BH20W8.js → wrench-BNBtwT2p.js} +1 -1
- package/payload/server/public/assets/wrench-BNBtwT2p.js.br +0 -0
- package/payload/server/public/assets/wrench-BNBtwT2p.js.gz +0 -0
- package/payload/server/public/browser.html +5 -5
- package/payload/server/public/calendar.html +7 -7
- package/payload/server/public/chat.html +13 -13
- package/payload/server/public/data.html +12 -12
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +16 -16
- package/payload/server/public/operator.html +15 -15
- package/payload/server/public/public.html +13 -13
- package/payload/server/public/routines.html +7 -7
- package/payload/server/public/skills.html +5 -5
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/server.js +73 -19
- package/payload/platform/plugins/linkedin-extension/extension/assets/pill.css +0 -52
- package/payload/platform/plugins/linkedin-extension/extension/content/profile.js +0 -100
- package/payload/platform/plugins/linkedin-extension/extension/content/thread.js +0 -102
- package/payload/server/public/assets/AdminLoginScreens-zfexKfbT.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-zfexKfbT.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-Cbk0TL1B.js.br +0 -0
- package/payload/server/public/assets/AdminShell-Cbk0TL1B.js.gz +0 -0
- package/payload/server/public/assets/CdpScreencastSurface-CLSQHh4e.js.br +0 -0
- package/payload/server/public/assets/CdpScreencastSurface-CLSQHh4e.js.gz +0 -0
- package/payload/server/public/assets/activity-u275Oc-u.js.br +0 -0
- package/payload/server/public/assets/activity-u275Oc-u.js.gz +0 -0
- package/payload/server/public/assets/admin-Du1nR_hP.js.br +0 -0
- package/payload/server/public/assets/admin-Du1nR_hP.js.gz +0 -0
- package/payload/server/public/assets/agents-DJTxRLLU.js.br +0 -0
- package/payload/server/public/assets/agents-DJTxRLLU.js.gz +0 -0
- package/payload/server/public/assets/browser-Bft6zVkX.js.br +0 -0
- package/payload/server/public/assets/browser-Bft6zVkX.js.gz +0 -0
- package/payload/server/public/assets/calendar-Ct-DCCqY.js.br +0 -0
- package/payload/server/public/assets/calendar-Ct-DCCqY.js.gz +0 -0
- package/payload/server/public/assets/chat-pqasbAg8.js +0 -1
- package/payload/server/public/assets/chat-pqasbAg8.js.br +0 -0
- package/payload/server/public/assets/chat-pqasbAg8.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-C8LTc7lb.js +0 -1
- package/payload/server/public/assets/chevron-right-Lz9t7Hed.js +0 -1
- package/payload/server/public/assets/chevron-right-Lz9t7Hed.js.br +0 -0
- package/payload/server/public/assets/clock-D6QQFHwJ.js +0 -1
- package/payload/server/public/assets/clock-D6QQFHwJ.js.br +0 -0
- package/payload/server/public/assets/clock-D6QQFHwJ.js.gz +0 -0
- package/payload/server/public/assets/data-B1JJ3Y1T.js +0 -1
- package/payload/server/public/assets/data-B1JJ3Y1T.js.br +0 -0
- package/payload/server/public/assets/data-B1JJ3Y1T.js.gz +0 -0
- package/payload/server/public/assets/file-download-C_fSe4dm.js.br +0 -0
- package/payload/server/public/assets/file-download-C_fSe4dm.js.gz +0 -0
- package/payload/server/public/assets/file-text-D7GbEcqj.js.br +0 -0
- package/payload/server/public/assets/file-text-D7GbEcqj.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-Dlcb6cW7.js.br +0 -0
- package/payload/server/public/assets/graph-labels-Dlcb6cW7.js.gz +0 -0
- package/payload/server/public/assets/graph-yl5qU1kO.js.br +0 -0
- package/payload/server/public/assets/graph-yl5qU1kO.js.gz +0 -0
- package/payload/server/public/assets/maximize-2-BS689r4W.js.br +0 -0
- package/payload/server/public/assets/maximize-2-BS689r4W.js.gz +0 -0
- package/payload/server/public/assets/operator-CvapnpIW.js.br +0 -0
- package/payload/server/public/assets/operator-CvapnpIW.js.gz +0 -0
- package/payload/server/public/assets/page-987y4JbQ.js.br +0 -0
- package/payload/server/public/assets/page-987y4JbQ.js.gz +0 -0
- package/payload/server/public/assets/page-DWkUH4Z_.js.br +0 -0
- package/payload/server/public/assets/page-DWkUH4Z_.js.gz +0 -0
- package/payload/server/public/assets/public-D5pi-VFn.js.br +0 -0
- package/payload/server/public/assets/public-D5pi-VFn.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-zNxnK36R.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-zNxnK36R.js.gz +0 -0
- package/payload/server/public/assets/routines-mZzrGA5y.js.br +0 -0
- package/payload/server/public/assets/routines-mZzrGA5y.js.gz +0 -0
- package/payload/server/public/assets/skills-5A8PockT.js.br +0 -0
- package/payload/server/public/assets/skills-5A8PockT.js.gz +0 -0
- package/payload/server/public/assets/tasks-B1_2wc6L.js.br +0 -0
- package/payload/server/public/assets/tasks-B1_2wc6L.js.gz +0 -0
- package/payload/server/public/assets/time-entry-format-CJ2FSSQt.js.br +0 -0
- package/payload/server/public/assets/time-entry-format-CJ2FSSQt.js.gz +0 -0
- package/payload/server/public/assets/triangle-alert-CedsrgME.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-CedsrgME.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-zjZZUC2-.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-zjZZUC2-.js.gz +0 -0
- package/payload/server/public/assets/useSubAccountSwitcher-72THldvm.css.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-CJecnefX.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-CJecnefX.js.gz +0 -0
- package/payload/server/public/assets/wrench-D8BH20W8.js.br +0 -0
- package/payload/server/public/assets/wrench-D8BH20W8.js.gz +0 -0
- /package/payload/server/public/assets/{useSubAccountSwitcher-HjQZjJBr.js → useSubAccountSwitcher-BEwQMRMo.js} +0 -0
- /package/payload/server/public/assets/{useSubAccountSwitcher-HjQZjJBr.js.br → useSubAccountSwitcher-BEwQMRMo.js.br} +0 -0
- /package/payload/server/public/assets/{useSubAccountSwitcher-HjQZjJBr.js.gz → useSubAccountSwitcher-BEwQMRMo.js.gz} +0 -0
package/payload/server/server.js
CHANGED
|
@@ -124,6 +124,7 @@ import {
|
|
|
124
124
|
isUserJid,
|
|
125
125
|
isWithinOwnAccountPartition,
|
|
126
126
|
jidToE164,
|
|
127
|
+
listConnectionAccountStamps,
|
|
127
128
|
listConnectionPlatformAccountIds,
|
|
128
129
|
listConnections,
|
|
129
130
|
listLedgerAccounts,
|
|
@@ -183,7 +184,7 @@ import {
|
|
|
183
184
|
waitForConnection,
|
|
184
185
|
warnNonUuidAccount,
|
|
185
186
|
writeChatMetadataMerged
|
|
186
|
-
} from "./chunk-
|
|
187
|
+
} from "./chunk-SVB5NZ64.js";
|
|
187
188
|
import {
|
|
188
189
|
ACCOUNTS_DIR,
|
|
189
190
|
BIN_DIR,
|
|
@@ -1586,7 +1587,11 @@ var require_dist5 = __commonJS({
|
|
|
1586
1587
|
"Risk",
|
|
1587
1588
|
"Source",
|
|
1588
1589
|
"Finding",
|
|
1589
|
-
"Hypothesis"
|
|
1590
|
+
"Hypothesis",
|
|
1591
|
+
// Task 2220 — :Learning carries learning_embedding, which learnings-derive
|
|
1592
|
+
// queries by name to reconcile a claim against an existing learning. Without
|
|
1593
|
+
// it here the chokepoint cannot detect a null-embedding Learning write.
|
|
1594
|
+
"Learning"
|
|
1590
1595
|
]);
|
|
1591
1596
|
exports.DOCUMENT_ARCHIVE_LABELS = /* @__PURE__ */ new Set([
|
|
1592
1597
|
"KnowledgeDocument",
|
|
@@ -4999,7 +5004,7 @@ async function defaultHttpGet(url) {
|
|
|
4999
5004
|
}
|
|
5000
5005
|
}
|
|
5001
5006
|
async function defaultResolve(accountId) {
|
|
5002
|
-
const { resolveSocket: resolveSocket2 } = await import("./manager-
|
|
5007
|
+
const { resolveSocket: resolveSocket2 } = await import("./manager-4Q3DTLXO.js");
|
|
5003
5008
|
return resolveSocket2(accountId);
|
|
5004
5009
|
}
|
|
5005
5010
|
async function fetchAvatar(accountId, jid, deps = {}) {
|
|
@@ -6144,6 +6149,15 @@ function reconcileMessageStoreAccountKeys(input) {
|
|
|
6144
6149
|
return { ok: orphanLiveKeys.length === 0, orphanLiveKeys };
|
|
6145
6150
|
}
|
|
6146
6151
|
|
|
6152
|
+
// app/lib/whatsapp/connection-account-reconcile.ts
|
|
6153
|
+
function reconcileConnectionAccountStamps(input) {
|
|
6154
|
+
const registered = new Set(input.registeredAccountIds);
|
|
6155
|
+
const mismatches = input.connections.filter(
|
|
6156
|
+
(c) => registered.has(c.accountId) && c.platformAccountId !== c.accountId
|
|
6157
|
+
);
|
|
6158
|
+
return { ok: mismatches.length === 0, mismatches };
|
|
6159
|
+
}
|
|
6160
|
+
|
|
6147
6161
|
// app/lib/whatsapp/outbound/send-document.ts
|
|
6148
6162
|
import { realpathSync } from "fs";
|
|
6149
6163
|
import { readFile as readFile3, stat as stat2 } from "fs/promises";
|
|
@@ -6513,20 +6527,39 @@ function houseSocketScopeDenial(c, op) {
|
|
|
6513
6527
|
console.error(`${TAG14} op=authz-deny route=${op} caller=${callerAccountId ?? "none"} houseAdmin=${houseAdminScope ? "y" : "n"}`);
|
|
6514
6528
|
return c.json({ ok: false, error: "Not authorized. The WhatsApp connection and its settings are house-scoped; this session may only act on its own account." }, 403);
|
|
6515
6529
|
}
|
|
6516
|
-
function selfOrHouseScopeDenial(c, targetAccountId, op) {
|
|
6530
|
+
function selfOrHouseScopeDenial(c, targetAccountId, op, targetSource = "explicit") {
|
|
6517
6531
|
const { decision, callerAccountId, houseAdminScope } = evaluateCallerScope(c, targetAccountId);
|
|
6532
|
+
const tail = `target=${targetAccountId} targetSource=${targetSource} caller=${callerAccountId ?? "none"} houseAdmin=${houseAdminScope ? "y" : "n"}`;
|
|
6518
6533
|
if (decision.authorized) {
|
|
6519
|
-
console.error(`${TAG14} op=authz-ok route=${op}
|
|
6534
|
+
console.error(`${TAG14} op=authz-ok route=${op} ${tail}`);
|
|
6520
6535
|
return null;
|
|
6521
6536
|
}
|
|
6522
|
-
console.error(`${TAG14} op=authz-deny route=${op}
|
|
6537
|
+
console.error(`${TAG14} op=authz-deny route=${op} ${tail}`);
|
|
6523
6538
|
return c.json({ ok: false, error: "Not authorized. This session may only pair or manage its own account." }, 403);
|
|
6524
6539
|
}
|
|
6540
|
+
function resolveLifecycleAccountId(c, raw) {
|
|
6541
|
+
if (typeof raw === "string" && raw.trim().length > 0) {
|
|
6542
|
+
return { accountId: validateAccountId(raw), targetSource: "explicit" };
|
|
6543
|
+
}
|
|
6544
|
+
const callerAccountId = c.req.header("x-maxy-caller-account")?.trim() || null;
|
|
6545
|
+
const houseAdminScope = c.req.header("x-maxy-house-admin-scope")?.trim() || null;
|
|
6546
|
+
const houseAccountId = resolveAccount()?.accountId ?? "";
|
|
6547
|
+
const callerIsHouse = !!houseAdminScope || !!callerAccountId && callerAccountId === houseAccountId;
|
|
6548
|
+
if (callerIsHouse || !callerAccountId) {
|
|
6549
|
+
return { accountId: "default", targetSource: "house-default" };
|
|
6550
|
+
}
|
|
6551
|
+
return { accountId: validateAccountId(callerAccountId), targetSource: "caller-default" };
|
|
6552
|
+
}
|
|
6525
6553
|
var app3 = new Hono();
|
|
6526
6554
|
app3.get("/status", (c) => {
|
|
6527
6555
|
try {
|
|
6528
|
-
const
|
|
6529
|
-
|
|
6556
|
+
const houseAccountId = resolveAccount()?.accountId ?? "";
|
|
6557
|
+
const { decision, callerAccountId, houseAdminScope } = evaluateCallerScope(c, houseAccountId);
|
|
6558
|
+
const houseScoped = decision.authorized;
|
|
6559
|
+
if (!houseScoped && !callerAccountId) {
|
|
6560
|
+
console.error(`${TAG14} op=authz-deny route=status caller=none houseAdmin=${houseAdminScope ? "y" : "n"}`);
|
|
6561
|
+
return c.json({ ok: false, error: "Not authorized. The WhatsApp connection and its settings are house-scoped; this session may only act on its own account." }, 403);
|
|
6562
|
+
}
|
|
6530
6563
|
const live = getStatus();
|
|
6531
6564
|
const liveIds = new Set(live.map((a) => a.accountId));
|
|
6532
6565
|
const activeLoginIds = new Set(listActiveLoginAccountIds());
|
|
@@ -6540,6 +6573,11 @@ app3.get("/status", (c) => {
|
|
|
6540
6573
|
}));
|
|
6541
6574
|
const summary = accounts.map((a) => `${a.accountId}:${a.connected ? "up" : a.linkedUnconfigured ? "linked-unconfigured" : "down"}:${a.dispatchInbound ? "dispatch" : "observe"}`).join(", ");
|
|
6542
6575
|
console.error(`${TAG14} status accounts=${accounts.length} [${summary}]`);
|
|
6576
|
+
if (!houseScoped) {
|
|
6577
|
+
const own = accounts.filter((a) => a.accountId === callerAccountId);
|
|
6578
|
+
console.error(`${TAG14} op=status-projection caller=${callerAccountId.slice(0, 8)} scope=self rows=${own.length}`);
|
|
6579
|
+
return c.json({ accounts: own });
|
|
6580
|
+
}
|
|
6543
6581
|
const reachableAccountIds = [
|
|
6544
6582
|
.../* @__PURE__ */ new Set([...listStoredAccountIds(), ...listConnectionPlatformAccountIds()])
|
|
6545
6583
|
];
|
|
@@ -6550,7 +6588,16 @@ app3.get("/status", (c) => {
|
|
|
6550
6588
|
if (!storeKeyReconcile.ok) {
|
|
6551
6589
|
console.warn(`${TAG14} store-key-drift orphanLiveKeys=[${storeKeyReconcile.orphanLiveKeys.join(",")}] \u2014 in-memory cache keyed by a value with no disk account; read tools will miss`);
|
|
6552
6590
|
}
|
|
6553
|
-
|
|
6591
|
+
const connectionAccountReconcile = reconcileConnectionAccountStamps({
|
|
6592
|
+
connections: listConnectionAccountStamps(),
|
|
6593
|
+
registeredAccountIds: listValidAccounts().map((a) => a.accountId)
|
|
6594
|
+
});
|
|
6595
|
+
if (!connectionAccountReconcile.ok) {
|
|
6596
|
+
const pairs = connectionAccountReconcile.mismatches.map((m) => `${m.accountId}:${m.platformAccountId}`).join(",");
|
|
6597
|
+
console.warn(`${TAG14} connection-account-drift mismatches=[${pairs}] \u2014 a socket keyed by a registered account is stamping a different one; its messages persist and read under that account`);
|
|
6598
|
+
}
|
|
6599
|
+
console.error(`${TAG14} op=status-projection caller=${callerAccountId?.slice(0, 8) ?? "none"} scope=house rows=${accounts.length}`);
|
|
6600
|
+
return c.json({ accounts, storeKeyReconcile, connectionAccountReconcile });
|
|
6554
6601
|
} catch (err) {
|
|
6555
6602
|
console.error(`${TAG14} status error: ${String(err)}`);
|
|
6556
6603
|
return c.json({ error: String(err) }, 500);
|
|
@@ -6559,8 +6606,8 @@ app3.get("/status", (c) => {
|
|
|
6559
6606
|
app3.post("/login/start", async (c) => {
|
|
6560
6607
|
try {
|
|
6561
6608
|
const body = await c.req.json().catch(() => ({}));
|
|
6562
|
-
const accountId =
|
|
6563
|
-
const denial = selfOrHouseScopeDenial(c, accountId, "login/start");
|
|
6609
|
+
const { accountId, targetSource } = resolveLifecycleAccountId(c, body.accountId);
|
|
6610
|
+
const denial = selfOrHouseScopeDenial(c, accountId, "login/start", targetSource);
|
|
6564
6611
|
if (denial) return denial;
|
|
6565
6612
|
const force = body.force ?? false;
|
|
6566
6613
|
const phone = typeof body.phone === "string" ? body.phone.trim() : "";
|
|
@@ -6580,8 +6627,8 @@ app3.post("/login/start", async (c) => {
|
|
|
6580
6627
|
app3.post("/login/wait", async (c) => {
|
|
6581
6628
|
try {
|
|
6582
6629
|
const body = await c.req.json().catch(() => ({}));
|
|
6583
|
-
const accountId =
|
|
6584
|
-
const denial = selfOrHouseScopeDenial(c, accountId, "login/wait");
|
|
6630
|
+
const { accountId, targetSource } = resolveLifecycleAccountId(c, body.accountId);
|
|
6631
|
+
const denial = selfOrHouseScopeDenial(c, accountId, "login/wait", targetSource);
|
|
6585
6632
|
if (denial) return denial;
|
|
6586
6633
|
const timeoutMs = body.timeoutMs ?? 6e4;
|
|
6587
6634
|
const result = await waitForLogin({ accountId, timeoutMs });
|
|
@@ -6600,8 +6647,8 @@ app3.post("/login/wait", async (c) => {
|
|
|
6600
6647
|
app3.post("/disconnect", async (c) => {
|
|
6601
6648
|
try {
|
|
6602
6649
|
const body = await c.req.json().catch(() => ({}));
|
|
6603
|
-
const accountId =
|
|
6604
|
-
const denial = selfOrHouseScopeDenial(c, accountId, "disconnect");
|
|
6650
|
+
const { accountId, targetSource } = resolveLifecycleAccountId(c, body.accountId);
|
|
6651
|
+
const denial = selfOrHouseScopeDenial(c, accountId, "disconnect", targetSource);
|
|
6605
6652
|
if (denial) return denial;
|
|
6606
6653
|
await stopConnection(accountId);
|
|
6607
6654
|
return c.json({ disconnected: true, accountId });
|
|
@@ -6614,8 +6661,9 @@ app3.post("/reconnect", async (c) => {
|
|
|
6614
6661
|
let accountId = "(unresolved)";
|
|
6615
6662
|
try {
|
|
6616
6663
|
const body = await c.req.json().catch(() => ({}));
|
|
6617
|
-
|
|
6618
|
-
|
|
6664
|
+
const resolved = resolveLifecycleAccountId(c, body.accountId);
|
|
6665
|
+
accountId = resolved.accountId;
|
|
6666
|
+
const denial = selfOrHouseScopeDenial(c, accountId, "reconnect", resolved.targetSource);
|
|
6619
6667
|
if (denial) return denial;
|
|
6620
6668
|
await startConnection(accountId);
|
|
6621
6669
|
console.error(
|
|
@@ -22720,7 +22768,8 @@ var ROUTINE_COLS = `e.eventId AS eventId, e.name AS name, e.eventStatus AS event
|
|
|
22720
22768
|
e.timezone AS timezone, e.startDate AS startDate,
|
|
22721
22769
|
e.agentChannel AS agentChannel, e.agentDestination AS agentDestination, e.agentPrompt AS agentPrompt,
|
|
22722
22770
|
e.actionPlugin AS actionPlugin, e.actionTool AS actionTool, e.actionArgs AS actionArgs,
|
|
22723
|
-
e.notes AS notes, e.
|
|
22771
|
+
e.notes AS notes, e.routineDescription AS routineDescription,
|
|
22772
|
+
e.lastDispatchResult AS lastDispatchResult, e.lastDispatchAt AS lastDispatchAt,
|
|
22724
22773
|
e.suspendedInBulk AS suspendedInBulk`;
|
|
22725
22774
|
function mapRoutine(r) {
|
|
22726
22775
|
const g = (k) => r.get(k) ?? null;
|
|
@@ -22740,11 +22789,16 @@ function mapRoutine(r) {
|
|
|
22740
22789
|
actionTool: g("actionTool"),
|
|
22741
22790
|
actionArgs: g("actionArgs"),
|
|
22742
22791
|
notes: g("notes"),
|
|
22792
|
+
// Task 2214 — read-only on the wire. Deliberately absent from the PATCH
|
|
22793
|
+
// field set below: the roster is its only writer, so a PATCH that accepted
|
|
22794
|
+
// it would be discarded by the next seed, and silently accepting an edit
|
|
22795
|
+
// that the next upgrade throws away is worse than refusing it.
|
|
22796
|
+
routineDescription: g("routineDescription"),
|
|
22743
22797
|
lastDispatchResult: g("lastDispatchResult"),
|
|
22744
22798
|
lastDispatchAt: g("lastDispatchAt"),
|
|
22745
22799
|
// Task 2106 — on the wire so the page can gate Resume all on the set the
|
|
22746
22800
|
// server will actually act on. Without it the control reads `suspended`,
|
|
22747
|
-
// which includes the
|
|
22801
|
+
// which includes the thirteen seeded roster rows on every fresh install, and
|
|
22748
22802
|
// pressing it reports restoring nothing.
|
|
22749
22803
|
suspendedInBulk: r.get("suspendedInBulk") === true
|
|
22750
22804
|
};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/* "Add to SiteDesk" pill injected into LinkedIn profile and DM thread pages. */
|
|
2
|
-
|
|
3
|
-
#maxy-linkedin-pill.maxy-pill {
|
|
4
|
-
position: relative;
|
|
5
|
-
z-index: 9999;
|
|
6
|
-
display: inline-flex;
|
|
7
|
-
align-items: center;
|
|
8
|
-
gap: 6px;
|
|
9
|
-
margin: 12px;
|
|
10
|
-
padding: 6px 14px;
|
|
11
|
-
border: 1px solid #0a66c2;
|
|
12
|
-
border-radius: 999px;
|
|
13
|
-
background: #ffffff;
|
|
14
|
-
color: #0a66c2;
|
|
15
|
-
font: 600 13px/1.2 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
16
|
-
cursor: pointer;
|
|
17
|
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
|
|
18
|
-
transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
#maxy-linkedin-pill.maxy-pill:hover {
|
|
22
|
-
background: #0a66c2;
|
|
23
|
-
color: #ffffff;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
#maxy-linkedin-pill.maxy-pill[data-state="busy"] {
|
|
27
|
-
background: #f4f7fb;
|
|
28
|
-
border-color: #a3b6c9;
|
|
29
|
-
color: #46596d;
|
|
30
|
-
cursor: progress;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
#maxy-linkedin-pill.maxy-pill[data-state="ok"] {
|
|
34
|
-
background: #e6f4ea;
|
|
35
|
-
border-color: #2e7d32;
|
|
36
|
-
color: #2e7d32;
|
|
37
|
-
cursor: default;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
#maxy-linkedin-pill.maxy-pill[data-state="error"] {
|
|
41
|
-
background: #fdecea;
|
|
42
|
-
border-color: #b00020;
|
|
43
|
-
color: #b00020;
|
|
44
|
-
cursor: pointer;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
#maxy-linkedin-pill.maxy-pill[data-state="auth"] {
|
|
48
|
-
background: #fff7e0;
|
|
49
|
-
border-color: #b8860b;
|
|
50
|
-
color: #b8860b;
|
|
51
|
-
cursor: pointer;
|
|
52
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
// Profile content script. Runs on linkedin.com/in/*.
|
|
2
|
-
// Manifest concatenates extractors.js + this file, so MaxyLinkedinExtractors
|
|
3
|
-
// is in scope. One click → scrape → post to the service worker → pill state.
|
|
4
|
-
|
|
5
|
-
;(function () {
|
|
6
|
-
const TAG_MOUNT = '[linkedin-ext-mount]'
|
|
7
|
-
const TAG_SCRAPE = '[linkedin-ext-scrape]'
|
|
8
|
-
const TAG_ERROR = '[linkedin-ext-error]'
|
|
9
|
-
const PILL_ID = 'maxy-linkedin-pill'
|
|
10
|
-
|
|
11
|
-
function setState(pill, state, label) {
|
|
12
|
-
pill.dataset.state = state
|
|
13
|
-
if (label) pill.textContent = label
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async function onClick(pill) {
|
|
17
|
-
const dispatchId = crypto.randomUUID()
|
|
18
|
-
setState(pill, 'busy', 'Capturing…')
|
|
19
|
-
|
|
20
|
-
const result = globalThis.MaxyLinkedinExtractors.extractProfile(document)
|
|
21
|
-
if (!result.ok) {
|
|
22
|
-
console.error(TAG_SCRAPE + ' page=profile ok=false missing=' + result.missing.join(','))
|
|
23
|
-
setState(pill, 'error', 'Missing: ' + result.missing.join(', '))
|
|
24
|
-
return
|
|
25
|
-
}
|
|
26
|
-
console.log(TAG_SCRAPE + ' page=profile ok=true fields=' + Object.keys(result.payload).join(','))
|
|
27
|
-
|
|
28
|
-
const envelope = {
|
|
29
|
-
source: 'linkedin',
|
|
30
|
-
kind: 'profile',
|
|
31
|
-
capturedAt: new Date().toISOString(),
|
|
32
|
-
pageUrl: location.href.split('?')[0].split('#')[0],
|
|
33
|
-
dispatchId: dispatchId,
|
|
34
|
-
profile: result.payload,
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
let reply
|
|
38
|
-
try {
|
|
39
|
-
reply = await chrome.runtime.sendMessage({ type: 'linkedin-ingest', envelope: envelope })
|
|
40
|
-
} catch (err) {
|
|
41
|
-
console.error(TAG_ERROR + ' reason=worker-unreachable detail=' + (err && err.message ? err.message : String(err)))
|
|
42
|
-
setState(pill, 'error', 'Capture failed')
|
|
43
|
-
return
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (!reply || !reply.ok) {
|
|
47
|
-
// `worker-unreachable` is the extension's OWN service worker failing to
|
|
48
|
-
// answer. It is not `unreachable`, which means the admin host did not
|
|
49
|
-
// answer — blaming SiteDesk here sends the operator to check a tunnel that
|
|
50
|
-
// was never involved.
|
|
51
|
-
const reason = (reply && reply.reason) || 'worker-unreachable'
|
|
52
|
-
const detail = (reply && reply.detail) || ''
|
|
53
|
-
console.error(TAG_ERROR + ' reason=' + reason + ' detail=' + detail)
|
|
54
|
-
// Task 2208 — the ingest token is missing or was refused. There is no
|
|
55
|
-
// sign-in to perform: the operator asks the SiteDesk agent for the token and
|
|
56
|
-
// pastes it on the options page.
|
|
57
|
-
if (reason === 'auth') {
|
|
58
|
-
setState(pill, 'auth', 'Paste SiteDesk token')
|
|
59
|
-
pill.onclick = function () { chrome.runtime.openOptionsPage() }
|
|
60
|
-
return
|
|
61
|
-
}
|
|
62
|
-
// Task 2185 — the admin host was never granted, so the POST never left
|
|
63
|
-
// the browser. Sending the operator to the options page is the fix.
|
|
64
|
-
if (reason === 'permission') {
|
|
65
|
-
setState(pill, 'auth', 'Grant access')
|
|
66
|
-
pill.onclick = function () { chrome.runtime.openOptionsPage() }
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
if (reason === 'unreachable') {
|
|
70
|
-
setState(pill, 'error', 'SiteDesk unreachable')
|
|
71
|
-
return
|
|
72
|
-
}
|
|
73
|
-
setState(pill, 'error', 'Capture failed')
|
|
74
|
-
return
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
setState(pill, 'ok', 'Captured ✓')
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function mount() {
|
|
81
|
-
if (document.getElementById(PILL_ID)) return
|
|
82
|
-
const anchor = document.querySelector('section.top-card-layout, main') || document.body
|
|
83
|
-
if (!anchor) return
|
|
84
|
-
const pill = document.createElement('button')
|
|
85
|
-
pill.id = PILL_ID
|
|
86
|
-
pill.className = 'maxy-pill'
|
|
87
|
-
pill.type = 'button'
|
|
88
|
-
pill.textContent = 'Add to SiteDesk'
|
|
89
|
-
pill.dataset.state = 'idle'
|
|
90
|
-
pill.addEventListener('click', function () { onClick(pill) })
|
|
91
|
-
anchor.prepend(pill)
|
|
92
|
-
console.log(TAG_MOUNT + ' page=profile url=' + location.href)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (document.readyState === 'loading') {
|
|
96
|
-
document.addEventListener('DOMContentLoaded', mount, { once: true })
|
|
97
|
-
} else {
|
|
98
|
-
mount()
|
|
99
|
-
}
|
|
100
|
-
})()
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
// Thread content script. Runs on linkedin.com/messaging/thread/*.
|
|
2
|
-
// Manifest concatenates extractors.js + this file.
|
|
3
|
-
|
|
4
|
-
;(function () {
|
|
5
|
-
const TAG_MOUNT = '[linkedin-ext-mount]'
|
|
6
|
-
const TAG_SCRAPE = '[linkedin-ext-scrape]'
|
|
7
|
-
const TAG_ERROR = '[linkedin-ext-error]'
|
|
8
|
-
const PILL_ID = 'maxy-linkedin-pill'
|
|
9
|
-
|
|
10
|
-
function setState(pill, state, label) {
|
|
11
|
-
pill.dataset.state = state
|
|
12
|
-
if (label) pill.textContent = label
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
async function onClick(pill) {
|
|
16
|
-
const dispatchId = crypto.randomUUID()
|
|
17
|
-
setState(pill, 'busy', 'Capturing…')
|
|
18
|
-
|
|
19
|
-
const result = globalThis.MaxyLinkedinExtractors.extractThread(document)
|
|
20
|
-
if (!result.ok) {
|
|
21
|
-
console.error(TAG_SCRAPE + ' page=thread ok=false missing=' + result.missing.join(','))
|
|
22
|
-
setState(pill, 'error', 'Missing: ' + result.missing.join(', '))
|
|
23
|
-
return
|
|
24
|
-
}
|
|
25
|
-
console.log(
|
|
26
|
-
TAG_SCRAPE + ' page=thread ok=true fields=participants,bodyText participantCount=' +
|
|
27
|
-
result.payload.participants.length,
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
const envelope = {
|
|
31
|
-
source: 'linkedin',
|
|
32
|
-
kind: 'thread',
|
|
33
|
-
capturedAt: new Date().toISOString(),
|
|
34
|
-
pageUrl: location.href.split('?')[0].split('#')[0],
|
|
35
|
-
dispatchId: dispatchId,
|
|
36
|
-
thread: result.payload,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
let reply
|
|
40
|
-
try {
|
|
41
|
-
reply = await chrome.runtime.sendMessage({ type: 'linkedin-ingest', envelope: envelope })
|
|
42
|
-
} catch (err) {
|
|
43
|
-
console.error(TAG_ERROR + ' reason=worker-unreachable detail=' + (err && err.message ? err.message : String(err)))
|
|
44
|
-
setState(pill, 'error', 'Capture failed')
|
|
45
|
-
return
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (!reply || !reply.ok) {
|
|
49
|
-
// `worker-unreachable` is the extension's OWN service worker failing to
|
|
50
|
-
// answer. It is not `unreachable`, which means the admin host did not
|
|
51
|
-
// answer — blaming SiteDesk here sends the operator to check a tunnel that
|
|
52
|
-
// was never involved.
|
|
53
|
-
const reason = (reply && reply.reason) || 'worker-unreachable'
|
|
54
|
-
const detail = (reply && reply.detail) || ''
|
|
55
|
-
console.error(TAG_ERROR + ' reason=' + reason + ' detail=' + detail)
|
|
56
|
-
// Task 2208 — the ingest token is missing or was refused. There is no
|
|
57
|
-
// sign-in to perform: the operator asks the SiteDesk agent for the token and
|
|
58
|
-
// pastes it on the options page.
|
|
59
|
-
if (reason === 'auth') {
|
|
60
|
-
setState(pill, 'auth', 'Paste SiteDesk token')
|
|
61
|
-
pill.onclick = function () { chrome.runtime.openOptionsPage() }
|
|
62
|
-
return
|
|
63
|
-
}
|
|
64
|
-
// Task 2185 — the admin host was never granted, so the POST never left
|
|
65
|
-
// the browser. Sending the operator to the options page is the fix.
|
|
66
|
-
if (reason === 'permission') {
|
|
67
|
-
setState(pill, 'auth', 'Grant access')
|
|
68
|
-
pill.onclick = function () { chrome.runtime.openOptionsPage() }
|
|
69
|
-
return
|
|
70
|
-
}
|
|
71
|
-
if (reason === 'unreachable') {
|
|
72
|
-
setState(pill, 'error', 'SiteDesk unreachable')
|
|
73
|
-
return
|
|
74
|
-
}
|
|
75
|
-
setState(pill, 'error', 'Capture failed')
|
|
76
|
-
return
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
setState(pill, 'ok', 'Captured ✓')
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function mount() {
|
|
83
|
-
if (document.getElementById(PILL_ID)) return
|
|
84
|
-
const anchor = document.querySelector('.msg-thread, header.msg-overlay-bubble-header, main') || document.body
|
|
85
|
-
if (!anchor) return
|
|
86
|
-
const pill = document.createElement('button')
|
|
87
|
-
pill.id = PILL_ID
|
|
88
|
-
pill.className = 'maxy-pill'
|
|
89
|
-
pill.type = 'button'
|
|
90
|
-
pill.textContent = 'Add to SiteDesk'
|
|
91
|
-
pill.dataset.state = 'idle'
|
|
92
|
-
pill.addEventListener('click', function () { onClick(pill) })
|
|
93
|
-
anchor.prepend(pill)
|
|
94
|
-
console.log(TAG_MOUNT + ' page=thread url=' + location.href)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (document.readyState === 'loading') {
|
|
98
|
-
document.addEventListener('DOMContentLoaded', mount, { once: true })
|
|
99
|
-
} else {
|
|
100
|
-
mount()
|
|
101
|
-
}
|
|
102
|
-
})()
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{H as e,K as t}from"./useSubAccountSwitcher-HjQZjJBr.js";import"./useVoiceRecorder-CJecnefX.js";import"./AdminShell-Cbk0TL1B.js";import{n}from"./page-987y4JbQ.js";import"./useCopyFeedback-zjZZUC2-.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as e}from"./useSubAccountSwitcher-HjQZjJBr.js";var t=e(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as e}from"./useSubAccountSwitcher-HjQZjJBr.js";var t=e(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]);export{t};
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as e}from"./useSubAccountSwitcher-HjQZjJBr.js";var t=e(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]);export{t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{H as e,K as t}from"./useSubAccountSwitcher-HjQZjJBr.js";import"./useVoiceRecorder-CJecnefX.js";import{t as n}from"./page-DWkUH4Z_.js";import"./graph-labels-Dlcb6cW7.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|