@sentry/junior 0.71.3 → 0.73.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 (103) hide show
  1. package/bin/junior.mjs +22 -10
  2. package/dist/api-reference.d.ts +2 -0
  3. package/dist/app.d.ts +12 -3
  4. package/dist/app.js +2522 -15560
  5. package/dist/chat/agent-dispatch/heartbeat.d.ts +0 -6
  6. package/dist/chat/agent-dispatch/runner.d.ts +2 -0
  7. package/dist/chat/agent-dispatch/store.d.ts +2 -2
  8. package/dist/chat/agent-dispatch/types.d.ts +6 -3
  9. package/dist/chat/agent-dispatch/validation.d.ts +2 -3
  10. package/dist/chat/app/production.d.ts +8 -1
  11. package/dist/chat/app/services.d.ts +7 -0
  12. package/dist/chat/destination.d.ts +3 -1
  13. package/dist/chat/logging.d.ts +3 -0
  14. package/dist/chat/mcp/errors.d.ts +3 -0
  15. package/dist/chat/mcp/tool-manager.d.ts +5 -1
  16. package/dist/chat/oauth-flow.d.ts +1 -1
  17. package/dist/chat/plugins/agent-hooks.d.ts +3 -2
  18. package/dist/chat/plugins/registry.d.ts +2 -0
  19. package/dist/chat/plugins/types.d.ts +2 -0
  20. package/dist/chat/prompt.d.ts +4 -1
  21. package/dist/chat/requester.d.ts +67 -0
  22. package/dist/chat/respond.d.ts +8 -8
  23. package/dist/chat/runtime/agent-continue-runner.d.ts +25 -0
  24. package/dist/chat/runtime/reply-executor.d.ts +7 -5
  25. package/dist/chat/runtime/slack-resume.d.ts +3 -3
  26. package/dist/chat/runtime/slack-runtime.d.ts +13 -3
  27. package/dist/chat/runtime/turn.d.ts +17 -3
  28. package/dist/chat/sandbox/egress-credentials.d.ts +5 -2
  29. package/dist/chat/sandbox/egress-policy.d.ts +5 -1
  30. package/dist/chat/sandbox/egress-proxy.d.ts +2 -0
  31. package/dist/chat/sandbox/egress-schemas.d.ts +4 -0
  32. package/dist/chat/sandbox/egress-session.d.ts +3 -1
  33. package/dist/chat/sandbox/egress-tracing.d.ts +7 -0
  34. package/dist/chat/sandbox/sandbox.d.ts +2 -0
  35. package/dist/chat/sandbox/session.d.ts +3 -2
  36. package/dist/chat/services/agent-continue.d.ts +27 -0
  37. package/dist/chat/services/auth-pause-response.d.ts +1 -1
  38. package/dist/chat/services/auth-pause.d.ts +2 -1
  39. package/dist/chat/services/mcp-auth-orchestration.d.ts +1 -1
  40. package/dist/chat/services/message-actor-identity.d.ts +12 -4
  41. package/dist/chat/services/plugin-auth-orchestration.d.ts +9 -8
  42. package/dist/chat/services/turn-result.d.ts +3 -0
  43. package/dist/chat/services/turn-session-record.d.ts +10 -7
  44. package/dist/chat/slack/user.d.ts +4 -4
  45. package/dist/chat/state/adapter.d.ts +2 -0
  46. package/dist/chat/state/conversation-details.d.ts +4 -3
  47. package/dist/chat/state/session-log.d.ts +43 -0
  48. package/dist/chat/state/turn-session.d.ts +7 -10
  49. package/dist/chat/task-execution/slack-work.d.ts +5 -5
  50. package/dist/chat/task-execution/store.d.ts +83 -48
  51. package/dist/chat/task-execution/worker.d.ts +3 -3
  52. package/dist/chat/tools/definition.d.ts +3 -0
  53. package/dist/chat/tools/execution/tool-error-handler.d.ts +2 -1
  54. package/dist/chat/tools/slack/canvas-tools.d.ts +3 -2
  55. package/dist/chat/tools/slack/channel-list-messages.d.ts +2 -2
  56. package/dist/chat/tools/slack/channel-post-message.d.ts +3 -2
  57. package/dist/chat/tools/slack/context.d.ts +15 -2
  58. package/dist/chat/tools/slack/message-add-reaction.d.ts +3 -2
  59. package/dist/chat/tools/slack/thread-read.d.ts +2 -2
  60. package/dist/chat/tools/types.d.ts +20 -23
  61. package/dist/{chunk-BBXYXOJW.js → chunk-3BYAPS6B.js} +48 -529
  62. package/dist/{chunk-UXG6TU2U.js → chunk-7Q5YOUUT.js} +16 -93
  63. package/dist/chunk-AL5T52ZD.js +1119 -0
  64. package/dist/chunk-CYUI7JU5.js +195 -0
  65. package/dist/{chunk-R62YWUNO.js → chunk-DIMX5F3T.js} +10 -28
  66. package/dist/chunk-G3E7SCME.js +28 -0
  67. package/dist/chunk-KVZL5NZS.js +519 -0
  68. package/dist/chunk-M4FLLXXD.js +212 -0
  69. package/dist/chunk-OQSYYOLM.js +12787 -0
  70. package/dist/{chunk-GT67ZWZQ.js → chunk-OR6NQJ5E.js} +5 -3
  71. package/dist/{chunk-B5HKWWQB.js → chunk-RY6AL5C7.js} +8 -6
  72. package/dist/chunk-SJHUF3DP.js +43 -0
  73. package/dist/{chunk-XE2VFQQN.js → chunk-UOTZ3EEQ.js} +1 -1
  74. package/dist/{chunk-HOGQL2H6.js → chunk-UZVHXZ7V.js} +1357 -1486
  75. package/dist/{chunk-76YMBKW7.js → chunk-V4VYUY4A.js} +27 -14
  76. package/dist/{chunk-JS4HURDT.js → chunk-WS2EG3GW.js} +224 -224
  77. package/dist/chunk-ZDA2HYX5.js +275 -0
  78. package/dist/cli/chat.js +205 -0
  79. package/dist/cli/check.js +6 -5
  80. package/dist/cli/run.js +18 -2
  81. package/dist/cli/snapshot-warmup.js +11 -8
  82. package/dist/cli/upgrade.js +599 -0
  83. package/dist/deployment.d.ts +4 -0
  84. package/dist/handlers/agent-dispatch.d.ts +6 -1
  85. package/dist/handlers/mcp-oauth-callback.d.ts +6 -1
  86. package/dist/handlers/oauth-callback.d.ts +6 -1
  87. package/dist/handlers/sandbox-egress-proxy.d.ts +2 -0
  88. package/dist/handlers/webhooks.d.ts +4 -2
  89. package/dist/instrumentation.js +17 -2
  90. package/dist/nitro.d.ts +1 -1
  91. package/dist/nitro.js +10 -10
  92. package/dist/plugins.d.ts +1 -1
  93. package/dist/reporting/conversations.d.ts +116 -0
  94. package/dist/reporting.d.ts +24 -129
  95. package/dist/reporting.js +320 -166
  96. package/dist/runner-LMAM4OGD.js +259 -0
  97. package/package.json +3 -3
  98. package/dist/chat/runtime/timeout-resume-runner.d.ts +0 -19
  99. package/dist/chat/services/requester-identity.d.ts +0 -19
  100. package/dist/chat/services/timeout-resume.d.ts +0 -23
  101. package/dist/chunk-6YY4Q3D4.js +0 -12
  102. package/dist/chunk-Z3YD6NHK.js +0 -12
  103. package/dist/handlers/turn-resume.d.ts +0 -4
@@ -0,0 +1,195 @@
1
+ import {
2
+ isSlackTeamId
3
+ } from "./chunk-3BYAPS6B.js";
4
+
5
+ // src/chat/requester.ts
6
+ import { z } from "zod";
7
+ var SLACK_USER_ID_PATTERN = /^[UW][A-Z0-9]{5,}$/;
8
+ var EMAIL_PATTERN = /^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/;
9
+ var exactStoredStringSchema = z.string().min(1).refine((value) => value === value.trim());
10
+ var storedSlackRequesterSchema = z.object({
11
+ email: exactStoredStringSchema.optional(),
12
+ fullName: exactStoredStringSchema.optional(),
13
+ platform: z.literal("slack").optional(),
14
+ slackUserId: exactStoredStringSchema.optional(),
15
+ slackUserName: exactStoredStringSchema.optional(),
16
+ teamId: exactStoredStringSchema.optional()
17
+ }).strict();
18
+ function clean(value) {
19
+ const trimmed = value?.trim();
20
+ return trimmed ? trimmed : void 0;
21
+ }
22
+ function isSyntheticActorUserId(value) {
23
+ return value.toLowerCase() === "unknown";
24
+ }
25
+ function isSlackUserId(value) {
26
+ return SLACK_USER_ID_PATTERN.test(value);
27
+ }
28
+ function parseSlackTeamId(value) {
29
+ return typeof value === "string" && isSlackTeamId(value) ? value : void 0;
30
+ }
31
+ function cleanRequesterDisplayName(value, userId) {
32
+ const displayName = clean(value);
33
+ if (!displayName) {
34
+ return void 0;
35
+ }
36
+ if (displayName.toLowerCase() === "unknown") {
37
+ return void 0;
38
+ }
39
+ if (userId && displayName === userId) {
40
+ return void 0;
41
+ }
42
+ return isSlackUserId(displayName) ? void 0 : displayName;
43
+ }
44
+ function cleanRequesterEmail(value) {
45
+ const email = clean(value);
46
+ return email && EMAIL_PATTERN.test(email) ? email : void 0;
47
+ }
48
+ function parseActorUserId(value) {
49
+ if (typeof value !== "string" || value.length === 0) {
50
+ return void 0;
51
+ }
52
+ if (value !== value.trim() || isSyntheticActorUserId(value)) {
53
+ return void 0;
54
+ }
55
+ return value;
56
+ }
57
+ function isActorUserId(value) {
58
+ return parseActorUserId(value) === value;
59
+ }
60
+ function createRequester(input, context) {
61
+ const platform = context.platform ?? input?.platform;
62
+ if (!platform) {
63
+ return void 0;
64
+ }
65
+ const contextUserId = parseActorUserId(context.userId);
66
+ if (context.userId !== void 0 && !contextUserId) {
67
+ return void 0;
68
+ }
69
+ const inputUserId = parseActorUserId(input?.userId);
70
+ if (input?.userId !== void 0 && !inputUserId) {
71
+ return void 0;
72
+ }
73
+ const requesterUserId = contextUserId ?? inputUserId;
74
+ if (!requesterUserId) {
75
+ return void 0;
76
+ }
77
+ const contextTeamId = parseSlackTeamId(context.teamId);
78
+ if (context.teamId !== void 0 && !contextTeamId) {
79
+ return void 0;
80
+ }
81
+ const inputTeamId = parseSlackTeamId(input?.teamId);
82
+ if (input?.teamId !== void 0 && !inputTeamId) {
83
+ return void 0;
84
+ }
85
+ const requesterTeamId = contextTeamId ?? inputTeamId;
86
+ if (platform === "slack" && !requesterTeamId) {
87
+ return void 0;
88
+ }
89
+ const canUseInputProfile = (!contextUserId || !inputUserId || contextUserId === inputUserId) && (platform !== "slack" || !contextTeamId || !inputTeamId || contextTeamId === inputTeamId);
90
+ const requester = {
91
+ ...canUseInputProfile && cleanRequesterEmail(input?.email) ? { email: cleanRequesterEmail(input?.email) } : {},
92
+ ...canUseInputProfile && cleanRequesterDisplayName(input?.fullName, requesterUserId) ? {
93
+ fullName: cleanRequesterDisplayName(input?.fullName, requesterUserId)
94
+ } : {},
95
+ platform,
96
+ userId: requesterUserId,
97
+ ...canUseInputProfile && cleanRequesterDisplayName(input?.userName, requesterUserId) ? {
98
+ userName: cleanRequesterDisplayName(input?.userName, requesterUserId)
99
+ } : {}
100
+ };
101
+ if (platform === "slack") {
102
+ return { ...requester, platform, teamId: requesterTeamId };
103
+ }
104
+ return { ...requester, platform };
105
+ }
106
+ function createSlackRequester(teamId, userId, profile) {
107
+ const actorUserId = parseActorUserId(userId);
108
+ const actorTeamId = parseSlackTeamId(teamId);
109
+ if (!actorTeamId || !actorUserId) {
110
+ throw new Error("Slack requester requires team and user ids");
111
+ }
112
+ const requester = createRequester(
113
+ {
114
+ email: profile?.email,
115
+ fullName: profile?.fullName,
116
+ platform: "slack",
117
+ teamId: actorTeamId,
118
+ userId: actorUserId,
119
+ userName: profile?.userName
120
+ },
121
+ { teamId: actorTeamId, userId: actorUserId }
122
+ );
123
+ if (!requester || requester.platform !== "slack") {
124
+ throw new Error("Slack requester requires team and user ids");
125
+ }
126
+ return requester;
127
+ }
128
+ function parseStoredSlackRequester(value) {
129
+ const parsed = storedSlackRequesterSchema.safeParse(value);
130
+ if (!parsed.success) {
131
+ return void 0;
132
+ }
133
+ if (parsed.data.slackUserId !== void 0 && !parseActorUserId(parsed.data.slackUserId)) {
134
+ return void 0;
135
+ }
136
+ if (parsed.data.teamId !== void 0 && !parseSlackTeamId(parsed.data.teamId)) {
137
+ return void 0;
138
+ }
139
+ if ((parsed.data.platform !== void 0 || parsed.data.teamId !== void 0) && (!parsed.data.platform || !parsed.data.teamId)) {
140
+ return void 0;
141
+ }
142
+ return parsed.data;
143
+ }
144
+ function toStoredSlackRequester(requester) {
145
+ return {
146
+ ...requester.email ? { email: requester.email } : {},
147
+ ...requester.fullName ? { fullName: requester.fullName } : {},
148
+ platform: requester.platform,
149
+ slackUserId: requester.userId,
150
+ ...requester.userName ? { slackUserName: requester.userName } : {},
151
+ teamId: requester.teamId
152
+ };
153
+ }
154
+ function createRequesterFromStoredSlackRequester(args) {
155
+ const actorUserId = parseActorUserId(args.userId);
156
+ const actorTeamId = parseSlackTeamId(args.teamId);
157
+ if (!actorTeamId || !actorUserId) {
158
+ throw new Error("Slack requester requires team and user ids");
159
+ }
160
+ const storedUserId = args.requester?.slackUserId === void 0 ? void 0 : parseActorUserId(args.requester.slackUserId);
161
+ const storedTeamId = args.requester?.teamId === void 0 ? void 0 : parseSlackTeamId(args.requester.teamId);
162
+ if (args.requester?.slackUserId !== void 0 && !storedUserId) {
163
+ throw new Error("Stored Slack requester requires a user id");
164
+ }
165
+ if (args.requester?.teamId !== void 0 && !storedTeamId) {
166
+ throw new Error("Stored Slack requester requires a team id");
167
+ }
168
+ if (storedUserId && storedUserId !== actorUserId) {
169
+ throw new Error("Stored Slack requester must match actor user id");
170
+ }
171
+ if (storedTeamId && storedTeamId !== actorTeamId) {
172
+ throw new Error("Stored Slack requester must match actor team id");
173
+ }
174
+ const canUseStoredProfile = Boolean(storedUserId);
175
+ return createSlackRequester(
176
+ actorTeamId,
177
+ actorUserId,
178
+ canUseStoredProfile ? {
179
+ email: args.requester?.email,
180
+ fullName: args.requester?.fullName,
181
+ userName: args.requester?.slackUserName
182
+ } : void 0
183
+ );
184
+ }
185
+
186
+ export {
187
+ storedSlackRequesterSchema,
188
+ parseActorUserId,
189
+ isActorUserId,
190
+ createRequester,
191
+ createSlackRequester,
192
+ parseStoredSlackRequester,
193
+ toStoredSlackRequester,
194
+ createRequesterFromStoredSlackRequester
195
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getChatConfig
3
- } from "./chunk-JS4HURDT.js";
3
+ } from "./chunk-WS2EG3GW.js";
4
4
 
5
5
  // src/chat/state/adapter.ts
6
6
  import { createMemoryState } from "@chat-adapter/state-memory";
@@ -212,6 +212,13 @@ async function getConnectedStateContext() {
212
212
  stateAdapter: adapter
213
213
  };
214
214
  }
215
+ async function getDefaultRedisStateAdapterFor(adapter) {
216
+ if (adapter !== stateAdapter) {
217
+ return void 0;
218
+ }
219
+ const context = await getConnectedStateContext();
220
+ return context.stateAdapter === adapter ? context.redisStateAdapter : void 0;
221
+ }
215
222
  function getStateAdapter() {
216
223
  if (!stateAdapter) {
217
224
  stateAdapter = createStateAdapter();
@@ -230,35 +237,10 @@ async function disconnectStateAdapter() {
230
237
  }
231
238
  }
232
239
 
233
- // src/chat/sandbox/paths.ts
234
- function normalizeWorkspaceRoot(input) {
235
- const candidate = (input ?? "").trim();
236
- if (!candidate) {
237
- return "/vercel/sandbox";
238
- }
239
- const normalized = candidate.replace(/\/+$/, "");
240
- return normalized.startsWith("/") ? normalized : `/${normalized}`;
241
- }
242
- var SANDBOX_WORKSPACE_ROOT = normalizeWorkspaceRoot(
243
- process.env.VERCEL_SANDBOX_WORKSPACE_DIR
244
- );
245
- var SANDBOX_SKILLS_ROOT = `${SANDBOX_WORKSPACE_ROOT}/skills`;
246
- var SANDBOX_DATA_ROOT = `${SANDBOX_WORKSPACE_ROOT}/data`;
247
- function sandboxSkillDir(skillName) {
248
- return `${SANDBOX_SKILLS_ROOT}/${skillName}`;
249
- }
250
- function sandboxSkillFile(skillName) {
251
- return `${sandboxSkillDir(skillName)}/SKILL.md`;
252
- }
253
-
254
240
  export {
255
241
  ACTIVE_LOCK_TTL_MS,
256
242
  getConnectedStateContext,
243
+ getDefaultRedisStateAdapterFor,
257
244
  getStateAdapter,
258
- disconnectStateAdapter,
259
- SANDBOX_WORKSPACE_ROOT,
260
- SANDBOX_SKILLS_ROOT,
261
- SANDBOX_DATA_ROOT,
262
- sandboxSkillDir,
263
- sandboxSkillFile
245
+ disconnectStateAdapter
264
246
  };
@@ -0,0 +1,28 @@
1
+ // src/chat/sandbox/paths.ts
2
+ function normalizeWorkspaceRoot(input) {
3
+ const candidate = (input ?? "").trim();
4
+ if (!candidate) {
5
+ return "/vercel/sandbox";
6
+ }
7
+ const normalized = candidate.replace(/\/+$/, "");
8
+ return normalized.startsWith("/") ? normalized : `/${normalized}`;
9
+ }
10
+ var SANDBOX_WORKSPACE_ROOT = normalizeWorkspaceRoot(
11
+ process.env.VERCEL_SANDBOX_WORKSPACE_DIR
12
+ );
13
+ var SANDBOX_SKILLS_ROOT = `${SANDBOX_WORKSPACE_ROOT}/skills`;
14
+ var SANDBOX_DATA_ROOT = `${SANDBOX_WORKSPACE_ROOT}/data`;
15
+ function sandboxSkillDir(skillName) {
16
+ return `${SANDBOX_SKILLS_ROOT}/${skillName}`;
17
+ }
18
+ function sandboxSkillFile(skillName) {
19
+ return `${sandboxSkillDir(skillName)}/SKILL.md`;
20
+ }
21
+
22
+ export {
23
+ SANDBOX_WORKSPACE_ROOT,
24
+ SANDBOX_SKILLS_ROOT,
25
+ SANDBOX_DATA_ROOT,
26
+ sandboxSkillDir,
27
+ sandboxSkillFile
28
+ };