@sentry/junior 0.229.0 → 0.230.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 (57) hide show
  1. package/dist/{agent-hooks-BfjhfMIy.js → agent-hooks-Im1UUKhZ.js} +10 -10
  2. package/dist/{agent-runner-DtrpkWV5.js → agent-runner-B9dvsdM8.js} +20 -20
  3. package/dist/api/schema.d.ts +20 -269
  4. package/dist/api/schema.js +3 -3
  5. package/dist/api.js +18 -18
  6. package/dist/{app-BRZB3MuD.d.ts → app-xk2-Id1T.d.ts} +2 -2
  7. package/dist/app.d.ts +1 -1
  8. package/dist/app.js +22 -21
  9. package/dist/{briefs-B6KfFLRA.js → briefs-BC3DPfsh.js} +4 -4
  10. package/dist/{catalog-runtime-Byr3trKF.js → catalog-runtime-Blx7IGY9.js} +1 -1
  11. package/dist/{checkpoint-DEYb3Fqm.js → checkpoint-BDaS7x3C.js} +7 -9
  12. package/dist/cli/chat.js +13 -13
  13. package/dist/cli/check.js +3 -3
  14. package/dist/cli/main.js +1 -1
  15. package/dist/cli/plugins.js +3 -3
  16. package/dist/cli/snapshot-create.js +3 -3
  17. package/dist/cli/upgrade.js +3 -3
  18. package/dist/{client-BN5U3CGw.js → client-DucHsb6b.js} +2 -2
  19. package/dist/{config-C4xZrx7G.js → config-HqsfInxG.js} +2 -2
  20. package/dist/{conversation-DOI6Y60M.js → conversation-DsuDtoYR.js} +96 -74
  21. package/dist/{conversation-privacy-CB7wx_tP.js → conversation-privacy-k2Ucs1Lg.js} +1 -1
  22. package/dist/{credential-sync-CuEwdxwY.js → credential-sync-DEF6P_Qr.js} +13 -13
  23. package/dist/{executor-DUqeOd8y.js → executor-C-LEhjeD.js} +1 -1
  24. package/dist/history-DvqWZlYX.d.ts +86 -0
  25. package/dist/{images-B5JLFwJR.js → images-owPAu3eq.js} +3 -3
  26. package/dist/instrumentation.js +2 -2
  27. package/dist/{job-queue-C1AJ5uJt.js → job-queue-CpNnv-n1.js} +1 -1
  28. package/dist/{logging-Muw6EXro.js → logging-BO1fVUQe.js} +1 -1
  29. package/dist/nitro.d.ts +1 -1
  30. package/dist/nitro.js +3 -3
  31. package/dist/{oauth-authorization-CrD-xb8a.js → oauth-authorization-DPPpHxSI.js} +1 -1
  32. package/dist/{oauth-callback-server-DfQos1K1.js → oauth-callback-server-BvVXBrQt.js} +2 -2
  33. package/dist/{pending-auth-pYQpJmtu.js → pending-auth-BWgfMCZE.js} +1 -1
  34. package/dist/{profile-25NkcK4S.js → profile-DpHUuqjR.js} +4 -4
  35. package/dist/{prompt-9C-wUwwx.js → prompt-D5RPLy92.js} +1 -1
  36. package/dist/{registry-DrcbAs8o.js → registry-CIi9NkkR.js} +1 -1
  37. package/dist/{resolve-D9kl_rkl.js → resolve-SohTTVYa.js} +2 -2
  38. package/dist/{runner-D3rf-_hT.js → runner-JhOJ60On.js} +9 -9
  39. package/dist/{sandbox-egress-signals-BfQQz6cs.js → sandbox-egress-signals-DyO-LeUT.js} +1 -1
  40. package/dist/{schema-CXmCvVLn.js → schema-B-Taar1W.js} +1 -1
  41. package/dist/{skills-rwWf3XjQ.js → skills-DElnSC0r.js} +2 -2
  42. package/dist/{spawn-z0fRvZH9.js → spawn-DrH6CP9W.js} +2 -2
  43. package/dist/{task-queue-BGo6K-BX.js → task-queue-BEzJHMbQ.js} +3 -3
  44. package/dist/{task-runner-DH8M0m7l.js → task-runner-DrC1UgCK.js} +9 -9
  45. package/dist/{thread-state-CS67FjfN.js → thread-state-BIXM2uhZ.js} +5 -5
  46. package/dist/{turn-failure-response-DcaALKfm.js → turn-failure-response-9Ql2NYKh.js} +17 -15
  47. package/dist/{turn-lifecycle-DHcpS20C.js → turn-lifecycle-_YDXUFqj.js} +1 -1
  48. package/dist/{turn-session-routing-DlaCHHlu.js → turn-session-routing-DYxwlqQl.js} +1 -1
  49. package/dist/{validation-CNUPIKMW.js → validation-_gPdrVG7.js} +1 -1
  50. package/dist/{version-B0eXuHqw.js → version-Y7rGnMXG.js} +1 -1
  51. package/dist/version.js +1 -1
  52. package/dist/{web-authorization-DrXlSd3Y.js → web-authorization-COF8MUa5.js} +6 -6
  53. package/dist/{web-input-WFoSdz8L.js → web-input-BmLFoSUw.js} +49 -31
  54. package/dist/{work-B0cAo7nv.js → work-CP3L3bNf.js} +7 -7
  55. package/dist/{worker-DNklqmhH.js → worker-DlZMqtCm.js} +5 -5
  56. package/package.json +4 -4
  57. package/dist/history-H-SI5Dej.d.ts +0 -128
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { ConversationAnnotation, OwnedObjectAnnotation } from "@sentry/junior-plugin-api";
3
+ //#region src/chat/attachments/input.d.ts
4
+ /** Bound JSON image input below the hosting platform's request size limit. */
5
+ declare const MAX_INPUT_IMAGE_BYTES: number;
6
+ declare const MAX_INPUT_IMAGES = 3;
7
+ /** Image bytes accepted with a web message, never stored in its mailbox row. */
8
+ declare const inputImageSchema: z.ZodObject<{
9
+ filename: z.ZodString;
10
+ contentType: z.ZodEnum<{
11
+ "image/png": "image/png";
12
+ "image/jpeg": "image/jpeg";
13
+ "image/gif": "image/gif";
14
+ "image/webp": "image/webp";
15
+ }>;
16
+ data: z.ZodString;
17
+ }, z.core.$strict>;
18
+ type InputImage = z.output<typeof inputImageSchema>;
19
+ /** Safe attachment facts shared by mailbox input and transcript messages. */
20
+ declare const messageAttachmentSchema: z.ZodObject<{
21
+ id: z.ZodString;
22
+ filename: z.ZodString;
23
+ contentType: z.ZodString;
24
+ bytes: z.ZodNumber;
25
+ }, z.core.$strict>;
26
+ type MessageAttachment = z.output<typeof messageAttachmentSchema>;
27
+ //#endregion
28
+ //#region src/chat/automations/card.d.ts
29
+ /** Saved automation facts shown with a Message, not a live status view. */
30
+ declare const automationCardSchema: z.ZodObject<{
31
+ kind: z.ZodLiteral<"automation">;
32
+ id: z.ZodString;
33
+ title: z.ZodString;
34
+ url: z.ZodNullable<z.ZodString>;
35
+ instruction: z.ZodString;
36
+ trigger: z.ZodString;
37
+ warning: z.ZodNullable<z.ZodString>;
38
+ }, z.core.$strict>;
39
+ type AutomationCard = z.output<typeof automationCardSchema>;
40
+ //#endregion
41
+ //#region src/chat/conversations/cards.d.ts
42
+ /** Facts for delivery and display. Messages store only references. */
43
+ type MessageCard = OwnedObjectAnnotation | AutomationCard;
44
+ /** Render each built-in card with its own text format. */
45
+ declare function messageCardText(card: MessageCard): string;
46
+ /** Store only the annotation identity with a Message. */
47
+ declare const messageCardRefSchema: z.ZodObject<{
48
+ plugin: z.ZodString;
49
+ key: z.ZodString;
50
+ kind: z.ZodLiteral<"object">;
51
+ }, z.core.$strict>;
52
+ type MessageCardRef = z.output<typeof messageCardRefSchema>;
53
+ /** Resolve current saved facts without fetching providers or changing history. */
54
+ declare function resolveMessageCards(refs: readonly MessageCardRef[], annotations: readonly ConversationAnnotation[]): OwnedObjectAnnotation[];
55
+ //#endregion
56
+ //#region src/chat/conversations/history.d.ts
57
+ /** Where a failed turn stopped. */
58
+ declare const conversationTurnFailureCodeSchema: z.ZodEnum<{
59
+ agent_run_failed: "agent_run_failed";
60
+ delivery_failed: "delivery_failed";
61
+ model_execution_failed: "model_execution_failed";
62
+ persistence_failed: "persistence_failed";
63
+ }>;
64
+ /**
65
+ * Why a failed turn stopped.
66
+ * Values are fixed labels only. Do not store raw exception text.
67
+ */
68
+ declare const conversationTurnFailureReasonSchema: z.ZodEnum<{
69
+ unknown: "unknown";
70
+ capacity: "capacity";
71
+ auth: "auth";
72
+ permission: "permission";
73
+ rate_limit: "rate_limit";
74
+ timeout: "timeout";
75
+ network: "network";
76
+ server: "server";
77
+ invalid_request: "invalid_request";
78
+ invalid_response: "invalid_response";
79
+ quota: "quota";
80
+ content_policy: "content_policy";
81
+ empty_output: "empty_output";
82
+ tool_errors: "tool_errors";
83
+ suppressed_output: "suppressed_output";
84
+ }>;
85
+ //#endregion
86
+ export { resolveMessageCards as a, MAX_INPUT_IMAGES as c, messageCardText as i, MAX_INPUT_IMAGE_BYTES as l, conversationTurnFailureReasonSchema as n, AutomationCard as o, MessageCard as r, InputImage as s, conversationTurnFailureCodeSchema as t, MessageAttachment as u };
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { j as storeAttachment, k as readLiveAttachment } from "./agent-runner-DtrpkWV5.js";
3
- import { tn as getSqlExecutor } from "./agent-hooks-BfjhfMIy.js";
4
- import "./conversation-DOI6Y60M.js";
2
+ import { j as storeAttachment, k as readLiveAttachment } from "./agent-runner-B9dvsdM8.js";
3
+ import { tn as getSqlExecutor } from "./agent-hooks-Im1UUKhZ.js";
4
+ import "./conversation-DsuDtoYR.js";
5
5
  //#region src/chat/attachments/images.ts
6
6
  var images_exports = /* @__PURE__ */ __exportAll({
7
7
  decodeInputImages: () => decodeInputImages,
@@ -1,6 +1,6 @@
1
- import { N as getDeploymentServiceVersion, P as getDeploymentTelemetryAttributes } from "./logging-Muw6EXro.js";
1
+ import { N as getDeploymentServiceVersion, P as getDeploymentTelemetryAttributes } from "./logging-BO1fVUQe.js";
2
2
  import { _ as vercelAIIntegration, a as getClient, b as withStreamedSpan, c as init, o as getGlobalScope } from "./sentry-CgWZM_kV.js";
3
- import { n as getCurrentConversationPrivacy } from "./conversation-privacy-CB7wx_tP.js";
3
+ import { n as getCurrentConversationPrivacy } from "./conversation-privacy-k2Ucs1Lg.js";
4
4
  import { t as consumePrivateTraceResultMarker } from "./private-trace-result-BLvBjy_e.js";
5
5
  //#region src/chat/sentry-payload-filter.ts
6
6
  const PAYLOAD_ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
@@ -1,4 +1,4 @@
1
- import { a as getChatConfig } from "./config-C4xZrx7G.js";
1
+ import { a as getChatConfig } from "./config-HqsfInxG.js";
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
3
  import { z } from "zod";
4
4
  import { createHash, createHmac, timingSafeEqual } from "node:crypto";
@@ -1,5 +1,5 @@
1
1
  import { d as setTag, f as setUser, h as startSpan, i as getActiveSpan, l as logger, n as captureMessage, p as spanToJSON, s as getTraceData, t as captureException, y as withScope } from "./sentry-CgWZM_kV.js";
2
- import { t as JUNIOR_VERSION } from "./version-B0eXuHqw.js";
2
+ import { t as JUNIOR_VERSION } from "./version-Y7rGnMXG.js";
3
3
  import path from "node:path";
4
4
  import { styleText } from "node:util";
5
5
  import { ConfigError, configureSync, getConfig, getLogger } from "@logtape/logtape";
package/dist/nitro.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as JuniorDashboardOptions } from "./app-BRZB3MuD.js";
1
+ import { n as JuniorDashboardOptions } from "./app-xk2-Id1T.js";
2
2
  import { n as JuniorPluginSet } from "./plugins-BT2l4We3.js";
3
3
  //#region src/nitro.d.ts
4
4
  export type JuniorNitroDashboardOptions = JuniorDashboardOptions;
package/dist/nitro.js CHANGED
@@ -1,8 +1,8 @@
1
- import { A as JUNIOR_RETENTION_ROUTE, D as JUNIOR_HEARTBEAT_ROUTE, E as JUNIOR_HEARTBEAT_CRON_SCHEDULE, O as JUNIOR_PLUGIN_TASK_CALLBACK_ROUTE, T as JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE, j as JUNIOR_WORKSPACE_SNAPSHOT_JOB_CALLBACK_ROUTE, k as JUNIOR_RETENTION_CRON_SCHEDULE } from "./logging-Muw6EXro.js";
1
+ import { A as JUNIOR_RETENTION_ROUTE, D as JUNIOR_HEARTBEAT_ROUTE, E as JUNIOR_HEARTBEAT_CRON_SCHEDULE, O as JUNIOR_PLUGIN_TASK_CALLBACK_ROUTE, T as JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE, j as JUNIOR_WORKSPACE_SNAPSHOT_JOB_CALLBACK_ROUTE, k as JUNIOR_RETENTION_CRON_SCHEDULE } from "./logging-BO1fVUQe.js";
2
2
  import { d as resolvePackageDir, t as discoverInstalledPluginPackageContent, u as isValidPackageName } from "./package-discovery-7a9YqLhE.js";
3
- import { o as resolveConversationWorkQueueTopic, t as WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC } from "./job-queue-C1AJ5uJt.js";
3
+ import { o as resolveConversationWorkQueueTopic, t as WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC } from "./job-queue-CpNnv-n1.js";
4
4
  import { a as pluginRuntimeRegistrationsFromPluginSet, r as pluginCatalogConfigFromPluginSet } from "./plugins-egKWjgue.js";
5
- import { t as PLUGIN_TASK_QUEUE_TOPIC } from "./task-queue-BGo6K-BX.js";
5
+ import { t as PLUGIN_TASK_QUEUE_TOPIC } from "./task-queue-BEzJHMbQ.js";
6
6
  import { n as loadPluginSetFromModule, r as resolvePluginModule } from "./plugin-module-BKGOXca2.js";
7
7
  import path from "node:path";
8
8
  import { cpSync, existsSync, mkdirSync, readdirSync, statSync } from "node:fs";
@@ -1,4 +1,4 @@
1
- import { h as extractAssistantText } from "./checkpoint-DEYb3Fqm.js";
1
+ import { h as extractAssistantText } from "./checkpoint-BDaS7x3C.js";
2
2
  //#region src/chat/runtime/turn.ts
3
3
  /** Classified Slack turn failure carrying the owning Sentry capture outward. */
4
4
  var ConversationTurnBoundaryError = class extends Error {
@@ -1,5 +1,5 @@
1
- import { Cn as createUserTokenStore } from "./agent-runner-DtrpkWV5.js";
2
- import { a as GET, n as syncLocalOAuthCredential, r as GET$1 } from "./credential-sync-CuEwdxwY.js";
1
+ import { Cn as createUserTokenStore } from "./agent-runner-B9dvsdM8.js";
2
+ import { a as GET, n as syncLocalOAuthCredential, r as GET$1 } from "./credential-sync-DEF6P_Qr.js";
3
3
  import { createServer } from "node:http";
4
4
  //#region src/chat/local/oauth-callback-server.ts
5
5
  const LOCAL_OAUTH_TIMEOUT_MS = 6e5;
@@ -1,4 +1,4 @@
1
- import { i as abandonTurnRecord } from "./checkpoint-DEYb3Fqm.js";
1
+ import { i as abandonTurnRecord } from "./checkpoint-BDaS7x3C.js";
2
2
  //#region src/chat/state/turn-id.ts
3
3
  /** Build a stable turn identifier from a message ID. */
4
4
  function buildDeterministicTurnId(messageId) {
@@ -1,7 +1,7 @@
1
- import { S as toOptionalTrimmed } from "./client-BN5U3CGw.js";
2
- import { v as setSpanAttributes, y as setSpanStatus } from "./logging-Muw6EXro.js";
3
- import { a as getChatConfig } from "./config-C4xZrx7G.js";
4
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Byr3trKF.js";
1
+ import { S as toOptionalTrimmed } from "./client-DucHsb6b.js";
2
+ import { v as setSpanAttributes, y as setSpanStatus } from "./logging-BO1fVUQe.js";
3
+ import { a as getChatConfig } from "./config-HqsfInxG.js";
4
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Blx7IGY9.js";
5
5
  import { createHash } from "node:crypto";
6
6
  import { createMemoryState } from "@chat-adapter/state-memory";
7
7
  import { createRedisState } from "@chat-adapter/state-redis";
@@ -1,4 +1,4 @@
1
- import { H as conversationBriefSchema, U as parseBriefInput, V as briefOutcomeStatusSchema } from "./conversation-DOI6Y60M.js";
1
+ import { I as briefOutcomeStatusSchema, L as conversationBriefSchema, R as parseBriefInput } from "./conversation-DsuDtoYR.js";
2
2
  import { z } from "zod";
3
3
  //#region src/chat/briefs/generate.ts
4
4
  const MAX_INPUT_CHARS = 6e4;
@@ -1,4 +1,4 @@
1
- import { f as logInfo, p as logWarn, v as setSpanAttributes } from "./logging-Muw6EXro.js";
1
+ import { f as logInfo, p as logWarn, v as setSpanAttributes } from "./logging-BO1fVUQe.js";
2
2
  import { i as credentialUserSubjectId } from "./context-0Et9iVSB.js";
3
3
  import { n as normalizePluginPackageNames, o as pluginRoots, t as discoverInstalledPluginPackageContent } from "./package-discovery-7a9YqLhE.js";
4
4
  import path from "node:path";
@@ -1,5 +1,5 @@
1
- import { v as setSpanAttributes, w as withSpan } from "./logging-Muw6EXro.js";
2
- import { N as SANDBOX_WORKSPACE_ROOT, k as sleep, r as isStale, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-25NkcK4S.js";
1
+ import { v as setSpanAttributes, w as withSpan } from "./logging-BO1fVUQe.js";
2
+ import { N as SANDBOX_WORKSPACE_ROOT, k as sleep, r as isStale, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-DpHUuqjR.js";
3
3
  import { z } from "zod";
4
4
  import { FileSystem, Sandbox } from "@vercel/sandbox";
5
5
  //#region src/chat/sandbox/resources.ts
@@ -1,13 +1,13 @@
1
- import { C as withLogContext, b as setTags, d as logException } from "./logging-Muw6EXro.js";
1
+ import { C as withLogContext, b as setTags, d as logException } from "./logging-BO1fVUQe.js";
2
2
  import { t as credentialContextForActor } from "./context-0Et9iVSB.js";
3
- import { $t as getConversationStore, Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
4
- import { M as messageCardText } from "./conversation-DOI6Y60M.js";
5
- import { A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, P as loadProjection, Y as persistConversationMessages, ct as markConversationMessage, ft as upsertConversationMessage, lt as normalizeConversationText, r as saveTurnCheckpoint, rt as buildConversationContext, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-DEYb3Fqm.js";
6
- import { _ as markTurnFailed, r as getAssistantReplyText, t as authorizationId, v as startActiveTurn } from "./oauth-authorization-CrD-xb8a.js";
7
- import { n as scheduleSessionCompletedPluginTasks, t as processPluginTask } from "./task-runner-DH8M0m7l.js";
8
- import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-DHcpS20C.js";
9
- import { n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-CS67FjfN.js";
10
- import { d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, t as finalizeFailedTurnReplyWithEvent } from "./turn-failure-response-DcaALKfm.js";
3
+ import { $t as getConversationStore, Zt as getConversationEventStore } from "./agent-hooks-Im1UUKhZ.js";
4
+ import { V as messageCardText } from "./conversation-DsuDtoYR.js";
5
+ import { A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, P as loadProjection, Y as persistConversationMessages, ct as markConversationMessage, ft as upsertConversationMessage, lt as normalizeConversationText, r as saveTurnCheckpoint, rt as buildConversationContext, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-BDaS7x3C.js";
6
+ import { _ as markTurnFailed, r as getAssistantReplyText, t as authorizationId, v as startActiveTurn } from "./oauth-authorization-DPPpHxSI.js";
7
+ import { n as scheduleSessionCompletedPluginTasks, t as processPluginTask } from "./task-runner-DrC1UgCK.js";
8
+ import { t as ConversationTurnLifecycleService } from "./turn-lifecycle-_YDXUFqj.js";
9
+ import { n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-BIXM2uhZ.js";
10
+ import { d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, t as finalizeFailedTurnReplyWithEvent } from "./turn-failure-response-9Ql2NYKh.js";
11
11
  import { randomUUID } from "node:crypto";
12
12
  import { createLocalSource, localDestinationSchema } from "@sentry/junior-plugin-api";
13
13
  //#region src/chat/local/runner.ts
@@ -1,4 +1,4 @@
1
- import { cn as sandboxEgressSignalsResponseSchema } from "./agent-runner-DtrpkWV5.js";
1
+ import { cn as sandboxEgressSignalsResponseSchema } from "./agent-runner-B9dvsdM8.js";
2
2
  //#region src/chat/local/sandbox-egress-signals.ts
3
3
  const SANDBOX_EGRESS_SIGNALS_PATH = "/api/internal/sandbox-egress/signals";
4
4
  const LOCAL_DEV_SERVER_TIMEOUT_MS = 1e3;
@@ -1,5 +1,5 @@
1
1
  import { t as juniorDestinationKindSchema } from "./destinations-BeBiJeEM.js";
2
- import { E as conversationSummaryReportSchema, n as actorIdentitySchema, w as conversationStatsItemSchema } from "./conversation-DOI6Y60M.js";
2
+ import { E as conversationSummaryReportSchema, n as actorIdentitySchema, w as conversationStatsItemSchema } from "./conversation-DsuDtoYR.js";
3
3
  import { a as fillUtcHours, c as sumUtcHoursIntoSixHours, i as fillUtcDays } from "./web-message-id-xPI_EFSC.js";
4
4
  import { z } from "zod";
5
5
  import { codeChangeStateSchema, taskOutcomeSchema } from "@sentry/junior-plugin-api";
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { p as logWarn } from "./logging-Muw6EXro.js";
2
+ import { p as logWarn } from "./logging-BO1fVUQe.js";
3
3
  import { s as skillRoots } from "./package-discovery-7a9YqLhE.js";
4
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Byr3trKF.js";
4
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Blx7IGY9.js";
5
5
  import path from "node:path";
6
6
  import { z } from "zod";
7
7
  import fs from "node:fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { Dn as toolInvocationDestination, En as actorFromRun } from "./agent-runner-DtrpkWV5.js";
3
- import { n as createAndEnqueueAgentInvocation } from "./work-B0cAo7nv.js";
2
+ import { Dn as toolInvocationDestination, En as actorFromRun } from "./agent-runner-B9dvsdM8.js";
3
+ import { n as createAndEnqueueAgentInvocation } from "./work-CP3L3bNf.js";
4
4
  //#region src/chat/agent-invocations/spawn.ts
5
5
  var spawn_exports = /* @__PURE__ */ __exportAll({ bindSpawnAgent: () => bindSpawnAgent });
6
6
  /** Bind a Run's Actor and credentials to new Agent invocations. */
@@ -1,5 +1,5 @@
1
- import { p as logWarn } from "./logging-Muw6EXro.js";
2
- import { c as QUEUE_SIGNATURE_MAX_AGE_MS, d as createVercelQueueClient, l as signQueueMessage, p as runWithTurnRequestDeadline, u as verifyQueueMessage } from "./job-queue-C1AJ5uJt.js";
1
+ import { p as logWarn } from "./logging-BO1fVUQe.js";
2
+ import { c as QUEUE_SIGNATURE_MAX_AGE_MS, d as createVercelQueueClient, l as signQueueMessage, p as runWithTurnRequestDeadline, u as verifyQueueMessage } from "./job-queue-CpNnv-n1.js";
3
3
  import { z } from "zod";
4
4
  import { createHash } from "node:crypto";
5
5
  import { handleCallback, registerDevConsumer } from "@vercel/queue";
@@ -109,7 +109,7 @@ function pluginTaskCallback() {
109
109
  maxDeliveries: PLUGIN_TASK_MAX_DELIVERIES,
110
110
  onRejected: logPluginTaskQueueMessageRejected,
111
111
  run: async (message) => {
112
- const { processPluginTask } = await import("./task-runner-DH8M0m7l.js").then((n) => n.r);
112
+ const { processPluginTask } = await import("./task-runner-DrC1UgCK.js").then((n) => n.r);
113
113
  await processPluginTask(message);
114
114
  },
115
115
  topic: PLUGIN_TASK_QUEUE_TOPIC,
@@ -1,14 +1,14 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { p as logWarn } from "./logging-Muw6EXro.js";
2
+ import { p as logWarn } from "./logging-BO1fVUQe.js";
3
3
  import { b as parseSlackMessageTs, r as credentialSubjectSchema } from "./context-0Et9iVSB.js";
4
- import { $t as getConversationStore, Ct as createPluginLogger, Nt as createPluginConversationEvents, Q as readActorIdentity, St as createPluginModel, bt as createPluginState, en as getDb, ht as JUNIOR_THREAD_STATE_TTL_MS, ln as agentTurnCostUsd, p as coreTaskRegistrations, u as getPlugins, un as agentTurnTotalTokens, xt as createPluginEmbedder } from "./agent-hooks-BfjhfMIy.js";
5
- import { E as juniorConversations, s as juniorAutomationExecutions } from "./executor-DUqeOd8y.js";
6
- import { nt as sameActorIdentity } from "./conversation-DOI6Y60M.js";
7
- import { C as isToolResultError, D as stripRuntimeTurnContext, J as hydrateConversationMessages, T as normalizeToolNameFromResult, b as instructionTextForProjection, g as getPiMessageRole, s as getTurnRecord, w as isToolResultMessage } from "./checkpoint-DEYb3Fqm.js";
8
- import { w as getStateAdapter } from "./profile-25NkcK4S.js";
9
- import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-CS67FjfN.js";
10
- import { t as resolveConversationRouting } from "./turn-session-routing-DlaCHHlu.js";
11
- import { i as pluginTaskParamsSchema, o as sendVercelPluginTask, r as pluginTaskId } from "./task-queue-BGo6K-BX.js";
4
+ import { $t as getConversationStore, Ct as createPluginLogger, Nt as createPluginConversationEvents, Q as readActorIdentity, St as createPluginModel, bt as createPluginState, en as getDb, ht as JUNIOR_THREAD_STATE_TTL_MS, ln as agentTurnCostUsd, p as coreTaskRegistrations, u as getPlugins, un as agentTurnTotalTokens, xt as createPluginEmbedder } from "./agent-hooks-Im1UUKhZ.js";
5
+ import { E as juniorConversations, s as juniorAutomationExecutions } from "./executor-C-LEhjeD.js";
6
+ import { rt as sameActorIdentity } from "./conversation-DsuDtoYR.js";
7
+ import { C as isToolResultError, D as stripRuntimeTurnContext, J as hydrateConversationMessages, T as normalizeToolNameFromResult, b as instructionTextForProjection, g as getPiMessageRole, s as getTurnRecord, w as isToolResultMessage } from "./checkpoint-BDaS7x3C.js";
8
+ import { w as getStateAdapter } from "./profile-DpHUuqjR.js";
9
+ import { r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-BIXM2uhZ.js";
10
+ import { t as resolveConversationRouting } from "./turn-session-routing-DYxwlqQl.js";
11
+ import { i as pluginTaskParamsSchema, o as sendVercelPluginTask, r as pluginTaskId } from "./task-queue-BEzJHMbQ.js";
12
12
  import { z } from "zod";
13
13
  import { createHash } from "node:crypto";
14
14
  import { and, asc, count, desc, eq, gte, inArray, lte, max, or, sql } from "drizzle-orm";
@@ -1,9 +1,9 @@
1
- import { I as isRecord, L as toOptionalNumber, R as toOptionalString } from "./logging-Muw6EXro.js";
2
- import { en as getDb, ht as JUNIOR_THREAD_STATE_TTL_MS } from "./agent-hooks-BfjhfMIy.js";
1
+ import { I as isRecord, L as toOptionalNumber, R as toOptionalString } from "./logging-BO1fVUQe.js";
2
+ import { en as getDb, ht as JUNIOR_THREAD_STATE_TTL_MS } from "./agent-hooks-Im1UUKhZ.js";
3
3
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
4
- import { u as juniorLocationConfigurations } from "./executor-DUqeOd8y.js";
5
- import { Y as persistConversationMessages } from "./checkpoint-DEYb3Fqm.js";
6
- import { w as getStateAdapter } from "./profile-25NkcK4S.js";
4
+ import { u as juniorLocationConfigurations } from "./executor-C-LEhjeD.js";
5
+ import { Y as persistConversationMessages } from "./checkpoint-BDaS7x3C.js";
6
+ import { w as getStateAdapter } from "./profile-DpHUuqjR.js";
7
7
  import { z } from "zod";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { and, eq, sql } from "drizzle-orm";
@@ -1,19 +1,19 @@
1
- import { _ as getProviderErrorUserMessage, g as getProviderErrorAttributes, h as findProviderError, p as ProviderError } from "./client-BN5U3CGw.js";
2
- import { I as isRecord, t as buildTurnFailureResponse } from "./logging-Muw6EXro.js";
1
+ import { _ as getProviderErrorUserMessage, g as getProviderErrorAttributes, h as findProviderError, p as ProviderError } from "./client-DucHsb6b.js";
2
+ import { I as isRecord, t as buildTurnFailureResponse } from "./logging-BO1fVUQe.js";
3
3
  import { b as parseSlackMessageTs } from "./context-0Et9iVSB.js";
4
- import { Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
5
- import { A as messageCardKey, N as readMessageCards, j as messageCardRefSchema } from "./conversation-DOI6Y60M.js";
6
- import { J as hydrateConversationMessages, ct as markConversationMessage } from "./checkpoint-DEYb3Fqm.js";
7
- import { r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-pYQpJmtu.js";
8
- import { g as markTurnCompleted, h as markTurnClosed } from "./oauth-authorization-CrD-xb8a.js";
9
- import { o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-CS67FjfN.js";
4
+ import { Wt as listConversationAnnotations, Zt as getConversationEventStore, en as getDb } from "./agent-hooks-Im1UUKhZ.js";
5
+ import { H as readMessageCardRefs, U as removedCardSchema, W as resolveMessageCards } from "./conversation-DsuDtoYR.js";
6
+ import { J as hydrateConversationMessages, ct as markConversationMessage } from "./checkpoint-BDaS7x3C.js";
7
+ import { r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-BWgfMCZE.js";
8
+ import { g as markTurnCompleted, h as markTurnClosed } from "./oauth-authorization-DPPpHxSI.js";
9
+ import { o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState } from "./thread-state-BIXM2uhZ.js";
10
10
  //#region src/chat/conversations/pending-cards.ts
11
- /** Read undelivered card snapshots across resume and history replacement. */
11
+ /** Select undelivered cards and load their latest saved facts. */
12
12
  async function loadPendingMessageCards(conversationId) {
13
13
  const cards = /* @__PURE__ */ new Map();
14
14
  const deleted = /* @__PURE__ */ new Set();
15
15
  let beforeSeq;
16
- while (true) {
16
+ selection: while (true) {
17
17
  const page = await getConversationEventStore().query(conversationId, {
18
18
  beforeSeq,
19
19
  limit: 100,
@@ -25,18 +25,20 @@ async function loadPendingMessageCards(conversationId) {
25
25
  });
26
26
  for (const event of [...page.events].reverse()) {
27
27
  const data = event.data;
28
- if (data.type === "turn_started" || data.type === "message" && data.role === "assistant") return [...cards.values()].reverse();
28
+ if (data.type === "turn_started" || data.type === "message" && data.role === "assistant") break selection;
29
29
  if (data.type !== "tool_result" || data.isError || typeof data.toolName !== "string" || !isRecord(data.details)) continue;
30
30
  if (data.details.timed_out === true) continue;
31
- if (Array.isArray(data.details.removedCards)) for (const ref of messageCardRefSchema.array().parse(data.details.removedCards)) deleted.add(JSON.stringify([ref.plugin, ref.key]));
32
- for (const card of readMessageCards(data.details)) {
33
- const key = messageCardKey(card);
31
+ if (Array.isArray(data.details.removedCards)) for (const ref of removedCardSchema.array().parse(data.details.removedCards)) deleted.add(JSON.stringify([ref.plugin, ref.key]));
32
+ for (const card of readMessageCardRefs(data.details)) {
33
+ const key = JSON.stringify([card.plugin, card.key]);
34
34
  if (!deleted.has(key) && !cards.has(key)) cards.set(key, card);
35
35
  }
36
36
  }
37
- if (!page.hasOlder || page.events.length === 0) return [...cards.values()].reverse();
37
+ if (!page.hasOlder || page.events.length === 0) break;
38
38
  beforeSeq = page.events[0].seq;
39
39
  }
40
+ if (cards.size === 0) return [];
41
+ return resolveMessageCards([...cards.values()].reverse(), await listConversationAnnotations(getDb(), conversationId));
40
42
  }
41
43
  //#endregion
42
44
  //#region src/chat/interruption-marker.ts
@@ -1,4 +1,4 @@
1
- import { Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
1
+ import { Zt as getConversationEventStore } from "./agent-hooks-Im1UUKhZ.js";
2
2
  //#region src/chat/conversations/turn-lifecycle.ts
3
3
  /** Persist correlated turn lifecycle facts with retry-safe terminal exclusion. */
4
4
  var ConversationTurnLifecycleService = class {
@@ -34,7 +34,7 @@ function slackSourceForDestination(args) {
34
34
  * Reads parent Conversations when this Conversation has no Destination.
35
35
  */
36
36
  async function resolveConversationRouting(args) {
37
- const conversationStore = args.conversationStore ?? (await import("./agent-hooks-BfjhfMIy.js").then((n) => n.Xt)).getConversationStore();
37
+ const conversationStore = args.conversationStore ?? (await import("./agent-hooks-Im1UUKhZ.js").then((n) => n.Xt)).getConversationStore();
38
38
  const chain = await loadConversationChain(args.conversationId, conversationStore);
39
39
  let destination;
40
40
  let source;
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
2
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Byr3trKF.js";
2
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-Blx7IGY9.js";
3
3
  import { isDeepStrictEqual } from "node:util";
4
4
  //#region src/chat/plugins/validation.ts
5
5
  var validation_exports = /* @__PURE__ */ __exportAll({
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.229.0";
2
+ var version = "0.230.0";
3
3
  //#endregion
4
4
  //#region src/version.ts
5
5
  /** Installed Junior package version, or `unknown` when package metadata is unavailable. */
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as JUNIOR_VERSION } from "./version-B0eXuHqw.js";
1
+ import { t as JUNIOR_VERSION } from "./version-Y7rGnMXG.js";
2
2
  export { JUNIOR_VERSION };
@@ -1,9 +1,9 @@
1
- import { Ht as requestConversationWork, Mt as ensureConversationWake } from "./agent-runner-DtrpkWV5.js";
2
- import { Zt as getConversationEventStore } from "./agent-hooks-BfjhfMIy.js";
3
- import { n as loadTurnCheckpoint, o as failTurnRecord, s as getTurnRecord } from "./checkpoint-DEYb3Fqm.js";
4
- import { w as getStateAdapter } from "./profile-25NkcK4S.js";
5
- import { a as getVercelConversationWorkQueue } from "./job-queue-C1AJ5uJt.js";
6
- import { n as resolveTurnSessionRouting } from "./turn-session-routing-DlaCHHlu.js";
1
+ import { Ht as requestConversationWork, Mt as ensureConversationWake } from "./agent-runner-B9dvsdM8.js";
2
+ import { Zt as getConversationEventStore } from "./agent-hooks-Im1UUKhZ.js";
3
+ import { n as loadTurnCheckpoint, o as failTurnRecord, s as getTurnRecord } from "./checkpoint-BDaS7x3C.js";
4
+ import { w as getStateAdapter } from "./profile-DpHUuqjR.js";
5
+ import { a as getVercelConversationWorkQueue } from "./job-queue-CpNnv-n1.js";
6
+ import { n as resolveTurnSessionRouting } from "./turn-session-routing-DYxwlqQl.js";
7
7
  import { z } from "zod";
8
8
  import { randomUUID } from "node:crypto";
9
9
  //#region src/chat/task-execution/authorized-turn.ts
@@ -1,29 +1,29 @@
1
- import { $t as recordFinishedTurnForAutomatedLimit, B as isListedScheduledAutomation, Cn as createUserTokenStore, D as renderBlockText, E as renderAttachmentText, F as resolveSlackChannelIdFromThreadId, G as readScheduledAutomation, I as listThreadReplies, K as saveScheduledAutomation, M as parseSlackThreadId, N as readSlackRawMessageContext, On as AuthorizationFlowDisabledError, P as resolveSlackChannelIdFromMessage, Pt as getConversationWorkState, Q as effectiveTaskOutcomes, Qt as maybePostAutomatedTurnLimitNotice, Tn as RetryableDeliveryError, V as listPublicScheduledAutomationsForTeams, W as parseScheduledAutomationRow, Z as eventAutomationTriggerAvailable, _n as truncateStatusText, _t as getEventCatalog, a as isExperimentalFeatureEnabled, at as listEventAutomationsCreatedBy, bn as removeReactionFromMessage, bt as appendAndEnqueueExclusiveInboundMessage, c as createContextCompactor, et as deleteEventAutomation, gn as normalizeSlackStatusText, gt as isEventMailboxMetadata, hn as normalizeSlackReplyMarkdown, ht as EVENT_WAIT_MS, it as listDeletedEventAutomationsCreatedBy, j as storeAttachment, kn as shouldEmitDevAgentTrace, mn as formatSlackLink, ot as listPublicEventAutomationsForTeams, pn as escapeSlackMrkdwnText, rt as getEventAutomation, s as executeAgentRun, t as createAgentRunner, tt as eventAutomationBelongsToUser, v as PluginCredentialFailureError, vn as addReactionToMessage, wn as buildSteeringPiMessage, xt as appendAndEnqueueInboundMessage, y as latestProgressStatus, yn as postSlackMessage } from "./agent-runner-DtrpkWV5.js";
2
- import { f as escapeXml, i as completeText, r as completeObject, v as isProviderRetryError } from "./client-BN5U3CGw.js";
3
- import { C as withLogContext, I as isRecord, L as toOptionalNumber, R as toOptionalString, _ as setSentryUser, b as setTags, d as logException, f as logInfo, n as createChatSdkLogger, o as getActiveTraceId, p as logWarn, t as buildTurnFailureResponse, u as logError, v as setSpanAttributes, w as withSpan } from "./logging-Muw6EXro.js";
4
- import { a as getChatConfig, c as getSlackClientId, d as getSlackSigningSecret, h as normalizeSlackEmojiName, l as getSlackClientSecret, n as botConfig, s as getSlackBotToken } from "./config-C4xZrx7G.js";
1
+ import { $t as recordFinishedTurnForAutomatedLimit, B as isListedScheduledAutomation, Cn as createUserTokenStore, D as renderBlockText, E as renderAttachmentText, F as resolveSlackChannelIdFromThreadId, G as readScheduledAutomation, I as listThreadReplies, K as saveScheduledAutomation, M as parseSlackThreadId, N as readSlackRawMessageContext, On as AuthorizationFlowDisabledError, P as resolveSlackChannelIdFromMessage, Pt as getConversationWorkState, Q as effectiveTaskOutcomes, Qt as maybePostAutomatedTurnLimitNotice, Tn as RetryableDeliveryError, V as listPublicScheduledAutomationsForTeams, W as parseScheduledAutomationRow, Z as eventAutomationTriggerAvailable, _n as truncateStatusText, _t as getEventCatalog, a as isExperimentalFeatureEnabled, at as listEventAutomationsCreatedBy, bn as removeReactionFromMessage, bt as appendAndEnqueueExclusiveInboundMessage, c as createContextCompactor, et as deleteEventAutomation, gn as normalizeSlackStatusText, gt as isEventMailboxMetadata, hn as normalizeSlackReplyMarkdown, ht as EVENT_WAIT_MS, it as listDeletedEventAutomationsCreatedBy, j as storeAttachment, kn as shouldEmitDevAgentTrace, mn as formatSlackLink, ot as listPublicEventAutomationsForTeams, pn as escapeSlackMrkdwnText, rt as getEventAutomation, s as executeAgentRun, t as createAgentRunner, tt as eventAutomationBelongsToUser, v as PluginCredentialFailureError, vn as addReactionToMessage, wn as buildSteeringPiMessage, xt as appendAndEnqueueInboundMessage, y as latestProgressStatus, yn as postSlackMessage } from "./agent-runner-B9dvsdM8.js";
2
+ import { f as escapeXml, i as completeText, r as completeObject, v as isProviderRetryError } from "./client-DucHsb6b.js";
3
+ import { C as withLogContext, I as isRecord, L as toOptionalNumber, R as toOptionalString, _ as setSentryUser, b as setTags, d as logException, f as logInfo, n as createChatSdkLogger, o as getActiveTraceId, p as logWarn, t as buildTurnFailureResponse, u as logError, v as setSpanAttributes, w as withSpan } from "./logging-BO1fVUQe.js";
4
+ import { a as getChatConfig, c as getSlackClientId, d as getSlackSigningSecret, h as normalizeSlackEmojiName, l as getSlackClientSecret, n as botConfig, s as getSlackBotToken } from "./config-HqsfInxG.js";
5
5
  import { o as modelIdForProfile, r as defaultModelId } from "./model-profile-BwU8mqwD.js";
6
6
  import { a as createActor, b as parseSlackMessageTs, c as isActorUserId, l as isUserActor, o as createSlackActor, p as parseSlackChannelId, s as createSlackResumeActor, t as credentialContextForActor, u as parseActorUserId } from "./context-0Et9iVSB.js";
7
- import { $t as getConversationStore, B as downloadPrivateSlackFile, Bt as recordSlackAttachment, G as isDmChannel, H as getHeaderString, It as buildSentryConversationUrl, K as normalizeSlackConversationId, Lt as getSlackFileId, U as getSlackClient, Zt as getConversationEventStore, _n as createSlackDestination, _t as getDashboardObjectIconLink, en as getDb, gt as getDashboardConversationLink, ht as JUNIOR_THREAD_STATE_TTL_MS, o as getPluginSlackConversationLink, ot as cancelSubscriptions, q as runWithSlackInstallationToken, tn as getSqlExecutor, yn as requireSlackDestination, z as SlackActionError, zt as readAttachmentVisionSummary } from "./agent-hooks-BfjhfMIy.js";
7
+ import { $t as getConversationStore, B as downloadPrivateSlackFile, Bt as recordSlackAttachment, G as isDmChannel, H as getHeaderString, It as buildSentryConversationUrl, K as normalizeSlackConversationId, Lt as getSlackFileId, U as getSlackClient, Zt as getConversationEventStore, _n as createSlackDestination, _t as getDashboardObjectIconLink, en as getDb, gt as getDashboardConversationLink, ht as JUNIOR_THREAD_STATE_TTL_MS, o as getPluginSlackConversationLink, ot as cancelSubscriptions, q as runWithSlackInstallationToken, tn as getSqlExecutor, yn as requireSlackDestination, z as SlackActionError, zt as readAttachmentVisionSummary } from "./agent-hooks-Im1UUKhZ.js";
8
8
  import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
9
- import { D as juniorIdentities, O as juniorUsers, o as juniorSchedulerTasks } from "./executor-DUqeOd8y.js";
10
- import { I as readMessageAttachments, R as isVisionImageMediaType, tt as instructionProvenanceFor } from "./conversation-DOI6Y60M.js";
11
- import { $ as fallbackShortTitle, A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, N as loadConversationProjection, O as trimTrailingAssistantMessages, P as loadProjection, Q as resolveConversationTitle, W as recordSubscribedReplyRoute, Y as persistConversationMessages, Z as persistConversationMessageSummaries, a as completeTurnRecord, at as estimateConversationContextTokens, c as listTurnSummaries, ct as markConversationMessage, dt as turnHasReply, ft as upsertConversationMessage, i as abandonTurnRecord, it as createConversationMemoryService, j as commitMessages, l as recordTurnSummary, lt as normalizeConversationText, n as loadTurnCheckpoint, nt as appendThreadContextMessages, o as failTurnRecord, ot as getConversationMessageSlackTs, p as buildTurnErrorResponse, pt as estimateTextTokens, r as saveTurnCheckpoint, rt as buildConversationContext, s as getTurnRecord, st as isHumanConversationMessage, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-DEYb3Fqm.js";
12
- import { E as acquireActiveLock, O as withLock, T as MUTATION_LOCK_TTL_MS, w as getStateAdapter } from "./profile-25NkcK4S.js";
13
- import { a as isPendingAuthLatestRequest, o as buildDeterministicAssistantMessageId, r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-pYQpJmtu.js";
14
- import { _ as markTurnFailed, c as CooperativeTurnYieldError, d as getConversationTurnBoundaryError, f as isCooperativeTurnYieldError, g as markTurnCompleted, h as markTurnClosed, l as TurnInputCommitLostError, m as isTurnInputDeferredError, p as isTurnInputCommitLostError, r as getAssistantReplyText, s as ConversationTurnBoundaryError, u as TurnInputDeferredError, v as startActiveTurn } from "./oauth-authorization-CrD-xb8a.js";
15
- import { a as EVENT_SYSTEM_ACTOR, i as EVENT_MESSAGE_AUTHOR, o as isEventConversationMessage } from "./prompt-9C-wUwwx.js";
16
- import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline } from "./job-queue-C1AJ5uJt.js";
9
+ import { D as juniorIdentities, O as juniorUsers, o as juniorSchedulerTasks } from "./executor-C-LEhjeD.js";
10
+ import { N as isVisionImageMediaType, j as readMessageAttachments, nt as instructionProvenanceFor } from "./conversation-DsuDtoYR.js";
11
+ import { $ as fallbackShortTitle, A as commitAcceptedReply, B as recordAuthorizationCompleted, J as hydrateConversationMessages, N as loadConversationProjection, O as trimTrailingAssistantMessages, P as loadProjection, Q as resolveConversationTitle, W as recordSubscribedReplyRoute, Y as persistConversationMessages, Z as persistConversationMessageSummaries, a as completeTurnRecord, at as estimateConversationContextTokens, c as listTurnSummaries, ct as markConversationMessage, dt as turnHasReply, ft as upsertConversationMessage, i as abandonTurnRecord, it as createConversationMemoryService, j as commitMessages, l as recordTurnSummary, lt as normalizeConversationText, n as loadTurnCheckpoint, nt as appendThreadContextMessages, o as failTurnRecord, ot as getConversationMessageSlackTs, p as buildTurnErrorResponse, pt as estimateTextTokens, r as saveTurnCheckpoint, rt as buildConversationContext, s as getTurnRecord, st as isHumanConversationMessage, u as persistWithRetry, ut as recordDeliveredAssistantMessage } from "./checkpoint-BDaS7x3C.js";
12
+ import { E as acquireActiveLock, O as withLock, T as MUTATION_LOCK_TTL_MS, w as getStateAdapter } from "./profile-DpHUuqjR.js";
13
+ import { a as isPendingAuthLatestRequest, o as buildDeterministicAssistantMessageId, r as clearPendingAuth, s as buildDeterministicTurnId } from "./pending-auth-BWgfMCZE.js";
14
+ import { _ as markTurnFailed, c as CooperativeTurnYieldError, d as getConversationTurnBoundaryError, f as isCooperativeTurnYieldError, g as markTurnCompleted, h as markTurnClosed, l as TurnInputCommitLostError, m as isTurnInputDeferredError, p as isTurnInputCommitLostError, r as getAssistantReplyText, s as ConversationTurnBoundaryError, u as TurnInputDeferredError, v as startActiveTurn } from "./oauth-authorization-DPPpHxSI.js";
15
+ import { a as EVENT_SYSTEM_ACTOR, i as EVENT_MESSAGE_AUTHOR, o as isEventConversationMessage } from "./prompt-D5RPLy92.js";
16
+ import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline } from "./job-queue-CpNnv-n1.js";
17
17
  import { c as sumUtcHoursIntoSixHours, m as healthReportSchema, t as webMessageId } from "./web-message-id-xPI_EFSC.js";
18
- import { C as readAutomationExecutionStatusDays, D as readAutomationRuns, E as readAutomationExecutions, S as readAutomationExecutionHours, T as readAutomationExecutionSummaries, _ as markDispatchFailed, a as confirmDispatchMailboxAppend, b as readAutomationExecutionByConversationId, c as getDispatchInputMessageId, f as isTerminalDispatchStatus, g as markDispatchCompleted, h as markDispatchBlocked, i as claimDispatchMailboxAppend, l as getDispatchRecord, m as markDispatchAwaitingResume, n as scheduleSessionCompletedPluginTasks, s as getDispatchConversationId, t as processPluginTask, u as getDispatchTurnId, v as markDispatchRunning, w as readAutomationExecutionStatusHours, x as readAutomationExecutionDays, y as emptyAutomationRunWindows } from "./task-runner-DH8M0m7l.js";
19
- import { i as resolveAgentInvocationId, o as AgentRunError, s as executeTurn, t as createAgentInvocationWorker } from "./work-B0cAo7nv.js";
20
- import { n as getTurnLifecycle, t as ConversationTurnLifecycleService } from "./turn-lifecycle-DHcpS20C.js";
21
- import { a as persistThreadState, c as configValueSchema, i as persistThreadRuntimeState, n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState, t as getLocationConfigurationService } from "./thread-state-CS67FjfN.js";
22
- import { a as getPausedTurnRequest, c as getTurnAuthorization, i as createPausedTurns, n as deleteWebAuthorization, s as wakePausedTurn, t as createWebAuthorization } from "./web-authorization-DrXlSd3Y.js";
23
- import { n as resolveTurnSessionRouting } from "./turn-session-routing-DlaCHHlu.js";
24
- import { t as bindSpawnAgent } from "./spawn-z0fRvZH9.js";
25
- import { a as persistAuthPauseTurnState, c as getTurnUserSlackMessageTs, d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, n as getAgentTurnDiagnosticsAttributes, o as getTurnUserMessage, r as requireTurnFailureEventId, s as getTurnUserReplyAttachmentContext, t as finalizeFailedTurnReplyWithEvent, u as getInterruptionMarker } from "./turn-failure-response-DcaALKfm.js";
26
- import { r as storeInputImages } from "./images-B5JLFwJR.js";
18
+ import { C as readAutomationExecutionStatusDays, D as readAutomationRuns, E as readAutomationExecutions, S as readAutomationExecutionHours, T as readAutomationExecutionSummaries, _ as markDispatchFailed, a as confirmDispatchMailboxAppend, b as readAutomationExecutionByConversationId, c as getDispatchInputMessageId, f as isTerminalDispatchStatus, g as markDispatchCompleted, h as markDispatchBlocked, i as claimDispatchMailboxAppend, l as getDispatchRecord, m as markDispatchAwaitingResume, n as scheduleSessionCompletedPluginTasks, s as getDispatchConversationId, t as processPluginTask, u as getDispatchTurnId, v as markDispatchRunning, w as readAutomationExecutionStatusHours, x as readAutomationExecutionDays, y as emptyAutomationRunWindows } from "./task-runner-DrC1UgCK.js";
19
+ import { i as resolveAgentInvocationId, o as AgentRunError, s as executeTurn, t as createAgentInvocationWorker } from "./work-CP3L3bNf.js";
20
+ import { n as getTurnLifecycle, t as ConversationTurnLifecycleService } from "./turn-lifecycle-_YDXUFqj.js";
21
+ import { a as persistThreadState, c as configValueSchema, i as persistThreadRuntimeState, n as getPersistedSandboxState, o as persistThreadStateById, r as getPersistedThreadState, s as coerceThreadConversationState, t as getLocationConfigurationService } from "./thread-state-BIXM2uhZ.js";
22
+ import { a as getPausedTurnRequest, c as getTurnAuthorization, i as createPausedTurns, n as deleteWebAuthorization, s as wakePausedTurn, t as createWebAuthorization } from "./web-authorization-COF8MUa5.js";
23
+ import { n as resolveTurnSessionRouting } from "./turn-session-routing-DYxwlqQl.js";
24
+ import { t as bindSpawnAgent } from "./spawn-DrH6CP9W.js";
25
+ import { a as persistAuthPauseTurnState, c as getTurnUserSlackMessageTs, d as loadPendingMessageCards, i as completeAuthPauseTurn, l as buildDeliveredTurnStatePatch, n as getAgentTurnDiagnosticsAttributes, o as getTurnUserMessage, r as requireTurnFailureEventId, s as getTurnUserReplyAttachmentContext, t as finalizeFailedTurnReplyWithEvent, u as getInterruptionMarker } from "./turn-failure-response-9Ql2NYKh.js";
26
+ import { r as storeInputImages } from "./images-owPAu3eq.js";
27
27
  import { z } from "zod";
28
28
  import { createHash } from "node:crypto";
29
29
  import { and, desc, eq, inArray, lt, notInArray, or, sql } from "drizzle-orm";
@@ -388,6 +388,11 @@ function renderSlackAutomationCard(card) {
388
388
  }
389
389
  //#endregion
390
390
  //#region src/chat/slack/object-card.ts
391
+ function descriptionPreview(value) {
392
+ const text = value?.replace(/\r\n/g, "\n").trim() ?? "";
393
+ const preview = text.split("\n").slice(0, 6).join("\n").slice(0, 500);
394
+ return preview.length < text.length ? `${preview.slice(0, 499).trimEnd()}…` : preview;
395
+ }
391
396
  /** Render verified annotation facts as a native Task or Item preview. */
392
397
  function renderSlackObjectCard(card, conversationId) {
393
398
  if (card.objectType === "automation" && card.plugin === "junior") return renderSlackAutomationCard({
@@ -403,11 +408,13 @@ function renderSlackObjectCard(card, conversationId) {
403
408
  const iconUrl = getDashboardObjectIconLink(presentation.icon);
404
409
  const title = card.title.slice(0, 160);
405
410
  const facts = objectFactFields(card.facts);
411
+ const description = descriptionPreview(card.description);
406
412
  const text = [
407
413
  escapeSlackMrkdwnText(type),
408
414
  card.url ? formatSlackLink(card.url, title) : escapeSlackMrkdwnText(title),
409
415
  escapeSlackMrkdwnText(card.label),
410
416
  card.status ? escapeSlackMrkdwnText(card.status) : null,
417
+ description ? escapeSlackMrkdwnText(description) : null,
411
418
  card.warning ? escapeSlackMrkdwnText(`Needs attention: ${card.warning}`) : null,
412
419
  ...facts.map((field) => escapeSlackMrkdwnText(`${field.label}: ${field.value}`))
413
420
  ].filter(Boolean).join("\n");
@@ -426,15 +433,26 @@ function renderSlackObjectCard(card, conversationId) {
426
433
  } : void 0,
427
434
  product_name: card.plugin
428
435
  };
429
- const customFields = [...facts.map((field) => ({
430
- ...field,
431
- type: "string"
432
- })), ...card.warning ? [{
433
- key: "warning",
434
- label: "Needs attention",
435
- type: "string",
436
- value: card.warning
437
- }] : []];
436
+ const customFields = [
437
+ ...description ? [{
438
+ key: "description",
439
+ label: "Description",
440
+ type: "string",
441
+ value: description,
442
+ long: true,
443
+ format: "markdown"
444
+ }] : [],
445
+ ...facts.map((field) => ({
446
+ ...field,
447
+ type: "string"
448
+ })),
449
+ ...card.warning ? [{
450
+ key: "warning",
451
+ label: "Needs attention",
452
+ type: "string",
453
+ value: card.warning
454
+ }] : []
455
+ ];
438
456
  return {
439
457
  text,
440
458
  entity: {