@sentry/junior 0.218.0 → 0.220.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/{agent-C-wRol8n.js → agent-CJ_-GRPT.js} +40 -29
  2. package/dist/{agent-hooks-Au93EfEr.js → agent-hooks-DsFlR7gi.js} +8 -8
  3. package/dist/{agent-runner-skcXibgb.js → agent-runner-D82gVT0O.js} +5 -5
  4. package/dist/api/schema.d.ts +30 -0
  5. package/dist/api/schema.js +2 -2
  6. package/dist/api.js +80 -19
  7. package/dist/app.js +31 -158
  8. package/dist/{auth-pause-state-CU71X-6Z.js → auth-pause-state-DL5YJXnT.js} +6 -6
  9. package/dist/{briefs-Dcdrr46e.js → briefs-CvXfErSa.js} +4 -4
  10. package/dist/{catalog-runtime-B9yDPVCR.js → catalog-runtime-DSEzvNVT.js} +1 -1
  11. package/dist/{checkpoint-CQ6eQrJD.js → checkpoint-DfpPyo-x.js} +7 -7
  12. package/dist/cli/chat.js +13 -13
  13. package/dist/cli/check.js +3 -3
  14. package/dist/cli/main.js +1 -1
  15. package/dist/cli/plugins.js +3 -3
  16. package/dist/cli/snapshot-create.js +3 -3
  17. package/dist/cli/upgrade.js +3 -3
  18. package/dist/{client-BV3_abpr.js → client-pBijNHYx.js} +2 -2
  19. package/dist/{config-DceVK986.js → config-DYi2mx6N.js} +2 -2
  20. package/dist/{conversation-BpqLg4MM.js → conversation-BSRGzJmY.js} +1 -0
  21. package/dist/{conversation-privacy-C_w2FAlM.js → conversation-privacy-TiU3SGZh.js} +1 -1
  22. package/dist/{credential-sync-DKXGTID8.js → credential-sync-hBiu11zS.js} +20 -20
  23. package/dist/{execution-stats-BIyGof8p.js → execution-stats-DAWGg9WH.js} +3 -3
  24. package/dist/{executor-CxoH7xaY.js → executor-t2OCqFgz.js} +1 -1
  25. package/dist/instrumentation.js +2 -2
  26. package/dist/{job-queue-DwA7xmCQ.js → job-queue-Deruj7qS.js} +1 -1
  27. package/dist/{logging-CtfUmyiN.js → logging-wngKXw7u.js} +1 -1
  28. package/dist/nitro.js +3 -3
  29. package/dist/{oauth-callback-server-RefMcYAD.js → oauth-callback-server-D1jNG0lr.js} +2 -2
  30. package/dist/{pending-auth-B_nSqxpd.js → pending-auth-DJa76b68.js} +2 -2
  31. package/dist/{profile-BRupCR8f.js → profile-Mv2uNsKJ.js} +4 -4
  32. package/dist/{prompt-DAoaq0CT.js → prompt-BkaHwBW0.js} +1 -1
  33. package/dist/{registry-DiIwniX1.js → registry-6_Zog2YF.js} +1 -1
  34. package/dist/{resolve-0BvJroyG.js → resolve-BI3Dfm9p.js} +2 -2
  35. package/dist/{runner-DDHI2RaU.js → runner-CzrmejYr.js} +9 -9
  36. package/dist/{sandbox-egress-signals-CoVhGAih.js → sandbox-egress-signals-BcSCyPKx.js} +1 -1
  37. package/dist/{schema-BMG8MJPJ.js → schema-YPJXVcOW.js} +1 -1
  38. package/dist/{short-title-BdpXj7eS.js → short-title-Bs3wWE1M.js} +2 -2
  39. package/dist/{skills-MlftIiVP.js → skills-DOE_QPVJ.js} +2 -2
  40. package/dist/{spawn-DLlXPelG.js → spawn-DylJoJnT.js} +2 -2
  41. package/dist/{stats-BjipUP7p.js → stats--FeHjGJ1.js} +5 -5
  42. package/dist/{task-queue-DyfnQ7ZM.js → task-queue-CSEo5Ly9.js} +3 -3
  43. package/dist/{task-runner-BOuCBVgO.js → task-runner-BDwZj8OX.js} +8 -8
  44. package/dist/{thread-state-DrGVG1E-.js → thread-state-CpZAVpdG.js} +5 -5
  45. package/dist/{turn-execution-CZKg5Fw9.js → turn-execution-AROC0tUZ.js} +3 -3
  46. package/dist/{turn-lifecycle-BV2Wp_qF.js → turn-lifecycle-CGNjfgbT.js} +1 -1
  47. package/dist/{validation-BXDSxuOX.js → validation-QFwh6qzp.js} +1 -1
  48. package/dist/{version-DNJ6W0LC.js → version-FAS9qrpM.js} +1 -1
  49. package/dist/version.js +1 -1
  50. package/dist/{web-authorization-DhXHpeMK.js → web-authorization-ZAQcIE4e.js} +1 -1
  51. package/dist/{web-input-BqFF7CQB.js → web-input-C5nhIX0j.js} +4 -4
  52. package/dist/{work-DEMP0L3f.js → work-BNw2Vmxi.js} +9 -9
  53. package/dist/{worker-DvK47zmH.js → worker-9Us77-te.js} +5 -5
  54. package/package.json +5 -5
@@ -1,28 +1,28 @@
1
- import { C as resolveGatewayCredential, S as getGatewayApiKey, _ as findProviderError, b as isProviderRetryError, c as COMPACTION_SUMMARY_PREFIX, d as isCompactionSummaryText, f as renderCurrentInstruction, g as createProviderError, h as ProviderError, i as completeText, l as MODEL_HANDOFF_SUMMARY_PREFIX, m as escapeXml, n as GEN_AI_SERVER_ADDRESS, o as resolveGatewayModel, p as unwrapCurrentInstruction, r as completeObject, s as ACTIVE_TURN_COMPACTION_SUMMARY_PREFIX, t as GEN_AI_PROVIDER_NAME, u as hasCompactedConversationContext, v as getProviderErrorAttributes, x as MISSING_GATEWAY_CREDENTIALS_ERROR } from "./client-BV3_abpr.js";
2
- import { C as withSpan, F as isRecord$2, P as normalizeIdentityEmail, S as withLogContext, _ as setSpanAttributes, a as extractGenAiUsageSummary, b as summarizeMessageText, c as getTracePropagationHeaders, d as logInfo, f as logWarn, h as serializeGenAiAttribute, i as extractGenAiUsageAttributes, l as logError, p as normalizeGenAiFinishReason, s as getLogContextAttributesForSpan, u as logException, v as setSpanStatus, y as setTags } from "./logging-CtfUmyiN.js";
1
+ import { C as resolveGatewayCredential, S as getGatewayApiKey, _ as findProviderError, b as isProviderRetryError, c as COMPACTION_SUMMARY_PREFIX, d as isCompactionSummaryText, f as renderCurrentInstruction, g as createProviderError, h as ProviderError, i as completeText, l as MODEL_HANDOFF_SUMMARY_PREFIX, m as escapeXml, n as GEN_AI_SERVER_ADDRESS, o as resolveGatewayModel, p as unwrapCurrentInstruction, r as completeObject, s as ACTIVE_TURN_COMPACTION_SUMMARY_PREFIX, t as GEN_AI_PROVIDER_NAME, u as hasCompactedConversationContext, v as getProviderErrorAttributes, x as MISSING_GATEWAY_CREDENTIALS_ERROR } from "./client-pBijNHYx.js";
2
+ import { C as withSpan, F as isRecord$2, P as normalizeIdentityEmail, S as withLogContext, _ as setSpanAttributes, a as extractGenAiUsageSummary, b as summarizeMessageText, c as getTracePropagationHeaders, d as logInfo, f as logWarn, h as serializeGenAiAttribute, i as extractGenAiUsageAttributes, l as logError, p as normalizeGenAiFinishReason, s as getLogContextAttributesForSpan, u as logException, v as setSpanStatus, y as setTags } from "./logging-wngKXw7u.js";
3
3
  import { m as startInactiveSpan, v as withActiveSpan } from "./sentry-CgWZM_kV.js";
4
- import { a as toCanonicalInputMessage, c as toGenAiPayloadMetadata, i as runWithConversationPrivacy, l as toGenAiPayloadTraceAttributes, o as toCanonicalOutputMessage, r as resolveConversationPrivacy, s as toGenAiMessagesTraceAttributes, t as canExposeConversationPayload } from "./conversation-privacy-C_w2FAlM.js";
5
- import { h as normalizeSlackEmojiName, n as botConfig } from "./config-DceVK986.js";
4
+ import { a as toCanonicalInputMessage, c as toGenAiPayloadMetadata, i as runWithConversationPrivacy, l as toGenAiPayloadTraceAttributes, o as toCanonicalOutputMessage, r as resolveConversationPrivacy, s as toGenAiMessagesTraceAttributes, t as canExposeConversationPayload } from "./conversation-privacy-TiU3SGZh.js";
5
+ import { h as normalizeSlackEmojiName, n as botConfig } from "./config-DYi2mx6N.js";
6
6
  import { a as modelIdForProfile, c as TURN_REASONING_LEVELS, i as formatModelProfiles, o as modelProfileSchema, r as formatModelProfile, s as profileConfig, t as ModelProfileNotConfiguredError } from "./model-profile-CZmVoGdX.js";
7
7
  import { _ as parseSlackMessageTs, g as parseSlackUserId, h as parseSlackTeamId, i as credentialUserSubjectId, l as isUserActor, m as parseSlackChannelReferenceId, n as credentialContextSchema, p as parseSlackChannelId, t as credentialContextForActor } from "./context-Bplcgypl.js";
8
- import { A as tryWorkspaceRepoCheckoutPath, B as downloadPrivateSlackFile, C as invalidateReadySnapshot, D as SANDBOX_RUNTIME, E as setWorkspaceSnapshotBuild, Gt as getDb, Ht as getConversationEventStore, J as withSlackRetries, K as normalizeSlackConversationId, Kt as getSqlExecutor, M as resolveChannelCapabilities, O as deleteWorkspaceSnapshotBuilders, Q as readActorIdentity, S as WorkspaceValidationError, T as setWorkspaceSnapshot, U as getSlackClient, Ut as getConversationMessageSearchStore, V as getFilePermalink, W as isConversationScopedChannel, Wt as getConversationStore, _ as deleteWorkspace, at as STOP_WATCHING_TOOL_NAME, b as listWorkspaces, bt as createPluginLogger, c as getPluginTools, dt as findMatchingWatches, en as addAgentTurnUsage, ft as listWatches, g as createWorkspace, ht as getDashboardTaskLink, in as hasAgentTurnUsage, it as RESOURCE_WATCH_TOOL_SOURCE, j as workspaceRepoCheckoutPath, k as getWorkspaceSnapshotBuilder, l as getPluginUserPromptContributions, lt as createWatch, mt as getDashboardConversationLink, nt as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, ot as cancelSubscriptions, pt as JUNIOR_THREAD_STATE_TTL_MS, r as createPluginHookRunner, s as getPluginSystemPromptContributions, st as cancelWatch, tt as getSlackToolContext, u as getPlugins, un as parseDestination, ut as deliverWatch, v as getWorkspace, w as loadSnapshotsForProfile, x as updateWorkspace, y as getWorkspaceByName, z as SlackActionError } from "./agent-hooks-Au93EfEr.js";
8
+ import { A as tryWorkspaceRepoCheckoutPath, B as downloadPrivateSlackFile, C as invalidateReadySnapshot, D as SANDBOX_RUNTIME, E as setWorkspaceSnapshotBuild, Gt as getDb, Ht as getConversationEventStore, J as withSlackRetries, K as normalizeSlackConversationId, Kt as getSqlExecutor, M as resolveChannelCapabilities, O as deleteWorkspaceSnapshotBuilders, Q as readActorIdentity, S as WorkspaceValidationError, T as setWorkspaceSnapshot, U as getSlackClient, Ut as getConversationMessageSearchStore, V as getFilePermalink, W as isConversationScopedChannel, Wt as getConversationStore, _ as deleteWorkspace, at as STOP_WATCHING_TOOL_NAME, b as listWorkspaces, bt as createPluginLogger, c as getPluginTools, dt as findMatchingWatches, en as addAgentTurnUsage, ft as listWatches, g as createWorkspace, ht as getDashboardTaskLink, in as hasAgentTurnUsage, it as RESOURCE_WATCH_TOOL_SOURCE, j as workspaceRepoCheckoutPath, k as getWorkspaceSnapshotBuilder, l as getPluginUserPromptContributions, lt as createWatch, mt as getDashboardConversationLink, nt as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, ot as cancelSubscriptions, pt as JUNIOR_THREAD_STATE_TTL_MS, r as createPluginHookRunner, s as getPluginSystemPromptContributions, st as cancelWatch, tt as getSlackToolContext, u as getPlugins, un as parseDestination, ut as deliverWatch, v as getWorkspace, w as loadSnapshotsForProfile, x as updateWorkspace, y as getWorkspaceByName, z as SlackActionError } from "./agent-hooks-DsFlR7gi.js";
9
9
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
10
- import { D as juniorIdentities, E as juniorConversations, a as juniorSchedulerRuns, d as AGENT_INVOCATION_MAILBOX_STATUSES, g as juniorConversationBriefs, k as juniorArtifacts, w as juniorAttachments, x as juniorConversationAnnotations } from "./executor-CxoH7xaY.js";
11
- import { A as briefLinkSchema, G as sameActorIdentity, H as contextProvenance, M as conversationBriefSchema, P as KNOWN_CONVERSATION_EVENT_TYPES, U as instructionActors, W as instructionProvenanceFor, j as briefOutcomeStatusSchema } from "./conversation-BpqLg4MM.js";
10
+ import { D as juniorIdentities, E as juniorConversations, a as juniorSchedulerRuns, d as AGENT_INVOCATION_MAILBOX_STATUSES, g as juniorConversationBriefs, k as juniorArtifacts, w as juniorAttachments, x as juniorConversationAnnotations } from "./executor-t2OCqFgz.js";
11
+ import { A as briefLinkSchema, G as sameActorIdentity, H as contextProvenance, M as conversationBriefSchema, P as KNOWN_CONVERSATION_EVENT_TYPES, U as instructionActors, W as instructionProvenanceFor, j as briefOutcomeStatusSchema } from "./conversation-BSRGzJmY.js";
12
12
  import { a as listReferenceFiles, c as soulPathCandidates, l as worldPathCandidates } from "./package-discovery-7a9YqLhE.js";
13
- import { a as resolveAuthTokenPlaceholder, c as fetchWithBoundedOAuthErrorBodies, d as CredentialUnavailableError, i as resolvePluginHeaderEnvRefs, l as getOAuthProviderErrorAttributes, o as resolvePluginCommandEnv, s as OAuthProviderError } from "./registry-DiIwniX1.js";
14
- import { n as pluginCatalogRuntime } from "./catalog-runtime-B9yDPVCR.js";
15
- import { a as parseSkillInvocation, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-MlftIiVP.js";
16
- import { A as TURN_CONTEXT_TAG, C as isContinuablePiBoundary, D as retainRuntimeTurnContext, E as normalizeToolNameFromResult, H as recordAuthorizationRequested, I as loadTurnRoute, K as recordToolExecutionStarted, L as openConversationProjection, N as loadConnectedMcpProviders, O as stripRuntimeTurnContext, P as loadConversationProjection, R as recordAgentsInstructionsUpdated, S as isAssistantMessage, T as isToolResultMessage, U as recordGuardianActionReviewed, W as recordMcpProviderConnected, _ as getPiMessageRole, b as hasRuntimeTurnContext, dt as estimateTextTokens, f as TurnSliceLimitExceededError, ft as getAgentContextCompactionTriggerTokens, g as extractAssistantText, h as isTurnExecutionLimitExceededError, ht as piMessageFromHistoryItem, k as trimTrailingAssistantMessages, mt as historyItemFromPiMessage, n as loadTurnCheckpoint, p as assertTurnToolCallLimit, pt as getAgentContextInputLimitTokens, q as recordTurnRoute, r as saveTurnCheckpoint, t as continuableMessages, v as getTerminalAssistantMessages, w as isToolResultError, y as getUserMessageInstructionText, z as recordAttachmentsDelivered } from "./checkpoint-CQ6eQrJD.js";
17
- import { n as generateShortTitle, r as resolveTaskTitle } from "./short-title-BdpXj7eS.js";
18
- import { A as sleep$1, D as fenceLock, E as acquireActiveLock, F as sandboxSkillDir, I as sandboxSkillFile, L as sandboxSkillPathResolution, M as SANDBOX_REPOS_ROOT, N as SANDBOX_SKILLS_ROOT, P as SANDBOX_WORKSPACE_ROOT, _ as workspaceSnapshotNotReadyUserMessage, a as isAbortError, b as buildNonInteractiveShellScript, c as isSandboxCommandStreamInterruptedError, d as isSnapshottingError, f as throwSandboxOperationError, g as isWorkspaceSnapshotNotReadyError, h as getWorkspaceSnapshotNotReadyError, i as ensureDockerDaemon, j as SANDBOX_DATA_ROOT, k as withLock, l as isSandboxMissingError, m as WorkspaceSnapshotNotReadyError, n as hash, o as isAlreadyExistsError, p as wrapSandboxSetupError, r as isStale, s as isSandboxApiTransientError, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand, y as buildCommandScript } from "./profile-BRupCR8f.js";
19
- import { $ as workspaceSnapshotFinishedEvent, B as createEventAutomation, C as SCHEDULED_AUTOMATION_SYSTEM_ACTOR, D as eventAutomationMatchesDestination, E as eventAutomationListToolResultSchema, F as effectiveTaskOutcomes, Gt as makeStructuredToolOutput, I as moveTaskOutcomes, Jt as ToolInputError, L as resolveTaskOutcomes, M as requireEventAutomationSlackContext, N as requireSupportedEventAutomationTrigger, O as eventAutomationToolResult, P as writableEventAutomation, Q as WORKSPACE_SNAPSHOT_READY_EVENT, R as taskOutcomeInputSchema, T as compactEventAutomation, Ut as injectContinuationToolName, V as deleteEventAutomation, W as getEventAutomation, Wt as juniorToolOutputSchema, X as getEventCatalog, Y as saveEventAutomation, Z as WORKSPACE_SNAPSHOT_FAILED_EVENT, at as normalizeCatalogEventIdentifier, c as parseSlackThreadId, ct as registeredEventTypeSchema, et as workspaceSnapshotWatch, f as createScheduledAutomation, g as listScheduledAutomationsForTeam, i as readLiveAttachment, it as hasPluginEventCatalogEntries, j as registeredEventAutomationTriggerSchema, k as eventAutomationToolResultSchema, lt as registeredResourceTypeSchema, nt as eventNamespaceSchema, ot as pluginSupportsEvent, pt as appendAndEnqueueInboundMessage, q as listEventAutomationsForTeam, rt as hasEventCatalogEntries, s as storeAttachments, st as registeredEventMatchSchema, t as incrementStat, tt as eventGuidance, ut as requireSupportedEventMatch, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats-BjipUP7p.js";
20
- import { _ as isTurnInputCommitLostError, c as sanitizeAssistantText, f as CooperativeTurnYieldError, l as NO_REPLY_MARKER, n as canReusePendingAuthLink, o as decideReply, p as TurnInputCommitLostError, s as getAssistantReplyText, t as abandonReplacedPendingAuth, u as isNoReplyMarker } from "./pending-auth-B_nSqxpd.js";
21
- import { C as toolInvocationDestination, S as surfaceFromRun, _ as uploadFilesToConversation, b as assertRunConsistency, h as postSlackMessage, i as formatProviderLabel, m as getSlackMessagePermalink, o as resolveBaseUrl, p as addReactionToMessage, r as deliverOAuthAuthorization, s as startOAuthFlow, v as RetryableDeliveryError, x as isAgentRunFeatureDisabled, y as actorFromRun } from "./agent-runner-skcXibgb.js";
22
- import { r as EVENT_AUTHOR_ID } from "./prompt-DAoaq0CT.js";
23
- import { a as createSandboxSession, c as postinstall, d as getSandboxResources, i as bindSandboxFileSystem, l as setSnapshotSpanAttributes, n as isMissingError, o as stopSession, r as resolve$1, s as dependencies } from "./resolve-0BvJroyG.js";
13
+ import { a as resolveAuthTokenPlaceholder, c as fetchWithBoundedOAuthErrorBodies, d as CredentialUnavailableError, i as resolvePluginHeaderEnvRefs, l as getOAuthProviderErrorAttributes, o as resolvePluginCommandEnv, s as OAuthProviderError } from "./registry-6_Zog2YF.js";
14
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-DSEzvNVT.js";
15
+ import { a as parseSkillInvocation, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-DOE_QPVJ.js";
16
+ import { A as TURN_CONTEXT_TAG, C as isContinuablePiBoundary, D as retainRuntimeTurnContext, E as normalizeToolNameFromResult, H as recordAuthorizationRequested, I as loadTurnRoute, K as recordToolExecutionStarted, L as openConversationProjection, N as loadConnectedMcpProviders, O as stripRuntimeTurnContext, P as loadConversationProjection, R as recordAgentsInstructionsUpdated, S as isAssistantMessage, T as isToolResultMessage, U as recordGuardianActionReviewed, W as recordMcpProviderConnected, _ as getPiMessageRole, b as hasRuntimeTurnContext, dt as estimateTextTokens, f as TurnSliceLimitExceededError, ft as getAgentContextCompactionTriggerTokens, g as extractAssistantText, h as isTurnExecutionLimitExceededError, ht as piMessageFromHistoryItem, k as trimTrailingAssistantMessages, mt as historyItemFromPiMessage, n as loadTurnCheckpoint, p as assertTurnToolCallLimit, pt as getAgentContextInputLimitTokens, q as recordTurnRoute, r as saveTurnCheckpoint, t as continuableMessages, v as getTerminalAssistantMessages, w as isToolResultError, y as getUserMessageInstructionText, z as recordAttachmentsDelivered } from "./checkpoint-DfpPyo-x.js";
17
+ import { n as generateShortTitle, r as resolveTaskTitle } from "./short-title-Bs3wWE1M.js";
18
+ import { A as sleep$1, D as fenceLock, E as acquireActiveLock, F as sandboxSkillDir, I as sandboxSkillFile, L as sandboxSkillPathResolution, M as SANDBOX_REPOS_ROOT, N as SANDBOX_SKILLS_ROOT, P as SANDBOX_WORKSPACE_ROOT, _ as workspaceSnapshotNotReadyUserMessage, a as isAbortError, b as buildNonInteractiveShellScript, c as isSandboxCommandStreamInterruptedError, d as isSnapshottingError, f as throwSandboxOperationError, g as isWorkspaceSnapshotNotReadyError, h as getWorkspaceSnapshotNotReadyError, i as ensureDockerDaemon, j as SANDBOX_DATA_ROOT, k as withLock, l as isSandboxMissingError, m as WorkspaceSnapshotNotReadyError, n as hash, o as isAlreadyExistsError, p as wrapSandboxSetupError, r as isStale, s as isSandboxApiTransientError, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand, y as buildCommandScript } from "./profile-Mv2uNsKJ.js";
19
+ import { $ as workspaceSnapshotFinishedEvent, B as createEventAutomation, C as SCHEDULED_AUTOMATION_SYSTEM_ACTOR, D as eventAutomationMatchesDestination, E as eventAutomationListToolResultSchema, F as effectiveTaskOutcomes, Gt as makeStructuredToolOutput, I as moveTaskOutcomes, Jt as ToolInputError, L as resolveTaskOutcomes, M as requireEventAutomationSlackContext, N as requireSupportedEventAutomationTrigger, O as eventAutomationToolResult, P as writableEventAutomation, Q as WORKSPACE_SNAPSHOT_READY_EVENT, R as taskOutcomeInputSchema, T as compactEventAutomation, Ut as injectContinuationToolName, V as deleteEventAutomation, W as getEventAutomation, Wt as juniorToolOutputSchema, X as getEventCatalog, Y as saveEventAutomation, Z as WORKSPACE_SNAPSHOT_FAILED_EVENT, at as normalizeCatalogEventIdentifier, c as parseSlackThreadId, ct as registeredEventTypeSchema, et as workspaceSnapshotWatch, f as createScheduledAutomation, g as listScheduledAutomationsForTeam, i as readLiveAttachment, it as hasPluginEventCatalogEntries, j as registeredEventAutomationTriggerSchema, k as eventAutomationToolResultSchema, lt as registeredResourceTypeSchema, nt as eventNamespaceSchema, ot as pluginSupportsEvent, pt as appendAndEnqueueInboundMessage, q as listEventAutomationsForTeam, rt as hasEventCatalogEntries, s as storeAttachments, st as registeredEventMatchSchema, t as incrementStat, tt as eventGuidance, ut as requireSupportedEventMatch, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats--FeHjGJ1.js";
20
+ import { _ as isTurnInputCommitLostError, c as sanitizeAssistantText, f as CooperativeTurnYieldError, l as NO_REPLY_MARKER, n as canReusePendingAuthLink, o as decideReply, p as TurnInputCommitLostError, s as getAssistantReplyText, t as abandonReplacedPendingAuth, u as isNoReplyMarker } from "./pending-auth-DJa76b68.js";
21
+ import { C as toolInvocationDestination, S as surfaceFromRun, _ as uploadFilesToConversation, b as assertRunConsistency, h as postSlackMessage, i as formatProviderLabel, m as getSlackMessagePermalink, o as resolveBaseUrl, p as addReactionToMessage, r as deliverOAuthAuthorization, s as startOAuthFlow, v as RetryableDeliveryError, x as isAgentRunFeatureDisabled, y as actorFromRun } from "./agent-runner-D82gVT0O.js";
22
+ import { r as EVENT_AUTHOR_ID } from "./prompt-BkaHwBW0.js";
23
+ import { a as createSandboxSession, c as postinstall, d as getSandboxResources, i as bindSandboxFileSystem, l as setSnapshotSpanAttributes, n as isMissingError, o as stopSession, r as resolve$1, s as dependencies } from "./resolve-BI3Dfm9p.js";
24
24
  import { t as getVercelConversationWorkQueue } from "./vercel-queue-DIkVcfK4.js";
25
- import { a as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-DwA7xmCQ.js";
25
+ import { a as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-Deruj7qS.js";
26
26
  import { n as privateTraceResultAttributes } from "./private-trace-result-BLvBjy_e.js";
27
27
  import { streamSimple } from "@earendil-works/pi-ai/compat";
28
28
  import { createGatewayProvider } from "@ai-sdk/gateway";
@@ -8832,12 +8832,13 @@ function createSlackScheduleCreateAutomationTool(context) {
8832
8832
  openWorldHint: true,
8833
8833
  readOnlyHint: false
8834
8834
  },
8835
- description: "Create a one-time or recurring Junior task in the active Slack conversation when the user asks Junior to do work later or repeatedly.",
8835
+ description: "Create a one-time or recurring Junior task in the active Slack conversation. Set destination to \"channel\" when the user asks for top-level delivery in the active channel.",
8836
8836
  executionMode: "sequential",
8837
8837
  inputSchema: z.object({
8838
8838
  instruction: z.string().min(1).max(4e3),
8839
8839
  title: z.string().trim().min(1).max(60).nullable().describe("Optional short display title. Omit or use null to generate one from the task instruction.").optional(),
8840
8840
  schedule: scheduleIntentSchema.describe("When the task runs. The scheduler computes the exact next run from this intent and the server clock."),
8841
+ destination: z.literal("channel").nullable().describe("Set to \"channel\" to post at the active channel top level. Omit to use this Slack conversation.").optional(),
8841
8842
  outcomes: z.array(taskOutcomeInputSchema).max(5).describe("Successful work is silent by default. Omit this field or use an empty list when the Automation should act through tools without a status message. Add send_message only when the user asks for a reminder, post, digest, summary, or other visible result.").optional(),
8842
8843
  credentialMode: z.enum(["creator", "system"]).nullable().describe("Use creator to make the task creator's connected credentials available, or system when the creator says not to use them. Omit or use null for the creator default.").optional()
8843
8844
  }).strict(),
@@ -8849,7 +8850,12 @@ function createSlackScheduleCreateAutomationTool(context) {
8849
8850
  },
8850
8851
  outputSchema: scheduleAutomationToolResultSchema,
8851
8852
  execute: async (input, options) => {
8852
- const destination = requireActiveConversation(context);
8853
+ const activeDestination = requireActiveConversation(context);
8854
+ const destination = input.destination === "channel" ? {
8855
+ platform: "slack",
8856
+ teamId: activeDestination.teamId,
8857
+ channelId: activeDestination.channelId
8858
+ } : activeDestination;
8853
8859
  const actor = requireActor(context, destination);
8854
8860
  const id = buildTaskId({
8855
8861
  actor,
@@ -9074,7 +9080,7 @@ function createSlackScheduleUpdateAutomationTool(context) {
9074
9080
  openWorldHint: true,
9075
9081
  readOnlyHint: false
9076
9082
  },
9077
- description: "Update a scheduled automation. To move the requester's task into this Slack conversation, set destination to \"here\".",
9083
+ description: "Update a scheduled automation. Set destination to \"here\" for this Slack conversation or \"channel\" for the active channel top level.",
9078
9084
  executionMode: "sequential",
9079
9085
  inputSchema: z.object({
9080
9086
  automationId: z.string().min(1).describe("Scheduled automation ID returned by slackScheduleListAutomations."),
@@ -9082,7 +9088,7 @@ function createSlackScheduleUpdateAutomationTool(context) {
9082
9088
  schedule: scheduleIntentSchema.describe("Complete replacement schedule. Omit to keep it unchanged.").nullable().optional(),
9083
9089
  outcomes: z.array(taskOutcomeInputSchema).max(5).describe("Replacement messages to send after successful work. Use an empty list to send nothing. Omit to keep unchanged.").optional(),
9084
9090
  status: z.enum(["active", "blocked"]).describe("Set active to resume a blocked task, or blocked to stop dispatch.").optional(),
9085
- destination: z.literal("here").nullable().describe("Set to \"here\" to move the creator's task into this Slack conversation. Omit to keep its destination.").optional(),
9091
+ destination: z.enum(["here", "channel"]).nullable().describe("Set to \"here\" to move the creator's task into this Slack conversation, or \"channel\" to post at the active channel top level. Omit to keep its destination.").optional(),
9086
9092
  credentialMode: z.enum(["system", "creator"]).nullable().describe("Use creator credentials or system credentials. Only the task creator may enable creator mode. Omit to keep unchanged.").optional()
9087
9093
  }).strict(),
9088
9094
  outputSchema: scheduleAutomationToolResultSchema,
@@ -9095,14 +9101,19 @@ function createSlackScheduleUpdateAutomationTool(context) {
9095
9101
  if (lookup.status === "completed") throwToolInputError("Completed scheduled automations cannot be updated. Create a new automation instead.");
9096
9102
  if (lookup.destination.platform !== "slack") throwToolInputError("Scheduled automation destination is invalid.");
9097
9103
  if (lookup.destination.teamId !== activeDestination.teamId) throwToolInputError("Scheduled automations can only be managed within the same Slack workspace.");
9098
- const moveHere = input.destination === "here";
9104
+ const moveDestination = input.destination != null;
9105
+ const requestedDestination = input.destination === "channel" ? {
9106
+ platform: "slack",
9107
+ teamId: activeDestination.teamId,
9108
+ channelId: activeDestination.channelId
9109
+ } : activeDestination;
9099
9110
  const alreadyHere = sameDestination(lookup, activeDestination);
9100
9111
  const isCreator = actor.slackUserId === lookup.createdBy.slackUserId;
9101
- if (!alreadyHere && !moveHere) throwToolInputError("Scheduled automation can only be managed from the Slack destination where it currently delivers. Set destination to \"here\" to move it into this conversation.");
9102
- if (moveHere && !isCreator) throwToolInputError("Only the scheduled automation creator can move this task.");
9112
+ if (!alreadyHere && !moveDestination) throwToolInputError("Scheduled automation can only be managed from the Slack destination where it currently delivers. Set destination to \"here\" to move it into this conversation.");
9113
+ if (moveDestination && !isCreator) throwToolInputError("Only the scheduled automation creator can move this task.");
9103
9114
  if (input.credentialMode === "creator" && !isCreator) throwToolInputError("Only the scheduled automation creator can enable creator credential use.");
9104
9115
  if (input.outcomes !== void 0 && !isCreator) throwToolInputError("Only the scheduled automation creator can change message destinations.");
9105
- const changingDestination = moveHere && !alreadyHere;
9116
+ const changingDestination = moveDestination && (!alreadyHere || lookup.destination.threadTs !== requestedDestination.threadTs);
9106
9117
  if (changingDestination) {
9107
9118
  if ((await db.select({ id: juniorSchedulerRuns.id }).from(juniorSchedulerRuns).where(and(eq(juniorSchedulerRuns.taskId, lookup.id), inArray(juniorSchedulerRuns.status, ["pending", "running"]))).limit(1)).length > 0) throwToolInputError("Scheduled automation cannot be moved while an occurrence is already running. Try again after the current run finishes.");
9108
9119
  }
@@ -9126,7 +9137,7 @@ function createSlackScheduleUpdateAutomationTool(context) {
9126
9137
  const credentialMode = input.instruction !== void 0 && input.instruction !== lookup.task.text && !isCreator ? "system" : input.credentialMode ?? lookup.credentialMode;
9127
9138
  const nextInstruction = input.instruction !== void 0 ? input.instruction : lookup.task.text;
9128
9139
  const instructionChanged = nextInstruction !== lookup.task.text;
9129
- const nextDestination = changingDestination ? activeDestination : lookup.destination;
9140
+ const nextDestination = changingDestination ? requestedDestination : lookup.destination;
9130
9141
  const next = {
9131
9142
  ...lookup,
9132
9143
  conversationAccess: changingDestination ? getConversationAccess(activeDestination, context.source) : lookup.conversationAccess,
@@ -9150,7 +9161,7 @@ function createSlackScheduleUpdateAutomationTool(context) {
9150
9161
  if (title) next.title = title;
9151
9162
  else delete next.title;
9152
9163
  }
9153
- if (!changingDestination && !instructionChanged && !compiled && status === void 0 && (input.credentialMode === void 0 || input.credentialMode === null || input.credentialMode === lookup.credentialMode) && input.outcomes === void 0 && moveHere) return scheduleAutomationToolResult(lookup, actor.slackUserId);
9164
+ if (!changingDestination && !instructionChanged && !compiled && status === void 0 && (input.credentialMode === void 0 || input.credentialMode === null || input.credentialMode === lookup.credentialMode) && input.outcomes === void 0 && moveDestination) return scheduleAutomationToolResult(lookup, actor.slackUserId);
9154
9165
  const committed = await saveScheduledAutomation(db, next);
9155
9166
  if (changingDestination) logInfo("scheduled_automation.move.completed", scheduledAutomationAttributes(committed));
9156
9167
  return scheduleAutomationToolResult(committed, actor.slackUserId);
@@ -1,16 +1,16 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { a as embedTexts, r as completeObject } from "./client-BV3_abpr.js";
3
- import { C as withSpan, P as normalizeIdentityEmail, _ as setSpanAttributes, d as logInfo, f as logWarn, u as logException, v as setSpanStatus } from "./logging-CtfUmyiN.js";
2
+ import { a as embedTexts, r as completeObject } from "./client-pBijNHYx.js";
3
+ import { C as withSpan, P as normalizeIdentityEmail, _ as setSpanAttributes, d as logInfo, f as logWarn, u as logException, v as setSpanStatus } from "./logging-wngKXw7u.js";
4
4
  import { a as getClient$1 } from "./sentry-CgWZM_kV.js";
5
- import { t as canExposeConversationPayload } from "./conversation-privacy-C_w2FAlM.js";
6
- import { a as getChatConfig, n as botConfig, s as getSlackBotToken } from "./config-DceVK986.js";
5
+ import { t as canExposeConversationPayload } from "./conversation-privacy-TiU3SGZh.js";
6
+ import { a as getChatConfig, n as botConfig, s as getSlackBotToken } from "./config-DYi2mx6N.js";
7
7
  import { n as defaultModelId } from "./model-profile-CZmVoGdX.js";
8
8
  import { _ as parseSlackMessageTs, c as isActorUserId, h as parseSlackTeamId, m as parseSlackChannelReferenceId, u as parseActorUserId } from "./context-Bplcgypl.js";
9
9
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
10
- import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, _ as CONVERSATION_METRICS, g as juniorConversationBriefs, h as juniorConversationBindings, i as juniorWorkspaces, m as juniorConversationParticipants, n as juniorSnapshots, r as juniorWorkspaceRepos, t as createJuniorSqlExecutor, v as juniorConversationMetrics, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-CxoH7xaY.js";
11
- import { B as historyReplacementSchema, C as conversationReportEventSchema, I as conversationEventDataSchema, K as usageSchema, M as conversationBriefSchema, N as parseBriefInput, V as newConversationEventSchema, z as decodeStoredConversationEvent } from "./conversation-BpqLg4MM.js";
12
- import { A as sleep$1, P as SANDBOX_WORKSPACE_ROOT, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-BRupCR8f.js";
13
- import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-DAoaq0CT.js";
10
+ import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, _ as CONVERSATION_METRICS, g as juniorConversationBriefs, h as juniorConversationBindings, i as juniorWorkspaces, m as juniorConversationParticipants, n as juniorSnapshots, r as juniorWorkspaceRepos, t as createJuniorSqlExecutor, v as juniorConversationMetrics, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-t2OCqFgz.js";
11
+ import { B as historyReplacementSchema, C as conversationReportEventSchema, I as conversationEventDataSchema, K as usageSchema, M as conversationBriefSchema, N as parseBriefInput, V as newConversationEventSchema, z as decodeStoredConversationEvent } from "./conversation-BSRGzJmY.js";
12
+ import { A as sleep$1, P as SANDBOX_WORKSPACE_ROOT, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-Mv2uNsKJ.js";
13
+ import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-BkaHwBW0.js";
14
14
  import { AsyncLocalStorage } from "node:async_hooks";
15
15
  import { z } from "zod";
16
16
  import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
@@ -1,9 +1,9 @@
1
- import { F as isRecord, d as logInfo, f as logWarn } from "./logging-CtfUmyiN.js";
2
- import { h as normalizeSlackEmojiName } from "./config-DceVK986.js";
1
+ import { F as isRecord, d as logInfo, f as logWarn } from "./logging-wngKXw7u.js";
2
+ import { h as normalizeSlackEmojiName } from "./config-DYi2mx6N.js";
3
3
  import { _ as parseSlackMessageTs, g as parseSlackUserId } from "./context-Bplcgypl.js";
4
- import { G as isDmChannel, J as withSlackRetries, K as normalizeSlackConversationId, U as getSlackClient, n as applyPluginFormatMarkdown, un as parseDestination, z as SlackActionError } from "./agent-hooks-Au93EfEr.js";
5
- import { n as pluginCatalogRuntime } from "./catalog-runtime-B9yDPVCR.js";
6
- import { w as getStateAdapter } from "./profile-BRupCR8f.js";
4
+ import { G as isDmChannel, J as withSlackRetries, K as normalizeSlackConversationId, U as getSlackClient, n as applyPluginFormatMarkdown, un as parseDestination, z as SlackActionError } from "./agent-hooks-DsFlR7gi.js";
5
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-DSEzvNVT.js";
6
+ import { w as getStateAdapter } from "./profile-Mv2uNsKJ.js";
7
7
  import { r as isExperimentalFeatureEnabled } from "./experimental-CIXf7Uye.js";
8
8
  import { randomBytes } from "node:crypto";
9
9
  import { actorSchema, sourceSchema } from "@sentry/junior-plugin-api";
@@ -409,6 +409,12 @@ export declare const conversationSummaryReportSchema: z.ZodObject<{
409
409
  slackUserId: z.ZodOptional<z.ZodString>;
410
410
  slackUserName: z.ZodOptional<z.ZodString>;
411
411
  }, z.core.$strict>>;
412
+ participants: z.ZodOptional<z.ZodArray<z.ZodObject<{
413
+ email: z.ZodOptional<z.ZodString>;
414
+ fullName: z.ZodOptional<z.ZodString>;
415
+ slackUserId: z.ZodOptional<z.ZodString>;
416
+ slackUserName: z.ZodOptional<z.ZodString>;
417
+ }, z.core.$strict>>>;
412
418
  archivedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
413
419
  channel: z.ZodOptional<z.ZodString>;
414
420
  channelName: z.ZodOptional<z.ZodString>;
@@ -973,6 +979,12 @@ export declare const conversationDetailReportSchema: z.ZodObject<{
973
979
  slackUserId: z.ZodOptional<z.ZodString>;
974
980
  slackUserName: z.ZodOptional<z.ZodString>;
975
981
  }, z.core.$strict>>;
982
+ participants: z.ZodOptional<z.ZodArray<z.ZodObject<{
983
+ email: z.ZodOptional<z.ZodString>;
984
+ fullName: z.ZodOptional<z.ZodString>;
985
+ slackUserId: z.ZodOptional<z.ZodString>;
986
+ slackUserName: z.ZodOptional<z.ZodString>;
987
+ }, z.core.$strict>>>;
976
988
  archivedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
977
989
  channel: z.ZodOptional<z.ZodString>;
978
990
  channelName: z.ZodOptional<z.ZodString>;
@@ -1641,6 +1653,12 @@ export declare const conversationFeedSchema: z.ZodObject<{
1641
1653
  slackUserId: z.ZodOptional<z.ZodString>;
1642
1654
  slackUserName: z.ZodOptional<z.ZodString>;
1643
1655
  }, z.core.$strict>>;
1656
+ participants: z.ZodOptional<z.ZodArray<z.ZodObject<{
1657
+ email: z.ZodOptional<z.ZodString>;
1658
+ fullName: z.ZodOptional<z.ZodString>;
1659
+ slackUserId: z.ZodOptional<z.ZodString>;
1660
+ slackUserName: z.ZodOptional<z.ZodString>;
1661
+ }, z.core.$strict>>>;
1644
1662
  archivedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1645
1663
  channel: z.ZodOptional<z.ZodString>;
1646
1664
  channelName: z.ZodOptional<z.ZodString>;
@@ -2137,6 +2155,12 @@ export declare const actorProfileReportSchema: z.ZodObject<{
2137
2155
  slackUserId: z.ZodOptional<z.ZodString>;
2138
2156
  slackUserName: z.ZodOptional<z.ZodString>;
2139
2157
  }, z.core.$strict>>;
2158
+ participants: z.ZodOptional<z.ZodArray<z.ZodObject<{
2159
+ email: z.ZodOptional<z.ZodString>;
2160
+ fullName: z.ZodOptional<z.ZodString>;
2161
+ slackUserId: z.ZodOptional<z.ZodString>;
2162
+ slackUserName: z.ZodOptional<z.ZodString>;
2163
+ }, z.core.$strict>>>;
2140
2164
  archivedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2141
2165
  channel: z.ZodOptional<z.ZodString>;
2142
2166
  channelName: z.ZodOptional<z.ZodString>;
@@ -2448,6 +2472,12 @@ export declare const locationDetailReportSchema: z.ZodObject<{
2448
2472
  slackUserId: z.ZodOptional<z.ZodString>;
2449
2473
  slackUserName: z.ZodOptional<z.ZodString>;
2450
2474
  }, z.core.$strict>>;
2475
+ participants: z.ZodOptional<z.ZodArray<z.ZodObject<{
2476
+ email: z.ZodOptional<z.ZodString>;
2477
+ fullName: z.ZodOptional<z.ZodString>;
2478
+ slackUserId: z.ZodOptional<z.ZodString>;
2479
+ slackUserName: z.ZodOptional<z.ZodString>;
2480
+ }, z.core.$strict>>>;
2451
2481
  archivedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2452
2482
  channel: z.ZodOptional<z.ZodString>;
2453
2483
  channelName: z.ZodOptional<z.ZodString>;
@@ -1,4 +1,4 @@
1
- import { C as conversationReportEventSchema, D as createConversationBodySchema, E as conversationSummaryReportSchema, L as conversationTurnFailureCodeSchema, O as createConversationMessageBodySchema, R as conversationTurnFailureReasonSchema, S as conversationReportEventDataSchema, T as conversationStatsReportSchema, _ as conversationParamsSchema, a as cancelConversationPendingMessagesBodySchema, b as conversationPendingMessageSchema, d as conversationDetailReportSchema, f as conversationEventHistorySchema, g as conversationFeedSchema, h as conversationFeedQuerySchema, i as archiveConversationResponseSchema, l as conversationAuxiliaryCostsSchema, m as conversationEventsQuerySchema, o as cancelConversationPendingMessagesResponseSchema, p as conversationEventPageSchema, r as archiveConversationBodySchema, s as conversationActivityPreviewSchema, t as acceptedConversationMessageSchema, u as conversationDetailQuerySchema, v as conversationPendingAuthorizationSchema, x as conversationPendingMessagesReportSchema, y as conversationPendingMessageDeliverySchema } from "../conversation-BpqLg4MM.js";
1
+ import { C as conversationReportEventSchema, D as createConversationBodySchema, E as conversationSummaryReportSchema, L as conversationTurnFailureCodeSchema, O as createConversationMessageBodySchema, R as conversationTurnFailureReasonSchema, S as conversationReportEventDataSchema, T as conversationStatsReportSchema, _ as conversationParamsSchema, a as cancelConversationPendingMessagesBodySchema, b as conversationPendingMessageSchema, d as conversationDetailReportSchema, f as conversationEventHistorySchema, g as conversationFeedSchema, h as conversationFeedQuerySchema, i as archiveConversationResponseSchema, l as conversationAuxiliaryCostsSchema, m as conversationEventsQuerySchema, o as cancelConversationPendingMessagesResponseSchema, p as conversationEventPageSchema, r as archiveConversationBodySchema, s as conversationActivityPreviewSchema, t as acceptedConversationMessageSchema, u as conversationDetailQuerySchema, v as conversationPendingAuthorizationSchema, x as conversationPendingMessagesReportSchema, y as conversationPendingMessageDeliverySchema } from "../conversation-BSRGzJmY.js";
2
2
  import { a as pluginPackageContentReportSchema, c as runtimeInfoReportSchema, i as pluginPackageContentItemReportSchema, l as skillReportSchema, n as pluginOperationalReportFeedSchema, o as pluginSchema, r as pluginOperationalReportSchema, s as pluginsSchema, t as healthReportSchema, u as skillReportsSchema } from "../reporting-schema-DosTN__Q.js";
3
- import { A as actorProfileReportSchema, B as dailyConversationActivitySchema, C as createPersonalTokenBodySchema, D as personalTokenParamsSchema, E as personalTokenMetadataSchema, F as locationDirectoryReportSchema, G as codePersonReportSchema, H as codeChangeSummaryReportSchema, I as locationParamsSchema, K as codeRepositorySummarySchema, M as personalSpendReportSchema, N as locationActivityDayReportSchema, O as revokePersonalTokenResponseSchema, P as locationDetailReportSchema, S as scheduledAutomationSummarySchema, T as personalTokenListSchema, U as codeChangeSummarySchema, V as codeActivityDaySchema, W as codeOverviewReportSchema, _ as automationRunListSchema, a as workspaceBodySchema, at as apiErrorSchema, b as automationSummarySchema, c as workspaceRepoSchema, d as automationExecutionSchema, f as automationExecutionStatusDaySchema, g as automationParamsSchema, h as automationListSchema, i as deleteWorkspaceResponseSchema, j as personParamsSchema, k as actorDirectoryReportSchema, l as workspaceSchema, m as automationListQuerySchema, n as statsReportSchema, o as workspaceListSchema, p as automationExecutionStatusSchema, r as baselineSnapshotSchema, s as workspaceParamsSchema, t as statSchema, u as automationExecutionListSchema, v as automationRunSchema, w as createdPersonalTokenSchema, x as eventAutomationSummarySchema, y as automationRunWindowsSchema } from "../schema-BMG8MJPJ.js";
3
+ import { A as actorProfileReportSchema, B as dailyConversationActivitySchema, C as createPersonalTokenBodySchema, D as personalTokenParamsSchema, E as personalTokenMetadataSchema, F as locationDirectoryReportSchema, G as codePersonReportSchema, H as codeChangeSummaryReportSchema, I as locationParamsSchema, K as codeRepositorySummarySchema, M as personalSpendReportSchema, N as locationActivityDayReportSchema, O as revokePersonalTokenResponseSchema, P as locationDetailReportSchema, S as scheduledAutomationSummarySchema, T as personalTokenListSchema, U as codeChangeSummarySchema, V as codeActivityDaySchema, W as codeOverviewReportSchema, _ as automationRunListSchema, a as workspaceBodySchema, at as apiErrorSchema, b as automationSummarySchema, c as workspaceRepoSchema, d as automationExecutionSchema, f as automationExecutionStatusDaySchema, g as automationParamsSchema, h as automationListSchema, i as deleteWorkspaceResponseSchema, j as personParamsSchema, k as actorDirectoryReportSchema, l as workspaceSchema, m as automationListQuerySchema, n as statsReportSchema, o as workspaceListSchema, p as automationExecutionStatusSchema, r as baselineSnapshotSchema, s as workspaceParamsSchema, t as statSchema, u as automationExecutionListSchema, v as automationRunSchema, w as createdPersonalTokenSchema, x as eventAutomationSummarySchema, y as automationRunWindowsSchema } from "../schema-YPJXVcOW.js";
4
4
  export { acceptedConversationMessageSchema, actorDirectoryReportSchema, actorProfileReportSchema, apiErrorSchema, archiveConversationBodySchema, archiveConversationResponseSchema, automationExecutionListSchema, automationExecutionSchema, automationExecutionStatusDaySchema, automationExecutionStatusSchema, automationListQuerySchema, automationListSchema, automationParamsSchema, automationRunListSchema, automationRunSchema, automationRunWindowsSchema, automationSummarySchema, baselineSnapshotSchema, cancelConversationPendingMessagesBodySchema, cancelConversationPendingMessagesResponseSchema, codeActivityDaySchema, codeChangeSummaryReportSchema, codeChangeSummarySchema, codeOverviewReportSchema, codePersonReportSchema, codeRepositorySummarySchema, conversationActivityPreviewSchema, conversationAuxiliaryCostsSchema, conversationDetailQuerySchema, conversationDetailReportSchema, conversationEventHistorySchema, conversationEventPageSchema, conversationEventsQuerySchema, conversationFeedQuerySchema, conversationFeedSchema, conversationParamsSchema, conversationPendingAuthorizationSchema, conversationPendingMessageDeliverySchema, conversationPendingMessageSchema, conversationPendingMessagesReportSchema, conversationReportEventDataSchema, conversationReportEventSchema, conversationStatsReportSchema, conversationSummaryReportSchema, conversationTurnFailureCodeSchema, conversationTurnFailureReasonSchema, createConversationBodySchema, createConversationMessageBodySchema, createPersonalTokenBodySchema, createdPersonalTokenSchema, dailyConversationActivitySchema, deleteWorkspaceResponseSchema, eventAutomationSummarySchema, healthReportSchema, locationActivityDayReportSchema, locationDetailReportSchema, locationDirectoryReportSchema, locationParamsSchema, personParamsSchema, personalSpendReportSchema, personalTokenListSchema, personalTokenMetadataSchema, personalTokenParamsSchema, pluginOperationalReportFeedSchema, pluginOperationalReportSchema, pluginPackageContentItemReportSchema, pluginPackageContentReportSchema, pluginSchema, pluginsSchema, revokePersonalTokenResponseSchema, runtimeInfoReportSchema, scheduledAutomationSummarySchema, skillReportSchema, skillReportsSchema, statSchema, statsReportSchema, workspaceBodySchema, workspaceListSchema, workspaceParamsSchema, workspaceRepoSchema, workspaceSchema };
package/dist/api.js CHANGED
@@ -1,19 +1,19 @@
1
- import { f as logWarn, u as logException } from "./logging-CtfUmyiN.js";
1
+ import { f as logWarn, u as logException } from "./logging-wngKXw7u.js";
2
2
  import { _ as parseSlackMessageTs, h as parseSlackTeamId, p as parseSlackChannelId } from "./context-Bplcgypl.js";
3
- import { $ as resolveViewerUser, $t as parseSessionSource, Ct as conversationArchivedForEmail, D as SANDBOX_RUNTIME, Dt as conversationNotArchivedForEmail, Et as conversationHasParticipantUser, Ft as listConversationAnnotations, Gt as getDb, It as listConversationAnnotationsById, J as withSlackRetries, Kt as getSqlExecutor, Mt as readConversationEventPage, Nt as buildSentryConversationUrl, Ot as conversationNotArchivedForUser, S as WorkspaceValidationError, St as conversationArchiveTimes, Tt as conversationHasParticipantEmail, U as getSlackClient, Wt as getConversationStore, Z as findUserByEmail, Zt as locationFromRow, _ as deleteWorkspace, an as resolveRootConversationId, b as listWorkspaces, bt as createPluginLogger, et as updateViewerDisplayName, g as createWorkspace, in as hasAgentTurnUsage, j as workspaceRepoCheckoutPath, jt as readLatestConversationBrief, kt as viewerConversationMembership, rn as agentTurnUsageSchema, u as getPlugins, v as getWorkspace, wt as conversationArchivedForUser, x as updateWorkspace, xt as readConversationAccessFromSql } from "./agent-hooks-Au93EfEr.js";
3
+ import { $ as resolveViewerUser, $t as parseSessionSource, Ct as conversationArchivedForEmail, D as SANDBOX_RUNTIME, Dt as conversationNotArchivedForEmail, Et as conversationHasParticipantUser, Ft as listConversationAnnotations, Gt as getDb, It as listConversationAnnotationsById, J as withSlackRetries, Kt as getSqlExecutor, Mt as readConversationEventPage, Nt as buildSentryConversationUrl, Ot as conversationNotArchivedForUser, S as WorkspaceValidationError, St as conversationArchiveTimes, Tt as conversationHasParticipantEmail, U as getSlackClient, Wt as getConversationStore, Z as findUserByEmail, Zt as locationFromRow, _ as deleteWorkspace, an as resolveRootConversationId, b as listWorkspaces, bt as createPluginLogger, et as updateViewerDisplayName, g as createWorkspace, in as hasAgentTurnUsage, j as workspaceRepoCheckoutPath, jt as readLatestConversationBrief, kt as viewerConversationMembership, rn as agentTurnUsageSchema, u as getPlugins, v as getWorkspace, wt as conversationArchivedForUser, x as updateWorkspace, xt as readConversationAccessFromSql } from "./agent-hooks-DsFlR7gi.js";
4
4
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
5
- import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, b as juniorApiTokens, g as juniorConversationBriefs, m as juniorConversationParticipants, o as juniorSchedulerTasks, v as juniorConversationMetrics, y as juniorConversationEvents } from "./executor-CxoH7xaY.js";
6
- import { D as createConversationBodySchema, O as createConversationMessageBodySchema, T as conversationStatsReportSchema, _ as conversationParamsSchema, a as cancelConversationPendingMessagesBodySchema, c as conversationAttachmentParamsSchema, d as conversationDetailReportSchema, g as conversationFeedSchema, h as conversationFeedQuerySchema, i as archiveConversationResponseSchema, m as conversationEventsQuerySchema, o as cancelConversationPendingMessagesResponseSchema, p as conversationEventPageSchema, r as archiveConversationBodySchema, t as acceptedConversationMessageSchema, u as conversationDetailQuerySchema, x as conversationPendingMessagesReportSchema } from "./conversation-BpqLg4MM.js";
7
- import { t as fallbackShortTitle } from "./short-title-BdpXj7eS.js";
8
- import { n as hash, t as create } from "./profile-BRupCR8f.js";
9
- import { A as eventAutomationTriggerAvailable, F as effectiveTaskOutcomes, G as listDeletedEventAutomationsCreatedBy, H as eventAutomationBelongsToUser, J as listPublicEventAutomationsForTeams, K as listEventAutomationsCreatedBy, Tt as getConversation, V as deleteEventAutomation, W as getEventAutomation, X as getEventCatalog, _ as parseScheduledAutomationRow, c as parseSlackThreadId, ht as cancelHumanFacingPendingMessages, i as readLiveAttachment, m as listPublicScheduledAutomationsForTeams, n as readStats, p as isListedScheduledAutomation, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats-BjipUP7p.js";
10
- import { t as getCachedSnapshot } from "./resolve-0BvJroyG.js";
5
+ import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, b as juniorApiTokens, g as juniorConversationBriefs, m as juniorConversationParticipants, o as juniorSchedulerTasks, v as juniorConversationMetrics, y as juniorConversationEvents } from "./executor-t2OCqFgz.js";
6
+ import { D as createConversationBodySchema, O as createConversationMessageBodySchema, T as conversationStatsReportSchema, _ as conversationParamsSchema, a as cancelConversationPendingMessagesBodySchema, c as conversationAttachmentParamsSchema, d as conversationDetailReportSchema, g as conversationFeedSchema, h as conversationFeedQuerySchema, i as archiveConversationResponseSchema, m as conversationEventsQuerySchema, o as cancelConversationPendingMessagesResponseSchema, p as conversationEventPageSchema, r as archiveConversationBodySchema, t as acceptedConversationMessageSchema, u as conversationDetailQuerySchema, x as conversationPendingMessagesReportSchema } from "./conversation-BSRGzJmY.js";
7
+ import { t as fallbackShortTitle } from "./short-title-Bs3wWE1M.js";
8
+ import { n as hash, t as create } from "./profile-Mv2uNsKJ.js";
9
+ import { A as eventAutomationTriggerAvailable, F as effectiveTaskOutcomes, G as listDeletedEventAutomationsCreatedBy, H as eventAutomationBelongsToUser, J as listPublicEventAutomationsForTeams, K as listEventAutomationsCreatedBy, Tt as getConversation, V as deleteEventAutomation, W as getEventAutomation, X as getEventCatalog, _ as parseScheduledAutomationRow, c as parseSlackThreadId, ht as cancelHumanFacingPendingMessages, i as readLiveAttachment, m as listPublicScheduledAutomationsForTeams, n as readStats, p as isListedScheduledAutomation, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats--FeHjGJ1.js";
10
+ import { t as getCachedSnapshot } from "./resolve-BI3Dfm9p.js";
11
11
  import { t as getVercelConversationWorkQueue } from "./vercel-queue-DIkVcfK4.js";
12
12
  import { c as runtimeInfoReportSchema, n as pluginOperationalReportFeedSchema, s as pluginsSchema, t as healthReportSchema, u as skillReportsSchema } from "./reporting-schema-DosTN__Q.js";
13
- import { a as webActorFromEmail, c as formatSlackConversationRedactedLabel, d as resolveSlackConversationContextFromThreadId, f as lookupSlackUser, g as readHealthReport, m as createVercelAttachmentStorage, p as legacyWebMailboxMetadataSchema, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage } from "./web-input-BqFF7CQB.js";
14
- import { a as readAutomationExecutionStatusDays, c as readAutomationExecutions, d as conversationActiveDaysColumn, f as conversationAggregateColumns, i as readAutomationExecutionHours, l as readAutomationRuns, n as readAutomationExecutionByConversationId, o as readAutomationExecutionStatusHours, p as conversationRangeColumns, r as readAutomationExecutionDays, s as readAutomationExecutionSummaries, t as emptyAutomationRunWindows } from "./execution-stats-BIyGof8p.js";
15
- import { r as getWebAuthorization } from "./web-authorization-DhXHpeMK.js";
16
- import { $ as sumUtcHoursIntoSixHours, A as actorProfileReportSchema, C as createPersonalTokenBodySchema, D as personalTokenParamsSchema, F as locationDirectoryReportSchema, G as codePersonReportSchema, I as locationParamsSchema, J as HOUR_MS$1, L as activityDays$1, M as personalSpendReportSchema, O as revokePersonalTokenResponseSchema, P as locationDetailReportSchema, Q as startOfUtcHour, R as activityHours$1, T as personalTokenListSchema, W as codeOverviewReportSchema, X as fillUtcHours, Y as fillUtcDays, Z as fillUtcSixHours, _ as automationRunListSchema, a as workspaceBodySchema, at as apiErrorSchema, et as trailingUtcDayWindow, g as automationParamsSchema, h as automationListSchema, i as deleteWorkspaceResponseSchema, it as utcHourKey, j as personParamsSchema, k as actorDirectoryReportSchema, l as workspaceSchema, m as automationListQuerySchema, n as statsReportSchema, nt as trailingUtcSixHourWindow, o as workspaceListSchema, q as DAY_MS$1, rt as utcDayKey, s as workspaceParamsSchema, tt as trailingUtcHourWindow, u as automationExecutionListSchema, w as createdPersonalTokenSchema, z as activitySixHours$1 } from "./schema-BMG8MJPJ.js";
13
+ import { a as webActorFromEmail, c as formatSlackConversationRedactedLabel, d as resolveSlackConversationContextFromThreadId, f as lookupSlackUser, g as readHealthReport, m as createVercelAttachmentStorage, p as legacyWebMailboxMetadataSchema, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage } from "./web-input-C5nhIX0j.js";
14
+ import { a as readAutomationExecutionStatusDays, c as readAutomationExecutions, d as conversationActiveDaysColumn, f as conversationAggregateColumns, i as readAutomationExecutionHours, l as readAutomationRuns, n as readAutomationExecutionByConversationId, o as readAutomationExecutionStatusHours, p as conversationRangeColumns, r as readAutomationExecutionDays, s as readAutomationExecutionSummaries, t as emptyAutomationRunWindows } from "./execution-stats-DAWGg9WH.js";
15
+ import { r as getWebAuthorization } from "./web-authorization-ZAQcIE4e.js";
16
+ import { $ as sumUtcHoursIntoSixHours, A as actorProfileReportSchema, C as createPersonalTokenBodySchema, D as personalTokenParamsSchema, F as locationDirectoryReportSchema, G as codePersonReportSchema, I as locationParamsSchema, J as HOUR_MS$1, L as activityDays$1, M as personalSpendReportSchema, O as revokePersonalTokenResponseSchema, P as locationDetailReportSchema, Q as startOfUtcHour, R as activityHours$1, T as personalTokenListSchema, W as codeOverviewReportSchema, X as fillUtcHours, Y as fillUtcDays, Z as fillUtcSixHours, _ as automationRunListSchema, a as workspaceBodySchema, at as apiErrorSchema, et as trailingUtcDayWindow, g as automationParamsSchema, h as automationListSchema, i as deleteWorkspaceResponseSchema, it as utcHourKey, j as personParamsSchema, k as actorDirectoryReportSchema, l as workspaceSchema, m as automationListQuerySchema, n as statsReportSchema, nt as trailingUtcSixHourWindow, o as workspaceListSchema, q as DAY_MS$1, rt as utcDayKey, s as workspaceParamsSchema, tt as trailingUtcHourWindow, u as automationExecutionListSchema, w as createdPersonalTokenSchema, z as activitySixHours$1 } from "./schema-YPJXVcOW.js";
17
17
  import { Hono } from "hono";
18
18
  import path from "node:path";
19
19
  import { z } from "zod";
@@ -902,6 +902,61 @@ async function readConversationActivityPreviews(db, conversationIds) {
902
902
  }]));
903
903
  }
904
904
  //#endregion
905
+ //#region src/api/conversations/participants.ts
906
+ const identityColumns = {
907
+ displayName: juniorIdentities.displayName,
908
+ email: juniorIdentities.email,
909
+ handle: juniorIdentities.handle,
910
+ identityId: juniorIdentities.id,
911
+ provider: juniorIdentities.provider,
912
+ providerSubjectId: juniorIdentities.providerSubjectId,
913
+ userDisplayName: juniorUsers.displayName,
914
+ userEmail: juniorUsers.primaryEmail,
915
+ userId: juniorIdentities.userId
916
+ };
917
+ function participantIdentity(row) {
918
+ const fullName = row.userDisplayName?.trim() || row.displayName?.trim();
919
+ const email = row.email?.trim() || row.userEmail?.trim();
920
+ const slack = row.provider === "slack";
921
+ const participant = {
922
+ ...email ? { email } : void 0,
923
+ ...fullName ? { fullName } : void 0,
924
+ ...slack && row.providerSubjectId ? { slackUserId: row.providerSubjectId } : void 0,
925
+ ...slack && row.handle ? { slackUserName: row.handle } : void 0
926
+ };
927
+ return Object.keys(participant).length > 0 ? participant : void 0;
928
+ }
929
+ /** Read actor identities in first-appearance order for each Conversation. */
930
+ async function readConversationParticipants(db, conversationIds) {
931
+ if (conversationIds.length === 0) return /* @__PURE__ */ new Map();
932
+ const [rootRows, eventRows] = await Promise.all([db.select({
933
+ conversationId: juniorConversations.conversationId,
934
+ ...identityColumns
935
+ }).from(juniorConversations).innerJoin(juniorIdentities, eq(juniorIdentities.id, juniorConversations.actorIdentityId)).leftJoin(juniorUsers, eq(juniorUsers.id, juniorIdentities.userId)).where(inArray(juniorConversations.conversationId, [...conversationIds])), db.selectDistinctOn([juniorConversationEvents.conversationId, juniorConversationEvents.actorIdentityId], {
936
+ conversationId: juniorConversationEvents.conversationId,
937
+ seq: juniorConversationEvents.seq,
938
+ ...identityColumns
939
+ }).from(juniorConversationEvents).innerJoin(juniorIdentities, eq(juniorIdentities.id, juniorConversationEvents.actorIdentityId)).leftJoin(juniorUsers, eq(juniorUsers.id, juniorIdentities.userId)).where(inArray(juniorConversationEvents.conversationId, [...conversationIds])).orderBy(asc(juniorConversationEvents.conversationId), asc(juniorConversationEvents.actorIdentityId), asc(juniorConversationEvents.seq))]);
940
+ const ordered = /* @__PURE__ */ new Map();
941
+ const add = (conversationId, row) => {
942
+ const participant = participantIdentity(row);
943
+ if (!participant) return;
944
+ const group = ordered.get(conversationId) ?? {
945
+ identities: [],
946
+ keys: /* @__PURE__ */ new Set()
947
+ };
948
+ const key = row.userId ? `user:${row.userId}` : `identity:${row.identityId}`;
949
+ if (!group.keys.has(key)) {
950
+ group.keys.add(key);
951
+ group.identities.push(participant);
952
+ }
953
+ ordered.set(conversationId, group);
954
+ };
955
+ for (const row of rootRows) add(row.conversationId, row);
956
+ for (const row of eventRows.sort((left, right) => left.seq - right.seq)) add(row.conversationId, row);
957
+ return new Map([...ordered].map(([conversationId, group]) => [conversationId, group.identities]));
958
+ }
959
+ //#endregion
905
960
  //#region src/api/conversations/list.ts
906
961
  const CONVERSATION_FEED_LIMIT = 50;
907
962
  function conversationFeedMembershipFilter(status, filter) {
@@ -1019,12 +1074,13 @@ async function readConversationFeedFromSql(options = {}) {
1019
1074
  const rows = await conversationRows(db, options.limit ?? CONVERSATION_FEED_LIMIT, query ? "all" : options.status ?? "active", filter, query, filter?.kind === "viewer");
1020
1075
  const conversations = rows.map((row) => conversationFromRow(row));
1021
1076
  const conversationIds = conversations.map((conversation) => conversation.conversationId);
1022
- const [accessByConversation, archiveTimesByConversation, annotationsByConversation, auxiliaryCostsByRoot, metricsByRoot, teamDomainByTeamId, conversationWork, lastUserMessageAtByConversation, activityPreviewByConversation] = await Promise.all([
1077
+ const [accessByConversation, archiveTimesByConversation, annotationsByConversation, auxiliaryCostsByRoot, metricsByRoot, participantsByConversation, teamDomainByTeamId, conversationWork, lastUserMessageAtByConversation, activityPreviewByConversation] = await Promise.all([
1023
1078
  readConversationAccessFromSql(db, conversationIds, options.viewer),
1024
1079
  conversationArchiveTimes(db, conversationIds, filter?.kind === "viewer" ? { userId: filter.userId } : filter?.kind === "actorEmail" ? { email: filter.email } : void 0),
1025
1080
  listConversationAnnotationsById(db, conversationIds),
1026
1081
  readConversationAuxiliaryCostsFromSql(db, conversationIds, { includeDescendants: true }),
1027
1082
  readRootConversationMetricsFromSql(db, conversationIds),
1083
+ readConversationParticipants(db, conversationIds),
1028
1084
  resolveSlackTeamDomains(conversations.flatMap((conversation) => conversation.location?.provider === "slack" ? [conversation.location.teamId] : [])),
1029
1085
  listConversationWork(conversationIds),
1030
1086
  readLastUserMessageAtByConversation(db, conversationIds),
@@ -1056,9 +1112,11 @@ async function readConversationFeedFromSql(options = {}) {
1056
1112
  };
1057
1113
  const annotations = access?.canViewPrivateContent ? annotationsByConversation.get(conversation.conversationId) ?? [] : [];
1058
1114
  const activityPreview = access?.canViewPrivateContent ? activityPreviewByConversation.get(conversation.conversationId) : void 0;
1115
+ const participants = access?.canViewPrivateContent ? participantsByConversation.get(conversation.conversationId) : void 0;
1059
1116
  return {
1060
1117
  ...summary,
1061
1118
  ...work,
1119
+ ...participants && participants.length > 0 ? { participants } : void 0,
1062
1120
  ...activityPreview ? { activityPreview } : void 0,
1063
1121
  ...annotations.length > 0 ? { annotations } : void 0,
1064
1122
  ...sidebarAnnotationsByConversation[conversation.conversationId] ? { sidebarAnnotations: sidebarAnnotationsByConversation[conversation.conversationId] } : void 0,
@@ -1600,6 +1658,7 @@ function projectConversationDetail(args) {
1600
1658
  annotations: canExposePayload ? args.annotations : [],
1601
1659
  ...canExposePayload && args.brief ? { brief: args.brief } : void 0,
1602
1660
  events: args.events,
1661
+ ...canExposePayload && args.participants.length > 0 ? { participants: args.participants } : void 0,
1603
1662
  ...args.previousSeq !== void 0 ? { previousCursor: encodeConversationCursor({
1604
1663
  conversationId,
1605
1664
  seq: args.previousSeq
@@ -1620,7 +1679,7 @@ async function readConversationDetailFromSql(conversationId, options) {
1620
1679
  const archivedAtMs = options.viewer ? await readConversationArchivedAt(options.viewer, conversationId) : void 0;
1621
1680
  const executor = getSqlExecutor();
1622
1681
  const includeDescendantMetrics = record.rootConversationId === conversationId;
1623
- const [accessByConversation, annotations, auxiliaryCostsByConversation, briefVersion, modelUsage, metricsByRoot, sourceTask, teamDomainByTeamId] = await Promise.all([
1682
+ const [accessByConversation, annotations, auxiliaryCostsByConversation, briefVersion, modelUsage, metricsByRoot, participantsByConversation, sourceTask, teamDomainByTeamId] = await Promise.all([
1624
1683
  readConversationAccessFromSql(getDb(), [conversationId], options.viewer),
1625
1684
  listConversationAnnotations(getDb(), conversationId),
1626
1685
  readConversationAuxiliaryCostsFromSql(getDb(), [conversationId], { includeDescendants: includeDescendantMetrics }),
@@ -1630,6 +1689,7 @@ async function readConversationDetailFromSql(conversationId, options) {
1630
1689
  includeDescendants: includeDescendantMetrics
1631
1690
  }) : Promise.resolve([]),
1632
1691
  readRootConversationMetricsFromSql(getDb(), includeDescendantMetrics ? [conversationId] : []),
1692
+ readConversationParticipants(getDb(), [conversationId]),
1633
1693
  readConversationSourceTask({
1634
1694
  conversationId,
1635
1695
  ...options.viewer ? { viewer: options.viewer } : void 0
@@ -1657,6 +1717,7 @@ async function readConversationDetailFromSql(conversationId, options) {
1657
1717
  durationMs: metrics?.durationMs ?? record.durationMs,
1658
1718
  events: page.events,
1659
1719
  modelUsage,
1720
+ participants: participantsByConversation.get(conversationId) ?? [],
1660
1721
  ...sourceTask ? { sourceTask } : void 0,
1661
1722
  teamDomainByTeamId,
1662
1723
  ...page.previousSeq === void 0 ? void 0 : { previousSeq: page.previousSeq },
@@ -3453,7 +3514,7 @@ async function readPeoplePluginReports(args) {
3453
3514
  reports: [],
3454
3515
  source: "plugins"
3455
3516
  });
3456
- const { getPluginProfileReports } = await import("./agent-hooks-Au93EfEr.js").then((n) => n.t);
3517
+ const { getPluginProfileReports } = await import("./agent-hooks-DsFlR7gi.js").then((n) => n.t);
3457
3518
  return pluginOperationalReportFeedSchema.parse({
3458
3519
  generatedAt: new Date(nowMs).toISOString(),
3459
3520
  reports: await getPluginProfileReports({
@@ -4062,7 +4123,7 @@ function readDescriptionText(home) {
4062
4123
  }
4063
4124
  /** Read discovered skill names for authenticated runtime diagnostics. */
4064
4125
  async function readSkillReports() {
4065
- const { discoverSkills } = await import("./skills-MlftIiVP.js").then((n) => n.o);
4126
+ const { discoverSkills } = await import("./skills-DOE_QPVJ.js").then((n) => n.o);
4066
4127
  const skills = await discoverSkills();
4067
4128
  return skillReportsSchema.parse(skills.map((skill) => ({
4068
4129
  name: skill.name,
@@ -4071,7 +4132,7 @@ async function readSkillReports() {
4071
4132
  }
4072
4133
  /** Read safe configured plugin metadata for authenticated runtime diagnostics. */
4073
4134
  async function readPlugins() {
4074
- const { pluginCatalogRuntime } = await import("./catalog-runtime-B9yDPVCR.js").then((n) => n.t);
4135
+ const { pluginCatalogRuntime } = await import("./catalog-runtime-DSEzvNVT.js").then((n) => n.t);
4075
4136
  return pluginsSchema.parse(pluginCatalogRuntime.getProviders().map((plugin) => ({
4076
4137
  configKeys: plugin.manifest.configKeys ?? [],
4077
4138
  description: plugin.manifest.description,
@@ -4083,7 +4144,7 @@ async function readPlugins() {
4083
4144
  async function readRuntimeInfoReport() {
4084
4145
  const [{ homeDir }, { pluginCatalogRuntime }, plugins, skills] = await Promise.all([
4085
4146
  import("./package-discovery-7a9YqLhE.js").then((n) => n.r),
4086
- import("./catalog-runtime-B9yDPVCR.js").then((n) => n.t),
4147
+ import("./catalog-runtime-DSEzvNVT.js").then((n) => n.t),
4087
4148
  readPlugins(),
4088
4149
  readSkillReports()
4089
4150
  ]);
@@ -4100,7 +4161,7 @@ async function readRuntimeInfoReport() {
4100
4161
  /** Read sanitized operational summaries contributed by plugins. */
4101
4162
  async function readPluginOperationalReportFeed() {
4102
4163
  const nowMs = Date.now();
4103
- const { getPluginOperationalReports } = await import("./agent-hooks-Au93EfEr.js").then((n) => n.t);
4164
+ const { getPluginOperationalReports } = await import("./agent-hooks-DsFlR7gi.js").then((n) => n.t);
4104
4165
  return pluginOperationalReportFeedSchema.parse({
4105
4166
  source: "plugins",
4106
4167
  generatedAt: new Date(nowMs).toISOString(),