@memberjunction/ng-conversations 6.2.0-edge.6 → 6.2.0-edge.7
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/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +1 -0
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +174 -2
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +1266 -443
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-mode-picker.component.js +2 -2
- package/dist/lib/components/conversation/conversation-mode-picker.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-remote-browser-controller.d.ts +109 -0
- package/dist/lib/components/conversation/conversation-remote-browser-controller.d.ts.map +1 -0
- package/dist/lib/components/conversation/conversation-remote-browser-controller.js +298 -0
- package/dist/lib/components/conversation/conversation-remote-browser-controller.js.map +1 -0
- package/dist/lib/components/message/agent-handoff-card.component.d.ts +102 -0
- package/dist/lib/components/message/agent-handoff-card.component.d.ts.map +1 -0
- package/dist/lib/components/message/agent-handoff-card.component.js +439 -0
- package/dist/lib/components/message/agent-handoff-card.component.js.map +1 -0
- package/dist/lib/components/message/message-input.component.d.ts +80 -53
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +381 -277
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +18 -1
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +548 -426
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +8 -1
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +40 -2
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.js +1 -1
- package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.js.map +1 -1
- package/dist/lib/components/realtime/media/media-channel-state.d.ts +5 -0
- package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -1
- package/dist/lib/components/realtime/media/media-channel-state.js +27 -1
- package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -1
- package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/media/media-channel.js +7 -2
- package/dist/lib/components/realtime/media/media-channel.js.map +1 -1
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +19 -2
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js +59 -10
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +17 -6
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.js +61 -27
- package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-composer.component.d.ts +26 -3
- package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-composer.component.js +196 -102
- package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +53 -15
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +125 -51
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.d.ts +9 -12
- package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.js +38 -18
- package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +27 -4
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts +8 -2
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js +51 -10
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.d.ts +46 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.js +64 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +131 -9
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +347 -38
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +2 -1
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +9 -4
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/events/chat-events.d.ts +5 -4
- package/dist/lib/events/chat-events.d.ts.map +1 -1
- package/dist/lib/events/chat-events.js +2 -2
- package/dist/lib/events/chat-events.js.map +1 -1
- package/dist/lib/models/agent-turn.model.d.ts +11 -7
- package/dist/lib/models/agent-turn.model.d.ts.map +1 -1
- package/dist/lib/models/agent-turn.model.js.map +1 -1
- package/dist/lib/services/active-tasks.service.d.ts +5 -0
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.js +16 -0
- package/dist/lib/services/active-tasks.service.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +7 -1
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-permission.service.js +2 -0
- package/dist/lib/services/artifact-permission.service.js.map +1 -1
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +1 -0
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
- package/dist/lib/services/collection-permission.service.js +1 -0
- package/dist/lib/services/collection-permission.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +1 -4
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +7 -45
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/realtime-session-review.service.d.ts +2 -1
- package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session-review.service.js.map +1 -1
- package/dist/lib/services/search.service.d.ts.map +1 -1
- package/dist/lib/services/search.service.js +1 -0
- package/dist/lib/services/search.service.js.map +1 -1
- package/dist/lib/utils/agent-handoff-map.d.ts +52 -0
- package/dist/lib/utils/agent-handoff-map.d.ts.map +1 -0
- package/dist/lib/utils/agent-handoff-map.js +270 -0
- package/dist/lib/utils/agent-handoff-map.js.map +1 -0
- package/dist/lib/utils/agent-turn-routing.d.ts +62 -7
- package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -1
- package/dist/lib/utils/agent-turn-routing.js +147 -6
- package/dist/lib/utils/agent-turn-routing.js.map +1 -1
- package/dist/lib/utils/decision-routing.d.ts +17 -9
- package/dist/lib/utils/decision-routing.d.ts.map +1 -1
- package/dist/lib/utils/decision-routing.js +23 -14
- package/dist/lib/utils/decision-routing.js.map +1 -1
- package/dist/lib/utils/thread-replies.d.ts +34 -0
- package/dist/lib/utils/thread-replies.d.ts.map +1 -0
- package/dist/lib/utils/thread-replies.js +49 -0
- package/dist/lib/utils/thread-replies.js.map +1 -0
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +5 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +36 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn-routing.js","sourceRoot":"","sources":["../../../src/lib/utils/agent-turn-routing.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure routing rules for an agent turn: which agent answers a message, and whether\n * any does. Kept free of Angular and of I/O so the whole matrix (reply mode × mention × allowed\n * list × route) is testable directly; `MessageInputComponent` supplies the candidates.\n *\n * @module @memberjunction/ng-conversations\n */\n\nimport { IsAgentAllowed } from '@memberjunction/ai-core-plus';\nimport type { AgentReplyMode, AgentTurnRoute, AgentTurnTarget } from '../models/agent-turn.model';\n\n/** The agent each route would use for one message, before the host's rules are applied. */\nexport interface AgentTurnCandidates {\n /** Agents the message tags, in the order they appear. */\n MentionedAgentIds: readonly string[];\n /** The last agent that answered in the conversation, other than the conversation manager. */\n ContinuityAgentId: string | null;\n /**\n * True when a routing decision put `ContinuityAgentId` there in place of the last agent that\n * answered. The turn is then labelled `DecisionRouted` instead of `Continuity`.\n */\n ContinuityDecisionRouted?: boolean;\n /** The agent pinned on the conversation. */\n ConversationDefaultAgentId: string | null;\n /** The host's `DefaultAgentId` input. */\n HostDefaultAgentId: string | null;\n /** MJ's conversation manager agent. */\n ConversationManagerAgentId: string | null;\n}\n\n/** The host's rules for the chat. */\nexport interface AgentTurnRules {\n /** When a message starts a turn. */\n ReplyMode: AgentReplyMode;\n /** The agents that may answer. Null allows every agent. */\n AllowedAgentIDs: readonly string[] | null;\n}\n\n/**\n * Picks the agent and route for one message, or null when no turn starts.\n *\n * The order is MJ's: the first tagged agent the host allows, then (under `Always` only) the last\n * agent that answered, the conversation's pinned agent, the host's default agent, and the\n * conversation manager. A candidate the host doesn't allow is skipped. A continuity candidate that\n * a routing decision chose (`ContinuityDecisionRouted`) takes the `DecisionRouted` label.\n *\n * A continuity or default candidate that `isKnownAgent` doesn't recognise falls back to the\n * conversation manager, as MJ always has, rather than to the next route. A tagged agent is taken\n * as tagged.\n *\n * @param candidates The agent each route would use.\n * @param rules The host's reply mode and allowed list.\n * @param isKnownAgent True when the agent exists in the client's agent catalog.\n */\nexport function ResolveAgentTurn(\n candidates: AgentTurnCandidates,\n rules: AgentTurnRules,\n isKnownAgent: (agentId: string) => boolean\n): AgentTurnTarget | null {\n const mentioned = candidates.MentionedAgentIds.find(id => IsAgentAllowed(id, rules.AllowedAgentIDs));\n if (mentioned) {\n return { AgentId: mentioned, Route: 'Mention' };\n }\n if (rules.ReplyMode === 'MentionOnly') {\n return null;\n }\n\n const implicitRoutes: ReadonlyArray<[AgentTurnRoute, string | null]> = [\n [candidates.ContinuityDecisionRouted ? 'DecisionRouted' : 'Continuity', candidates.ContinuityAgentId],\n ['ConversationDefault', candidates.ConversationDefaultAgentId],\n ['HostDefault', candidates.HostDefaultAgentId],\n ];\n for (const [route, agentId] of implicitRoutes) {\n if (agentId && IsAgentAllowed(agentId, rules.AllowedAgentIDs)) {\n return isKnownAgent(agentId)\n ? { AgentId: agentId, Route: route }\n : conversationManagerTarget(candidates, rules);\n }\n }\n return conversationManagerTarget(candidates, rules);\n}\n\n/** The conversation manager's turn, when there is one and the host allows it. */\nfunction conversationManagerTarget(candidates: AgentTurnCandidates, rules: AgentTurnRules): AgentTurnTarget | null {\n const agentId = candidates.ConversationManagerAgentId;\n return agentId && IsAgentAllowed(agentId, rules.AllowedAgentIDs)\n ? { AgentId: agentId, Route: 'ConversationManager' }\n : null;\n}\n\n/** A task-graph step that runs an agent, as the conversation manager emits it. */\ninterface AgentTaskStep {\n kind: string;\n configuration?: { agentName?: string } | object;\n}\n\n/**\n * The agent names in a task graph that the host doesn't allow. The conversation manager can\n * answer with a multi-step workflow instead of a single delegation; each `Agent` step names the\n * agent that runs it, so the allowed list has to hold there too.\n *\n * @param steps The graph's tasks.\n * @param allowedAgentIDs The host's allowed list. Null allows every agent.\n * @param resolveAgentId Maps an agent name to its ID, or null when no such agent exists.\n * @returns The disallowed names, each once, in the order they appear. Empty when all are allowed.\n */\nexport function FindDisallowedTaskGraphAgents(\n steps: ReadonlyArray<AgentTaskStep>,\n allowedAgentIDs: readonly string[] | null,\n resolveAgentId: (agentName: string) => string | null\n): string[] {\n if (allowedAgentIDs == null) {\n return [];\n }\n const disallowed: string[] = [];\n for (const step of steps) {\n const agentName = step.kind === 'Agent' ? agentNameOf(step.configuration) : null;\n if (agentName && !IsAgentAllowed(resolveAgentId(agentName), allowedAgentIDs) && !disallowed.includes(agentName)) {\n disallowed.push(agentName);\n }\n }\n return disallowed;\n}\n\n/** The `agentName` of an Agent step's configuration, when it has one. */\nfunction agentNameOf(configuration: AgentTaskStep['configuration']): string | null {\n if (configuration && 'agentName' in configuration && typeof configuration.agentName === 'string') {\n return configuration.agentName;\n }\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-turn-routing.js","sourceRoot":"","sources":["../../../src/lib/utils/agent-turn-routing.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure routing rules for an agent turn: which agent answers a message, and whether\n * any does. Kept free of Angular and of I/O so the whole matrix (reply mode × mention × allowed\n * list × route) is testable directly; `MessageInputComponent` supplies the candidates.\n *\n * @module @memberjunction/ng-conversations\n */\n\nimport { IsAgentAllowed } from '@memberjunction/ai-core-plus';\nimport { NormalizeUUID, UUIDsEqual } from '@memberjunction/global';\nimport type { AgentReplyMode, AgentTurnRoute, AgentTurnTarget } from '../models/agent-turn.model';\n\n/** The agent each route would use for one message, before the host's rules are applied. */\nexport interface AgentTurnCandidates {\n /** Agents the message tags, in the order they appear. */\n MentionedAgentIds: readonly string[];\n /** People the message tags (`@Person`). Addressing a person with no agent tag starts no agent turn. */\n MentionedUserIds?: readonly string[];\n /** The agent of the message this one replies to (`ParentID` -> `Role === 'AI'`), when set. */\n ReplyParentAgentId?: string | null;\n /** True when this message replies (`ParentID`) to another person's message (`Role === 'User'`). */\n ReplyParentIsHuman?: boolean;\n /** The last agent that answered in the conversation, other than the conversation manager. */\n ContinuityAgentId: string | null;\n /**\n * True when a routing decision put `ContinuityAgentId` there in place of the last agent that\n * answered (or confirmed it in a multi-person chat). The turn is then labelled `DecisionRouted`\n * instead of `Continuity`.\n */\n ContinuityDecisionRouted?: boolean;\n /** True when a routing decision in a multi-person chat concluded the message is addressed to a person. */\n DecisionAddressedToHuman?: boolean;\n /** The agent pinned on the conversation. */\n ConversationDefaultAgentId: string | null;\n /** The host's `DefaultAgentId` input. */\n HostDefaultAgentId: string | null;\n /** MJ's conversation manager agent. */\n ConversationManagerAgentId: string | null;\n}\n\n/** The host's rules for the chat. */\nexport interface AgentTurnRules {\n /** When a message starts a turn. */\n ReplyMode: AgentReplyMode;\n /** The agents that may answer. Null allows every agent. */\n AllowedAgentIDs: readonly string[] | null;\n}\n\n/**\n * True when a message with no allowed `@Agent` mention is intentionally addressed to a person\n * rather than an agent: it tags a person (`@Person`), replies (`ParentID`) to another person's\n * message, or was judged human-addressed by the routing decision.\n */\nexport function IsAddressedToHuman(candidates: AgentTurnCandidates): boolean {\n return (candidates.MentionedUserIds?.length ?? 0) > 0\n || Boolean(candidates.ReplyParentIsHuman)\n || Boolean(candidates.DecisionAddressedToHuman);\n}\n\n/**\n * Picks the agent and route for one message, or null when no turn starts.\n *\n * The order is MJ's: the first tagged agent the host allows, a direct thread reply (`ParentID`) to\n * a runnable agent, a continuity candidate that a routing decision chose (`DecisionRouted`), and\n * then (under `Always` only) the last agent that answered, the conversation's pinned agent, the\n * host's default agent, and the conversation manager. A message that tags a person, replies to\n * another person's message, or receives a `NoAgent` routing decision with no allowed `@Agent` tag\n * starts no turn. A candidate the host doesn't allow is skipped.\n *\n * A continuity or default candidate that `isKnownAgent` doesn't recognise falls back to the\n * conversation manager, as MJ always has, rather than to the next route. A tagged agent is taken\n * as tagged; a `ThreadReply` target must pass `isRunnableAgent`.\n *\n * @param candidates The agent each route would use.\n * @param rules The host's reply mode and allowed list.\n * @param isKnownAgent True when the agent exists in the client's agent catalog.\n * @param isRunnableAgent True when the current user can run the agent directly (defaults to `isKnownAgent`).\n */\nexport function ResolveAgentTurn(\n candidates: AgentTurnCandidates,\n rules: AgentTurnRules,\n isKnownAgent: (agentId: string) => boolean,\n isRunnableAgent: (agentId: string) => boolean = isKnownAgent\n): AgentTurnTarget | null {\n const mentioned = candidates.MentionedAgentIds.find(id => IsAgentAllowed(id, rules.AllowedAgentIDs));\n if (mentioned) {\n return { AgentId: mentioned, Route: 'Mention' };\n }\n if ((candidates.MentionedUserIds?.length ?? 0) > 0 || candidates.ReplyParentIsHuman) {\n return null;\n }\n const replyAgent = candidates.ReplyParentAgentId;\n if (replyAgent && IsAgentAllowed(replyAgent, rules.AllowedAgentIDs) && isRunnableAgent(replyAgent)) {\n return { AgentId: replyAgent, Route: 'ThreadReply' };\n }\n if (candidates.DecisionAddressedToHuman) {\n return null;\n }\n if (\n candidates.ContinuityDecisionRouted\n && candidates.ContinuityAgentId\n && IsAgentAllowed(candidates.ContinuityAgentId, rules.AllowedAgentIDs)\n && isKnownAgent(candidates.ContinuityAgentId)\n ) {\n return { AgentId: candidates.ContinuityAgentId, Route: 'DecisionRouted' };\n }\n if (rules.ReplyMode === 'MentionOnly') {\n return null;\n }\n\n const implicitRoutes: ReadonlyArray<[AgentTurnRoute, string | null]> = [\n [candidates.ContinuityDecisionRouted ? 'DecisionRouted' : 'Continuity', candidates.ContinuityAgentId],\n ['ConversationDefault', candidates.ConversationDefaultAgentId],\n ['HostDefault', candidates.HostDefaultAgentId],\n ];\n for (const [route, agentId] of implicitRoutes) {\n if (agentId && IsAgentAllowed(agentId, rules.AllowedAgentIDs)) {\n return isKnownAgent(agentId)\n ? { AgentId: agentId, Route: route }\n : conversationManagerTarget(candidates, rules);\n }\n }\n return conversationManagerTarget(candidates, rules);\n}\n\n/** The conversation manager's turn, when there is one and the host allows it. */\nfunction conversationManagerTarget(candidates: AgentTurnCandidates, rules: AgentTurnRules): AgentTurnTarget | null {\n const agentId = candidates.ConversationManagerAgentId;\n return agentId && IsAgentAllowed(agentId, rules.AllowedAgentIDs)\n ? { AgentId: agentId, Route: 'ConversationManager' }\n : null;\n}\n\n/** A task-graph step that runs an agent, as the conversation manager emits it. */\ninterface AgentTaskStep {\n kind: string;\n configuration?: { agentName?: string } | object;\n}\n\n/**\n * The agent names in a task graph that the host doesn't allow. The conversation manager can\n * answer with a multi-step workflow instead of a single delegation; each `Agent` step names the\n * agent that runs it, so the allowed list has to hold there too.\n *\n * @param steps The graph's tasks.\n * @param allowedAgentIDs The host's allowed list. Null allows every agent.\n * @param resolveAgentId Maps an agent name to its ID, or null when no such agent exists.\n * @returns The disallowed names, each once, in the order they appear. Empty when all are allowed.\n */\nexport function FindDisallowedTaskGraphAgents(\n steps: ReadonlyArray<AgentTaskStep>,\n allowedAgentIDs: readonly string[] | null,\n resolveAgentId: (agentName: string) => string | null\n): string[] {\n if (allowedAgentIDs == null) {\n return [];\n }\n const disallowed: string[] = [];\n for (const step of steps) {\n const agentName = step.kind === 'Agent' ? agentNameOf(step.configuration) : null;\n if (agentName && !IsAgentAllowed(resolveAgentId(agentName), allowedAgentIDs) && !disallowed.includes(agentName)) {\n disallowed.push(agentName);\n }\n }\n return disallowed;\n}\n\n/** The `agentName` of an Agent step's configuration, when it has one. */\nfunction agentNameOf(configuration: AgentTaskStep['configuration']): string | null {\n if (configuration && 'agentName' in configuration && typeof configuration.agentName === 'string') {\n return configuration.agentName;\n }\n return null;\n}\n\n/** Minimal shape of a conversation detail row inspected when resolving continuity routing. */\nexport interface ContinuityHistoryMessage {\n ID?: string | null;\n Role?: string | null;\n AgentID?: string | null;\n ParentID?: string | null;\n Message?: string | null;\n}\n\n/**\n * Returns true when a user message explicitly `@`-mentions the given agent (by JSON mention token\n * `@{...\"id\":\"<agentId>\"...}`, JSON token `@{...\"name\":\"<agentName>\"...}`, or plain `@<agentName>`).\n */\nexport function MessageMentionsAgent(\n messageText: string | null | undefined,\n agentId: string | null | undefined,\n agentName?: string | null\n): boolean {\n if (!messageText) {\n return false;\n }\n const normalizedId = NormalizeUUID(agentId ?? '');\n const normalizedName = (agentName ?? '').trim().toLowerCase();\n\n let cursor = 0;\n while (cursor < messageText.length) {\n const openIdx = messageText.indexOf('@{', cursor);\n if (openIdx === -1) {\n break;\n }\n const closeIdx = messageText.indexOf('}', openIdx + 2);\n if (closeIdx === -1) {\n break;\n }\n const body = messageText.slice(openIdx + 2, closeIdx);\n cursor = closeIdx + 1;\n if (!body) {\n continue;\n }\n try {\n const parsed = JSON.parse(`{${body}}`) as { type?: string; id?: string; name?: string };\n if (parsed.type && parsed.type !== 'agent') {\n continue;\n }\n if (normalizedId && typeof parsed.id === 'string' && UUIDsEqual(parsed.id, normalizedId)) {\n return true;\n }\n if (normalizedName && typeof parsed.name === 'string' && parsed.name.trim().toLowerCase() === normalizedName) {\n return true;\n }\n } catch {\n // Ignore malformed token and continue scanning\n }\n }\n\n if (normalizedName) {\n const escaped = normalizedName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const plainMention = new RegExp(`(?:^|\\\\s)@${escaped}(?=\\\\b|\\\\s|$)`, 'i');\n if (plainMention.test(messageText)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Walks conversation history from newest to oldest to find the most recent non-manager `AI` message\n * that owns continuity for the next turn.\n *\n * Stops and returns `null` (returning ownership to the conversation manager) when:\n * - A `User` message explicitly `@`-mentions the conversation manager and no non-manager `AI`\n * message has replied since (e.g. the user said `@Sage …` and Sage answered directly).\n * - An `AI` message from the conversation manager was handed back from another `AI` message\n * (`ParentID` references an `AI` message, or the immediately preceding row is a non-manager `AI`\n * message in the same turn).\n */\nexport function FindContinuityAgentMessage<T extends ContinuityHistoryMessage>(\n messages: readonly T[],\n conversationManagerAgentId: string | null,\n options?: {\n conversationManagerName?: string | null;\n isWithinFloor?: (msg: T) => boolean;\n userMentionsManager?: (msg: T) => boolean;\n }\n): T | null {\n const normalizedManagerId = NormalizeUUID(conversationManagerAgentId ?? '');\n const managerName = options?.conversationManagerName ?? 'Sage';\n const byId = new Map<string, T>();\n for (const m of messages) {\n if (m.ID) {\n byId.set(NormalizeUUID(m.ID), m);\n }\n }\n\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (options?.isWithinFloor && !options.isWithinFloor(msg)) {\n continue;\n }\n if (msg.Role === 'AI' && msg.AgentID) {\n const isManager = normalizedManagerId.length > 0 && UUIDsEqual(msg.AgentID, normalizedManagerId);\n if (!isManager) {\n return msg;\n }\n // Conversation manager AI row: check if it is a handback from another AI row\n const parent = msg.ParentID ? byId.get(NormalizeUUID(msg.ParentID)) : undefined;\n if (parent && parent.Role === 'AI') {\n return null;\n }\n const prev = i > 0 ? messages[i - 1] : undefined;\n if (\n prev &&\n prev.Role === 'AI' &&\n prev.AgentID &&\n !UUIDsEqual(prev.AgentID, normalizedManagerId)\n ) {\n return null;\n }\n continue;\n }\n if (msg.Role === 'User') {\n const mentionsManager = options?.userMentionsManager\n ? options.userMentionsManager(msg)\n : MessageMentionsAgent(msg.Message, conversationManagerAgentId, managerName);\n if (mentionsManager) {\n return null;\n }\n }\n }\n return null;\n}\n\n/**\n * Convenience wrapper around {@link FindContinuityAgentMessage} returning only the `AgentID`.\n */\nexport function FindContinuityAgentId<T extends ContinuityHistoryMessage>(\n messages: readonly T[],\n conversationManagerAgentId: string | null,\n options?: {\n conversationManagerName?: string | null;\n isWithinFloor?: (msg: T) => boolean;\n userMentionsManager?: (msg: T) => boolean;\n }\n): string | null {\n return FindContinuityAgentMessage(messages, conversationManagerAgentId, options)?.AgentID ?? null;\n}\n\n"]}
|
|
@@ -32,22 +32,29 @@ export interface RoutingDecisionGate {
|
|
|
32
32
|
ReplyMode: AgentReplyMode;
|
|
33
33
|
/** Agents the message tags. */
|
|
34
34
|
MentionedAgentIds: readonly string[];
|
|
35
|
+
/** People the message tags (`@Person`). */
|
|
36
|
+
MentionedUserIds?: readonly string[];
|
|
37
|
+
/** Direct reply (`ParentID`) to an earlier AI message. */
|
|
38
|
+
ReplyParentAgentId?: string | null;
|
|
39
|
+
/** Direct reply (`ParentID`) to another person's message. */
|
|
40
|
+
ReplyParentIsHuman?: boolean;
|
|
35
41
|
/** The message, as saved. */
|
|
36
42
|
Message: string;
|
|
37
43
|
/** The last agent that answered, other than the conversation manager. */
|
|
38
44
|
ContinuityAgentId: string | null;
|
|
39
45
|
}
|
|
40
46
|
/**
|
|
41
|
-
* True when a message should get a routing decision: routing is on,
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
47
|
+
* True when a message should get a routing decision: routing is on, some agent has answered
|
|
48
|
+
* before in this conversation, and the message has no structural override (`@Agent`, `@Person`,
|
|
49
|
+
* `ParentID` thread reply, or a form response). Before any agent has answered (`ContinuityAgentId`
|
|
50
|
+
* is null), no call is made — so in `MentionOnly` chats the first invocation requires an `@Agent`
|
|
51
|
+
* mention, and subsequent unmentioned messages ask the routing decision.
|
|
45
52
|
*/
|
|
46
53
|
export declare function ShouldRunRoutingDecision(gate: RoutingDecisionGate): boolean;
|
|
47
54
|
/**
|
|
48
|
-
* Asks one routing decision and reads its answer.
|
|
49
|
-
*
|
|
50
|
-
* throws.
|
|
55
|
+
* Asks one routing decision and reads its answer. In a single-user chat it fails toward
|
|
56
|
+
* continuity; in a multi-person chat (`input.AllowNoAgentOption`) it fails toward silence
|
|
57
|
+
* (`NoAgent`). Never throws.
|
|
51
58
|
*
|
|
52
59
|
* @param input What to decide. Check it with `CanAskRoutingDecision` first.
|
|
53
60
|
* @param runDecision Runs the decision on the server.
|
|
@@ -56,8 +63,9 @@ export declare function ShouldRunRoutingDecision(gate: RoutingDecisionGate): boo
|
|
|
56
63
|
export declare function RunRoutingDecision(input: RoutingDecisionInput, runDecision: RoutingDecisionRunner, timeoutMs?: number): Promise<RoutingDecisionOutcome>;
|
|
57
64
|
/**
|
|
58
65
|
* The candidates with the decision applied: a routed agent replaces continuity and is labelled
|
|
59
|
-
* `DecisionRouted`,
|
|
60
|
-
*
|
|
66
|
+
* `DecisionRouted`, "someone else" clears continuity, and "no agent" (multi-person human-to-human)
|
|
67
|
+
* clears continuity and marks the message as addressed to a person. Any other outcome, or none,
|
|
68
|
+
* leaves the candidates as they are.
|
|
61
69
|
*/
|
|
62
70
|
export declare function ApplyRoutingDecision(candidates: AgentTurnCandidates, outcome: RoutingDecisionOutcome | null): AgentTurnCandidates;
|
|
63
71
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-routing.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/decision-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"decision-routing.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/decision-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAQH,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,yFAAyF;AACzF,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE9F,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAChC,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,SAAS,EAAE,cAAc,CAAC;IAC1B,+BAA+B;IAC/B,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAQ3E;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,oBAAoB,EAC3B,WAAW,EAAE,qBAAqB,EAClC,SAAS,GAAE,MAAoC,GAChD,OAAO,CAAC,sBAAsB,CAAC,CAYjC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE,sBAAsB,GAAG,IAAI,GACvC,mBAAmB,CAWrB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7G"}
|
|
@@ -18,25 +18,28 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @module @memberjunction/ng-conversations
|
|
20
20
|
*/
|
|
21
|
-
import { BuildRoutingQuestions, BuildRoutingState, ConversationUtility, DECISION_ROUTING_TIMEOUT_MS, InterpretRoutingAnswers, KeptContinuityOutcome } from '@memberjunction/ai-core-plus';
|
|
21
|
+
import { BuildRoutingQuestions, BuildRoutingState, ConversationUtility, DECISION_ROUTING_TIMEOUT_MS, InterpretRoutingAnswers, KeptContinuityOutcome, NoAgentOutcome } from '@memberjunction/ai-core-plus';
|
|
22
22
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
23
23
|
/**
|
|
24
|
-
* True when a message should get a routing decision: routing is on,
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
24
|
+
* True when a message should get a routing decision: routing is on, some agent has answered
|
|
25
|
+
* before in this conversation, and the message has no structural override (`@Agent`, `@Person`,
|
|
26
|
+
* `ParentID` thread reply, or a form response). Before any agent has answered (`ContinuityAgentId`
|
|
27
|
+
* is null), no call is made — so in `MentionOnly` chats the first invocation requires an `@Agent`
|
|
28
|
+
* mention, and subsequent unmentioned messages ask the routing decision.
|
|
28
29
|
*/
|
|
29
30
|
export function ShouldRunRoutingDecision(gate) {
|
|
30
31
|
return gate.Enabled
|
|
31
|
-
&& gate.ReplyMode === 'Always'
|
|
32
32
|
&& !!gate.ContinuityAgentId
|
|
33
33
|
&& gate.MentionedAgentIds.length === 0
|
|
34
|
+
&& (gate.MentionedUserIds?.length ?? 0) === 0
|
|
35
|
+
&& !gate.ReplyParentAgentId
|
|
36
|
+
&& !gate.ReplyParentIsHuman
|
|
34
37
|
&& !ConversationUtility.ContainsFormResponse(gate.Message);
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
|
-
* Asks one routing decision and reads its answer.
|
|
38
|
-
*
|
|
39
|
-
* throws.
|
|
40
|
+
* Asks one routing decision and reads its answer. In a single-user chat it fails toward
|
|
41
|
+
* continuity; in a multi-person chat (`input.AllowNoAgentOption`) it fails toward silence
|
|
42
|
+
* (`NoAgent`). Never throws.
|
|
40
43
|
*
|
|
41
44
|
* @param input What to decide. Check it with `CanAskRoutingDecision` first.
|
|
42
45
|
* @param runDecision Runs the decision on the server.
|
|
@@ -49,19 +52,25 @@ export async function RunRoutingDecision(input, runDecision, timeoutMs = DECISIO
|
|
|
49
52
|
TimeoutMS: timeoutMs
|
|
50
53
|
};
|
|
51
54
|
const result = await runWithDeadline(() => runDecision(params), timeoutMs);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
if (result) {
|
|
56
|
+
return InterpretRoutingAnswers(input, result);
|
|
57
|
+
}
|
|
58
|
+
const reason = `no answer within ${timeoutMs} ms`;
|
|
59
|
+
return input.AllowNoAgentOption ? NoAgentOutcome(reason) : KeptContinuityOutcome(reason);
|
|
55
60
|
}
|
|
56
61
|
/**
|
|
57
62
|
* The candidates with the decision applied: a routed agent replaces continuity and is labelled
|
|
58
|
-
* `DecisionRouted`,
|
|
59
|
-
*
|
|
63
|
+
* `DecisionRouted`, "someone else" clears continuity, and "no agent" (multi-person human-to-human)
|
|
64
|
+
* clears continuity and marks the message as addressed to a person. Any other outcome, or none,
|
|
65
|
+
* leaves the candidates as they are.
|
|
60
66
|
*/
|
|
61
67
|
export function ApplyRoutingDecision(candidates, outcome) {
|
|
62
68
|
if (outcome?.Verdict === 'Routed' && outcome.RoutedAgentId) {
|
|
63
69
|
return { ...candidates, ContinuityAgentId: outcome.RoutedAgentId, ContinuityDecisionRouted: true };
|
|
64
70
|
}
|
|
71
|
+
if (outcome?.Verdict === 'NoAgent') {
|
|
72
|
+
return { ...candidates, ContinuityAgentId: null, ContinuityDecisionRouted: false, DecisionAddressedToHuman: true };
|
|
73
|
+
}
|
|
65
74
|
if (outcome?.Verdict === 'SomeoneElse') {
|
|
66
75
|
return { ...candidates, ContinuityAgentId: null };
|
|
67
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-routing.js","sourceRoot":"","sources":["../../../src/lib/utils/decision-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"decision-routing.js","sourceRoot":"","sources":["../../../src/lib/utils/decision-routing.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Decision routing for an unmentioned message (plan Tasks 3.9 and 3.2): one typed\n * decision that may send the message to a different agent in the conversation than the last one\n * that answered, and may name the artifact version the message modifies.\n *\n * It runs before {@link ResolveAgentTurn}, which stays pure. When the answer is confident, the\n * caller replaces the continuity candidate with {@link ApplyRoutingDecision}; otherwise nothing\n * changes. Every failure keeps today's routing. The chat turns it on with `EnableDecisionRouting`,\n * which is off by default.\n *\n * The decision itself (its input, questions and state, and how its answers are read) is built in\n * `@memberjunction/ai-core-plus` (`conversation-routing-decision.ts`), so the Decision Eval harness\n * measures exactly what the chat sends. What stays here is the call and what the chat does with\n * the outcome. Import the builders and their types from `@memberjunction/ai-core-plus` directly.\n *\n * Kept free of Angular so the whole path, with the decision call mocked, is testable directly;\n * `MessageInputComponent` supplies the conversation and the call.\n *\n * @module @memberjunction/ng-conversations\n */\n\nimport {\n BuildRoutingQuestions,\n BuildRoutingState,\n ConversationUtility,\n DECISION_ROUTING_TIMEOUT_MS,\n InterpretRoutingAnswers,\n KeptContinuityOutcome,\n NoAgentOutcome,\n type RoutingDecisionInput,\n type RoutingDecisionOutcome\n} from '@memberjunction/ai-core-plus';\nimport type { RunDecisionParams, RunDecisionResult } from '@memberjunction/graphql-dataprovider';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport type { AgentReplyMode } from '../models/agent-turn.model';\nimport type { AgentTurnCandidates } from './agent-turn-routing';\n\n/** Runs a decision on the server: `ConversationAgentService.RunDecision` in the chat. */\nexport type RoutingDecisionRunner = (params: RunDecisionParams) => Promise<RunDecisionResult>;\n\n/** What decides whether a message gets a routing decision at all. */\nexport interface RoutingDecisionGate {\n /** The chat's `EnableDecisionRouting` input. */\n Enabled: boolean;\n /** The chat's reply mode. */\n ReplyMode: AgentReplyMode;\n /** Agents the message tags. */\n MentionedAgentIds: readonly string[];\n /** People the message tags (`@Person`). */\n MentionedUserIds?: readonly string[];\n /** Direct reply (`ParentID`) to an earlier AI message. */\n ReplyParentAgentId?: string | null;\n /** Direct reply (`ParentID`) to another person's message. */\n ReplyParentIsHuman?: boolean;\n /** The message, as saved. */\n Message: string;\n /** The last agent that answered, other than the conversation manager. */\n ContinuityAgentId: string | null;\n}\n\n/**\n * True when a message should get a routing decision: routing is on, some agent has answered\n * before in this conversation, and the message has no structural override (`@Agent`, `@Person`,\n * `ParentID` thread reply, or a form response). Before any agent has answered (`ContinuityAgentId`\n * is null), no call is made — so in `MentionOnly` chats the first invocation requires an `@Agent`\n * mention, and subsequent unmentioned messages ask the routing decision.\n */\nexport function ShouldRunRoutingDecision(gate: RoutingDecisionGate): boolean {\n return gate.Enabled\n && !!gate.ContinuityAgentId\n && gate.MentionedAgentIds.length === 0\n && (gate.MentionedUserIds?.length ?? 0) === 0\n && !gate.ReplyParentAgentId\n && !gate.ReplyParentIsHuman\n && !ConversationUtility.ContainsFormResponse(gate.Message);\n}\n\n/**\n * Asks one routing decision and reads its answer. In a single-user chat it fails toward\n * continuity; in a multi-person chat (`input.AllowNoAgentOption`) it fails toward silence\n * (`NoAgent`). Never throws.\n *\n * @param input What to decide. Check it with `CanAskRoutingDecision` first.\n * @param runDecision Runs the decision on the server.\n * @param timeoutMs How long to wait. Defaults to `DECISION_ROUTING_TIMEOUT_MS`.\n */\nexport async function RunRoutingDecision(\n input: RoutingDecisionInput,\n runDecision: RoutingDecisionRunner,\n timeoutMs: number = DECISION_ROUTING_TIMEOUT_MS\n): Promise<RoutingDecisionOutcome> {\n const params: RunDecisionParams = {\n State: BuildRoutingState(input),\n Questions: BuildRoutingQuestions(input),\n TimeoutMS: timeoutMs\n };\n const result = await runWithDeadline(() => runDecision(params), timeoutMs);\n if (result) {\n return InterpretRoutingAnswers(input, result);\n }\n const reason = `no answer within ${timeoutMs} ms`;\n return input.AllowNoAgentOption ? NoAgentOutcome(reason) : KeptContinuityOutcome(reason);\n}\n\n/**\n * The candidates with the decision applied: a routed agent replaces continuity and is labelled\n * `DecisionRouted`, \"someone else\" clears continuity, and \"no agent\" (multi-person human-to-human)\n * clears continuity and marks the message as addressed to a person. Any other outcome, or none,\n * leaves the candidates as they are.\n */\nexport function ApplyRoutingDecision(\n candidates: AgentTurnCandidates,\n outcome: RoutingDecisionOutcome | null\n): AgentTurnCandidates {\n if (outcome?.Verdict === 'Routed' && outcome.RoutedAgentId) {\n return { ...candidates, ContinuityAgentId: outcome.RoutedAgentId, ContinuityDecisionRouted: true };\n }\n if (outcome?.Verdict === 'NoAgent') {\n return { ...candidates, ContinuityAgentId: null, ContinuityDecisionRouted: false, DecisionAddressedToHuman: true };\n }\n if (outcome?.Verdict === 'SomeoneElse') {\n return { ...candidates, ContinuityAgentId: null };\n }\n return candidates;\n}\n\n/**\n * The artifact version to hand a turn's agent: the decision's target, when it is one of that\n * agent's versions. Null otherwise, including after a redirect to another agent.\n */\nexport function ArtifactVersionForTurn(outcome: RoutingDecisionOutcome | null, agentId: string): string | null {\n const target = outcome?.TargetArtifact;\n return target && UUIDsEqual(target.AgentId, agentId) ? target.ArtifactVersionId : null;\n}\n\n/**\n * Runs the call, or gives up on it after `timeoutMs`. Resolves with the result, a failed result\n * when the call throws, or null when it didn't answer in time. A late answer is ignored.\n */\nasync function runWithDeadline(\n call: () => Promise<RunDecisionResult>,\n timeoutMs: number\n): Promise<RunDecisionResult | null> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const deadline = new Promise<null>(resolve => {\n timer = setTimeout(() => resolve(null), timeoutMs);\n });\n const answer = Promise.resolve()\n .then(call)\n .catch((error: unknown): RunDecisionResult => ({\n Success: false,\n ErrorMessage: error instanceof Error ? error.message : String(error),\n Answers: {}\n }));\n try {\n return await Promise.race([answer, deadline]);\n } finally {\n clearTimeout(timer);\n }\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { MJConversationDetailEntity } from '@memberjunction/core-entities';
|
|
2
|
+
import { UUIDMap } from '@memberjunction/global';
|
|
3
|
+
/**
|
|
4
|
+
* Minimal shape of a conversation message needed to determine whether it is a
|
|
5
|
+
* thread reply and which top-level message is its thread root.
|
|
6
|
+
*/
|
|
7
|
+
export interface ThreadReplyRow {
|
|
8
|
+
readonly ID: MJConversationDetailEntity['ID'];
|
|
9
|
+
readonly ParentID: MJConversationDetailEntity['ParentID'];
|
|
10
|
+
readonly Role: MJConversationDetailEntity['Role'] | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Payload emitted when the chat area scrolls to the top-level root of a
|
|
14
|
+
* collapsed thread reply so the host can open the thread and reveal the reply.
|
|
15
|
+
*/
|
|
16
|
+
export interface ThreadReplyRevealRequest {
|
|
17
|
+
readonly ReplyID: string;
|
|
18
|
+
readonly RootID: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Maps each thread reply's ID to its top-level root's ID. Rows that belong in
|
|
22
|
+
* the main conversation flow are omitted from the returned {@link UUIDMap}.
|
|
23
|
+
*
|
|
24
|
+
* Rules:
|
|
25
|
+
* - A person's row (`Role === 'User'`) with a `ParentID` is a thread reply,
|
|
26
|
+
* even when its parent is not in `rows` (so paging older rows in never flips
|
|
27
|
+
* a visible row to hidden).
|
|
28
|
+
* - Any row whose parent is a thread reply belongs to the same thread root.
|
|
29
|
+
* - Any non-person row (`AI` or `Error`) whose parent is a top-level row stays
|
|
30
|
+
* in the main flow (agent turns stamp `ParentID` to the prompt row).
|
|
31
|
+
* - A non-person row whose parent is not loaded stays in the main flow.
|
|
32
|
+
*/
|
|
33
|
+
export declare function GetThreadReplyRoots(rows: readonly ThreadReplyRow[]): UUIDMap<string>;
|
|
34
|
+
//# sourceMappingURL=thread-replies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-replies.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/thread-replies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAe,OAAO,EAAc,MAAM,wBAAwB,CAAC;AAE1E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAC1D;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCpF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { IndexByUUID, UUIDMap, UUIDsEqual } from '@memberjunction/global';
|
|
2
|
+
/**
|
|
3
|
+
* Maps each thread reply's ID to its top-level root's ID. Rows that belong in
|
|
4
|
+
* the main conversation flow are omitted from the returned {@link UUIDMap}.
|
|
5
|
+
*
|
|
6
|
+
* Rules:
|
|
7
|
+
* - A person's row (`Role === 'User'`) with a `ParentID` is a thread reply,
|
|
8
|
+
* even when its parent is not in `rows` (so paging older rows in never flips
|
|
9
|
+
* a visible row to hidden).
|
|
10
|
+
* - Any row whose parent is a thread reply belongs to the same thread root.
|
|
11
|
+
* - Any non-person row (`AI` or `Error`) whose parent is a top-level row stays
|
|
12
|
+
* in the main flow (agent turns stamp `ParentID` to the prompt row).
|
|
13
|
+
* - A non-person row whose parent is not loaded stays in the main flow.
|
|
14
|
+
*/
|
|
15
|
+
export function GetThreadReplyRoots(rows) {
|
|
16
|
+
const byId = IndexByUUID(rows);
|
|
17
|
+
const memo = new Map();
|
|
18
|
+
const resolveRoot = (row) => {
|
|
19
|
+
if (memo.has(row)) {
|
|
20
|
+
return memo.get(row) ?? null;
|
|
21
|
+
}
|
|
22
|
+
memo.set(row, null);
|
|
23
|
+
const parentId = row.ParentID;
|
|
24
|
+
if (!parentId) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const parent = byId.Get(parentId);
|
|
28
|
+
if (!parent) {
|
|
29
|
+
// ponytail: a non-person row whose parent isn't loaded stays visible; if its parent later loads as a thread reply, it moves into that thread.
|
|
30
|
+
const rootId = row.Role === 'User' ? parentId : null;
|
|
31
|
+
memo.set(row, rootId);
|
|
32
|
+
return rootId;
|
|
33
|
+
}
|
|
34
|
+
const parentRoot = resolveRoot(parent);
|
|
35
|
+
const candidate = parentRoot ?? (row.Role === 'User' ? parent.ID : null);
|
|
36
|
+
const rootId = candidate && !UUIDsEqual(candidate, row.ID) ? candidate : null;
|
|
37
|
+
memo.set(row, rootId);
|
|
38
|
+
return rootId;
|
|
39
|
+
};
|
|
40
|
+
const roots = new UUIDMap();
|
|
41
|
+
for (const row of rows) {
|
|
42
|
+
const rootId = resolveRoot(row);
|
|
43
|
+
if (rootId) {
|
|
44
|
+
roots.Set(row.ID, rootId);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return roots;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=thread-replies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-replies.js","sourceRoot":"","sources":["../../../src/lib/utils/thread-replies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAqB1E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA+B;IACjE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEtD,MAAM,WAAW,GAAG,CAAC,GAAmB,EAAiB,EAAE;QACzD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEpB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,8IAA8I;YAC9I,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,OAAO,EAAU,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { MJConversationDetailEntity } from '@memberjunction/core-entities';\nimport { IndexByUUID, UUIDMap, UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Minimal shape of a conversation message needed to determine whether it is a\n * thread reply and which top-level message is its thread root.\n */\nexport interface ThreadReplyRow {\n readonly ID: MJConversationDetailEntity['ID'];\n readonly ParentID: MJConversationDetailEntity['ParentID'];\n readonly Role: MJConversationDetailEntity['Role'] | null;\n}\n\n/**\n * Payload emitted when the chat area scrolls to the top-level root of a\n * collapsed thread reply so the host can open the thread and reveal the reply.\n */\nexport interface ThreadReplyRevealRequest {\n readonly ReplyID: string;\n readonly RootID: string;\n}\n\n/**\n * Maps each thread reply's ID to its top-level root's ID. Rows that belong in\n * the main conversation flow are omitted from the returned {@link UUIDMap}.\n *\n * Rules:\n * - A person's row (`Role === 'User'`) with a `ParentID` is a thread reply,\n * even when its parent is not in `rows` (so paging older rows in never flips\n * a visible row to hidden).\n * - Any row whose parent is a thread reply belongs to the same thread root.\n * - Any non-person row (`AI` or `Error`) whose parent is a top-level row stays\n * in the main flow (agent turns stamp `ParentID` to the prompt row).\n * - A non-person row whose parent is not loaded stays in the main flow.\n */\nexport function GetThreadReplyRoots(rows: readonly ThreadReplyRow[]): UUIDMap<string> {\n const byId = IndexByUUID(rows);\n const memo = new Map<ThreadReplyRow, string | null>();\n\n const resolveRoot = (row: ThreadReplyRow): string | null => {\n if (memo.has(row)) {\n return memo.get(row) ?? null;\n }\n memo.set(row, null);\n\n const parentId = row.ParentID;\n if (!parentId) {\n return null;\n }\n\n const parent = byId.Get(parentId);\n if (!parent) {\n // ponytail: a non-person row whose parent isn't loaded stays visible; if its parent later loads as a thread reply, it moves into that thread.\n const rootId = row.Role === 'User' ? parentId : null;\n memo.set(row, rootId);\n return rootId;\n }\n\n const parentRoot = resolveRoot(parent);\n const candidate = parentRoot ?? (row.Role === 'User' ? parent.ID : null);\n const rootId = candidate && !UUIDsEqual(candidate, row.ID) ? candidate : null;\n memo.set(row, rootId);\n return rootId;\n };\n\n const roots = new UUIDMap<string>();\n for (const row of rows) {\n const rootId = resolveRoot(row);\n if (rootId) {\n roots.Set(row.ID, rootId);\n }\n }\n return roots;\n}\n"]}
|
package/dist/public-api.d.ts
CHANGED
|
@@ -5,9 +5,11 @@ export * from './lib/models/lazy-artifact-info';
|
|
|
5
5
|
export * from './lib/models/navigation-request.model';
|
|
6
6
|
export * from './lib/models/agent-turn.model';
|
|
7
7
|
export * from './lib/utils/agent-turn-routing';
|
|
8
|
+
export * from './lib/utils/agent-handoff-map';
|
|
8
9
|
export * from './lib/utils/decision-routing';
|
|
9
10
|
export * from './lib/utils/conversation-branching';
|
|
10
11
|
export * from './lib/utils/conversation-forks';
|
|
12
|
+
export * from './lib/utils/thread-replies';
|
|
11
13
|
export * from './lib/utils/agent-failure-display';
|
|
12
14
|
export * from './lib/services/data-cache.service';
|
|
13
15
|
export * from './lib/services/artifact-state.service';
|
|
@@ -42,8 +44,10 @@ export * from './lib/components/sidebar/conversation-sidebar.component';
|
|
|
42
44
|
export * from './lib/components/sidebar/routines-section.component';
|
|
43
45
|
export * from './lib/components/conversation/conversation-list.component';
|
|
44
46
|
export * from './lib/components/conversation/conversation-chat-area.component';
|
|
47
|
+
export * from './lib/components/conversation/conversation-remote-browser-controller';
|
|
45
48
|
export * from './lib/components/conversation/conversation-empty-state.component';
|
|
46
49
|
export * from './lib/components/message/message-item.component';
|
|
50
|
+
export * from './lib/components/message/agent-handoff-card.component';
|
|
47
51
|
export * from './lib/components/message/message-list.component';
|
|
48
52
|
export * from './lib/components/message/message-input.component';
|
|
49
53
|
export * from './lib/components/composer/ai-composer.component';
|
|
@@ -125,6 +129,7 @@ export * from './lib/components/realtime/channels/client-context-channel';
|
|
|
125
129
|
export * from './lib/components/realtime/channels/realtime-channel-pane.component';
|
|
126
130
|
export * from './lib/components/realtime/channels/channel-onboarding-panel.component';
|
|
127
131
|
export * from './lib/components/realtime/whiteboard/whiteboard-channel';
|
|
132
|
+
export * from './lib/components/realtime/whiteboard/whiteboard-channel-config';
|
|
128
133
|
export * from './lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component';
|
|
129
134
|
export * from './lib/components/realtime/remote-browser/remote-browser-channel';
|
|
130
135
|
export * from './lib/components/realtime/remote-browser/remote-browser-surface.component';
|
package/dist/public-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAKA,cAAc,4BAA4B,CAAC;AAG3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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"}
|
package/dist/public-api.js
CHANGED
|
@@ -11,6 +11,7 @@ export * from './lib/models/navigation-request.model';
|
|
|
11
11
|
// Host rules for an agent turn: reply mode, routes, and the host turn handler contract
|
|
12
12
|
export * from './lib/models/agent-turn.model';
|
|
13
13
|
export * from './lib/utils/agent-turn-routing';
|
|
14
|
+
export * from './lib/utils/agent-handoff-map';
|
|
14
15
|
// Opt-in decision routing for an unmentioned message (EnableDecisionRouting)
|
|
15
16
|
// NOTE: the routing decision's builders and types, and IsAgentAllowed, live in
|
|
16
17
|
// @memberjunction/ai-core-plus — import them from there directly.
|
|
@@ -18,6 +19,7 @@ export * from './lib/utils/decision-routing';
|
|
|
18
19
|
// Fork rules: the delete guard and the open view (Main or one fork)
|
|
19
20
|
export * from './lib/utils/conversation-branching';
|
|
20
21
|
export * from './lib/utils/conversation-forks';
|
|
22
|
+
export * from './lib/utils/thread-replies';
|
|
21
23
|
export * from './lib/utils/agent-failure-display';
|
|
22
24
|
// Services - State
|
|
23
25
|
export * from './lib/services/data-cache.service';
|
|
@@ -61,8 +63,10 @@ export * from './lib/components/sidebar/conversation-sidebar.component';
|
|
|
61
63
|
export * from './lib/components/sidebar/routines-section.component';
|
|
62
64
|
export * from './lib/components/conversation/conversation-list.component';
|
|
63
65
|
export * from './lib/components/conversation/conversation-chat-area.component';
|
|
66
|
+
export * from './lib/components/conversation/conversation-remote-browser-controller';
|
|
64
67
|
export * from './lib/components/conversation/conversation-empty-state.component';
|
|
65
68
|
export * from './lib/components/message/message-item.component';
|
|
69
|
+
export * from './lib/components/message/agent-handoff-card.component';
|
|
66
70
|
export * from './lib/components/message/message-list.component';
|
|
67
71
|
export * from './lib/components/message/message-input.component';
|
|
68
72
|
// AI-aware composer wrapper (mj-ai-composer): mj-message-input-box + the three AI trigger
|
|
@@ -163,6 +167,7 @@ export * from './lib/components/realtime/channels/channel-onboarding-panel.compo
|
|
|
163
167
|
// NOTE: the whiteboard itself (engine, tools, components, export builders) lives in
|
|
164
168
|
// @memberjunction/ng-whiteboard — import board types/components from there directly.
|
|
165
169
|
export * from './lib/components/realtime/whiteboard/whiteboard-channel';
|
|
170
|
+
export * from './lib/components/realtime/whiteboard/whiteboard-channel-config';
|
|
166
171
|
export * from './lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component';
|
|
167
172
|
// Remote Browser channel plugin (client-direct, server-hosted browser) + its live surface + tools.
|
|
168
173
|
export * from './lib/components/realtime/remote-browser/remote-browser-channel';
|
package/dist/public-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Public API Surface of @memberjunction/ng-conversations\n */\n\n// Module\nexport * from './lib/conversations.module';\n\n// Models\nexport * from './lib/models/conversation-state.model';\nexport * from './lib/models/notification.model';\nexport * from './lib/models/lazy-artifact-info';\nexport * from './lib/models/navigation-request.model';\n// Host rules for an agent turn: reply mode, routes, and the host turn handler contract\nexport * from './lib/models/agent-turn.model';\nexport * from './lib/utils/agent-turn-routing';\n// Opt-in decision routing for an unmentioned message (EnableDecisionRouting)\n// NOTE: the routing decision's builders and types, and IsAgentAllowed, live in\n// @memberjunction/ai-core-plus — import them from there directly.\nexport * from './lib/utils/decision-routing';\n// Fork rules: the delete guard and the open view (Main or one fork)\nexport * from './lib/utils/conversation-branching';\nexport * from './lib/utils/conversation-forks';\nexport * from './lib/utils/agent-failure-display';\n\n// Services - State\nexport * from './lib/services/data-cache.service';\nexport * from './lib/services/artifact-state.service';\nexport * from './lib/services/agent-state.service';\nexport * from './lib/services/conversation-liveness-dom.service';\nexport * from './lib/services/conversation-agent.service';\nexport * from './lib/services/active-tasks.service';\nexport * from './lib/services/conversation-streaming.service';\nexport * from './lib/services/dialog.service';\nexport * from './lib/services/export.service';\nexport * from './lib/services/notification.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/mention-parser.service';\n// AI-aware mention suggestion engine (BaseSingleton — use MentionAutocompleteService.Instance).\n// NOTE: the generic MentionSuggestion TYPE lives in @memberjunction/ng-composer — import it\n// from there directly (no re-exports between packages).\nexport * from './lib/services/mention-autocomplete.service';\nexport * from './lib/services/collection-permission.service';\nexport * from './lib/services/artifact-permission.service';\nexport * from './lib/services/artifact-use-tracking.service';\nexport * from './lib/services/collection-state.service';\nexport * from './lib/services/conversation-attachment.service';\nexport * from './lib/services/graphql-attachment-blob-store';\nexport * from './lib/services/ui-command-handler.service';\nexport * from './lib/services/conversation-bridge.service';\nexport * from './lib/services/realtime-session.service';\nexport * from './lib/services/browser-realtime-media-host';\n// NOTE: the realtime session types (RealtimeCaption, RealtimeConnectionState,\n// RealtimeSessionRunOptions, …), the channel plugin base class, and the delegation-result\n// parser now live in `@memberjunction/realtime-runtime`. Import them from there directly —\n// MJ does not re-export across package boundaries.\nexport * from './lib/services/realtime-pairing';\nexport * from './lib/services/user-authorization';\nexport * from './lib/services/realtime-sessions-adapter';\nexport * from './lib/services/realtime-session-review.service';\n\n// Components\nexport * from './lib/components/workspace/conversation-workspace.component';\nexport * from './lib/components/navigation/conversation-navigation.component';\nexport * from './lib/components/sidebar/conversation-sidebar.component';\nexport * from './lib/components/sidebar/routines-section.component';\nexport * from './lib/components/conversation/conversation-list.component';\nexport * from './lib/components/conversation/conversation-chat-area.component';\nexport * from './lib/components/conversation/conversation-empty-state.component';\nexport * from './lib/components/message/message-item.component';\nexport * from './lib/components/message/message-list.component';\nexport * from './lib/components/message/message-input.component';\n// AI-aware composer wrapper (mj-ai-composer): mj-message-input-box + the three AI trigger\n// plugins built in, proxying the input box's full inputs/outputs/methods surface.\nexport * from './lib/components/composer/ai-composer.component';\n// Composer trigger-provider plugins ('@' / '#' / '/') — ClassFactory-registered; also\n// directly instantiable for explicit provider lists.\nexport * from './lib/composer-plugins/base-conversation-mention.provider';\nexport * from './lib/composer-plugins/agent-mention.provider';\nexport * from './lib/composer-plugins/record-mention.provider';\nexport * from './lib/composer-plugins/skill-command.provider';\nexport * from './lib/composer-plugins/load-composer-plugins';\n// NOTE: MessageInputBoxComponent, MentionEditorComponent (+ PendingAttachment), and\n// MentionDropdownComponent live in @memberjunction/ng-composer — import from there directly.\nexport * from './lib/components/message/conversation-message-rating.component';\nexport * from './lib/components/collection/collection-tree.component';\nexport * from './lib/components/collection/collection-view.component';\nexport * from './lib/components/collection/collections-full-view.component';\nexport * from './lib/components/collection/collection-artifact-card.component';\nexport * from './lib/components/collection/artifact-collection-picker-modal.component';\nexport * from './lib/components/collection/collection-share-modal.component';\nexport * from './lib/components/artifact/artifact-share-modal.component';\nexport * from './lib/components/project/project-selector.component';\nexport * from './lib/components/project/project-form-modal.component';\nexport * from './lib/components/task/tasks-full-view.component';\nexport * from './lib/components/tasks/task-widget.component';\nexport * from './lib/components/agent/agent-process-panel.component';\nexport * from './lib/components/agent/active-agent-indicator.component';\nexport * from './lib/components/active-tasks/active-tasks-panel.component';\nexport * from './lib/components/share/share-modal.component';\nexport * from './lib/components/notification/notification-badge.component';\nexport * from './lib/components/notification/activity-indicator.component';\nexport * from './lib/components/toast/toast.component';\nexport * from './lib/components/global-tasks/global-tasks-panel.component';\nexport * from './lib/components/attachment/image-viewer.component';\nexport * from './lib/components/overlay/chat-overlay.component';\n\n// Components declared AND exported by ConversationsModule but previously missing\n// from public-api. They are used in the templates of exported components (e.g.\n// mj-conversation-chat-area), so a consumer app compiling in Angular's\n// local-compilation / HMR mode fails to build (NG3004: \"Unable to import\n// component … not exported from @memberjunction/ng-conversations\") unless every\n// module-exported component is importable from the package entry point.\nexport * from './lib/components/collection/artifact-create-modal.component';\nexport * from './lib/components/collection/collection-form-modal.component';\nexport * from './lib/components/conversation/conversation-agent-picker.component';\nexport * from './lib/components/conversation/conversation-mode-picker.component';\nexport * from './lib/components/conversation/pinned-messages-panel.component';\nexport * from './lib/components/conversation/forks-popover.component';\nexport * from './lib/components/dialogs/input-dialog.component';\nexport * from './lib/components/dialogs/rating-dialog.component';\nexport * from './lib/components/export/export-modal.component';\nexport * from './lib/components/library/library-full-view.component';\nexport * from './lib/components/members/members-modal.component';\nexport * from './lib/components/message/actionable-commands.component';\nexport * from './lib/components/message/workflow-plan-card.component';\nexport * from './lib/components/search/search-panel.component';\nexport * from './lib/components/shared/user-picker.component';\nexport * from './lib/components/tasks/tasks-dropdown.component';\nexport * from './lib/directives/search-shortcut.directive';\n// SearchResult / SearchResultType are the payload of SearchPanelComponent's\n// ResultSelected output, so consumers cannot type a handler without them.\nexport type { SearchResult, SearchResultType } from './lib/services/search.service';\n\n// PR 2c — Widget extension surface (slots, events, design tokens)\nexport * from './lib/services/conversations-runtime-bootstrap.service';\nexport * from './lib/directives/chat-slot.directive';\nexport * from './lib/components/slots/slot-interfaces';\nexport * from './lib/components/slots/mj-chat-empty-state-default.component';\nexport * from './lib/components/slots/mj-chat-agent-presence-default.component';\nexport * from './lib/components/slots/mj-chat-header-default.component';\nexport * from './lib/components/slots/mj-chat-message-extra-default.component';\nexport * from './lib/components/slots/mj-chat-demonstration-surface-default.component';\nexport * from './lib/components/slots/mj-chat-message-bubble-default.component';\nexport * from './lib/events/chat-events';\n\n// Realtime / voice (PR #2787 — co-agent realtime sessions)\nexport * from './lib/components/realtime/realtime-agent-picker.component';\n// Real-time \"call mode\" overlay + its componentized parts\nexport * from './lib/components/realtime/realtime-session-overlay.component';\nexport * from './lib/components/realtime/realtime-session-state';\nexport * from './lib/components/realtime/realtime-agent-banner.component';\nexport * from './lib/components/realtime/realtime-agent-orb.component';\nexport * from './lib/components/realtime/realtime-session-thread.component';\nexport * from './lib/components/realtime/realtime-delegation-card.component';\nexport * from './lib/components/realtime/realtime-activity-rail.component';\nexport * from './lib/components/realtime/realtime-surface-tabs.component';\nexport * from './lib/components/realtime/realtime-surface-tabs.model';\nexport * from './lib/components/realtime/realtime-surface-stage.model';\nexport * from './lib/components/realtime/realtime-surface-placement-prefs';\nexport * from './lib/components/realtime/realtime-surface-panel-prefs';\nexport * from './lib/components/realtime/realtime-disclosure';\nexport * from './lib/components/realtime/realtime-audio-visuals';\nexport * from './lib/components/realtime/realtime-composer.component';\nexport * from './lib/components/realtime/realtime-channel-strip.component';\n// Conversation-timeline collapse of past realtime sessions (one card per session) + its pure grouping pass\nexport * from './lib/components/realtime/realtime-session-timeline-card.component';\nexport * from './lib/utils/realtime-session-timeline';\n// Pluggable interactive-channel contract (registry-resolved client plugins) + pane host\nexport * from './lib/components/realtime/channels/client-context-channel';\nexport * from './lib/components/realtime/channels/realtime-channel-pane.component';\nexport * from './lib/components/realtime/channels/channel-onboarding-panel.component';\n// Live whiteboard channel plugin + artifact viewer (thin consumers of the generic board).\n// NOTE: the whiteboard itself (engine, tools, components, export builders) lives in\n// @memberjunction/ng-whiteboard — import board types/components from there directly.\nexport * from './lib/components/realtime/whiteboard/whiteboard-channel';\nexport * from './lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component';\n// Remote Browser channel plugin (client-direct, server-hosted browser) + its live surface + tools.\nexport * from './lib/components/realtime/remote-browser/remote-browser-channel';\nexport * from './lib/components/realtime/remote-browser/remote-browser-surface.component';\nexport * from './lib/components/realtime/remote-browser/remote-browser-tools';\nexport * from './lib/components/realtime/remote-browser/remote-browser-audio-player';\n// Media channel plugin (Tabs-layout media display surface) + its state engine, tools, and surface.\nexport * from './lib/components/realtime/media/media-channel';\nexport * from './lib/components/realtime/media/media-channel-state';\nexport * from './lib/components/realtime/media/media-channel-tools';\nexport * from './lib/components/realtime/media/realtime-media-surface.component';\n// Identity Verification channel (generic, opt-in): prove an email address mid-call. State machine + surface.\nexport * from './lib/components/realtime/identity-verification/identity-verification-channel';\nexport * from './lib/components/realtime/identity-verification/identity-verification-model';\nexport * from './lib/components/realtime/identity-verification/identity-verification-surface.component';\n// Camera and Screen Share channels (opt-in, on demand): the agent asks, the user turns the capture on. State + surface.\nexport * from './lib/components/realtime/capture/realtime-capture-channel';\nexport * from './lib/components/realtime/capture/realtime-capture-model';\nexport * from './lib/components/realtime/capture/realtime-capture-surface.component';\n// The Avatar channel (in every call, inert without video): the agent's video on its surface.\nexport * from './lib/components/realtime/avatar/realtime-avatar-channel';\nexport * from './lib/components/realtime/avatar/realtime-avatar-surface.component';\n\n// Interactive Component channel: hosts any component artifact (mj-react-component) next to the call, with a\n// contract derived from the component's own spec. The pure parts (spec -> contract, config, data-state bounding,\n// instance engine, artifact source port) are framework-free; the channel and surface are the Angular layer.\nexport * from './lib/components/realtime/interactive-component/interactive-component-types';\nexport * from './lib/components/realtime/interactive-component/interactive-component-config';\nexport * from './lib/components/realtime/interactive-component/component-contract';\nexport * from './lib/components/realtime/interactive-component/component-data-state';\nexport * from './lib/components/realtime/interactive-component/component-instance-engine';\nexport * from './lib/components/realtime/interactive-component/component-spec-content';\nexport * from './lib/components/realtime/interactive-component/run-view-component-artifact-source';\nexport * from './lib/components/realtime/interactive-component/interactive-component-channel';\nexport * from './lib/components/realtime/interactive-component/realtime-interactive-component-surface.component';\n// Time-aligned Evidence Playback component (recorded session audio synced to the transcript).\nexport * from './lib/components/realtime/evidence-playback/realtime-evidence-playback.component';\nexport * from './lib/services/composer-draft-store';\n"]}
|
|
1
|
+
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,cAAc,4BAA4B,CAAC;AAE3C,SAAS;AACT,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,uFAAuF;AACvF,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,6EAA6E;AAC7E,+EAA+E;AAC/E,kEAAkE;AAClE,cAAc,8BAA8B,CAAC;AAC7C,oEAAoE;AACpE,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAElD,mBAAmB;AACnB,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,gGAAgG;AAChG,4FAA4F;AAC5F,wDAAwD;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAC3D,8EAA8E;AAC9E,0FAA0F;AAC1F,2FAA2F;AAC3F,mDAAmD;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC;AAE/D,aAAa;AACb,cAAc,6DAA6D,CAAC;AAC5E,cAAc,+DAA+D,CAAC;AAC9E,cAAc,yDAAyD,CAAC;AACxE,cAAc,qDAAqD,CAAC;AACpE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,iDAAiD,CAAC;AAChE,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AACjE,0FAA0F;AAC1F,kFAAkF;AAClF,cAAc,iDAAiD,CAAC;AAChE,sFAAsF;AACtF,qDAAqD;AACrD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8CAA8C,CAAC;AAC7D,oFAAoF;AACpF,6FAA6F;AAC7F,cAAc,gEAAgE,CAAC;AAC/E,cAAc,uDAAuD,CAAC;AACtE,cAAc,uDAAuD,CAAC;AACtE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,wEAAwE,CAAC;AACvF,cAAc,8DAA8D,CAAC;AAC7E,cAAc,0DAA0D,CAAC;AACzE,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sDAAsD,CAAC;AACrE,cAAc,yDAAyD,CAAC;AACxE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wCAAwC,CAAC;AACvD,cAAc,4DAA4D,CAAC;AAC3E,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC;AAEhE,iFAAiF;AACjF,+EAA+E;AAC/E,uEAAuE;AACvE,yEAAyE;AACzE,gFAAgF;AAChF,wEAAwE;AACxE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,6DAA6D,CAAC;AAC5E,cAAc,mEAAmE,CAAC;AAClF,cAAc,kEAAkE,CAAC;AACjF,cAAc,+DAA+D,CAAC;AAC9E,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AACjE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,wDAAwD,CAAC;AACvE,cAAc,uDAAuD,CAAC;AACtE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAK3D,kEAAkE;AAClE,cAAc,wDAAwD,CAAC;AACvE,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8DAA8D,CAAC;AAC7E,cAAc,iEAAiE,CAAC;AAChF,cAAc,yDAAyD,CAAC;AACxE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,wEAAwE,CAAC;AACvF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0BAA0B,CAAC;AAEzC,2DAA2D;AAC3D,cAAc,2DAA2D,CAAC;AAC1E,0DAA0D;AAC1D,cAAc,8DAA8D,CAAC;AAC7E,cAAc,kDAAkD,CAAC;AACjE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,wDAAwD,CAAC;AACvE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8DAA8D,CAAC;AAC7E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,uDAAuD,CAAC;AACtE,cAAc,wDAAwD,CAAC;AACvE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wDAAwD,CAAC;AACvE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,kDAAkD,CAAC;AACjE,cAAc,uDAAuD,CAAC;AACtE,cAAc,4DAA4D,CAAC;AAC3E,2GAA2G;AAC3G,cAAc,oEAAoE,CAAC;AACnF,cAAc,uCAAuC,CAAC;AACtD,wFAAwF;AACxF,cAAc,2DAA2D,CAAC;AAC1E,cAAc,oEAAoE,CAAC;AACnF,cAAc,uEAAuE,CAAC;AACtF,0FAA0F;AAC1F,oFAAoF;AACpF,qFAAqF;AACrF,cAAc,yDAAyD,CAAC;AACxE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,2EAA2E,CAAC;AAC1F,mGAAmG;AACnG,cAAc,iEAAiE,CAAC;AAChF,cAAc,2EAA2E,CAAC;AAC1F,cAAc,+DAA+D,CAAC;AAC9E,cAAc,sEAAsE,CAAC;AACrF,mGAAmG;AACnG,cAAc,+CAA+C,CAAC;AAC9D,cAAc,qDAAqD,CAAC;AACpE,cAAc,qDAAqD,CAAC;AACpE,cAAc,kEAAkE,CAAC;AACjF,6GAA6G;AAC7G,cAAc,+EAA+E,CAAC;AAC9F,cAAc,6EAA6E,CAAC;AAC5F,cAAc,yFAAyF,CAAC;AACxG,wHAAwH;AACxH,cAAc,4DAA4D,CAAC;AAC3E,cAAc,0DAA0D,CAAC;AACzE,cAAc,sEAAsE,CAAC;AACrF,6FAA6F;AAC7F,cAAc,0DAA0D,CAAC;AACzE,cAAc,oEAAoE,CAAC;AAEnF,4GAA4G;AAC5G,iHAAiH;AACjH,4GAA4G;AAC5G,cAAc,6EAA6E,CAAC;AAC5F,cAAc,8EAA8E,CAAC;AAC7F,cAAc,oEAAoE,CAAC;AACnF,cAAc,sEAAsE,CAAC;AACrF,cAAc,2EAA2E,CAAC;AAC1F,cAAc,wEAAwE,CAAC;AACvF,cAAc,oFAAoF,CAAC;AACnG,cAAc,+EAA+E,CAAC;AAC9F,cAAc,kGAAkG,CAAC;AACjH,8FAA8F;AAC9F,cAAc,kFAAkF,CAAC;AACjG,cAAc,qCAAqC,CAAC","sourcesContent":["/*\n * Public API Surface of @memberjunction/ng-conversations\n */\n\n// Module\nexport * from './lib/conversations.module';\n\n// Models\nexport * from './lib/models/conversation-state.model';\nexport * from './lib/models/notification.model';\nexport * from './lib/models/lazy-artifact-info';\nexport * from './lib/models/navigation-request.model';\n// Host rules for an agent turn: reply mode, routes, and the host turn handler contract\nexport * from './lib/models/agent-turn.model';\nexport * from './lib/utils/agent-turn-routing';\nexport * from './lib/utils/agent-handoff-map';\n// Opt-in decision routing for an unmentioned message (EnableDecisionRouting)\n// NOTE: the routing decision's builders and types, and IsAgentAllowed, live in\n// @memberjunction/ai-core-plus — import them from there directly.\nexport * from './lib/utils/decision-routing';\n// Fork rules: the delete guard and the open view (Main or one fork)\nexport * from './lib/utils/conversation-branching';\nexport * from './lib/utils/conversation-forks';\nexport * from './lib/utils/thread-replies';\nexport * from './lib/utils/agent-failure-display';\n\n// Services - State\nexport * from './lib/services/data-cache.service';\nexport * from './lib/services/artifact-state.service';\nexport * from './lib/services/agent-state.service';\nexport * from './lib/services/conversation-liveness-dom.service';\nexport * from './lib/services/conversation-agent.service';\nexport * from './lib/services/active-tasks.service';\nexport * from './lib/services/conversation-streaming.service';\nexport * from './lib/services/dialog.service';\nexport * from './lib/services/export.service';\nexport * from './lib/services/notification.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/mention-parser.service';\n// AI-aware mention suggestion engine (BaseSingleton — use MentionAutocompleteService.Instance).\n// NOTE: the generic MentionSuggestion TYPE lives in @memberjunction/ng-composer — import it\n// from there directly (no re-exports between packages).\nexport * from './lib/services/mention-autocomplete.service';\nexport * from './lib/services/collection-permission.service';\nexport * from './lib/services/artifact-permission.service';\nexport * from './lib/services/artifact-use-tracking.service';\nexport * from './lib/services/collection-state.service';\nexport * from './lib/services/conversation-attachment.service';\nexport * from './lib/services/graphql-attachment-blob-store';\nexport * from './lib/services/ui-command-handler.service';\nexport * from './lib/services/conversation-bridge.service';\nexport * from './lib/services/realtime-session.service';\nexport * from './lib/services/browser-realtime-media-host';\n// NOTE: the realtime session types (RealtimeCaption, RealtimeConnectionState,\n// RealtimeSessionRunOptions, …), the channel plugin base class, and the delegation-result\n// parser now live in `@memberjunction/realtime-runtime`. Import them from there directly —\n// MJ does not re-export across package boundaries.\nexport * from './lib/services/realtime-pairing';\nexport * from './lib/services/user-authorization';\nexport * from './lib/services/realtime-sessions-adapter';\nexport * from './lib/services/realtime-session-review.service';\n\n// Components\nexport * from './lib/components/workspace/conversation-workspace.component';\nexport * from './lib/components/navigation/conversation-navigation.component';\nexport * from './lib/components/sidebar/conversation-sidebar.component';\nexport * from './lib/components/sidebar/routines-section.component';\nexport * from './lib/components/conversation/conversation-list.component';\nexport * from './lib/components/conversation/conversation-chat-area.component';\nexport * from './lib/components/conversation/conversation-remote-browser-controller';\nexport * from './lib/components/conversation/conversation-empty-state.component';\nexport * from './lib/components/message/message-item.component';\nexport * from './lib/components/message/agent-handoff-card.component';\nexport * from './lib/components/message/message-list.component';\nexport * from './lib/components/message/message-input.component';\n// AI-aware composer wrapper (mj-ai-composer): mj-message-input-box + the three AI trigger\n// plugins built in, proxying the input box's full inputs/outputs/methods surface.\nexport * from './lib/components/composer/ai-composer.component';\n// Composer trigger-provider plugins ('@' / '#' / '/') — ClassFactory-registered; also\n// directly instantiable for explicit provider lists.\nexport * from './lib/composer-plugins/base-conversation-mention.provider';\nexport * from './lib/composer-plugins/agent-mention.provider';\nexport * from './lib/composer-plugins/record-mention.provider';\nexport * from './lib/composer-plugins/skill-command.provider';\nexport * from './lib/composer-plugins/load-composer-plugins';\n// NOTE: MessageInputBoxComponent, MentionEditorComponent (+ PendingAttachment), and\n// MentionDropdownComponent live in @memberjunction/ng-composer — import from there directly.\nexport * from './lib/components/message/conversation-message-rating.component';\nexport * from './lib/components/collection/collection-tree.component';\nexport * from './lib/components/collection/collection-view.component';\nexport * from './lib/components/collection/collections-full-view.component';\nexport * from './lib/components/collection/collection-artifact-card.component';\nexport * from './lib/components/collection/artifact-collection-picker-modal.component';\nexport * from './lib/components/collection/collection-share-modal.component';\nexport * from './lib/components/artifact/artifact-share-modal.component';\nexport * from './lib/components/project/project-selector.component';\nexport * from './lib/components/project/project-form-modal.component';\nexport * from './lib/components/task/tasks-full-view.component';\nexport * from './lib/components/tasks/task-widget.component';\nexport * from './lib/components/agent/agent-process-panel.component';\nexport * from './lib/components/agent/active-agent-indicator.component';\nexport * from './lib/components/active-tasks/active-tasks-panel.component';\nexport * from './lib/components/share/share-modal.component';\nexport * from './lib/components/notification/notification-badge.component';\nexport * from './lib/components/notification/activity-indicator.component';\nexport * from './lib/components/toast/toast.component';\nexport * from './lib/components/global-tasks/global-tasks-panel.component';\nexport * from './lib/components/attachment/image-viewer.component';\nexport * from './lib/components/overlay/chat-overlay.component';\n\n// Components declared AND exported by ConversationsModule but previously missing\n// from public-api. They are used in the templates of exported components (e.g.\n// mj-conversation-chat-area), so a consumer app compiling in Angular's\n// local-compilation / HMR mode fails to build (NG3004: \"Unable to import\n// component … not exported from @memberjunction/ng-conversations\") unless every\n// module-exported component is importable from the package entry point.\nexport * from './lib/components/collection/artifact-create-modal.component';\nexport * from './lib/components/collection/collection-form-modal.component';\nexport * from './lib/components/conversation/conversation-agent-picker.component';\nexport * from './lib/components/conversation/conversation-mode-picker.component';\nexport * from './lib/components/conversation/pinned-messages-panel.component';\nexport * from './lib/components/conversation/forks-popover.component';\nexport * from './lib/components/dialogs/input-dialog.component';\nexport * from './lib/components/dialogs/rating-dialog.component';\nexport * from './lib/components/export/export-modal.component';\nexport * from './lib/components/library/library-full-view.component';\nexport * from './lib/components/members/members-modal.component';\nexport * from './lib/components/message/actionable-commands.component';\nexport * from './lib/components/message/workflow-plan-card.component';\nexport * from './lib/components/search/search-panel.component';\nexport * from './lib/components/shared/user-picker.component';\nexport * from './lib/components/tasks/tasks-dropdown.component';\nexport * from './lib/directives/search-shortcut.directive';\n// SearchResult / SearchResultType are the payload of SearchPanelComponent's\n// ResultSelected output, so consumers cannot type a handler without them.\nexport type { SearchResult, SearchResultType } from './lib/services/search.service';\n\n// PR 2c — Widget extension surface (slots, events, design tokens)\nexport * from './lib/services/conversations-runtime-bootstrap.service';\nexport * from './lib/directives/chat-slot.directive';\nexport * from './lib/components/slots/slot-interfaces';\nexport * from './lib/components/slots/mj-chat-empty-state-default.component';\nexport * from './lib/components/slots/mj-chat-agent-presence-default.component';\nexport * from './lib/components/slots/mj-chat-header-default.component';\nexport * from './lib/components/slots/mj-chat-message-extra-default.component';\nexport * from './lib/components/slots/mj-chat-demonstration-surface-default.component';\nexport * from './lib/components/slots/mj-chat-message-bubble-default.component';\nexport * from './lib/events/chat-events';\n\n// Realtime / voice (PR #2787 — co-agent realtime sessions)\nexport * from './lib/components/realtime/realtime-agent-picker.component';\n// Real-time \"call mode\" overlay + its componentized parts\nexport * from './lib/components/realtime/realtime-session-overlay.component';\nexport * from './lib/components/realtime/realtime-session-state';\nexport * from './lib/components/realtime/realtime-agent-banner.component';\nexport * from './lib/components/realtime/realtime-agent-orb.component';\nexport * from './lib/components/realtime/realtime-session-thread.component';\nexport * from './lib/components/realtime/realtime-delegation-card.component';\nexport * from './lib/components/realtime/realtime-activity-rail.component';\nexport * from './lib/components/realtime/realtime-surface-tabs.component';\nexport * from './lib/components/realtime/realtime-surface-tabs.model';\nexport * from './lib/components/realtime/realtime-surface-stage.model';\nexport * from './lib/components/realtime/realtime-surface-placement-prefs';\nexport * from './lib/components/realtime/realtime-surface-panel-prefs';\nexport * from './lib/components/realtime/realtime-disclosure';\nexport * from './lib/components/realtime/realtime-audio-visuals';\nexport * from './lib/components/realtime/realtime-composer.component';\nexport * from './lib/components/realtime/realtime-channel-strip.component';\n// Conversation-timeline collapse of past realtime sessions (one card per session) + its pure grouping pass\nexport * from './lib/components/realtime/realtime-session-timeline-card.component';\nexport * from './lib/utils/realtime-session-timeline';\n// Pluggable interactive-channel contract (registry-resolved client plugins) + pane host\nexport * from './lib/components/realtime/channels/client-context-channel';\nexport * from './lib/components/realtime/channels/realtime-channel-pane.component';\nexport * from './lib/components/realtime/channels/channel-onboarding-panel.component';\n// Live whiteboard channel plugin + artifact viewer (thin consumers of the generic board).\n// NOTE: the whiteboard itself (engine, tools, components, export builders) lives in\n// @memberjunction/ng-whiteboard — import board types/components from there directly.\nexport * from './lib/components/realtime/whiteboard/whiteboard-channel';\nexport * from './lib/components/realtime/whiteboard/whiteboard-channel-config';\nexport * from './lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component';\n// Remote Browser channel plugin (client-direct, server-hosted browser) + its live surface + tools.\nexport * from './lib/components/realtime/remote-browser/remote-browser-channel';\nexport * from './lib/components/realtime/remote-browser/remote-browser-surface.component';\nexport * from './lib/components/realtime/remote-browser/remote-browser-tools';\nexport * from './lib/components/realtime/remote-browser/remote-browser-audio-player';\n// Media channel plugin (Tabs-layout media display surface) + its state engine, tools, and surface.\nexport * from './lib/components/realtime/media/media-channel';\nexport * from './lib/components/realtime/media/media-channel-state';\nexport * from './lib/components/realtime/media/media-channel-tools';\nexport * from './lib/components/realtime/media/realtime-media-surface.component';\n// Identity Verification channel (generic, opt-in): prove an email address mid-call. State machine + surface.\nexport * from './lib/components/realtime/identity-verification/identity-verification-channel';\nexport * from './lib/components/realtime/identity-verification/identity-verification-model';\nexport * from './lib/components/realtime/identity-verification/identity-verification-surface.component';\n// Camera and Screen Share channels (opt-in, on demand): the agent asks, the user turns the capture on. State + surface.\nexport * from './lib/components/realtime/capture/realtime-capture-channel';\nexport * from './lib/components/realtime/capture/realtime-capture-model';\nexport * from './lib/components/realtime/capture/realtime-capture-surface.component';\n// The Avatar channel (in every call, inert without video): the agent's video on its surface.\nexport * from './lib/components/realtime/avatar/realtime-avatar-channel';\nexport * from './lib/components/realtime/avatar/realtime-avatar-surface.component';\n\n// Interactive Component channel: hosts any component artifact (mj-react-component) next to the call, with a\n// contract derived from the component's own spec. The pure parts (spec -> contract, config, data-state bounding,\n// instance engine, artifact source port) are framework-free; the channel and surface are the Angular layer.\nexport * from './lib/components/realtime/interactive-component/interactive-component-types';\nexport * from './lib/components/realtime/interactive-component/interactive-component-config';\nexport * from './lib/components/realtime/interactive-component/component-contract';\nexport * from './lib/components/realtime/interactive-component/component-data-state';\nexport * from './lib/components/realtime/interactive-component/component-instance-engine';\nexport * from './lib/components/realtime/interactive-component/component-spec-content';\nexport * from './lib/components/realtime/interactive-component/run-view-component-artifact-source';\nexport * from './lib/components/realtime/interactive-component/interactive-component-channel';\nexport * from './lib/components/realtime/interactive-component/realtime-interactive-component-surface.component';\n// Time-aligned Evidence Playback component (recorded session audio synced to the transcript).\nexport * from './lib/components/realtime/evidence-playback/realtime-evidence-playback.component';\nexport * from './lib/services/composer-draft-store';\n"]}
|