@rubytech/create-maxy-code 0.1.416 → 0.1.419
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__/brand-port-uniqueness.test.js +74 -0
- package/dist/__tests__/outlook-client-id-env.test.js +46 -0
- package/dist/index.js +31 -0
- package/dist/known-brands.js +1 -0
- package/dist/port-resolution.js +8 -1
- package/package.json +1 -1
- package/payload/platform/config/brand-registry.json +8 -0
- package/payload/platform/config/brand.json +1 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.d.ts +2 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.d.ts.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.js +81 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.js.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/index.d.ts +17 -0
- package/payload/platform/lib/account-enumeration/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/account-enumeration/dist/index.js +46 -9
- package/payload/platform/lib/account-enumeration/dist/index.js.map +1 -1
- package/payload/platform/lib/account-enumeration/src/__tests__/is-provisioned.test.ts +86 -0
- package/payload/platform/lib/account-enumeration/src/index.ts +45 -9
- package/payload/platform/lib/account-scope/dist/index.d.ts +14 -5
- package/payload/platform/lib/account-scope/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/account-scope/dist/index.js +14 -5
- package/payload/platform/lib/account-scope/dist/index.js.map +1 -1
- package/payload/platform/lib/account-scope/src/index.ts +22 -5
- package/payload/platform/lib/active-rules/dist/index.d.ts +35 -0
- package/payload/platform/lib/active-rules/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/active-rules/dist/index.js +94 -0
- package/payload/platform/lib/active-rules/dist/index.js.map +1 -0
- package/payload/platform/lib/active-rules/package.json +7 -0
- package/payload/platform/lib/active-rules/src/index.test.ts +89 -0
- package/payload/platform/lib/active-rules/src/index.ts +133 -0
- package/payload/platform/lib/active-rules/tsconfig.json +9 -0
- package/payload/platform/package.json +4 -3
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +55 -10
- package/payload/platform/plugins/docs/references/internals.md +10 -0
- package/payload/platform/plugins/docs/references/memory-guide.md +2 -0
- package/payload/platform/plugins/docs/references/outlook-guide.md +42 -9
- package/payload/platform/plugins/email/references/email-reference.md +1 -1
- package/payload/platform/plugins/filesystem/PLUGIN.md +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js +16 -2
- package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js +8 -3
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js +2 -2
- package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js.map +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +1 -1
- package/payload/platform/plugins/memory/mcp/dist/index-testable.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/index-testable.js +14 -5
- package/payload/platform/plugins/memory/mcp/dist/index-testable.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/index.js +5 -2
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.d.ts +29 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.js +44 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.js +22 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-read-active-rules.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-read-active-rules.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-read-active-rules.test.js +49 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-read-active-rules.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js +105 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.js +78 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-reconcile.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-reconcile.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-reconcile.test.js +99 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-reconcile.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-tool-account.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-tool-account.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +0 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +2 -12
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +11 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +22 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +212 -24
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/outlook/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/outlook/PLUGIN.md +40 -7
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.js +137 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js +210 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js +110 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js +108 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js +13 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.js +32 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.js +67 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js +7 -5
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js +141 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts +69 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js +129 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.d.ts +39 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.js +101 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js +3 -2
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js +187 -5
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts +34 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +96 -7
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.d.ts +31 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.js +30 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts +41 -17
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js +87 -28
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.d.ts +17 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.js +38 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.d.ts +42 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.js +59 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.d.ts +34 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.js +46 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.d.ts +15 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.js +27 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.d.ts +11 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.js +20 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.d.ts +17 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js +26 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts +11 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js +26 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.d.ts +14 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js +26 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +2 -2
- package/payload/platform/plugins/outlook/references/auth.md +51 -54
- package/payload/platform/plugins/outlook/references/graph-surfaces.md +97 -4
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +34 -9
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js +10 -5
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +9 -1
- package/payload/platform/scripts/__tests__/provision-role-stamp.test.sh +3 -0
- package/payload/platform/scripts/lib/provision-account-dir.sh +9 -1
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts +1 -1
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js +5 -1
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js.map +1 -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 +9 -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/config.d.ts +18 -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 +16 -0
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +1 -0
- 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 +36 -4
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +14 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/preference-reconciliation-audit.d.ts +46 -0
- package/payload/platform/services/claude-session-manager/dist/preference-reconciliation-audit.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/preference-reconciliation-audit.js +96 -0
- package/payload/platform/services/claude-session-manager/dist/preference-reconciliation-audit.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +33 -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 +61 -7
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js +5 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.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 +20 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts +9 -0
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -0
- package/payload/platform/services/telegram-channel/dist/instructions.js +100 -0
- package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -0
- package/payload/platform/services/telegram-channel/dist/notification.d.ts +93 -0
- package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -0
- package/payload/platform/services/telegram-channel/dist/notification.js +119 -0
- package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -0
- package/payload/platform/services/telegram-channel/dist/server.d.ts +40 -0
- package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -0
- package/payload/platform/services/telegram-channel/dist/server.js +291 -0
- package/payload/platform/services/telegram-channel/dist/server.js.map +1 -0
- package/payload/platform/services/telegram-channel/dist/turn-follow.d.ts +28 -0
- package/payload/platform/services/telegram-channel/dist/turn-follow.d.ts.map +1 -0
- package/payload/platform/services/telegram-channel/dist/turn-follow.js +188 -0
- package/payload/platform/services/telegram-channel/dist/turn-follow.js.map +1 -0
- package/payload/platform/services/webchat-channel/dist/notification.d.ts +5 -0
- package/payload/platform/services/webchat-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/webchat-channel/dist/notification.js +6 -1
- package/payload/platform/services/webchat-channel/dist/notification.js.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +6 -0
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.js +8 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
- package/payload/platform/templates/agents/passive/IDENTITY.md +21 -0
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/public/assets/{AdminLoginScreens-CBlE6FB4.js → AdminLoginScreens-B1PkOF66.js} +1 -1
- package/payload/server/public/assets/AdminShell-D8wNArGQ.js +2 -0
- package/payload/server/public/assets/{Checkbox-B0pbYJDQ.js → Checkbox-Bm9Er726.js} +1 -1
- package/payload/server/public/assets/{Transcript-CYaAPBFX.js → Transcript-CBIyQ8T5.js} +1 -1
- package/payload/server/public/assets/{admin-CVh9HO-f.js → admin-CWM9G_yA.js} +1 -1
- package/payload/server/public/assets/{browser-C4f_D4Ih.js → browser-D8QhNffV.js} +1 -1
- package/payload/server/public/assets/{calendar-WUxQ4fVo.js → calendar-qob5K4t_.js} +1 -1
- package/payload/server/public/assets/chat-BNrxVUF6.js +1 -0
- package/payload/server/public/assets/chevron-left-BQThFVrd.js +1 -0
- package/payload/server/public/assets/data-C-EqNbRi.js +1 -0
- package/payload/server/public/assets/{graph-BNXE6mKP.js → graph-DZ2HMpIB.js} +1 -1
- package/payload/server/public/assets/{graph-labels-Csnovm_c.js → graph-labels-BFG4bjXQ.js} +1 -1
- package/payload/server/public/assets/{maximize-2-WRUJsg5n.js → maximize-2-DkZ40lSl.js} +1 -1
- package/payload/server/public/assets/{operator-CXtygMh6.js → operator-FrXrSsBj.js} +1 -1
- package/payload/server/public/assets/page-CHWMI9Tm.js +32 -0
- package/payload/server/public/assets/{page-IQDLdebG.js → page-CXKV01gT.js} +1 -1
- package/payload/server/public/assets/{public-DSeYu61E.js → public-2p1pJ4WF.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-BayMWwfc.js → rotate-ccw-D3o_bMBA.js} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-8dLvF3Ux.js +9 -0
- package/payload/server/public/assets/useSubAccountSwitcher-BUvlETHN.css +1 -0
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +5 -5
- package/payload/server/public/chat.html +9 -9
- package/payload/server/public/data.html +8 -8
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +11 -11
- package/payload/server/public/operator.html +11 -11
- package/payload/server/public/public.html +9 -9
- package/payload/server/server.js +245 -40
- package/payload/server/public/assets/AdminShell-d1WQ3lLu.js +0 -2
- package/payload/server/public/assets/chat-NJ2HXhOf.js +0 -1
- package/payload/server/public/assets/chevron-left-Da-iZGi_.js +0 -1
- package/payload/server/public/assets/data-ZUdT44Ba.js +0 -1
- package/payload/server/public/assets/page-DjpQp_ir.js +0 -32
- package/payload/server/public/assets/useSubAccountSwitcher-C9aLg8yI.js +0 -9
- package/payload/server/public/assets/useSubAccountSwitcher-CRZfyJXR.css +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type EffectiveAccount = {
|
|
2
2
|
accountId: string;
|
|
3
3
|
} | {
|
|
4
|
-
reject: "cross-account-denied" | "cross-account-invalid-target";
|
|
4
|
+
reject: "cross-account-denied" | "cross-account-invalid-target" | "cross-account-target-not-provisioned";
|
|
5
5
|
};
|
|
6
6
|
/**
|
|
7
7
|
* Resolve the account a call acts on. Fail-closed: only a house-scoped session
|
|
@@ -10,15 +10,24 @@ export type EffectiveAccount = {
|
|
|
10
10
|
* downgraded to its own account.
|
|
11
11
|
*
|
|
12
12
|
* `isValidAccountId` is injected (required, no default): the UI passes its
|
|
13
|
-
* fs-backed `isValidAccountId
|
|
14
|
-
* `
|
|
15
|
-
* module stay pure.
|
|
13
|
+
* fs-backed `isValidAccountId` (reads disk fresh every call); the `memory` and
|
|
14
|
+
* `filesystem` plugins pass `isProvisionedAccount` (cached-hit, re-scan-on-miss).
|
|
15
|
+
* Keeping validity injected is what lets this module stay pure.
|
|
16
|
+
*
|
|
17
|
+
* `notProvisionedReason` names the reject emitted when the injected check fails.
|
|
18
|
+
* It defaults to `cross-account-invalid-target` (the UI path, byte-identical to
|
|
19
|
+
* the 1440 landing). The MCP plugins pass `cross-account-target-not-provisioned`
|
|
20
|
+
* because their injected check re-scans disk on a miss (Task 1471) — so a false
|
|
21
|
+
* from it means the id is genuinely not on disk, distinct from a stale-cache
|
|
22
|
+
* miss (which no longer rejects). The distinct reason lets an operator tell a
|
|
23
|
+
* wrong/typo id from the (now-eliminated) created-after-boot case in the
|
|
24
|
+
* `[xacct] op=call … reason=` line.
|
|
16
25
|
*/
|
|
17
26
|
export declare function resolveEffectiveAccountCore(input: {
|
|
18
27
|
ownAccountId: string;
|
|
19
28
|
houseScope: string | null;
|
|
20
29
|
targetAccountId?: string | null;
|
|
21
|
-
}, isValidAccountId: (id: string) => boolean): EffectiveAccount;
|
|
30
|
+
}, isValidAccountId: (id: string) => boolean, notProvisionedReason?: "cross-account-invalid-target" | "cross-account-target-not-provisioned"): EffectiveAccount;
|
|
22
31
|
/**
|
|
23
32
|
* Boot-reader that consumers import to learn their house scope from the spawn
|
|
24
33
|
* env. An empty value reads as null — a non-house session carries no scope.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GACxB;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACrB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GACxB;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACrB;IACE,MAAM,EACF,sBAAsB,GACtB,8BAA8B,GAC9B,sCAAsC,CAAC;CAC5C,CAAC;AAEN;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC3F,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,EACzC,oBAAoB,GAChB,8BAA8B,GAC9B,sCAAuE,GAC1E,gBAAgB,CAMlB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAEvF"}
|
|
@@ -9,18 +9,27 @@ exports.readHouseAdminScope = readHouseAdminScope;
|
|
|
9
9
|
* downgraded to its own account.
|
|
10
10
|
*
|
|
11
11
|
* `isValidAccountId` is injected (required, no default): the UI passes its
|
|
12
|
-
* fs-backed `isValidAccountId
|
|
13
|
-
* `
|
|
14
|
-
* module stay pure.
|
|
12
|
+
* fs-backed `isValidAccountId` (reads disk fresh every call); the `memory` and
|
|
13
|
+
* `filesystem` plugins pass `isProvisionedAccount` (cached-hit, re-scan-on-miss).
|
|
14
|
+
* Keeping validity injected is what lets this module stay pure.
|
|
15
|
+
*
|
|
16
|
+
* `notProvisionedReason` names the reject emitted when the injected check fails.
|
|
17
|
+
* It defaults to `cross-account-invalid-target` (the UI path, byte-identical to
|
|
18
|
+
* the 1440 landing). The MCP plugins pass `cross-account-target-not-provisioned`
|
|
19
|
+
* because their injected check re-scans disk on a miss (Task 1471) — so a false
|
|
20
|
+
* from it means the id is genuinely not on disk, distinct from a stale-cache
|
|
21
|
+
* miss (which no longer rejects). The distinct reason lets an operator tell a
|
|
22
|
+
* wrong/typo id from the (now-eliminated) created-after-boot case in the
|
|
23
|
+
* `[xacct] op=call … reason=` line.
|
|
15
24
|
*/
|
|
16
|
-
function resolveEffectiveAccountCore(input, isValidAccountId) {
|
|
25
|
+
function resolveEffectiveAccountCore(input, isValidAccountId, notProvisionedReason = "cross-account-invalid-target") {
|
|
17
26
|
const { ownAccountId, houseScope, targetAccountId } = input;
|
|
18
27
|
if (!targetAccountId)
|
|
19
28
|
return { accountId: ownAccountId };
|
|
20
29
|
if (!houseScope)
|
|
21
30
|
return { reject: "cross-account-denied" };
|
|
22
31
|
if (!isValidAccountId(targetAccountId))
|
|
23
|
-
return { reject:
|
|
32
|
+
return { reject: notProvisionedReason };
|
|
24
33
|
return { accountId: targetAccountId };
|
|
25
34
|
}
|
|
26
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAuCA,kEAYC;AAMD,kDAEC;AAxCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,2BAA2B,CACzC,KAA2F,EAC3F,gBAAyC,EACzC,uBAE6C,8BAA8B;IAE3E,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAC5D,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IACzD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC3D,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAChF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,OAAO,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC"}
|
|
@@ -10,7 +10,12 @@
|
|
|
10
10
|
// with empty env during plugin-system `tools/list` enumeration.
|
|
11
11
|
export type EffectiveAccount =
|
|
12
12
|
| { accountId: string }
|
|
13
|
-
| {
|
|
13
|
+
| {
|
|
14
|
+
reject:
|
|
15
|
+
| "cross-account-denied"
|
|
16
|
+
| "cross-account-invalid-target"
|
|
17
|
+
| "cross-account-target-not-provisioned";
|
|
18
|
+
};
|
|
14
19
|
|
|
15
20
|
/**
|
|
16
21
|
* Resolve the account a call acts on. Fail-closed: only a house-scoped session
|
|
@@ -19,18 +24,30 @@ export type EffectiveAccount =
|
|
|
19
24
|
* downgraded to its own account.
|
|
20
25
|
*
|
|
21
26
|
* `isValidAccountId` is injected (required, no default): the UI passes its
|
|
22
|
-
* fs-backed `isValidAccountId
|
|
23
|
-
* `
|
|
24
|
-
* module stay pure.
|
|
27
|
+
* fs-backed `isValidAccountId` (reads disk fresh every call); the `memory` and
|
|
28
|
+
* `filesystem` plugins pass `isProvisionedAccount` (cached-hit, re-scan-on-miss).
|
|
29
|
+
* Keeping validity injected is what lets this module stay pure.
|
|
30
|
+
*
|
|
31
|
+
* `notProvisionedReason` names the reject emitted when the injected check fails.
|
|
32
|
+
* It defaults to `cross-account-invalid-target` (the UI path, byte-identical to
|
|
33
|
+
* the 1440 landing). The MCP plugins pass `cross-account-target-not-provisioned`
|
|
34
|
+
* because their injected check re-scans disk on a miss (Task 1471) — so a false
|
|
35
|
+
* from it means the id is genuinely not on disk, distinct from a stale-cache
|
|
36
|
+
* miss (which no longer rejects). The distinct reason lets an operator tell a
|
|
37
|
+
* wrong/typo id from the (now-eliminated) created-after-boot case in the
|
|
38
|
+
* `[xacct] op=call … reason=` line.
|
|
25
39
|
*/
|
|
26
40
|
export function resolveEffectiveAccountCore(
|
|
27
41
|
input: { ownAccountId: string; houseScope: string | null; targetAccountId?: string | null },
|
|
28
42
|
isValidAccountId: (id: string) => boolean,
|
|
43
|
+
notProvisionedReason:
|
|
44
|
+
| "cross-account-invalid-target"
|
|
45
|
+
| "cross-account-target-not-provisioned" = "cross-account-invalid-target",
|
|
29
46
|
): EffectiveAccount {
|
|
30
47
|
const { ownAccountId, houseScope, targetAccountId } = input;
|
|
31
48
|
if (!targetAccountId) return { accountId: ownAccountId };
|
|
32
49
|
if (!houseScope) return { reject: "cross-account-denied" };
|
|
33
|
-
if (!isValidAccountId(targetAccountId)) return { reject:
|
|
50
|
+
if (!isValidAccountId(targetAccountId)) return { reject: notProvisionedReason };
|
|
34
51
|
return { accountId: targetAccountId };
|
|
35
52
|
}
|
|
36
53
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare const SAME_SUBJECT_COSINE = 0.85;
|
|
2
|
+
export declare const INJECTION_RULE_CAP = 12;
|
|
3
|
+
export declare const ACTIVE_CANDIDATE_FLOOR = 0.4;
|
|
4
|
+
export declare const ACTIVE_CANDIDATE_LIMIT = 30;
|
|
5
|
+
export interface RuleCandidate {
|
|
6
|
+
preferenceId: string;
|
|
7
|
+
category: string;
|
|
8
|
+
key: string;
|
|
9
|
+
value: string;
|
|
10
|
+
confidence: number;
|
|
11
|
+
observedAt: string;
|
|
12
|
+
embedding: number[] | null;
|
|
13
|
+
}
|
|
14
|
+
export interface ActiveRule {
|
|
15
|
+
preferenceId: string;
|
|
16
|
+
category: string;
|
|
17
|
+
key: string;
|
|
18
|
+
value: string;
|
|
19
|
+
confidence: number;
|
|
20
|
+
observedAt: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function cosine(a: number[], b: number[]): number;
|
|
23
|
+
export declare function deconflictBySubject(records: RuleCandidate[], cosineThreshold?: number): ActiveRule[];
|
|
24
|
+
export declare function formatStandingRulesBlock(rules: ActiveRule[], cap?: number): string;
|
|
25
|
+
interface MinimalSession {
|
|
26
|
+
run: (q: string, p: Record<string, unknown>) => Promise<{
|
|
27
|
+
records: Array<{
|
|
28
|
+
get(k: string): unknown;
|
|
29
|
+
}>;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
export declare function queryActiveRuleCandidates(session: MinimalSession, accountId: string): Promise<RuleCandidate[]>;
|
|
33
|
+
export declare function activeRuleSet(session: MinimalSession, accountId: string, cap?: number): Promise<ActiveRule[]>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYvD;AAOD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EAAE,EACxB,eAAe,GAAE,MAA4B,GAC5C,UAAU,EAAE,CAgBd;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,UAAU,EAAE,EACnB,GAAG,GAAE,MAA2B,GAC/B,MAAM,CAIR;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,CACH,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACvB,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAC/D;AAOD,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,EAAE,CAAC,CA6B1B;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAA2B,GAC/B,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The one definition of "this account's active, de-conflicted, bounded
|
|
3
|
+
// rule-set" (Task 1486). Consumed by the memory plugin's profile-read
|
|
4
|
+
// (agent-callable) and by the three inbound gateways (per-turn injection). Kept
|
|
5
|
+
// free of neo4j-driver types so both an MCP process and the UI can import the
|
|
6
|
+
// built dist.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ACTIVE_CANDIDATE_LIMIT = exports.ACTIVE_CANDIDATE_FLOOR = exports.INJECTION_RULE_CAP = exports.SAME_SUBJECT_COSINE = void 0;
|
|
9
|
+
exports.cosine = cosine;
|
|
10
|
+
exports.deconflictBySubject = deconflictBySubject;
|
|
11
|
+
exports.formatStandingRulesBlock = formatStandingRulesBlock;
|
|
12
|
+
exports.queryActiveRuleCandidates = queryActiveRuleCandidates;
|
|
13
|
+
exports.activeRuleSet = activeRuleSet;
|
|
14
|
+
exports.SAME_SUBJECT_COSINE = 0.85;
|
|
15
|
+
exports.INJECTION_RULE_CAP = 12;
|
|
16
|
+
exports.ACTIVE_CANDIDATE_FLOOR = 0.4;
|
|
17
|
+
exports.ACTIVE_CANDIDATE_LIMIT = 30;
|
|
18
|
+
function cosine(a, b) {
|
|
19
|
+
if (!a.length || !b.length || a.length !== b.length)
|
|
20
|
+
return 0;
|
|
21
|
+
let dot = 0;
|
|
22
|
+
let na = 0;
|
|
23
|
+
let nb = 0;
|
|
24
|
+
for (let i = 0; i < a.length; i++) {
|
|
25
|
+
dot += a[i] * b[i];
|
|
26
|
+
na += a[i] * a[i];
|
|
27
|
+
nb += b[i] * b[i];
|
|
28
|
+
}
|
|
29
|
+
if (na === 0 || nb === 0)
|
|
30
|
+
return 0;
|
|
31
|
+
return dot / (Math.sqrt(na) * Math.sqrt(nb));
|
|
32
|
+
}
|
|
33
|
+
// records MUST be confidence-desc on entry. Greedy: the first record of a
|
|
34
|
+
// cluster is the winner; any later record within cosineThreshold of an
|
|
35
|
+
// already-kept winner is a rephrasing and is dropped. A record with no usable
|
|
36
|
+
// embedding is never folded — it is kept as its own subject (we cannot prove it
|
|
37
|
+
// is a duplicate).
|
|
38
|
+
function deconflictBySubject(records, cosineThreshold = exports.SAME_SUBJECT_COSINE) {
|
|
39
|
+
const winners = [];
|
|
40
|
+
for (const r of records) {
|
|
41
|
+
const emb = r.embedding;
|
|
42
|
+
const isDup = Array.isArray(emb) &&
|
|
43
|
+
emb.length > 0 &&
|
|
44
|
+
winners.some((w) => Array.isArray(w.embedding) &&
|
|
45
|
+
w.embedding.length > 0 &&
|
|
46
|
+
cosine(emb, w.embedding) >= cosineThreshold);
|
|
47
|
+
if (!isDup)
|
|
48
|
+
winners.push(r);
|
|
49
|
+
}
|
|
50
|
+
return winners.map(({ embedding: _embedding, ...rest }) => rest);
|
|
51
|
+
}
|
|
52
|
+
function formatStandingRulesBlock(rules, cap = exports.INJECTION_RULE_CAP) {
|
|
53
|
+
if (rules.length === 0)
|
|
54
|
+
return "";
|
|
55
|
+
const lines = rules.slice(0, cap).map((r) => `- ${r.value}`);
|
|
56
|
+
return `## Standing rules\n${lines.join("\n")}`;
|
|
57
|
+
}
|
|
58
|
+
// The candidate query: this account's admin-scope preferences, not trashed, not
|
|
59
|
+
// a "does not apply" declination, above the injection floor, ordered so the
|
|
60
|
+
// highest-confidence / most-recent wins de-confliction. Returns `embedding` for
|
|
61
|
+
// the clustering step. The trashed predicate mirrors graph-trash's
|
|
62
|
+
// `notTrashed()` exactly (label + deletedAt) so this lib stays dependency-free.
|
|
63
|
+
async function queryActiveRuleCandidates(session, accountId) {
|
|
64
|
+
// ACTIVE_CANDIDATE_LIMIT is inlined as a Cypher literal rather than bound as a
|
|
65
|
+
// param: a plain JS number bound to `LIMIT $p` serializes as a FLOAT and Neo4j
|
|
66
|
+
// rejects it ("not a valid value. Must be a non-negative integer"). This lib
|
|
67
|
+
// is dependency-free (no neo4j-driver), so it cannot call `neo4j.int()`; the
|
|
68
|
+
// constant is a hardcoded integer, so inlining it is safe and gate-clean.
|
|
69
|
+
const result = await session.run(`
|
|
70
|
+
MATCH (pref:Preference {accountId: $accountId, scope: 'admin'})
|
|
71
|
+
WHERE NOT pref:Trashed AND pref.deletedAt IS NULL
|
|
72
|
+
AND coalesce(pref.notApplicable, false) = false
|
|
73
|
+
AND pref.confidence >= $floor
|
|
74
|
+
RETURN pref.preferenceId AS preferenceId, pref.category AS category,
|
|
75
|
+
pref.key AS key, pref.value AS value, pref.confidence AS confidence,
|
|
76
|
+
pref.observedAt AS observedAt, pref.embedding AS embedding
|
|
77
|
+
ORDER BY pref.confidence DESC, pref.observedAt DESC
|
|
78
|
+
LIMIT ${exports.ACTIVE_CANDIDATE_LIMIT}
|
|
79
|
+
`, { accountId, floor: exports.ACTIVE_CANDIDATE_FLOOR });
|
|
80
|
+
return result.records.map((r) => ({
|
|
81
|
+
preferenceId: r.get("preferenceId"),
|
|
82
|
+
category: r.get("category"),
|
|
83
|
+
key: r.get("key"),
|
|
84
|
+
value: r.get("value"),
|
|
85
|
+
confidence: r.get("confidence"),
|
|
86
|
+
observedAt: r.get("observedAt") ?? "",
|
|
87
|
+
embedding: r.get("embedding") ?? null,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
async function activeRuleSet(session, accountId, cap = exports.INJECTION_RULE_CAP) {
|
|
91
|
+
const candidates = await queryActiveRuleCandidates(session, accountId);
|
|
92
|
+
return deconflictBySubject(candidates).slice(0, cap);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,sEAAsE;AACtE,gFAAgF;AAChF,8EAA8E;AAC9E,cAAc;;;AA0Bd,wBAYC;AAOD,kDAmBC;AAED,4DAOC;AAcD,8DAgCC;AAED,sCAOC;AA9HY,QAAA,mBAAmB,GAAG,IAAI,CAAC;AAC3B,QAAA,kBAAkB,GAAG,EAAE,CAAC;AACxB,QAAA,sBAAsB,GAAG,GAAG,CAAC;AAC7B,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAqBzC,SAAgB,MAAM,CAAC,CAAW,EAAE,CAAW;IAC7C,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,0EAA0E;AAC1E,uEAAuE;AACvE,8EAA8E;AAC9E,gFAAgF;AAChF,mBAAmB;AACnB,SAAgB,mBAAmB,CACjC,OAAwB,EACxB,kBAA0B,2BAAmB;IAE7C,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC;QACxB,MAAM,KAAK,GACT,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAClB,GAAG,CAAC,MAAM,GAAG,CAAC;YACd,OAAO,CAAC,IAAI,CACV,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1B,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACtB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe,CAC9C,CAAC;QACJ,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,wBAAwB,CACtC,KAAmB,EACnB,MAAc,0BAAkB;IAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,OAAO,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AASD,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAChF,mEAAmE;AACnE,gFAAgF;AACzE,KAAK,UAAU,yBAAyB,CAC7C,OAAuB,EACvB,SAAiB;IAEjB,+EAA+E;IAC/E,+EAA+E;IAC/E,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B;;;;;;;;;YASQ,8BAAsB;KAC7B,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,8BAAsB,EAAE,CAC7C,CAAC;IACF,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAW;QAC7C,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAW;QACrC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAW;QAC3B,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAW;QAC/B,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAW;QACzC,UAAU,EAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAY,IAAI,EAAE;QACjD,SAAS,EAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAqB,IAAI,IAAI;KAC3D,CAAC,CAAC,CAAC;AACN,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,OAAuB,EACvB,SAAiB,EACjB,MAAc,0BAAkB;IAEhC,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
cosine,
|
|
4
|
+
deconflictBySubject,
|
|
5
|
+
formatStandingRulesBlock,
|
|
6
|
+
INJECTION_RULE_CAP,
|
|
7
|
+
type RuleCandidate,
|
|
8
|
+
} from "./index.js";
|
|
9
|
+
|
|
10
|
+
const vec = (n: number, fill: number): number[] => Array(n).fill(fill);
|
|
11
|
+
|
|
12
|
+
function cand(over: Partial<RuleCandidate>): RuleCandidate {
|
|
13
|
+
return {
|
|
14
|
+
preferenceId: "p",
|
|
15
|
+
category: "communication",
|
|
16
|
+
key: "k",
|
|
17
|
+
value: "v",
|
|
18
|
+
confidence: 0.5,
|
|
19
|
+
observedAt: "2026-07-01T00:00:00Z",
|
|
20
|
+
embedding: vec(4, 1),
|
|
21
|
+
...over,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
describe("cosine", () => {
|
|
26
|
+
it("is 1 for identical vectors and 0 for an empty one", () => {
|
|
27
|
+
expect(cosine([1, 0, 0], [1, 0, 0])).toBeCloseTo(1, 6);
|
|
28
|
+
expect(cosine([], [1, 2, 3])).toBe(0);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe("deconflictBySubject", () => {
|
|
33
|
+
it("folds a near-duplicate into the higher-confidence winner", () => {
|
|
34
|
+
const a = cand({
|
|
35
|
+
preferenceId: "a",
|
|
36
|
+
key: "header_rule",
|
|
37
|
+
value: "use header A",
|
|
38
|
+
confidence: 0.8,
|
|
39
|
+
embedding: [1, 0, 0, 0],
|
|
40
|
+
});
|
|
41
|
+
const b = cand({
|
|
42
|
+
preferenceId: "b",
|
|
43
|
+
key: "doc_header",
|
|
44
|
+
value: "use header A restated",
|
|
45
|
+
confidence: 0.5,
|
|
46
|
+
embedding: [0.99, 0.01, 0, 0],
|
|
47
|
+
});
|
|
48
|
+
const out = deconflictBySubject([a, b], 0.85);
|
|
49
|
+
expect(out.map((r) => r.preferenceId)).toEqual(["a"]);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("keeps genuinely different subjects", () => {
|
|
53
|
+
const a = cand({ preferenceId: "a", embedding: [1, 0, 0, 0] });
|
|
54
|
+
const b = cand({ preferenceId: "b", embedding: [0, 1, 0, 0] });
|
|
55
|
+
expect(deconflictBySubject([a, b], 0.85).map((r) => r.preferenceId)).toEqual([
|
|
56
|
+
"a",
|
|
57
|
+
"b",
|
|
58
|
+
]);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("never folds a candidate with no embedding", () => {
|
|
62
|
+
const a = cand({ preferenceId: "a", embedding: [1, 0, 0, 0] });
|
|
63
|
+
const b = cand({ preferenceId: "b", embedding: null });
|
|
64
|
+
expect(deconflictBySubject([a, b], 0.85).map((r) => r.preferenceId)).toEqual([
|
|
65
|
+
"a",
|
|
66
|
+
"b",
|
|
67
|
+
]);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
describe("formatStandingRulesBlock", () => {
|
|
72
|
+
it("returns empty string for no rules", () => {
|
|
73
|
+
expect(formatStandingRulesBlock([], INJECTION_RULE_CAP)).toBe("");
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("caps the number of rendered rules", () => {
|
|
77
|
+
const rules = Array.from({ length: 20 }, (_, i) => ({
|
|
78
|
+
preferenceId: `p${i}`,
|
|
79
|
+
category: "communication",
|
|
80
|
+
key: `k${i}`,
|
|
81
|
+
value: `rule ${i}`,
|
|
82
|
+
confidence: 1 - i * 0.01,
|
|
83
|
+
observedAt: "2026-07-01T00:00:00Z",
|
|
84
|
+
}));
|
|
85
|
+
const block = formatStandingRulesBlock(rules, 12);
|
|
86
|
+
expect(block).toContain("## Standing rules");
|
|
87
|
+
expect((block.match(/^- /gm) ?? []).length).toBe(12);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// The one definition of "this account's active, de-conflicted, bounded
|
|
2
|
+
// rule-set" (Task 1486). Consumed by the memory plugin's profile-read
|
|
3
|
+
// (agent-callable) and by the three inbound gateways (per-turn injection). Kept
|
|
4
|
+
// free of neo4j-driver types so both an MCP process and the UI can import the
|
|
5
|
+
// built dist.
|
|
6
|
+
|
|
7
|
+
export const SAME_SUBJECT_COSINE = 0.85;
|
|
8
|
+
export const INJECTION_RULE_CAP = 12;
|
|
9
|
+
export const ACTIVE_CANDIDATE_FLOOR = 0.4;
|
|
10
|
+
export const ACTIVE_CANDIDATE_LIMIT = 30;
|
|
11
|
+
|
|
12
|
+
export interface RuleCandidate {
|
|
13
|
+
preferenceId: string;
|
|
14
|
+
category: string;
|
|
15
|
+
key: string;
|
|
16
|
+
value: string;
|
|
17
|
+
confidence: number;
|
|
18
|
+
observedAt: string;
|
|
19
|
+
embedding: number[] | null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ActiveRule {
|
|
23
|
+
preferenceId: string;
|
|
24
|
+
category: string;
|
|
25
|
+
key: string;
|
|
26
|
+
value: string;
|
|
27
|
+
confidence: number;
|
|
28
|
+
observedAt: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function cosine(a: number[], b: number[]): number {
|
|
32
|
+
if (!a.length || !b.length || a.length !== b.length) return 0;
|
|
33
|
+
let dot = 0;
|
|
34
|
+
let na = 0;
|
|
35
|
+
let nb = 0;
|
|
36
|
+
for (let i = 0; i < a.length; i++) {
|
|
37
|
+
dot += a[i] * b[i];
|
|
38
|
+
na += a[i] * a[i];
|
|
39
|
+
nb += b[i] * b[i];
|
|
40
|
+
}
|
|
41
|
+
if (na === 0 || nb === 0) return 0;
|
|
42
|
+
return dot / (Math.sqrt(na) * Math.sqrt(nb));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// records MUST be confidence-desc on entry. Greedy: the first record of a
|
|
46
|
+
// cluster is the winner; any later record within cosineThreshold of an
|
|
47
|
+
// already-kept winner is a rephrasing and is dropped. A record with no usable
|
|
48
|
+
// embedding is never folded — it is kept as its own subject (we cannot prove it
|
|
49
|
+
// is a duplicate).
|
|
50
|
+
export function deconflictBySubject(
|
|
51
|
+
records: RuleCandidate[],
|
|
52
|
+
cosineThreshold: number = SAME_SUBJECT_COSINE,
|
|
53
|
+
): ActiveRule[] {
|
|
54
|
+
const winners: RuleCandidate[] = [];
|
|
55
|
+
for (const r of records) {
|
|
56
|
+
const emb = r.embedding;
|
|
57
|
+
const isDup =
|
|
58
|
+
Array.isArray(emb) &&
|
|
59
|
+
emb.length > 0 &&
|
|
60
|
+
winners.some(
|
|
61
|
+
(w) =>
|
|
62
|
+
Array.isArray(w.embedding) &&
|
|
63
|
+
w.embedding.length > 0 &&
|
|
64
|
+
cosine(emb, w.embedding) >= cosineThreshold,
|
|
65
|
+
);
|
|
66
|
+
if (!isDup) winners.push(r);
|
|
67
|
+
}
|
|
68
|
+
return winners.map(({ embedding: _embedding, ...rest }) => rest);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function formatStandingRulesBlock(
|
|
72
|
+
rules: ActiveRule[],
|
|
73
|
+
cap: number = INJECTION_RULE_CAP,
|
|
74
|
+
): string {
|
|
75
|
+
if (rules.length === 0) return "";
|
|
76
|
+
const lines = rules.slice(0, cap).map((r) => `- ${r.value}`);
|
|
77
|
+
return `## Standing rules\n${lines.join("\n")}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface MinimalSession {
|
|
81
|
+
run: (
|
|
82
|
+
q: string,
|
|
83
|
+
p: Record<string, unknown>,
|
|
84
|
+
) => Promise<{ records: Array<{ get(k: string): unknown }> }>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// The candidate query: this account's admin-scope preferences, not trashed, not
|
|
88
|
+
// a "does not apply" declination, above the injection floor, ordered so the
|
|
89
|
+
// highest-confidence / most-recent wins de-confliction. Returns `embedding` for
|
|
90
|
+
// the clustering step. The trashed predicate mirrors graph-trash's
|
|
91
|
+
// `notTrashed()` exactly (label + deletedAt) so this lib stays dependency-free.
|
|
92
|
+
export async function queryActiveRuleCandidates(
|
|
93
|
+
session: MinimalSession,
|
|
94
|
+
accountId: string,
|
|
95
|
+
): Promise<RuleCandidate[]> {
|
|
96
|
+
// ACTIVE_CANDIDATE_LIMIT is inlined as a Cypher literal rather than bound as a
|
|
97
|
+
// param: a plain JS number bound to `LIMIT $p` serializes as a FLOAT and Neo4j
|
|
98
|
+
// rejects it ("not a valid value. Must be a non-negative integer"). This lib
|
|
99
|
+
// is dependency-free (no neo4j-driver), so it cannot call `neo4j.int()`; the
|
|
100
|
+
// constant is a hardcoded integer, so inlining it is safe and gate-clean.
|
|
101
|
+
const result = await session.run(
|
|
102
|
+
`
|
|
103
|
+
MATCH (pref:Preference {accountId: $accountId, scope: 'admin'})
|
|
104
|
+
WHERE NOT pref:Trashed AND pref.deletedAt IS NULL
|
|
105
|
+
AND coalesce(pref.notApplicable, false) = false
|
|
106
|
+
AND pref.confidence >= $floor
|
|
107
|
+
RETURN pref.preferenceId AS preferenceId, pref.category AS category,
|
|
108
|
+
pref.key AS key, pref.value AS value, pref.confidence AS confidence,
|
|
109
|
+
pref.observedAt AS observedAt, pref.embedding AS embedding
|
|
110
|
+
ORDER BY pref.confidence DESC, pref.observedAt DESC
|
|
111
|
+
LIMIT ${ACTIVE_CANDIDATE_LIMIT}
|
|
112
|
+
`,
|
|
113
|
+
{ accountId, floor: ACTIVE_CANDIDATE_FLOOR },
|
|
114
|
+
);
|
|
115
|
+
return result.records.map((r) => ({
|
|
116
|
+
preferenceId: r.get("preferenceId") as string,
|
|
117
|
+
category: r.get("category") as string,
|
|
118
|
+
key: r.get("key") as string,
|
|
119
|
+
value: r.get("value") as string,
|
|
120
|
+
confidence: r.get("confidence") as number,
|
|
121
|
+
observedAt: (r.get("observedAt") as string) ?? "",
|
|
122
|
+
embedding: (r.get("embedding") as number[] | null) ?? null,
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export async function activeRuleSet(
|
|
127
|
+
session: MinimalSession,
|
|
128
|
+
accountId: string,
|
|
129
|
+
cap: number = INJECTION_RULE_CAP,
|
|
130
|
+
): Promise<ActiveRule[]> {
|
|
131
|
+
const candidates = await queryActiveRuleCandidates(session, accountId);
|
|
132
|
+
return deconflictBySubject(candidates).slice(0, cap);
|
|
133
|
+
}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"services/*"
|
|
7
7
|
],
|
|
8
8
|
"scripts": {
|
|
9
|
-
"build": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p services/claude-session-manager/tsconfig.json && tsc -p services/whatsapp-channel/tsconfig.json && tsc -p services/webchat-channel/tsconfig.json && NODE_OPTIONS='--max-old-space-size=8192' tsc -b plugins/*/mcp/tsconfig.json",
|
|
10
|
-
"build:lib": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json",
|
|
9
|
+
"build": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/active-rules/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json && tsc -p services/claude-session-manager/tsconfig.json && tsc -p services/whatsapp-channel/tsconfig.json && tsc -p services/webchat-channel/tsconfig.json && tsc -p services/telegram-channel/tsconfig.json && NODE_OPTIONS='--max-old-space-size=8192' tsc -b plugins/*/mcp/tsconfig.json",
|
|
10
|
+
"build:lib": "tsc -p lib/models/tsconfig.json && tsc -p lib/mcp-stderr-tee/tsconfig.json && tsc -p lib/mcp-spawn-tee/tsconfig.json && tsc -p lib/mcp-lifeline/tsconfig.json && tsc -p lib/mcp-eager/tsconfig.json && tsc -p lib/account-enumeration/tsconfig.json && tsc -p lib/account-scope/tsconfig.json && tsc -p lib/graph-write/tsconfig.json && tsc -p lib/embed-client/tsconfig.json && tsc -p lib/graph-mcp/tsconfig.json && tsc -p lib/graph-trash/tsconfig.json && tsc -p lib/active-rules/tsconfig.json && tsc -p lib/admin-conversation-purge/tsconfig.json && tsc -p lib/graph-search/tsconfig.json && tsc -p lib/graph-style/tsconfig.json && tsc -p lib/device-url/tsconfig.json && tsc -p lib/brand-templating/tsconfig.json && tsc -p lib/entitlement/tsconfig.json && tsc -p lib/task-secrets/tsconfig.json && tsc -p lib/admins-write/tsconfig.json && tsc -p lib/admin-access-password/tsconfig.json && tsc -p lib/persistent-components/tsconfig.json && tsc -p lib/require-port-env/tsconfig.json && tsc -p lib/aeo-llms-txt-writer/tsconfig.json && tsc -p lib/obsidian-parser/tsconfig.json",
|
|
11
11
|
"gen:canonical-tools": "node scripts/generate-canonical-tool-names.mjs",
|
|
12
12
|
"build:memory": "tsc -p plugins/memory/mcp/tsconfig.json",
|
|
13
13
|
"build:contacts": "tsc -p plugins/contacts/mcp/tsconfig.json",
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"build:graph-viewer": "tsc -p plugins/graph-viewer/mcp/tsconfig.json",
|
|
24
24
|
"build:claude-session-manager": "tsc -p services/claude-session-manager/tsconfig.json",
|
|
25
25
|
"build:whatsapp-channel": "tsc -p services/whatsapp-channel/tsconfig.json",
|
|
26
|
-
"build:webchat-channel": "tsc -p services/webchat-channel/tsconfig.json"
|
|
26
|
+
"build:webchat-channel": "tsc -p services/webchat-channel/tsconfig.json",
|
|
27
|
+
"build:telegram-channel": "tsc -p services/telegram-channel/tsconfig.json"
|
|
27
28
|
},
|
|
28
29
|
"overrides": {
|
|
29
30
|
"zod": "3.x"
|