@sentry/junior 0.202.0 → 0.204.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-CMyTD4DD.js +17509 -0
  2. package/dist/agent-hooks-Bbcp9e33.js +4040 -0
  3. package/dist/agent-runner-DNb1A49M.js +678 -0
  4. package/dist/api/schema.d.ts +2728 -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-B1TOqBI8.d.ts +246 -0
  9. package/dist/app.d.ts +4 -520
  10. package/dist/app.js +9522 -11875
  11. package/dist/auth-pause-state-DosEalIG.js +168 -0
  12. package/dist/catalog-runtime-BReos-D4.js +7 -0
  13. package/dist/checkpoint-CNrPyRJN.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-nGCW1OTG.js +941 -0
  33. package/dist/context-B45_WqVX.js +298 -0
  34. package/dist/conversation-privacy-B4voFRSm.js +182 -0
  35. package/dist/conversation-work-C6y3T5Hx.js +51 -0
  36. package/dist/credential-sync-kXr1hvO1.js +2660 -0
  37. package/dist/db-BeyXKJOI.d.ts +5 -0
  38. package/dist/destinations-BeBiJeEM.js +29 -0
  39. package/dist/execution-stats-DWfSihcH.js +373 -0
  40. package/dist/executor-DcMSlI5c.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-Drn_LXlM.js +63 -0
  47. package/dist/logging-BzAk1S_s.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-JiftokvA.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-CWmSdZVg.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-CrT5nXbw.js +861 -0
  60. package/dist/registry-DH1xUo2N.js +1419 -0
  61. package/dist/reporting-schema-DosTN__Q.js +105 -0
  62. package/dist/resolve-CZHnfxaS.js +546 -0
  63. package/dist/rolldown-runtime-B4FMCO8f.js +28 -0
  64. package/dist/runner-CZV2sC46.js +392 -0
  65. package/dist/sandbox-egress-signals-bHZfmhbd.js +46 -0
  66. package/dist/schema-Rn8-XEaN.js +1140 -0
  67. package/dist/sentry-CD3SdJl-.js +26 -0
  68. package/dist/skills-CIcDQSgM.js +316 -0
  69. package/dist/spawn-DdkUFRmq.js +29 -0
  70. package/dist/stats-DTUbAb88.js +2634 -0
  71. package/dist/store-C5qxF2ac.d.ts +208 -0
  72. package/dist/task-queue-CJIR4RF7.js +136 -0
  73. package/dist/task-runner-D-O3A-Cp.js +639 -0
  74. package/dist/thread-state-CRc9jTJS.js +431 -0
  75. package/dist/turn-execution-BkinIdJF.js +47 -0
  76. package/dist/turn-lifecycle-DQV19VTW.js +54 -0
  77. package/dist/usage-D3EbSO7w.js +296 -0
  78. package/dist/usage-schema-CKaDkH_j.js +20 -0
  79. package/dist/validation-C2CR-OX3.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-DxcWdoKa.js +8 -0
  85. package/dist/version.d.ts +2 -4
  86. package/dist/version.js +2 -6
  87. package/dist/web-authorization-RMBxAR_t.js +76 -0
  88. package/dist/web-input-3EPfpf55.js +494 -0
  89. package/dist/work-fGofI7Op.js +509 -0
  90. package/dist/worker-CsOLq-mR.js +625 -0
  91. package/package.json +9 -9
  92. package/dist/agent-hooks-UXITLYOK.js +0 -51
  93. package/dist/catalog-runtime-BG3JLLK2.js +0 -14
  94. package/dist/chunk-2LYHWMR4.js +0 -46
  95. package/dist/chunk-2MK3QBGA.js +0 -321
  96. package/dist/chunk-3PGQSKJV.js +0 -692
  97. package/dist/chunk-3UI3WFTX.js +0 -519
  98. package/dist/chunk-3Y47VMHV.js +0 -6
  99. package/dist/chunk-4UO6FK4G.js +0 -64
  100. package/dist/chunk-5NOPO64K.js +0 -198
  101. package/dist/chunk-5PKWYPFT.js +0 -2943
  102. package/dist/chunk-63NKKFJL.js +0 -1228
  103. package/dist/chunk-6AYH6252.js +0 -787
  104. package/dist/chunk-6Y5B5PEX.js +0 -80
  105. package/dist/chunk-7DHZP5KJ.js +0 -333
  106. package/dist/chunk-7H2VZTWN.js +0 -103
  107. package/dist/chunk-7NL7T6VU.js +0 -406
  108. package/dist/chunk-A76OIMYN.js +0 -102
  109. package/dist/chunk-AWMS3SPP.js +0 -58
  110. package/dist/chunk-B3LY5RCL.js +0 -229
  111. package/dist/chunk-BD2KT3OB.js +0 -36
  112. package/dist/chunk-BXCX5QKA.js +0 -2086
  113. package/dist/chunk-C6VVF43U.js +0 -81
  114. package/dist/chunk-CEMMLV5L.js +0 -98
  115. package/dist/chunk-CM5HNV2W.js +0 -131
  116. package/dist/chunk-DA2KGZZI.js +0 -13
  117. package/dist/chunk-DBVY6HLX.js +0 -64
  118. package/dist/chunk-DIB4GX3G.js +0 -8
  119. package/dist/chunk-DKIJ2RP5.js +0 -68
  120. package/dist/chunk-DL2KLKVH.js +0 -931
  121. package/dist/chunk-DWPN6SCH.js +0 -172
  122. package/dist/chunk-ELWOYVOY.js +0 -206
  123. package/dist/chunk-EWT7H65X.js +0 -506
  124. package/dist/chunk-FA6POGLH.js +0 -70
  125. package/dist/chunk-HMREVIO2.js +0 -135
  126. package/dist/chunk-IIWUT4FO.js +0 -820
  127. package/dist/chunk-JAL3CH4G.js +0 -27
  128. package/dist/chunk-JSJQEWBJ.js +0 -3295
  129. package/dist/chunk-KHKKHDLD.js +0 -387
  130. package/dist/chunk-LA6R4A7Q.js +0 -706
  131. package/dist/chunk-LOOU2DUR.js +0 -20428
  132. package/dist/chunk-M6FHWXE3.js +0 -700
  133. package/dist/chunk-M76HMB7M.js +0 -1856
  134. package/dist/chunk-MAGNK5J4.js +0 -1520
  135. package/dist/chunk-MTM5IFCY.js +0 -1190
  136. package/dist/chunk-N7TMSOZH.js +0 -235
  137. package/dist/chunk-NHJU2ZAL.js +0 -56
  138. package/dist/chunk-NSXKRGRT.js +0 -717
  139. package/dist/chunk-OWMPFXJA.js +0 -1764
  140. package/dist/chunk-PDO5BLNM.js +0 -22
  141. package/dist/chunk-PEQXYSSE.js +0 -45
  142. package/dist/chunk-PW4P4JYF.js +0 -1135
  143. package/dist/chunk-QB54UQUS.js +0 -320
  144. package/dist/chunk-QP3OGJXF.js +0 -105
  145. package/dist/chunk-RC745GGZ.js +0 -122
  146. package/dist/chunk-REOIRYPR.js +0 -37
  147. package/dist/chunk-SCOZRLZ4.js +0 -164
  148. package/dist/chunk-TXJSXBV5.js +0 -1433
  149. package/dist/chunk-TXKUKMVO.js +0 -417
  150. package/dist/chunk-U2GPUYAL.js +0 -3656
  151. package/dist/chunk-UIE3R5XU.js +0 -17
  152. package/dist/chunk-UXPG6ZIN.js +0 -84
  153. package/dist/chunk-VFUK3X5B.js +0 -50
  154. package/dist/chunk-WQSHDTTI.js +0 -1163
  155. package/dist/chunk-X6GDDWQH.js +0 -60
  156. package/dist/chunk-Y2CM7HXH.js +0 -111
  157. package/dist/chunk-Y7X25LFY.js +0 -15
  158. package/dist/chunk-YDUR3ZYW.js +0 -10
  159. package/dist/conversation-work-VIOQ5ZF3.js +0 -54
  160. package/dist/db-3L2MCVRI.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-YVV6C6T2.js +0 -243
  164. package/dist/oauth-relay-5XPVRPYB.js +0 -8
  165. package/dist/plugins-YTYJMMJF.js +0 -14
  166. package/dist/runner-LQ7RETDP.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-XRWYEDCD.js +0 -27
  170. package/dist/spawn-RC6SJUAI.js +0 -42
  171. package/dist/task-runner-7DY7ARYH.js +0 -36
  172. package/dist/validation-7MNQGCJA.js +0 -17
  173. package/dist/work-COALHUCG.js +0 -51
  174. package/dist/worker-6MURZIPD.js +0 -24
@@ -1,208 +1,162 @@
1
- import {
2
- consumePrivateTraceResultMarker
3
- } from "./chunk-UIE3R5XU.js";
4
- import {
5
- getCurrentConversationPrivacy
6
- } from "./chunk-5NOPO64K.js";
7
- import {
8
- getDeploymentServiceVersion,
9
- getDeploymentTelemetryAttributes
10
- } from "./chunk-MAGNK5J4.js";
11
- import {
12
- getClient,
13
- getGlobalScope,
14
- init,
15
- vercelAIIntegration,
16
- withStreamedSpan
17
- } from "./chunk-PEQXYSSE.js";
18
- import "./chunk-HMREVIO2.js";
19
-
20
- // src/chat/sentry-payload-filter.ts
21
- var PAYLOAD_ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
22
- "app.message.input",
23
- "app.message.output",
24
- "gen_ai.input.messages",
25
- "gen_ai.output.messages",
26
- "gen_ai.system_instructions",
27
- "gen_ai.tool.call.arguments",
28
- "gen_ai.tool.call.result"
1
+ import { M as getDeploymentServiceVersion, N as getDeploymentTelemetryAttributes } from "./logging-BzAk1S_s.js";
2
+ import { a as getClient, c as init, g as vercelAIIntegration, o as getGlobalScope, y as withStreamedSpan } from "./sentry-CD3SdJl-.js";
3
+ import { n as getCurrentConversationPrivacy } from "./conversation-privacy-B4voFRSm.js";
4
+ import { t as consumePrivateTraceResultMarker } from "./private-trace-result-BLvBjy_e.js";
5
+ //#region src/chat/sentry-payload-filter.ts
6
+ const PAYLOAD_ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
7
+ "app.message.input",
8
+ "app.message.output",
9
+ "gen_ai.input.messages",
10
+ "gen_ai.output.messages",
11
+ "gen_ai.system_instructions",
12
+ "gen_ai.tool.call.arguments",
13
+ "gen_ai.tool.call.result"
29
14
  ]);
30
- var URL_ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
31
- "http.target",
32
- "http.url",
33
- "url.full",
34
- "url.path"
35
- ]);
36
- var OAUTH_CALLBACK_PATH = "/api/oauth/callback/";
37
- var LOCAL_CREDENTIAL_PATH = "/api/internal/local-oauth-credentials";
38
- var SECRET_HEADER_NAMES = /* @__PURE__ */ new Set([
39
- "x-junior-local-credential-signature",
40
- "x-junior-sandbox-egress-token"
15
+ const URL_ATTRIBUTE_KEYS = /* @__PURE__ */ new Set([
16
+ "http.target",
17
+ "http.url",
18
+ "url.full",
19
+ "url.path"
41
20
  ]);
21
+ const OAUTH_CALLBACK_PATH = "/api/oauth/callback/";
22
+ const LOCAL_CREDENTIAL_PATH = "/api/internal/local-oauth-credentials";
23
+ const SECRET_HEADER_NAMES = /* @__PURE__ */ new Set(["x-junior-local-credential-signature", "x-junior-sandbox-egress-token"]);
42
24
  function stripQuery(value) {
43
- const queryIndex = value.indexOf("?");
44
- return queryIndex >= 0 ? value.slice(0, queryIndex) : value;
25
+ const queryIndex = value.indexOf("?");
26
+ return queryIndex >= 0 ? value.slice(0, queryIndex) : value;
45
27
  }
46
28
  function isSecretHeaderAttribute(key) {
47
- const normalized = key.toLowerCase().replace(/[^a-z0-9]/g, "");
48
- return normalized.endsWith("xjuniorlocalcredentialsignature") || normalized.endsWith("xjuniorsandboxegresstoken");
29
+ const normalized = key.toLowerCase().replace(/[^a-z0-9]/g, "");
30
+ return normalized.endsWith("xjuniorlocalcredentialsignature") || normalized.endsWith("xjuniorsandboxegresstoken");
49
31
  }
50
32
  function scrubSensitiveUrlAttributes(attributes) {
51
- if (!attributes) {
52
- return;
53
- }
54
- delete attributes["url.query"];
55
- const hasLocalCredentialUrl = [...URL_ATTRIBUTE_KEYS].some((key) => {
56
- const value = attributes[key];
57
- return typeof value === "string" && value.includes(LOCAL_CREDENTIAL_PATH);
58
- });
59
- for (const key of Object.keys(attributes)) {
60
- if (isSecretHeaderAttribute(key) || hasLocalCredentialUrl && key === "http.request.body.data") {
61
- delete attributes[key];
62
- }
63
- }
64
- for (const key of URL_ATTRIBUTE_KEYS) {
65
- const value = attributes[key];
66
- if (typeof value !== "string" || !value.includes(OAUTH_CALLBACK_PATH)) {
67
- continue;
68
- }
69
- attributes[key] = stripQuery(value);
70
- }
33
+ if (!attributes) return;
34
+ delete attributes["url.query"];
35
+ const hasLocalCredentialUrl = [...URL_ATTRIBUTE_KEYS].some((key) => {
36
+ const value = attributes[key];
37
+ return typeof value === "string" && value.includes(LOCAL_CREDENTIAL_PATH);
38
+ });
39
+ for (const key of Object.keys(attributes)) if (isSecretHeaderAttribute(key) || hasLocalCredentialUrl && key === "http.request.body.data") delete attributes[key];
40
+ for (const key of URL_ATTRIBUTE_KEYS) {
41
+ const value = attributes[key];
42
+ if (typeof value !== "string" || !value.includes(OAUTH_CALLBACK_PATH)) continue;
43
+ attributes[key] = stripQuery(value);
44
+ }
71
45
  }
72
46
  function scrubSensitiveRequest(request) {
73
- if (!request) {
74
- return;
75
- }
76
- const url = request.url;
77
- if (url?.includes(OAUTH_CALLBACK_PATH)) {
78
- request.url = stripQuery(url);
79
- delete request.query_string;
80
- }
81
- if (url?.includes(LOCAL_CREDENTIAL_PATH)) {
82
- delete request.data;
83
- }
84
- if (!request.headers) {
85
- return;
86
- }
87
- for (const key of Object.keys(request.headers)) {
88
- if (SECRET_HEADER_NAMES.has(key.toLowerCase())) {
89
- delete request.headers[key];
90
- }
91
- }
47
+ if (!request) return;
48
+ const url = request.url;
49
+ if (url?.includes(OAUTH_CALLBACK_PATH)) {
50
+ request.url = stripQuery(url);
51
+ delete request.query_string;
52
+ }
53
+ if (url?.includes(LOCAL_CREDENTIAL_PATH)) delete request.data;
54
+ if (!request.headers) return;
55
+ for (const key of Object.keys(request.headers)) if (SECRET_HEADER_NAMES.has(key.toLowerCase())) delete request.headers[key];
92
56
  }
93
57
  function hasPayloadAttributes(attributes) {
94
- return Object.keys(attributes).some((key) => PAYLOAD_ATTRIBUTE_KEYS.has(key));
58
+ return Object.keys(attributes).some((key) => PAYLOAD_ATTRIBUTE_KEYS.has(key));
95
59
  }
96
60
  function shouldScrubPayloads(attributes) {
97
- if (!hasPayloadAttributes(attributes)) {
98
- return false;
99
- }
100
- return getCurrentConversationPrivacy() !== "public";
61
+ if (!hasPayloadAttributes(attributes)) return false;
62
+ return getCurrentConversationPrivacy() !== "public";
101
63
  }
102
64
  function scrubPayloadAttributes(attributes) {
103
- if (!attributes) {
104
- return;
105
- }
106
- if (!shouldScrubPayloads(attributes)) {
107
- return;
108
- }
109
- const preserveProjectedToolResult = consumePrivateTraceResultMarker(attributes);
110
- let redacted = false;
111
- for (const key of PAYLOAD_ATTRIBUTE_KEYS) {
112
- if (key === "gen_ai.tool.call.result" && preserveProjectedToolResult) {
113
- continue;
114
- }
115
- if (key in attributes) {
116
- redacted = true;
117
- }
118
- delete attributes[key];
119
- }
120
- if (redacted) {
121
- attributes["app.conversation.payload_redacted"] = true;
122
- }
65
+ if (!attributes) return;
66
+ if (!shouldScrubPayloads(attributes)) return;
67
+ const preserveProjectedToolResult = consumePrivateTraceResultMarker(attributes);
68
+ let redacted = false;
69
+ for (const key of PAYLOAD_ATTRIBUTE_KEYS) {
70
+ if (key === "gen_ai.tool.call.result" && preserveProjectedToolResult) continue;
71
+ if (key in attributes) redacted = true;
72
+ delete attributes[key];
73
+ }
74
+ if (redacted) attributes["app.conversation.payload_redacted"] = true;
123
75
  }
124
76
  function scrubContainer(container) {
125
- if (!container) {
126
- return;
127
- }
128
- scrubPayloadAttributes(container.data);
129
- scrubPayloadAttributes(container.attributes);
130
- scrubSensitiveUrlAttributes(container.data);
131
- scrubSensitiveUrlAttributes(container.attributes);
77
+ if (!container) return;
78
+ scrubPayloadAttributes(container.data);
79
+ scrubPayloadAttributes(container.attributes);
80
+ scrubSensitiveUrlAttributes(container.data);
81
+ scrubSensitiveUrlAttributes(container.attributes);
132
82
  }
83
+ /** Remove private conversation payloads and boundary secrets from error events. */
133
84
  function scrubPrivateSentryEvent(event) {
134
- const eventRecord = event;
135
- scrubContainer(eventRecord);
136
- scrubSensitiveRequest(event.request);
137
- scrubContainer(event.contexts?.trace);
138
- for (const breadcrumb of event.breadcrumbs ?? []) {
139
- scrubContainer(breadcrumb);
140
- }
141
- return event;
85
+ scrubContainer(event);
86
+ scrubSensitiveRequest(event.request);
87
+ scrubContainer(event.contexts?.trace);
88
+ for (const breadcrumb of event.breadcrumbs ?? []) scrubContainer(breadcrumb);
89
+ return event;
142
90
  }
91
+ /** Remove private conversation payloads and boundary secrets from transactions. */
143
92
  function scrubPrivateSentryTransaction(event) {
144
- const eventRecord = event;
145
- scrubContainer(eventRecord);
146
- scrubSensitiveRequest(event.request);
147
- scrubContainer(event.contexts?.trace);
148
- for (const span of event.spans ?? []) {
149
- scrubContainer(span);
150
- }
151
- return event;
93
+ scrubContainer(event);
94
+ scrubSensitiveRequest(event.request);
95
+ scrubContainer(event.contexts?.trace);
96
+ for (const span of event.spans ?? []) scrubContainer(span);
97
+ return event;
152
98
  }
99
+ /** Remove private conversation payloads and boundary secrets from streamed spans. */
153
100
  function scrubPrivateSentrySpan(span) {
154
- scrubContainer(span);
155
- return span;
101
+ scrubContainer(span);
102
+ return span;
156
103
  }
104
+ /** Remove private conversation payloads and boundary secrets from structured logs. */
157
105
  function scrubPrivateSentryLog(log) {
158
- scrubContainer(log);
159
- return log;
106
+ scrubContainer(log);
107
+ return log;
160
108
  }
161
-
162
- // src/instrumentation.ts
109
+ //#endregion
110
+ //#region src/instrumentation.ts
163
111
  function getSampleRate(value, fallback) {
164
- if (!value) return fallback;
165
- const parsed = Number(value);
166
- return Number.isFinite(parsed) ? parsed : fallback;
112
+ if (!value) return fallback;
113
+ const parsed = Number(value);
114
+ return Number.isFinite(parsed) ? parsed : fallback;
167
115
  }
168
116
  function getBoolean(value, fallback) {
169
- if (!value) return fallback;
170
- const normalized = value.trim().toLowerCase();
171
- if (["1", "true", "yes", "on"].includes(normalized)) return true;
172
- if (["0", "false", "no", "off"].includes(normalized)) return false;
173
- return fallback;
117
+ if (!value) return fallback;
118
+ const normalized = value.trim().toLowerCase();
119
+ if ([
120
+ "1",
121
+ "true",
122
+ "yes",
123
+ "on"
124
+ ].includes(normalized)) return true;
125
+ if ([
126
+ "0",
127
+ "false",
128
+ "no",
129
+ "off"
130
+ ].includes(normalized)) return false;
131
+ return fallback;
174
132
  }
133
+ /** Initialize Sentry for the Junior runtime. Call at the top of your entry point. */
175
134
  function initSentry() {
176
- if (getClient()) {
177
- return;
178
- }
179
- const dsn = process.env.SENTRY_DSN;
180
- const enableLogs = getBoolean(process.env.SENTRY_ENABLE_LOGS, Boolean(dsn));
181
- const serviceVersion = getDeploymentServiceVersion();
182
- const deploymentSpanAttributes = getDeploymentTelemetryAttributes();
183
- init({
184
- dsn,
185
- environment: process.env.SENTRY_ENVIRONMENT ?? process.env.VERCEL_ENV ?? process.env.NODE_ENV,
186
- release: serviceVersion,
187
- tracesSampleRate: getSampleRate(process.env.SENTRY_TRACES_SAMPLE_RATE, 1),
188
- traceLifecycle: "stream",
189
- sendDefaultPii: true,
190
- enableLogs,
191
- registerEsmLoaderHooks: false,
192
- streamGenAiSpans: true,
193
- beforeSend: scrubPrivateSentryEvent,
194
- beforeSendLog: scrubPrivateSentryLog,
195
- beforeSendSpan: withStreamedSpan(scrubPrivateSentrySpan),
196
- beforeSendTransaction: scrubPrivateSentryTransaction,
197
- integrations: [
198
- vercelAIIntegration({
199
- recordInputs: true,
200
- recordOutputs: true
201
- })
202
- ]
203
- });
204
- getGlobalScope().setAttributes(deploymentSpanAttributes);
135
+ if (getClient()) return;
136
+ const dsn = process.env.SENTRY_DSN;
137
+ const enableLogs = getBoolean(process.env.SENTRY_ENABLE_LOGS, Boolean(dsn));
138
+ const serviceVersion = getDeploymentServiceVersion();
139
+ const deploymentSpanAttributes = getDeploymentTelemetryAttributes();
140
+ init({
141
+ dsn,
142
+ environment: process.env.SENTRY_ENVIRONMENT ?? process.env.VERCEL_ENV ?? process.env.NODE_ENV,
143
+ release: serviceVersion,
144
+ tracesSampleRate: getSampleRate(process.env.SENTRY_TRACES_SAMPLE_RATE, 1),
145
+ traceLifecycle: "stream",
146
+ sendDefaultPii: true,
147
+ enableLogs,
148
+ registerEsmLoaderHooks: false,
149
+ streamGenAiSpans: true,
150
+ beforeSend: scrubPrivateSentryEvent,
151
+ beforeSendLog: scrubPrivateSentryLog,
152
+ beforeSendSpan: withStreamedSpan(scrubPrivateSentrySpan),
153
+ beforeSendTransaction: scrubPrivateSentryTransaction,
154
+ integrations: [vercelAIIntegration({
155
+ recordInputs: true,
156
+ recordOutputs: true
157
+ })]
158
+ });
159
+ getGlobalScope().setAttributes(deploymentSpanAttributes);
205
160
  }
206
- export {
207
- initSentry
208
- };
161
+ //#endregion
162
+ export { initSentry };
@@ -0,0 +1,63 @@
1
+ import { i as getChatConfig } from "./config-nGCW1OTG.js";
2
+ import { a as signQueueMessage, i as QUEUE_SIGNATURE_MAX_AGE_MS, o as verifyQueueMessage, s as createVercelQueueClient } from "./vercel-queue-DIkVcfK4.js";
3
+ import { AsyncLocalStorage } from "node:async_hooks";
4
+ import { z } from "zod";
5
+ import { createHash } from "node:crypto";
6
+ //#region src/chat/runtime/request-deadline.ts
7
+ const requestDeadlineStorage = new AsyncLocalStorage();
8
+ function createTurnRequestDeadline(startedAtMs) {
9
+ return {
10
+ startedAtMs,
11
+ deadlineAtMs: startedAtMs + Math.max(1, getChatConfig().functionMaxDurationSeconds * 1e3 - 2e4)
12
+ };
13
+ }
14
+ /** Return the host request deadline inherited by the current async turn. */
15
+ function getTurnRequestDeadline() {
16
+ return requestDeadlineStorage.getStore();
17
+ }
18
+ /** Run work with one host request deadline shared by nested queued turns. */
19
+ function runWithTurnRequestDeadline(callback, startedAtMs = Date.now()) {
20
+ if (requestDeadlineStorage.getStore()) return callback();
21
+ return requestDeadlineStorage.run(createTurnRequestDeadline(startedAtMs), callback);
22
+ }
23
+ //#endregion
24
+ //#region src/chat/sandbox/snapshot/job-queue.ts
25
+ /** Send Workspace snapshot build messages. */
26
+ const SIGNATURE_CONTEXT = "junior.workspace_snapshot_queue.v1";
27
+ const SIGNATURE_VERSION = "v1";
28
+ const WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC = "junior_workspace_snapshots";
29
+ const workspaceSnapshotJobSign = {
30
+ context: SIGNATURE_CONTEXT,
31
+ schema: z.object({
32
+ workspaceId: z.string().uuid(),
33
+ profileHash: z.string().min(1)
34
+ }).strict(),
35
+ signatureVersion: SIGNATURE_VERSION,
36
+ parts: (message) => [message.workspaceId, message.profileHash]
37
+ };
38
+ function jobId(message) {
39
+ return `workspace-snapshot_${createHash("sha256").update(message.workspaceId).update("\0").update(message.profileHash).digest("hex").slice(0, 32)}`;
40
+ }
41
+ /** Sign a Workspace snapshot job for tests and local checks. */
42
+ function signWorkspaceSnapshotJobMessage(message, nowMs = Date.now()) {
43
+ return signQueueMessage(workspaceSnapshotJobSign, message, nowMs);
44
+ }
45
+ /** Check that a recent queue message came from Junior. */
46
+ function verifyWorkspaceSnapshotJobMessage(value, nowMs = Date.now()) {
47
+ return verifyQueueMessage(workspaceSnapshotJobSign, value, nowMs);
48
+ }
49
+ async function send(message, idempotencyKey) {
50
+ const options = { retentionSeconds: QUEUE_SIGNATURE_MAX_AGE_MS / 1e3 };
51
+ if (idempotencyKey) options.idempotencyKey = idempotencyKey;
52
+ await createVercelQueueClient().send(WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC, signWorkspaceSnapshotJobMessage(message), options);
53
+ }
54
+ /** Send a job unless the same Workspace build already has one. */
55
+ async function sendWorkspaceSnapshotJob(message) {
56
+ await send(message, jobId(message));
57
+ }
58
+ /** Send the next job for a Workspace build that is still running. */
59
+ async function sendNextWorkspaceSnapshotJob(message) {
60
+ await send(message);
61
+ }
62
+ //#endregion
63
+ export { getTurnRequestDeadline as a, verifyWorkspaceSnapshotJobMessage as i, sendNextWorkspaceSnapshotJob as n, runWithTurnRequestDeadline as o, sendWorkspaceSnapshotJob as r, WORKSPACE_SNAPSHOT_JOB_QUEUE_TOPIC as t };