@sentry/junior 0.227.0 → 0.229.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-BfjhfMIy.js} +18 -10
  2. package/dist/{agent-runner-BGDSjciH.js → agent-runner-DtrpkWV5.js} +59 -39
  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-B6KfFLRA.js} +4 -4
  10. package/dist/{catalog-runtime-Cw9V2jpn.js → catalog-runtime-Byr3trKF.js} +1 -1
  11. package/dist/{checkpoint-oZYD3-Ar.js → checkpoint-DEYb3Fqm.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-BN5U3CGw.js} +3 -5
  19. package/dist/{config-CYvEow1F.js → config-C4xZrx7G.js} +2 -2
  20. package/dist/{conversation-BnhOMfEB.js → conversation-DOI6Y60M.js} +3 -2
  21. package/dist/{conversation-privacy-hQmyZbOC.js → conversation-privacy-CB7wx_tP.js} +1 -1
  22. package/dist/{credential-sync-CUGbiiCM.js → credential-sync-CuEwdxwY.js} +13 -13
  23. package/dist/{executor-BXMlFrV6.js → executor-DUqeOd8y.js} +1 -1
  24. package/dist/{history-nukv1YN8.d.ts → history-H-SI5Dej.d.ts} +1 -0
  25. package/dist/{images-8siTAUNW.js → images-B5JLFwJR.js} +3 -3
  26. package/dist/instrumentation.js +2 -2
  27. package/dist/{job-queue-AI0_QAgc.js → job-queue-C1AJ5uJt.js} +1 -1
  28. package/dist/{logging-BPBx6WF-.js → logging-Muw6EXro.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-CrD-xb8a.js} +1 -1
  32. package/dist/{oauth-callback-server-CnF03VYh.js → oauth-callback-server-DfQos1K1.js} +2 -2
  33. package/dist/{pending-auth-CHUjr_6d.js → pending-auth-pYQpJmtu.js} +1 -1
  34. package/dist/{profile-upzC-wN1.js → profile-25NkcK4S.js} +4 -4
  35. package/dist/{prompt-CZIQcPHy.js → prompt-9C-wUwwx.js} +1 -1
  36. package/dist/{registry-DM5aMhjm.js → registry-DrcbAs8o.js} +1 -1
  37. package/dist/{resolve-sF6Lg7Ay.js → resolve-D9kl_rkl.js} +2 -2
  38. package/dist/{runner-Bu2wYpK8.js → runner-D3rf-_hT.js} +9 -9
  39. package/dist/{sandbox-egress-signals-Dgerhizb.js → sandbox-egress-signals-BfQQz6cs.js} +1 -1
  40. package/dist/{schema-BSiwcvjm.js → schema-CXmCvVLn.js} +1 -1
  41. package/dist/{skills-CAI5s___.js → skills-rwWf3XjQ.js} +2 -2
  42. package/dist/{spawn-DRK9TBgY.js → spawn-z0fRvZH9.js} +2 -2
  43. package/dist/{task-queue-iuDAqfZg.js → task-queue-BGo6K-BX.js} +3 -3
  44. package/dist/{task-runner-S3QtH38c.js → task-runner-DH8M0m7l.js} +9 -9
  45. package/dist/{thread-state-C_arVuaN.js → thread-state-CS67FjfN.js} +5 -5
  46. package/dist/{turn-failure-response-DarwGYgC.js → turn-failure-response-DcaALKfm.js} +8 -8
  47. package/dist/{turn-lifecycle-CdiIejXH.js → turn-lifecycle-DHcpS20C.js} +1 -1
  48. package/dist/{turn-session-routing-DyLGd_wU.js → turn-session-routing-DlaCHHlu.js} +1 -1
  49. package/dist/{validation-BMig74Zp.js → validation-CNUPIKMW.js} +1 -1
  50. package/dist/{version-lhQSfLjx.js → version-B0eXuHqw.js} +1 -1
  51. package/dist/version.js +1 -1
  52. package/dist/{web-authorization-r2lKYKJ2.js → web-authorization-DrXlSd3Y.js} +6 -6
  53. package/dist/{web-input-BU-Fu7iq.js → web-input-WFoSdz8L.js} +50 -28
  54. package/dist/{work-B9koS8sW.js → work-B0cAo7nv.js} +7 -7
  55. package/dist/{worker-C_iJSRgG.js → worker-DNklqmhH.js} +5 -5
  56. package/package.json +5 -5
@@ -1,6 +1,6 @@
1
1
  import { l as TURN_REASONING_LEVELS, s as modelProfileSchema } from "./model-profile-BwU8mqwD.js";
2
2
  import { z } from "zod";
3
- import { actorSchema, codeChangeStateSchema, conversationAnnotationInputSchema, conversationEventPresentationSchema, conversationSidebarAnnotationSchema, objectFactFields, ownedObjectAnnotationSchema } from "@sentry/junior-plugin-api";
3
+ import { actorSchema, codeChangeStateSchema, conversationAnnotationInputSchema, conversationEventPresentationSchema, conversationSidebarAnnotationSchema, objectFactFields, objectTypeSchema, ownedObjectAnnotationSchema } from "@sentry/junior-plugin-api";
4
4
  //#region src/usage-schema.ts
5
5
  const usageCostSchema = z.object({
6
6
  input: z.number().finite().nonnegative().optional(),
@@ -734,7 +734,7 @@ function annotationCard(annotation) {
734
734
  return value.kind === "object" ? value : {
735
735
  ...value,
736
736
  kind: "object",
737
- objectType: "item",
737
+ objectType: value.objectType ?? "item",
738
738
  title: value.label
739
739
  };
740
740
  }
@@ -928,6 +928,7 @@ const conversationReportMessageEventDataSchema = z.object({
928
928
  source: z.enum(["slack", "web"]).optional(),
929
929
  actorIdentity: actorIdentitySchema.optional(),
930
930
  eventType: z.string().min(1).optional(),
931
+ eventObjectType: objectTypeSchema.optional(),
931
932
  explicitMention: z.boolean().optional(),
932
933
  trustedSummary: z.string().min(1).optional(),
933
934
  cards: z.array(messageCardSchema).optional(),
@@ -1,4 +1,4 @@
1
- import { p as logWarn } from "./logging-BPBx6WF-.js";
1
+ import { p as logWarn } from "./logging-Muw6EXro.js";
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
3
  //#region src/chat/conversation-privacy.ts
4
4
  const SAFE_METADATA_KEY_LIMIT = 20;
@@ -1,18 +1,18 @@
1
- import { Cn as createUserTokenStore, T as lookupSlackUserProfile, _ as putMcpStoredOAuthCredentials, d as deleteMcpAuthSession, dn as resolveBaseUrl, ft as getMcpProviderErrorAttributes, g as getMcpStoredOAuthCredentials, h as getMcpAuthSession, ln as formatProviderLabel, u as finalizeMcpAuthorization, un as parseOAuthStatePayload, x as resolvePluginOAuthAccount, yn as postSlackMessage } from "./agent-runner-BGDSjciH.js";
2
- import { m as escapeXml } from "./client-Pcxo3lGn.js";
3
- import { d as logException, h as runBestEffort, p as logWarn } from "./logging-BPBx6WF-.js";
4
- import { n as botConfig, o as getRuntimeMetadata } from "./config-CYvEow1F.js";
1
+ import { Cn as createUserTokenStore, T as lookupSlackUserProfile, _ as putMcpStoredOAuthCredentials, d as deleteMcpAuthSession, dn as resolveBaseUrl, ft as getMcpProviderErrorAttributes, g as getMcpStoredOAuthCredentials, h as getMcpAuthSession, ln as formatProviderLabel, u as finalizeMcpAuthorization, un as parseOAuthStatePayload, x as resolvePluginOAuthAccount, yn as postSlackMessage } from "./agent-runner-DtrpkWV5.js";
2
+ import { f as escapeXml } from "./client-BN5U3CGw.js";
3
+ import { d as logException, h as runBestEffort, p as logWarn } from "./logging-Muw6EXro.js";
4
+ import { n as botConfig, o as getRuntimeMetadata } from "./config-C4xZrx7G.js";
5
5
  import { g as parseSlackUserId } from "./context-0Et9iVSB.js";
6
- import { U as getSlackClient, en as getSqlExecutor, hn as upsertLinkedIdentity, mn as upsertIdentity } from "./agent-hooks-bEwEJhlg.js";
6
+ import { U as getSlackClient, gn as upsertLinkedIdentity, hn as upsertIdentity, tn as getSqlExecutor } from "./agent-hooks-BfjhfMIy.js";
7
7
  import { i as homeDir } from "./package-discovery-7a9YqLhE.js";
8
- import { n as buildOAuthTokenRequest, r as parseOAuthTokenResponse, u as hasRequiredOAuthScope } from "./registry-DM5aMhjm.js";
9
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Cw9V2jpn.js";
10
- import { t as discoverSkills } from "./skills-CAI5s___.js";
11
- import { B as recordAuthorizationCompleted, s as getTurnRecord, z as recordAuthenticationLinked } from "./checkpoint-oZYD3-Ar.js";
12
- import { E as acquireActiveLock, w as getStateAdapter } from "./profile-upzC-wN1.js";
13
- import { i as getConversationPendingAuth } from "./pending-auth-CHUjr_6d.js";
14
- import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-C_arVuaN.js";
15
- import { n as deleteWebAuthorization, o as wakeAuthorizedTurn, s as wakePausedTurn } from "./web-authorization-r2lKYKJ2.js";
8
+ import { n as buildOAuthTokenRequest, r as parseOAuthTokenResponse, u as hasRequiredOAuthScope } from "./registry-DrcbAs8o.js";
9
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Byr3trKF.js";
10
+ import { t as discoverSkills } from "./skills-rwWf3XjQ.js";
11
+ import { B as recordAuthorizationCompleted, s as getTurnRecord, z as recordAuthenticationLinked } from "./checkpoint-DEYb3Fqm.js";
12
+ import { E as acquireActiveLock, w as getStateAdapter } from "./profile-25NkcK4S.js";
13
+ import { i as getConversationPendingAuth } from "./pending-auth-pYQpJmtu.js";
14
+ import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-CS67FjfN.js";
15
+ import { n as deleteWebAuthorization, o as wakeAuthorizedTurn, s as wakePausedTurn } from "./web-authorization-DrXlSd3Y.js";
16
16
  import { n as relayLocalOAuthCallback } from "./oauth-relay-CdCnu80W.js";
17
17
  import path from "node:path";
18
18
  import { z } from "zod";
@@ -1,5 +1,5 @@
1
1
  import { g as startSpanManual } from "./sentry-CgWZM_kV.js";
2
- import "./config-CYvEow1F.js";
2
+ import "./config-C4xZrx7G.js";
3
3
  import { n as juniorDestinations, r as timestamptz } from "./destinations-BeBiJeEM.js";
4
4
  import { AsyncLocalStorage } from "node:async_hooks";
5
5
  import { getTableColumns, sql } from "drizzle-orm";
@@ -42,6 +42,7 @@ declare const messageCardSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
42
42
  objectType: z.ZodEnum<{
43
43
  code_change: "code_change";
44
44
  task: "task";
45
+ deployment: "deployment";
45
46
  automation: "automation";
46
47
  item: "item";
47
48
  }>;
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { j as storeAttachment, k as readLiveAttachment } from "./agent-runner-BGDSjciH.js";
3
- import { en as getSqlExecutor } from "./agent-hooks-bEwEJhlg.js";
4
- import "./conversation-BnhOMfEB.js";
2
+ import { j as storeAttachment, k as readLiveAttachment } from "./agent-runner-DtrpkWV5.js";
3
+ import { tn as getSqlExecutor } from "./agent-hooks-BfjhfMIy.js";
4
+ import "./conversation-DOI6Y60M.js";
5
5
  //#region src/chat/attachments/images.ts
6
6
  var images_exports = /* @__PURE__ */ __exportAll({
7
7
  decodeInputImages: () => decodeInputImages,
@@ -1,6 +1,6 @@
1
- import { N as getDeploymentServiceVersion, P as getDeploymentTelemetryAttributes } from "./logging-BPBx6WF-.js";
1
+ import { N as getDeploymentServiceVersion, P as getDeploymentTelemetryAttributes } from "./logging-Muw6EXro.js";
2
2
  import { _ as vercelAIIntegration, a as getClient, b as withStreamedSpan, c as init, o as getGlobalScope } from "./sentry-CgWZM_kV.js";
3
- import { n as getCurrentConversationPrivacy } from "./conversation-privacy-hQmyZbOC.js";
3
+ import { n as getCurrentConversationPrivacy } from "./conversation-privacy-CB7wx_tP.js";
4
4
  import { t as consumePrivateTraceResultMarker } from "./private-trace-result-BLvBjy_e.js";
5
5
  //#region src/chat/sentry-payload-filter.ts
6
6
  const PAYLOAD_ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
@@ -1,4 +1,4 @@
1
- import { a as getChatConfig } from "./config-CYvEow1F.js";
1
+ import { a as getChatConfig } from "./config-C4xZrx7G.js";
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
3
  import { z } from "zod";
4
4
  import { createHash, createHmac, timingSafeEqual } from "node:crypto";
@@ -1,5 +1,5 @@
1
1
  import { d as setTag, f as setUser, h as startSpan, i as getActiveSpan, l as logger, n as captureMessage, p as spanToJSON, s as getTraceData, t as captureException, y as withScope } from "./sentry-CgWZM_kV.js";
2
- import { t as JUNIOR_VERSION } from "./version-lhQSfLjx.js";
2
+ import { t as JUNIOR_VERSION } from "./version-B0eXuHqw.js";
3
3
  import path from "node:path";
4
4
  import { styleText } from "node:util";
5
5
  import { ConfigError, configureSync, getConfig, getLogger } from "@logtape/logtape";
package/dist/nitro.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as JuniorDashboardOptions } from "./app-CjRIKZb5.js";
1
+ import { n as JuniorDashboardOptions } from "./app-BRZB3MuD.js";
2
2
  import { n as JuniorPluginSet } from "./plugins-BT2l4We3.js";
3
3
  //#region src/nitro.d.ts
4
4
  export type JuniorNitroDashboardOptions = JuniorDashboardOptions;
package/dist/nitro.js CHANGED
@@ -1,8 +1,8 @@
1
- import { A as JUNIOR_RETENTION_ROUTE, D as JUNIOR_HEARTBEAT_ROUTE, E as JUNIOR_HEARTBEAT_CRON_SCHEDULE, O as JUNIOR_PLUGIN_TASK_CALLBACK_ROUTE, T as JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE, j as JUNIOR_WORKSPACE_SNAPSHOT_JOB_CALLBACK_ROUTE, k as JUNIOR_RETENTION_CRON_SCHEDULE } from "./logging-BPBx6WF-.js";
1
+ import { A as JUNIOR_RETENTION_ROUTE, D as JUNIOR_HEARTBEAT_ROUTE, E as JUNIOR_HEARTBEAT_CRON_SCHEDULE, O as JUNIOR_PLUGIN_TASK_CALLBACK_ROUTE, T as JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE, j as JUNIOR_WORKSPACE_SNAPSHOT_JOB_CALLBACK_ROUTE, k as JUNIOR_RETENTION_CRON_SCHEDULE } from "./logging-Muw6EXro.js";
2
2
  import { d as resolvePackageDir, t as discoverInstalledPluginPackageContent, u as isValidPackageName } from "./package-discovery-7a9YqLhE.js";
3
- import { o as resolveConversationWorkQueueTopic, t as WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC } from "./job-queue-AI0_QAgc.js";
3
+ import { o as resolveConversationWorkQueueTopic, t as WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC } from "./job-queue-C1AJ5uJt.js";
4
4
  import { a as pluginRuntimeRegistrationsFromPluginSet, r as pluginCatalogConfigFromPluginSet } from "./plugins-egKWjgue.js";
5
- import { t as PLUGIN_TASK_QUEUE_TOPIC } from "./task-queue-iuDAqfZg.js";
5
+ import { t as PLUGIN_TASK_QUEUE_TOPIC } from "./task-queue-BGo6K-BX.js";
6
6
  import { n as loadPluginSetFromModule, r as resolvePluginModule } from "./plugin-module-BKGOXca2.js";
7
7
  import path from "node:path";
8
8
  import { cpSync, existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
@@ -1,4 +1,4 @@
1
- import { h as extractAssistantText } from "./checkpoint-oZYD3-Ar.js";
1
+ import { h as extractAssistantText } from "./checkpoint-DEYb3Fqm.js";
2
2
  //#region src/chat/runtime/turn.ts
3
3
  /** Classified Slack turn failure carrying the owning Sentry capture outward. */
4
4
  var ConversationTurnBoundaryError = class extends Error {
@@ -1,5 +1,5 @@
1
- import { Cn as createUserTokenStore } from "./agent-runner-BGDSjciH.js";
2
- import { a as GET, n as syncLocalOAuthCredential, r as GET$1 } from "./credential-sync-CUGbiiCM.js";
1
+ import { Cn as createUserTokenStore } from "./agent-runner-DtrpkWV5.js";
2
+ import { a as GET, n as syncLocalOAuthCredential, r as GET$1 } from "./credential-sync-CuEwdxwY.js";
3
3
  import { createServer } from "node:http";
4
4
  //#region src/chat/local/oauth-callback-server.ts
5
5
  const LOCAL_OAUTH_TIMEOUT_MS = 6e5;
@@ -1,4 +1,4 @@
1
- import { i as abandonTurnRecord } from "./checkpoint-oZYD3-Ar.js";
1
+ import { i as abandonTurnRecord } from "./checkpoint-DEYb3Fqm.js";
2
2
  //#region src/chat/state/turn-id.ts
3
3
  /** Build a stable turn identifier from a message ID. */
4
4
  function buildDeterministicTurnId(messageId) {
@@ -1,7 +1,7 @@
1
- import { w as toOptionalTrimmed } from "./client-Pcxo3lGn.js";
2
- import { v as setSpanAttributes, y as setSpanStatus } from "./logging-BPBx6WF-.js";
3
- import { a as getChatConfig } from "./config-CYvEow1F.js";
4
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Cw9V2jpn.js";
1
+ import { S as toOptionalTrimmed } from "./client-BN5U3CGw.js";
2
+ import { v as setSpanAttributes, y as setSpanStatus } from "./logging-Muw6EXro.js";
3
+ import { a as getChatConfig } from "./config-C4xZrx7G.js";
4
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Byr3trKF.js";
5
5
  import { createHash } from "node:crypto";
6
6
  import { createMemoryState } from "@chat-adapter/state-memory";
7
7
  import { createRedisState } from "@chat-adapter/state-redis";
@@ -1,4 +1,4 @@
1
- import { H as conversationBriefSchema, U as parseBriefInput, V as briefOutcomeStatusSchema } from "./conversation-BnhOMfEB.js";
1
+ import { H as conversationBriefSchema, U as parseBriefInput, V as briefOutcomeStatusSchema } from "./conversation-DOI6Y60M.js";
2
2
  import { z } from "zod";
3
3
  //#region src/chat/briefs/generate.ts
4
4
  const MAX_INPUT_CHARS = 6e4;
@@ -1,4 +1,4 @@
1
- import { f as logInfo, p as logWarn, v as setSpanAttributes } from "./logging-BPBx6WF-.js";
1
+ import { f as logInfo, p as logWarn, v as setSpanAttributes } from "./logging-Muw6EXro.js";
2
2
  import { i as credentialUserSubjectId } from "./context-0Et9iVSB.js";
3
3
  import { n as normalizePluginPackageNames, o as pluginRoots, t as discoverInstalledPluginPackageContent } from "./package-discovery-7a9YqLhE.js";
4
4
  import path from "node:path";
@@ -1,5 +1,5 @@
1
- import { v as setSpanAttributes, w as withSpan } from "./logging-BPBx6WF-.js";
2
- import { N as SANDBOX_WORKSPACE_ROOT, k as sleep, r as isStale, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-upzC-wN1.js";
1
+ import { v as setSpanAttributes, w as withSpan } from "./logging-Muw6EXro.js";
2
+ import { N as SANDBOX_WORKSPACE_ROOT, k as sleep, r as isStale, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-25NkcK4S.js";
3
3
  import { z } from "zod";
4
4
  import { FileSystem, Sandbox } from "@vercel/sandbox";
5
5
  //#region src/chat/sandbox/resources.ts
@@ -1,13 +1,13 @@
1
- import { C as withLogContext, b as setTags, d as logException } from "./logging-BPBx6WF-.js";
1
+ import { C as withLogContext, b as setTags, d as logException } from "./logging-Muw6EXro.js";
2
2
  import { t as credentialContextForActor } from "./context-0Et9iVSB.js";
3
- import { Qt as getConversationStore, Xt as getConversationEventStore } from "./agent-hooks-bEwEJhlg.js";
4
- import { M as messageCardText } from "./conversation-BnhOMfEB.js";
5
- import { A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, P as loadProjection, Y as persistConversationMessages, ct as markConversationMessage, ft as upsertConversationMessage, lt as normalizeConversationText, r as saveTurnCheckpoint, rt as buildConversationContext, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-oZYD3-Ar.js";
6
- import { _ as markTurnFailed, r as getAssistantReplyText, t as authorizationId, v as startActiveTurn } from "./oauth-authorization-Cq1GaLIP.js";
7
- import { n as scheduleSessionCompletedPluginTasks, t as processPluginTask } from "./task-runner-S3QtH38c.js";
8
- import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-CdiIejXH.js";
9
- import { n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-C_arVuaN.js";
10
- import { d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, t as finalizeFailedTurnReplyWithEvent } from "./turn-failure-response-DarwGYgC.js";
3
+ import { $t as getConversationStore, Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
4
+ import { M as messageCardText } from "./conversation-DOI6Y60M.js";
5
+ import { A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, P as loadProjection, Y as persistConversationMessages, ct as markConversationMessage, ft as upsertConversationMessage, lt as normalizeConversationText, r as saveTurnCheckpoint, rt as buildConversationContext, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-DEYb3Fqm.js";
6
+ import { _ as markTurnFailed, r as getAssistantReplyText, t as authorizationId, v as startActiveTurn } from "./oauth-authorization-CrD-xb8a.js";
7
+ import { n as scheduleSessionCompletedPluginTasks, t as processPluginTask } from "./task-runner-DH8M0m7l.js";
8
+ import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-DHcpS20C.js";
9
+ import { n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-CS67FjfN.js";
10
+ import { d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, t as finalizeFailedTurnReplyWithEvent } from "./turn-failure-response-DcaALKfm.js";
11
11
  import { randomUUID } from "node:crypto";
12
12
  import { createLocalSource, localDestinationSchema } from "@sentry/junior-plugin-api";
13
13
  //#region src/chat/local/runner.ts
@@ -1,4 +1,4 @@
1
- import { cn as sandboxEgressSignalsResponseSchema } from "./agent-runner-BGDSjciH.js";
1
+ import { cn as sandboxEgressSignalsResponseSchema } from "./agent-runner-DtrpkWV5.js";
2
2
  //#region src/chat/local/sandbox-egress-signals.ts
3
3
  const SANDBOX_EGRESS_SIGNALS_PATH = "/api/internal/sandbox-egress/signals";
4
4
  const LOCAL_DEV_SERVER_TIMEOUT_MS = 1e3;
@@ -1,5 +1,5 @@
1
1
  import { t as juniorDestinationKindSchema } from "./destinations-BeBiJeEM.js";
2
- import { E as conversationSummaryReportSchema, n as actorIdentitySchema, w as conversationStatsItemSchema } from "./conversation-BnhOMfEB.js";
2
+ import { E as conversationSummaryReportSchema, n as actorIdentitySchema, w as conversationStatsItemSchema } from "./conversation-DOI6Y60M.js";
3
3
  import { a as fillUtcHours, c as sumUtcHoursIntoSixHours, i as fillUtcDays } from "./web-message-id-xPI_EFSC.js";
4
4
  import { z } from "zod";
5
5
  import { codeChangeStateSchema, taskOutcomeSchema } from "@sentry/junior-plugin-api";
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { p as logWarn } from "./logging-BPBx6WF-.js";
2
+ import { p as logWarn } from "./logging-Muw6EXro.js";
3
3
  import { s as skillRoots } from "./package-discovery-7a9YqLhE.js";
4
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Cw9V2jpn.js";
4
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Byr3trKF.js";
5
5
  import path from "node:path";
6
6
  import { z } from "zod";
7
7
  import fs from "node:fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { Dn as toolInvocationDestination, En as actorFromRun } from "./agent-runner-BGDSjciH.js";
3
- import { n as createAndEnqueueAgentInvocation } from "./work-B9koS8sW.js";
2
+ import { Dn as toolInvocationDestination, En as actorFromRun } from "./agent-runner-DtrpkWV5.js";
3
+ import { n as createAndEnqueueAgentInvocation } from "./work-B0cAo7nv.js";
4
4
  //#region src/chat/agent-invocations/spawn.ts
5
5
  var spawn_exports = /* @__PURE__ */ __exportAll({ bindSpawnAgent: () => bindSpawnAgent });
6
6
  /** Bind a Run's Actor and credentials to new Agent invocations. */
@@ -1,5 +1,5 @@
1
- import { p as logWarn } from "./logging-BPBx6WF-.js";
2
- import { c as QUEUE_SIGNATURE_MAX_AGE_MS, d as createVercelQueueClient, l as signQueueMessage, p as runWithTurnRequestDeadline, u as verifyQueueMessage } from "./job-queue-AI0_QAgc.js";
1
+ import { p as logWarn } from "./logging-Muw6EXro.js";
2
+ import { c as QUEUE_SIGNATURE_MAX_AGE_MS, d as createVercelQueueClient, l as signQueueMessage, p as runWithTurnRequestDeadline, u as verifyQueueMessage } from "./job-queue-C1AJ5uJt.js";
3
3
  import { z } from "zod";
4
4
  import { createHash } from "node:crypto";
5
5
  import { handleCallback, registerDevConsumer } from "@vercel/queue";
@@ -109,7 +109,7 @@ function pluginTaskCallback() {
109
109
  maxDeliveries: PLUGIN_TASK_MAX_DELIVERIES,
110
110
  onRejected: logPluginTaskQueueMessageRejected,
111
111
  run: async (message) => {
112
- const { processPluginTask } = await import("./task-runner-S3QtH38c.js").then((n) => n.r);
112
+ const { processPluginTask } = await import("./task-runner-DH8M0m7l.js").then((n) => n.r);
113
113
  await processPluginTask(message);
114
114
  },
115
115
  topic: PLUGIN_TASK_QUEUE_TOPIC,
@@ -1,14 +1,14 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { p as logWarn } from "./logging-BPBx6WF-.js";
2
+ import { p as logWarn } from "./logging-Muw6EXro.js";
3
3
  import { b as parseSlackMessageTs, r as credentialSubjectSchema } from "./context-0Et9iVSB.js";
4
- import { $t as getDb, Mt as createPluginConversationEvents, Q as readActorIdentity, Qt as getConversationStore, St as createPluginLogger, bt as createPluginEmbedder, cn as agentTurnCostUsd, ht as JUNIOR_THREAD_STATE_TTL_MS, ln as agentTurnTotalTokens, p as coreTaskRegistrations, u as getPlugins, xt as createPluginModel, yt as createPluginState } from "./agent-hooks-bEwEJhlg.js";
5
- import { E as juniorConversations, s as juniorAutomationExecutions } from "./executor-BXMlFrV6.js";
6
- import { nt as sameActorIdentity } from "./conversation-BnhOMfEB.js";
7
- import { C as isToolResultError, D as stripRuntimeTurnContext, J as hydrateConversationMessages, T as normalizeToolNameFromResult, b as instructionTextForProjection, g as getPiMessageRole, s as getTurnRecord, w as isToolResultMessage } from "./checkpoint-oZYD3-Ar.js";
8
- import { w as getStateAdapter } from "./profile-upzC-wN1.js";
9
- import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-C_arVuaN.js";
10
- import { t as resolveConversationRouting } from "./turn-session-routing-DyLGd_wU.js";
11
- import { i as pluginTaskParamsSchema, o as sendVercelPluginTask, r as pluginTaskId } from "./task-queue-iuDAqfZg.js";
4
+ import { $t as getConversationStore, Ct as createPluginLogger, Nt as createPluginConversationEvents, Q as readActorIdentity, St as createPluginModel, bt as createPluginState, en as getDb, ht as JUNIOR_THREAD_STATE_TTL_MS, ln as agentTurnCostUsd, p as coreTaskRegistrations, u as getPlugins, un as agentTurnTotalTokens, xt as createPluginEmbedder } from "./agent-hooks-BfjhfMIy.js";
5
+ import { E as juniorConversations, s as juniorAutomationExecutions } from "./executor-DUqeOd8y.js";
6
+ import { nt as sameActorIdentity } from "./conversation-DOI6Y60M.js";
7
+ import { C as isToolResultError, D as stripRuntimeTurnContext, J as hydrateConversationMessages, T as normalizeToolNameFromResult, b as instructionTextForProjection, g as getPiMessageRole, s as getTurnRecord, w as isToolResultMessage } from "./checkpoint-DEYb3Fqm.js";
8
+ import { w as getStateAdapter } from "./profile-25NkcK4S.js";
9
+ import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-CS67FjfN.js";
10
+ import { t as resolveConversationRouting } from "./turn-session-routing-DlaCHHlu.js";
11
+ import { i as pluginTaskParamsSchema, o as sendVercelPluginTask, r as pluginTaskId } from "./task-queue-BGo6K-BX.js";
12
12
  import { z } from "zod";
13
13
  import { createHash } from "node:crypto";
14
14
  import { and, asc, count, desc, eq, gte, inArray, lte, max, or, sql } from "drizzle-orm";
@@ -1,9 +1,9 @@
1
- import { I as isRecord, L as toOptionalNumber, R as toOptionalString } from "./logging-BPBx6WF-.js";
2
- import { $t as getDb, ht as JUNIOR_THREAD_STATE_TTL_MS } from "./agent-hooks-bEwEJhlg.js";
1
+ import { I as isRecord, L as toOptionalNumber, R as toOptionalString } from "./logging-Muw6EXro.js";
2
+ import { en as getDb, ht as JUNIOR_THREAD_STATE_TTL_MS } from "./agent-hooks-BfjhfMIy.js";
3
3
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
4
- import { u as juniorLocationConfigurations } from "./executor-BXMlFrV6.js";
5
- import { Y as persistConversationMessages } from "./checkpoint-oZYD3-Ar.js";
6
- import { w as getStateAdapter } from "./profile-upzC-wN1.js";
4
+ import { u as juniorLocationConfigurations } from "./executor-DUqeOd8y.js";
5
+ import { Y as persistConversationMessages } from "./checkpoint-DEYb3Fqm.js";
6
+ import { w as getStateAdapter } from "./profile-25NkcK4S.js";
7
7
  import { z } from "zod";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { and, eq, sql } from "drizzle-orm";
@@ -1,12 +1,12 @@
1
- import { _ as findProviderError, h as ProviderError, v as getProviderErrorAttributes, y as getProviderErrorUserMessage } from "./client-Pcxo3lGn.js";
2
- import { I as isRecord, t as buildTurnFailureResponse } from "./logging-BPBx6WF-.js";
1
+ import { _ as getProviderErrorUserMessage, g as getProviderErrorAttributes, h as findProviderError, p as ProviderError } from "./client-BN5U3CGw.js";
2
+ import { I as isRecord, t as buildTurnFailureResponse } from "./logging-Muw6EXro.js";
3
3
  import { b as parseSlackMessageTs } from "./context-0Et9iVSB.js";
4
- import { Xt as getConversationEventStore } from "./agent-hooks-bEwEJhlg.js";
5
- import { A as messageCardKey, N as readMessageCards, j as messageCardRefSchema } from "./conversation-BnhOMfEB.js";
6
- import { J as hydrateConversationMessages, ct as markConversationMessage } from "./checkpoint-oZYD3-Ar.js";
7
- import { r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-CHUjr_6d.js";
8
- import { g as markTurnCompleted, h as markTurnClosed } from "./oauth-authorization-Cq1GaLIP.js";
9
- import { o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-C_arVuaN.js";
4
+ import { Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
5
+ import { A as messageCardKey, N as readMessageCards, j as messageCardRefSchema } from "./conversation-DOI6Y60M.js";
6
+ import { J as hydrateConversationMessages, ct as markConversationMessage } from "./checkpoint-DEYb3Fqm.js";
7
+ import { r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-pYQpJmtu.js";
8
+ import { g as markTurnCompleted, h as markTurnClosed } from "./oauth-authorization-CrD-xb8a.js";
9
+ import { o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-CS67FjfN.js";
10
10
  //#region src/chat/conversations/pending-cards.ts
11
11
  /** Read undelivered card snapshots across resume and history replacement. */
12
12
  async function loadPendingMessageCards(conversationId) {
@@ -1,4 +1,4 @@
1
- import { Xt as getConversationEventStore } from "./agent-hooks-bEwEJhlg.js";
1
+ import { Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
2
2
  //#region src/chat/conversations/turn-lifecycle.ts
3
3
  /** Persist correlated turn lifecycle facts with retry-safe terminal exclusion. */
4
4
  var ConversationTurnLifecycleService = class {
@@ -34,7 +34,7 @@ function slackSourceForDestination(args) {
34
34
  * Reads parent Conversations when this Conversation has no Destination.
35
35
  */
36
36
  async function resolveConversationRouting(args) {
37
- const conversationStore = args.conversationStore ?? (await import("./agent-hooks-bEwEJhlg.js").then((n) => n.Yt)).getConversationStore();
37
+ const conversationStore = args.conversationStore ?? (await import("./agent-hooks-BfjhfMIy.js").then((n) => n.Xt)).getConversationStore();
38
38
  const chain = await loadConversationChain(args.conversationId, conversationStore);
39
39
  let destination;
40
40
  let source;
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Cw9V2jpn.js";
2
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Byr3trKF.js";
3
3
  import { isDeepStrictEqual } from "node:util";
4
4
  //#region src/chat/plugins/validation.ts
5
5
  var validation_exports = /* @__PURE__ */ __exportAll({
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.227.0";
2
+ var version = "0.229.0";
3
3
  //#endregion
4
4
  //#region src/version.ts
5
5
  /** Installed Junior package version, or `unknown` when package metadata is unavailable. */
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as JUNIOR_VERSION } from "./version-lhQSfLjx.js";
1
+ import { t as JUNIOR_VERSION } from "./version-B0eXuHqw.js";
2
2
  export { JUNIOR_VERSION };
@@ -1,9 +1,9 @@
1
- import { Ht as requestConversationWork, Mt as ensureConversationWake } from "./agent-runner-BGDSjciH.js";
2
- import { Xt as getConversationEventStore } from "./agent-hooks-bEwEJhlg.js";
3
- import { n as loadTurnCheckpoint, o as failTurnRecord, s as getTurnRecord } from "./checkpoint-oZYD3-Ar.js";
4
- import { w as getStateAdapter } from "./profile-upzC-wN1.js";
5
- import { a as getVercelConversationWorkQueue } from "./job-queue-AI0_QAgc.js";
6
- import { n as resolveTurnSessionRouting } from "./turn-session-routing-DyLGd_wU.js";
1
+ import { Ht as requestConversationWork, Mt as ensureConversationWake } from "./agent-runner-DtrpkWV5.js";
2
+ import { Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
3
+ import { n as loadTurnCheckpoint, o as failTurnRecord, s as getTurnRecord } from "./checkpoint-DEYb3Fqm.js";
4
+ import { w as getStateAdapter } from "./profile-25NkcK4S.js";
5
+ import { a as getVercelConversationWorkQueue } from "./job-queue-C1AJ5uJt.js";
6
+ import { n as resolveTurnSessionRouting } from "./turn-session-routing-DlaCHHlu.js";
7
7
  import { z } from "zod";
8
8
  import { randomUUID } from "node:crypto";
9
9
  //#region src/chat/task-execution/authorized-turn.ts
@@ -1,33 +1,33 @@
1
- import { $t as recordFinishedTurnForAutomatedLimit, B as isListedScheduledAutomation, Cn as createUserTokenStore, D as renderBlockText, E as renderAttachmentText, F as resolveSlackChannelIdFromThreadId, G as readScheduledAutomation, I as listThreadReplies, K as saveScheduledAutomation, M as parseSlackThreadId, N as readSlackRawMessageContext, On as AuthorizationFlowDisabledError, P as resolveSlackChannelIdFromMessage, Pt as getConversationWorkState, Q as effectiveTaskOutcomes, Qt as maybePostAutomatedTurnLimitNotice, Tn as RetryableDeliveryError, V as listPublicScheduledAutomationsForTeams, W as parseScheduledAutomationRow, Z as eventAutomationTriggerAvailable, _n as truncateStatusText, _t as getEventCatalog, a as isExperimentalFeatureEnabled, at as listEventAutomationsCreatedBy, bn as removeReactionFromMessage, bt as appendAndEnqueueExclusiveInboundMessage, c as createContextCompactor, et as deleteEventAutomation, gn as normalizeSlackStatusText, gt as isEventMailboxMetadata, hn as normalizeSlackReplyMarkdown, ht as EVENT_WAIT_MS, it as listDeletedEventAutomationsCreatedBy, j as storeAttachment, kn as shouldEmitDevAgentTrace, mn as formatSlackLink, ot as listPublicEventAutomationsForTeams, pn as escapeSlackMrkdwnText, rt as getEventAutomation, s as executeAgentRun, t as createAgentRunner, tt as eventAutomationBelongsToUser, v as PluginCredentialFailureError, vn as addReactionToMessage, wn as buildSteeringPiMessage, xt as appendAndEnqueueInboundMessage, y as latestProgressStatus, yn as postSlackMessage } from "./agent-runner-BGDSjciH.js";
2
- import { b as isProviderRetryError, i as completeText, m as escapeXml, r as completeObject } from "./client-Pcxo3lGn.js";
3
- import { C as withLogContext, I as isRecord, L as toOptionalNumber, R as toOptionalString, _ as setSentryUser, b as setTags, d as logException, f as logInfo, n as createChatSdkLogger, o as getActiveTraceId, p as logWarn, t as buildTurnFailureResponse, u as logError, v as setSpanAttributes, w as withSpan } from "./logging-BPBx6WF-.js";
4
- import { a as getChatConfig, c as getSlackClientId, d as getSlackSigningSecret, h as normalizeSlackEmojiName, l as getSlackClientSecret, n as botConfig, s as getSlackBotToken } from "./config-CYvEow1F.js";
1
+ import { $t as recordFinishedTurnForAutomatedLimit, B as isListedScheduledAutomation, Cn as createUserTokenStore, D as renderBlockText, E as renderAttachmentText, F as resolveSlackChannelIdFromThreadId, G as readScheduledAutomation, I as listThreadReplies, K as saveScheduledAutomation, M as parseSlackThreadId, N as readSlackRawMessageContext, On as AuthorizationFlowDisabledError, P as resolveSlackChannelIdFromMessage, Pt as getConversationWorkState, Q as effectiveTaskOutcomes, Qt as maybePostAutomatedTurnLimitNotice, Tn as RetryableDeliveryError, V as listPublicScheduledAutomationsForTeams, W as parseScheduledAutomationRow, Z as eventAutomationTriggerAvailable, _n as truncateStatusText, _t as getEventCatalog, a as isExperimentalFeatureEnabled, at as listEventAutomationsCreatedBy, bn as removeReactionFromMessage, bt as appendAndEnqueueExclusiveInboundMessage, c as createContextCompactor, et as deleteEventAutomation, gn as normalizeSlackStatusText, gt as isEventMailboxMetadata, hn as normalizeSlackReplyMarkdown, ht as EVENT_WAIT_MS, it as listDeletedEventAutomationsCreatedBy, j as storeAttachment, kn as shouldEmitDevAgentTrace, mn as formatSlackLink, ot as listPublicEventAutomationsForTeams, pn as escapeSlackMrkdwnText, rt as getEventAutomation, s as executeAgentRun, t as createAgentRunner, tt as eventAutomationBelongsToUser, v as PluginCredentialFailureError, vn as addReactionToMessage, wn as buildSteeringPiMessage, xt as appendAndEnqueueInboundMessage, y as latestProgressStatus, yn as postSlackMessage } from "./agent-runner-DtrpkWV5.js";
2
+ import { f as escapeXml, i as completeText, r as completeObject, v as isProviderRetryError } from "./client-BN5U3CGw.js";
3
+ import { C as withLogContext, I as isRecord, L as toOptionalNumber, R as toOptionalString, _ as setSentryUser, b as setTags, d as logException, f as logInfo, n as createChatSdkLogger, o as getActiveTraceId, p as logWarn, t as buildTurnFailureResponse, u as logError, v as setSpanAttributes, w as withSpan } from "./logging-Muw6EXro.js";
4
+ import { a as getChatConfig, c as getSlackClientId, d as getSlackSigningSecret, h as normalizeSlackEmojiName, l as getSlackClientSecret, n as botConfig, s as getSlackBotToken } from "./config-C4xZrx7G.js";
5
5
  import { o as modelIdForProfile, r as defaultModelId } from "./model-profile-BwU8mqwD.js";
6
6
  import { a as createActor, b as parseSlackMessageTs, c as isActorUserId, l as isUserActor, o as createSlackActor, p as parseSlackChannelId, s as createSlackResumeActor, t as credentialContextForActor, u as parseActorUserId } from "./context-0Et9iVSB.js";
7
- import { $t as getDb, B as downloadPrivateSlackFile, Ft as buildSentryConversationUrl, G as isDmChannel, H as getHeaderString, It as getSlackFileId, K as normalizeSlackConversationId, Qt as getConversationStore, Rt as readAttachmentVisionSummary, U as getSlackClient, Xt as getConversationEventStore, en as getSqlExecutor, gn as createSlackDestination, gt as getDashboardConversationLink, ht as JUNIOR_THREAD_STATE_TTL_MS, o as getPluginSlackConversationLink, ot as cancelSubscriptions, q as runWithSlackInstallationToken, vn as requireSlackDestination, z as SlackActionError, zt as recordSlackAttachment } from "./agent-hooks-bEwEJhlg.js";
7
+ import { $t as getConversationStore, B as downloadPrivateSlackFile, Bt as recordSlackAttachment, G as isDmChannel, H as getHeaderString, It as buildSentryConversationUrl, K as normalizeSlackConversationId, Lt as getSlackFileId, U as getSlackClient, Zt as getConversationEventStore, _n as createSlackDestination, _t as getDashboardObjectIconLink, en as getDb, gt as getDashboardConversationLink, ht as JUNIOR_THREAD_STATE_TTL_MS, o as getPluginSlackConversationLink, ot as cancelSubscriptions, q as runWithSlackInstallationToken, tn as getSqlExecutor, yn as requireSlackDestination, z as SlackActionError, zt as readAttachmentVisionSummary } from "./agent-hooks-BfjhfMIy.js";
8
8
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
9
- import { D as juniorIdentities, O as juniorUsers, o as juniorSchedulerTasks } from "./executor-BXMlFrV6.js";
10
- import { I as readMessageAttachments, R as isVisionImageMediaType, tt as instructionProvenanceFor } from "./conversation-BnhOMfEB.js";
11
- import { $ as fallbackShortTitle, A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, N as loadConversationProjection, O as trimTrailingAssistantMessages, P as loadProjection, Q as resolveConversationTitle, W as recordSubscribedReplyRoute, Y as persistConversationMessages, Z as persistConversationMessageSummaries, a as completeTurnRecord, at as estimateConversationContextTokens, c as listTurnSummaries, ct as markConversationMessage, dt as turnHasReply, ft as upsertConversationMessage, i as abandonTurnRecord, it as createConversationMemoryService, j as commitMessages, l as recordTurnSummary, lt as normalizeConversationText, n as loadTurnCheckpoint, nt as appendThreadContextMessages, o as failTurnRecord, ot as getConversationMessageSlackTs, p as buildTurnErrorResponse, pt as estimateTextTokens, r as saveTurnCheckpoint, rt as buildConversationContext, s as getTurnRecord, st as isHumanConversationMessage, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-oZYD3-Ar.js";
12
- import { E as acquireActiveLock, O as withLock, T as MUTATION_LOCK_TTL_MS, w as getStateAdapter } from "./profile-upzC-wN1.js";
13
- import { a as isPendingAuthLatestRequest, o as buildDeterministicAssistantMessageId, r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-CHUjr_6d.js";
14
- import { _ as markTurnFailed, c as CooperativeTurnYieldError, d as getConversationTurnBoundaryError, f as isCooperativeTurnYieldError, g as markTurnCompleted, h as markTurnClosed, l as TurnInputCommitLostError, m as isTurnInputDeferredError, p as isTurnInputCommitLostError, r as getAssistantReplyText, s as ConversationTurnBoundaryError, u as TurnInputDeferredError, v as startActiveTurn } from "./oauth-authorization-Cq1GaLIP.js";
15
- import { a as EVENT_SYSTEM_ACTOR, i as EVENT_MESSAGE_AUTHOR, o as isEventConversationMessage } from "./prompt-CZIQcPHy.js";
16
- import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline } from "./job-queue-AI0_QAgc.js";
9
+ import { D as juniorIdentities, O as juniorUsers, o as juniorSchedulerTasks } from "./executor-DUqeOd8y.js";
10
+ import { I as readMessageAttachments, R as isVisionImageMediaType, tt as instructionProvenanceFor } from "./conversation-DOI6Y60M.js";
11
+ import { $ as fallbackShortTitle, A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, N as loadConversationProjection, O as trimTrailingAssistantMessages, P as loadProjection, Q as resolveConversationTitle, W as recordSubscribedReplyRoute, Y as persistConversationMessages, Z as persistConversationMessageSummaries, a as completeTurnRecord, at as estimateConversationContextTokens, c as listTurnSummaries, ct as markConversationMessage, dt as turnHasReply, ft as upsertConversationMessage, i as abandonTurnRecord, it as createConversationMemoryService, j as commitMessages, l as recordTurnSummary, lt as normalizeConversationText, n as loadTurnCheckpoint, nt as appendThreadContextMessages, o as failTurnRecord, ot as getConversationMessageSlackTs, p as buildTurnErrorResponse, pt as estimateTextTokens, r as saveTurnCheckpoint, rt as buildConversationContext, s as getTurnRecord, st as isHumanConversationMessage, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-DEYb3Fqm.js";
12
+ import { E as acquireActiveLock, O as withLock, T as MUTATION_LOCK_TTL_MS, w as getStateAdapter } from "./profile-25NkcK4S.js";
13
+ import { a as isPendingAuthLatestRequest, o as buildDeterministicAssistantMessageId, r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-pYQpJmtu.js";
14
+ import { _ as markTurnFailed, c as CooperativeTurnYieldError, d as getConversationTurnBoundaryError, f as isCooperativeTurnYieldError, g as markTurnCompleted, h as markTurnClosed, l as TurnInputCommitLostError, m as isTurnInputDeferredError, p as isTurnInputCommitLostError, r as getAssistantReplyText, s as ConversationTurnBoundaryError, u as TurnInputDeferredError, v as startActiveTurn } from "./oauth-authorization-CrD-xb8a.js";
15
+ import { a as EVENT_SYSTEM_ACTOR, i as EVENT_MESSAGE_AUTHOR, o as isEventConversationMessage } from "./prompt-9C-wUwwx.js";
16
+ import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline } from "./job-queue-C1AJ5uJt.js";
17
17
  import { c as sumUtcHoursIntoSixHours, m as healthReportSchema, t as webMessageId } from "./web-message-id-xPI_EFSC.js";
18
- import { C as readAutomationExecutionStatusDays, D as readAutomationRuns, E as readAutomationExecutions, S as readAutomationExecutionHours, T as readAutomationExecutionSummaries, _ as markDispatchFailed, a as confirmDispatchMailboxAppend, b as readAutomationExecutionByConversationId, c as getDispatchInputMessageId, f as isTerminalDispatchStatus, g as markDispatchCompleted, h as markDispatchBlocked, i as claimDispatchMailboxAppend, l as getDispatchRecord, m as markDispatchAwaitingResume, n as scheduleSessionCompletedPluginTasks, s as getDispatchConversationId, t as processPluginTask, u as getDispatchTurnId, v as markDispatchRunning, w as readAutomationExecutionStatusHours, x as readAutomationExecutionDays, y as emptyAutomationRunWindows } from "./task-runner-S3QtH38c.js";
19
- import { i as resolveAgentInvocationId, o as AgentRunError, s as executeTurn, t as createAgentInvocationWorker } from "./work-B9koS8sW.js";
20
- import { n as getTurnLifecycle, t as ConversationTurnLifecycleService } from "./turn-lifecycle-CdiIejXH.js";
21
- import { a as persistThreadState, c as configValueSchema, i as persistThreadRuntimeState, n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState, t as getLocationConfigurationService } from "./thread-state-C_arVuaN.js";
22
- import { a as getPausedTurnRequest, c as getTurnAuthorization, i as createPausedTurns, n as deleteWebAuthorization, s as wakePausedTurn, t as createWebAuthorization } from "./web-authorization-r2lKYKJ2.js";
23
- import { n as resolveTurnSessionRouting } from "./turn-session-routing-DyLGd_wU.js";
24
- import { t as bindSpawnAgent } from "./spawn-DRK9TBgY.js";
25
- import { a as persistAuthPauseTurnState, c as getTurnUserSlackMessageTs, d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, n as getAgentTurnDiagnosticsAttributes, o as getTurnUserMessage, r as requireTurnFailureEventId, s as getTurnUserReplyAttachmentContext, t as finalizeFailedTurnReplyWithEvent, u as getInterruptionMarker } from "./turn-failure-response-DarwGYgC.js";
26
- import { r as storeInputImages } from "./images-8siTAUNW.js";
18
+ import { C as readAutomationExecutionStatusDays, D as readAutomationRuns, E as readAutomationExecutions, S as readAutomationExecutionHours, T as readAutomationExecutionSummaries, _ as markDispatchFailed, a as confirmDispatchMailboxAppend, b as readAutomationExecutionByConversationId, c as getDispatchInputMessageId, f as isTerminalDispatchStatus, g as markDispatchCompleted, h as markDispatchBlocked, i as claimDispatchMailboxAppend, l as getDispatchRecord, m as markDispatchAwaitingResume, n as scheduleSessionCompletedPluginTasks, s as getDispatchConversationId, t as processPluginTask, u as getDispatchTurnId, v as markDispatchRunning, w as readAutomationExecutionStatusHours, x as readAutomationExecutionDays, y as emptyAutomationRunWindows } from "./task-runner-DH8M0m7l.js";
19
+ import { i as resolveAgentInvocationId, o as AgentRunError, s as executeTurn, t as createAgentInvocationWorker } from "./work-B0cAo7nv.js";
20
+ import { n as getTurnLifecycle, t as ConversationTurnLifecycleService } from "./turn-lifecycle-DHcpS20C.js";
21
+ import { a as persistThreadState, c as configValueSchema, i as persistThreadRuntimeState, n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState, t as getLocationConfigurationService } from "./thread-state-CS67FjfN.js";
22
+ import { a as getPausedTurnRequest, c as getTurnAuthorization, i as createPausedTurns, n as deleteWebAuthorization, s as wakePausedTurn, t as createWebAuthorization } from "./web-authorization-DrXlSd3Y.js";
23
+ import { n as resolveTurnSessionRouting } from "./turn-session-routing-DlaCHHlu.js";
24
+ import { t as bindSpawnAgent } from "./spawn-z0fRvZH9.js";
25
+ import { a as persistAuthPauseTurnState, c as getTurnUserSlackMessageTs, d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, n as getAgentTurnDiagnosticsAttributes, o as getTurnUserMessage, r as requireTurnFailureEventId, s as getTurnUserReplyAttachmentContext, t as finalizeFailedTurnReplyWithEvent, u as getInterruptionMarker } from "./turn-failure-response-DcaALKfm.js";
26
+ import { r as storeInputImages } from "./images-B5JLFwJR.js";
27
27
  import { z } from "zod";
28
28
  import { createHash } from "node:crypto";
29
29
  import { and, desc, eq, inArray, lt, notInArray, or, sql } from "drizzle-orm";
30
- import { createEventSource, createLocalSource, createSlackSource, createWebSource, localDestinationSchema, objectFactFields } from "@sentry/junior-plugin-api";
30
+ import { createEventSource, createLocalSource, createSlackSource, createWebSource, localDestinationSchema, objectFactFields, objectPresentation, objectTypeSchema } from "@sentry/junior-plugin-api";
31
31
  import { del, get, put } from "@vercel/blob";
32
32
  import { Message, ThreadImpl, stringifyMarkdown } from "chat";
33
33
  import { createSlackAdapter } from "@chat-adapter/slack";
@@ -328,9 +328,11 @@ function preview(text, length) {
328
328
  /** Show an Automation as a native Work Object, not an operation receipt. */
329
329
  function renderSlackAutomationCard(card) {
330
330
  const title = preview(card.title, 160);
331
+ const iconUrl = getDashboardObjectIconLink("workflow");
331
332
  const trigger = preview(card.trigger, 500);
332
333
  const warning = card.warning ? preview(card.warning, 500) : null;
333
334
  const text = [
335
+ "Automation",
334
336
  card.url ? formatSlackLink(card.url, title) : escapeSlackMrkdwnText(title),
335
337
  card.status ? escapeSlackMrkdwnText(card.status) : null,
336
338
  escapeSlackMrkdwnText(trigger),
@@ -352,7 +354,11 @@ function renderSlackAutomationCard(card) {
352
354
  entity_payload: {
353
355
  attributes: {
354
356
  title: { text: title },
355
- display_type: "Automation"
357
+ display_type: "Automation",
358
+ product_icon: iconUrl ? {
359
+ url: iconUrl,
360
+ alt_text: "Automation"
361
+ } : void 0
356
362
  },
357
363
  custom_fields: [
358
364
  ...card.status ? [{
@@ -392,12 +398,17 @@ function renderSlackObjectCard(card, conversationId) {
392
398
  warning: card.warning ?? null,
393
399
  status: card.status
394
400
  });
401
+ const presentation = objectPresentation(card);
402
+ const type = card.displayType ?? presentation.label;
403
+ const iconUrl = getDashboardObjectIconLink(presentation.icon);
395
404
  const title = card.title.slice(0, 160);
396
405
  const facts = objectFactFields(card.facts);
397
406
  const text = [
407
+ escapeSlackMrkdwnText(type),
398
408
  card.url ? formatSlackLink(card.url, title) : escapeSlackMrkdwnText(title),
399
409
  escapeSlackMrkdwnText(card.label),
400
410
  card.status ? escapeSlackMrkdwnText(card.status) : null,
411
+ card.warning ? escapeSlackMrkdwnText(`Needs attention: ${card.warning}`) : null,
401
412
  ...facts.map((field) => escapeSlackMrkdwnText(`${field.label}: ${field.value}`))
402
413
  ].filter(Boolean).join("\n");
403
414
  if (!card.url) return {
@@ -408,13 +419,22 @@ function renderSlackObjectCard(card, conversationId) {
408
419
  const attributes = {
409
420
  title: { text: title },
410
421
  display_id: card.label,
411
- display_type: card.displayType ?? (card.objectType === "code_change" ? "Pull request" : task ? "Issue" : "Item"),
422
+ display_type: type,
423
+ product_icon: iconUrl ? {
424
+ url: iconUrl,
425
+ alt_text: `${type}${card.status ? `: ${card.status}` : ""}`
426
+ } : void 0,
412
427
  product_name: card.plugin
413
428
  };
414
- const customFields = facts.map((field) => ({
429
+ const customFields = [...facts.map((field) => ({
415
430
  ...field,
416
431
  type: "string"
417
- }));
432
+ })), ...card.warning ? [{
433
+ key: "warning",
434
+ label: "Needs attention",
435
+ type: "string",
436
+ value: card.warning
437
+ }] : []];
418
438
  return {
419
439
  text,
420
440
  entity: {
@@ -2462,7 +2482,8 @@ const slackConversationMessageMetadataSchema = z.union([slackConversationMessage
2462
2482
  namespace: z.string(),
2463
2483
  identifier: z.string(),
2464
2484
  subscriptionId: z.string(),
2465
- trustedSummary: z.string().optional()
2485
+ trustedSummary: z.string().optional(),
2486
+ objectType: objectTypeSchema.optional()
2466
2487
  }).strict()
2467
2488
  }).strict()]);
2468
2489
  function requireSlackAuthorId(message) {
@@ -7181,6 +7202,7 @@ function createConversationTurnWorker(agentRunner, deliverMessage) {
7181
7202
  ...source.kind === "web" ? { source: "web" } : void 0,
7182
7203
  ...event ? {
7183
7204
  eventType: event.eventType,
7205
+ eventObjectType: event.objectType,
7184
7206
  ...event.trustedSummary ? { trustedSummary: event.trustedSummary } : void 0
7185
7207
  } : void 0
7186
7208
  }