@sentry/junior 0.262.0 → 0.263.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-t-Y9RHML.js → adapter-BIacI0Bt.js} +1 -1
  2. package/dist/{admin-BCqeFndQ.js → admin-C7vUk7s9.js} +1 -1
  3. package/dist/{agent-hooks-9q2zdKHL.js → agent-hooks-CqnZfuCt.js} +73 -32
  4. package/dist/{agent-runner-Cx6NO5LE.js → agent-runner-BUBas7Yy.js} +123 -733
  5. package/dist/api/schema.d.ts +4 -0
  6. package/dist/api/schema.js +3 -3
  7. package/dist/api.js +28 -27
  8. package/dist/app.js +30 -29
  9. package/dist/{assistant-reply-B2qUBAwL.js → assistant-reply-BFmjgJjD.js} +1 -1
  10. package/dist/{automation-DrpcA-SX.js → automation-CWX0qL8U.js} +1 -1
  11. package/dist/{briefs-DsGH2Vym.js → briefs-h55v5lX9.js} +4 -4
  12. package/dist/{catalog-runtime-CfwKT0sn.js → catalog-runtime-Suf-aLlh.js} +1 -1
  13. package/dist/cli/chat.js +15 -15
  14. package/dist/cli/check.js +3 -3
  15. package/dist/cli/main.js +3 -3
  16. package/dist/cli/plugins.js +4 -4
  17. package/dist/cli/snapshot-create.js +4 -4
  18. package/dist/cli/upgrade.js +3 -3
  19. package/dist/{client-DpfjZgNk.js → client-DZBCBj1M.js} +2 -2
  20. package/dist/{config-BiCtNiu5.js → config-Dnv8KmNs.js} +2 -2
  21. package/dist/{connections-D9IKbfk-.js → connections-Br0_xv27.js} +10 -10
  22. package/dist/{conversation-CvuKJ3tA.js → conversation-B0baEwoA.js} +2 -0
  23. package/dist/{conversation-privacy-CBUI0frD.js → conversation-privacy-FY8yc2q3.js} +1 -1
  24. package/dist/{credential-sync-Bu6ZOuOk.js → credential-sync-BvkiyWF5.js} +14 -14
  25. package/dist/{executor-O8xqLDN6.js → executor-J9k2sp9m.js} +2 -2
  26. package/dist/{images-AM1exvU0.js → images-DV2FlEGL.js} +3 -3
  27. package/dist/instrumentation.js +2 -2
  28. package/dist/{job-queue-DmarAQGI.js → job-queue-B4yTgklN.js} +1 -1
  29. package/dist/{logging-dZN1Bvtu.js → logging-Dk_FpF36.js} +1 -1
  30. package/dist/{message-C_g2S8kv.js → message-BzseAFH1.js} +4 -3
  31. package/dist/nitro.js +3 -3
  32. package/dist/{oauth-callback-server-DvvOvr4q.js → oauth-callback-server-bTspTMCC.js} +2 -2
  33. package/dist/{profile-BP2N5uDY.js → profile-Dq5I7TV1.js} +3 -3
  34. package/dist/{prompt-DeVax2qO.js → prompt-CxatQVaj.js} +1 -1
  35. package/dist/{registry-BUje_knT.js → registry-BFzQFV_y.js} +1 -1
  36. package/dist/{resolve-DftZiYNU.js → resolve-CnRHib0U.js} +3 -3
  37. package/dist/{result-CRMRT9CE.js → result-DczfmNBa.js} +8 -7
  38. package/dist/{runner-4mmL2Pt1.js → runner-CJd9Wec-.js} +11 -11
  39. package/dist/{sandbox-egress-signals-1ysv0z5A.js → sandbox-egress-signals-DUmVkOx4.js} +1 -1
  40. package/dist/{schema-XuTZukI9.js → schema-QidbykYl.js} +2 -2
  41. package/dist/{service-account-B1sH3P7d.js → service-account-BI2kQDrb.js} +3 -3
  42. package/dist/{service-account-Del2I_x3.js → service-account-x2QZXm4X.js} +3 -3
  43. package/dist/{session-stop-ZuyOHxdK.js → session-stop-CtyJsnEj.js} +11 -11
  44. package/dist/{skills-lPeepA2b.js → skills-Dbzx9-rS.js} +2 -2
  45. package/dist/{spawn-DovpdlrW.js → spawn-D8WU99UV.js} +2 -2
  46. package/dist/store-TKg1HVKx.js +697 -0
  47. package/dist/{store-dZynGGFW.js → store-UlOrW6JC.js} +6 -6
  48. package/dist/{task-queue-CmMCtzHO.js → task-queue-BRB49H-J.js} +3 -3
  49. package/dist/{task-runner-BRgJ5e0s.js → task-runner-C575f2Dd.js} +10 -10
  50. package/dist/{tasks-Bh2qYaed.js → tasks-LOItiYgL.js} +42 -53
  51. package/dist/{thread-state-DA37FsAT.js → thread-state-IDHdZA7R.js} +5 -5
  52. package/dist/{turn-failure-response-BLcscQ-f.js → turn-failure-response-h_LSXJ-M.js} +46 -20
  53. package/dist/{turn-lifecycle-D0e887FM.js → turn-lifecycle-Cvi6Sb8Y.js} +1 -1
  54. package/dist/{turn-session-routing-DdbSbJS6.js → turn-session-routing-5Nyv4fso.js} +1 -1
  55. package/dist/{validation-DtcovXqq.js → validation-BeTriWC2.js} +1 -1
  56. package/dist/{version-JcDaJ75p.js → version-BQX_hLDC.js} +1 -1
  57. package/dist/version.js +1 -1
  58. package/dist/{viewer-oMTUVAcR.js → viewer-DmNRM88V.js} +3 -3
  59. package/dist/{web-input-FQ5wgqYn.js → web-input-BHcGXSox.js} +96 -35
  60. package/dist/{work-BiIKfayl.js → work-DLJMV02b.js} +10 -9
  61. package/dist/{worker-BZ7l75NM.js → worker-vfG2ESg1.js} +5 -5
  62. package/package.json +5 -5
@@ -1,4 +1,4 @@
1
- import { i as getChatConfig } from "./config-BiCtNiu5.js";
1
+ import { i as getChatConfig } from "./config-Dnv8KmNs.js";
2
2
  import { setTimeout } from "node:timers/promises";
3
3
  import { createMemoryState } from "@chat-adapter/state-memory";
4
4
  import { createRedisState } from "@chat-adapter/state-redis";
@@ -1,4 +1,4 @@
1
- import { a as setUserAdminFromSql, d as getDb, n as listAdminUsersFromSql } from "./viewer-oMTUVAcR.js";
1
+ import { a as setUserAdminFromSql, d as getDb, n as listAdminUsersFromSql } from "./viewer-DmNRM88V.js";
2
2
  import { CLI_USAGE } from "./cli/run.js";
3
3
  // src/cli/admin.ts
4
4
  /**
@@ -1,21 +1,21 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { i as completeObject, o as embedTexts } from "./client-DpfjZgNk.js";
3
- import { T as withSpan, a as extractGenAiUsageSummary, b as setSpanStatus, f as logException, m as logWarn, p as logInfo, y as setSpanAttributes, z as isRecord$1 } from "./logging-dZN1Bvtu.js";
2
+ import { i as completeObject, o as embedTexts } from "./client-DZBCBj1M.js";
3
+ import { T as withSpan, a as extractGenAiUsageSummary, b as setSpanStatus, f as logException, m as logWarn, p as logInfo, y as setSpanAttributes, z as isRecord$1 } from "./logging-Dk_FpF36.js";
4
4
  import { a as getClient$1 } from "./sentry-BBUlHih9.js";
5
- import { t as canExposeConversationPayload } from "./conversation-privacy-CBUI0frD.js";
6
- import { i as getChatConfig, n as botConfig, o as getSlackBotToken } from "./config-BiCtNiu5.js";
5
+ import { t as canExposeConversationPayload } from "./conversation-privacy-FY8yc2q3.js";
6
+ import { i as getChatConfig, n as botConfig, o as getSlackBotToken } from "./config-Dnv8KmNs.js";
7
7
  import { r as defaultModelId } from "./model-profile-Bg8EoCKD.js";
8
8
  import { d as parseSlackTeamId, g as parseSlackMessageTs, i as isActorUserId, o as parseActorUserId, u as parseSlackChannelReferenceId } from "./actor-tlxzqaRe.js";
9
- import { D as hasAgentTurnUsage, M as readUserTimezone, P as saveUserTimezone, c as getConversationEventStore, d as getDb, f as getSqlExecutor, g as createSqlStore, i as resolveViewerUser, r as readActorIdentity } from "./viewer-oMTUVAcR.js";
9
+ import { D as hasAgentTurnUsage, M as readUserTimezone, P as saveUserTimezone, c as getConversationEventStore, d as getDb, f as getSqlExecutor, g as createSqlStore, i as resolveViewerUser, r as readActorIdentity } from "./viewer-DmNRM88V.js";
10
10
  import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers, s as juniorConversations } from "./agent-invocations-CxKldAeB.js";
11
- import { _ as juniorConversationAnnotations, b as juniorAttachments, f as juniorConversationBriefs, h as juniorConversationEvents, i as juniorWorkspaces, n as juniorSnapshots, r as juniorWorkspaceRepos, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-O8xqLDN6.js";
11
+ import { _ as juniorConversationAnnotations, b as juniorAttachments, f as juniorConversationBriefs, h as juniorConversationEvents, i as juniorWorkspaces, n as juniorSnapshots, r as juniorWorkspaceRepos, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-J9k2sp9m.js";
12
12
  import { o as decodeStoredConversationEvent } from "./history-AY8rs-FR.js";
13
- import { h as credentialSubjectSchema } from "./registry-BUje_knT.js";
14
- import { n as getDefaultRedisStateAdapterFor, r as getStateAdapter, s as withLock } from "./adapter-t-Y9RHML.js";
13
+ import { h as credentialSubjectSchema } from "./registry-BFzQFV_y.js";
14
+ import { n as getDefaultRedisStateAdapterFor, r as getStateAdapter, s as withLock } from "./adapter-BIacI0Bt.js";
15
15
  import { i as isValidTimeZone } from "./cadence-R7Em4RjE.js";
16
- import { B as readMessageAttachments, C as conversationReportEventSchema, F as readMessageCardRefs, J as parseBriefInput, q as conversationBriefSchema, w as conversationReportMessageEventSchema } from "./conversation-CvuKJ3tA.js";
17
- import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-DeVax2qO.js";
18
- import { D as SANDBOX_WORKSPACE_ROOT, S as runNonInteractiveCommand, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, y as sleep$1 } from "./profile-BP2N5uDY.js";
16
+ import { B as readMessageAttachments, C as conversationReportEventSchema, F as readMessageCardRefs, J as parseBriefInput, q as conversationBriefSchema, w as conversationReportMessageEventSchema } from "./conversation-B0baEwoA.js";
17
+ import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-CxatQVaj.js";
18
+ import { D as SANDBOX_WORKSPACE_ROOT, S as runNonInteractiveCommand, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, y as sleep$1 } from "./profile-Dq5I7TV1.js";
19
19
  import { AsyncLocalStorage } from "node:async_hooks";
20
20
  import { z } from "zod";
21
21
  import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
@@ -326,25 +326,49 @@ function createPluginAnnotations(args) {
326
326
  await args.db.delete(juniorConversationAnnotations).where(and(eq(juniorConversationAnnotations.conversationId, args.conversationId), eq(juniorConversationAnnotations.plugin, args.plugin), eq(juniorConversationAnnotations.kind, kind), eq(juniorConversationAnnotations.key, key)));
327
327
  },
328
328
  async list() {
329
- return (await listConversationAnnotations(args.db, args.conversationId)).filter((a) => a.plugin === args.plugin);
329
+ return (await args.db.select().from(juniorConversationAnnotations).where(and(eq(juniorConversationAnnotations.conversationId, args.conversationId), eq(juniorConversationAnnotations.plugin, args.plugin))).orderBy(desc(juniorConversationAnnotations.updatedAt))).flatMap((row) => annotationFromRow(row) ?? []);
330
330
  }
331
331
  };
332
332
  }
333
- /** Load stored annotations for one conversation, newest update first. */
333
+ /**
334
+ * Load stored annotations for one conversation, newest update first. A root
335
+ * Conversation also reads the annotations of its child Conversations.
336
+ */
334
337
  async function listConversationAnnotations(db, conversationId) {
335
338
  return (await listConversationAnnotationsById(db, [conversationId])).get(conversationId) ?? [];
336
339
  }
337
- /** Load stored annotations for a bounded set of conversations. */
340
+ /**
341
+ * Load stored annotations for a bounded set of conversations, newest update
342
+ * first. Child agents save annotations in their own Conversation, but people
343
+ * see the root Conversation. So a root also reads the annotations of every
344
+ * Conversation in its tree. The newest annotation wins for each object.
345
+ */
338
346
  async function listConversationAnnotationsById(db, conversationIds) {
339
347
  const byConversation = /* @__PURE__ */ new Map();
340
348
  if (conversationIds.length === 0) return byConversation;
341
- const rows = await db.select().from(juniorConversationAnnotations).where(inArray(juniorConversationAnnotations.conversationId, [...conversationIds])).orderBy(desc(juniorConversationAnnotations.updatedAt));
342
- for (const row of rows) {
349
+ const requested = new Set(conversationIds);
350
+ const rows = await db.select({
351
+ annotation: juniorConversationAnnotations,
352
+ rootConversationId: juniorConversations.rootConversationId
353
+ }).from(juniorConversationAnnotations).innerJoin(juniorConversations, eq(juniorConversations.conversationId, juniorConversationAnnotations.conversationId)).where(or(inArray(juniorConversationAnnotations.conversationId, [...requested]), inArray(juniorConversations.rootConversationId, [...requested]))).orderBy(desc(juniorConversationAnnotations.updatedAt));
354
+ const seen = /* @__PURE__ */ new Set();
355
+ for (const { annotation: row, rootConversationId } of rows) {
343
356
  const annotation = annotationFromRow(row);
344
357
  if (!annotation) continue;
345
- const current = byConversation.get(row.conversationId);
346
- if (current) current.push(annotation);
347
- else byConversation.set(row.conversationId, [annotation]);
358
+ for (const owner of /* @__PURE__ */ new Set([row.conversationId, rootConversationId])) {
359
+ if (!owner || !requested.has(owner)) continue;
360
+ const objectKey = JSON.stringify([
361
+ owner,
362
+ row.plugin,
363
+ row.kind,
364
+ row.key
365
+ ]);
366
+ if (seen.has(objectKey)) continue;
367
+ seen.add(objectKey);
368
+ const current = byConversation.get(owner);
369
+ if (current) current.push(annotation);
370
+ else byConversation.set(owner, [annotation]);
371
+ }
348
372
  }
349
373
  return byConversation;
350
374
  }
@@ -793,6 +817,7 @@ function reportEventData(args) {
793
817
  role: data.role,
794
818
  ...data.meta?.source === "web" || data.meta?.source === "slack" ? { source: data.meta.source } : void 0,
795
819
  ...actorIdentity ? { actorIdentity } : void 0,
820
+ ...typeof data.meta?.agentInvocationId === "string" ? { agentInvocationId: data.meta.agentInvocationId } : void 0,
796
821
  eventObjectType: objectTypeSchema.safeParse(data.meta?.eventObjectType).data,
797
822
  ...typeof data.meta?.eventType === "string" ? { eventType: data.meta.eventType } : void 0,
798
823
  ...typeof data.meta?.explicitMention === "boolean" ? { explicitMention: data.meta.explicitMention } : void 0,
@@ -1807,6 +1832,27 @@ function createPluginState(plugin, adapter) {
1807
1832
  }
1808
1833
  };
1809
1834
  }
1835
+ // src/chat/tools/execution/plugin-tool-denied-error.ts
1836
+ const PLUGIN_DENIAL_INSTRUCTIONS = [
1837
+ "This action was blocked by policy and was not executed.",
1838
+ "Do not retry it or reach the same result through a workaround or another tool.",
1839
+ "Stop and explain what was blocked and why."
1840
+ ].join("\n");
1841
+ /** Expected tool failure when a plugin hook refuses a tool call by policy. */
1842
+ var PluginToolDeniedError = class extends Error {
1843
+ constructor(reason) {
1844
+ super(`${PLUGIN_DENIAL_INSTRUCTIONS}\nReason: ${reason}`);
1845
+ this.name = "PluginToolDeniedError";
1846
+ }
1847
+ };
1848
+ // src/chat/tools/execution/tool-input-error.ts
1849
+ /** Thrown when a tool fails due to invalid model/user input, not a system error. */
1850
+ var ToolInputError = class extends Error {
1851
+ constructor(message, options) {
1852
+ super(message, options);
1853
+ this.name = "ToolInputError";
1854
+ }
1855
+ };
1810
1856
  // src/chat/dashboard-link.ts
1811
1857
  let dashboardConversationLinkOptions;
1812
1858
  function withHttps(host) {
@@ -3409,7 +3455,6 @@ function coreTaskRegistrations() {
3409
3455
  }
3410
3456
  // src/chat/plugins/agent-hooks.ts
3411
3457
  var agent_hooks_exports = /* @__PURE__ */ __exportAll({
3412
- PluginHookDeniedError: () => PluginHookDeniedError,
3413
3458
  applyPluginFormatMarkdown: () => applyPluginFormatMarkdown,
3414
3459
  createPluginHookRunner: () => createPluginHookRunner,
3415
3460
  getPluginApiRoutes: () => getPluginApiRoutes,
@@ -3424,13 +3469,6 @@ var agent_hooks_exports = /* @__PURE__ */ __exportAll({
3424
3469
  setPlugins: () => setPlugins,
3425
3470
  validatePlugins: () => validatePlugins
3426
3471
  });
3427
- /** Signal that a plugin intentionally denied a tool execution. */
3428
- var PluginHookDeniedError = class extends Error {
3429
- constructor(message) {
3430
- super(message);
3431
- this.name = "PluginHookDeniedError";
3432
- }
3433
- };
3434
3472
  let registeredPlugins = [];
3435
3473
  const PLUGIN_NAME_RE = /^[a-z][a-z0-9-]*$/;
3436
3474
  const PLUGIN_TASK_NAME_RE = /^[a-z][A-Za-z0-9]*$/;
@@ -4358,7 +4396,7 @@ function createPluginHookRunner(input = {}) {
4358
4396
  const hook = plugin.hooks?.beforeToolExecute;
4359
4397
  if (!hook) continue;
4360
4398
  let replacement;
4361
- let denied;
4399
+ let blocked;
4362
4400
  await hook({
4363
4401
  ...basePluginContext(plugin),
4364
4402
  actor: input.actor,
@@ -4377,15 +4415,18 @@ function createPluginHookRunner(input = {}) {
4377
4415
  }
4378
4416
  },
4379
4417
  decision: {
4380
- deny(message) {
4381
- denied = message;
4418
+ deny(reason) {
4419
+ blocked = new PluginToolDeniedError(reason);
4420
+ },
4421
+ redirect(message) {
4422
+ blocked = new ToolInputError(message);
4382
4423
  },
4383
4424
  replaceInput(input) {
4384
4425
  replacement = input;
4385
4426
  }
4386
4427
  }
4387
4428
  });
4388
- if (denied) throw new PluginHookDeniedError(denied);
4429
+ if (blocked) throw blocked;
4389
4430
  if (replacement !== void 0) {
4390
4431
  if (!isRecord(replacement)) throw new Error(`Plugin "${pluginName}" replaced tool input with a non-object value`);
4391
4432
  nextInput = { ...replacement };
@@ -4398,4 +4439,4 @@ function createPluginHookRunner(input = {}) {
4398
4439
  }
4399
4440
  };
4400
4441
  }
4401
- export { bindSlackDirectCredentialSubject as $, agentsInstructionsUpdatedEvent as $t, getWorkspaceSnapshotBuilder as A, conversationIsMemberRoot as At, STOP_WATCHING_TOOL_NAME as B, readAttachmentVisionSummary as Bt, WorkspaceValidationError as C, createPluginModel as Ct, setWorkspaceSnapshotBuild as D, conversationArchivedForEmail as Dt, setWorkspaceSnapshot as E, conversationArchiveTimes as Et, isSlackMessageTurn as F, readLatestConversationBrief as Ft, createWatch as G, listConversationAnnotations as Gt, cancelWatch as H, resolveRootVisibility as Ht, slackMessageTurnDisabledReason as I, readConversationEventPage as It, getWatch as J, resolveUserTimezone as Jt, deliverWatch as K, listConversationAnnotationsById as Kt, RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS as L, buildSentryConversationUrl as Lt, workspaceRepoCheckoutPath as M, conversationNotArchivedForUser as Mt, resolveChannelCapabilities as N, viewerConversationMembership as Nt, SANDBOX_RUNTIME as O, conversationArchivedForUser as Ot, getSlackToolContext as P, createPluginConversationEvents as Pt, bindScheduledAutomationCredentialSubject as Q, JUNIOR_NATIVE_EVENT_NAMESPACE as Qt, RESOURCE_SUBSCRIPTION_MAX_TTL_MS as R, getSlackFileId as Rt, updateWorkspace as S, createPluginEmbedder as St, loadSnapshotsForProfile as T, readConversationAccessFromSql as Tt, collectEventMatchKeys as U, saveObjectAnnotations as Ut, cancelSubscriptions as V, recordSlackAttachment as Vt, createTimerWatch as W, createPluginAnnotations as Wt, takeDueTimerWatches as X, createPluginCache as Xt, listWatches as Y, lookupSlackUser as Yt, bindEventAutomationCredentialSubject as Z, createCache as Zt, deleteWorkspace as _, getDashboardConversationLink as _t, getPluginRoutes as a, downloadPrivateSlackFile as at, listWorkspaces as b, setDashboardConversationLinkOptions as bt, getPluginTools as c, getSlackClient as ct, setPlugins as d, normalizeSlackConversationId as dt, authenticationLinkedEvent as en, verifyEventAutomationCredentialSubject as et, validatePlugins as f, runWithSlackInstallationToken as ft, createWorkspace as g, JUNIOR_THREAD_STATE_TTL_MS as gt, setBriefsConfig as h, runWithWorkspaceTeamId as ht, getPluginApiRoutes as i, SlackActionError as it, tryWorkspaceRepoCheckoutPath as j, conversationNotArchivedForEmail as jt, deleteWorkspaceSnapshotBuilders as k, conversationHasParticipantUser as kt, getPluginUserPromptContributions as l, isConversationScopedChannel as lt, registration_exports as m, getWorkspaceTeamId as mt, applyPluginFormatMarkdown as n, conversationNoteEvent as nn, verifySlackDirectCredentialSubject as nt, getPluginSlackConversationLink as o, getFilePermalink as ot, coreTaskRegistrations as p, withSlackRetries as pt, findMatchingWatches as q, defaultTimezone as qt, createPluginHookRunner as r, verifyTimerWatchCredentialSubject as rt, getPluginSystemPromptContributions as s, getHeaderString as st, agent_hooks_exports as t, authenticationUnlinkedEvent as tn, verifyScheduledAutomationCredentialSubject as tt, getPlugins as u, isDmChannel as ut, getWorkspace as v, getDashboardObjectIconLink as vt, invalidateReadySnapshot as w, createPluginLogger as wt, listWorkspacesByRepository as x, createPluginState as xt, getWorkspaceByName as y, getDashboardTaskLink as yt, RESOURCE_WATCH_TOOL_SOURCE as z, matchSlackAttachments as zt };
4442
+ export { bindSlackDirectCredentialSubject as $, createCache as $t, getWorkspaceSnapshotBuilder as A, conversationArchivedForUser as At, STOP_WATCHING_TOOL_NAME as B, getSlackFileId as Bt, WorkspaceValidationError as C, createPluginState as Ct, setWorkspaceSnapshotBuild as D, readConversationAccessFromSql as Dt, setWorkspaceSnapshot as E, createPluginLogger as Et, isSlackMessageTurn as F, viewerConversationMembership as Ft, createWatch as G, saveObjectAnnotations as Gt, cancelWatch as H, readAttachmentVisionSummary as Ht, slackMessageTurnDisabledReason as I, createPluginConversationEvents as It, getWatch as J, listConversationAnnotationsById as Jt, deliverWatch as K, createPluginAnnotations as Kt, RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS as L, readLatestConversationBrief as Lt, workspaceRepoCheckoutPath as M, conversationIsMemberRoot as Mt, resolveChannelCapabilities as N, conversationNotArchivedForEmail as Nt, SANDBOX_RUNTIME as O, conversationArchiveTimes as Ot, getSlackToolContext as P, conversationNotArchivedForUser as Pt, bindScheduledAutomationCredentialSubject as Q, createPluginCache as Qt, RESOURCE_SUBSCRIPTION_MAX_TTL_MS as R, readConversationEventPage as Rt, updateWorkspace as S, PluginToolDeniedError as St, loadSnapshotsForProfile as T, createPluginModel as Tt, collectEventMatchKeys as U, recordSlackAttachment as Ut, cancelSubscriptions as V, matchSlackAttachments as Vt, createTimerWatch as W, resolveRootVisibility as Wt, takeDueTimerWatches as X, resolveUserTimezone as Xt, listWatches as Y, defaultTimezone as Yt, bindEventAutomationCredentialSubject as Z, lookupSlackUser as Zt, deleteWorkspace as _, getDashboardConversationLink as _t, getPluginRoutes as a, downloadPrivateSlackFile as at, listWorkspaces as b, setDashboardConversationLinkOptions as bt, getPluginTools as c, getSlackClient as ct, setPlugins as d, normalizeSlackConversationId as dt, JUNIOR_NATIVE_EVENT_NAMESPACE as en, verifyEventAutomationCredentialSubject as et, validatePlugins as f, runWithSlackInstallationToken as ft, createWorkspace as g, JUNIOR_THREAD_STATE_TTL_MS as gt, setBriefsConfig as h, runWithWorkspaceTeamId as ht, getPluginApiRoutes as i, conversationNoteEvent as in, SlackActionError as it, tryWorkspaceRepoCheckoutPath as j, conversationHasParticipantUser as jt, deleteWorkspaceSnapshotBuilders as k, conversationArchivedForEmail as kt, getPluginUserPromptContributions as l, isConversationScopedChannel as lt, registration_exports as m, getWorkspaceTeamId as mt, applyPluginFormatMarkdown as n, authenticationLinkedEvent as nn, verifySlackDirectCredentialSubject as nt, getPluginSlackConversationLink as o, getFilePermalink as ot, coreTaskRegistrations as p, withSlackRetries as pt, findMatchingWatches as q, listConversationAnnotations as qt, createPluginHookRunner as r, authenticationUnlinkedEvent as rn, verifyTimerWatchCredentialSubject as rt, getPluginSystemPromptContributions as s, getHeaderString as st, agent_hooks_exports as t, agentsInstructionsUpdatedEvent as tn, verifyScheduledAutomationCredentialSubject as tt, getPlugins as u, isDmChannel as ut, getWorkspace as v, getDashboardObjectIconLink as vt, invalidateReadySnapshot as w, createPluginEmbedder as wt, listWorkspacesByRepository as x, ToolInputError as xt, getWorkspaceByName as y, getDashboardTaskLink as yt, RESOURCE_WATCH_TOOL_SOURCE as z, buildSentryConversationUrl as zt };