@sentry/junior 0.265.0 → 0.266.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 (62) hide show
  1. package/dist/{adapter-cUkPH3Om.js → adapter-eRFA_naf.js} +1 -1
  2. package/dist/{admin-Cf0rDmWV.js → admin-tILpP51p.js} +1 -1
  3. package/dist/{agent-runner-C6MwHJEs.js → agent-runner-BtYK7bht.js} +24 -24
  4. package/dist/api/schema.d.ts +4 -0
  5. package/dist/api/schema.js +4 -4
  6. package/dist/api.js +28 -28
  7. package/dist/app.js +30 -29
  8. package/dist/{assistant-reply-UPA8vKlC.js → assistant-reply-UyzAfZQo.js} +1 -1
  9. package/dist/{automation-2RbKzpMT.js → automation-BKpY9LPa.js} +1 -1
  10. package/dist/{briefs-DRjx8kQ9.js → briefs-DgfWMU7e.js} +5 -5
  11. package/dist/{catalog-runtime-D3qbJlYz.js → catalog-runtime-DAJjAbSx.js} +1 -1
  12. package/dist/cli/chat.js +15 -15
  13. package/dist/cli/check.js +3 -3
  14. package/dist/cli/main.js +3 -3
  15. package/dist/cli/plugins.js +4 -4
  16. package/dist/cli/snapshot-create.js +4 -4
  17. package/dist/cli/upgrade.js +3 -3
  18. package/dist/{client-DX34VNtH.js → client-B0YZfxNy.js} +2 -2
  19. package/dist/{config-BayQ9hHH.js → config-C0UwYqDK.js} +2 -2
  20. package/dist/{connections-mpN5Lsnj.js → connections-Bwu3VORi.js} +11 -11
  21. package/dist/{conversation-B0baEwoA.js → conversation-DF4rUcjb.js} +6 -2
  22. package/dist/{conversation-privacy-frjQCJa9.js → conversation-privacy-CY7JVjxn.js} +1 -1
  23. package/dist/{credential-sync-CZmyDNdR.js → credential-sync-VGAMUTGp.js} +14 -14
  24. package/dist/{credentialed-C6pKlB1p.js → credentialed-enF5Bf3y.js} +19 -13
  25. package/dist/{executor-CAr7xQr2.js → executor-TnWbvL09.js} +2 -2
  26. package/dist/{history-AY8rs-FR.js → history-C84mlAwO.js} +2 -1
  27. package/dist/{images-B2yA3HWE.js → images-BKQqSi5W.js} +3 -3
  28. package/dist/instrumentation.js +2 -2
  29. package/dist/{job-queue-Cjo6Yg_b.js → job-queue-DBpHmKnd.js} +2 -2
  30. package/dist/{logging-D2QBriUo.js → logging-Ce0mXZ8J.js} +1 -1
  31. package/dist/{message-C9ymnpBS.js → message-VZ3DFpGb.js} +4 -4
  32. package/dist/nitro.js +3 -3
  33. package/dist/{oauth-callback-server-BtMf3TPZ.js → oauth-callback-server-CpqWLjVY.js} +2 -2
  34. package/dist/{prompt-CvaDdSX3.js → prompt-BcCGlmg2.js} +1 -1
  35. package/dist/{registry-COTeZ2cV.js → registry-1BEIPdbT.js} +1 -1
  36. package/dist/{resolve-g9PKz9pH.js → resolve-BSHHkEGE.js} +3 -3
  37. package/dist/{result-COnC42GR.js → result-CwOpzqdh.js} +8 -8
  38. package/dist/{runner-BnTNS7x_.js → runner-CEaX04kz.js} +11 -11
  39. package/dist/{sandbox-egress-signals-C_IIdLFk.js → sandbox-egress-signals-BwtGHwqa.js} +1 -1
  40. package/dist/{schema-D5Amlzkp.js → schema-RsaBHxRH.js} +2 -2
  41. package/dist/{service-account-YdYftwV2.js → service-account-6wC76eBZ.js} +3 -3
  42. package/dist/{service-account-CwvToidT.js → service-account-Dg4lIbHm.js} +3 -3
  43. package/dist/{session-stop-CpCUy1ZJ.js → session-stop-tZOw9AJD.js} +11 -11
  44. package/dist/{skills-Bb2KaJ3m.js → skills-DzyGN7wd.js} +2 -2
  45. package/dist/{spawn-mbTcrLb3.js → spawn-6rokq7l_.js} +2 -2
  46. package/dist/{store-CqRnaZSq.js → store-DcKkzrdt.js} +3 -3
  47. package/dist/{store-DdT74Lvq.js → store-FALy-JQb.js} +6 -6
  48. package/dist/{task-queue-8XjDIORF.js → task-queue-Bg4RS2Gy.js} +3 -3
  49. package/dist/{task-runner-6mLmG6g_.js → task-runner-8N5LIkSg.js} +11 -11
  50. package/dist/{tasks-DGbrur6x.js → tasks-DDT-J3Rf.js} +13 -13
  51. package/dist/{thread-state-D45lz-oC.js → thread-state-cprEaxgl.js} +5 -5
  52. package/dist/{turn-failure-response-CaEPLSBn.js → turn-failure-response-C8sMdsdX.js} +8 -8
  53. package/dist/{turn-lifecycle-C35IyRGp.js → turn-lifecycle-DaBVoz7h.js} +2 -2
  54. package/dist/{turn-session-routing-BKx6rfVd.js → turn-session-routing-a9CHX-w6.js} +1 -1
  55. package/dist/{validation-C0X3CX51.js → validation-C2lllinq.js} +1 -1
  56. package/dist/{version-BPHgJwnm.js → version-oaLfxxnf.js} +1 -1
  57. package/dist/version.js +1 -1
  58. package/dist/{viewer-B2wXNspU.js → viewer-BpE6Z3qf.js} +4 -4
  59. package/dist/{web-input-Y6aXvmfa.js → web-input-B-bMjD1V.js} +30 -30
  60. package/dist/{work-DMbqK0kT.js → work-VX1SHWha.js} +52 -51
  61. package/dist/{worker-B-rDJ3XN.js → worker-hook-y_Y.js} +5 -5
  62. package/package.json +6 -6
@@ -1,8 +1,8 @@
1
- import { Z as persistConversationMessages, yn as createDurableLocationConfigurationService } from "./tasks-DGbrur6x.js";
2
- import { B as toOptionalNumber, V as toOptionalString, z as isRecord } from "./logging-D2QBriUo.js";
3
- import { f as getDb } from "./viewer-B2wXNspU.js";
4
- import { ln as JUNIOR_THREAD_STATE_TTL_MS } from "./credentialed-C6pKlB1p.js";
5
- import { r as getStateAdapter } from "./adapter-cUkPH3Om.js";
1
+ import { Z as persistConversationMessages, yn as createDurableLocationConfigurationService } from "./tasks-DDT-J3Rf.js";
2
+ import { B as toOptionalNumber, V as toOptionalString, z as isRecord } from "./logging-Ce0mXZ8J.js";
3
+ import { f as getDb } from "./viewer-BpE6Z3qf.js";
4
+ import { ln as JUNIOR_THREAD_STATE_TTL_MS } from "./credentialed-enF5Bf3y.js";
5
+ import { r as getStateAdapter } from "./adapter-eRFA_naf.js";
6
6
  // src/chat/state/conversation.ts
7
7
  function defaultConversationState() {
8
8
  return {
@@ -1,12 +1,12 @@
1
- import { X as hydrateConversationMessages, cn as buildDeterministicTurnId, ut as markConversationMessage, wt as clearPendingAuth } from "./tasks-DGbrur6x.js";
2
- import { _ as getProviderErrorAttributes, g as findProviderError, m as ProviderError, v as getProviderErrorUserMessage } from "./client-DX34VNtH.js";
3
- import { t as buildTurnFailureResponse, z as isRecord } from "./logging-D2QBriUo.js";
1
+ import { X as hydrateConversationMessages, cn as buildDeterministicTurnId, ut as markConversationMessage, wt as clearPendingAuth } from "./tasks-DDT-J3Rf.js";
2
+ import { _ as getProviderErrorAttributes, g as findProviderError, m as ProviderError, v as getProviderErrorUserMessage } from "./client-B0YZfxNy.js";
3
+ import { t as buildTurnFailureResponse, z as isRecord } from "./logging-Ce0mXZ8J.js";
4
4
  import { g as parseSlackMessageTs } from "./actor-tlxzqaRe.js";
5
- import { f as getDb, l as getConversationEventStore } from "./viewer-B2wXNspU.js";
6
- import { Zn as listConversationAnnotations } from "./credentialed-C6pKlB1p.js";
7
- import { F as readMessageCardRefs, I as removedCardSchema, L as resolveMessageCards } from "./conversation-B0baEwoA.js";
8
- import { D as parseAgentInvocationResultMessageId, J as markTurnClosed, Y as markTurnCompleted, c as getAgentInvocation, m as getAgentInvocationTurnId } from "./store-CqRnaZSq.js";
9
- import { o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-D45lz-oC.js";
5
+ import { f as getDb, l as getConversationEventStore } from "./viewer-BpE6Z3qf.js";
6
+ import { Zn as listConversationAnnotations } from "./credentialed-enF5Bf3y.js";
7
+ import { F as readMessageCardRefs, I as removedCardSchema, L as resolveMessageCards } from "./conversation-DF4rUcjb.js";
8
+ import { D as parseAgentInvocationResultMessageId, J as markTurnClosed, Y as markTurnCompleted, c as getAgentInvocation, m as getAgentInvocationTurnId } from "./store-DcKkzrdt.js";
9
+ import { o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-cprEaxgl.js";
10
10
  // src/chat/conversations/pending-cards.ts
11
11
  /**
12
12
  * Add the cards that tool results selected since the last visible assistant
@@ -1,4 +1,4 @@
1
- import { l as getConversationEventStore } from "./viewer-B2wXNspU.js";
1
+ import { l as getConversationEventStore } from "./viewer-BpE6Z3qf.js";
2
2
  // src/chat/conversations/turn-lifecycle.ts
3
3
  /** Persist correlated turn lifecycle facts with retry-safe terminal exclusion. */
4
4
  var ConversationTurnLifecycleService = class {
@@ -19,7 +19,7 @@ var ConversationTurnLifecycleService = class {
19
19
  }
20
20
  }]);
21
21
  }
22
- /** Record successful or intentional-silence completion once. */
22
+ /** Record a completion that is not a failure once. */
23
23
  async complete(input) {
24
24
  await this.events.append(input.conversationId, [{
25
25
  idempotencyKey: `turn:${input.turnId}:terminal`,
@@ -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("./viewer-B2wXNspU.js").then((n) => n.c)).getConversationStore();
37
+ const conversationStore = args.conversationStore ?? (await import("./viewer-BpE6Z3qf.js").then((n) => n.c)).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-nwUcYXjP.js";
2
- import { n as pluginCatalogRuntime } from "./catalog-runtime-D3qbJlYz.js";
2
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-DAJjAbSx.js";
3
3
  import { isDeepStrictEqual } from "node:util";
4
4
  // src/chat/plugins/validation.ts
5
5
  var validation_exports = /* @__PURE__ */ __exportAll({
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "0.265.0";
2
+ var version = "0.266.0";
3
3
  // src/version.ts
4
4
  /** Installed Junior package version, or `unknown` when package metadata is unavailable. */
5
5
  const JUNIOR_VERSION = typeof version === "string" && version.trim() ? version : "unknown";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export { t as JUNIOR_VERSION } from "./version-BPHgJwnm.js";
1
+ export { t as JUNIOR_VERSION } from "./version-oaLfxxnf.js";
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { i as getChatConfig } from "./config-BayQ9hHH.js";
3
- import { I as GOOGLE_IDENTITY_PROVIDER, R as normalizeIdentityEmail } from "./logging-D2QBriUo.js";
2
+ import { i as getChatConfig } from "./config-C0UwYqDK.js";
3
+ import { I as GOOGLE_IDENTITY_PROVIDER, R as normalizeIdentityEmail } from "./logging-Ce0mXZ8J.js";
4
4
  import { d as parseSlackTeamId, o as parseActorUserId, u as parseSlackChannelReferenceId } from "./actor-tlxzqaRe.js";
5
5
  import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers, o as conversationReadColumns, s as juniorConversations } from "./agent-invocations-CxKldAeB.js";
6
- import { _ as juniorConversationAnnotations, d as juniorConversationBindings, h as juniorConversationEvents, m as juniorConversationMetrics, p as CONVERSATION_METRICS, t as createJuniorSqlExecutor, u as juniorConversationParticipants } from "./executor-CAr7xQr2.js";
7
- import { c as newConversationEventSchema, h as usageSchema, l as encodeHistoryPayload, o as decodeStoredConversationEvent, r as conversationEventDataSchema, s as historyReplacementSchema } from "./history-AY8rs-FR.js";
6
+ import { _ as juniorConversationAnnotations, d as juniorConversationBindings, h as juniorConversationEvents, m as juniorConversationMetrics, p as CONVERSATION_METRICS, t as createJuniorSqlExecutor, u as juniorConversationParticipants } from "./executor-TnWbvL09.js";
7
+ import { c as newConversationEventSchema, h as usageSchema, l as encodeHistoryPayload, o as decodeStoredConversationEvent, r as conversationEventDataSchema, s as historyReplacementSchema } from "./history-C84mlAwO.js";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { and, asc, desc, eq, gt, gte, inArray, isNull, lt, lte, ne, or, sql } from "drizzle-orm";
10
10
  import { destinationSchema, identitySchema, locationSchema, sourceSchema, userSchema } from "@sentry/junior-plugin-api";
@@ -1,37 +1,37 @@
1
- import { $ as persistConversationMessageSummaries, A as commitAcceptedReply, At as abandonTurnRecord, Bt as buildTurnErrorResponse, E as sameDefinitionValue, Et as wasPendingAuthStopped, F as loadProjection, Ft as recordTurnSummary, H as recordAuthorizationCompleted, K as recordSubscribedReplyRoute, Mt as failTurnRecord, N as loadConversationProjection, Nt as getTurnRecord, Ot as loadTurnCheckpoint, Pt as listTurnSummaries, S as automationDefinition, Ut as persistWithRetry, X as hydrateConversationMessages, Z as persistConversationMessages, _ as parseEventAutomationRow, _n as isExperimentalFeatureEnabled, at as buildConversationContext, bn as configValueSchema, bt as AuthorizationFlowDisabledError, c as withScheduledAutomationLock, cn as buildDeterministicTurnId, ct as getConversationMessageSlackTs, dn as getSubscribedReplyPreflightDecision, dt as normalizeConversationText, et as resolveConversationTitle, f as deleteEventAutomation, fn as getThreadStopDecision, ft as recordDeliveredAssistantMessage, gt as PluginCredentialFailureError, h as listDeletedEventAutomationsCreatedBy, i as readScheduledAutomation, it as appendThreadContextMessages, j as commitMessages, jt as completeTurnRecord, kt as saveTurnCheckpoint, lt as isHumanConversationMessage, mt as upsertConversationMessage, nt as fallbackShortTitle, o as saveScheduledAutomationInLock, ot as createConversationMemoryService, pt as turnHasReply, r as parseScheduledAutomationRow, rn as trimTrailingAssistantMessages, sn as buildDeterministicAssistantMessageId, st as estimateConversationContextTokens, un as decideSubscribedThreadReply, ut as markConversationMessage, w as listAutomationVersions, wt as clearPendingAuth } from "./tasks-DGbrur6x.js";
2
- import { a as completeText, p as escapeXml, r as completeDecision, y as isProviderRetryError } from "./client-DX34VNtH.js";
3
- import { c as getSlackClientSecret, i as getChatConfig, l as getSlackSigningSecret, n as botConfig, o as getSlackBotToken, s as getSlackClientId, v as normalizeSlackEmojiName, y as createS3AttachmentStorage } from "./config-BayQ9hHH.js";
4
- import { B as toOptionalNumber, T as withSpan, V as toOptionalString, d as logError, f as logException, m as logWarn, n as createChatSdkLogger, o as getActiveTraceId, p as logInfo, t as buildTurnFailureResponse, v as setSentryUser, w as withLogContext, x as setTags, y as setSpanAttributes, z as isRecord } from "./logging-D2QBriUo.js";
1
+ import { $ as persistConversationMessageSummaries, A as commitAcceptedReply, At as abandonTurnRecord, Bt as buildTurnErrorResponse, E as sameDefinitionValue, Et as wasPendingAuthStopped, F as loadProjection, Ft as recordTurnSummary, H as recordAuthorizationCompleted, K as recordSubscribedReplyRoute, Mt as failTurnRecord, N as loadConversationProjection, Nt as getTurnRecord, Ot as loadTurnCheckpoint, Pt as listTurnSummaries, S as automationDefinition, Ut as persistWithRetry, X as hydrateConversationMessages, Z as persistConversationMessages, _ as parseEventAutomationRow, _n as isExperimentalFeatureEnabled, at as buildConversationContext, bn as configValueSchema, bt as AuthorizationFlowDisabledError, c as withScheduledAutomationLock, cn as buildDeterministicTurnId, ct as getConversationMessageSlackTs, dn as getSubscribedReplyPreflightDecision, dt as normalizeConversationText, et as resolveConversationTitle, f as deleteEventAutomation, fn as getThreadStopDecision, ft as recordDeliveredAssistantMessage, gt as PluginCredentialFailureError, h as listDeletedEventAutomationsCreatedBy, i as readScheduledAutomation, it as appendThreadContextMessages, j as commitMessages, jt as completeTurnRecord, kt as saveTurnCheckpoint, lt as isHumanConversationMessage, mt as upsertConversationMessage, nt as fallbackShortTitle, o as saveScheduledAutomationInLock, ot as createConversationMemoryService, pt as turnHasReply, r as parseScheduledAutomationRow, rn as trimTrailingAssistantMessages, sn as buildDeterministicAssistantMessageId, st as estimateConversationContextTokens, un as decideSubscribedThreadReply, ut as markConversationMessage, w as listAutomationVersions, wt as clearPendingAuth } from "./tasks-DDT-J3Rf.js";
2
+ import { a as completeText, p as escapeXml, r as completeDecision, y as isProviderRetryError } from "./client-B0YZfxNy.js";
3
+ import { c as getSlackClientSecret, i as getChatConfig, l as getSlackSigningSecret, n as botConfig, o as getSlackBotToken, s as getSlackClientId, v as normalizeSlackEmojiName, y as createS3AttachmentStorage } from "./config-C0UwYqDK.js";
4
+ import { B as toOptionalNumber, T as withSpan, V as toOptionalString, d as logError, f as logException, m as logWarn, n as createChatSdkLogger, o as getActiveTraceId, p as logInfo, t as buildTurnFailureResponse, v as setSentryUser, w as withLogContext, x as setTags, y as setSpanAttributes, z as isRecord } from "./logging-Ce0mXZ8J.js";
5
5
  import { o as modelIdForProfile, r as defaultModelId } from "./model-profile-Bg8EoCKD.js";
6
6
  import { a as isUserActor, g as parseSlackMessageTs, i as isActorUserId, l as parseSlackChannelId, n as createSlackActor, o as parseActorUserId, r as createSlackResumeActor, t as createActor } from "./actor-tlxzqaRe.js";
7
- import { B as requireSlackDestination, R as createSlackDestination, d as getConversationStore, f as getDb, l as getConversationEventStore, p as getSqlExecutor } from "./viewer-B2wXNspU.js";
7
+ import { B as requireSlackDestination, R as createSlackDestination, d as getConversationStore, f as getDb, l as getConversationEventStore, p as getSqlExecutor } from "./viewer-BpE6Z3qf.js";
8
8
  import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers } from "./agent-invocations-CxKldAeB.js";
9
- import { a as juniorAutomationRuns, s as juniorAutomations } from "./executor-CAr7xQr2.js";
10
- import { p as instructionProvenanceFor } from "./history-AY8rs-FR.js";
11
- import { d as actorLogContext, f as credentialContextForActor } from "./registry-COTeZ2cV.js";
12
- import { A as listThreadReplies, D as resolveSlackChannelIdFromMessage, E as readSlackRawMessageContext, I as describeEventAutomationTrigger, L as effectiveTaskOutcomes, O as resolveSlackChannelIdFromThreadId, Q as RetryableDeliveryError, T as parseSlackThreadId, X as buildSteeringPiMessage, Z as withoutSavedSteeringMessages, b as renderBlockText, i as buildAuthPauseResponse, k as getConversationInfo, n as executeAgentRun, nt as shouldEmitDevAgentTrace, p as latestProgressStatus, r as createContextCompactor, t as createAgentRunner, w as storeAttachment, y as renderAttachmentText } from "./agent-runner-C6MwHJEs.js";
13
- import { $t as getHeaderString, Kn as readAttachmentVisionSummary, Nt as cancelSubscriptions, Un as buildSentryConversationUrl, Wn as getSlackFileId, Xt as SlackActionError, Yt as verifyTimerWatchCredentialSubject, Zt as downloadPrivateSlackFile, dn as getDashboardObjectIconLink, dt as normalizeSlackReplyMarkdown, en as getSlackClient, ft as normalizeSlackStatusText, ht as addReactionToMessage, in as runWithSlackInstallationToken, l as getPluginSlackConversationLink, ln as JUNIOR_THREAD_STATE_TTL_MS, lt as escapeSlackMrkdwnText, mt as truncateStatusText, n as createUserTokenStore, nn as isDmChannel, qn as recordSlackAttachment, rn as normalizeSlackConversationId, tr as lookupSlackUser, un as getDashboardConversationLink, ut as formatSlackLink, vt as postSlackMessage, yt as removeReactionFromMessage } from "./credentialed-C6pKlB1p.js";
14
- import { a as acquireActiveLock, i as MUTATION_LOCK_TTL_MS, r as getStateAdapter, s as withLock } from "./adapter-cUkPH3Om.js";
15
- import { B as readMessageAttachments, U as isVisionImageMediaType } from "./conversation-B0baEwoA.js";
16
- import { a as EVENT_SYSTEM_ACTOR, o as isEventConversationMessage } from "./prompt-CvaDdSX3.js";
17
- import { B as ConversationTurnBoundaryError, G as isCooperativeTurnYieldError, H as TurnInputCommitLostError, J as markTurnClosed, K as isTurnInputCommitLostError, U as TurnInputDeferredError, V as CooperativeTurnYieldError, W as getConversationTurnBoundaryError, X as markTurnFailed, Y as markTurnCompleted, Z as startActiveTurn, q as isTurnInputDeferredError } from "./store-CqRnaZSq.js";
18
- import { n as getAssistantReplyText } from "./assistant-reply-UPA8vKlC.js";
19
- import { B as finishedRunReply, F as recordFinishedTurnForAutomatedLimit, M as joinMailboxText, P as maybePostAutomatedTurnLimitNotice, U as runDispatchOutcome, c as isEventMailboxMetadata, d as getEventCatalog, i as skipInputBeforeConversationStop, l as renderEventBatchText, s as eventBatchMessageEvents, u as timerWatchCredentialSubject, x as automationEventCatalog, z as deliversFinalText } from "./session-stop-CpCUy1ZJ.js";
20
- import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline } from "./job-queue-Cjo6Yg_b.js";
21
- import { E as stopConversationWork, g as getConversationWorkState, h as getConversation, m as ensureConversationWake, n as appendAndEnqueueExclusiveInboundMessage, r as appendAndEnqueueInboundMessage, w as requestConversationWork } from "./store-DdT74Lvq.js";
22
- import { l as automationListQuerySchema } from "./automation-2RbKzpMT.js";
9
+ import { a as juniorAutomationRuns, s as juniorAutomations } from "./executor-TnWbvL09.js";
10
+ import { p as instructionProvenanceFor } from "./history-C84mlAwO.js";
11
+ import { d as actorLogContext, f as credentialContextForActor } from "./registry-1BEIPdbT.js";
12
+ import { A as listThreadReplies, D as resolveSlackChannelIdFromMessage, E as readSlackRawMessageContext, I as describeEventAutomationTrigger, L as effectiveTaskOutcomes, O as resolveSlackChannelIdFromThreadId, Q as RetryableDeliveryError, T as parseSlackThreadId, X as buildSteeringPiMessage, Z as withoutSavedSteeringMessages, b as renderBlockText, i as buildAuthPauseResponse, k as getConversationInfo, n as executeAgentRun, nt as shouldEmitDevAgentTrace, p as latestProgressStatus, r as createContextCompactor, t as createAgentRunner, w as storeAttachment, y as renderAttachmentText } from "./agent-runner-BtYK7bht.js";
13
+ import { $t as getHeaderString, Kn as readAttachmentVisionSummary, Nt as cancelSubscriptions, Un as buildSentryConversationUrl, Wn as getSlackFileId, Xt as SlackActionError, Yt as verifyTimerWatchCredentialSubject, Zt as downloadPrivateSlackFile, dn as getDashboardObjectIconLink, dt as normalizeSlackReplyMarkdown, en as getSlackClient, ft as normalizeSlackStatusText, ht as addReactionToMessage, in as runWithSlackInstallationToken, l as getPluginSlackConversationLink, ln as JUNIOR_THREAD_STATE_TTL_MS, lt as escapeSlackMrkdwnText, mt as truncateStatusText, n as createUserTokenStore, nn as isDmChannel, qn as recordSlackAttachment, rn as normalizeSlackConversationId, tr as lookupSlackUser, un as getDashboardConversationLink, ut as formatSlackLink, vt as postSlackMessage, yt as removeReactionFromMessage } from "./credentialed-enF5Bf3y.js";
14
+ import { a as acquireActiveLock, i as MUTATION_LOCK_TTL_MS, r as getStateAdapter, s as withLock } from "./adapter-eRFA_naf.js";
15
+ import { B as readMessageAttachments, U as isVisionImageMediaType } from "./conversation-DF4rUcjb.js";
16
+ import { a as EVENT_SYSTEM_ACTOR, o as isEventConversationMessage } from "./prompt-BcCGlmg2.js";
17
+ import { B as ConversationTurnBoundaryError, G as isCooperativeTurnYieldError, H as TurnInputCommitLostError, J as markTurnClosed, K as isTurnInputCommitLostError, U as TurnInputDeferredError, V as CooperativeTurnYieldError, W as getConversationTurnBoundaryError, X as markTurnFailed, Y as markTurnCompleted, Z as startActiveTurn, q as isTurnInputDeferredError } from "./store-DcKkzrdt.js";
18
+ import { n as getAssistantReplyText } from "./assistant-reply-UyzAfZQo.js";
19
+ import { B as finishedRunReply, F as recordFinishedTurnForAutomatedLimit, M as joinMailboxText, P as maybePostAutomatedTurnLimitNotice, U as runDispatchOutcome, c as isEventMailboxMetadata, d as getEventCatalog, i as skipInputBeforeConversationStop, l as renderEventBatchText, s as eventBatchMessageEvents, u as timerWatchCredentialSubject, x as automationEventCatalog, z as deliversFinalText } from "./session-stop-tZOw9AJD.js";
20
+ import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline } from "./job-queue-DBpHmKnd.js";
21
+ import { E as stopConversationWork, g as getConversationWorkState, h as getConversation, m as ensureConversationWake, n as appendAndEnqueueExclusiveInboundMessage, r as appendAndEnqueueInboundMessage, w as requestConversationWork } from "./store-FALy-JQb.js";
22
+ import { l as automationListQuerySchema } from "./automation-BKpY9LPa.js";
23
23
  import { c as sumUtcHoursIntoSixHours, m as healthReportSchema, t as webMessageId } from "./web-message-id-CJSUiksE.js";
24
- import { A as readAutomationExecutions, D as readAutomationExecutionStatusDays, E as readAutomationExecutionHours, O as readAutomationExecutionStatusHours, S as emptyAutomationRunWindows, T as readAutomationExecutionDays, _ as markDispatchBlocked, a as claimDispatchMailboxAppend, b as markDispatchRunning, c as getDispatchConversationId, d as getDispatchRecord, f as getDispatchTurnId, g as markDispatchAwaitingResume, j as readAutomationRuns, k as readAutomationExecutionSummaries, l as getDispatchIdForConversation, m as isTerminalDispatchStatus, n as scheduleSessionCompletedPluginTasks, o as confirmDispatchMailboxAppend, t as processPluginTask, u as getDispatchInputMessageId, v as markDispatchCompleted, w as readAutomationExecutionByConversationId, y as markDispatchFailed } from "./task-runner-6mLmG6g_.js";
25
- import { a as withAgentInvocationResultActors, c as resolveMailboxTurnWork, i as startAgentInvocationsForChildInput, l as sourceFromTurnInput, o as getAuthPausedConversationTurnId, s as getEventBatchDelayMs, t as enqueueAgentInvocationResult, u as turnInputFactsFromConversationMessage } from "./result-COnC42GR.js";
26
- import { n as getTurnLifecycle, t as ConversationTurnLifecycleService } from "./turn-lifecycle-C35IyRGp.js";
27
- import { i as resolveAgentInvocationId, o as AgentRunError, s as executeTurn, t as createAgentInvocationWorker } from "./work-DMbqK0kT.js";
28
- import { a as persistThreadState, i as persistThreadRuntimeState, n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState, t as getLocationConfigurationService } from "./thread-state-D45lz-oC.js";
29
- import { c as deleteWebAuthorization, d as createPausedTurns, f as getPausedTurnRequest, h as getTurnAuthorization, m as wakePausedTurn, s as createWebAuthorization } from "./connections-mpN5Lsnj.js";
30
- import { n as resolveTurnSessionRouting } from "./turn-session-routing-BKx6rfVd.js";
31
- import { t as bindMessageAgent } from "./message-C9ymnpBS.js";
32
- import { t as bindSpawnAgent } from "./spawn-mbTcrLb3.js";
33
- 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-CaEPLSBn.js";
34
- import { r as storeInputImages } from "./images-B2yA3HWE.js";
24
+ import { A as readAutomationExecutions, D as readAutomationExecutionStatusDays, E as readAutomationExecutionHours, O as readAutomationExecutionStatusHours, S as emptyAutomationRunWindows, T as readAutomationExecutionDays, _ as markDispatchBlocked, a as claimDispatchMailboxAppend, b as markDispatchRunning, c as getDispatchConversationId, d as getDispatchRecord, f as getDispatchTurnId, g as markDispatchAwaitingResume, j as readAutomationRuns, k as readAutomationExecutionSummaries, l as getDispatchIdForConversation, m as isTerminalDispatchStatus, n as scheduleSessionCompletedPluginTasks, o as confirmDispatchMailboxAppend, t as processPluginTask, u as getDispatchInputMessageId, v as markDispatchCompleted, w as readAutomationExecutionByConversationId, y as markDispatchFailed } from "./task-runner-8N5LIkSg.js";
25
+ import { a as withAgentInvocationResultActors, c as resolveMailboxTurnWork, i as startAgentInvocationsForChildInput, l as sourceFromTurnInput, o as getAuthPausedConversationTurnId, s as getEventBatchDelayMs, t as enqueueAgentInvocationResult, u as turnInputFactsFromConversationMessage } from "./result-CwOpzqdh.js";
26
+ import { n as getTurnLifecycle, t as ConversationTurnLifecycleService } from "./turn-lifecycle-DaBVoz7h.js";
27
+ import { i as resolveAgentInvocationId, o as AgentRunError, s as executeTurn, t as createAgentInvocationWorker } from "./work-VX1SHWha.js";
28
+ import { a as persistThreadState, i as persistThreadRuntimeState, n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState, t as getLocationConfigurationService } from "./thread-state-cprEaxgl.js";
29
+ import { c as deleteWebAuthorization, d as createPausedTurns, f as getPausedTurnRequest, h as getTurnAuthorization, m as wakePausedTurn, s as createWebAuthorization } from "./connections-Bwu3VORi.js";
30
+ import { n as resolveTurnSessionRouting } from "./turn-session-routing-a9CHX-w6.js";
31
+ import { t as bindMessageAgent } from "./message-VZ3DFpGb.js";
32
+ import { t as bindSpawnAgent } from "./spawn-6rokq7l_.js";
33
+ 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-C8sMdsdX.js";
34
+ import { r as storeInputImages } from "./images-BKQqSi5W.js";
35
35
  import { z } from "zod";
36
36
  import { createHash } from "node:crypto";
37
37
  import { and, asc, count, desc, eq, exists, inArray, ne, or, sql } from "drizzle-orm";
@@ -1,15 +1,15 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { At as abandonTurnRecord, Ht as isTurnExecutionLimitExceededError, Kt as getTerminalAssistantMessages, Mt as failTurnRecord, Nt as getTurnRecord, R as openConversationProjection, bt as AuthorizationFlowDisabledError, gt as PluginCredentialFailureError, kt as saveTurnCheckpoint } from "./tasks-DGbrur6x.js";
3
- import { n as botConfig } from "./config-BayQ9hHH.js";
4
- import { d as getConversationStore, l as getConversationEventStore } from "./viewer-B2wXNspU.js";
5
- import { m as sameActorIdentity, u as agentInstructionProvenance } from "./history-AY8rs-FR.js";
6
- import { B as stopChildAgentsOf, H as recordSubagentEnded, U as recordSubagentStarted, X as buildSteeringPiMessage, Z as withoutSavedSteeringMessages, tt as readBlockedReport } from "./agent-runner-C6MwHJEs.js";
7
- import { E as markAgentInvocationSteered, H as TurnInputCommitLostError, K as isTurnInputCommitLostError, L as agentTypeInstructions, O as reportReplacedAgentInvocation, R as agentTypeStartsWithParentHistory, S as markAgentInvocationMailboxAppended, T as markAgentInvocationRunning, W as getConversationTurnBoundaryError, _ as getLatestAgentInvocationForConversation, c as getAgentInvocation, f as getAgentInvocationMessageId, m as getAgentInvocationTurnId, n as completeAgentInvocation, r as createAgentInvocation, s as getActiveAgentInvocationForConversation, w as markAgentInvocationPaused, y as isTerminalAgentInvocation } from "./store-CqRnaZSq.js";
8
- import { n as getAssistantReplyText } from "./assistant-reply-UPA8vKlC.js";
9
- import { F as recordFinishedTurnForAutomatedLimit, I as resetAutomatedTurnLimit, P as maybePostAutomatedTurnLimitNotice } from "./session-stop-CpCUy1ZJ.js";
10
- import { r as appendAndEnqueueInboundMessage } from "./store-DdT74Lvq.js";
11
- import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-C35IyRGp.js";
12
- import { n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState } from "./thread-state-D45lz-oC.js";
2
+ import { At as abandonTurnRecord, Ht as isTurnExecutionLimitExceededError, Kt as getTerminalAssistantMessages, Mt as failTurnRecord, Nt as getTurnRecord, R as openConversationProjection, bt as AuthorizationFlowDisabledError, gt as PluginCredentialFailureError, kt as saveTurnCheckpoint } from "./tasks-DDT-J3Rf.js";
3
+ import { n as botConfig } from "./config-C0UwYqDK.js";
4
+ import { d as getConversationStore, l as getConversationEventStore } from "./viewer-BpE6Z3qf.js";
5
+ import { m as sameActorIdentity, u as agentInstructionProvenance } from "./history-C84mlAwO.js";
6
+ import { B as stopChildAgentsOf, H as recordSubagentEnded, U as recordSubagentStarted, X as buildSteeringPiMessage, Z as withoutSavedSteeringMessages, tt as readBlockedReport } from "./agent-runner-BtYK7bht.js";
7
+ import { E as markAgentInvocationSteered, H as TurnInputCommitLostError, K as isTurnInputCommitLostError, L as agentTypeInstructions, O as reportReplacedAgentInvocation, R as agentTypeStartsWithParentHistory, S as markAgentInvocationMailboxAppended, T as markAgentInvocationRunning, W as getConversationTurnBoundaryError, _ as getLatestAgentInvocationForConversation, c as getAgentInvocation, f as getAgentInvocationMessageId, m as getAgentInvocationTurnId, n as completeAgentInvocation, r as createAgentInvocation, s as getActiveAgentInvocationForConversation, w as markAgentInvocationPaused, y as isTerminalAgentInvocation } from "./store-DcKkzrdt.js";
8
+ import { n as getAssistantReplyText } from "./assistant-reply-UyzAfZQo.js";
9
+ import { F as recordFinishedTurnForAutomatedLimit, I as resetAutomatedTurnLimit, P as maybePostAutomatedTurnLimitNotice } from "./session-stop-tZOw9AJD.js";
10
+ import { r as appendAndEnqueueInboundMessage } from "./store-FALy-JQb.js";
11
+ import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-DaBVoz7h.js";
12
+ import { n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState } from "./thread-state-cprEaxgl.js";
13
13
  import { isDeepStrictEqual } from "node:util";
14
14
  import { z } from "zod";
15
15
  // src/chat/runtime/turn-execution.ts
@@ -35,11 +35,16 @@ async function executeTurn(agentRunner, run, saveResult) {
35
35
  }
36
36
  if (outcome.status !== "completed") return outcome;
37
37
  const saved = await saveResult(outcome.result);
38
+ await finishTurn(run.conversationId, run.turnId, saved);
39
+ return { status: "completed" };
40
+ }
41
+ /** Record the terminal lifecycle event of a Turn from its saved result. */
42
+ async function finishTurn(conversationId, turnId, saved) {
38
43
  const lifecycle = new ConversationTurnLifecycleService(getConversationEventStore());
39
44
  const common = {
40
- conversationId: run.conversationId,
45
+ conversationId,
41
46
  createdAtMs: saved.finishedAtMs ?? Date.now(),
42
- turnId: run.turnId
47
+ turnId
43
48
  };
44
49
  if (saved.outcome === "failed") await lifecycle.fail({
45
50
  ...common,
@@ -51,7 +56,6 @@ async function executeTurn(agentRunner, run, saveResult) {
51
56
  ...common,
52
57
  outcome: saved.outcome
53
58
  });
54
- return { status: "completed" };
55
59
  }
56
60
  // src/chat/agent-invocations/fork-history.ts
57
61
  /**
@@ -234,32 +238,41 @@ function createAgentMessageSteeringDrain(context, running) {
234
238
  return accepted;
235
239
  };
236
240
  }
237
- /** Project the terminal invocation into the idempotent turn lifecycle. */
238
- async function persistTerminalLifecycle(invocation) {
239
- const lifecycle = new ConversationTurnLifecycleService(getConversationEventStore());
240
- const common = {
241
- conversationId: invocation.childConversationId,
242
- createdAtMs: "terminalAtMs" in invocation ? invocation.terminalAtMs : invocation.updatedAtMs,
243
- turnId: getAgentInvocationTurnId(invocation.invocationId)
244
- };
245
- if (invocation.status === "completed") await lifecycle.complete({
246
- ...common,
247
- outcome: invocation.result?.trim() ? "success" : "no_reply"
248
- });
249
- else if (invocation.status === "stopped") {
250
- await abandonTurnRecord({
251
- conversationId: common.conversationId,
252
- errorMessage: "Turn cancelled",
253
- turnId: common.turnId
254
- });
255
- await lifecycle.complete({
256
- ...common,
241
+ /**
242
+ * How a terminal agent invocation ends its child Turn. The live save and the
243
+ * recovery paths both use this, so a status cannot end the Turn two ways.
244
+ */
245
+ function agentInvocationTurnEnd(terminal) {
246
+ const finishedAtMs = terminal.terminalAtMs;
247
+ switch (terminal.status) {
248
+ case "completed": return {
249
+ finishedAtMs,
250
+ outcome: terminal.result.trim() ? "success" : "no_reply"
251
+ };
252
+ case "stopped": return {
253
+ finishedAtMs,
257
254
  outcome: "cancelled"
258
- });
259
- } else if (invocation.status === "blocked" || invocation.status === "failed") await lifecycle.fail({
260
- ...common,
261
- failureCode: "model_execution_failed"
255
+ };
256
+ case "blocked": return {
257
+ finishedAtMs,
258
+ outcome: "blocked"
259
+ };
260
+ case "failed": return {
261
+ failureCode: "model_execution_failed",
262
+ finishedAtMs,
263
+ outcome: "failed"
264
+ };
265
+ }
266
+ }
267
+ /** Project the terminal invocation into the idempotent turn lifecycle. */
268
+ async function persistTerminalLifecycle(terminal) {
269
+ const turnId = getAgentInvocationTurnId(terminal.invocationId);
270
+ if (terminal.status === "stopped") await abandonTurnRecord({
271
+ conversationId: terminal.childConversationId,
272
+ errorMessage: "Turn cancelled",
273
+ turnId
262
274
  });
275
+ await finishTurn(terminal.childConversationId, turnId, agentInvocationTurnEnd(terminal));
263
276
  }
264
277
  /** Stop an invocation whose worker died, or project its terminal turn result. */
265
278
  async function projectTerminalTurn(invocation) {
@@ -345,19 +358,7 @@ async function saveAgentInvocationResult(args) {
345
358
  }
346
359
  });
347
360
  if (!terminal || !isTerminalAgentInvocation(terminal)) throw new Error(`Agent invocation did not finish for ${args.invocation.invocationId}`);
348
- if (terminal.status === "completed") return {
349
- finishedAtMs: terminal.terminalAtMs,
350
- outcome: terminal.result.trim() ? "success" : "no_reply"
351
- };
352
- if (terminal.status === "stopped") return {
353
- finishedAtMs: terminal.terminalAtMs,
354
- outcome: "cancelled"
355
- };
356
- return {
357
- finishedAtMs: terminal.terminalAtMs,
358
- failureCode: "model_execution_failed",
359
- outcome: "failed"
360
- };
361
+ return agentInvocationTurnEnd(terminal);
361
362
  }
362
363
  /**
363
364
  * Read how many parents a child Conversation has and the root Conversation's
@@ -1,9 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { y as isProviderRetryError } from "./client-DX34VNtH.js";
3
- import { i as getChatConfig } from "./config-BayQ9hHH.js";
4
- import { f as logException, m as logWarn, p as logInfo, w as withLogContext, y as setSpanAttributes } from "./logging-D2QBriUo.js";
5
- import { f as getTurnRequestDeadline, m as ConversationQueueMessageRejectedError } from "./job-queue-Cjo6Yg_b.js";
6
- import { C as requestAnotherSlice, M as isInvalidConversationRecordError, T as startConversationWork, b as recordConversationRetry, d as countPendingConversationMessages, f as deadLetterAttempt, g as getConversationWorkState, i as beginConversationResume, j as isFinalAttempt, k as hasConversationStop, l as completeConversationStop, m as ensureConversationWake, o as checkInConversationWork, p as drainConversationMailbox, s as clearConsumedConversationWake, t as ackMessages, u as completeConversationWork, x as releaseConversationWork, y as recordAttemptFailure } from "./store-DdT74Lvq.js";
2
+ import { y as isProviderRetryError } from "./client-B0YZfxNy.js";
3
+ import { i as getChatConfig } from "./config-C0UwYqDK.js";
4
+ import { f as logException, m as logWarn, p as logInfo, w as withLogContext, y as setSpanAttributes } from "./logging-Ce0mXZ8J.js";
5
+ import { f as getTurnRequestDeadline, m as ConversationQueueMessageRejectedError } from "./job-queue-DBpHmKnd.js";
6
+ import { C as requestAnotherSlice, M as isInvalidConversationRecordError, T as startConversationWork, b as recordConversationRetry, d as countPendingConversationMessages, f as deadLetterAttempt, g as getConversationWorkState, i as beginConversationResume, j as isFinalAttempt, k as hasConversationStop, l as completeConversationStop, m as ensureConversationWake, o as checkInConversationWork, p as drainConversationMailbox, s as clearConsumedConversationWake, t as ackMessages, u as completeConversationWork, x as releaseConversationWork, y as recordAttemptFailure } from "./store-FALy-JQb.js";
7
7
  // src/chat/task-execution/worker.ts
8
8
  var worker_exports = /* @__PURE__ */ __exportAll({
9
9
  CONVERSATION_WORK_DEFER_DELAY_MS: () => CONVERSATION_WORK_DEFER_DELAY_MS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/junior",
3
- "version": "0.265.0",
3
+ "version": "0.266.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -76,7 +76,7 @@
76
76
  "@vercel/sandbox": "2.8.0",
77
77
  "ai": "^7.0.153",
78
78
  "aws4fetch": "^1.0.20",
79
- "better-auth": "^1.7.7",
79
+ "better-auth": "^1.7.14",
80
80
  "chat": "4.29.0",
81
81
  "commander": "^14.0.3",
82
82
  "diff": "^8.0.4",
@@ -90,7 +90,7 @@
90
90
  "sharp": "^0.35.3",
91
91
  "yaml": "^2.9.0",
92
92
  "zod": "^4.5.4",
93
- "@sentry/junior-plugin-api": "0.265.0"
93
+ "@sentry/junior-plugin-api": "0.266.0"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@emnapi/core": "^1.10.0",
@@ -110,9 +110,9 @@
110
110
  "typescript": "^7.0.2",
111
111
  "vercel": "^54.4.0",
112
112
  "vitest": "^4.1.12",
113
- "@sentry/junior-memory": "0.265.0",
114
- "@sentry/junior-github": "0.265.0",
115
- "@sentry/junior-testing": "0.0.0"
113
+ "@sentry/junior-github": "0.266.0",
114
+ "@sentry/junior-testing": "0.0.0",
115
+ "@sentry/junior-memory": "0.266.0"
116
116
  },
117
117
  "scripts": {
118
118
  "build": "tsdown",