@sentry/junior 0.261.0 → 0.262.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 (66) hide show
  1. package/dist/{adapter-Bx_1B2De.js → adapter-t-Y9RHML.js} +2 -2
  2. package/dist/{admin-BAbbVgVc.js → admin-BCqeFndQ.js} +1 -1
  3. package/dist/{agent-hooks-ghyZZQqB.js → agent-hooks-9q2zdKHL.js} +63 -14
  4. package/dist/{agent-invocations-Qfz7dWgU.js → agent-invocations-CxKldAeB.js} +1 -0
  5. package/dist/{agent-runner-g110-xgg.js → agent-runner-Cx6NO5LE.js} +112 -35
  6. package/dist/api/schema.js +1 -1
  7. package/dist/api.js +31 -28
  8. package/dist/{app-VCiPQ65Q.d.ts → app-Bo0kB987.d.ts} +1 -1
  9. package/dist/app.d.ts +1 -1
  10. package/dist/app.js +52 -59
  11. package/dist/{assistant-reply-CQcMaWNL.js → assistant-reply-B2qUBAwL.js} +1 -1
  12. package/dist/{briefs-CKcfrIQL.js → briefs-DsGH2Vym.js} +2 -2
  13. package/dist/{catalog-runtime-cd60vzAB.js → catalog-runtime-CfwKT0sn.js} +1 -1
  14. package/dist/cli/chat.js +15 -17
  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.js +3 -3
  20. package/dist/{client-2i0JJpoC.js → client-DpfjZgNk.js} +2 -2
  21. package/dist/{config-C9qM41O0.js → config-BiCtNiu5.js} +2 -2
  22. package/dist/{connections-DrtTrwkp.js → connections-D9IKbfk-.js} +10 -10
  23. package/dist/{conversation-privacy-1iTiFX1O.js → conversation-privacy-CBUI0frD.js} +1 -1
  24. package/dist/{credential-sync-wKNQ1dYc.js → credential-sync-Bu6ZOuOk.js} +14 -14
  25. package/dist/{executor-Rimyj8HZ.js → executor-O8xqLDN6.js} +4 -3
  26. package/dist/{images-D1JggcVY.js → images-AM1exvU0.js} +2 -2
  27. package/dist/instrumentation.js +2 -2
  28. package/dist/{job-queue-BjQdSqA3.js → job-queue-DmarAQGI.js} +1 -1
  29. package/dist/{logging-BLTa7R7f.js → logging-dZN1Bvtu.js} +1 -1
  30. package/dist/{message-DAeP5WWW.js → message-C_g2S8kv.js} +3 -3
  31. package/dist/nitro.d.ts +1 -1
  32. package/dist/nitro.js +3 -3
  33. package/dist/{oauth-callback-server-BAy1hhF1.js → oauth-callback-server-DvvOvr4q.js} +2 -2
  34. package/dist/{profile-CthM2qFM.js → profile-BP2N5uDY.js} +13 -6
  35. package/dist/{registry-BnSaArNb.js → registry-BUje_knT.js} +1 -1
  36. package/dist/{resolve-B5eLRl0v.js → resolve-DftZiYNU.js} +4 -4
  37. package/dist/{result-Cvm0GZCv.js → result-CRMRT9CE.js} +16 -11
  38. package/dist/{runner-D-pUzHbU.js → runner-4mmL2Pt1.js} +10 -10
  39. package/dist/{sandbox-egress-signals-mvwGV7rl.js → sandbox-egress-signals-1ysv0z5A.js} +1 -1
  40. package/dist/{schema-OzL8Zw4H.js → schema-XuTZukI9.js} +1 -1
  41. package/dist/{service-account-DWxvpSfd.js → service-account-B1sH3P7d.js} +3 -3
  42. package/dist/{service-account-Ch1uIpnR.js → service-account-Del2I_x3.js} +3 -3
  43. package/dist/{session-stop-Boj_zpTa.js → session-stop-ZuyOHxdK.js} +11 -11
  44. package/dist/{skills-BpdYCfFt.js → skills-lPeepA2b.js} +2 -2
  45. package/dist/{spawn-h1DJMQTf.js → spawn-DovpdlrW.js} +3 -2
  46. package/dist/{store-B6KqcdCQ.js → store-dZynGGFW.js} +6 -6
  47. package/dist/{task-queue-BaDwKSYv.js → task-queue-CmMCtzHO.js} +3 -3
  48. package/dist/{task-runner-BAX5li9a.js → task-runner-BRgJ5e0s.js} +19 -11
  49. package/dist/{tasks-uCfmlWga.js → tasks-Bh2qYaed.js} +15 -24
  50. package/dist/{thread-state-BJHVIz8G.js → thread-state-DA37FsAT.js} +5 -5
  51. package/dist/{turn-failure-response-CCC76P6-.js → turn-failure-response-BLcscQ-f.js} +7 -7
  52. package/dist/{turn-lifecycle-pHSESVR9.js → turn-lifecycle-D0e887FM.js} +1 -1
  53. package/dist/{turn-session-routing-BIKJZaiw.js → turn-session-routing-DdbSbJS6.js} +1 -1
  54. package/dist/{validation-B9KL_5Wc.js → validation-DtcovXqq.js} +1 -1
  55. package/dist/{version-CN9BXMW_.js → version-JcDaJ75p.js} +1 -1
  56. package/dist/version.js +1 -1
  57. package/dist/{viewer-C5xFaYVi.js → viewer-oMTUVAcR.js} +4 -4
  58. package/dist/{web-input-D6eqfXYd.js → web-input-FQ5wgqYn.js} +26 -26
  59. package/dist/{work-C-ecZAme.js → work-BiIKfayl.js} +40 -10
  60. package/dist/{worker-BpYDqiOf.js → worker-BZ7l75NM.js} +5 -5
  61. package/migrations/0062_plugin_report_index.sql +20 -0
  62. package/migrations/0063_agent_invocation_type.sql +1 -0
  63. package/migrations/meta/0062_snapshot.json +3499 -0
  64. package/migrations/meta/0063_snapshot.json +3505 -0
  65. package/migrations/meta/_journal.json +14 -0
  66. package/package.json +5 -5
package/dist/api.js CHANGED
@@ -1,30 +1,30 @@
1
- import { D as AutomationConflictError, E as sameDefinitionValue, L as loadTurnProjection, O as automationRevision, S as automationDefinition, T as readAutomationVersion, a as saveScheduledAutomation, bn as createUserTokenStore, k as requireAutomationRevision, rr as piMessageFromHistoryItem, v as saveEventAutomation, y as setEventAutomationStatus } from "./tasks-uCfmlWga.js";
2
- import { p as escapeXml } from "./client-2i0JJpoC.js";
3
- import { f as logException, m as logWarn, p as logInfo } from "./logging-BLTa7R7f.js";
1
+ import { D as AutomationConflictError, E as sameDefinitionValue, L as loadTurnProjection, O as automationRevision, S as automationDefinition, T as readAutomationVersion, a as saveScheduledAutomation, k as requireAutomationRevision, nr as piMessageFromHistoryItem, v as saveEventAutomation, y as setEventAutomationStatus, yn as createUserTokenStore } from "./tasks-Bh2qYaed.js";
2
+ import { p as escapeXml } from "./client-DpfjZgNk.js";
3
+ import { f as logException, m as logWarn, p as logInfo } from "./logging-dZN1Bvtu.js";
4
4
  import { d as parseSlackTeamId, g as parseSlackMessageTs, l as parseSlackChannelId } from "./actor-tlxzqaRe.js";
5
- import { C as addAgentTurnUsage, D as hasAgentTurnUsage, E as agentTurnUsageSchema, O as resolveRootConversationId, S as parseSessionSource, c as getConversationEventStore, d as getDb, f as getSqlExecutor, h as loadConversationSlackTenantIds, i as resolveViewerUser, m as withConversationEventLock, o as updateViewerDisplayName, t as findUserByEmail, u as getConversationStore, v as locationFromRow } from "./viewer-C5xFaYVi.js";
6
- import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers, o as conversationReadColumns, s as juniorConversations } from "./agent-invocations-Qfz7dWgU.js";
7
- import { f as juniorConversationBriefs, g as juniorApiTokens, h as juniorConversationEvents, m as juniorConversationMetrics, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-Rimyj8HZ.js";
5
+ import { C as addAgentTurnUsage, D as hasAgentTurnUsage, E as agentTurnUsageSchema, O as resolveRootConversationId, S as parseSessionSource, c as getConversationEventStore, d as getDb, f as getSqlExecutor, h as loadConversationSlackTenantIds, i as resolveViewerUser, m as withConversationEventLock, o as updateViewerDisplayName, t as findUserByEmail, u as getConversationStore, v as locationFromRow } from "./viewer-oMTUVAcR.js";
6
+ import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers, o as conversationReadColumns, s as juniorConversations } from "./agent-invocations-CxKldAeB.js";
7
+ import { f as juniorConversationBriefs, g as juniorApiTokens, h as juniorConversationEvents, m as juniorConversationMetrics, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-O8xqLDN6.js";
8
8
  import { d as contextProvenance } from "./history-AY8rs-FR.js";
9
- import { n as pluginCatalogRuntime } from "./catalog-runtime-cd60vzAB.js";
10
- import { F as AutomationEditError, I as eventAutomationTriggerAvailable, P as editEventAutomation, R as resolveTaskOutcomes, S as readLiveAttachment, T as parseSlackThreadId, U as listChildAgents, _t as conversationSubtreeColumns, gt as conversationSubtree, j as editScheduledAutomation, m as readStats, rt as getChildAgentLabel } from "./agent-runner-g110-xgg.js";
11
- import { At as conversationIsMemberRoot, C as WorkspaceValidationError, Dt as conversationArchivedForEmail, Et as conversationArchiveTimes, Ft as readLatestConversationBrief, Gt as listConversationAnnotations, It as readConversationEventPage, Kt as listConversationAnnotationsById, Lt as buildSentryConversationUrl, M as workspaceRepoCheckoutPath, Mt as conversationNotArchivedForUser, Nt as viewerConversationMembership, O as SANDBOX_RUNTIME, Ot as conversationArchivedForUser, S as updateWorkspace, Tt as readConversationAccessFromSql, Yt as lookupSlackUser, _ as deleteWorkspace, b as listWorkspaces, ct as getSlackClient, g as createWorkspace, jt as conversationNotArchivedForEmail, kt as conversationHasParticipantUser, pt as withSlackRetries, u as getPlugins, v as getWorkspace, wt as createPluginLogger, x as listWorkspacesByRepository } from "./agent-hooks-ghyZZQqB.js";
9
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-CfwKT0sn.js";
10
+ import { F as AutomationEditError, I as eventAutomationTriggerAvailable, P as editEventAutomation, R as resolveTaskOutcomes, S as readLiveAttachment, T as parseSlackThreadId, U as listChildAgents, bt as conversationSubtreeColumns, it as getChildAgentLabel, j as editScheduledAutomation, m as readStats, yt as conversationSubtree } from "./agent-runner-Cx6NO5LE.js";
11
+ import { At as conversationIsMemberRoot, C as WorkspaceValidationError, Dt as conversationArchivedForEmail, Et as conversationArchiveTimes, Ft as readLatestConversationBrief, Gt as listConversationAnnotations, It as readConversationEventPage, Kt as listConversationAnnotationsById, Lt as buildSentryConversationUrl, M as workspaceRepoCheckoutPath, Mt as conversationNotArchivedForUser, Nt as viewerConversationMembership, O as SANDBOX_RUNTIME, Ot as conversationArchivedForUser, S as updateWorkspace, Tt as readConversationAccessFromSql, Xt as createPluginCache, Yt as lookupSlackUser, _ as deleteWorkspace, b as listWorkspaces, ct as getSlackClient, g as createWorkspace, jt as conversationNotArchivedForEmail, kt as conversationHasParticipantUser, pt as withSlackRetries, u as getPlugins, v as getWorkspace, wt as createPluginLogger, x as listWorkspacesByRepository } from "./agent-hooks-9q2zdKHL.js";
12
12
  import { t as getFirstRunAtMs } from "./cadence-R7Em4RjE.js";
13
13
  import { A as forkConversationResponseSchema, B as readMessageAttachments, D as createConversationBodySchema, O as createConversationMessageBodySchema, V as INPUT_IMAGE_TYPES, _ as conversationParamsSchema, a as cancelConversationPendingMessagesBodySchema, c as conversationAttachmentParamsSchema, d as conversationDetailReportSchema, g as conversationFeedSchema, h as conversationFeedQuerySchema, i as archiveConversationResponseSchema, k as forkConversationBodySchema, m as conversationEventsQuerySchema, o as cancelConversationPendingMessagesResponseSchema, p as conversationEventPageSchema, r as archiveConversationBodySchema, t as acceptedConversationMessageSchema, u as conversationDetailQuerySchema, x as conversationPendingMessagesReportSchema } from "./conversation-CvuKJ3tA.js";
14
- import { n as hash, t as create } from "./profile-CthM2qFM.js";
15
- import { d as getEventCatalog, x as automationEventCatalog } from "./session-stop-Boj_zpTa.js";
16
- import { d as getSandboxResources, t as getCachedSnapshot } from "./resolve-B5eLRl0v.js";
17
- import { a as getVercelConversationWorkQueue } from "./job-queue-BjQdSqA3.js";
18
- import { a as cancelHumanFacingPendingMessages, h as getConversation } from "./store-B6KqcdCQ.js";
19
- import { n as finishServiceAccountSignIn, o as serviceAccountPlugins, r as getServiceAccountStatus, s as startServiceAccountSignIn, t as disconnectServiceAccount } from "./service-account-Ch1uIpnR.js";
14
+ import { n as hash, t as create } from "./profile-BP2N5uDY.js";
15
+ import { d as getEventCatalog, x as automationEventCatalog } from "./session-stop-ZuyOHxdK.js";
16
+ import { d as getSandboxResources, t as getCachedSnapshot } from "./resolve-DftZiYNU.js";
17
+ import { a as getVercelConversationWorkQueue } from "./job-queue-DmarAQGI.js";
18
+ import { a as cancelHumanFacingPendingMessages, h as getConversation } from "./store-dZynGGFW.js";
19
+ import { n as finishServiceAccountSignIn, o as serviceAccountPlugins, r as getServiceAccountStatus, s as startServiceAccountSignIn, t as disconnectServiceAccount } from "./service-account-Del2I_x3.js";
20
20
  import { M as compileScheduleIntent, P as weekdaySchema, _ as automationSummarySchema, b as automationVersionListSchema, c as automationLifecycleSchema, d as automationParamsSchema, f as automationRunListSchema, g as automationSchedulePreviewSchema, h as automationScheduleIntentSchema, i as automationExecutionListSchema, j as ScheduleIntentError, l as automationListQuerySchema, n as automationEditSchema, r as automationEventCatalogSchema, t as automationEditErrorSchema, u as automationListSchema, v as automationUpdateSchema, x as automationVersionParamsSchema, y as automationVersionActivateSchema } from "./automation-DrpcA-SX.js";
21
21
  import { C as skillReportsSchema, a as fillUtcHours, b as pluginsSchema, c as sumUtcHoursIntoSixHours, d as trailingUtcSixHourWindow, f as utcDayKey, h as pluginOperationalReportFeedSchema, i as fillUtcDays, l as trailingUtcDayWindow, m as healthReportSchema, n as DAY_MS$1, o as fillUtcSixHours, p as utcHourKey, r as HOUR_MS$1, s as startOfUtcHour, u as trailingUtcHourWindow, x as runtimeInfoReportSchema } from "./web-message-id-CJSUiksE.js";
22
- import { B as readHealthReport, I as createVercelAttachmentStorage, _ as readViewerAutomationRuns, a as recordWebConversationActivity, b as readViewerAutomations, d as resolveSlackConversationContextFromThreadId, g as readViewerAutomationExecutions, h as readConversationSourceTask, i as createConversationId, k as stopConversationTurn, l as getProductionSlackAdapter, m as deleteViewerTask, o as webActorFromEmail, p as ViewerTaskNotFoundError, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage, u as formatSlackConversationRedactedLabel, v as readViewerAutomationSummary, w as clearSlackPendingReactions, x as resolveViewerTaskCandidate, y as readViewerAutomationVersions } from "./web-input-D6eqfXYd.js";
23
- import { F as conversationAggregateColumns, I as conversationRangeColumns, M as readAutomationTitlesByConversationId, P as conversationActiveDaysColumn } from "./task-runner-BAX5li9a.js";
24
- import { d as legacyWebMailboxMetadataSchema } from "./result-Cvm0GZCv.js";
25
- import { a as startConnection, l as getWebAuthorization, n as isConnectableProvider, r as listConnections, t as disconnectConnection, u as htmlCallbackResponse } from "./connections-DrtTrwkp.js";
26
- import { t as decodeInputImages } from "./images-D1JggcVY.js";
27
- import { A as activityHours$1, C as personParamsSchema, D as locationDirectoryReportSchema, E as locationDetailReportSchema, H as codePersonReportSchema, I as disconnectConnectionResponseSchema, J as stopConversationTurnResponseSchema, L as startConnectionResponseSchema, N as connectionListSchema, O as locationParamsSchema, P as connectionParamsSchema, S as actorProfileReportSchema, U as codeRepositoryParamsSchema, V as codeOverviewReportSchema, W as codeRepositoryReportSchema, X as apiErrorSchema, Y as conversationStatsReportSchema, _ as personalTokenListSchema, a as workspaceBodySchema, b as revokePersonalTokenResponseSchema, d as serviceAccountListSchema, f as serviceAccountParamsSchema, g as createdPersonalTokenSchema, h as createPersonalTokenBodySchema, i as deleteWorkspaceResponseSchema, j as activitySixHours$1, k as activityDays$1, l as workspaceSchema, m as startServiceAccountSignInResponseSchema, n as statsReportSchema, o as workspaceListSchema, q as conversationChildAgentsReportSchema, s as workspaceParamsSchema, u as disconnectServiceAccountResponseSchema, w as personalSpendReportSchema, x as actorDirectoryReportSchema, y as personalTokenParamsSchema } from "./schema-OzL8Zw4H.js";
22
+ import { B as readHealthReport, I as createVercelAttachmentStorage, _ as readViewerAutomationRuns, a as recordWebConversationActivity, b as readViewerAutomations, d as resolveSlackConversationContextFromThreadId, g as readViewerAutomationExecutions, h as readConversationSourceTask, i as createConversationId, k as stopConversationTurn, l as getProductionSlackAdapter, m as deleteViewerTask, o as webActorFromEmail, p as ViewerTaskNotFoundError, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage, u as formatSlackConversationRedactedLabel, v as readViewerAutomationSummary, w as clearSlackPendingReactions, x as resolveViewerTaskCandidate, y as readViewerAutomationVersions } from "./web-input-FQ5wgqYn.js";
23
+ import { F as conversationAggregateColumns, I as conversationRangeColumns, M as readAutomationTitlesByConversationId, P as conversationActiveDaysColumn } from "./task-runner-BRgJ5e0s.js";
24
+ import { d as legacyWebMailboxMetadataSchema } from "./result-CRMRT9CE.js";
25
+ import { a as startConnection, l as getWebAuthorization, n as isConnectableProvider, r as listConnections, t as disconnectConnection, u as htmlCallbackResponse } from "./connections-D9IKbfk-.js";
26
+ import { t as decodeInputImages } from "./images-AM1exvU0.js";
27
+ import { A as activityHours$1, C as personParamsSchema, D as locationDirectoryReportSchema, E as locationDetailReportSchema, H as codePersonReportSchema, I as disconnectConnectionResponseSchema, J as stopConversationTurnResponseSchema, L as startConnectionResponseSchema, N as connectionListSchema, O as locationParamsSchema, P as connectionParamsSchema, S as actorProfileReportSchema, U as codeRepositoryParamsSchema, V as codeOverviewReportSchema, W as codeRepositoryReportSchema, X as apiErrorSchema, Y as conversationStatsReportSchema, _ as personalTokenListSchema, a as workspaceBodySchema, b as revokePersonalTokenResponseSchema, d as serviceAccountListSchema, f as serviceAccountParamsSchema, g as createdPersonalTokenSchema, h as createPersonalTokenBodySchema, i as deleteWorkspaceResponseSchema, j as activitySixHours$1, k as activityDays$1, l as workspaceSchema, m as startServiceAccountSignInResponseSchema, n as statsReportSchema, o as workspaceListSchema, q as conversationChildAgentsReportSchema, s as workspaceParamsSchema, u as disconnectServiceAccountResponseSchema, w as personalSpendReportSchema, x as actorDirectoryReportSchema, y as personalTokenParamsSchema } from "./schema-XuTZukI9.js";
28
28
  import { Hono } from "hono";
29
29
  import path from "node:path";
30
30
  import { z } from "zod";
@@ -629,7 +629,8 @@ async function listConversationSidebarAnnotations(conversationIds, annotationsBy
629
629
  conversationIds,
630
630
  db: getDb(),
631
631
  log: createPluginLogger(plugin.manifest.name),
632
- plugin: { name: plugin.manifest.name }
632
+ plugin: { name: plugin.manifest.name },
633
+ cache: createPluginCache(plugin.manifest.name)
633
634
  });
634
635
  for (const [conversationId, annotations] of Object.entries(result.annotationsByConversationId)) {
635
636
  if (!candidates.has(conversationId)) continue;
@@ -1199,7 +1200,8 @@ async function listConversationWork(conversationIds) {
1199
1200
  conversationIds,
1200
1201
  db: getDb(),
1201
1202
  log: createPluginLogger(plugin.manifest.name),
1202
- plugin: { name: plugin.manifest.name }
1203
+ plugin: { name: plugin.manifest.name },
1204
+ cache: createPluginCache(plugin.manifest.name)
1203
1205
  });
1204
1206
  for (const conversationId of result.conversationIds) {
1205
1207
  if (!candidates.has(conversationId)) continue;
@@ -3708,7 +3710,7 @@ async function readPeoplePluginReports(args) {
3708
3710
  reports: [],
3709
3711
  source: "plugins"
3710
3712
  });
3711
- const { getPluginProfileReports } = await import("./agent-hooks-ghyZZQqB.js").then((n) => n.t);
3713
+ const { getPluginProfileReports } = await import("./agent-hooks-9q2zdKHL.js").then((n) => n.t);
3712
3714
  return pluginOperationalReportFeedSchema.parse({
3713
3715
  generatedAt: new Date(nowMs).toISOString(),
3714
3716
  reports: await getPluginProfileReports({
@@ -4184,6 +4186,7 @@ async function readPluginUserPage(input) {
4184
4186
  db: getDb(),
4185
4187
  log: createPluginLogger(plugin.manifest.name),
4186
4188
  plugin: { name: plugin.manifest.name },
4189
+ cache: createPluginCache(plugin.manifest.name),
4187
4190
  viewer
4188
4191
  }, input.query));
4189
4192
  if (content.records.some((record) => record.actions?.some((action) => !actionBelongsToPlugin(action.href, plugin.manifest.name)))) throw new Error(`Plugin user page "${plugin.manifest.name}/${page.id}" returned an action outside its API namespace.`);
@@ -4739,7 +4742,7 @@ function readDescriptionText(home) {
4739
4742
  }
4740
4743
  /** Read discovered skill names for authenticated runtime diagnostics. */
4741
4744
  async function readSkillReports() {
4742
- const { discoverSkills } = await import("./skills-BpdYCfFt.js").then((n) => n.o);
4745
+ const { discoverSkills } = await import("./skills-lPeepA2b.js").then((n) => n.o);
4743
4746
  const skills = await discoverSkills();
4744
4747
  return skillReportsSchema.parse(skills.map((skill) => ({
4745
4748
  name: skill.name,
@@ -4748,7 +4751,7 @@ async function readSkillReports() {
4748
4751
  }
4749
4752
  /** Read safe configured plugin metadata for authenticated runtime diagnostics. */
4750
4753
  async function readPlugins() {
4751
- const { pluginCatalogRuntime } = await import("./catalog-runtime-cd60vzAB.js").then((n) => n.t);
4754
+ const { pluginCatalogRuntime } = await import("./catalog-runtime-CfwKT0sn.js").then((n) => n.t);
4752
4755
  return pluginsSchema.parse(pluginCatalogRuntime.getProviders().map((plugin) => ({
4753
4756
  configKeys: plugin.manifest.configKeys ?? [],
4754
4757
  description: plugin.manifest.description,
@@ -4760,7 +4763,7 @@ async function readPlugins() {
4760
4763
  async function readRuntimeInfoReport() {
4761
4764
  const [{ homeDir }, { pluginCatalogRuntime }, plugins, skills] = await Promise.all([
4762
4765
  import("./package-discovery-DJBompdd.js").then((n) => n.r),
4763
- import("./catalog-runtime-cd60vzAB.js").then((n) => n.t),
4766
+ import("./catalog-runtime-CfwKT0sn.js").then((n) => n.t),
4764
4767
  readPlugins(),
4765
4768
  readSkillReports()
4766
4769
  ]);
@@ -4777,7 +4780,7 @@ async function readRuntimeInfoReport() {
4777
4780
  /** Read sanitized operational summaries contributed by plugins. */
4778
4781
  async function readPluginOperationalReportFeed() {
4779
4782
  const nowMs = Date.now();
4780
- const { getPluginOperationalReports } = await import("./agent-hooks-ghyZZQqB.js").then((n) => n.t);
4783
+ const { getPluginOperationalReports } = await import("./agent-hooks-9q2zdKHL.js").then((n) => n.t);
4781
4784
  return pluginOperationalReportFeedSchema.parse({
4782
4785
  source: "plugins",
4783
4786
  generatedAt: new Date(nowMs).toISOString(),
@@ -80,7 +80,7 @@ interface RuntimeLimits {
80
80
  * Add new keys here as features graduate from private experiments; remove them
81
81
  * once they become stable defaults.
82
82
  */
83
- declare const EXPERIMENTAL_FEATURES: readonly ["operator-tools", "passive-routing", "subagents"];
83
+ declare const EXPERIMENTAL_FEATURES: readonly ["operator-tools", "passive-routing"];
84
84
  /** One known experimental feature name. */
85
85
  type ExperimentalFeature = (typeof EXPERIMENTAL_FEATURES)[number];
86
86
  /** App-level opt-ins for unstable product features. */
package/dist/app.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { i as ModelProfileInput, n as createApp, r as JuniorDashboardOptions, t as JuniorAppOptions } from "./app-VCiPQ65Q.js";
1
+ import { i as ModelProfileInput, n as createApp, r as JuniorDashboardOptions, t as JuniorAppOptions } from "./app-Bo0kB987.js";
2
2
  import { i as defineJuniorPlugins, n as JuniorPluginSet, r as JuniorPluginSetOptions, t as JuniorPluginInput } from "./plugins-B_0Cr0MO.js";
3
3
  import { t as JUNIOR_VERSION } from "./version-Cc2OFd9G.js";
4
4
  export { JUNIOR_VERSION, JuniorAppOptions, type JuniorDashboardOptions, type JuniorPluginInput, type JuniorPluginSet, type JuniorPluginSetOptions, type ModelProfileInput, createApp, defineJuniorPlugins };
package/dist/app.js CHANGED
@@ -1,37 +1,37 @@
1
- import { $ as projectConversationMessages, C as automationVersionOf, Cn as resolveSandboxEgressProviderForHost, Dn as clearSandboxEgressSignals, En as SANDBOX_EGRESS_PROXY_PATH, Hn as slackMention, In as resolveBaseUrl, Ln as startOAuthFlow, On as consumeSandboxEgressAuthRequiredSignal, Pn as formatProviderLabel, Tn as shouldPropagateSandboxEgressTrace, X as appendConversationMessages, Xn as slackEntitySchema, Zn as slackExternalRefIdSchema, _n as isExperimentalFeatureEnabled, ar as setConfigDefaults, b as admitEventAutomationRun, bn as createUserTokenStore, c as withScheduledAutomationLock, cn as SubscribedReplyReason, dn as getThreadStopDecision, gn as getExperimentalFeatures, i as readScheduledAutomation, ir as getConfigDefaults, jn as parseSandboxEgressCredentialToken, kn as consumeSandboxEgressPermissionDeniedSignal, l as blockEventAutomation, n as listScheduledAutomationsForTeam, nt as settleConversationTitleWork, o as saveScheduledAutomationInLock, p as findMatchingEventAutomations, s as scheduledRunId, u as collectEventAutomationMatchKeys, vn as setExperimentalFeatures, wn as normalizeSandboxEgressTracePropagationDomains, x as eventAutomationRunLimitReason, yn as executeCredentialedEgressRequest } from "./tasks-uCfmlWga.js";
2
- import { C as withContext, M as JUNIOR_WORKSPACE_SNAPSHOT_JOB_CALLBACK_ROUTE, R as normalizeIdentityEmail, T as withSpan, b as setSpanStatus, f as logException, k as JUNIOR_PLUGIN_TASK_CALLBACK_ROUTE, m as logWarn, p as logInfo, r as createRequestContext, v as setSentryUser, w as withLogContext, y as setSpanAttributes } from "./logging-BLTa7R7f.js";
1
+ import { $ as projectConversationMessages, An as parseSandboxEgressCredentialToken, C as automationVersionOf, Cn as normalizeSandboxEgressTracePropagationDomains, Dn as consumeSandboxEgressAuthRequiredSignal, En as clearSandboxEgressSignals, Fn as resolveBaseUrl, In as startOAuthFlow, Nn as formatProviderLabel, On as consumeSandboxEgressPermissionDeniedSignal, Sn as resolveSandboxEgressProviderForHost, Tn as SANDBOX_EGRESS_PROXY_PATH, Vn as slackMention, X as appendConversationMessages, Xn as slackExternalRefIdSchema, Yn as slackEntitySchema, _n as setExperimentalFeatures, b as admitEventAutomationRun, c as withScheduledAutomationLock, cn as SubscribedReplyReason, dn as getThreadStopDecision, gn as isExperimentalFeatureEnabled, hn as getExperimentalFeatures, i as readScheduledAutomation, ir as setConfigDefaults, l as blockEventAutomation, n as listScheduledAutomationsForTeam, nt as settleConversationTitleWork, o as saveScheduledAutomationInLock, p as findMatchingEventAutomations, rr as getConfigDefaults, s as scheduledRunId, u as collectEventAutomationMatchKeys, vn as executeCredentialedEgressRequest, wn as shouldPropagateSandboxEgressTrace, x as eventAutomationRunLimitReason, yn as createUserTokenStore } from "./tasks-Bh2qYaed.js";
2
+ import { C as withContext, M as JUNIOR_WORKSPACE_SNAPSHOT_JOB_CALLBACK_ROUTE, R as normalizeIdentityEmail, T as withSpan, b as setSpanStatus, f as logException, k as JUNIOR_PLUGIN_TASK_CALLBACK_ROUTE, m as logWarn, p as logInfo, r as createRequestContext, v as setSentryUser, w as withLogContext, y as setSpanAttributes } from "./logging-dZN1Bvtu.js";
3
3
  import { n as captureMessage, r as continueTrace } from "./sentry-BBUlHih9.js";
4
- import { t as JUNIOR_VERSION } from "./version-CN9BXMW_.js";
5
- import { _ as snapshotRuntimeConfig, d as restoreRuntimeConfig, f as setBotModelConfig, g as setSlackReactionConfig, h as setRuntimeLimits, i as getChatConfig, m as setProfiles, n as botConfig, o as getSlackBotToken, p as setCrossActorMidRunMode, u as resetRuntimeConfig } from "./config-C9qM41O0.js";
4
+ import { t as JUNIOR_VERSION } from "./version-JcDaJ75p.js";
5
+ import { _ as snapshotRuntimeConfig, d as restoreRuntimeConfig, f as setBotModelConfig, g as setSlackReactionConfig, h as setRuntimeLimits, i as getChatConfig, m as setProfiles, n as botConfig, o as getSlackBotToken, p as setCrossActorMidRunMode, u as resetRuntimeConfig } from "./config-BiCtNiu5.js";
6
6
  import { _ as slackMessageTsSchema, d as parseSlackTeamId, f as parseSlackUserId, h as slackUserIdSchema, m as slackTeamIdSchema, o as parseActorUserId, p as slackChannelIdSchema } from "./actor-tlxzqaRe.js";
7
- import { N as recordGoogleSignIn, _ as withConversationMutationLock, c as getConversationEventStore, d as getDb, f as getSqlExecutor, m as withConversationEventLock, r as readActorIdentity, u as getConversationStore } from "./viewer-C5xFaYVi.js";
8
- import { a as juniorAgentInvocations, d as juniorDestinations, i as juniorAgentBindings, s as juniorConversations } from "./agent-invocations-Qfz7dWgU.js";
9
- import { a as juniorAutomationRuns, f as juniorConversationBriefs, h as juniorConversationEvents, s as juniorAutomations } from "./executor-Rimyj8HZ.js";
10
- import { m as credentialLogContext } from "./registry-BnSaArNb.js";
11
- import { n as pluginCatalogRuntime } from "./catalog-runtime-cd60vzAB.js";
12
- import { B as stopConversationSession, C as requestAttachmentDeletion, L as effectiveTaskOutcomes, M as logScheduledAutomationRunSkipped, N as scheduledAutomationRunAttributes, T as parseSlackThreadId, V as recordSubagentEnded, _ as unpublishedArtifactHeaders, g as readPublicArtifact, h as publicArtifactHeaders, n as executeAgentRun, ot as listPendingAgentInvocationMailboxAppends, st as listPendingAgentInvocationResults, t as createAgentRunner, v as lookupSlackUserProfile, vt as processWorkspaceSnapshotJob, x as collectAttachmentGarbage, yt as ingestEvent } from "./agent-runner-g110-xgg.js";
13
- import { $ as bindSlackDirectCredentialSubject, Gt as listConversationAnnotations, Ht as resolveRootVisibility, Q as bindScheduledAutomationCredentialSubject, Tt as readConversationAccessFromSql, U as collectEventMatchKeys, X as takeDueTimerWatches, Z as bindEventAutomationCredentialSubject, _t as getDashboardConversationLink, a as getPluginRoutes, bt as setDashboardConversationLinkOptions, ct as getSlackClient, d as setPlugins, et as verifyEventAutomationCredentialSubject, f as validatePlugins, h as setBriefsConfig, ht as runWithWorkspaceTeamId, i as getPluginApiRoutes, mt as getWorkspaceTeamId, nt as verifySlackDirectCredentialSubject, q as findMatchingWatches, tt as verifyScheduledAutomationCredentialSubject, u as getPlugins, ut as isDmChannel, wt as createPluginLogger, xt as createPluginState, yt as getDashboardTaskLink } from "./agent-hooks-ghyZZQqB.js";
7
+ import { N as recordGoogleSignIn, _ as withConversationMutationLock, c as getConversationEventStore, d as getDb, f as getSqlExecutor, m as withConversationEventLock, r as readActorIdentity, u as getConversationStore } from "./viewer-oMTUVAcR.js";
8
+ import { a as juniorAgentInvocations, d as juniorDestinations, i as juniorAgentBindings, s as juniorConversations } from "./agent-invocations-CxKldAeB.js";
9
+ import { a as juniorAutomationRuns, f as juniorConversationBriefs, h as juniorConversationEvents, s as juniorAutomations } from "./executor-O8xqLDN6.js";
10
+ import { m as credentialLogContext } from "./registry-BUje_knT.js";
11
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-CfwKT0sn.js";
12
+ import { B as stopConversationSession, C as requestAttachmentDeletion, L as effectiveTaskOutcomes, M as logScheduledAutomationRunSkipped, N as scheduledAutomationRunAttributes, St as ingestEvent, T as parseSlackThreadId, V as recordSubagentEnded, _ as unpublishedArtifactHeaders, ct as listPendingAgentInvocationResults, g as readPublicArtifact, h as publicArtifactHeaders, n as executeAgentRun, st as listPendingAgentInvocationMailboxAppends, t as createAgentRunner, v as lookupSlackUserProfile, x as collectAttachmentGarbage, xt as processWorkspaceSnapshotJob } from "./agent-runner-Cx6NO5LE.js";
13
+ import { $ as bindSlackDirectCredentialSubject, Gt as listConversationAnnotations, Ht as resolveRootVisibility, Q as bindScheduledAutomationCredentialSubject, Tt as readConversationAccessFromSql, U as collectEventMatchKeys, X as takeDueTimerWatches, Xt as createPluginCache, Z as bindEventAutomationCredentialSubject, Zt as createCache, _t as getDashboardConversationLink, a as getPluginRoutes, bt as setDashboardConversationLinkOptions, ct as getSlackClient, d as setPlugins, et as verifyEventAutomationCredentialSubject, f as validatePlugins, h as setBriefsConfig, ht as runWithWorkspaceTeamId, i as getPluginApiRoutes, mt as getWorkspaceTeamId, nt as verifySlackDirectCredentialSubject, q as findMatchingWatches, tt as verifyScheduledAutomationCredentialSubject, u as getPlugins, ut as isDmChannel, wt as createPluginLogger, xt as createPluginState, yt as getDashboardTaskLink } from "./agent-hooks-9q2zdKHL.js";
14
+ import { r as getStateAdapter, s as withLock$1 } from "./adapter-t-Y9RHML.js";
14
15
  import { n as getNextRunAtMs } from "./cadence-R7Em4RjE.js";
15
16
  import { M as annotationCard } from "./conversation-CvuKJ3tA.js";
16
- import { r as getStateAdapter, s as withLock$1 } from "./adapter-Bx_1B2De.js";
17
- import { M as renderTaskInput, S as eventGuidance, d as getEventCatalog, f as SLACK_EVENT_NAMESPACE, g as slackChannelMessageRunsAutomation, h as slackChannelMessageReplyThreadTs, m as slackChannelMessageEvent } from "./session-stop-Boj_zpTa.js";
18
- import { f as setSandboxResourceConfig, u as getSandboxResourceConfig } from "./resolve-B5eLRl0v.js";
19
- import { a as getVercelConversationWorkQueue, g as isConversationQueueMessageRejectedError, h as conversationQueueMessageSchema, i as verifyWorkspaceSnapshotJobMessage, o as resolveConversationWorkQueueTopic, s as verifyConversationQueueMessage, t as WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC } from "./job-queue-BjQdSqA3.js";
20
- import { A as hasRunnableConversationWork$1, M as isInvalidConversationRecordError, O as CONVERSATION_WORK_STALE_ENQUEUE_MS, S as removeActiveConversation, _ as hasRunnableConversationWork, c as clearExpiredConversationLease, g as getConversationWorkState, h as getConversation, m as ensureConversationWake, r as appendAndEnqueueInboundMessage, v as listActiveConversationIds } from "./store-B6KqcdCQ.js";
17
+ import { M as renderTaskInput, S as eventGuidance, d as getEventCatalog, f as SLACK_EVENT_NAMESPACE, g as slackChannelMessageRunsAutomation, h as slackChannelMessageReplyThreadTs, m as slackChannelMessageEvent } from "./session-stop-ZuyOHxdK.js";
18
+ import { f as setSandboxResourceConfig, u as getSandboxResourceConfig } from "./resolve-DftZiYNU.js";
19
+ import { a as getVercelConversationWorkQueue, g as isConversationQueueMessageRejectedError, h as conversationQueueMessageSchema, i as verifyWorkspaceSnapshotJobMessage, o as resolveConversationWorkQueueTopic, s as verifyConversationQueueMessage, t as WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC } from "./job-queue-DmarAQGI.js";
20
+ import { A as hasRunnableConversationWork$1, M as isInvalidConversationRecordError, O as CONVERSATION_WORK_STALE_ENQUEUE_MS, S as removeActiveConversation, _ as hasRunnableConversationWork, c as clearExpiredConversationLease, g as getConversationWorkState, h as getConversation, m as ensureConversationWake, r as appendAndEnqueueInboundMessage, v as listActiveConversationIds } from "./store-dZynGGFW.js";
21
21
  import { D as scheduledRunSchema } from "./automation-DrpcA-SX.js";
22
- import { n as validatePluginRegistrations, t as validatePluginEgressCredentialHooks } from "./validation-B9KL_5Wc.js";
22
+ import { n as validatePluginRegistrations, t as validatePluginEgressCredentialHooks } from "./validation-DtcovXqq.js";
23
23
  import { a as pluginRuntimeRegistrationsFromPluginSet, n as pluginCatalogConfigFromEnv, r as pluginCatalogConfigFromPluginSet, t as defineJuniorPlugins } from "./plugins-DOm9Y6qI.js";
24
- import { A as THREAD_OPTOUT_ACK, C as buildSlackInboundMessage, D as normalizeIncomingSlackThreadId, E as stopSlackThread, F as renderSlackObjectCard, I as createVercelAttachmentStorage, M as parseContent, N as runWithSlackInstallation, O as withNormalizedThreadId, P as verifySlackSignature, R as enqueueAgentDispatch, S as recordSkippedConversationMessage, T as isSlackMessageStopped, a as recordWebConversationActivity, c as createProductionSlackWebhookServices, f as createSlackWebApiStatusSender, j as startProcessingReaction, k as stopConversationTurn, l as getProductionSlackAdapter, n as conversationTurnIdForMessage, o as webActorFromEmail, s as createProductionConversationWorkOptions, t as appendAndEnqueueWebMessage, v as readViewerAutomationSummary, w as clearSlackPendingReactions, z as GET$3 } from "./web-input-D6eqfXYd.js";
25
- import { C as existingConversationId, N as recordAutomationExecution, c as getDispatchConversationId, d as getDispatchRecord, h as listPendingDispatchMailboxAppends, i as buildDispatchId, m as isTerminalDispatchStatus, o as confirmDispatchMailboxAppend, p as getPluginDispatchProjection, s as createOrGetDispatch, t as processPluginTask, x as notifyAutomationBlocked, y as markDispatchFailed } from "./task-runner-BAX5li9a.js";
26
- import { o as getAuthPausedConversationTurnId, t as enqueueAgentInvocationResult } from "./result-Cvm0GZCv.js";
27
- import { r as enqueueAgentInvocation } from "./work-C-ecZAme.js";
28
- import { s as coerceThreadConversationState } from "./thread-state-BJHVIz8G.js";
29
- import { o as unlinkProvider } from "./connections-DrtTrwkp.js";
30
- import { a as GET$4, i as publishAppHomeView, r as GET$5, t as receiveLocalOAuthCredential } from "./credential-sync-wKNQ1dYc.js";
31
- import { a as registerVercelPluginTaskDevConsumer, n as createVercelPluginTaskCallback, s as queueCallback } from "./task-queue-BaDwKSYv.js";
32
- import { t as processConversationWork } from "./worker-BpYDqiOf.js";
33
- import { t as bindMessageAgent } from "./message-DAeP5WWW.js";
34
- import { t as bindSpawnAgent } from "./spawn-h1DJMQTf.js";
24
+ import { A as THREAD_OPTOUT_ACK, C as buildSlackInboundMessage, D as normalizeIncomingSlackThreadId, E as stopSlackThread, F as renderSlackObjectCard, I as createVercelAttachmentStorage, M as parseContent, N as runWithSlackInstallation, O as withNormalizedThreadId, P as verifySlackSignature, R as enqueueAgentDispatch, S as recordSkippedConversationMessage, T as isSlackMessageStopped, a as recordWebConversationActivity, c as createProductionSlackWebhookServices, f as createSlackWebApiStatusSender, j as startProcessingReaction, k as stopConversationTurn, l as getProductionSlackAdapter, n as conversationTurnIdForMessage, o as webActorFromEmail, s as createProductionConversationWorkOptions, t as appendAndEnqueueWebMessage, v as readViewerAutomationSummary, w as clearSlackPendingReactions, z as GET$3 } from "./web-input-FQ5wgqYn.js";
25
+ import { C as existingConversationId, N as recordAutomationExecution, c as getDispatchConversationId, d as getDispatchRecord, h as listPendingDispatchMailboxAppends, i as buildDispatchId, m as isTerminalDispatchStatus, o as confirmDispatchMailboxAppend, p as getPluginDispatchProjection, s as createOrGetDispatch, t as processPluginTask, x as notifyAutomationBlocked, y as markDispatchFailed } from "./task-runner-BRgJ5e0s.js";
26
+ import { o as getAuthPausedConversationTurnId, t as enqueueAgentInvocationResult } from "./result-CRMRT9CE.js";
27
+ import { r as enqueueAgentInvocation } from "./work-BiIKfayl.js";
28
+ import { s as coerceThreadConversationState } from "./thread-state-DA37FsAT.js";
29
+ import { o as unlinkProvider } from "./connections-D9IKbfk-.js";
30
+ import { a as GET$4, i as publishAppHomeView, r as GET$5, t as receiveLocalOAuthCredential } from "./credential-sync-Bu6ZOuOk.js";
31
+ import { a as registerVercelPluginTaskDevConsumer, n as createVercelPluginTaskCallback, s as queueCallback } from "./task-queue-CmMCtzHO.js";
32
+ import { t as processConversationWork } from "./worker-BZ7l75NM.js";
33
+ import { t as bindMessageAgent } from "./message-C_g2S8kv.js";
34
+ import { t as bindSpawnAgent } from "./spawn-DovpdlrW.js";
35
35
  import { createRequire } from "node:module";
36
36
  import { Hono } from "hono";
37
37
  import { z } from "zod";
@@ -260,6 +260,7 @@ function createHeartbeatContext(args) {
260
260
  let dispatchCount = 0;
261
261
  return {
262
262
  plugin: { name: pluginName },
263
+ cache: createPluginCache(pluginName),
263
264
  nowMs: args.nowMs,
264
265
  db: getDb(),
265
266
  state: createPluginState(pluginName),
@@ -2319,34 +2320,25 @@ async function isSlackWorkspaceMember(raw, state) {
2319
2320
  const event = parsed.data;
2320
2321
  const userId = parseSlackUserId(event.user);
2321
2322
  if (!userId) return false;
2323
+ const cache = createCache(state, "core");
2322
2324
  const key = `slack:membership:${workspaceTeamId}:${userId}`;
2323
2325
  const authorTeam = parseSlackTeamId(event.user_team);
2324
2326
  if (authorTeam === workspaceTeamId) return true;
2325
2327
  if (event.user_team !== void 0 && !authorTeam && !/^E[A-Z0-9]+$/.test(event.user_team)) return false;
2326
- const explicitlyExternal = authorTeam !== void 0;
2327
- if (!explicitlyExternal) {
2328
- const cached = await state.get(key);
2329
- if (typeof cached === "boolean") return cached;
2330
- }
2331
- const result = await withLock$1(state, `${key}:lookup`, async () => {
2332
- if (explicitlyExternal) {
2333
- await state.set(key, false, NON_MEMBER_TTL_MS);
2334
- return false;
2335
- }
2336
- const cached = await state.get(key);
2337
- if (typeof cached === "boolean") return cached;
2328
+ if (authorTeam !== void 0) return await cache.getOrLoad(key, async () => ({
2329
+ value: false,
2330
+ ttlMs: NON_MEMBER_TTL_MS
2331
+ }), { refresh: true });
2332
+ return await cache.getOrLoad(key, async () => {
2338
2333
  const user = await lookupSlackUserProfile(userId);
2339
2334
  const authorTeam = parseSlackTeamId(user.team_id);
2340
- if (user.id !== userId || !authorTeam) return false;
2335
+ if (user.id !== userId || !authorTeam) return { value: false };
2341
2336
  const member = authorTeam === workspaceTeamId && !user.is_deleted;
2342
- await state.set(key, member, member ? MEMBER_TTL_MS : NON_MEMBER_TTL_MS);
2343
- return member;
2344
- }, {
2345
- keepAlive: true,
2346
- waitMs: 1e4
2337
+ return {
2338
+ value: member,
2339
+ ttlMs: member ? MEMBER_TTL_MS : NON_MEMBER_TTL_MS
2340
+ };
2347
2341
  });
2348
- if (!result.acquired) throw new Error("Could not acquire Slack membership lookup lock");
2349
- return result.value;
2350
2342
  }
2351
2343
  // src/chat/sign-in/allowlist.ts
2352
2344
  /**
@@ -2404,17 +2396,18 @@ async function isSlackAuthorDomainAllowed(args) {
2404
2396
  const userId = parseSlackUserId(args.user);
2405
2397
  if (!args.teamId || !userId) return false;
2406
2398
  if (args.allowedBotUserIds.includes(userId)) return true;
2407
- const key = `slack:allowed-domain:${args.teamId}:${userId}`;
2408
- const cached = await args.state.get(key);
2409
- if (typeof cached === "boolean") return cached;
2410
- const profile = await lookupSlackUserProfile(userId);
2411
- const email = profile.email?.toLowerCase();
2412
- const separator = email?.lastIndexOf("@") ?? -1;
2413
- const domain = separator > 0 ? email?.slice(separator + 1) : void 0;
2414
- const allowed = profile.id === userId && isAllowedDomain(domain, args.allowedDomains);
2415
- if (!allowed) logWarn("slack.allowed_domain.rejected", { "app.reason": email ? "domain_not_allowed" : "missing_email" });
2416
- await args.state.set(key, allowed, allowed ? ALLOWED_TTL_MS : NOT_ALLOWED_TTL_MS);
2417
- return allowed;
2399
+ return await createCache(args.state, "core").getOrLoad(`slack:allowed-domain:${args.teamId}:${userId}`, async () => {
2400
+ const profile = await lookupSlackUserProfile(userId);
2401
+ const email = profile.email?.toLowerCase();
2402
+ const separator = email?.lastIndexOf("@") ?? -1;
2403
+ const domain = separator > 0 ? email?.slice(separator + 1) : void 0;
2404
+ const allowed = profile.id === userId && isAllowedDomain(domain, args.allowedDomains);
2405
+ if (!allowed) logWarn("slack.allowed_domain.rejected", { "app.reason": email ? "domain_not_allowed" : "missing_email" });
2406
+ return {
2407
+ value: allowed,
2408
+ ttlMs: allowed ? ALLOWED_TTL_MS : NOT_ALLOWED_TTL_MS
2409
+ };
2410
+ });
2418
2411
  }
2419
2412
  // src/chat/ingress/slack-message-telemetry.ts
2420
2413
  function field(value, pattern) {
@@ -1,4 +1,4 @@
1
- import { Gt as extractAssistantText } from "./tasks-uCfmlWga.js";
1
+ import { Gt as extractAssistantText } from "./tasks-Bh2qYaed.js";
2
2
  // src/chat/no-reply.ts
3
3
  const NO_REPLY_MARKER = "[[NO_REPLY]]";
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { i as completeObject } from "./client-2i0JJpoC.js";
1
+ import { i as completeObject } from "./client-DpfjZgNk.js";
2
2
  import { r as defaultModelId } from "./model-profile-Bg8EoCKD.js";
3
3
  import { J as parseBriefInput, W as briefCodeChangeSchema, d as conversationDetailReportSchema, p as conversationEventPageSchema } from "./conversation-CvuKJ3tA.js";
4
4
  import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-DeVax2qO.js";
@@ -267,7 +267,7 @@ async function parseRunOptions(argv) {
267
267
  * `DATABASE_URL` at import, and `briefs pull` must work with only a token.
268
268
  */
269
269
  async function configuredDefaultModelId() {
270
- const { botConfig } = await import("./config-C9qM41O0.js").then((n) => n.r);
270
+ const { botConfig } = await import("./config-BiCtNiu5.js").then((n) => n.r);
271
271
  return defaultModelId(botConfig);
272
272
  }
273
273
  function apiUrl(baseUrl, pathname) {
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { t as createPluginCatalogRuntime } from "./registry-BnSaArNb.js";
2
+ import { t as createPluginCatalogRuntime } from "./registry-BUje_knT.js";
3
3
  // src/chat/plugins/catalog-runtime.ts
4
4
  var catalog_runtime_exports = /* @__PURE__ */ __exportAll({ pluginCatalogRuntime: () => pluginCatalogRuntime });
5
5
  const pluginCatalogRuntime = createPluginCatalogRuntime();
package/dist/cli/chat.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as executeAgentRun, t as createAgentRunner } from "../agent-runner-g110-xgg.js";
1
+ import { n as executeAgentRun, t as createAgentRunner } from "../agent-runner-Cx6NO5LE.js";
2
2
  import { t as loadAppPluginSet } from "../plugin-module-Cf5gVPWP.js";
3
3
  import path from "node:path";
4
4
  import { createHash, randomUUID } from "node:crypto";
@@ -99,10 +99,10 @@ async function loadLocalPluginSet() {
99
99
  async function configureLocalChatPlugins(pluginSet) {
100
100
  const [pluginsModule, agentHooksModule, catalogRuntimeModule, validationModule, databaseModule] = await Promise.all([
101
101
  import("../plugins-DOm9Y6qI.js").then((n) => n.o),
102
- import("../agent-hooks-ghyZZQqB.js").then((n) => n.t),
103
- import("../catalog-runtime-cd60vzAB.js").then((n) => n.t),
104
- import("../validation-B9KL_5Wc.js").then((n) => n.r),
105
- import("../viewer-C5xFaYVi.js").then((n) => n.s)
102
+ import("../agent-hooks-9q2zdKHL.js").then((n) => n.t),
103
+ import("../catalog-runtime-CfwKT0sn.js").then((n) => n.t),
104
+ import("../validation-DtcovXqq.js").then((n) => n.r),
105
+ import("../viewer-oMTUVAcR.js").then((n) => n.s)
106
106
  ]);
107
107
  const resolvedPluginSet = pluginSet === void 0 ? await loadLocalPluginSet() : pluginSet ?? void 0;
108
108
  const plugins = pluginsModule.pluginRuntimeRegistrationsFromPluginSet(resolvedPluginSet);
@@ -152,21 +152,19 @@ function localDevServerUrl() {
152
152
  async function prepareLocalChatRun(io, pluginSet) {
153
153
  defaultStateAdapterForLocalChat();
154
154
  await configureLocalChatPlugins(pluginSet);
155
- const { setExperimentalFeatures } = await import("../tasks-uCfmlWga.js").then((n) => n.hn);
156
- setExperimentalFeatures({ subagents: true });
157
- const { setBriefsConfig } = await import("../agent-hooks-ghyZZQqB.js").then((n) => n.m);
155
+ const { setBriefsConfig } = await import("../agent-hooks-9q2zdKHL.js").then((n) => n.m);
158
156
  setBriefsConfig({ enabled: true });
159
- const { runLocalAgentTurn } = await import("../runner-D-pUzHbU.js");
160
- const { startLocalOAuthCallbackServer } = await import("../oauth-callback-server-BAy1hhF1.js");
157
+ const { runLocalAgentTurn } = await import("../runner-4mmL2Pt1.js");
158
+ const { startLocalOAuthCallbackServer } = await import("../oauth-callback-server-DvvOvr4q.js");
161
159
  const { createLocalOAuthState } = await import("../oauth-relay-CTygMkNx.js").then((n) => n.t);
162
- const { createLocalSandboxEgressSignalTransport } = await import("../sandbox-egress-signals-mvwGV7rl.js");
163
- const { bindSpawnAgent } = await import("../spawn-h1DJMQTf.js").then((n) => n.n);
164
- const { bindMessageAgent } = await import("../message-DAeP5WWW.js").then((n) => n.n);
165
- const { createAgentInvocationWorker, routeAgentInvocationWork } = await import("../work-C-ecZAme.js").then((n) => n.a);
166
- const { startAgentInvocationsForChildInput } = await import("../result-Cvm0GZCv.js").then((n) => n.r);
167
- const { skipInputBeforeConversationStop } = await import("../session-stop-Boj_zpTa.js").then((n) => n.r);
160
+ const { createLocalSandboxEgressSignalTransport } = await import("../sandbox-egress-signals-1ysv0z5A.js");
161
+ const { bindSpawnAgent } = await import("../spawn-DovpdlrW.js").then((n) => n.n);
162
+ const { bindMessageAgent } = await import("../message-C_g2S8kv.js").then((n) => n.n);
163
+ const { createAgentInvocationWorker, routeAgentInvocationWork } = await import("../work-BiIKfayl.js").then((n) => n.a);
164
+ const { startAgentInvocationsForChildInput } = await import("../result-CRMRT9CE.js").then((n) => n.r);
165
+ const { skipInputBeforeConversationStop } = await import("../session-stop-ZuyOHxdK.js").then((n) => n.r);
168
166
  const { createLocalConversationWork } = await import("../conversation-work-BaT_T6EB.js");
169
- const { processConversationWork } = await import("../worker-BpYDqiOf.js").then((n) => n.n);
167
+ const { processConversationWork } = await import("../worker-BZ7l75NM.js").then((n) => n.n);
170
168
  let agentRunner;
171
169
  const localConversationWork = createLocalConversationWork(async (message) => {
172
170
  if (!agentRunner) throw new Error("Local agent runner is not ready");
package/dist/cli/check.js CHANGED
@@ -1,6 +1,6 @@
1
- import { E as JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE, N as LEGACY_JUNIOR_CONVERSATION_WORK_FUNCTION, O as JUNIOR_HEARTBEAT_ROUTE } from "../logging-BLTa7R7f.js";
2
- import { v as parseInlinePluginManifest, y as parsePluginManifest } from "../registry-BnSaArNb.js";
3
- import { i as parseSkillFile } from "../skills-BpdYCfFt.js";
1
+ import { E as JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE, N as LEGACY_JUNIOR_CONVERSATION_WORK_FUNCTION, O as JUNIOR_HEARTBEAT_ROUTE } from "../logging-dZN1Bvtu.js";
2
+ import { v as parseInlinePluginManifest, y as parsePluginManifest } from "../registry-BUje_knT.js";
3
+ import { i as parseSkillFile } from "../skills-lPeepA2b.js";
4
4
  import path from "node:path";
5
5
  import fs from "node:fs/promises";
6
6
  import { pathToFileURL } from "node:url";
package/dist/cli/main.js CHANGED
@@ -25,13 +25,13 @@ async function runChat(argv, pluginSet) {
25
25
  return await (await import("./chat.js")).runChat(argv, void 0, { pluginSet });
26
26
  }
27
27
  async function runAdmin(argv) {
28
- return await (await import("../admin-BAbbVgVc.js")).runAdmin(argv);
28
+ return await (await import("../admin-BCqeFndQ.js")).runAdmin(argv);
29
29
  }
30
30
  async function runServiceAccount(argv) {
31
- return await (await import("../service-account-DWxvpSfd.js")).runServiceAccount(argv);
31
+ return await (await import("../service-account-B1sH3P7d.js")).runServiceAccount(argv);
32
32
  }
33
33
  async function runBriefs(argv) {
34
- return await (await import("../briefs-CKcfrIQL.js")).runBriefs(argv);
34
+ return await (await import("../briefs-DsGH2Vym.js")).runBriefs(argv);
35
35
  }
36
36
  function topLevelCommand(argv) {
37
37
  return (argv[0] === "--" ? argv.slice(1) : argv)[0];
@@ -1,7 +1,7 @@
1
- import { d as getDb } from "../viewer-C5xFaYVi.js";
2
- import { n as pluginCatalogRuntime } from "../catalog-runtime-cd60vzAB.js";
3
- import { d as setPlugins, f as validatePlugins, wt as createPluginLogger } from "../agent-hooks-ghyZZQqB.js";
4
- import { n as validatePluginRegistrations, t as validatePluginEgressCredentialHooks } from "../validation-B9KL_5Wc.js";
1
+ import { d as getDb } from "../viewer-oMTUVAcR.js";
2
+ import { n as pluginCatalogRuntime } from "../catalog-runtime-CfwKT0sn.js";
3
+ import { d as setPlugins, f as validatePlugins, wt as createPluginLogger } from "../agent-hooks-9q2zdKHL.js";
4
+ import { n as validatePluginRegistrations, t as validatePluginEgressCredentialHooks } from "../validation-DtcovXqq.js";
5
5
  import { a as pluginRuntimeRegistrationsFromPluginSet, i as pluginCliRegistrationsFromPluginSet, r as pluginCatalogConfigFromPluginSet } from "../plugins-DOm9Y6qI.js";
6
6
  import { t as loadAppPluginSet } from "../plugin-module-Cf5gVPWP.js";
7
7
  import { stderr, stdout } from "node:process";
@@ -1,7 +1,7 @@
1
- import { n as pluginCatalogRuntime } from "../catalog-runtime-cd60vzAB.js";
2
- import { t as disconnectStateAdapter } from "../adapter-Bx_1B2De.js";
3
- import { t as create } from "../profile-CthM2qFM.js";
4
- import { r as resolve } from "../resolve-B5eLRl0v.js";
1
+ import { n as pluginCatalogRuntime } from "../catalog-runtime-CfwKT0sn.js";
2
+ import { t as disconnectStateAdapter } from "../adapter-t-Y9RHML.js";
3
+ import { t as create } from "../profile-BP2N5uDY.js";
4
+ import { r as resolve } from "../resolve-DftZiYNU.js";
5
5
  // src/cli/snapshot-create.ts
6
6
  const DEFAULT_RUNTIME = "node22";
7
7
  const DEFAULT_TIMEOUT_MS = 6e5;
@@ -1,6 +1,6 @@
1
- import { i as getChatConfig } from "../config-C9qM41O0.js";
2
- import { t as createJuniorSqlExecutor } from "../executor-Rimyj8HZ.js";
3
- import { t as createPluginCatalogRuntime } from "../registry-BnSaArNb.js";
1
+ import { i as getChatConfig } from "../config-BiCtNiu5.js";
2
+ import { t as createJuniorSqlExecutor } from "../executor-O8xqLDN6.js";
3
+ import { t as createPluginCatalogRuntime } from "../registry-BUje_knT.js";
4
4
  import { n as pluginCatalogConfigFromEnv, r as pluginCatalogConfigFromPluginSet, t as defineJuniorPlugins } from "../plugins-DOm9Y6qI.js";
5
5
  import { t as loadAppPluginSet } from "../plugin-module-Cf5gVPWP.js";
6
6
  import { basename, dirname, join, resolve } from "node:path";
@@ -1,5 +1,5 @@
1
- import { T as withSpan, _ as serializeGenAiAttribute, f as logException, h as normalizeGenAiFinishReason, i as extractGenAiUsageAttributes, m as logWarn } from "./logging-BLTa7R7f.js";
2
- import { a as toCanonicalInputMessage, n as getCurrentConversationPrivacy, o as toCanonicalOutputMessage, s as toGenAiMessagesTraceAttributes } from "./conversation-privacy-1iTiFX1O.js";
1
+ import { T as withSpan, _ as serializeGenAiAttribute, f as logException, h as normalizeGenAiFinishReason, i as extractGenAiUsageAttributes, m as logWarn } from "./logging-dZN1Bvtu.js";
2
+ import { a as toCanonicalInputMessage, n as getCurrentConversationPrivacy, o as toCanonicalOutputMessage, s as toGenAiMessagesTraceAttributes } from "./conversation-privacy-CBUI0frD.js";
3
3
  import { calculateCost, completeSimple, getEnvApiKey, getModels, registerApiProvider } from "@earendil-works/pi-ai/compat";
4
4
  import { stream as streamAnthropic, streamSimple as streamSimpleAnthropic } from "@earendil-works/pi-ai/api/anthropic-messages";
5
5
  import { createGatewayProvider } from "@ai-sdk/gateway";
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { C as toOptionalTrimmed, s as resolveGatewayModel } from "./client-2i0JJpoC.js";
3
- import { m as logWarn } from "./logging-BLTa7R7f.js";
2
+ import { C as toOptionalTrimmed, s as resolveGatewayModel } from "./client-DpfjZgNk.js";
3
+ import { m as logWarn } from "./logging-dZN1Bvtu.js";
4
4
  import { l as TURN_REASONING_LEVELS, s as modelProfileSchema, t as DEFAULT_MODEL_PROFILES, u as parseTurnReasoningLevel } from "./model-profile-Bg8EoCKD.js";
5
5
  // src/chat/slack/emoji.ts
6
6
  const SLACK_EMOJI_NAME_RE = /^(?:[a-z0-9_+-]+)(?:::(?:skin-tone-[2-6]))?$/;
@@ -1,13 +1,13 @@
1
- import { Ln as startOAuthFlow, Nt as failTurnRecord, Pt as getTurnRecord, kt as loadTurnCheckpoint } from "./tasks-uCfmlWga.js";
2
- import { n as botConfig } from "./config-C9qM41O0.js";
3
- import { A as deleteProviderIdentityForUser, c as getConversationEventStore, f as getSqlExecutor, k as deleteProviderIdentityForSlackUser } from "./viewer-C5xFaYVi.js";
4
- import { u as hasRequiredOAuthScope } from "./registry-BnSaArNb.js";
5
- import { n as pluginCatalogRuntime } from "./catalog-runtime-cd60vzAB.js";
6
- import { c as deleteMcpServerSessionId, l as deleteMcpStoredOAuthCredentials, s as deleteMcpAuthSessionsForUserProvider } from "./agent-runner-g110-xgg.js";
7
- import { r as getStateAdapter } from "./adapter-Bx_1B2De.js";
8
- import { a as getVercelConversationWorkQueue } from "./job-queue-BjQdSqA3.js";
9
- import { m as ensureConversationWake, w as requestConversationWork } from "./store-B6KqcdCQ.js";
10
- import { n as resolveTurnSessionRouting } from "./turn-session-routing-BIKJZaiw.js";
1
+ import { In as startOAuthFlow, Nt as failTurnRecord, Pt as getTurnRecord, kt as loadTurnCheckpoint } from "./tasks-Bh2qYaed.js";
2
+ import { n as botConfig } from "./config-BiCtNiu5.js";
3
+ import { A as deleteProviderIdentityForUser, c as getConversationEventStore, f as getSqlExecutor, k as deleteProviderIdentityForSlackUser } from "./viewer-oMTUVAcR.js";
4
+ import { u as hasRequiredOAuthScope } from "./registry-BUje_knT.js";
5
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-CfwKT0sn.js";
6
+ import { c as deleteMcpServerSessionId, l as deleteMcpStoredOAuthCredentials, s as deleteMcpAuthSessionsForUserProvider } from "./agent-runner-Cx6NO5LE.js";
7
+ import { r as getStateAdapter } from "./adapter-t-Y9RHML.js";
8
+ import { a as getVercelConversationWorkQueue } from "./job-queue-DmarAQGI.js";
9
+ import { m as ensureConversationWake, w as requestConversationWork } from "./store-dZynGGFW.js";
10
+ import { n as resolveTurnSessionRouting } from "./turn-session-routing-DdbSbJS6.js";
11
11
  import { z } from "zod";
12
12
  import { randomBytes, randomUUID } from "node:crypto";
13
13
  // src/chat/task-execution/authorized-turn.ts
@@ -1,4 +1,4 @@
1
- import { m as logWarn } from "./logging-BLTa7R7f.js";
1
+ import { m as logWarn } from "./logging-dZN1Bvtu.js";
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
3
  // src/chat/conversation-privacy.ts
4
4
  const SAFE_METADATA_KEY_LIMIT = 20;
@@ -1,19 +1,19 @@
1
- import { $n as resolvePluginOAuthAccount, Et as getConversationPendingAuth, Fn as parseOAuthStatePayload, H as recordAuthenticationLinked, In as resolveBaseUrl, Pn as formatProviderLabel, Pt as getTurnRecord, U as recordAuthorizationCompleted, bn as createUserTokenStore, qn as postSlackMessage } from "./tasks-uCfmlWga.js";
2
- import { p as escapeXml } from "./client-2i0JJpoC.js";
3
- import { L as isNativeIdentityProvider, f as logException, g as runBestEffort, m as logWarn } from "./logging-BLTa7R7f.js";
4
- import { a as getRuntimeMetadata, n as botConfig } from "./config-C9qM41O0.js";
1
+ import { Et as getConversationPendingAuth, Fn as resolveBaseUrl, H as recordAuthenticationLinked, Kn as postSlackMessage, Nn as formatProviderLabel, Pn as parseOAuthStatePayload, Pt as getTurnRecord, Qn as resolvePluginOAuthAccount, U as recordAuthorizationCompleted, yn as createUserTokenStore } from "./tasks-Bh2qYaed.js";
2
+ import { p as escapeXml } from "./client-DpfjZgNk.js";
3
+ import { L as isNativeIdentityProvider, f as logException, g as runBestEffort, m as logWarn } from "./logging-dZN1Bvtu.js";
4
+ import { a as getRuntimeMetadata, n as botConfig } from "./config-BiCtNiu5.js";
5
5
  import { f as parseSlackUserId } from "./actor-tlxzqaRe.js";
6
- import { F as upsertIdentity, I as upsertLinkedIdentity, b as identityFromActor, f as getSqlExecutor, j as findUserByVerifiedEmails } from "./viewer-C5xFaYVi.js";
6
+ import { F as upsertIdentity, I as upsertLinkedIdentity, b as identityFromActor, f as getSqlExecutor, j as findUserByVerifiedEmails } from "./viewer-oMTUVAcR.js";
7
7
  import { i as homeDir } from "./package-discovery-DJBompdd.js";
8
- import { n as buildOAuthTokenRequest, r as parseOAuthTokenResponse, u as hasRequiredOAuthScope } from "./registry-BnSaArNb.js";
9
- import { n as pluginCatalogRuntime } from "./catalog-runtime-cd60vzAB.js";
10
- import { t as discoverSkills } from "./skills-BpdYCfFt.js";
11
- import { a as finalizeMcpAuthorization, d as getMcpStoredOAuthCredentials, f as putMcpStoredOAuthCredentials, o as deleteMcpAuthSession, u as getMcpAuthSession, v as lookupSlackUserProfile } from "./agent-runner-g110-xgg.js";
12
- import { ct as getSlackClient } from "./agent-hooks-ghyZZQqB.js";
13
- import { a as acquireActiveLock, r as getStateAdapter } from "./adapter-Bx_1B2De.js";
14
- import { _ as getMcpProviderErrorAttributes } from "./service-account-Ch1uIpnR.js";
15
- import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-BJHVIz8G.js";
16
- import { c as deleteWebAuthorization, i as readConnectedOAuthTokens, m as wakePausedTurn, p as wakeAuthorizedTurn, u as htmlCallbackResponse } from "./connections-DrtTrwkp.js";
8
+ import { n as buildOAuthTokenRequest, r as parseOAuthTokenResponse, u as hasRequiredOAuthScope } from "./registry-BUje_knT.js";
9
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-CfwKT0sn.js";
10
+ import { t as discoverSkills } from "./skills-lPeepA2b.js";
11
+ import { a as finalizeMcpAuthorization, d as getMcpStoredOAuthCredentials, f as putMcpStoredOAuthCredentials, o as deleteMcpAuthSession, u as getMcpAuthSession, v as lookupSlackUserProfile } from "./agent-runner-Cx6NO5LE.js";
12
+ import { ct as getSlackClient } from "./agent-hooks-9q2zdKHL.js";
13
+ import { a as acquireActiveLock, r as getStateAdapter } from "./adapter-t-Y9RHML.js";
14
+ import { _ as getMcpProviderErrorAttributes } from "./service-account-Del2I_x3.js";
15
+ import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-DA37FsAT.js";
16
+ import { c as deleteWebAuthorization, i as readConnectedOAuthTokens, m as wakePausedTurn, p as wakeAuthorizedTurn, u as htmlCallbackResponse } from "./connections-D9IKbfk-.js";
17
17
  import { n as relayLocalOAuthCallback } from "./oauth-relay-CTygMkNx.js";
18
18
  import path from "node:path";
19
19
  import { z } from "zod";