@sentry/junior 0.203.0 → 0.205.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 (174) hide show
  1. package/dist/agent-D4nu8MQV.js +17521 -0
  2. package/dist/agent-hooks-DXHpTJ4m.js +4042 -0
  3. package/dist/agent-runner-C04colea.js +678 -0
  4. package/dist/api/schema.d.ts +2736 -2639
  5. package/dist/api/schema.js +4 -169
  6. package/dist/api.d.ts +23 -17
  7. package/dist/api.js +3881 -5326
  8. package/dist/app-Cb776lL8.d.ts +247 -0
  9. package/dist/app.d.ts +4 -520
  10. package/dist/app.js +9524 -11875
  11. package/dist/auth-pause-state-C2P3guS1.js +168 -0
  12. package/dist/catalog-runtime-CXw3asJD.js +7 -0
  13. package/dist/checkpoint-CrViJ8Ps.js +2450 -0
  14. package/dist/cli/chat.d.ts +20 -0
  15. package/dist/cli/chat.js +229 -336
  16. package/dist/cli/check.d.ts +8 -0
  17. package/dist/cli/check.js +513 -806
  18. package/dist/cli/env.d.ts +13 -0
  19. package/dist/cli/env.js +63 -12
  20. package/dist/cli/init.d.ts +3 -0
  21. package/dist/cli/init.js +90 -159
  22. package/dist/cli/main.d.ts +6 -0
  23. package/dist/cli/main.js +43 -64
  24. package/dist/cli/plugins.d.ts +13 -0
  25. package/dist/cli/plugins.js +148 -227
  26. package/dist/cli/run.d.ts +16 -0
  27. package/dist/cli/run.js +52 -8
  28. package/dist/cli/snapshot-create.d.ts +4 -0
  29. package/dist/cli/snapshot-create.js +71 -125
  30. package/dist/cli/upgrade.d.ts +15 -0
  31. package/dist/cli/upgrade.js +232 -335
  32. package/dist/config-BOtJQ7Pc.js +941 -0
  33. package/dist/context-B45_WqVX.js +298 -0
  34. package/dist/conversation-privacy-BZRA6Pes.js +182 -0
  35. package/dist/conversation-work-C6y3T5Hx.js +51 -0
  36. package/dist/credential-sync-Bep34IB_.js +2661 -0
  37. package/dist/db-BeyXKJOI.d.ts +5 -0
  38. package/dist/destinations-BeBiJeEM.js +29 -0
  39. package/dist/execution-stats-B6lgWxCK.js +373 -0
  40. package/dist/executor-BlUhFL7_.js +721 -0
  41. package/dist/experimental-CIXf7Uye.js +46 -0
  42. package/dist/history-ClE4toxe.d.ts +32 -0
  43. package/dist/history-CqTuSAdI.js +441 -0
  44. package/dist/instrumentation.d.ts +3 -3
  45. package/dist/instrumentation.js +130 -176
  46. package/dist/job-queue-DLMqIK74.js +63 -0
  47. package/dist/logging-BMJzdDlP.js +1210 -0
  48. package/dist/model-profile-CZmVoGdX.js +49 -0
  49. package/dist/nitro.d.ts +31 -36
  50. package/dist/nitro.js +275 -456
  51. package/dist/oauth-callback-server-WwG5_Zgm.js +130 -0
  52. package/dist/oauth-relay-CdCnu80W.js +62 -0
  53. package/dist/package-discovery-7a9YqLhE.js +455 -0
  54. package/dist/pending-auth-CUbXq06G.js +185 -0
  55. package/dist/plugin-module-BKGOXca2.js +81 -0
  56. package/dist/plugins-BI9A1vKA.d.ts +95 -0
  57. package/dist/plugins-egKWjgue.js +99 -0
  58. package/dist/private-trace-result-BLvBjy_e.js +16 -0
  59. package/dist/profile-T0tXE4zu.js +861 -0
  60. package/dist/registry-BA0__8ai.js +1419 -0
  61. package/dist/reporting-schema-DosTN__Q.js +105 -0
  62. package/dist/resolve-bvD1ORdv.js +546 -0
  63. package/dist/rolldown-runtime-B4FMCO8f.js +28 -0
  64. package/dist/runner-BXYxfIUL.js +392 -0
  65. package/dist/sandbox-egress-signals-ngEPjSEW.js +46 -0
  66. package/dist/schema-Rn8-XEaN.js +1140 -0
  67. package/dist/sentry-CD3SdJl-.js +26 -0
  68. package/dist/skills-DJOlYdBs.js +316 -0
  69. package/dist/spawn-h0R1bTEo.js +29 -0
  70. package/dist/stats-3YZn-Swi.js +2648 -0
  71. package/dist/store-C5qxF2ac.d.ts +208 -0
  72. package/dist/task-queue-CoXwd2eq.js +136 -0
  73. package/dist/task-runner-B2_mJZj0.js +639 -0
  74. package/dist/thread-state-CqZ1m-es.js +431 -0
  75. package/dist/turn-execution-fI6PZ0iI.js +47 -0
  76. package/dist/turn-lifecycle-CcnwrOcp.js +54 -0
  77. package/dist/usage-B5SfMb3H.js +296 -0
  78. package/dist/usage-schema-CKaDkH_j.js +20 -0
  79. package/dist/validation-DfWcvhuS.js +40 -0
  80. package/dist/vercel-queue-DIkVcfK4.js +167 -0
  81. package/dist/vercel.d.ts +6 -6
  82. package/dist/vercel.js +14 -6
  83. package/dist/version-CnXZ614E.d.ts +5 -0
  84. package/dist/version-oD-oPrbO.js +8 -0
  85. package/dist/version.d.ts +2 -4
  86. package/dist/version.js +2 -6
  87. package/dist/web-authorization-Crbzlmzo.js +76 -0
  88. package/dist/web-input-BOuq3oKK.js +494 -0
  89. package/dist/work-B91LQKHr.js +509 -0
  90. package/dist/worker-BcRRTe6k.js +625 -0
  91. package/package.json +9 -9
  92. package/dist/agent-hooks-GB2VPTNA.js +0 -51
  93. package/dist/catalog-runtime-UBLIWD3O.js +0 -14
  94. package/dist/chunk-2LYHWMR4.js +0 -46
  95. package/dist/chunk-352OWAZH.js +0 -320
  96. package/dist/chunk-3Y47VMHV.js +0 -6
  97. package/dist/chunk-3YJSKOWF.js +0 -164
  98. package/dist/chunk-4KSSKTQ5.js +0 -229
  99. package/dist/chunk-4UO6FK4G.js +0 -64
  100. package/dist/chunk-5AHX53NQ.js +0 -717
  101. package/dist/chunk-5J3E5FWA.js +0 -700
  102. package/dist/chunk-5PDAG6O3.js +0 -206
  103. package/dist/chunk-6Y5B5PEX.js +0 -80
  104. package/dist/chunk-7GWQ5S5R.js +0 -2086
  105. package/dist/chunk-7H2VZTWN.js +0 -103
  106. package/dist/chunk-7NL7T6VU.js +0 -406
  107. package/dist/chunk-A5L27LE4.js +0 -387
  108. package/dist/chunk-ADIAWL34.js +0 -81
  109. package/dist/chunk-ASTEMBKJ.js +0 -519
  110. package/dist/chunk-CEMMLV5L.js +0 -98
  111. package/dist/chunk-CM5HNV2W.js +0 -131
  112. package/dist/chunk-CRTRBBRI.js +0 -105
  113. package/dist/chunk-DA2KGZZI.js +0 -13
  114. package/dist/chunk-DIB4GX3G.js +0 -8
  115. package/dist/chunk-DKIJ2RP5.js +0 -68
  116. package/dist/chunk-DWPN6SCH.js +0 -172
  117. package/dist/chunk-EDKUFGPL.js +0 -64
  118. package/dist/chunk-ENY6SKIU.js +0 -1228
  119. package/dist/chunk-F4MGCZOX.js +0 -2943
  120. package/dist/chunk-FA6POGLH.js +0 -70
  121. package/dist/chunk-FSUR7GTG.js +0 -20475
  122. package/dist/chunk-GKEOHJL5.js +0 -1856
  123. package/dist/chunk-GMCB6W5Y.js +0 -333
  124. package/dist/chunk-IE2VPG7O.js +0 -1135
  125. package/dist/chunk-IZ5B5IHQ.js +0 -3656
  126. package/dist/chunk-JAL3CH4G.js +0 -27
  127. package/dist/chunk-KIIEUXD3.js +0 -1764
  128. package/dist/chunk-KXU4NIL7.js +0 -692
  129. package/dist/chunk-MTM5IFCY.js +0 -1190
  130. package/dist/chunk-N7TMSOZH.js +0 -235
  131. package/dist/chunk-NCEBK6PH.js +0 -36
  132. package/dist/chunk-NHJU2ZAL.js +0 -56
  133. package/dist/chunk-P6KTRNVC.js +0 -321
  134. package/dist/chunk-PDO5BLNM.js +0 -22
  135. package/dist/chunk-PDRNLLFT.js +0 -3295
  136. package/dist/chunk-PEQXYSSE.js +0 -45
  137. package/dist/chunk-PKEX2AQX.js +0 -198
  138. package/dist/chunk-PSJCGIGO.js +0 -1163
  139. package/dist/chunk-PZUSUL55.js +0 -506
  140. package/dist/chunk-R45M4TUS.js +0 -37
  141. package/dist/chunk-RC745GGZ.js +0 -122
  142. package/dist/chunk-SP3QKZXJ.js +0 -820
  143. package/dist/chunk-TXKUKMVO.js +0 -417
  144. package/dist/chunk-UE4GPWSD.js +0 -931
  145. package/dist/chunk-UIE3R5XU.js +0 -17
  146. package/dist/chunk-UXPG6ZIN.js +0 -84
  147. package/dist/chunk-VFUK3X5B.js +0 -50
  148. package/dist/chunk-VNMJWREK.js +0 -787
  149. package/dist/chunk-VZ7CSOX2.js +0 -706
  150. package/dist/chunk-WCNQJKFT.js +0 -10
  151. package/dist/chunk-WDZR3QQM.js +0 -135
  152. package/dist/chunk-WLYVJCHV.js +0 -1433
  153. package/dist/chunk-WS7NAFTM.js +0 -1520
  154. package/dist/chunk-X6GDDWQH.js +0 -60
  155. package/dist/chunk-XPDEYNQI.js +0 -102
  156. package/dist/chunk-XRW44VGM.js +0 -58
  157. package/dist/chunk-Y2CM7HXH.js +0 -111
  158. package/dist/chunk-Y7X25LFY.js +0 -15
  159. package/dist/conversation-work-VIOQ5ZF3.js +0 -54
  160. package/dist/db-NGDJV7YH.js +0 -26
  161. package/dist/discovery-DWVDM7UK.js +0 -44
  162. package/dist/experimental-P5FZM4CU.js +0 -12
  163. package/dist/oauth-callback-server-YFY7YEGK.js +0 -243
  164. package/dist/oauth-relay-5XPVRPYB.js +0 -8
  165. package/dist/plugins-YTYJMMJF.js +0 -14
  166. package/dist/runner-ORTNSB2Q.js +0 -522
  167. package/dist/sandbox-egress-signals-FIL7EGPR.js +0 -73
  168. package/dist/sentry-MB3NL3IR.js +0 -42
  169. package/dist/skills-H376WQOH.js +0 -27
  170. package/dist/spawn-T43WHLOS.js +0 -42
  171. package/dist/task-runner-LBZWF32V.js +0 -36
  172. package/dist/validation-REJLRKI6.js +0 -17
  173. package/dist/work-3KJ3RE76.js +0 -51
  174. package/dist/worker-QFEBU72E.js +0 -24
@@ -1,235 +0,0 @@
1
- // src/chat/slack/timestamp.ts
2
- import { z } from "zod";
3
- var slackMessageTsSchema = z.string().trim().regex(/^\d+(?:\.\d+)?$/).brand();
4
- function parseSlackMessageTs(value) {
5
- const parsed = slackMessageTsSchema.safeParse(value);
6
- return parsed.success ? parsed.data : void 0;
7
- }
8
-
9
- // src/chat/slack/ids.ts
10
- import { z as z2 } from "zod";
11
- var slackChannelIdSchema = z2.string().regex(/^[CDG][A-Z0-9]+$/).brand();
12
- var slackTeamIdSchema = z2.string().regex(/^T[A-Z0-9]+$/).brand();
13
- var slackUserIdSchema = z2.string().regex(/^[UW][A-Z0-9]+$/).brand();
14
- var SLACK_CHANNEL_MENTION_RE = /^<#([CDG][A-Z0-9]+)(?:\|[^>]*)?>$/;
15
- function slackChannelReferenceCandidate(value) {
16
- const trimmed = value.trim();
17
- if (!trimmed.startsWith("slack:")) {
18
- return trimmed;
19
- }
20
- const parts = trimmed.split(":");
21
- if (parts.length === 2) {
22
- return parts[1]?.trim() ?? "";
23
- }
24
- if (parts.length === 3 && parseSlackMessageTs(parts[2])) {
25
- return parts[1]?.trim() ?? "";
26
- }
27
- return "";
28
- }
29
- function parseSlackChannelId(value) {
30
- if (typeof value !== "string") return void 0;
31
- const parsed = slackChannelIdSchema.safeParse(value.trim());
32
- return parsed.success ? parsed.data : void 0;
33
- }
34
- function parseSlackChannelReferenceId(value) {
35
- if (typeof value !== "string") return void 0;
36
- const trimmed = value.trim();
37
- const mentionMatch = SLACK_CHANNEL_MENTION_RE.exec(trimmed);
38
- if (mentionMatch?.[1]) {
39
- return parseSlackChannelId(mentionMatch[1]);
40
- }
41
- return parseSlackChannelId(slackChannelReferenceCandidate(trimmed));
42
- }
43
- function parseSlackTeamId(value) {
44
- if (typeof value !== "string") return void 0;
45
- const parsed = slackTeamIdSchema.safeParse(value.trim());
46
- return parsed.success ? parsed.data : void 0;
47
- }
48
- function parseSlackUserId(value) {
49
- if (typeof value !== "string") return void 0;
50
- const parsed = slackUserIdSchema.safeParse(value.trim());
51
- return parsed.success ? parsed.data : void 0;
52
- }
53
-
54
- // src/chat/actor.ts
55
- import { z as z3 } from "zod";
56
- import { actorSchema } from "@sentry/junior-plugin-api";
57
- var SLACK_USER_ID_DISPLAY_PATTERN = /^[UW][A-Z0-9]{5,}$/;
58
- var EMAIL_PATTERN = /^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/;
59
- var exactStoredStringSchema = z3.string().min(1).refine((value) => value === value.trim());
60
- var storedSlackActorSchema = z3.object({
61
- email: exactStoredStringSchema.optional(),
62
- fullName: exactStoredStringSchema.optional(),
63
- platform: z3.literal("slack").optional(),
64
- slackUserId: exactStoredStringSchema.optional(),
65
- slackUserName: exactStoredStringSchema.optional(),
66
- teamId: exactStoredStringSchema.optional()
67
- }).strict();
68
- function isUserActor(actor) {
69
- return Boolean(actor && "userId" in actor);
70
- }
71
- function clean(value) {
72
- const trimmed = value?.trim();
73
- return trimmed ? trimmed : void 0;
74
- }
75
- function isSyntheticActorUserId(value) {
76
- return value.toLowerCase() === "unknown";
77
- }
78
- function isSlackUserId(value) {
79
- return SLACK_USER_ID_DISPLAY_PATTERN.test(value);
80
- }
81
- function cleanActorDisplayName(value, userId) {
82
- const displayName = clean(value);
83
- if (!displayName) {
84
- return void 0;
85
- }
86
- if (displayName.toLowerCase() === "unknown") {
87
- return void 0;
88
- }
89
- if (userId && displayName === userId) {
90
- return void 0;
91
- }
92
- return isSlackUserId(displayName) ? void 0 : displayName;
93
- }
94
- function cleanActorEmail(value) {
95
- const email = clean(value);
96
- return email && EMAIL_PATTERN.test(email) ? email : void 0;
97
- }
98
- function parseActorUserId(value) {
99
- if (typeof value !== "string" || value.length === 0) {
100
- return void 0;
101
- }
102
- if (value !== value.trim() || isSyntheticActorUserId(value)) {
103
- return void 0;
104
- }
105
- return value;
106
- }
107
- function isActorUserId(value) {
108
- return parseActorUserId(value) === value;
109
- }
110
- function createActor(input, context) {
111
- const platform = context.platform ?? input?.platform;
112
- if (!platform) {
113
- return void 0;
114
- }
115
- const contextUserId = parseActorUserId(context.userId);
116
- if (context.userId !== void 0 && !contextUserId) {
117
- return void 0;
118
- }
119
- const inputUserId = parseActorUserId(input?.userId);
120
- if (input?.userId !== void 0 && !inputUserId) {
121
- return void 0;
122
- }
123
- const actorUserId = contextUserId ?? inputUserId;
124
- if (!actorUserId) {
125
- return void 0;
126
- }
127
- const contextTeamId = parseSlackTeamId(context.teamId);
128
- if (context.teamId !== void 0 && !contextTeamId) {
129
- return void 0;
130
- }
131
- const inputTeamId = parseSlackTeamId(input?.teamId);
132
- if (input?.teamId !== void 0 && !inputTeamId) {
133
- return void 0;
134
- }
135
- const actorTeamId = contextTeamId ?? inputTeamId;
136
- if (platform === "slack" && !actorTeamId) {
137
- return void 0;
138
- }
139
- const canUseInputProfile = (!contextUserId || !inputUserId || contextUserId === inputUserId) && (platform !== "slack" || !contextTeamId || !inputTeamId || contextTeamId === inputTeamId);
140
- const actor = {
141
- ...canUseInputProfile && cleanActorEmail(input?.email) ? { email: cleanActorEmail(input?.email) } : void 0,
142
- ...canUseInputProfile && cleanActorDisplayName(input?.fullName, actorUserId) ? {
143
- fullName: cleanActorDisplayName(input?.fullName, actorUserId)
144
- } : void 0,
145
- platform,
146
- userId: actorUserId,
147
- ...canUseInputProfile && cleanActorDisplayName(input?.userName, actorUserId) ? {
148
- userName: cleanActorDisplayName(input?.userName, actorUserId)
149
- } : void 0
150
- };
151
- if (platform === "slack") {
152
- return { ...actor, platform, teamId: actorTeamId };
153
- }
154
- return { ...actor, platform };
155
- }
156
- function createSlackActor(teamId, userId, profile) {
157
- const actorUserId = parseActorUserId(userId);
158
- const actorTeamId = parseSlackTeamId(teamId);
159
- if (!actorTeamId || !actorUserId) {
160
- throw new Error("Slack actor requires team and user ids");
161
- }
162
- const actor = createActor(
163
- {
164
- email: profile?.email,
165
- fullName: profile?.fullName,
166
- platform: "slack",
167
- teamId: actorTeamId,
168
- userId: actorUserId,
169
- userName: profile?.userName
170
- },
171
- { teamId: actorTeamId, userId: actorUserId }
172
- );
173
- if (!actor || actor.platform !== "slack") {
174
- throw new Error("Slack actor requires team and user ids");
175
- }
176
- return actor;
177
- }
178
- function parseStoredSlackActor(value) {
179
- const parsed = storedSlackActorSchema.safeParse(value);
180
- if (!parsed.success) {
181
- return void 0;
182
- }
183
- if (parsed.data.slackUserId !== void 0 && !parseActorUserId(parsed.data.slackUserId)) {
184
- return void 0;
185
- }
186
- if (parsed.data.teamId !== void 0 && !parseSlackTeamId(parsed.data.teamId)) {
187
- return void 0;
188
- }
189
- if ((parsed.data.platform !== void 0 || parsed.data.teamId !== void 0) && (!parsed.data.platform || !parsed.data.teamId)) {
190
- return void 0;
191
- }
192
- return parsed.data;
193
- }
194
- function toStoredSlackActor(actor) {
195
- return {
196
- ...actor.email ? { email: actor.email } : void 0,
197
- ...actor.fullName ? { fullName: actor.fullName } : void 0,
198
- platform: actor.platform,
199
- slackUserId: actor.userId,
200
- ...actor.userName ? { slackUserName: actor.userName } : void 0,
201
- teamId: actor.teamId
202
- };
203
- }
204
- function createSlackResumeActor(args) {
205
- if (args.actor) {
206
- if (args.actor.platform !== "slack" || args.actor.teamId !== args.teamId || args.actor.userId !== args.userId) {
207
- throw new Error("Stored Slack actor did not match resume actor");
208
- }
209
- }
210
- const actor = createActor(args.actor, {
211
- platform: "slack",
212
- teamId: args.teamId,
213
- userId: args.userId
214
- });
215
- if (!actor || actor.platform !== "slack") {
216
- throw new Error("Slack actor requires team and user ids");
217
- }
218
- return actor;
219
- }
220
-
221
- export {
222
- parseSlackMessageTs,
223
- parseSlackChannelId,
224
- parseSlackChannelReferenceId,
225
- parseSlackTeamId,
226
- parseSlackUserId,
227
- isUserActor,
228
- parseActorUserId,
229
- isActorUserId,
230
- createActor,
231
- createSlackActor,
232
- parseStoredSlackActor,
233
- toStoredSlackActor,
234
- createSlackResumeActor
235
- };
@@ -1,36 +0,0 @@
1
- import {
2
- FUNCTION_TIMEOUT_BUFFER_SECONDS,
3
- getChatConfig
4
- } from "./chunk-ENY6SKIU.js";
5
-
6
- // src/chat/runtime/request-deadline.ts
7
- import { AsyncLocalStorage } from "async_hooks";
8
- var requestDeadlineStorage = new AsyncLocalStorage();
9
- function createTurnRequestDeadline(startedAtMs) {
10
- const requestBudgetMs = Math.max(
11
- 1,
12
- getChatConfig().functionMaxDurationSeconds * 1e3 - FUNCTION_TIMEOUT_BUFFER_SECONDS * 1e3
13
- );
14
- return {
15
- startedAtMs,
16
- deadlineAtMs: startedAtMs + requestBudgetMs
17
- };
18
- }
19
- function getTurnRequestDeadline() {
20
- return requestDeadlineStorage.getStore();
21
- }
22
- function runWithTurnRequestDeadline(callback, startedAtMs = Date.now()) {
23
- const existingDeadline = requestDeadlineStorage.getStore();
24
- if (existingDeadline) {
25
- return callback();
26
- }
27
- return requestDeadlineStorage.run(
28
- createTurnRequestDeadline(startedAtMs),
29
- callback
30
- );
31
- }
32
-
33
- export {
34
- getTurnRequestDeadline,
35
- runWithTurnRequestDeadline
36
- };
@@ -1,56 +0,0 @@
1
- // src/chat/reasoning-level.ts
2
- import { z } from "zod";
3
- var TURN_REASONING_LEVELS = [
4
- "none",
5
- "low",
6
- "medium",
7
- "high",
8
- "xhigh"
9
- ];
10
- function parseTurnReasoningLevel(value) {
11
- return z.enum(TURN_REASONING_LEVELS).parse(value);
12
- }
13
-
14
- // src/chat/model-profile.ts
15
- import { z as z2 } from "zod";
16
- var modelProfileSchema = z2.string().regex(/^[a-z][a-z0-9_-]*$/);
17
- function formatModelProfile(profile, description) {
18
- const text = description?.trim();
19
- return text ? `"${profile}": ${text}` : `"${profile}"`;
20
- }
21
- function formatModelProfiles(profiles, profileNames) {
22
- return profileNames.map(
23
- (profile) => `- ${formatModelProfile(profile, profiles[profile]?.description)}`
24
- ).join("\n");
25
- }
26
- var ModelProfileNotConfiguredError = class extends Error {
27
- constructor(profile) {
28
- super(`Model profile "${profile}" is not configured`);
29
- this.name = "ModelProfileNotConfiguredError";
30
- }
31
- };
32
- function modelIdForProfile(config, profile) {
33
- return profileConfig(config, profile).modelId;
34
- }
35
- function defaultModelId(config) {
36
- return modelIdForProfile(config, config.defaultProfile);
37
- }
38
- function profileConfig(config, profile) {
39
- const profileConfig2 = Object.hasOwn(config.profiles, profile) ? config.profiles[profile] : void 0;
40
- if (!profileConfig2) {
41
- throw new ModelProfileNotConfiguredError(profile);
42
- }
43
- return profileConfig2;
44
- }
45
-
46
- export {
47
- TURN_REASONING_LEVELS,
48
- parseTurnReasoningLevel,
49
- modelProfileSchema,
50
- formatModelProfile,
51
- formatModelProfiles,
52
- ModelProfileNotConfiguredError,
53
- modelIdForProfile,
54
- defaultModelId,
55
- profileConfig
56
- };
@@ -1,321 +0,0 @@
1
- import {
2
- getChatConfig
3
- } from "./chunk-ENY6SKIU.js";
4
-
5
- // src/chat/state/adapter.ts
6
- import { createMemoryState } from "@chat-adapter/state-memory";
7
- import { createRedisState } from "@chat-adapter/state-redis";
8
-
9
- // src/chat/state/locks.ts
10
- import { setTimeout as sleep } from "timers/promises";
11
- var ACTIVE_LOCK_TTL_MS = 9e4;
12
- var MUTATION_LOCK_TTL_MS = 1e4;
13
- async function acquireActiveLock(state, threadId) {
14
- return await state.acquireLock(threadId, ACTIVE_LOCK_TTL_MS);
15
- }
16
- async function withLock(state, key, run, options = {}) {
17
- const startedAtMs = Date.now();
18
- let lock;
19
- while (true) {
20
- lock = await state.acquireLock(key, options.ttlMs ?? ACTIVE_LOCK_TTL_MS);
21
- if (lock) break;
22
- if (Date.now() - startedAtMs >= (options.waitMs ?? 0)) {
23
- return { acquired: false };
24
- }
25
- await sleep(options.retryMs ?? 25, void 0, { ref: false });
26
- }
27
- const ttlMs = options.ttlMs ?? ACTIVE_LOCK_TTL_MS;
28
- const heartbeat = options.keepAlive ? setInterval(
29
- () => {
30
- void state.extendLock(lock, ttlMs);
31
- },
32
- Math.max(1, Math.floor(ttlMs / 3))
33
- ) : void 0;
34
- heartbeat?.unref();
35
- try {
36
- return { acquired: true, value: await run(lock) };
37
- } finally {
38
- if (heartbeat) clearInterval(heartbeat);
39
- await state.releaseLock(lock);
40
- }
41
- }
42
- async function fenceLock(state, lock, ttlMs = MUTATION_LOCK_TTL_MS) {
43
- if (!await state.extendLock(lock, ttlMs)) {
44
- throw new Error(
45
- `Lock ownership was lost before write for ${lock.threadId}`
46
- );
47
- }
48
- }
49
- async function withActiveLock(state, key, run) {
50
- return await withLock(state, key, run);
51
- }
52
-
53
- // src/chat/state/adapter.ts
54
- var ACTIVE_LOCK_HEARTBEAT_MS = 3e4;
55
- var stateAdapter;
56
- var redisStateAdapter;
57
- function createConnectingStateAdapter(base) {
58
- const connected = async (operation) => {
59
- await base.connect();
60
- return await operation();
61
- };
62
- return {
63
- appendToList: (key, value, options) => connected(() => base.appendToList(key, value, options)),
64
- connect: () => base.connect(),
65
- disconnect: () => base.disconnect(),
66
- subscribe: (threadId) => connected(() => base.subscribe(threadId)),
67
- unsubscribe: (threadId) => connected(() => base.unsubscribe(threadId)),
68
- isSubscribed: (threadId) => connected(() => base.isSubscribed(threadId)),
69
- acquireLock: (threadId, ttlMs) => connected(() => base.acquireLock(threadId, ttlMs)),
70
- releaseLock: (lock) => connected(() => base.releaseLock(lock)),
71
- extendLock: (lock, ttlMs) => connected(() => base.extendLock(lock, ttlMs)),
72
- forceReleaseLock: (threadId) => connected(() => base.forceReleaseLock(threadId)),
73
- enqueue: (threadId, entry, maxSize) => connected(() => base.enqueue(threadId, entry, maxSize)),
74
- dequeue: (threadId) => connected(() => base.dequeue(threadId)),
75
- queueDepth: (threadId) => connected(() => base.queueDepth(threadId)),
76
- get: (key) => connected(() => base.get(key)),
77
- getList: (key) => connected(() => base.getList(key)),
78
- set: (key, value, ttlMs) => connected(() => base.set(key, value, ttlMs)),
79
- setIfNotExists: (key, value, ttlMs) => connected(() => base.setIfNotExists(key, value, ttlMs)),
80
- delete: (key) => connected(() => base.delete(key))
81
- };
82
- }
83
- function createPrefixedStateAdapter(base, prefix) {
84
- const prefixed = (value) => `${prefix}:${value}`;
85
- const unprefixed = (value) => value.startsWith(`${prefix}:`) ? value.slice(prefix.length + 1) : value;
86
- const prefixLock = (lock) => ({
87
- ...lock,
88
- threadId: prefixed(lock.threadId)
89
- });
90
- const unprefixLock = (lock) => ({
91
- ...lock,
92
- threadId: unprefixed(lock.threadId)
93
- });
94
- return {
95
- appendToList: (key, value, options) => base.appendToList(prefixed(key), value, options),
96
- connect: () => base.connect(),
97
- disconnect: () => base.disconnect(),
98
- subscribe: (threadId) => base.subscribe(prefixed(threadId)),
99
- unsubscribe: (threadId) => base.unsubscribe(prefixed(threadId)),
100
- isSubscribed: (threadId) => base.isSubscribed(prefixed(threadId)),
101
- acquireLock: async (threadId, ttlMs) => {
102
- const lock = await base.acquireLock(prefixed(threadId), ttlMs);
103
- return lock ? unprefixLock(lock) : null;
104
- },
105
- releaseLock: (lock) => base.releaseLock(prefixLock(lock)),
106
- extendLock: async (lock, ttlMs) => {
107
- const prefixedLock = prefixLock(lock);
108
- const extended = await base.extendLock(prefixedLock, ttlMs);
109
- if (extended) {
110
- lock.expiresAt = prefixedLock.expiresAt;
111
- }
112
- return extended;
113
- },
114
- forceReleaseLock: (threadId) => base.forceReleaseLock(prefixed(threadId)),
115
- enqueue: (threadId, entry, maxSize) => base.enqueue(prefixed(threadId), entry, maxSize),
116
- dequeue: (threadId) => base.dequeue(prefixed(threadId)),
117
- queueDepth: (threadId) => base.queueDepth(prefixed(threadId)),
118
- get: (key) => base.get(prefixed(key)),
119
- getList: (key) => base.getList(prefixed(key)),
120
- set: (key, value, ttlMs) => base.set(prefixed(key), value, ttlMs),
121
- setIfNotExists: (key, value, ttlMs) => base.setIfNotExists(prefixed(key), value, ttlMs),
122
- delete: (key) => base.delete(prefixed(key))
123
- };
124
- }
125
- function createQueuedStateAdapter(base, options) {
126
- const heartbeats = /* @__PURE__ */ new Map();
127
- const shouldHeartbeatLock = (ttlMs) => ttlMs === ACTIVE_LOCK_TTL_MS;
128
- const heartbeatKey = (lock) => `${lock.threadId}:${lock.token}`;
129
- const stopHeartbeatByKey = (key) => {
130
- const heartbeat = heartbeats.get(key);
131
- if (!heartbeat) {
132
- return;
133
- }
134
- clearInterval(heartbeat.timer);
135
- heartbeats.delete(key);
136
- };
137
- const stopHeartbeat = (lock) => {
138
- stopHeartbeatByKey(heartbeatKey(lock));
139
- };
140
- const stopHeartbeatsForThread = (threadId) => {
141
- for (const [key, heartbeat] of heartbeats) {
142
- if (heartbeat.lock.threadId === threadId) {
143
- stopHeartbeatByKey(key);
144
- }
145
- }
146
- };
147
- const stopAllHeartbeats = () => {
148
- for (const key of heartbeats.keys()) {
149
- stopHeartbeatByKey(key);
150
- }
151
- };
152
- const runHeartbeat = async (key) => {
153
- const heartbeat = heartbeats.get(key);
154
- if (!heartbeat || heartbeat.inFlight) {
155
- return;
156
- }
157
- heartbeat.inFlight = true;
158
- try {
159
- if (Date.now() - heartbeat.startedAtMs >= options.activeLockMaxAgeMs) {
160
- stopHeartbeatByKey(key);
161
- return;
162
- }
163
- const extended = await base.extendLock(heartbeat.lock, heartbeat.ttlMs);
164
- if (!extended) {
165
- stopHeartbeatByKey(key);
166
- return;
167
- }
168
- heartbeat.lock.expiresAt = Date.now() + heartbeat.ttlMs;
169
- } catch {
170
- } finally {
171
- const current = heartbeats.get(key);
172
- if (current === heartbeat) {
173
- current.inFlight = false;
174
- }
175
- }
176
- };
177
- const startOrUpdateHeartbeat = (lock, ttlMs) => {
178
- const key = heartbeatKey(lock);
179
- const existing = heartbeats.get(key);
180
- if (existing) {
181
- existing.ttlMs = ttlMs;
182
- return;
183
- }
184
- const timer = setInterval(() => {
185
- void runHeartbeat(key);
186
- }, ACTIVE_LOCK_HEARTBEAT_MS);
187
- timer.unref?.();
188
- heartbeats.set(key, {
189
- inFlight: false,
190
- lock,
191
- startedAtMs: Date.now(),
192
- timer,
193
- ttlMs
194
- });
195
- };
196
- const acquireLock = async (threadId, ttlMs) => {
197
- const lock = await base.acquireLock(threadId, ttlMs);
198
- if (lock && shouldHeartbeatLock(ttlMs)) {
199
- startOrUpdateHeartbeat(lock, ttlMs);
200
- }
201
- return lock;
202
- };
203
- return {
204
- appendToList: (key, value, options2) => base.appendToList(key, value, options2),
205
- connect: () => base.connect(),
206
- disconnect: async () => {
207
- stopAllHeartbeats();
208
- await base.disconnect();
209
- },
210
- subscribe: (threadId) => base.subscribe(threadId),
211
- unsubscribe: (threadId) => base.unsubscribe(threadId),
212
- isSubscribed: (threadId) => base.isSubscribed(threadId),
213
- acquireLock,
214
- releaseLock: async (lock) => {
215
- stopHeartbeat(lock);
216
- await base.releaseLock(lock);
217
- },
218
- extendLock: async (lock, ttlMs) => {
219
- const extended = await base.extendLock(lock, ttlMs);
220
- if (extended) {
221
- lock.expiresAt = Date.now() + ttlMs;
222
- if (shouldHeartbeatLock(ttlMs)) {
223
- startOrUpdateHeartbeat(lock, ttlMs);
224
- } else {
225
- stopHeartbeat(lock);
226
- }
227
- } else {
228
- stopHeartbeat(lock);
229
- }
230
- return extended;
231
- },
232
- forceReleaseLock: async (threadId) => {
233
- stopHeartbeatsForThread(threadId);
234
- await base.forceReleaseLock(threadId);
235
- },
236
- enqueue: (threadId, entry, maxSize) => base.enqueue(threadId, entry, maxSize),
237
- dequeue: (threadId) => base.dequeue(threadId),
238
- queueDepth: (threadId) => base.queueDepth(threadId),
239
- get: (key) => base.get(key),
240
- getList: (key) => base.getList(key),
241
- set: (key, value, ttlMs) => base.set(key, value, ttlMs),
242
- setIfNotExists: (key, value, ttlMs) => base.setIfNotExists(key, value, ttlMs),
243
- delete: (key) => base.delete(key)
244
- };
245
- }
246
- function withOptionalPrefix(base, prefix) {
247
- return prefix ? createPrefixedStateAdapter(base, prefix) : base;
248
- }
249
- function createStateAdapter() {
250
- const config = getChatConfig();
251
- const activeLockMaxAgeMs = config.bot.turnTimeoutMs + ACTIVE_LOCK_TTL_MS;
252
- if (config.state.adapter === "memory") {
253
- redisStateAdapter = void 0;
254
- return createQueuedStateAdapter(
255
- createConnectingStateAdapter(
256
- withOptionalPrefix(createMemoryState(), config.state.keyPrefix)
257
- ),
258
- { activeLockMaxAgeMs }
259
- );
260
- }
261
- if (!config.state.redisUrl) {
262
- throw new Error("REDIS_URL is required for durable Slack thread state");
263
- }
264
- const redisState = createRedisState({
265
- url: config.state.redisUrl
266
- });
267
- redisStateAdapter = redisState;
268
- return createQueuedStateAdapter(
269
- createConnectingStateAdapter(
270
- withOptionalPrefix(redisState, config.state.keyPrefix)
271
- ),
272
- { activeLockMaxAgeMs }
273
- );
274
- }
275
- function getOptionalRedisStateAdapter() {
276
- getStateAdapter();
277
- return redisStateAdapter;
278
- }
279
- async function getConnectedStateContext() {
280
- const adapter = getStateAdapter();
281
- await adapter.connect();
282
- return {
283
- redisStateAdapter: getOptionalRedisStateAdapter(),
284
- stateAdapter: adapter
285
- };
286
- }
287
- async function getDefaultRedisStateAdapterFor(adapter) {
288
- if (adapter !== stateAdapter) {
289
- return void 0;
290
- }
291
- const context = await getConnectedStateContext();
292
- return context.stateAdapter === adapter ? context.redisStateAdapter : void 0;
293
- }
294
- function getStateAdapter() {
295
- if (!stateAdapter) {
296
- stateAdapter = createStateAdapter();
297
- }
298
- return stateAdapter;
299
- }
300
- async function disconnectStateAdapter() {
301
- if (!stateAdapter) {
302
- return;
303
- }
304
- try {
305
- await stateAdapter.disconnect();
306
- } finally {
307
- stateAdapter = void 0;
308
- redisStateAdapter = void 0;
309
- }
310
- }
311
-
312
- export {
313
- MUTATION_LOCK_TTL_MS,
314
- acquireActiveLock,
315
- withLock,
316
- fenceLock,
317
- withActiveLock,
318
- getDefaultRedisStateAdapterFor,
319
- getStateAdapter,
320
- disconnectStateAdapter
321
- };
@@ -1,22 +0,0 @@
1
- // src/usage-schema.ts
2
- import { z } from "zod";
3
- var usageCostSchema = z.object({
4
- input: z.number().finite().nonnegative().optional(),
5
- output: z.number().finite().nonnegative().optional(),
6
- cacheRead: z.number().finite().nonnegative().optional(),
7
- cacheWrite: z.number().finite().nonnegative().optional(),
8
- total: z.number().finite().nonnegative().optional()
9
- }).strict();
10
- var usageSchema = z.object({
11
- inputTokens: z.number().int().nonnegative().optional(),
12
- outputTokens: z.number().int().nonnegative().optional(),
13
- cachedInputTokens: z.number().int().nonnegative().optional(),
14
- cacheCreationTokens: z.number().int().nonnegative().optional(),
15
- reasoningTokens: z.number().int().nonnegative().optional(),
16
- totalTokens: z.number().int().nonnegative().optional(),
17
- cost: usageCostSchema.optional()
18
- }).strict();
19
-
20
- export {
21
- usageSchema
22
- };