@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,80 +0,0 @@
1
- import {
2
- credentialContextSchema
3
- } from "./chunk-CEMMLV5L.js";
4
-
5
- // src/chat/sandbox/egress/schemas.ts
6
- import { z } from "zod";
7
- import {
8
- pluginAuthorizationSchema,
9
- pluginCredentialHeaderTransformSchema,
10
- pluginGrantSchema,
11
- pluginProviderAccountSchema
12
- } from "@sentry/junior-plugin-api";
13
- var finiteNumberSchema = z.number().refine(Number.isFinite);
14
- var httpStatusSchema = z.number().int().min(100).max(599);
15
- var providerNameSchema = z.string().regex(/^[a-z][a-z0-9-]*$/);
16
- var credentialSignalKindSchema = z.enum(["auth_required", "unavailable"]);
17
- var sandboxEgressGrantSchema = pluginGrantSchema;
18
- var sandboxEgressCredentialContextSchema = z.object({
19
- credentials: credentialContextSchema,
20
- egressId: z.string().min(1),
21
- expiresAtMs: finiteNumberSchema,
22
- contextId: z.string().min(1)
23
- }).strict();
24
- var sandboxEgressCredentialLeaseSchema = z.object({
25
- account: pluginProviderAccountSchema.optional(),
26
- authorization: pluginAuthorizationSchema.optional(),
27
- grant: sandboxEgressGrantSchema,
28
- provider: providerNameSchema,
29
- expiresAt: z.string().min(1),
30
- headerTransforms: z.array(pluginCredentialHeaderTransformSchema).min(1)
31
- }).strict();
32
- var sandboxEgressAuthRequiredSignalSchema = z.object({
33
- authorization: pluginAuthorizationSchema.optional(),
34
- grant: sandboxEgressGrantSchema,
35
- kind: credentialSignalKindSchema.default("auth_required"),
36
- provider: providerNameSchema,
37
- message: z.string().optional(),
38
- createdAtMs: finiteNumberSchema
39
- }).strict().superRefine((signal, ctx) => {
40
- if (signal.authorization && signal.authorization.provider !== signal.provider) {
41
- ctx.addIssue({
42
- code: z.ZodIssueCode.custom,
43
- message: "Auth signal authorization provider must match provider",
44
- path: ["authorization", "provider"]
45
- });
46
- }
47
- });
48
- var sandboxEgressPermissionDeniedSignalSchema = z.object({
49
- account: pluginProviderAccountSchema.optional(),
50
- acceptedPermissions: z.string().optional(),
51
- grant: sandboxEgressGrantSchema,
52
- message: z.string().min(1),
53
- provider: providerNameSchema,
54
- source: z.literal("upstream"),
55
- sso: z.string().optional(),
56
- status: httpStatusSchema,
57
- upstreamHost: z.string().min(1),
58
- upstreamPath: z.string().min(1),
59
- createdAtMs: finiteNumberSchema
60
- }).strict();
61
- var sandboxEgressSignalsResponseSchema = z.object({
62
- auth_required: sandboxEgressAuthRequiredSignalSchema.optional(),
63
- permission_denied: sandboxEgressPermissionDeniedSignalSchema.optional()
64
- }).strict();
65
- function parseSandboxEgressAuthRequiredSignal(value) {
66
- const result = sandboxEgressAuthRequiredSignalSchema.safeParse(value);
67
- return result.success ? result.data : void 0;
68
- }
69
- function parseSandboxEgressPermissionDeniedSignal(value) {
70
- const result = sandboxEgressPermissionDeniedSignalSchema.safeParse(value);
71
- return result.success ? result.data : void 0;
72
- }
73
-
74
- export {
75
- sandboxEgressCredentialContextSchema,
76
- sandboxEgressCredentialLeaseSchema,
77
- sandboxEgressSignalsResponseSchema,
78
- parseSandboxEgressAuthRequiredSignal,
79
- parseSandboxEgressPermissionDeniedSignal
80
- };
@@ -1,333 +0,0 @@
1
- import {
2
- usageSchema
3
- } from "./chunk-PDO5BLNM.js";
4
- import {
5
- botConfig
6
- } from "./chunk-63NKKFJL.js";
7
- import {
8
- logWarn
9
- } from "./chunk-MAGNK5J4.js";
10
-
11
- // src/chat/conversations/structured-events.ts
12
- import {
13
- conversationEventPresentationSchema,
14
- defineConversationEvent
15
- } from "@sentry/junior-plugin-api";
16
- import { z } from "zod";
17
- var JUNIOR_NATIVE_EVENT_NAMESPACE = "junior";
18
- var authenticationEventContentSchema = z.object({
19
- accountLabel: z.string().trim().min(1).max(120).optional(),
20
- actorId: z.string().min(1),
21
- authorizationId: z.string().min(1).optional(),
22
- provider: z.string().regex(/^[a-z][a-z0-9-]*$/),
23
- providerLabel: z.string().trim().min(1).max(80).optional()
24
- }).strict();
25
- var agentsInstructionsUpdatedContentSchema = z.object({
26
- action: z.enum(["loaded", "replaced", "cleared"]),
27
- directory: z.string().trim().min(1).max(500).optional(),
28
- fingerprint: z.string().trim().min(1).max(128),
29
- sources: z.array(
30
- z.object({
31
- content: z.string().min(1).max(32 * 1024),
32
- path: z.string().trim().min(1).max(500)
33
- }).strict()
34
- ).max(32),
35
- textBytes: z.number().int().nonnegative().optional()
36
- }).strict();
37
- function providerTitle(content) {
38
- return content.providerLabel?.trim() || content.provider;
39
- }
40
- function agentsInstructionsTitle(action) {
41
- if (action === "loaded") return "Loaded AGENTS.md";
42
- if (action === "replaced") return "Updated AGENTS.md";
43
- return "Cleared AGENTS.md";
44
- }
45
- function sourceFilename(sourcePath) {
46
- return sourcePath.split("/").at(-1) || sourcePath;
47
- }
48
- function formatBytes(bytes) {
49
- if (bytes < 1024) return `${bytes} bytes`;
50
- const kilobytes = bytes / 1024;
51
- return `${Number.isInteger(kilobytes) ? kilobytes : kilobytes.toFixed(1)} KB`;
52
- }
53
- function agentsInstructionsPreview(content) {
54
- const source = content.sources[0];
55
- if (!source) return void 0;
56
- const filename = sourceFilename(source.path);
57
- const label = content.sources.length === 1 ? filename : `${content.sources.length} AGENTS.md files`;
58
- return typeof content.textBytes === "number" ? `${label} \xB7 ${formatBytes(content.textBytes)}` : label;
59
- }
60
- var authenticationLinkedEvent = defineConversationEvent({
61
- name: "authentication_linked",
62
- version: 1,
63
- schema: authenticationEventContentSchema,
64
- renderEvent(event) {
65
- const provider = providerTitle(event);
66
- return {
67
- icon: "link",
68
- title: `${provider} connected`,
69
- ...event.accountLabel ? { preview: `Connected as \`${event.accountLabel}\`` } : void 0,
70
- details: [
71
- {
72
- title: `${provider} connected`,
73
- ...event.accountLabel ? { description: `Connected as \`${event.accountLabel}\`` } : void 0,
74
- metadata: [event.provider]
75
- }
76
- ]
77
- };
78
- }
79
- });
80
- var authenticationUnlinkedEvent = defineConversationEvent({
81
- name: "authentication_unlinked",
82
- version: 1,
83
- schema: authenticationEventContentSchema,
84
- renderEvent(event) {
85
- const provider = providerTitle(event);
86
- return {
87
- icon: "key",
88
- title: `${provider} disconnected`,
89
- details: [
90
- {
91
- title: `${provider} disconnected`,
92
- metadata: [event.provider]
93
- }
94
- ]
95
- };
96
- }
97
- });
98
- var agentsInstructionsUpdatedEvent = defineConversationEvent({
99
- name: "agents_instructions_updated",
100
- version: 1,
101
- schema: agentsInstructionsUpdatedContentSchema,
102
- renderEvent(event) {
103
- const title = agentsInstructionsTitle(event.action);
104
- const preview = agentsInstructionsPreview(event);
105
- return {
106
- icon: "brain",
107
- title,
108
- ...preview ? { preview } : void 0,
109
- ...event.sources.length > 0 ? {
110
- details: event.sources.map((source) => ({
111
- title: sourceFilename(source.path),
112
- content: source.content
113
- }))
114
- } : void 0
115
- };
116
- }
117
- });
118
- var NATIVE_EVENT_DEFINITIONS = [
119
- authenticationLinkedEvent,
120
- authenticationUnlinkedEvent,
121
- agentsInstructionsUpdatedEvent
122
- ];
123
- function getJuniorNativeEventDefinition(args) {
124
- return NATIVE_EVENT_DEFINITIONS.find(
125
- (definition) => definition.eventName === args.name && definition.version === args.version
126
- );
127
- }
128
- function renderJuniorNativeConversationEvent(args) {
129
- if (args.namespace !== JUNIOR_NATIVE_EVENT_NAMESPACE) return void 0;
130
- const definition = getJuniorNativeEventDefinition(args);
131
- if (!definition) return void 0;
132
- const presentation = definition.renderEvent(definition.parse(args.content));
133
- return presentation === void 0 ? void 0 : conversationEventPresentationSchema.parse(presentation);
134
- }
135
-
136
- // src/chat/usage.ts
137
- var agentTurnUsageSchema = usageSchema;
138
- var COMPONENT_USAGE_FIELDS = [
139
- "inputTokens",
140
- "outputTokens",
141
- "cachedInputTokens",
142
- "cacheCreationTokens"
143
- ];
144
- var COST_COMPONENT_FIELDS = [
145
- "input",
146
- "output",
147
- "cacheRead",
148
- "cacheWrite"
149
- ];
150
- function hasAgentTurnUsage(usage) {
151
- return Boolean(
152
- usage && (Object.entries(usage).some(
153
- ([field, value]) => field !== "cost" && typeof value === "number" && Number.isFinite(value)
154
- ) || Object.values(usage.cost ?? {}).some(
155
- (value) => typeof value === "number" && Number.isFinite(value)
156
- ))
157
- );
158
- }
159
- function getFiniteCount(value) {
160
- return typeof value === "number" && Number.isFinite(value) ? Math.max(0, Math.floor(value)) : void 0;
161
- }
162
- function getFiniteCost(value) {
163
- return typeof value === "number" && Number.isFinite(value) ? Math.max(0, value) : void 0;
164
- }
165
- function addCost(left, right) {
166
- return Math.round(((left ?? 0) + right) * 1e12) / 1e12;
167
- }
168
- function getComponentTotal(usage) {
169
- let total;
170
- for (const field of COMPONENT_USAGE_FIELDS) {
171
- const value = getFiniteCount(usage[field]);
172
- if (value === void 0) continue;
173
- total = (total ?? 0) + value;
174
- }
175
- return total;
176
- }
177
- function agentTurnCostUsd(usage) {
178
- if (!usage?.cost) return void 0;
179
- const total = getFiniteCost(usage.cost.total);
180
- if (total !== void 0) return total;
181
- let componentTotal = 0;
182
- let hasComponent = false;
183
- for (const field of COST_COMPONENT_FIELDS) {
184
- const value = getFiniteCost(usage.cost[field]);
185
- if (value === void 0) continue;
186
- hasComponent = true;
187
- componentTotal = addCost(componentTotal, value);
188
- }
189
- return hasComponent ? componentTotal : void 0;
190
- }
191
- function agentTurnTotalTokens(usage) {
192
- if (!usage) return void 0;
193
- const componentTotal = getComponentTotal(usage);
194
- if (componentTotal !== void 0) return componentTotal;
195
- return getFiniteCount(usage.totalTokens);
196
- }
197
- function addAgentTurnUsage(...usages) {
198
- const components = {};
199
- let componentTotal;
200
- let totalOnlyTokens;
201
- let reasoningTokens;
202
- const cost = {};
203
- for (const usage of usages) {
204
- if (!usage) continue;
205
- const reasoning = getFiniteCount(usage.reasoningTokens);
206
- if (reasoning !== void 0) {
207
- reasoningTokens = (reasoningTokens ?? 0) + reasoning;
208
- }
209
- if (usage.cost) {
210
- for (const field of [...COST_COMPONENT_FIELDS, "total"]) {
211
- const value = getFiniteCost(usage.cost[field]);
212
- if (value === void 0) continue;
213
- cost[field] = addCost(cost[field], value);
214
- }
215
- }
216
- const usageComponentTotal = getComponentTotal(usage);
217
- if (usageComponentTotal !== void 0) {
218
- componentTotal = (componentTotal ?? 0) + usageComponentTotal;
219
- for (const field of COMPONENT_USAGE_FIELDS) {
220
- const value = getFiniteCount(usage[field]);
221
- if (value === void 0) continue;
222
- components[field] = (components[field] ?? 0) + value;
223
- }
224
- continue;
225
- }
226
- const totalTokens = getFiniteCount(usage.totalTokens);
227
- if (totalTokens !== void 0) {
228
- totalOnlyTokens = (totalOnlyTokens ?? 0) + totalTokens;
229
- }
230
- }
231
- if (totalOnlyTokens !== void 0) {
232
- return {
233
- totalTokens: totalOnlyTokens + (componentTotal ?? 0),
234
- ...reasoningTokens !== void 0 ? { reasoningTokens } : void 0,
235
- ...Object.keys(cost).length > 0 ? { cost } : void 0
236
- };
237
- }
238
- const result = {
239
- ...components,
240
- ...reasoningTokens !== void 0 ? { reasoningTokens } : void 0,
241
- ...Object.keys(cost).length > 0 ? { cost } : void 0
242
- };
243
- return hasAgentTurnUsage(result) ? result : void 0;
244
- }
245
-
246
- // src/chat/services/short-title.ts
247
- var SHORT_TITLE_MAX_LENGTH = 60;
248
- var TITLE_PROMPTS = {
249
- conversation: [
250
- "Generate a concise 5-8 word conversation title from the first user message below.",
251
- "Capture the user's main request.",
252
- "Reply with ONLY the title, with no quotes or trailing punctuation."
253
- ],
254
- task: [
255
- "Generate a concise 5-8 word task title from the task instruction below.",
256
- "Capture the task's main purpose.",
257
- "Reply with ONLY the title, with no quotes or trailing punctuation."
258
- ]
259
- };
260
- function normalizeShortTitle(value) {
261
- return value.replace(/\s+/g, " ").trim().slice(0, SHORT_TITLE_MAX_LENGTH);
262
- }
263
- function fallbackShortTitle(sourceText, fallback = "Untitled") {
264
- const firstLine = sourceText.split(/\r?\n/).map((line) => line.trim()).find((line) => line.length > 0) ?? "";
265
- return normalizeShortTitle(firstLine) || fallback;
266
- }
267
- async function generateShortTitle(args) {
268
- const sourceText = args.sourceText.trim();
269
- if (!sourceText) return void 0;
270
- try {
271
- const result = await args.completeText({
272
- modelId: botConfig.fastModelId,
273
- temperature: 0,
274
- promptName: `junior.${args.kind}_title`,
275
- messages: [
276
- {
277
- role: "user",
278
- content: [
279
- ...TITLE_PROMPTS[args.kind],
280
- "",
281
- args.kind === "conversation" ? `First user message: ${sourceText.slice(0, 500)}` : `Task instruction: ${sourceText.slice(0, 500)}`
282
- ].join("\n"),
283
- timestamp: Date.now()
284
- }
285
- ],
286
- metadata: {
287
- modelId: botConfig.fastModelId
288
- }
289
- });
290
- const title = normalizeShortTitle(result.text);
291
- return title || void 0;
292
- } catch (error) {
293
- logWarn(`${args.kind}.title.generation.failed`, {
294
- "exception.message": error instanceof Error ? error.message : String(error)
295
- });
296
- return void 0;
297
- }
298
- }
299
- async function resolveTaskTitle(args) {
300
- const explicit = normalizeShortTitle(args.title ?? "");
301
- if (explicit) return explicit;
302
- return generateShortTitle({
303
- completeText: args.completeText,
304
- kind: "task",
305
- sourceText: args.instruction
306
- });
307
- }
308
-
309
- // src/chat/tools/execution/tool-input-error.ts
310
- var ToolInputError = class extends Error {
311
- constructor(message, options) {
312
- super(message, options);
313
- this.name = "ToolInputError";
314
- }
315
- };
316
-
317
- export {
318
- JUNIOR_NATIVE_EVENT_NAMESPACE,
319
- authenticationLinkedEvent,
320
- authenticationUnlinkedEvent,
321
- agentsInstructionsUpdatedEvent,
322
- renderJuniorNativeConversationEvent,
323
- SHORT_TITLE_MAX_LENGTH,
324
- fallbackShortTitle,
325
- generateShortTitle,
326
- resolveTaskTitle,
327
- ToolInputError,
328
- agentTurnUsageSchema,
329
- hasAgentTurnUsage,
330
- agentTurnCostUsd,
331
- agentTurnTotalTokens,
332
- addAgentTurnUsage
333
- };
@@ -1,103 +0,0 @@
1
- // src/chat/vercel-queue-client.ts
2
- import { QueueClient } from "@vercel/queue";
3
- function defaultQueueClientOptions() {
4
- if (process.env.VERCEL_DEPLOYMENT_ID?.trim()) {
5
- return {};
6
- }
7
- return { deploymentId: null };
8
- }
9
- function createVercelQueueClient() {
10
- return new QueueClient(defaultQueueClientOptions());
11
- }
12
-
13
- // src/chat/queue/sign.ts
14
- import { createHmac, timingSafeEqual } from "crypto";
15
- import { z } from "zod";
16
- var QUEUE_SIGNATURE_MAX_AGE_MS = 60 * 60 * 1e3;
17
- function secret() {
18
- return process.env.JUNIOR_SECRET?.trim() || void 0;
19
- }
20
- function digest(args) {
21
- return createHmac("sha256", args.secret).update(
22
- [args.context, args.signedAtMs, ...args.parts].join(args.separator)
23
- ).digest("hex");
24
- }
25
- function sameHex(expected, actual) {
26
- const left = Buffer.from(expected);
27
- const right = Buffer.from(actual);
28
- return left.length === right.length && timingSafeEqual(left, right);
29
- }
30
- function body(value) {
31
- const {
32
- signature: _signature,
33
- signatureVersion: _signatureVersion,
34
- signedAtMs: _signedAtMs,
35
- ...message
36
- } = value;
37
- return message;
38
- }
39
- function signQueueMessage(config, message, nowMs = Date.now()) {
40
- const key = secret();
41
- if (!key) {
42
- throw new Error("Cannot sign queue message without JUNIOR_SECRET");
43
- }
44
- if (!Number.isFinite(nowMs)) {
45
- throw new Error("Cannot sign queue message with an invalid clock");
46
- }
47
- const separator = config.separator ?? "\0";
48
- return {
49
- ...message,
50
- signedAtMs: nowMs,
51
- signatureVersion: config.signatureVersion,
52
- signature: digest({
53
- context: config.context,
54
- parts: config.parts(message),
55
- secret: key,
56
- separator,
57
- signedAtMs: nowMs
58
- })
59
- };
60
- }
61
- function verifyQueueMessage(config, value, nowMs = Date.now()) {
62
- if (!value || typeof value !== "object" || Array.isArray(value)) {
63
- return { status: "rejected", reason: "malformed" };
64
- }
65
- const signed = z.object({
66
- signature: z.string().trim().min(1),
67
- signatureVersion: z.literal(config.signatureVersion),
68
- signedAtMs: z.number().finite()
69
- }).safeParse(value);
70
- const message = config.schema.safeParse(body(value));
71
- if (!signed.success || !message.success) {
72
- return { status: "rejected", reason: "malformed" };
73
- }
74
- const key = secret();
75
- if (!key) {
76
- return { status: "unavailable", reason: "missing_secret" };
77
- }
78
- if (!Number.isFinite(nowMs)) {
79
- return { status: "unavailable", reason: "invalid_clock" };
80
- }
81
- const maxAgeMs = config.maxAgeMs ?? QUEUE_SIGNATURE_MAX_AGE_MS;
82
- if (Math.abs(nowMs - signed.data.signedAtMs) > maxAgeMs) {
83
- return { status: "rejected", reason: "expired" };
84
- }
85
- const expected = digest({
86
- context: config.context,
87
- parts: config.parts(message.data),
88
- secret: key,
89
- separator: config.separator ?? "\0",
90
- signedAtMs: signed.data.signedAtMs
91
- });
92
- if (!sameHex(expected, signed.data.signature)) {
93
- return { status: "rejected", reason: "signature_mismatch" };
94
- }
95
- return { status: "verified", message: message.data };
96
- }
97
-
98
- export {
99
- createVercelQueueClient,
100
- QUEUE_SIGNATURE_MAX_AGE_MS,
101
- signQueueMessage,
102
- verifyQueueMessage
103
- };