@sentry/junior 0.227.0 → 0.228.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 (56) hide show
  1. package/dist/{agent-hooks-bEwEJhlg.js → agent-hooks-DUQ3ASdp.js} +18 -10
  2. package/dist/{agent-runner-BGDSjciH.js → agent-runner-CIesujf5.js} +27 -22
  3. package/dist/api/schema.d.ts +139 -27
  4. package/dist/api/schema.js +2 -2
  5. package/dist/api.js +71 -54
  6. package/dist/{app-CjRIKZb5.d.ts → app-BRZB3MuD.d.ts} +1 -1
  7. package/dist/app.d.ts +1 -1
  8. package/dist/app.js +94 -28
  9. package/dist/{briefs-BkM_ZW4B.js → briefs-BTrVMqUg.js} +4 -4
  10. package/dist/{catalog-runtime-Cw9V2jpn.js → catalog-runtime-NOBDOyJi.js} +1 -1
  11. package/dist/{checkpoint-oZYD3-Ar.js → checkpoint-CzN3gXoB.js} +6 -6
  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-Pcxo3lGn.js → client-C6VUBzL_.js} +2 -2
  19. package/dist/{config-CYvEow1F.js → config-BLPaWN1Q.js} +2 -2
  20. package/dist/{conversation-BnhOMfEB.js → conversation-DOI6Y60M.js} +3 -2
  21. package/dist/{conversation-privacy-hQmyZbOC.js → conversation-privacy-DJ88ECSq.js} +1 -1
  22. package/dist/{credential-sync-CUGbiiCM.js → credential-sync-OKs419AB.js} +13 -13
  23. package/dist/{executor-BXMlFrV6.js → executor-DZVZBfmX.js} +1 -1
  24. package/dist/{history-nukv1YN8.d.ts → history-H-SI5Dej.d.ts} +1 -0
  25. package/dist/{images-8siTAUNW.js → images-D3x6EemU.js} +3 -3
  26. package/dist/instrumentation.js +2 -2
  27. package/dist/{job-queue-AI0_QAgc.js → job-queue-BuSPM0cX.js} +1 -1
  28. package/dist/{logging-BPBx6WF-.js → logging-Blgn76r3.js} +1 -1
  29. package/dist/nitro.d.ts +1 -1
  30. package/dist/nitro.js +3 -3
  31. package/dist/{oauth-authorization-Cq1GaLIP.js → oauth-authorization-t-NPqTNB.js} +1 -1
  32. package/dist/{oauth-callback-server-CnF03VYh.js → oauth-callback-server-BP7SgTcu.js} +2 -2
  33. package/dist/{pending-auth-CHUjr_6d.js → pending-auth-CXLwmDaG.js} +1 -1
  34. package/dist/{profile-upzC-wN1.js → profile-a5xmeUHf.js} +4 -4
  35. package/dist/{prompt-CZIQcPHy.js → prompt-9C-wUwwx.js} +1 -1
  36. package/dist/{registry-DM5aMhjm.js → registry-BUbczT2k.js} +1 -1
  37. package/dist/{resolve-sF6Lg7Ay.js → resolve-3PhWSiEF.js} +2 -2
  38. package/dist/{runner-Bu2wYpK8.js → runner-CsnuKcsq.js} +9 -9
  39. package/dist/{sandbox-egress-signals-Dgerhizb.js → sandbox-egress-signals-D34sI4J6.js} +1 -1
  40. package/dist/{schema-BSiwcvjm.js → schema-CXmCvVLn.js} +1 -1
  41. package/dist/{skills-CAI5s___.js → skills-CLgyYrgF.js} +2 -2
  42. package/dist/{spawn-DRK9TBgY.js → spawn-CS56i7Nm.js} +2 -2
  43. package/dist/{task-queue-iuDAqfZg.js → task-queue-C2sTDXqQ.js} +3 -3
  44. package/dist/{task-runner-S3QtH38c.js → task-runner-uSodiP4v.js} +9 -9
  45. package/dist/{thread-state-C_arVuaN.js → thread-state-BurqeqMv.js} +5 -5
  46. package/dist/{turn-failure-response-DarwGYgC.js → turn-failure-response-Bshcqa0a.js} +8 -8
  47. package/dist/{turn-lifecycle-CdiIejXH.js → turn-lifecycle-foKlVl_T.js} +1 -1
  48. package/dist/{turn-session-routing-DyLGd_wU.js → turn-session-routing-DDUMJ2GY.js} +1 -1
  49. package/dist/{validation-BMig74Zp.js → validation-DZc56dXw.js} +1 -1
  50. package/dist/{version-lhQSfLjx.js → version-y4cRp5Y2.js} +1 -1
  51. package/dist/version.js +1 -1
  52. package/dist/{web-authorization-r2lKYKJ2.js → web-authorization-BfVYx0t1.js} +6 -6
  53. package/dist/{web-input-BU-Fu7iq.js → web-input-B6FZlrgg.js} +50 -28
  54. package/dist/{work-B9koS8sW.js → work-Dy8sW9MZ.js} +7 -7
  55. package/dist/{worker-C_iJSRgG.js → worker-BH0RP7Hj.js} +5 -5
  56. package/package.json +4 -4
@@ -1,21 +1,21 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { a as embedTexts, r as completeObject } from "./client-Pcxo3lGn.js";
3
- import { F as normalizeIdentityEmail, I as isRecord$2, d as logException, f as logInfo, p as logWarn, v as setSpanAttributes, w as withSpan, y as setSpanStatus } from "./logging-BPBx6WF-.js";
2
+ import { a as embedTexts, r as completeObject } from "./client-C6VUBzL_.js";
3
+ import { F as normalizeIdentityEmail, I as isRecord$2, d as logException, f as logInfo, p as logWarn, v as setSpanAttributes, w as withSpan, y as setSpanStatus } from "./logging-Blgn76r3.js";
4
4
  import { a as getClient$1 } from "./sentry-CgWZM_kV.js";
5
- import { t as canExposeConversationPayload } from "./conversation-privacy-hQmyZbOC.js";
6
- import { a as getChatConfig, n as botConfig, s as getSlackBotToken } from "./config-CYvEow1F.js";
5
+ import { t as canExposeConversationPayload } from "./conversation-privacy-DJ88ECSq.js";
6
+ import { a as getChatConfig, n as botConfig, s as getSlackBotToken } from "./config-BLPaWN1Q.js";
7
7
  import { r as defaultModelId } from "./model-profile-BwU8mqwD.js";
8
8
  import { b as parseSlackMessageTs, c as isActorUserId, h as parseSlackTeamId, m as parseSlackChannelReferenceId, u as parseActorUserId } from "./context-0Et9iVSB.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, w as juniorAttachments, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-BXMlFrV6.js";
11
- import { C as conversationReportEventSchema, H as conversationBriefSchema, I as readMessageAttachments, K as conversationEventDataSchema, N as readMessageCards, Q as encodeHistoryPayload, U as parseBriefInput, X as historyReplacementSchema, Y as decodeStoredConversationEvent, Z as newConversationEventSchema, rt as usageSchema } from "./conversation-BnhOMfEB.js";
12
- import { C as getDefaultRedisStateAdapterFor, N as SANDBOX_WORKSPACE_ROOT, k as sleep$1, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-upzC-wN1.js";
13
- import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-CZIQcPHy.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, w as juniorAttachments, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-DZVZBfmX.js";
11
+ import { C as conversationReportEventSchema, H as conversationBriefSchema, I as readMessageAttachments, K as conversationEventDataSchema, N as readMessageCards, Q as encodeHistoryPayload, U as parseBriefInput, X as historyReplacementSchema, Y as decodeStoredConversationEvent, Z as newConversationEventSchema, rt as usageSchema } from "./conversation-DOI6Y60M.js";
12
+ import { C as getDefaultRedisStateAdapterFor, N as SANDBOX_WORKSPACE_ROOT, k as sleep$1, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-a5xmeUHf.js";
13
+ import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-9C-wUwwx.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";
17
17
  import { and, arrayContains, asc, desc, eq, exists, getTableColumns, gt, gte, inArray, isNotNull, isNull, lt, lte, max, ne, notExists, or, sql } from "drizzle-orm";
18
- import { codeChangeInputSchema, conversationAnnotationInputSchema, conversationEventPresentationSchema, defineConversationEvent, destinationSchema, eventInputSchema, eventMatchSchema, eventMatches, eventTypeSchema, identitySchema, locationSchema, missingToolAnnotationKeys, normalizeEventIdentifier, objectAnnotationSchema, pluginEventsSchema, promptContextSchema, promptMessageSchema, sourceSchema, stableEventMatchKey, userSchema } from "@sentry/junior-plugin-api";
18
+ import { codeChangeInputSchema, conversationAnnotationInputSchema, conversationEventPresentationSchema, defineConversationEvent, destinationSchema, eventInputSchema, eventMatchSchema, eventMatches, eventTypeSchema, identitySchema, locationSchema, missingToolAnnotationKeys, normalizeEventIdentifier, objectAnnotationSchema, objectIconPath, objectTypeSchema, pluginEventsSchema, promptContextSchema, promptMessageSchema, sourceSchema, stableEventMatchKey, userSchema } from "@sentry/junior-plugin-api";
19
19
  import { alias } from "drizzle-orm/pg-core";
20
20
  import { WebClient } from "@slack/web-api";
21
21
  import { Sandbox } from "@vercel/sandbox";
@@ -2111,6 +2111,7 @@ function reportEventData(args) {
2111
2111
  role: data.role,
2112
2112
  ...data.meta?.source === "web" || data.meta?.source === "slack" ? { source: data.meta.source } : void 0,
2113
2113
  ...actorIdentity ? { actorIdentity } : void 0,
2114
+ eventObjectType: objectTypeSchema.safeParse(data.meta?.eventObjectType).data,
2114
2115
  ...typeof data.meta?.eventType === "string" ? { eventType: data.meta.eventType } : void 0,
2115
2116
  ...typeof data.meta?.explicitMention === "boolean" ? { explicitMention: data.meta.explicitMention } : void 0,
2116
2117
  ...args.canExposePayload && typeof data.meta?.trustedSummary === "string" ? { trustedSummary: data.meta.trustedSummary } : void 0,
@@ -3135,6 +3136,13 @@ function getDashboardConversationLink(conversationId) {
3135
3136
  function getDashboardTaskLink(taskId) {
3136
3137
  return resolveDashboardPath(`/automations/${encodeURIComponent(taskId)}`);
3137
3138
  }
3139
+ /** Public icon asset URL. Headless and local installs keep text-only identity. */
3140
+ function getDashboardObjectIconLink(icon) {
3141
+ if (!dashboardConversationLinkOptions) return void 0;
3142
+ const url = new URL(objectIconPath(icon), resolveDashboardBaseURL(dashboardConversationLinkOptions));
3143
+ if (url.protocol !== "https:" || url.hostname === "localhost") return void 0;
3144
+ return url.href;
3145
+ }
3138
3146
  //#endregion
3139
3147
  //#region src/chat/state/ttl.ts
3140
3148
  /** Retain expiring conversation/runtime state long enough for resume and dashboard history. */
@@ -5651,4 +5659,4 @@ function createPluginHookRunner(input = {}) {
5651
5659
  };
5652
5660
  }
5653
5661
  //#endregion
5654
- export { resolveViewerUser as $, getDb as $t, tryWorkspaceRepoCheckoutPath as A, conversationNotArchivedForUser as At, downloadPrivateSlackFile as B, resolveRootVisibility as Bt, invalidateReadySnapshot as C, readConversationAccessFromSql as Ct, SANDBOX_RUNTIME as D, conversationHasParticipantEmail as Dt, setWorkspaceSnapshotBuild as E, conversationArchivedForUser as Et, bindSlackDirectCredentialSubject as F, buildSentryConversationUrl as Ft, isDmChannel as G, JUNIOR_NATIVE_EVENT_NAMESPACE as Gt, getHeaderString as H, createPluginAnnotations as Ht, verifyEventAutomationCredentialSubject as I, getSlackFileId as It, withSlackRetries as J, authenticationUnlinkedEvent as Jt, normalizeSlackConversationId as K, agentsInstructionsUpdatedEvent as Kt, verifyScheduledAutomationCredentialSubject as L, matchSlackAttachments as Lt, resolveChannelCapabilities as M, createPluginConversationEvents as Mt, bindEventAutomationCredentialSubject as N, readLatestConversationBrief as Nt, deleteWorkspaceSnapshotBuilders as O, conversationHasParticipantUser as Ot, bindScheduledAutomationCredentialSubject as P, readConversationEventPage as Pt, readActorIdentity as Q, getConversationStore as Qt, verifySlackDirectCredentialSubject as R, readAttachmentVisionSummary as Rt, WorkspaceValidationError as S, createPluginLogger as St, setWorkspaceSnapshot as T, conversationArchivedForEmail as Tt, getSlackClient as U, listConversationAnnotations as Ut, getFilePermalink as V, saveObjectAnnotations as Vt, isConversationScopedChannel as W, listConversationAnnotationsById as Wt, runWithWorkspaceTeamId as X, getConversationEventStore as Xt, getWorkspaceTeamId as Y, db_exports as Yt, findUserByEmail as Z, getConversationMessageSearchStore as Zt, deleteWorkspace as _, parseDestination as _n, getDashboardTaskLink as _t, getPluginRoutes as a, bindProviderConversation as an, STOP_WATCHING_TOOL_NAME as at, listWorkspaces as b, createPluginEmbedder as bt, getPluginTools as c, agentTurnCostUsd as cn, collectEventMatchKeys as ct, setPlugins as d, hasAgentTurnUsage as dn, deliverWatch as dt, getSqlExecutor as en, updateViewerDisplayName as et, validatePlugins as f, resolveRootConversationId as fn, findMatchingWatches as ft, createWorkspace as g, createSlackDestination as gn, getDashboardConversationLink as gt, setBriefsConfig as h, upsertLinkedIdentity as hn, JUNIOR_THREAD_STATE_TTL_MS as ht, getPluginApiRoutes as i, locationFromRow as in, RESOURCE_WATCH_TOOL_SOURCE as it, workspaceRepoCheckoutPath as j, viewerConversationMembership as jt, getWorkspaceSnapshotBuilder as k, conversationNotArchivedForEmail as kt, getPluginUserPromptContributions as l, agentTurnTotalTokens as ln, createTimerWatch as lt, registration_exports as m, upsertIdentity as mn, takeDueTimerWatches as mt, applyPluginFormatMarkdown as n, withConversationEventLock as nn, RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS as nt, getPluginSlackConversationLink as o, parseSessionSource as on, cancelSubscriptions as ot, coreTaskRegistrations as p, deleteProviderIdentityForSlackUser as pn, listWatches as pt, runWithSlackInstallationToken as q, authenticationLinkedEvent as qt, createPluginHookRunner as r, withConversationMutationLock as rn, RESOURCE_SUBSCRIPTION_MAX_TTL_MS as rt, getPluginSystemPromptContributions as s, addAgentTurnUsage as sn, cancelWatch as st, agent_hooks_exports as t, createSqlConversationEventStore as tn, getSlackToolContext as tt, getPlugins as u, agentTurnUsageSchema as un, createWatch as ut, getWorkspace as v, requireSlackDestination as vn, setDashboardConversationLinkOptions as vt, loadSnapshotsForProfile as w, conversationArchiveTimes as wt, updateWorkspace as x, createPluginModel as xt, getWorkspaceByName as y, sameDestination as yn, createPluginState as yt, SlackActionError as z, recordSlackAttachment as zt };
5662
+ export { resolveViewerUser as $, getConversationStore as $t, tryWorkspaceRepoCheckoutPath as A, conversationNotArchivedForEmail as At, downloadPrivateSlackFile as B, recordSlackAttachment as Bt, invalidateReadySnapshot as C, createPluginLogger as Ct, SANDBOX_RUNTIME as D, conversationArchivedForUser as Dt, setWorkspaceSnapshotBuild as E, conversationArchivedForEmail as Et, bindSlackDirectCredentialSubject as F, readConversationEventPage as Ft, isDmChannel as G, listConversationAnnotationsById as Gt, getHeaderString as H, saveObjectAnnotations as Ht, verifyEventAutomationCredentialSubject as I, buildSentryConversationUrl as It, withSlackRetries as J, authenticationLinkedEvent as Jt, normalizeSlackConversationId as K, JUNIOR_NATIVE_EVENT_NAMESPACE as Kt, verifyScheduledAutomationCredentialSubject as L, getSlackFileId as Lt, resolveChannelCapabilities as M, viewerConversationMembership as Mt, bindEventAutomationCredentialSubject as N, createPluginConversationEvents as Nt, deleteWorkspaceSnapshotBuilders as O, conversationHasParticipantEmail as Ot, bindScheduledAutomationCredentialSubject as P, readLatestConversationBrief as Pt, readActorIdentity as Q, getConversationMessageSearchStore as Qt, verifySlackDirectCredentialSubject as R, matchSlackAttachments as Rt, WorkspaceValidationError as S, createPluginModel as St, setWorkspaceSnapshot as T, conversationArchiveTimes as Tt, getSlackClient as U, createPluginAnnotations as Ut, getFilePermalink as V, resolveRootVisibility as Vt, isConversationScopedChannel as W, listConversationAnnotations as Wt, runWithWorkspaceTeamId as X, db_exports as Xt, getWorkspaceTeamId as Y, authenticationUnlinkedEvent as Yt, findUserByEmail as Z, getConversationEventStore as Zt, deleteWorkspace as _, createSlackDestination as _n, getDashboardObjectIconLink as _t, getPluginRoutes as a, locationFromRow as an, STOP_WATCHING_TOOL_NAME as at, listWorkspaces as b, sameDestination as bn, createPluginState as bt, getPluginTools as c, addAgentTurnUsage as cn, collectEventMatchKeys as ct, setPlugins as d, agentTurnUsageSchema as dn, deliverWatch as dt, getDb as en, updateViewerDisplayName as et, validatePlugins as f, hasAgentTurnUsage as fn, findMatchingWatches as ft, createWorkspace as g, upsertLinkedIdentity as gn, getDashboardConversationLink as gt, setBriefsConfig as h, upsertIdentity as hn, JUNIOR_THREAD_STATE_TTL_MS as ht, getPluginApiRoutes as i, withConversationMutationLock as in, RESOURCE_WATCH_TOOL_SOURCE as it, workspaceRepoCheckoutPath as j, conversationNotArchivedForUser as jt, getWorkspaceSnapshotBuilder as k, conversationHasParticipantUser as kt, getPluginUserPromptContributions as l, agentTurnCostUsd as ln, createTimerWatch as lt, registration_exports as m, deleteProviderIdentityForSlackUser as mn, takeDueTimerWatches as mt, applyPluginFormatMarkdown as n, createSqlConversationEventStore as nn, RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS as nt, getPluginSlackConversationLink as o, bindProviderConversation as on, cancelSubscriptions as ot, coreTaskRegistrations as p, resolveRootConversationId as pn, listWatches as pt, runWithSlackInstallationToken as q, agentsInstructionsUpdatedEvent as qt, createPluginHookRunner as r, withConversationEventLock as rn, RESOURCE_SUBSCRIPTION_MAX_TTL_MS as rt, getPluginSystemPromptContributions as s, parseSessionSource as sn, cancelWatch as st, agent_hooks_exports as t, getSqlExecutor as tn, getSlackToolContext as tt, getPlugins as u, agentTurnTotalTokens as un, createWatch as ut, getWorkspace as v, parseDestination as vn, getDashboardTaskLink as vt, loadSnapshotsForProfile as w, readConversationAccessFromSql as wt, updateWorkspace as x, createPluginEmbedder as xt, getWorkspaceByName as y, requireSlackDestination as yn, setDashboardConversationLinkOptions as yt, SlackActionError as z, readAttachmentVisionSummary as zt };
@@ -1,26 +1,26 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- 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-Pcxo3lGn.js";
3
- import { C as withLogContext, F as normalizeIdentityEmail, I as isRecord$3, L as toOptionalNumber, R as toOptionalString, a as extractGenAiUsageSummary, b as setTags, c as getLogContextAttributesForSpan, d as logException, f as logInfo, g as serializeGenAiAttribute, i as extractGenAiUsageAttributes, l as getTracePropagationHeaders, m as normalizeGenAiFinishReason, p as logWarn, s as getLogContextAttributes, u as logError, v as setSpanAttributes, w as withSpan, x as summarizeMessageText, y as setSpanStatus } from "./logging-BPBx6WF-.js";
2
+ 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-C6VUBzL_.js";
3
+ import { C as withLogContext, F as normalizeIdentityEmail, I as isRecord$3, L as toOptionalNumber, R as toOptionalString, a as extractGenAiUsageSummary, b as setTags, c as getLogContextAttributesForSpan, d as logException, f as logInfo, g as serializeGenAiAttribute, i as extractGenAiUsageAttributes, l as getTracePropagationHeaders, m as normalizeGenAiFinishReason, p as logWarn, s as getLogContextAttributes, u as logError, v as setSpanAttributes, w as withSpan, x as summarizeMessageText, y as setSpanStatus } from "./logging-Blgn76r3.js";
4
4
  import { m as startInactiveSpan, n as captureMessage, v as withActiveSpan } from "./sentry-CgWZM_kV.js";
5
- 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-hQmyZbOC.js";
6
- import { a as getChatConfig, h as normalizeSlackEmojiName, n as botConfig } from "./config-CYvEow1F.js";
5
+ 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-DJ88ECSq.js";
6
+ import { a as getChatConfig, h as normalizeSlackEmojiName, n as botConfig } from "./config-BLPaWN1Q.js";
7
7
  import { a as formatModelProfiles, c as profileConfig, i as formatModelProfile, l as TURN_REASONING_LEVELS, n as ModelProfileNotConfiguredError, o as modelIdForProfile, s as modelProfileSchema } from "./model-profile-BwU8mqwD.js";
8
8
  import { b as parseSlackMessageTs, d as parseStoredSlackActor, 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-0Et9iVSB.js";
9
- import { $t as getDb, A as tryWorkspaceRepoCheckoutPath, B as downloadPrivateSlackFile, C as invalidateReadySnapshot, D as SANDBOX_RUNTIME, E as setWorkspaceSnapshotBuild, G as isDmChannel$1, Ht as createPluginAnnotations, J as withSlackRetries, K as normalizeSlackConversationId, Lt as matchSlackAttachments, M as resolveChannelCapabilities, O as deleteWorkspaceSnapshotBuilders, Q as readActorIdentity, Qt as getConversationStore, S as WorkspaceValidationError, St as createPluginLogger, T as setWorkspaceSnapshot, U as getSlackClient, V as getFilePermalink, Vt as saveObjectAnnotations, W as isConversationScopedChannel, Xt as getConversationEventStore, Zt as getConversationMessageSearchStore, _ as deleteWorkspace, _n as parseDestination, _t as getDashboardTaskLink, at as STOP_WATCHING_TOOL_NAME, b as listWorkspaces, c as getPluginTools, dn as hasAgentTurnUsage, dt as deliverWatch, en as getSqlExecutor, ft as findMatchingWatches, g as createWorkspace, gt as getDashboardConversationLink, ht as JUNIOR_THREAD_STATE_TTL_MS, it as RESOURCE_WATCH_TOOL_SOURCE, j as workspaceRepoCheckoutPath, k as getWorkspaceSnapshotBuilder, l as getPluginUserPromptContributions, lt as createTimerWatch, n as applyPluginFormatMarkdown, nt as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, ot as cancelSubscriptions, pt as listWatches, r as createPluginHookRunner, rt as RESOURCE_SUBSCRIPTION_MAX_TTL_MS, s as getPluginSystemPromptContributions, sn as addAgentTurnUsage, st as cancelWatch, tt as getSlackToolContext, u as getPlugins, ut as createWatch, v as getWorkspace, w as loadSnapshotsForProfile, x as updateWorkspace, y as getWorkspaceByName, yn as sameDestination$1, z as SlackActionError } from "./agent-hooks-bEwEJhlg.js";
9
+ import { $t as getConversationStore, A as tryWorkspaceRepoCheckoutPath, B as downloadPrivateSlackFile, C as invalidateReadySnapshot, Ct as createPluginLogger, D as SANDBOX_RUNTIME, E as setWorkspaceSnapshotBuild, G as isDmChannel$1, Ht as saveObjectAnnotations, J as withSlackRetries, K as normalizeSlackConversationId, M as resolveChannelCapabilities, O as deleteWorkspaceSnapshotBuilders, Q as readActorIdentity, Qt as getConversationMessageSearchStore, Rt as matchSlackAttachments, S as WorkspaceValidationError, T as setWorkspaceSnapshot, U as getSlackClient, Ut as createPluginAnnotations, V as getFilePermalink, W as isConversationScopedChannel, Zt as getConversationEventStore, _ as deleteWorkspace, at as STOP_WATCHING_TOOL_NAME, b as listWorkspaces, bn as sameDestination$1, c as getPluginTools, cn as addAgentTurnUsage, dt as deliverWatch, en as getDb, fn as hasAgentTurnUsage, ft as findMatchingWatches, g as createWorkspace, gt as getDashboardConversationLink, ht as JUNIOR_THREAD_STATE_TTL_MS, it as RESOURCE_WATCH_TOOL_SOURCE, j as workspaceRepoCheckoutPath, k as getWorkspaceSnapshotBuilder, l as getPluginUserPromptContributions, lt as createTimerWatch, n as applyPluginFormatMarkdown, nt as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, ot as cancelSubscriptions, pt as listWatches, r as createPluginHookRunner, rt as RESOURCE_SUBSCRIPTION_MAX_TTL_MS, s as getPluginSystemPromptContributions, st as cancelWatch, tn as getSqlExecutor, tt as getSlackToolContext, u as getPlugins, ut as createWatch, v as getWorkspace, vn as parseDestination, vt as getDashboardTaskLink, w as loadSnapshotsForProfile, x as updateWorkspace, y as getWorkspaceByName, z as SlackActionError } from "./agent-hooks-DUQ3ASdp.js";
10
10
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
11
- import { D as juniorIdentities, E as juniorConversations, a as juniorSchedulerRuns, c as juniorStats, d as AGENT_INVOCATION_MAILBOX_STATUSES, g as juniorConversationBriefs, k as juniorArtifacts, l as juniorEventAutomations, o as juniorSchedulerTasks, w as juniorAttachments, x as juniorConversationAnnotations } from "./executor-BXMlFrV6.js";
12
- import { $ as contextProvenance, B as briefLinkSchema, H as conversationBriefSchema, R as isVisionImageMediaType, V as briefOutcomeStatusSchema, W as KNOWN_CONVERSATION_EVENT_TYPES, et as instructionActors, j as messageCardRefSchema, nt as sameActorIdentity, tt as instructionProvenanceFor } from "./conversation-BnhOMfEB.js";
11
+ import { D as juniorIdentities, E as juniorConversations, a as juniorSchedulerRuns, c as juniorStats, d as AGENT_INVOCATION_MAILBOX_STATUSES, g as juniorConversationBriefs, k as juniorArtifacts, l as juniorEventAutomations, o as juniorSchedulerTasks, w as juniorAttachments, x as juniorConversationAnnotations } from "./executor-DZVZBfmX.js";
12
+ import { $ as contextProvenance, B as briefLinkSchema, H as conversationBriefSchema, R as isVisionImageMediaType, V as briefOutcomeStatusSchema, W as KNOWN_CONVERSATION_EVENT_TYPES, et as instructionActors, j as messageCardRefSchema, nt as sameActorIdentity, tt as instructionProvenanceFor } from "./conversation-DOI6Y60M.js";
13
13
  import { a as listReferenceFiles, c as soulPathCandidates, l as worldPathCandidates } from "./package-discovery-7a9YqLhE.js";
14
- import { a as resolveAuthTokenPlaceholder, c as fetchWithBoundedOAuthErrorBodies, d as CredentialUnavailableError, i as resolvePluginHeaderEnvRefs, l as getOAuthProviderErrorAttributes, o as resolvePluginCommandEnv, s as OAuthProviderError } from "./registry-DM5aMhjm.js";
15
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Cw9V2jpn.js";
16
- import { a as parseSkillInvocation, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-CAI5s___.js";
17
- import { $ as fallbackShortTitle, C as isToolResultError, D as stripRuntimeTurnContext, E as retainRuntimeTurnContext, F as loadTurnRoute, G as recordToolExecutionStarted, H as recordGuardianActionReviewed, I as openConversationProjection, K as recordTurnRoute, L as recordAgentsInstructionsUpdated, M as loadConnectedMcpProviders, N as loadConversationProjection, O as trimTrailingAssistantMessages, R as recordAttachmentsDelivered, S as isContinuablePiBoundary, T as normalizeToolNameFromResult, U as recordMcpProviderConnected, V as recordAuthorizationRequested, _ as getTerminalAssistantMessages, _t as piMessageFromHistoryItem, d as TurnSliceLimitExceededError, et as generateShortTitle, f as assertTurnToolCallLimit, g as getPiMessageRole, gt as historyItemFromPiMessage, h as extractAssistantText, ht as getAgentContextInputLimitTokens, k as TURN_CONTEXT_TAG, m as isTurnExecutionLimitExceededError, mt as getAgentContextCompactionTriggerTokens, n as loadTurnCheckpoint, pt as estimateTextTokens, r as saveTurnCheckpoint, t as continuableMessages, tt as resolveTaskTitle, v as getUserMessageInstructionText, w as isToolResultMessage, x as isAssistantMessage, y as hasRuntimeTurnContext } from "./checkpoint-oZYD3-Ar.js";
18
- import { A as SANDBOX_DATA_ROOT, C as getDefaultRedisStateAdapterFor, D as fenceLock, E as acquireActiveLock, F as sandboxSkillFile, I as sandboxSkillPathResolution, M as SANDBOX_SKILLS_ROOT, N as SANDBOX_WORKSPACE_ROOT, O as withLock, P as sandboxSkillDir, _ 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_REPOS_ROOT, k as sleep$2, 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-upzC-wN1.js";
19
- import { n as canReusePendingAuthLink, t as abandonReplacedPendingAuth } from "./pending-auth-CHUjr_6d.js";
20
- import { a as NO_REPLY_MARKER, c as CooperativeTurnYieldError, i as sanitizeAssistantText, l as TurnInputCommitLostError, n as decideReply, o as isNoReplyMarker, p as isTurnInputCommitLostError, r as getAssistantReplyText, t as authorizationId } from "./oauth-authorization-Cq1GaLIP.js";
21
- import { r as EVENT_AUTHOR_ID } from "./prompt-CZIQcPHy.js";
22
- 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-sF6Lg7Ay.js";
23
- import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-AI0_QAgc.js";
14
+ import { a as resolveAuthTokenPlaceholder, c as fetchWithBoundedOAuthErrorBodies, d as CredentialUnavailableError, i as resolvePluginHeaderEnvRefs, l as getOAuthProviderErrorAttributes, o as resolvePluginCommandEnv, s as OAuthProviderError } from "./registry-BUbczT2k.js";
15
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-NOBDOyJi.js";
16
+ import { a as parseSkillInvocation, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-CLgyYrgF.js";
17
+ import { $ as fallbackShortTitle, C as isToolResultError, D as stripRuntimeTurnContext, E as retainRuntimeTurnContext, F as loadTurnRoute, G as recordToolExecutionStarted, H as recordGuardianActionReviewed, I as openConversationProjection, K as recordTurnRoute, L as recordAgentsInstructionsUpdated, M as loadConnectedMcpProviders, N as loadConversationProjection, O as trimTrailingAssistantMessages, R as recordAttachmentsDelivered, S as isContinuablePiBoundary, T as normalizeToolNameFromResult, U as recordMcpProviderConnected, V as recordAuthorizationRequested, _ as getTerminalAssistantMessages, _t as piMessageFromHistoryItem, d as TurnSliceLimitExceededError, et as generateShortTitle, f as assertTurnToolCallLimit, g as getPiMessageRole, gt as historyItemFromPiMessage, h as extractAssistantText, ht as getAgentContextInputLimitTokens, k as TURN_CONTEXT_TAG, m as isTurnExecutionLimitExceededError, mt as getAgentContextCompactionTriggerTokens, n as loadTurnCheckpoint, pt as estimateTextTokens, r as saveTurnCheckpoint, t as continuableMessages, tt as resolveTaskTitle, v as getUserMessageInstructionText, w as isToolResultMessage, x as isAssistantMessage, y as hasRuntimeTurnContext } from "./checkpoint-CzN3gXoB.js";
18
+ import { A as SANDBOX_DATA_ROOT, C as getDefaultRedisStateAdapterFor, D as fenceLock, E as acquireActiveLock, F as sandboxSkillFile, I as sandboxSkillPathResolution, M as SANDBOX_SKILLS_ROOT, N as SANDBOX_WORKSPACE_ROOT, O as withLock, P as sandboxSkillDir, _ 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_REPOS_ROOT, k as sleep$2, 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-a5xmeUHf.js";
19
+ import { n as canReusePendingAuthLink, t as abandonReplacedPendingAuth } from "./pending-auth-CXLwmDaG.js";
20
+ import { a as NO_REPLY_MARKER, c as CooperativeTurnYieldError, i as sanitizeAssistantText, l as TurnInputCommitLostError, n as decideReply, o as isNoReplyMarker, p as isTurnInputCommitLostError, r as getAssistantReplyText, t as authorizationId } from "./oauth-authorization-t-NPqTNB.js";
21
+ import { r as EVENT_AUTHOR_ID } from "./prompt-9C-wUwwx.js";
22
+ 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-3PhWSiEF.js";
23
+ import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-BuSPM0cX.js";
24
24
  import { n as privateTraceResultAttributes } from "./private-trace-result-BLvBjy_e.js";
25
25
  import { streamSimple } from "@earendil-works/pi-ai/compat";
26
26
  import { createGatewayProvider } from "@ai-sdk/gateway";
@@ -31,7 +31,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
31
31
  import { z } from "zod";
32
32
  import { createHash, createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
33
33
  import { and, asc, desc, eq, gt, gte, inArray, isNotNull, isNull, lt, lte, ne, notExists, notInArray, or, sql } from "drizzle-orm";
34
- import { EgressAuthRequired, EgressPolicyDenied, PluginToolInputError, actorSchema, actorUserIdSchema, destinationSchema, destinationVisibilitySchema, eventMatchSchema, eventMatches, eventSchema, eventTypeSchema, missingToolAnnotationKeys, normalizeEventIdentifier, ownedObjectAnnotationSchema, pluginAuthorizationSchema, pluginCredentialHeaderTransformSchema, pluginCredentialResultSchema, pluginGrantSchema, pluginProviderAccountSchema, pluginStoredTokensSchema, slackDestinationSchema, sourceSchema, stableEventMatchKey, taskOutcomeSchema, watchResultSchema } from "@sentry/junior-plugin-api";
34
+ import { EgressAuthRequired, EgressPolicyDenied, PluginToolInputError, actorSchema, actorUserIdSchema, destinationSchema, destinationVisibilitySchema, eventMatchSchema, eventMatches, eventSchema, eventTypeSchema, missingToolAnnotationKeys, normalizeEventIdentifier, objectTypeSchema, ownedObjectAnnotationSchema, pluginAuthorizationSchema, pluginCredentialHeaderTransformSchema, pluginCredentialResultSchema, pluginGrantSchema, pluginProviderAccountSchema, pluginStoredTokensSchema, slackDestinationSchema, sourceSchema, stableEventMatchKey, taskOutcomeSchema, watchResultSchema } from "@sentry/junior-plugin-api";
35
35
  import { alias } from "drizzle-orm/pg-core";
36
36
  import { Agent, estimateContextTokens } from "@earendil-works/pi-agent-core";
37
37
  import fs from "node:fs/promises";
@@ -2683,7 +2683,11 @@ const payload = z.strictObject({
2683
2683
  title: z.strictObject({ text: z.string().min(1) }),
2684
2684
  display_id: z.string().optional(),
2685
2685
  display_type: z.string().optional(),
2686
- product_name: z.string().optional()
2686
+ product_name: z.string().optional(),
2687
+ product_icon: z.strictObject({
2688
+ url,
2689
+ alt_text: z.string().min(1)
2690
+ }).optional()
2687
2691
  }),
2688
2692
  custom_fields: z.array(customField).optional(),
2689
2693
  display_order: z.array(z.string()).optional()
@@ -5595,7 +5599,7 @@ function isEventMailboxMetadata(value) {
5595
5599
  const event = record.event;
5596
5600
  if (!event || typeof event !== "object" || Array.isArray(event)) return false;
5597
5601
  const fields = event;
5598
- return typeof fields.eventKey === "string" && typeof fields.eventType === "string" && typeof fields.namespace === "string" && typeof fields.identifier === "string" && typeof fields.subscriptionId === "string" && (fields.trustedSummary === void 0 || typeof fields.trustedSummary === "string");
5602
+ return typeof fields.eventKey === "string" && typeof fields.eventType === "string" && typeof fields.namespace === "string" && typeof fields.identifier === "string" && typeof fields.subscriptionId === "string" && (fields.objectType === void 0 || objectTypeSchema.safeParse(fields.objectType).success) && (fields.trustedSummary === void 0 || typeof fields.trustedSummary === "string");
5599
5603
  }
5600
5604
  /** Build plain conversation mailbox input for one matched watch. */
5601
5605
  function createEventInboundMessage(input) {
@@ -5607,7 +5611,8 @@ function createEventInboundMessage(input) {
5607
5611
  namespace: input.event.namespace,
5608
5612
  identifier: input.event.identifier,
5609
5613
  subscriptionId: input.subscription.id,
5610
- trustedSummary: input.event.trustedSummary
5614
+ trustedSummary: input.event.trustedSummary,
5615
+ objectType: input.event.objectType
5611
5616
  }
5612
5617
  };
5613
5618
  return {
@@ -21909,7 +21914,7 @@ function createAgentRunner(execute, options) {
21909
21914
  } } : void 0
21910
21915
  };
21911
21916
  if (run.instruction.storedAttachments?.length) {
21912
- const { loadInputImages } = await import("./images-8siTAUNW.js").then((n) => n.n);
21917
+ const { loadInputImages } = await import("./images-D3x6EemU.js").then((n) => n.n);
21913
21918
  const storage = nextRun.environment?.attachmentStorage;
21914
21919
  if (!storage) throw new Error("Attachment storage is unavailable.");
21915
21920
  nextRun.instruction = {