@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.
- package/bin/junior.mjs +22 -10
- package/dist/api-reference.d.ts +2 -0
- package/dist/app.d.ts +12 -3
- package/dist/app.js +2522 -15560
- package/dist/chat/agent-dispatch/heartbeat.d.ts +0 -6
- package/dist/chat/agent-dispatch/runner.d.ts +2 -0
- package/dist/chat/agent-dispatch/store.d.ts +2 -2
- package/dist/chat/agent-dispatch/types.d.ts +6 -3
- package/dist/chat/agent-dispatch/validation.d.ts +2 -3
- package/dist/chat/app/production.d.ts +8 -1
- package/dist/chat/app/services.d.ts +7 -0
- package/dist/chat/destination.d.ts +3 -1
- package/dist/chat/logging.d.ts +3 -0
- package/dist/chat/mcp/errors.d.ts +3 -0
- package/dist/chat/mcp/tool-manager.d.ts +5 -1
- package/dist/chat/oauth-flow.d.ts +1 -1
- package/dist/chat/plugins/agent-hooks.d.ts +3 -2
- package/dist/chat/plugins/registry.d.ts +2 -0
- package/dist/chat/plugins/types.d.ts +2 -0
- package/dist/chat/prompt.d.ts +4 -1
- package/dist/chat/requester.d.ts +67 -0
- package/dist/chat/respond.d.ts +8 -8
- package/dist/chat/runtime/agent-continue-runner.d.ts +25 -0
- package/dist/chat/runtime/reply-executor.d.ts +7 -5
- package/dist/chat/runtime/slack-resume.d.ts +3 -3
- package/dist/chat/runtime/slack-runtime.d.ts +13 -3
- package/dist/chat/runtime/turn.d.ts +17 -3
- package/dist/chat/sandbox/egress-credentials.d.ts +5 -2
- package/dist/chat/sandbox/egress-policy.d.ts +5 -1
- package/dist/chat/sandbox/egress-proxy.d.ts +2 -0
- package/dist/chat/sandbox/egress-schemas.d.ts +4 -0
- package/dist/chat/sandbox/egress-session.d.ts +3 -1
- package/dist/chat/sandbox/egress-tracing.d.ts +7 -0
- package/dist/chat/sandbox/sandbox.d.ts +2 -0
- package/dist/chat/sandbox/session.d.ts +3 -2
- package/dist/chat/services/agent-continue.d.ts +27 -0
- package/dist/chat/services/auth-pause-response.d.ts +1 -1
- package/dist/chat/services/auth-pause.d.ts +2 -1
- package/dist/chat/services/mcp-auth-orchestration.d.ts +1 -1
- package/dist/chat/services/message-actor-identity.d.ts +12 -4
- package/dist/chat/services/plugin-auth-orchestration.d.ts +9 -8
- package/dist/chat/services/turn-result.d.ts +3 -0
- package/dist/chat/services/turn-session-record.d.ts +10 -7
- package/dist/chat/slack/user.d.ts +4 -4
- package/dist/chat/state/adapter.d.ts +2 -0
- package/dist/chat/state/conversation-details.d.ts +4 -3
- package/dist/chat/state/session-log.d.ts +43 -0
- package/dist/chat/state/turn-session.d.ts +7 -10
- package/dist/chat/task-execution/slack-work.d.ts +5 -5
- package/dist/chat/task-execution/store.d.ts +83 -48
- package/dist/chat/task-execution/worker.d.ts +3 -3
- package/dist/chat/tools/definition.d.ts +3 -0
- package/dist/chat/tools/execution/tool-error-handler.d.ts +2 -1
- package/dist/chat/tools/slack/canvas-tools.d.ts +3 -2
- package/dist/chat/tools/slack/channel-list-messages.d.ts +2 -2
- package/dist/chat/tools/slack/channel-post-message.d.ts +3 -2
- package/dist/chat/tools/slack/context.d.ts +15 -2
- package/dist/chat/tools/slack/message-add-reaction.d.ts +3 -2
- package/dist/chat/tools/slack/thread-read.d.ts +2 -2
- package/dist/chat/tools/types.d.ts +20 -23
- package/dist/{chunk-BBXYXOJW.js → chunk-3BYAPS6B.js} +48 -529
- package/dist/{chunk-UXG6TU2U.js → chunk-7Q5YOUUT.js} +16 -93
- package/dist/chunk-AL5T52ZD.js +1119 -0
- package/dist/chunk-CYUI7JU5.js +195 -0
- package/dist/{chunk-R62YWUNO.js → chunk-DIMX5F3T.js} +10 -28
- package/dist/chunk-G3E7SCME.js +28 -0
- package/dist/chunk-KVZL5NZS.js +519 -0
- package/dist/chunk-M4FLLXXD.js +212 -0
- package/dist/chunk-OQSYYOLM.js +12787 -0
- package/dist/{chunk-GT67ZWZQ.js → chunk-OR6NQJ5E.js} +5 -3
- package/dist/{chunk-B5HKWWQB.js → chunk-RY6AL5C7.js} +8 -6
- package/dist/chunk-SJHUF3DP.js +43 -0
- package/dist/{chunk-XE2VFQQN.js → chunk-UOTZ3EEQ.js} +1 -1
- package/dist/{chunk-HOGQL2H6.js → chunk-UZVHXZ7V.js} +1357 -1486
- package/dist/{chunk-76YMBKW7.js → chunk-V4VYUY4A.js} +27 -14
- package/dist/{chunk-JS4HURDT.js → chunk-WS2EG3GW.js} +224 -224
- package/dist/chunk-ZDA2HYX5.js +275 -0
- package/dist/cli/chat.js +205 -0
- package/dist/cli/check.js +6 -5
- package/dist/cli/run.js +18 -2
- package/dist/cli/snapshot-warmup.js +11 -8
- package/dist/cli/upgrade.js +599 -0
- package/dist/deployment.d.ts +4 -0
- package/dist/handlers/agent-dispatch.d.ts +6 -1
- package/dist/handlers/mcp-oauth-callback.d.ts +6 -1
- package/dist/handlers/oauth-callback.d.ts +6 -1
- package/dist/handlers/sandbox-egress-proxy.d.ts +2 -0
- package/dist/handlers/webhooks.d.ts +4 -2
- package/dist/instrumentation.js +17 -2
- package/dist/nitro.d.ts +1 -1
- package/dist/nitro.js +10 -10
- package/dist/plugins.d.ts +1 -1
- package/dist/reporting/conversations.d.ts +116 -0
- package/dist/reporting.d.ts +24 -129
- package/dist/reporting.js +320 -166
- package/dist/runner-LMAM4OGD.js +259 -0
- package/package.json +3 -3
- package/dist/chat/runtime/timeout-resume-runner.d.ts +0 -19
- package/dist/chat/services/requester-identity.d.ts +0 -19
- package/dist/chat/services/timeout-resume.d.ts +0 -23
- package/dist/chunk-6YY4Q3D4.js +0 -12
- package/dist/chunk-Z3YD6NHK.js +0 -12
- 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-
|
|
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
|
+
};
|