@sentry/junior 0.269.0 → 0.270.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 (69) hide show
  1. package/dist/{adapter-2-CG25be.js → adapter-BQNTKVTF.js} +1 -1
  2. package/dist/{admin-DSs8S5Uy.js → admin-CKVEoXa4.js} +1 -1
  3. package/dist/{agent-runner-CrDrPUtY.js → agent-runner-MSQSMFkq.js} +1159 -254
  4. package/dist/api/schema.d.ts +2 -2
  5. package/dist/api/schema.js +6 -6
  6. package/dist/api.d.ts +1 -1
  7. package/dist/api.js +61 -31
  8. package/dist/{app-BrMMzjYm.d.ts → app-Bz8t4P8p.d.ts} +3 -3
  9. package/dist/app.d.ts +1 -1
  10. package/dist/app.js +40 -34
  11. package/dist/{automation-p87hg_AV.js → automation-Dwh_xcqM.js} +1 -1
  12. package/dist/{briefs-PtODdLNu.js → briefs-DNFzFFVx.js} +5 -5
  13. package/dist/{catalog-runtime-BsoSmTM0.js → catalog-runtime-Bdym_wKy.js} +1 -1
  14. package/dist/cli/chat.js +14 -14
  15. package/dist/cli/check.js +3 -3
  16. package/dist/cli/main.js +3 -3
  17. package/dist/cli/plugins.js +4 -4
  18. package/dist/cli/snapshot-create.js +4 -4
  19. package/dist/cli/upgrade.d.ts +1 -1
  20. package/dist/cli/upgrade.js +3 -3
  21. package/dist/{client-Cqf4TboL.js → client-B2MjENki.js} +13 -3
  22. package/dist/{config-CPsE4T5L.js → config-Dm3pWRqY.js} +3 -3
  23. package/dist/{connections-upFXLmhG.js → connections-0BBhiD-p.js} +10 -10
  24. package/dist/{conversation-CTpD_PGk.js → conversation-AhOVzN_k.js} +5 -3
  25. package/dist/{conversation-privacy-D6zJc8ff.js → conversation-privacy-C1pJ89rs.js} +1 -1
  26. package/dist/{credential-sync-CS_6IC-f.js → credential-sync-BRiWYs6_.js} +14 -14
  27. package/dist/{credentialed-BU-OW7HP.js → credentialed-BeBaJMZ_.js} +29 -24
  28. package/dist/{db-BzOCzVb1.d.ts → db-BYOuu6v2.d.ts} +1 -1
  29. package/dist/{executor-CNS7ONt-.js → executor-BB6eJkD4.js} +2 -2
  30. package/dist/instrumentation.js +2 -2
  31. package/dist/{interruption-marker-g6Xup3Fk.js → interruption-marker-CdblrIQK.js} +1 -1
  32. package/dist/{job-queue-DI-k-Bbk.js → job-queue-DiaXoSDg.js} +2 -2
  33. package/dist/{list-CGoQdXTp.js → list-BTDRxkOg.js} +167 -35
  34. package/dist/{logging-n7knse-O.js → logging-C6EdT6PP.js} +1 -1
  35. package/dist/{media-85PDJxO_.js → media-U6Tuz6Mi.js} +1 -1
  36. package/dist/{message-BpaWd8TT.js → message-DsjiWRVg.js} +4 -4
  37. package/dist/{model-profile-Bg8EoCKD.js → model-profile-B998sjVd.js} +9 -2
  38. package/dist/nitro.d.ts +1 -1
  39. package/dist/nitro.js +5 -3
  40. package/dist/{oauth-callback-server-CpGmEw_i.js → oauth-callback-server-CjFFVGqa.js} +2 -2
  41. package/dist/{prompt-BlQB0QQt.js → prompt-BPSdXYXV.js} +1 -1
  42. package/dist/{registry-By36_xsm.js → registry-CndmkP2P.js} +1 -1
  43. package/dist/{reporting-window-CVarfId9.js → reporting-window-DRCi1Ls_.js} +10 -1
  44. package/dist/{resolve-CUIBcdPd.js → resolve-BkAA1wH7.js} +3 -3
  45. package/dist/{result-BemsOMOO.js → result-9TJTpuYP.js} +9 -9
  46. package/dist/{runner-BVok7PAA.js → runner-BmKLSyJm.js} +11 -11
  47. package/dist/{sandbox-egress-signals-BSUWQI95.js → sandbox-egress-signals-CjLaogMo.js} +1 -1
  48. package/dist/{schema-ChnFo5f2.js → schema-DNLJ_MzW.js} +3 -3
  49. package/dist/{schema-jK4-1u_H.d.ts → schema-WayPSHFu.d.ts} +24 -1
  50. package/dist/{service-account-DHvlLnZw.js → service-account-D6e9cVmH.js} +3 -3
  51. package/dist/{service-account-hMmESDcr.js → service-account-DlhYl-Mu.js} +3 -3
  52. package/dist/{session-stop-BQW_iFcd.js → session-stop-MZRgYqYH.js} +20 -12
  53. package/dist/{skills-DmJJIuLF.js → skills-BggTR_ue.js} +2 -2
  54. package/dist/{spawn-ChCm46i-.js → spawn-DmtlcAT_.js} +2 -2
  55. package/dist/{store-DCo2n5iJ.js → store-BeWGgaMA.js} +3 -3
  56. package/dist/{store-1DVhoKOL.js → store-Byarin7b.js} +4 -4
  57. package/dist/{task-queue-HMC4QjFm.js → task-queue-Dt1_ZoI_.js} +3 -3
  58. package/dist/{task-runner-cA6yjn_E.js → task-runner-DyKqAPpm.js} +7 -7
  59. package/dist/{thread-state-CHy8LS0C.js → thread-state-BHBLMvgb.js} +5 -5
  60. package/dist/{turn-failure-response-Dr7erLWs.js → turn-failure-response-DWXy_0oJ.js} +9 -9
  61. package/dist/{turn-lifecycle-bf2fIYi_.js → turn-lifecycle-AiXkVqCB.js} +1 -1
  62. package/dist/{turn-session-routing-BqO0qXLk.js → turn-session-routing-B9KLBhaT.js} +25 -18
  63. package/dist/{validation-DHR1ivfh.js → validation-BW60Vtx_.js} +1 -1
  64. package/dist/{version-CXCHLgWm.js → version-CivPYmkH.js} +1 -1
  65. package/dist/version.js +1 -1
  66. package/dist/{viewer-DSbD6DF6.js → viewer-BTgAfdUg.js} +26 -11
  67. package/dist/{work-BE_qTYGi.js → work-Bjm52fHo.js} +11 -11
  68. package/dist/{worker-Cm9_sWXg.js → worker-CMbgtHLu.js} +6 -6
  69. package/package.json +5 -4
@@ -83,6 +83,15 @@ declare const userInputRequestSchema: z.ZodObject<{
83
83
  kind: z.ZodLiteral<"text">;
84
84
  }, z.core.$strip>], "kind">>;
85
85
  }, z.core.$strip>;
86
+ /**
87
+ * Label and help text of the free-text input that every form adds after the
88
+ * fields. The text goes with the picked answers and does not replace them, so
89
+ * every surface says that in the same words.
90
+ */
91
+ declare const USER_INPUT_NOTE: {
92
+ readonly label: "Anything else?";
93
+ readonly description: "Optional. This note is sent together with your answers above.";
94
+ };
86
95
  /** One field of a user input request. */
87
96
  type UserInputField = z.output<typeof userInputFieldSchema>;
88
97
  /** A question with one or more fields for a person to answer. */
@@ -556,6 +565,13 @@ declare const conversationPendingMessageSchema: z.ZodObject<{
556
565
  web: "web";
557
566
  }>;
558
567
  text: z.ZodOptional<z.ZodString>;
568
+ mentions: z.ZodOptional<z.ZodArray<z.ZodObject<{
569
+ avatarUrl: z.ZodOptional<z.ZodString>;
570
+ email: z.ZodOptional<z.ZodString>;
571
+ fullName: z.ZodOptional<z.ZodString>;
572
+ slackUserId: z.ZodOptional<z.ZodString>;
573
+ slackUserName: z.ZodOptional<z.ZodString>;
574
+ }, z.core.$strict>>>;
559
575
  attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
560
576
  id: z.ZodString;
561
577
  filename: z.ZodString;
@@ -601,6 +617,13 @@ declare const conversationPendingMessagesReportSchema: z.ZodObject<{
601
617
  web: "web";
602
618
  }>;
603
619
  text: z.ZodOptional<z.ZodString>;
620
+ mentions: z.ZodOptional<z.ZodArray<z.ZodObject<{
621
+ avatarUrl: z.ZodOptional<z.ZodString>;
622
+ email: z.ZodOptional<z.ZodString>;
623
+ fullName: z.ZodOptional<z.ZodString>;
624
+ slackUserId: z.ZodOptional<z.ZodString>;
625
+ slackUserName: z.ZodOptional<z.ZodString>;
626
+ }, z.core.$strict>>>;
604
627
  attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
605
628
  id: z.ZodString;
606
629
  filename: z.ZodString;
@@ -5924,4 +5947,4 @@ declare const reviewItemActionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5924
5947
  }, z.core.$strict>;
5925
5948
  }, z.core.$strict>], "action">;
5926
5949
  type ReviewItemActionBody = z.output<typeof reviewItemActionSchema>;
5927
- export { automationExecutionStatusDaySchema as $, ConversationReportEvent as $n, codePersonReportSchema as $r, LocationSummaryReport as $t, StatsReport as A, ConversationStatsReport as An, conversationPendingMessageSchema as Ar, createPersonalTokenBodySchema as At, AutomationRun as B, ConversationActivityPreview as Bn, steerConversationPendingMessagesResponseSchema as Br, startServiceAccountSignInResponseSchema as Bt, pluginPackageContentReportSchema as C, ConversationChildAgentsReport as Cn, conversationEventPageSchema as Cr, workspaceListSchema as Ct, skillReportSchema as D, stopConversationTurnResponseSchema as Dn, conversationParamsSchema as Dr, USER_CUSTOMIZATION_MAX_CHARS as Dt, runtimeInfoReportSchema as E, StopConversationTurnResponse as En, conversationFeedSchema as Er, workspaceSchema as Et, AutomationExecutionDay as F, ActorIdentity as Fn, createConversationBodySchema as Fr, revokePersonalTokenResponseSchema as Ft, AutomationUpdate as G, ConversationEventHistory as Gn, CodeOverviewReport as Gr, startConnectionResponseSchema as Gt, AutomationRunWindows as H, ConversationAuxiliaryCosts as Hn, conversationTurnFailureReasonSchema as Hr, connectionParamsSchema as Ht, AutomationExecutionList as I, ArchiveConversationBody as In, createConversationMessageBodySchema as Ir, disconnectServiceAccountResponseSchema as It, automationEditErrorSchema as J, ConversationModelUsage as Jn, CodeRepositorySummary as Jr, LocationActivityDayReport as Jt, AutomationVersionList as K, ConversationEventPage as Kn, CodePersonReport as Kr, ApiError as Kt, AutomationExecutionStatusDay as L, ArchiveConversationResponse as Ln, forkConversationBodySchema as Lr, serviceAccountListSchema as Lt, statsReportSchema as M, GuardianStats as Mn, conversationReportEventDataSchema as Mr, personalTokenListSchema as Mt, AutomationEdit as N, conversationStatsReportSchema as Nn, conversationReportEventSchema as Nr, personalTokenMetadataSchema as Nt, skillReportsSchema as O, ConversationMetricDay as On, conversationPendingAuthorizationSchema as Or, userCustomizationSchema as Ot, AutomationExecution as P, AcceptedConversationMessage as Pn, conversationSummaryReportSchema as Pr, personalTokenParamsSchema as Pt, automationExecutionSchema as Q, ConversationPendingMessagesReport as Qn, codeOverviewReportSchema as Qr, LocationParams as Qt, AutomationList as R, CancelConversationPendingMessagesBody as Rn, forkConversationResponseSchema as Rr, serviceAccountParamsSchema as Rt, pluginPackageContentItemReportSchema as S, INPUT_IMAGE_TYPES as Si, ConversationChildAgent as Sn, conversationEventHistorySchema as Sr, workspaceBodySchema as St, pluginsSchema as T, conversationChildAgentsReportSchema as Tn, conversationFeedQuerySchema as Tr, workspaceRepoSchema as Tt, AutomationScheduleIntent as U, ConversationCost as Un, CodeActivityDay as Ur, connectionSchema as Ut, AutomationRunList as V, ConversationAgentTreeNode as Vn, conversationTurnFailureCodeSchema as Vr, connectionListSchema as Vt, AutomationSummary as W, ConversationDetailReport as Wn, CodeChangeSummaryReport as Wr, disconnectConnectionResponseSchema as Wt, automationEventCatalogSchema as X, ConversationPendingMessage as Xn, codeChangeSummaryReportSchema as Xr, LocationDetailReport as Xt, automationEditSchema as Y, ConversationParams as Yn, codeActivityDaySchema as Yr, LocationActorSummaryReport as Yt, automationExecutionListSchema as Z, ConversationPendingMessageDelivery as Zn, codeChangeSummarySchema as Zr, LocationDirectoryReport as Zt, SkillReport as _, webMessageId as _i, personalSpendReportSchema as _n, cancelConversationPendingMessagesResponseSchema as _r, BaselineSnapshotReport as _t, reviewItemCountSchema as a, DailyConversationActivity as ai, ActorDirectoryReport as an, ConversationSurface as ar, automationRunSchema as at, pluginOperationalReportFeedSchema as b, MAX_INPUT_IMAGE_BYTES as bi, conversationWatchSchema as bn, conversationDetailQuerySchema as br, baselineSnapshotSchema as bt, reviewItemWaitingConversationsSchema as c, messageCardText as ci, ActorSummaryReport as cn, ConversationUsage as cr, automationSchedulePreviewSchema as ct, PluginOperationalReport as d, UserInputAnswer as di, PeopleActivityDayReport as dn, SteerConversationPendingMessagesBody as dr, automationVersionActivateSchema as dt, codeRepositoryParamsSchema as ei, locationActivityDayReportSchema as en, ConversationReportEventData as er, automationExecutionStatusSchema as et, PluginOperationalReportFeed as f, UserInputField as fi, PersonParams as fn, SteerConversationPendingMessagesResponse as fr, automationVersionListSchema as ft, RuntimeInfoReport as g, normalizeUserInputAnswer as gi, personParamsSchema as gn, cancelConversationPendingMessagesBodySchema as gr, scheduledAutomationSummarySchema as gt, Plugins as h, isEmptyUserInputAnswer as hi, actorProfileReportSchema as hn, archiveConversationResponseSchema as hr, eventAutomationSummarySchema as ht, reviewItemActionSchema as i, conversationChildAgentTotalsSchema as ii, ActorActivityDayReport as in, ConversationSummaryReport as ir, automationRunListSchema as it, statSchema as j, GuardianMetricDay as jn, conversationPendingMessagesReportSchema as jr, createdPersonalTokenSchema as jt, StatReport as k, ConversationStatsItem as kn, conversationPendingMessageDeliverySchema as kr, PersonalTokenMetadata as kt, HealthReport as l, resolveMessageCards as li, ActorTotalsReport as ln, CreateConversationBody as lr, automationSummarySchema as lt, PluginPackageContentReport as m, buttonUserInputField as mi, actorDirectoryReportSchema as mn, archiveConversationBodySchema as mr, automationVersionSchema as mt, ReviewItemActionBody as n, codeRepositorySummarySchema as ni, locationDirectoryReportSchema as nn, ConversationReportStatus as nr, automationListSchema as nt, reviewItemListSchema as o, dailyConversationActivitySchema as oi, ActorDirectoryWindows as on, ConversationTurnFailureCode as or, automationRunWindowsSchema as ot, PluginPackageContentItemReport as p, UserInputRequest as pi, PersonalSpendReport as pn, acceptedConversationMessageSchema as pr, automationVersionParamsSchema as pt, ListedAutomationVersion as q, ConversationFeed as qn, CodeRepositoryReport as qr, apiErrorSchema as qt, ReviewItemPayload as r, ConversationChildAgentTotals as ri, locationParamsSchema as rn, ConversationSourceTask as rr, automationParamsSchema as rt, reviewItemSchema as s, MessageCard as si, ActorProfileReport as sn, ConversationTurnFailureReason as sr, automationScheduleIntentSchema as st, OwnedObjectAnnotation$1 as t, codeRepositoryReportSchema as ti, locationDetailReportSchema as tn, ConversationReportMessageEvent as tr, automationListQuerySchema as tt, Plugin as u, AutomationCard as ui, ActorWindowMetrics as un, CreateConversationMessageBody as ur, automationUpdateSchema as ut, SkillReports as v, InputImage as vi, ConversationWatch as vn, conversationActivityPreviewSchema as vr, WorkspaceListReport as vt, pluginSchema as w, conversationChildAgentSchema as wn, conversationEventsQuerySchema as wr, workspaceParamsSchema as wt, pluginOperationalReportSchema as x, MessageAttachment as xi, conversationWatchesReportSchema as xn, conversationDetailReportSchema as xr, deleteWorkspaceResponseSchema as xt, healthReportSchema as y, MAX_INPUT_IMAGES as yi, ConversationWatchesReport as yn, conversationAuxiliaryCostsSchema as yr, WorkspaceReport as yt, AutomationListQuery as z, CancelConversationPendingMessagesResponse as zn, steerConversationPendingMessagesBodySchema as zr, serviceAccountSchema as zt };
5950
+ export { automationExecutionStatusDaySchema as $, ConversationReportEvent as $n, codePersonReportSchema as $r, LocationSummaryReport as $t, StatsReport as A, ConversationStatsReport as An, conversationPendingMessageSchema as Ar, createPersonalTokenBodySchema as At, AutomationRun as B, ConversationActivityPreview as Bn, steerConversationPendingMessagesResponseSchema as Br, startServiceAccountSignInResponseSchema as Bt, pluginPackageContentReportSchema as C, INPUT_IMAGE_TYPES as Ci, ConversationChildAgentsReport as Cn, conversationEventPageSchema as Cr, workspaceListSchema as Ct, skillReportSchema as D, stopConversationTurnResponseSchema as Dn, conversationParamsSchema as Dr, USER_CUSTOMIZATION_MAX_CHARS as Dt, runtimeInfoReportSchema as E, StopConversationTurnResponse as En, conversationFeedSchema as Er, workspaceSchema as Et, AutomationExecutionDay as F, ActorIdentity as Fn, createConversationBodySchema as Fr, revokePersonalTokenResponseSchema as Ft, AutomationUpdate as G, ConversationEventHistory as Gn, CodeOverviewReport as Gr, startConnectionResponseSchema as Gt, AutomationRunWindows as H, ConversationAuxiliaryCosts as Hn, conversationTurnFailureReasonSchema as Hr, connectionParamsSchema as Ht, AutomationExecutionList as I, ArchiveConversationBody as In, createConversationMessageBodySchema as Ir, disconnectServiceAccountResponseSchema as It, automationEditErrorSchema as J, ConversationModelUsage as Jn, CodeRepositorySummary as Jr, LocationActivityDayReport as Jt, AutomationVersionList as K, ConversationEventPage as Kn, CodePersonReport as Kr, ApiError as Kt, AutomationExecutionStatusDay as L, ArchiveConversationResponse as Ln, forkConversationBodySchema as Lr, serviceAccountListSchema as Lt, statsReportSchema as M, GuardianStats as Mn, conversationReportEventDataSchema as Mr, personalTokenListSchema as Mt, AutomationEdit as N, conversationStatsReportSchema as Nn, conversationReportEventSchema as Nr, personalTokenMetadataSchema as Nt, skillReportsSchema as O, ConversationMetricDay as On, conversationPendingAuthorizationSchema as Or, userCustomizationSchema as Ot, AutomationExecution as P, AcceptedConversationMessage as Pn, conversationSummaryReportSchema as Pr, personalTokenParamsSchema as Pt, automationExecutionSchema as Q, ConversationPendingMessagesReport as Qn, codeOverviewReportSchema as Qr, LocationParams as Qt, AutomationList as R, CancelConversationPendingMessagesBody as Rn, forkConversationResponseSchema as Rr, serviceAccountParamsSchema as Rt, pluginPackageContentItemReportSchema as S, MessageAttachment as Si, ConversationChildAgent as Sn, conversationEventHistorySchema as Sr, workspaceBodySchema as St, pluginsSchema as T, conversationChildAgentsReportSchema as Tn, conversationFeedQuerySchema as Tr, workspaceRepoSchema as Tt, AutomationScheduleIntent as U, ConversationCost as Un, CodeActivityDay as Ur, connectionSchema as Ut, AutomationRunList as V, ConversationAgentTreeNode as Vn, conversationTurnFailureCodeSchema as Vr, connectionListSchema as Vt, AutomationSummary as W, ConversationDetailReport as Wn, CodeChangeSummaryReport as Wr, disconnectConnectionResponseSchema as Wt, automationEventCatalogSchema as X, ConversationPendingMessage as Xn, codeChangeSummaryReportSchema as Xr, LocationDetailReport as Xt, automationEditSchema as Y, ConversationParams as Yn, codeActivityDaySchema as Yr, LocationActorSummaryReport as Yt, automationExecutionListSchema as Z, ConversationPendingMessageDelivery as Zn, codeChangeSummarySchema as Zr, LocationDirectoryReport as Zt, SkillReport as _, normalizeUserInputAnswer as _i, personalSpendReportSchema as _n, cancelConversationPendingMessagesResponseSchema as _r, BaselineSnapshotReport as _t, reviewItemCountSchema as a, DailyConversationActivity as ai, ActorDirectoryReport as an, ConversationSurface as ar, automationRunSchema as at, pluginOperationalReportFeedSchema as b, MAX_INPUT_IMAGES as bi, conversationWatchSchema as bn, conversationDetailQuerySchema as br, baselineSnapshotSchema as bt, reviewItemWaitingConversationsSchema as c, messageCardText as ci, ActorSummaryReport as cn, ConversationUsage as cr, automationSchedulePreviewSchema as ct, PluginOperationalReport as d, USER_INPUT_NOTE as di, PeopleActivityDayReport as dn, SteerConversationPendingMessagesBody as dr, automationVersionActivateSchema as dt, codeRepositoryParamsSchema as ei, locationActivityDayReportSchema as en, ConversationReportEventData as er, automationExecutionStatusSchema as et, PluginOperationalReportFeed as f, UserInputAnswer as fi, PersonParams as fn, SteerConversationPendingMessagesResponse as fr, automationVersionListSchema as ft, RuntimeInfoReport as g, isEmptyUserInputAnswer as gi, personParamsSchema as gn, cancelConversationPendingMessagesBodySchema as gr, scheduledAutomationSummarySchema as gt, Plugins as h, buttonUserInputField as hi, actorProfileReportSchema as hn, archiveConversationResponseSchema as hr, eventAutomationSummarySchema as ht, reviewItemActionSchema as i, conversationChildAgentTotalsSchema as ii, ActorActivityDayReport as in, ConversationSummaryReport as ir, automationRunListSchema as it, statSchema as j, GuardianMetricDay as jn, conversationPendingMessagesReportSchema as jr, createdPersonalTokenSchema as jt, StatReport as k, ConversationStatsItem as kn, conversationPendingMessageDeliverySchema as kr, PersonalTokenMetadata as kt, HealthReport as l, resolveMessageCards as li, ActorTotalsReport as ln, CreateConversationBody as lr, automationSummarySchema as lt, PluginPackageContentReport as m, UserInputRequest as mi, actorDirectoryReportSchema as mn, archiveConversationBodySchema as mr, automationVersionSchema as mt, ReviewItemActionBody as n, codeRepositorySummarySchema as ni, locationDirectoryReportSchema as nn, ConversationReportStatus as nr, automationListSchema as nt, reviewItemListSchema as o, dailyConversationActivitySchema as oi, ActorDirectoryWindows as on, ConversationTurnFailureCode as or, automationRunWindowsSchema as ot, PluginPackageContentItemReport as p, UserInputField as pi, PersonalSpendReport as pn, acceptedConversationMessageSchema as pr, automationVersionParamsSchema as pt, ListedAutomationVersion as q, ConversationFeed as qn, CodeRepositoryReport as qr, apiErrorSchema as qt, ReviewItemPayload as r, ConversationChildAgentTotals as ri, locationParamsSchema as rn, ConversationSourceTask as rr, automationParamsSchema as rt, reviewItemSchema as s, MessageCard as si, ActorProfileReport as sn, ConversationTurnFailureReason as sr, automationScheduleIntentSchema as st, OwnedObjectAnnotation$1 as t, codeRepositoryReportSchema as ti, locationDetailReportSchema as tn, ConversationReportMessageEvent as tr, automationListQuerySchema as tt, Plugin as u, AutomationCard as ui, ActorWindowMetrics as un, CreateConversationMessageBody as ur, automationUpdateSchema as ut, SkillReports as v, webMessageId as vi, ConversationWatch as vn, conversationActivityPreviewSchema as vr, WorkspaceListReport as vt, pluginSchema as w, conversationChildAgentSchema as wn, conversationEventsQuerySchema as wr, workspaceParamsSchema as wt, pluginOperationalReportSchema as x, MAX_INPUT_IMAGE_BYTES as xi, conversationWatchesReportSchema as xn, conversationDetailReportSchema as xr, deleteWorkspaceResponseSchema as xt, healthReportSchema as y, InputImage as yi, ConversationWatchesReport as yn, conversationAuxiliaryCostsSchema as yr, WorkspaceReport as yt, AutomationListQuery as z, CancelConversationPendingMessagesResponse as zn, steerConversationPendingMessagesBodySchema as zr, serviceAccountSchema as zt };
@@ -1,7 +1,7 @@
1
- import { B as isRecord, b as setSpanAttributes, h as logWarn } from "./logging-n7knse-O.js";
2
- import { c as fetchWithBoundedOAuthErrorBodies, i as resolvePluginHeaderEnvRefs } from "./registry-By36_xsm.js";
1
+ import { B as isRecord, b as setSpanAttributes, h as logWarn } from "./logging-C6EdT6PP.js";
2
+ import { c as fetchWithBoundedOAuthErrorBodies, i as resolvePluginHeaderEnvRefs } from "./registry-CndmkP2P.js";
3
3
  import { a as withLock, i as fenceLock, n as MUTATION_LOCK_TTL_MS } from "./locks-D-0h111u.js";
4
- import { r as getStateAdapter } from "./adapter-2-CG25be.js";
4
+ import { r as getStateAdapter } from "./adapter-BQNTKVTF.js";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { randomUUID } from "node:crypto";
7
7
  import { UnauthorizedError, auth } from "@modelcontextprotocol/sdk/client/auth.js";
@@ -1,6 +1,6 @@
1
- import { n as pluginCatalogRuntime } from "./catalog-runtime-BsoSmTM0.js";
2
- import { t as disconnectStateAdapter } from "./adapter-2-CG25be.js";
3
- import { n as finishServiceAccountSignIn, o as serviceAccountPlugins, r as getServiceAccountStatus, s as startServiceAccountSignIn, t as disconnectServiceAccount } from "./service-account-DHvlLnZw.js";
1
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Bdym_wKy.js";
2
+ import { t as disconnectStateAdapter } from "./adapter-BQNTKVTF.js";
3
+ import { n as finishServiceAccountSignIn, o as serviceAccountPlugins, r as getServiceAccountStatus, s as startServiceAccountSignIn, t as disconnectServiceAccount } from "./service-account-D6e9cVmH.js";
4
4
  import { CLI_USAGE } from "./cli/run.js";
5
5
  import { createServer } from "node:http";
6
6
  // src/cli/service-account.ts
@@ -1,16 +1,16 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { Er as normalizeToolNameFromResult, Sr as isAssistantMessage, Tr as isToolResultMessage, dt as CORE_EVENT_NAMESPACE, ht as eventGuidance, mt as eventCatalogEntry, wr as isToolResultError } from "./turn-session-routing-BqO0qXLk.js";
3
- import { n as botConfig } from "./config-CPsE4T5L.js";
4
- import { h as logWarn, m as logInfo, p as logException } from "./logging-n7knse-O.js";
5
- import { C as getSqlExecutor, j as SYSTEM_IDENTITY_ID, x as getConversationStore } from "./viewer-DSbD6DF6.js";
2
+ import { Cr as isAssistantMessage, Dr as normalizeToolNameFromResult, Er as isToolResultMessage, Tr as isToolResultError, dt as CORE_EVENT_NAMESPACE, ht as eventGuidance, mt as eventCatalogEntry } from "./turn-session-routing-B9KLBhaT.js";
3
+ import { n as botConfig } from "./config-Dm3pWRqY.js";
4
+ import { h as logWarn, m as logInfo, p as logException } from "./logging-C6EdT6PP.js";
5
+ import { C as getSqlExecutor, j as SYSTEM_IDENTITY_ID, x as getConversationStore } from "./viewer-BTgAfdUg.js";
6
6
  import { s as juniorConversations } from "./agent-invocations-C1RNOCs8.js";
7
- import "./executor-CNS7ONt-.js";
8
- import { h as credentialSubjectSchema } from "./registry-By36_xsm.js";
9
- import { Et as postSlackMessage, Hn as ToolInputError, In as JUNIOR_THREAD_STATE_TTL_MS, Ln as getDashboardConversationLink, Rn as getDashboardObjectIconLink, Sn as verifyTimerWatchCredentialSubject, gt as normalizeSlackReplyMarkdown, ht as formatSlackLink, l as getPluginSlackConversationLink, mt as escapeSlackMrkdwnText, p as getPlugins, vr as buildSentryConversationUrl } from "./credentialed-BU-OW7HP.js";
10
- import { r as getStateAdapter } from "./adapter-2-CG25be.js";
11
- import { r as EVENT_AUTHOR_ID } from "./prompt-BlQB0QQt.js";
12
- import { i as sanitizeAssistantText, t as getInterruptionMarker } from "./interruption-marker-g6Xup3Fk.js";
13
- import { r as appendAndEnqueueInboundMessage } from "./store-DCo2n5iJ.js";
7
+ import "./executor-BB6eJkD4.js";
8
+ import { h as credentialSubjectSchema } from "./registry-CndmkP2P.js";
9
+ import { Et as postSlackMessage, Hn as ToolInputError, In as JUNIOR_THREAD_STATE_TTL_MS, Ln as getDashboardConversationLink, Rn as getDashboardObjectIconLink, Sn as verifyTimerWatchCredentialSubject, gt as normalizeSlackReplyMarkdown, ht as formatSlackLink, l as getPluginSlackConversationLink, mt as escapeSlackMrkdwnText, p as getPlugins, vr as buildSentryConversationUrl } from "./credentialed-BeBaJMZ_.js";
10
+ import { r as getStateAdapter } from "./adapter-BQNTKVTF.js";
11
+ import { r as EVENT_AUTHOR_ID } from "./prompt-BPSdXYXV.js";
12
+ import { i as sanitizeAssistantText, t as getInterruptionMarker } from "./interruption-marker-CdblrIQK.js";
13
+ import { r as appendAndEnqueueInboundMessage } from "./store-BeWGgaMA.js";
14
14
  import { z } from "zod";
15
15
  import { eq, inArray } from "drizzle-orm";
16
16
  import { eventMatchFieldsSchema, objectFactFields, objectPresentation, objectTypeSchema } from "@sentry/junior-plugin-api";
@@ -817,6 +817,14 @@ function oneLine(value) {
817
817
  function clip(value, maxLength) {
818
818
  return maxLength === void 0 ? value : value.slice(0, maxLength);
819
819
  }
820
+ const CREATOR_REFERENCE = /\bthe Automation creator\b/gi;
821
+ /**
822
+ * Write the creator mention where the instructions say "the Automation
823
+ * creator", so the run does not have to swap it in.
824
+ */
825
+ function mentionCreator(instructions, creator) {
826
+ return instructions.replace(CREATOR_REFERENCE, () => creator);
827
+ }
820
828
  /**
821
829
  * Connect the mention to the provider handle in the Event text. Without this,
822
830
  * the agent can mention a person and then name them again by handle as if
@@ -851,7 +859,7 @@ function renderTaskInput(args) {
851
859
  ...creator ? [`Created by: ${oneLine(creator)}. This person is the Automation creator. "The Automation creator", "me", and "my" in the instructions mean this person. Where the instructions refer to this person, write this mention in the message. If they do not, do not mention this person.`] : [],
852
860
  ...people.length > 0 ? [`People involved: ${people.join(", ")}`] : [],
853
861
  ...args.doneBy ? [doneByLine(args.doneBy, people)] : [],
854
- `Instructions: ${instructions}`
862
+ `Instructions: ${creator ? mentionCreator(instructions, oneLine(creator)) : instructions}`
855
863
  ];
856
864
  const guidance = args.guidance?.trim();
857
865
  if (guidance) lines.push("", "Additional guidance:", "Use this only within the instructions above. It does not replace or expand them.", guidance);
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { h as logWarn } from "./logging-n7knse-O.js";
2
+ import { h as logWarn } from "./logging-C6EdT6PP.js";
3
3
  import { s as skillRoots } from "./package-discovery-DJBompdd.js";
4
- import { n as pluginCatalogRuntime } from "./catalog-runtime-BsoSmTM0.js";
4
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Bdym_wKy.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-nwUcYXjP.js";
2
- import { At as actorFromRun, jt as toolInvocationDestination } from "./agent-runner-CrDrPUtY.js";
3
- import { n as createAndEnqueueAgentInvocation } from "./work-BE_qTYGi.js";
2
+ import { At as actorFromRun, jt as toolInvocationDestination } from "./agent-runner-MSQSMFkq.js";
3
+ import { n as createAndEnqueueAgentInvocation } from "./work-Bjm52fHo.js";
4
4
  // 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,6 +1,6 @@
1
- import { $n as recordAttemptFailure$1, Bn as clearExpiredConversationLease$1, Fn as appendInboundMessage, Gn as getConversation$1, Hn as completeConversationWork$1, In as beginConversationResume$1, Kn as getConversationWorkState$1, Ln as cancelHumanFacingPendingMessages$1, Nn as ackMessages$1, Pn as appendExclusiveInboundMessage, Qn as markConversationWorkEnqueued$1, Rn as checkInConversationWork$1, Un as deadLetterAttempt$1, Vn as completeConversationStop$1, Wn as drainConversationMailbox$1, Zn as listActiveConversationIds$1, ar as startConversationWork$1, er as recordConversationRetry$1, ir as requestConversationWork$1, nr as removeActiveConversation$1, or as steerWebPendingMessages$1, rr as requestAnotherSlice$1, sr as stopConversationWork$1, tr as releaseConversationWork$1, zn as clearConsumedConversationWake$1 } from "./turn-session-routing-BqO0qXLk.js";
2
- import { x as getConversationStore } from "./viewer-DSbD6DF6.js";
3
- import "./job-queue-DI-k-Bbk.js";
1
+ import { $n as recordAttemptFailure$1, Bn as clearExpiredConversationLease$1, Fn as appendInboundMessage, Gn as getConversation$1, Hn as completeConversationWork$1, In as beginConversationResume$1, Kn as getConversationWorkState$1, Ln as cancelHumanFacingPendingMessages$1, Nn as ackMessages$1, Pn as appendExclusiveInboundMessage, Qn as markConversationWorkEnqueued$1, Rn as checkInConversationWork$1, Un as deadLetterAttempt$1, Vn as completeConversationStop$1, Wn as drainConversationMailbox$1, Zn as listActiveConversationIds$1, ar as startConversationWork$1, er as recordConversationRetry$1, ir as requestConversationWork$1, nr as removeActiveConversation$1, or as steerWebPendingMessages$1, rr as requestAnotherSlice$1, sr as stopConversationWork$1, tr as releaseConversationWork$1, zn as clearConsumedConversationWake$1 } from "./turn-session-routing-B9KLBhaT.js";
2
+ import { x as getConversationStore } from "./viewer-BTgAfdUg.js";
3
+ import "./job-queue-DiaXoSDg.js";
4
4
  // src/chat/task-execution/store.ts
5
5
  function metadataStore(options) {
6
6
  return options.conversationStore ?? getConversationStore();
@@ -1,8 +1,8 @@
1
- import { l as TURN_REASONING_LEVELS, s as modelProfileSchema } from "./model-profile-Bg8EoCKD.js";
2
- import { C as getSqlExecutor, x as getConversationStore } from "./viewer-DSbD6DF6.js";
1
+ import { c as modelProfileSchema, u as TURN_REASONING_LEVELS } from "./model-profile-B998sjVd.js";
2
+ import { C as getSqlExecutor, x as getConversationStore } from "./viewer-BTgAfdUg.js";
3
3
  import { a as juniorAgentInvocations, i as juniorAgentBindings, n as AGENT_INVOCATION_PARENT_MAILBOX_STATUSES, t as AGENT_INVOCATION_MAILBOX_STATUSES } from "./agent-invocations-C1RNOCs8.js";
4
- import "./executor-CNS7ONt-.js";
5
- import { p as credentialContextSchema } from "./registry-By36_xsm.js";
4
+ import "./executor-BB6eJkD4.js";
5
+ import { p as credentialContextSchema } from "./registry-CndmkP2P.js";
6
6
  import { z } from "zod";
7
7
  import { createHash } from "node:crypto";
8
8
  import { and, asc, count, countDistinct, desc, eq, inArray, lt, ne, or, sql } from "drizzle-orm";
@@ -1,5 +1,5 @@
1
- import { h as logWarn } from "./logging-n7knse-O.js";
2
- import { c as QUEUE_SIGNATURE_MAX_AGE_MS, d as getQueueProvider, l as signQueueMessage, p as runWithTurnRequestDeadline, u as verifyQueueMessage } from "./job-queue-DI-k-Bbk.js";
1
+ import { h as logWarn } from "./logging-C6EdT6PP.js";
2
+ import { c as QUEUE_SIGNATURE_MAX_AGE_MS, d as getQueueProvider, l as signQueueMessage, p as runWithTurnRequestDeadline, u as verifyQueueMessage } from "./job-queue-DiaXoSDg.js";
3
3
  import { z } from "zod";
4
4
  import { createHash } from "node:crypto";
5
5
  // src/chat/queue/callback.ts
@@ -110,7 +110,7 @@ function pluginTaskCallback() {
110
110
  maxDeliveries: PLUGIN_TASK_MAX_DELIVERIES,
111
111
  onRejected: logPluginTaskQueueMessageRejected,
112
112
  run: async (message) => {
113
- const { processPluginTask } = await import("./task-runner-cA6yjn_E.js").then((n) => n.r);
113
+ const { processPluginTask } = await import("./task-runner-DyKqAPpm.js").then((n) => n.r);
114
114
  await processPluginTask(message);
115
115
  },
116
116
  topic: PLUGIN_TASK_QUEUE_TOPIC,
@@ -1,12 +1,12 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { Er as normalizeToolNameFromResult, Gt as hydrateConversationMessages, On as getTurnRecord, Or as stripRuntimeTurnContext, Tr as isToolResultMessage, _r as getPiMessageRole, t as resolveConversationRouting, u as getDispatchRecord, wr as isToolResultError, xr as instructionTextForProjection } from "./turn-session-routing-BqO0qXLk.js";
2
+ import { Dr as normalizeToolNameFromResult, Er as isToolResultMessage, Gt as hydrateConversationMessages, On as getTurnRecord, Sr as instructionTextForProjection, Tr as isToolResultError, kr as stripRuntimeTurnContext, t as resolveConversationRouting, u as getDispatchRecord, vr as getPiMessageRole } from "./turn-session-routing-B9KLBhaT.js";
3
3
  import { m as parseSlackMessageTs } from "./actor-CP9K2Idu.js";
4
- import { S as getDb, i as readActorIdentity, x as getConversationStore } from "./viewer-DSbD6DF6.js";
5
- import { _ as sameActorIdentity } from "./media-85PDJxO_.js";
6
- import { ar as createPluginLogger, g as coreTaskRegistrations, hr as createPluginConversationEvents, ir as createPluginModel, jr as createPluginCache, nr as createPluginState, p as getPlugins, rr as createPluginEmbedder } from "./credentialed-BU-OW7HP.js";
7
- import { r as getStateAdapter } from "./adapter-2-CG25be.js";
8
- import { o as coerceThreadConversationState, r as getPersistedThreadState } from "./thread-state-CHy8LS0C.js";
9
- import { i as pluginTaskParamsSchema, r as pluginTaskId, s as sendVercelPluginTask } from "./task-queue-HMC4QjFm.js";
4
+ import { S as getDb, i as readActorIdentity, x as getConversationStore } from "./viewer-BTgAfdUg.js";
5
+ import { _ as sameActorIdentity } from "./media-U6Tuz6Mi.js";
6
+ import { ar as createPluginLogger, g as coreTaskRegistrations, hr as createPluginConversationEvents, ir as createPluginModel, jr as createPluginCache, nr as createPluginState, p as getPlugins, rr as createPluginEmbedder } from "./credentialed-BeBaJMZ_.js";
7
+ import { r as getStateAdapter } from "./adapter-BQNTKVTF.js";
8
+ import { o as coerceThreadConversationState, r as getPersistedThreadState } from "./thread-state-BHBLMvgb.js";
9
+ import { i as pluginTaskParamsSchema, r as pluginTaskId, s as sendVercelPluginTask } from "./task-queue-Dt1_ZoI_.js";
10
10
  import { pluginRunContextSchema } from "@sentry/junior-plugin-api";
11
11
  // src/chat/plugins/task-runner.ts
12
12
  /**
@@ -1,8 +1,8 @@
1
- import { Gr as createDurableLocationConfigurationService, Kt as persistConversationMessages } from "./turn-session-routing-BqO0qXLk.js";
2
- import { B as isRecord, H as toOptionalString, V as toOptionalNumber } from "./logging-n7knse-O.js";
3
- import { S as getDb } from "./viewer-DSbD6DF6.js";
4
- import { In as JUNIOR_THREAD_STATE_TTL_MS } from "./credentialed-BU-OW7HP.js";
5
- import { r as getStateAdapter } from "./adapter-2-CG25be.js";
1
+ import { Kr as createDurableLocationConfigurationService, Kt as persistConversationMessages } from "./turn-session-routing-B9KLBhaT.js";
2
+ import { B as isRecord, H as toOptionalString, V as toOptionalNumber } from "./logging-C6EdT6PP.js";
3
+ import { S as getDb } from "./viewer-BTgAfdUg.js";
4
+ import { In as JUNIOR_THREAD_STATE_TTL_MS } from "./credentialed-BeBaJMZ_.js";
5
+ import { r as getStateAdapter } from "./adapter-BQNTKVTF.js";
6
6
  // src/chat/state/conversation.ts
7
7
  function defaultConversationState() {
8
8
  return {
@@ -1,13 +1,13 @@
1
- import { Gt as hydrateConversationMessages, Pr as buildDeterministicTurnId, an as markConversationMessage, yn as clearPendingAuth } from "./turn-session-routing-BqO0qXLk.js";
2
- import { _ as getProviderErrorAttributes, g as findProviderError, m as ProviderError, v as getProviderErrorUserMessage } from "./client-Cqf4TboL.js";
3
- import { B as isRecord, t as buildTurnFailureResponse } from "./logging-n7knse-O.js";
1
+ import { Fr as buildDeterministicTurnId, Gt as hydrateConversationMessages, an as markConversationMessage, yn as clearPendingAuth } from "./turn-session-routing-B9KLBhaT.js";
2
+ import { _ as getProviderErrorAttributes, g as findProviderError, m as ProviderError, v as getProviderErrorUserMessage } from "./client-B2MjENki.js";
3
+ import { B as isRecord, t as buildTurnFailureResponse } from "./logging-C6EdT6PP.js";
4
4
  import { m as parseSlackMessageTs } from "./actor-CP9K2Idu.js";
5
- import { S as getDb, y as getConversationEventStore } from "./viewer-DSbD6DF6.js";
6
- import { Er as listConversationAnnotations } from "./credentialed-BU-OW7HP.js";
7
- import { B as removedCardSchema, V as resolveMessageCards, z as readMessageCardRefs } from "./conversation-CTpD_PGk.js";
8
- import { D as parseAgentInvocationResultMessageId, J as markTurnClosed, Y as markTurnCompleted, c as getAgentInvocation, m as getAgentInvocationTurnId } from "./store-1DVhoKOL.js";
9
- import { t as getInterruptionMarker } from "./interruption-marker-g6Xup3Fk.js";
10
- import { a as persistThreadStateById, o as coerceThreadConversationState, r as getPersistedThreadState } from "./thread-state-CHy8LS0C.js";
5
+ import { S as getDb, y as getConversationEventStore } from "./viewer-BTgAfdUg.js";
6
+ import { Er as listConversationAnnotations } from "./credentialed-BeBaJMZ_.js";
7
+ import { B as removedCardSchema, V as resolveMessageCards, z as readMessageCardRefs } from "./conversation-AhOVzN_k.js";
8
+ import { D as parseAgentInvocationResultMessageId, J as markTurnClosed, Y as markTurnCompleted, c as getAgentInvocation, m as getAgentInvocationTurnId } from "./store-Byarin7b.js";
9
+ import { t as getInterruptionMarker } from "./interruption-marker-CdblrIQK.js";
10
+ import { a as persistThreadStateById, o as coerceThreadConversationState, r as getPersistedThreadState } from "./thread-state-BHBLMvgb.js";
11
11
  // src/chat/conversations/pending-cards.ts
12
12
  /**
13
13
  * Add the cards that tool results selected since the last visible assistant
@@ -1,4 +1,4 @@
1
- import { y as getConversationEventStore } from "./viewer-DSbD6DF6.js";
1
+ import { y as getConversationEventStore } from "./viewer-BTgAfdUg.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 {
@@ -1,18 +1,18 @@
1
- import { a as completeText, f as unwrapCurrentInstruction, p as escapeXml, s as resolveGatewayModel, y as isProviderRetryError } from "./client-Cqf4TboL.js";
2
- import { i as getChatConfig, n as botConfig } from "./config-CPsE4T5L.js";
3
- import { B as isRecord, E as withSpan, H as toOptionalString, V as toOptionalNumber, _ as runBestEffort, b as setSpanAttributes, h as logWarn, o as getActiveTraceContext, p as logException, t as buildTurnFailureResponse } from "./logging-n7knse-O.js";
1
+ import { a as completeText, f as unwrapCurrentInstruction, p as escapeXml, s as resolveGatewayModel, y as isProviderRetryError } from "./client-B2MjENki.js";
2
+ import { i as getChatConfig, n as botConfig } from "./config-Dm3pWRqY.js";
3
+ import { B as isRecord, E as withSpan, H as toOptionalString, V as toOptionalNumber, _ as runBestEffort, b as setSpanAttributes, h as logWarn, o as getActiveTraceContext, p as logException, t as buildTurnFailureResponse } from "./logging-C6EdT6PP.js";
4
4
  import { c as parseStoredSlackActor, l as toStoredSlackActor, m as parseSlackMessageTs } from "./actor-CP9K2Idu.js";
5
- import { A as startLocationThread, C as getSqlExecutor, G as agentTurnTotalTokens, M as resolveActorIdentityId, Q as sameDestination, S as getDb, T as withConversationEventLock, U as addAgentTurnUsage, V as bindProviderConversation, W as agentTurnCostUsd, X as parseDestination, w as createSqlConversationEventStore, x as getConversationStore, y as getConversationEventStore } from "./viewer-DSbD6DF6.js";
5
+ import { A as startLocationThread, C as getSqlExecutor, G as agentTurnTotalTokens, M as resolveActorIdentityId, Q as sameDestination, S as getDb, T as withConversationEventLock, U as addAgentTurnUsage, V as bindProviderConversation, W as agentTurnCostUsd, X as parseDestination, w as createSqlConversationEventStore, x as getConversationStore, y as getConversationEventStore } from "./viewer-BTgAfdUg.js";
6
6
  import { d as juniorDestinations, s as juniorConversations } from "./agent-invocations-C1RNOCs8.js";
7
- import { d as juniorAutomations, l as juniorAutomationRuns, p as juniorLocationConfigurations, u as juniorAutomationVersions } from "./executor-CNS7ONt-.js";
8
- import { a as agentHistoryItemSchema, g as instructionProvenanceFor, h as instructionActors, m as contextProvenance } from "./media-85PDJxO_.js";
9
- import { f as credentialContextForActor, h as credentialSubjectSchema } from "./registry-By36_xsm.js";
10
- import { n as pluginCatalogRuntime } from "./catalog-runtime-BsoSmTM0.js";
11
- import { Bn as getDashboardTaskLink, Ct as openSlackDirectMessage, Et as postSlackMessage, Fr as authenticationUnlinkedEvent, Gt as parseSandboxEgressAuthRequiredSignal, Hn as ToolInputError, In as JUNIOR_THREAD_STATE_TTL_MS, Mr as JUNIOR_NATIVE_EVENT_NAMESPACE, Nn as sleep$1, Nr as agentsInstructionsUpdatedEvent, Pr as authenticationLinkedEvent, Yt as resolveSandboxEgressProviderForHost, ar as createPluginLogger, ht as formatSlackLink, jr as createPluginCache, mt as escapeSlackMrkdwnText, p as getPlugins, pt as startOAuthFlow, t as executeCredentialedEgressRequest, ut as formatProviderLabel } from "./credentialed-BU-OW7HP.js";
7
+ import { d as juniorAutomations, l as juniorAutomationRuns, p as juniorLocationConfigurations, u as juniorAutomationVersions } from "./executor-BB6eJkD4.js";
8
+ import { a as agentHistoryItemSchema, g as instructionProvenanceFor, h as instructionActors, m as contextProvenance } from "./media-U6Tuz6Mi.js";
9
+ import { f as credentialContextForActor, h as credentialSubjectSchema } from "./registry-CndmkP2P.js";
10
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Bdym_wKy.js";
11
+ import { Bn as getDashboardTaskLink, Ct as openSlackDirectMessage, Et as postSlackMessage, Fr as authenticationUnlinkedEvent, Gt as parseSandboxEgressAuthRequiredSignal, Hn as ToolInputError, In as JUNIOR_THREAD_STATE_TTL_MS, Mr as JUNIOR_NATIVE_EVENT_NAMESPACE, Nn as sleep$1, Nr as agentsInstructionsUpdatedEvent, Pr as authenticationLinkedEvent, Yt as resolveSandboxEgressProviderForHost, ar as createPluginLogger, ht as formatSlackLink, jr as createPluginCache, mt as escapeSlackMrkdwnText, p as getPlugins, pt as startOAuthFlow, t as executeCredentialedEgressRequest, ut as formatProviderLabel } from "./credentialed-BeBaJMZ_.js";
12
12
  import { a as withLock, i as fenceLock, n as MUTATION_LOCK_TTL_MS } from "./locks-D-0h111u.js";
13
- import { n as getDefaultRedisStateAdapterFor, r as getStateAdapter } from "./adapter-2-CG25be.js";
14
- import { L as messageCardRef } from "./conversation-CTpD_PGk.js";
15
- import { O as eventAutomationSchema, S as automationVersionSchema, j as scheduledAutomationSchema } from "./automation-p87hg_AV.js";
13
+ import { n as getDefaultRedisStateAdapterFor, r as getStateAdapter } from "./adapter-BQNTKVTF.js";
14
+ import { L as messageCardRef } from "./conversation-AhOVzN_k.js";
15
+ import { O as eventAutomationSchema, S as automationVersionSchema, j as scheduledAutomationSchema } from "./automation-Dwh_xcqM.js";
16
16
  import { isDeepStrictEqual } from "node:util";
17
17
  import { z } from "zod";
18
18
  import { createHash, randomUUID } from "node:crypto";
@@ -1048,6 +1048,12 @@ async function persistWithRetry(persist) {
1048
1048
  }
1049
1049
  throw lastError;
1050
1050
  }
1051
+ // src/chat/codemode/result.ts
1052
+ /**
1053
+ * Name of the tool that runs a Code Mode script. Nested calls use it as
1054
+ * their dispatcher name.
1055
+ */
1056
+ const CODEMODE_TOOL_NAME = "codemode";
1051
1057
  // src/chat/services/turn-limit.ts
1052
1058
  /** Terminal failure when one turn uses too many execution slices. */
1053
1059
  var TurnSliceLimitExceededError = class extends Error {
@@ -1079,11 +1085,12 @@ function isTurnExecutionLimitExceededError(error) {
1079
1085
  return error instanceof Error && isDirectTurnExecutionLimitError(error.cause);
1080
1086
  }
1081
1087
  /**
1082
- * Why tools are disabled once a turn is out of budget. Junior blocks the call
1083
- * with the same message as a tool that `disableTools` disabled. The tool list
1084
- * stays the same, so the provider cache stays valid.
1088
+ * The result of a tool call that Junior blocks once a turn is out of budget,
1089
+ * as a direct call or as a call in a script. It names no single tool: the
1090
+ * model can reach a tool directly or through a script, so the message closes
1091
+ * both paths. The tool list stays the same, so the provider cache stays valid.
1085
1092
  */
1086
- const TURN_LIMIT_DISABLED_REASON = "This Turn used its execution budget, so all tools are disabled. Reply now with what you finished, what is left, and how to continue.";
1093
+ const TURN_LIMIT_WRAP_UP_MESSAGE = `This Turn used its execution budget, so all tools are disabled, also in ${CODEMODE_TOOL_NAME} scripts. Do not call a tool again in this Turn. Reply now with what you finished, what is left, and how to continue.`;
1087
1094
  /**
1088
1095
  * Check tool calls against the turn limits for one slice.
1089
1096
  *
@@ -6023,7 +6030,7 @@ function slackSourceForDestination(args) {
6023
6030
  * Reads parent Conversations when this Conversation has no Destination.
6024
6031
  */
6025
6032
  async function resolveConversationRouting(args) {
6026
- const conversationStore = args.conversationStore ?? (await import("./viewer-DSbD6DF6.js").then((n) => n.v)).getConversationStore();
6033
+ const conversationStore = args.conversationStore ?? (await import("./viewer-BTgAfdUg.js").then((n) => n.v)).getConversationStore();
6027
6034
  const chain = await loadConversationChain(args.conversationId, conversationStore);
6028
6035
  let destination;
6029
6036
  let source;
@@ -6062,4 +6069,4 @@ async function resolveTurnSessionRouting(args) {
6062
6069
  source: routing.source
6063
6070
  };
6064
6071
  }
6065
- export { saveEventAutomation as $, recordAttemptFailure as $n, appendThreadContextMessages as $t, readAutomationRuns as A, recordTurnSummary as An, REQUEST_CONTEXT_SECTION_TAG as Ar, loadProjection as At, readScheduledAutomation as B, clearExpiredConversationLease as Bn, getAgentContextCompactionTriggerTokens as Br, recordMcpProviderConnected as Bt, readAutomationExecutionByConversationId as C, loadTurnCheckpoint as Cn, isContinuablePiBoundary as Cr, requireEventIdentifier as Ct, readAutomationExecutionStatusHours as D, failTurnRecord as Dn, retainRuntimeTurnContext as Dr, loadConnectedMcpProviders as Dt, readAutomationExecutionStatusDays as E, completeTurnRecord as En, normalizeToolNameFromResult as Er, commitMessages as Et, conversationRangeColumns as F, appendInboundMessage as Fn, SubscribedReplyReason as Fr, recordAttachmentsDelivered as Ft, blockEventAutomation as G, getConversation as Gn, createDurableLocationConfigurationService as Gr, hydrateConversationMessages as Gt, saveScheduledAutomationInLock as H, completeConversationWork as Hn, getExperimentalFeatures as Hr, recordToolExecutionStarted as Ht, createScheduledAutomation as I, beginConversationResume as In, decideSubscribedThreadReply as Ir, recordAuthenticationLinked as It, deleteEventAutomation as J, hasRunnableConversationWork as Jn, piMessageFromHistoryItem as Jr, persistConversationMessageSummaries as Jt, collectEventAutomationMatchKeys as K, getConversationWorkState as Kn, configValueSchema as Kr, persistConversationMessages as Kt, deleteScheduledAutomation as L, cancelHumanFacingPendingMessages as Ln, getSubscribedReplyPreflightDecision as Lr, recordAuthorizationCompleted as Lt, recordAutomationExecution as M, CONVERSATION_WORK_STALE_ENQUEUE_MS as Mn, TURN_CONTEXT_TAG as Mr, loadTurnRoute as Mt, conversationActiveDaysColumn as N, ackMessages as Nn, buildDeterministicAssistantMessageId as Nr, openConversationProjection as Nt, readAutomationExecutionSummaries as O, getTurnRecord as On, stripRuntimeTurnContext as Or, loadConversationProjection as Ot, conversationAggregateColumns as P, appendExclusiveInboundMessage as Pn, buildDeterministicTurnId as Pr, recordAgentsInstructionsUpdated as Pt, parseEventAutomationRow as Q, markConversationWorkEnqueued as Qn, resolveTaskTitle as Qt, listScheduledAutomationsForTeam as R, checkInConversationWork as Rn, getThreadStopDecision as Rr, recordAuthorizationRequested as Rt, existingConversationId as S, continuableMessages as Sn, isAssistantMessage as Sr, registeredResourceTypeSchema as St, readAutomationExecutionHours as T, abandonTurnRecord as Tn, isToolResultMessage as Tr, commitAcceptedReply as Tt, scheduledRunId as U, deadLetterAttempt as Un, isExperimentalFeatureEnabled as Ur, recordTurnRoute as Ut, saveScheduledAutomation as V, completeConversationStop as Vn, getAgentContextInputLimitTokens as Vr, recordSubscribedReplyRoute as Vt, withScheduledAutomationLock as W, drainConversationMailbox as Wn, setExperimentalFeatures as Wr, appendConversationMessages as Wt, getEventAutomation as X, isInvalidConversationRecordError as Xn, setConfigDefaults as Xr, settleConversationTitleWork as Xt, findMatchingEventAutomations as Y, isFinalAttempt as Yn, getConfigDefaults as Yr, resolveConversationTitle as Yt, listDeletedEventAutomationsCreatedBy as Z, listActiveConversationIds as Zn, fallbackShortTitle as Zt, markDispatchCompleted as _, abandonReplacedPendingAuth as _n, getPiMessageRole as _r, eventWatchUnavailable as _t, confirmDispatchMailboxAppend as a, markConversationMessage as an, startConversationWork as ar, listAutomationVersions as at, notifyAutomationBlocked as b, getConversationPendingAuth as bn, hasRuntimeTurnContext as br, registeredEventTriggerProblems as bt, getDispatchIdForConversation as c, turnHasReply as cn, TURN_LIMIT_DISABLED_REASON as cr, AutomationConflictError as ct, getDispatchTurnId as d, PluginCredentialFailureError as dn, TurnToolCallLimitExceededError as dr, CORE_EVENT_NAMESPACE as dt, buildConversationContext as en, recordConversationRetry as er, setEventAutomationStatus as et, getPluginDispatchProjection as f, createPluginAuthOrchestration as fn, buildTurnErrorResponse as fr, automationEventCatalog as ft, markDispatchBlocked as g, AuthorizationPauseError as gn, extractAssistantText as gr, eventNamespaceSchema as gt, markDispatchAwaitingResume as h, AuthorizationFlowDisabledError as hn, persistWithRetry as hr, eventGuidance as ht, claimDispatchMailboxAppend as i, isHumanConversationMessage as in, requestConversationWork as ir, automationVersionOf as it, readAutomationTitlesByConversationId as j, CONVERSATION_WORK_CHECK_IN_INTERVAL_MS as jn, SESSION_CONTEXT_SECTION_TAG as jr, loadTurnProjection as jt, readAutomationExecutions as k, listTurnSummaries as kn, trimTrailingAssistantMessages as kr, loadLastModelProfile as kt, getDispatchInputMessageId as l, upsertConversationMessage as ln, TurnBudgetExceededError as lr, automationRevision as lt, listPendingDispatchMailboxAppends as m, AuthPausePersistenceError as mn, isTurnExecutionLimitExceededError as mr, eventCatalogEntry as mt, resolveTurnSessionRouting as n, estimateConversationContextTokens as nn, removeActiveConversation as nr, eventAutomationRunLimitReason as nt, createOrGetDispatch as o, normalizeConversationText as on, steerWebPendingMessages as or, readAutomationVersion as ot, isTerminalDispatchStatus as p, authorizationId as pn, createTurnLimitGate as pr, describeRegisteredEventTrigger as pt, createEventAutomation as q, hasConversationStop as qn, historyItemFromPiMessage as qr, projectConversationMessages as qt, buildDispatchId as r, getConversationMessageSlackTs as rn, requestAnotherSlice as rr, automationDefinition as rt, getDispatchConversationId as s, recordDeliveredAssistantMessage as sn, stopConversationWork as sr, sameDefinitionValue as st, resolveConversationRouting as t, createConversationMemoryService as tn, releaseConversationWork as tr, admitEventAutomationRun as tt, getDispatchRecord as u, createPluginEgress as un, TurnSliceLimitExceededError as ur, requireAutomationRevision as ut, markDispatchFailed as v, canReusePendingAuthLink as vn, getTerminalAssistantMessages as vr, hasEventCatalogEntries as vt, readAutomationExecutionDays as w, saveTurnCheckpoint as wn, isToolResultError as wr, requireValidEventTrigger as wt, emptyAutomationRunWindows as x, wasPendingAuthStopped as xn, instructionTextForProjection as xr, registeredEventTypeSchema as xt, markDispatchRunning as y, clearPendingAuth as yn, getUserMessageInstructionText as yr, registeredEventMatchSchema as yt, parseScheduledAutomationRow as z, clearConsumedConversationWake as zn, estimateTextTokens as zr, recordGuardianActionReviewed as zt };
6072
+ export { saveEventAutomation as $, recordAttemptFailure as $n, appendThreadContextMessages as $t, readAutomationRuns as A, recordTurnSummary as An, trimTrailingAssistantMessages as Ar, loadProjection as At, readScheduledAutomation as B, clearExpiredConversationLease as Bn, estimateTextTokens as Br, recordMcpProviderConnected as Bt, readAutomationExecutionByConversationId as C, loadTurnCheckpoint as Cn, isAssistantMessage as Cr, requireEventIdentifier as Ct, readAutomationExecutionStatusHours as D, failTurnRecord as Dn, normalizeToolNameFromResult as Dr, loadConnectedMcpProviders as Dt, readAutomationExecutionStatusDays as E, completeTurnRecord as En, isToolResultMessage as Er, commitMessages as Et, conversationRangeColumns as F, appendInboundMessage as Fn, buildDeterministicTurnId as Fr, recordAttachmentsDelivered as Ft, blockEventAutomation as G, getConversation as Gn, setExperimentalFeatures as Gr, hydrateConversationMessages as Gt, saveScheduledAutomationInLock as H, completeConversationWork as Hn, getAgentContextInputLimitTokens as Hr, recordToolExecutionStarted as Ht, createScheduledAutomation as I, beginConversationResume as In, SubscribedReplyReason as Ir, recordAuthenticationLinked as It, deleteEventAutomation as J, hasRunnableConversationWork as Jn, historyItemFromPiMessage as Jr, persistConversationMessageSummaries as Jt, collectEventAutomationMatchKeys as K, getConversationWorkState as Kn, createDurableLocationConfigurationService as Kr, persistConversationMessages as Kt, deleteScheduledAutomation as L, cancelHumanFacingPendingMessages as Ln, decideSubscribedThreadReply as Lr, recordAuthorizationCompleted as Lt, recordAutomationExecution as M, CONVERSATION_WORK_STALE_ENQUEUE_MS as Mn, SESSION_CONTEXT_SECTION_TAG as Mr, loadTurnRoute as Mt, conversationActiveDaysColumn as N, ackMessages as Nn, TURN_CONTEXT_TAG as Nr, openConversationProjection as Nt, readAutomationExecutionSummaries as O, getTurnRecord as On, retainRuntimeTurnContext as Or, loadConversationProjection as Ot, conversationAggregateColumns as P, appendExclusiveInboundMessage as Pn, buildDeterministicAssistantMessageId as Pr, recordAgentsInstructionsUpdated as Pt, parseEventAutomationRow as Q, markConversationWorkEnqueued as Qn, resolveTaskTitle as Qt, listScheduledAutomationsForTeam as R, checkInConversationWork as Rn, getSubscribedReplyPreflightDecision as Rr, recordAuthorizationRequested as Rt, existingConversationId as S, continuableMessages as Sn, instructionTextForProjection as Sr, registeredResourceTypeSchema as St, readAutomationExecutionHours as T, abandonTurnRecord as Tn, isToolResultError as Tr, commitAcceptedReply as Tt, scheduledRunId as U, deadLetterAttempt as Un, getExperimentalFeatures as Ur, recordTurnRoute as Ut, saveScheduledAutomation as V, completeConversationStop as Vn, getAgentContextCompactionTriggerTokens as Vr, recordSubscribedReplyRoute as Vt, withScheduledAutomationLock as W, drainConversationMailbox as Wn, isExperimentalFeatureEnabled as Wr, appendConversationMessages as Wt, getEventAutomation as X, isInvalidConversationRecordError as Xn, getConfigDefaults as Xr, settleConversationTitleWork as Xt, findMatchingEventAutomations as Y, isFinalAttempt as Yn, piMessageFromHistoryItem as Yr, resolveConversationTitle as Yt, listDeletedEventAutomationsCreatedBy as Z, listActiveConversationIds as Zn, setConfigDefaults as Zr, fallbackShortTitle as Zt, markDispatchCompleted as _, abandonReplacedPendingAuth as _n, extractAssistantText as _r, eventWatchUnavailable as _t, confirmDispatchMailboxAppend as a, markConversationMessage as an, startConversationWork as ar, listAutomationVersions as at, notifyAutomationBlocked as b, getConversationPendingAuth as bn, getUserMessageInstructionText as br, registeredEventTriggerProblems as bt, getDispatchIdForConversation as c, turnHasReply as cn, TURN_LIMIT_WRAP_UP_MESSAGE as cr, AutomationConflictError as ct, getDispatchTurnId as d, PluginCredentialFailureError as dn, TurnToolCallLimitExceededError as dr, CORE_EVENT_NAMESPACE as dt, buildConversationContext as en, recordConversationRetry as er, setEventAutomationStatus as et, getPluginDispatchProjection as f, createPluginAuthOrchestration as fn, buildTurnErrorResponse as fr, automationEventCatalog as ft, markDispatchBlocked as g, AuthorizationPauseError as gn, persistWithRetry as gr, eventNamespaceSchema as gt, markDispatchAwaitingResume as h, AuthorizationFlowDisabledError as hn, CODEMODE_TOOL_NAME as hr, eventGuidance as ht, claimDispatchMailboxAppend as i, isHumanConversationMessage as in, requestConversationWork as ir, automationVersionOf as it, readAutomationTitlesByConversationId as j, CONVERSATION_WORK_CHECK_IN_INTERVAL_MS as jn, REQUEST_CONTEXT_SECTION_TAG as jr, loadTurnProjection as jt, readAutomationExecutions as k, listTurnSummaries as kn, stripRuntimeTurnContext as kr, loadLastModelProfile as kt, getDispatchInputMessageId as l, upsertConversationMessage as ln, TurnBudgetExceededError as lr, automationRevision as lt, listPendingDispatchMailboxAppends as m, AuthPausePersistenceError as mn, isTurnExecutionLimitExceededError as mr, eventCatalogEntry as mt, resolveTurnSessionRouting as n, estimateConversationContextTokens as nn, removeActiveConversation as nr, eventAutomationRunLimitReason as nt, createOrGetDispatch as o, normalizeConversationText as on, steerWebPendingMessages as or, readAutomationVersion as ot, isTerminalDispatchStatus as p, authorizationId as pn, createTurnLimitGate as pr, describeRegisteredEventTrigger as pt, createEventAutomation as q, hasConversationStop as qn, configValueSchema as qr, projectConversationMessages as qt, buildDispatchId as r, getConversationMessageSlackTs as rn, requestAnotherSlice as rr, automationDefinition as rt, getDispatchConversationId as s, recordDeliveredAssistantMessage as sn, stopConversationWork as sr, sameDefinitionValue as st, resolveConversationRouting as t, createConversationMemoryService as tn, releaseConversationWork as tr, admitEventAutomationRun as tt, getDispatchRecord as u, createPluginEgress as un, TurnSliceLimitExceededError as ur, requireAutomationRevision as ut, markDispatchFailed as v, canReusePendingAuthLink as vn, getPiMessageRole as vr, hasEventCatalogEntries as vt, readAutomationExecutionDays as w, saveTurnCheckpoint as wn, isContinuablePiBoundary as wr, requireValidEventTrigger as wt, emptyAutomationRunWindows as x, wasPendingAuthStopped as xn, hasRuntimeTurnContext as xr, registeredEventTypeSchema as xt, markDispatchRunning as y, clearPendingAuth as yn, getTerminalAssistantMessages as yr, registeredEventMatchSchema as yt, parseScheduledAutomationRow as z, clearConsumedConversationWake as zn, getThreadStopDecision as zr, recordGuardianActionReviewed as zt };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { n as pluginCatalogRuntime } from "./catalog-runtime-BsoSmTM0.js";
2
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Bdym_wKy.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.269.0";
2
+ var version = "0.270.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-CXCHLgWm.js";
1
+ export { t as JUNIOR_VERSION } from "./version-CivPYmkH.js";
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { i as getChatConfig } from "./config-CPsE4T5L.js";
3
- import { L as GOOGLE_IDENTITY_PROVIDER, h as logWarn, z as normalizeIdentityEmail } from "./logging-n7knse-O.js";
2
+ import { i as getChatConfig } from "./config-Dm3pWRqY.js";
3
+ import { L as GOOGLE_IDENTITY_PROVIDER, h as logWarn, z as normalizeIdentityEmail } from "./logging-C6EdT6PP.js";
4
4
  import { a as isSlackUserId, d as parseSlackChannelReferenceId, f as parseSlackTeamId, s as parseActorUserId } from "./actor-CP9K2Idu.js";
5
5
  import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers, o as conversationReadColumns, s as juniorConversations } from "./agent-invocations-C1RNOCs8.js";
6
- import { _ as CONVERSATION_METRICS, h as juniorConversationBindings, m as juniorConversationParticipants, t as createJuniorSqlExecutor, v as juniorConversationMetrics, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-CNS7ONt-.js";
7
- import { d as newConversationEventSchema, f as encodeHistoryPayload, l as decodeStoredConversationEvent, n as detectImageMediaType, o as conversationEventDataSchema, u as historyReplacementSchema, v as usageSchema } from "./media-85PDJxO_.js";
6
+ import { _ as CONVERSATION_METRICS, h as juniorConversationBindings, m as juniorConversationParticipants, t as createJuniorSqlExecutor, v as juniorConversationMetrics, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-BB6eJkD4.js";
7
+ import { d as newConversationEventSchema, f as encodeHistoryPayload, l as decodeStoredConversationEvent, n as detectImageMediaType, o as conversationEventDataSchema, u as historyReplacementSchema, v as usageSchema } from "./media-U6Tuz6Mi.js";
8
8
  import { a as withLock } from "./locks-D-0h111u.js";
9
9
  import { createHash, randomUUID } from "node:crypto";
10
10
  import { and, asc, desc, eq, gt, gte, inArray, isNotNull, isNull, lt, lte, ne, or, sql } from "drizzle-orm";
@@ -1714,6 +1714,7 @@ const AVATAR_CACHE_TTL_MS = 864e5;
1714
1714
  const AVATAR_FAILURE_TTL_MS = 3e5;
1715
1715
  const AVATAR_FETCH_TIMEOUT_MS = 5e3;
1716
1716
  const MAX_AVATAR_BYTES = 1048576;
1717
+ const MAX_AVATAR_REDIRECTS = 3;
1717
1718
  /**
1718
1719
  * Return the URL when it is HTTPS on a photo host of the provider or a
1719
1720
  * subdomain. Junior fetches only these URLs.
@@ -1778,14 +1779,28 @@ function avatarFetchFailed(host, attributes) {
1778
1779
  });
1779
1780
  return null;
1780
1781
  }
1781
- async function fetchAvatarImage(url) {
1782
+ async function fetchAvatarResponse(url, provider, signal) {
1783
+ let current = url;
1784
+ for (let redirects = 0;; redirects += 1) {
1785
+ const response = await fetch(current, {
1786
+ redirect: "manual",
1787
+ signal
1788
+ });
1789
+ const location = response.headers.get("location");
1790
+ if (response.status < 300 || response.status >= 400 || !location) return response;
1791
+ await response.body?.cancel();
1792
+ const next = URL.canParse(location, current) ? parseAvatarUrl(new URL(location, current).href, provider) : void 0;
1793
+ if (!next) return "redirect_off_host";
1794
+ if (redirects >= MAX_AVATAR_REDIRECTS) return "too_many_redirects";
1795
+ current = next;
1796
+ }
1797
+ }
1798
+ async function fetchAvatarImage(url, provider) {
1782
1799
  const host = new URL(url).hostname;
1783
1800
  let data;
1784
1801
  try {
1785
- const response = await fetch(url, {
1786
- redirect: "error",
1787
- signal: AbortSignal.timeout(AVATAR_FETCH_TIMEOUT_MS)
1788
- });
1802
+ const response = await fetchAvatarResponse(url, provider, AbortSignal.timeout(AVATAR_FETCH_TIMEOUT_MS));
1803
+ if (typeof response === "string") return avatarFetchFailed(host, { "app.reason": response });
1789
1804
  if (!response.ok) {
1790
1805
  await response.body?.cancel();
1791
1806
  return avatarFetchFailed(host, { "http.response.status_code": response.status });
@@ -1813,10 +1828,10 @@ async function readAvatarImage(db, state, identityId) {
1813
1828
  provider: juniorIdentities.provider
1814
1829
  }).from(juniorIdentities).where(and(eq(juniorIdentities.id, identityId), eq(juniorIdentities.kind, "user"))).limit(1);
1815
1830
  const url = row ? parseAvatarUrl(row.avatarUrl, row.provider) : void 0;
1816
- if (!url) return void 0;
1831
+ if (!row || !url) return void 0;
1817
1832
  const key = `avatar:${createHash("sha256").update(url).digest("hex")}`;
1818
1833
  return await createCache(state, "core").getOrLoad(key, async () => {
1819
- const loaded = await fetchAvatarImage(url);
1834
+ const loaded = await fetchAvatarImage(url, row.provider);
1820
1835
  return {
1821
1836
  value: loaded,
1822
1837
  ttlMs: loaded ? AVATAR_CACHE_TTL_MS : AVATAR_FAILURE_TTL_MS
@@ -1,14 +1,14 @@
1
- import { Dn as failTurnRecord, Nt as openConversationProjection, On as getTurnRecord, Tn as abandonTurnRecord, dn as PluginCredentialFailureError, hn as AuthorizationFlowDisabledError, mr as isTurnExecutionLimitExceededError, vr as getTerminalAssistantMessages, wn as saveTurnCheckpoint } from "./turn-session-routing-BqO0qXLk.js";
2
- import { n as botConfig } from "./config-CPsE4T5L.js";
3
- import { j as SYSTEM_IDENTITY_ID, x as getConversationStore, y as getConversationEventStore } from "./viewer-DSbD6DF6.js";
4
- import { _ as sameActorIdentity, p as agentInstructionProvenance } from "./media-85PDJxO_.js";
5
- import { Et as withoutSavedSteeringMessages, Mt as readBlockedReport, Tt as buildSteeringPiMessage, _t as recordSubagentEnded, ht as stopChildAgentsOf, vt as recordSubagentStarted } from "./agent-runner-CrDrPUtY.js";
6
- 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-1DVhoKOL.js";
7
- import { r as getAssistantReplyText } from "./interruption-marker-g6Xup3Fk.js";
8
- import { C as maybePostAutomatedTurnLimitNotice, D as recordFinishedTurnForAutomatedLimit, O as resetAutomatedTurnLimit } from "./session-stop-BQW_iFcd.js";
9
- import { r as appendAndEnqueueInboundMessage } from "./store-DCo2n5iJ.js";
10
- import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-bf2fIYi_.js";
11
- import { a as persistThreadStateById, n as getPersistedSandboxState, r as getPersistedThreadState } from "./thread-state-CHy8LS0C.js";
1
+ import { Dn as failTurnRecord, Nt as openConversationProjection, On as getTurnRecord, Tn as abandonTurnRecord, dn as PluginCredentialFailureError, hn as AuthorizationFlowDisabledError, mr as isTurnExecutionLimitExceededError, wn as saveTurnCheckpoint, yr as getTerminalAssistantMessages } from "./turn-session-routing-B9KLBhaT.js";
2
+ import { n as botConfig } from "./config-Dm3pWRqY.js";
3
+ import { j as SYSTEM_IDENTITY_ID, x as getConversationStore, y as getConversationEventStore } from "./viewer-BTgAfdUg.js";
4
+ import { _ as sameActorIdentity, p as agentInstructionProvenance } from "./media-U6Tuz6Mi.js";
5
+ import { Et as withoutSavedSteeringMessages, Mt as readBlockedReport, Tt as buildSteeringPiMessage, _t as recordSubagentEnded, ht as stopChildAgentsOf, vt as recordSubagentStarted } from "./agent-runner-MSQSMFkq.js";
6
+ 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-Byarin7b.js";
7
+ import { r as getAssistantReplyText } from "./interruption-marker-CdblrIQK.js";
8
+ import { C as maybePostAutomatedTurnLimitNotice, D as recordFinishedTurnForAutomatedLimit, O as resetAutomatedTurnLimit } from "./session-stop-MZRgYqYH.js";
9
+ import { r as appendAndEnqueueInboundMessage } from "./store-BeWGgaMA.js";
10
+ import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-AiXkVqCB.js";
11
+ import { a as persistThreadStateById, n as getPersistedSandboxState, r as getPersistedThreadState } from "./thread-state-BHBLMvgb.js";
12
12
  import { isDeepStrictEqual } from "node:util";
13
13
  import { z } from "zod";
14
14
  // src/chat/runtime/turn-execution.ts
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { Xn as isInvalidConversationRecordError, Yn as isFinalAttempt, qn as hasConversationStop } from "./turn-session-routing-BqO0qXLk.js";
3
- import { y as isProviderRetryError } from "./client-Cqf4TboL.js";
4
- import { i as getChatConfig } from "./config-CPsE4T5L.js";
5
- import { T as withLogContext, b as setSpanAttributes, h as logWarn, m as logInfo, p as logException } from "./logging-n7knse-O.js";
6
- import { f as getTurnRequestDeadline, m as ConversationQueueMessageRejectedError } from "./job-queue-DI-k-Bbk.js";
7
- import { C as requestAnotherSlice, T as startConversationWork, b as recordConversationRetry, d as countPendingConversationMessages, f as deadLetterAttempt, g as getConversationWorkState, i as beginConversationResume, 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-DCo2n5iJ.js";
2
+ import { Xn as isInvalidConversationRecordError, Yn as isFinalAttempt, qn as hasConversationStop } from "./turn-session-routing-B9KLBhaT.js";
3
+ import { y as isProviderRetryError } from "./client-B2MjENki.js";
4
+ import { i as getChatConfig } from "./config-Dm3pWRqY.js";
5
+ import { T as withLogContext, b as setSpanAttributes, h as logWarn, m as logInfo, p as logException } from "./logging-C6EdT6PP.js";
6
+ import { f as getTurnRequestDeadline, m as ConversationQueueMessageRejectedError } from "./job-queue-DiaXoSDg.js";
7
+ import { C as requestAnotherSlice, T as startConversationWork, b as recordConversationRetry, d as countPendingConversationMessages, f as deadLetterAttempt, g as getConversationWorkState, i as beginConversationResume, 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-BeWGgaMA.js";
8
8
  // src/chat/task-execution/attempt-selection.ts
9
9
  function selectContiguousTurnBatch(messages) {
10
10
  const first = messages[0];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/junior",
3
- "version": "0.269.0",
3
+ "version": "0.270.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -59,6 +59,7 @@
59
59
  "@chat-adapter/state-redis": "4.29.0",
60
60
  "@earendil-works/pi-agent-core": "0.84.1",
61
61
  "@earendil-works/pi-ai": "0.85.1",
62
+ "@earendil-works/pi-codemode": "1.4.0",
62
63
  "@hono/zod-validator": "^0.9.0",
63
64
  "@logtape/logtape": "^2.1.1",
64
65
  "@modelcontextprotocol/sdk": "1.32.0",
@@ -90,7 +91,7 @@
90
91
  "sharp": "^0.35.3",
91
92
  "yaml": "^2.9.0",
92
93
  "zod": "^4.5.4",
93
- "@sentry/junior-plugin-api": "0.269.0"
94
+ "@sentry/junior-plugin-api": "0.270.0"
94
95
  },
95
96
  "peerDependencies": {
96
97
  "bullmq": "^6.5.0",
@@ -125,9 +126,9 @@
125
126
  "typescript": "^7.0.2",
126
127
  "vercel": "^54.4.0",
127
128
  "vitest": "^4.1.12",
128
- "@sentry/junior-github": "0.269.0",
129
+ "@sentry/junior-github": "0.270.0",
129
130
  "@sentry/junior-testing": "0.0.0",
130
- "@sentry/junior-memory": "0.269.0"
131
+ "@sentry/junior-memory": "0.270.0"
131
132
  },
132
133
  "scripts": {
133
134
  "build": "tsdown",