@sentry/junior 0.120.0 → 0.121.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 (42) hide show
  1. package/dist/{agent-hooks-5DDPWRYO.js → agent-hooks-CQDGDBCP.js} +7 -7
  2. package/dist/api.js +13 -13
  3. package/dist/app.js +19 -19
  4. package/dist/{catalog-runtime-5KR5XBMJ.js → catalog-runtime-AD3YNTTM.js} +5 -5
  5. package/dist/chat/sandbox/noninteractive-command.d.ts +1 -0
  6. package/dist/chat/sandbox/session.d.ts +2 -2
  7. package/dist/chat/sandbox/snapshot/install.d.ts +2 -2
  8. package/dist/chat/sandbox/snapshot/resolve.d.ts +1 -0
  9. package/dist/chat/sandbox/workspace.d.ts +3 -1
  10. package/dist/{chunk-M243JMZH.js → chunk-254MFDOF.js} +2 -2
  11. package/dist/{chunk-TKUCRFNX.js → chunk-3DBMANUI.js} +7 -7
  12. package/dist/{chunk-24B5R6OU.js → chunk-7HYV7KFM.js} +4 -4
  13. package/dist/{chunk-DMKHRBI6.js → chunk-D2EMOH3N.js} +1 -1
  14. package/dist/{chunk-XAI2HNAY.js → chunk-ET2SDCNV.js} +1 -1
  15. package/dist/{chunk-VURFJVFH.js → chunk-IDXLBKPS.js} +1 -1
  16. package/dist/{chunk-DWOH57FW.js → chunk-IK4QSS5H.js} +1 -1
  17. package/dist/{chunk-DJDGDJDF.js → chunk-ITMEXX5H.js} +44 -23
  18. package/dist/{chunk-BHXW734F.js → chunk-JYDIBXFY.js} +6 -6
  19. package/dist/{chunk-ALYQOZG7.js → chunk-JZ47AFSH.js} +1 -1
  20. package/dist/{chunk-QOQPPRFS.js → chunk-KLUMVJRQ.js} +11 -11
  21. package/dist/{chunk-YEAOUT5W.js → chunk-LE77HHF3.js} +1 -1
  22. package/dist/{chunk-EIVE6GL4.js → chunk-TRECK7RV.js} +2 -2
  23. package/dist/{chunk-ALAKN7LR.js → chunk-UURFXX66.js} +1 -1
  24. package/dist/{chunk-Q3RL6A4E.js → chunk-UXQ5XSA2.js} +1 -1
  25. package/dist/{chunk-ERYVNWNE.js → chunk-VWBKDPMQ.js} +161 -63
  26. package/dist/{chunk-GNNV3UTY.js → chunk-WUP7NWMP.js} +1 -1
  27. package/dist/{chunk-6WX5SPI3.js → chunk-XDRGYDED.js} +1 -1
  28. package/dist/{chunk-JQWP6V22.js → chunk-Z2XXPUZG.js} +4 -4
  29. package/dist/cli/chat.js +21 -21
  30. package/dist/cli/check.js +6 -6
  31. package/dist/cli/plugins.js +10 -10
  32. package/dist/cli/snapshot-create.js +8 -8
  33. package/dist/cli/upgrade.js +5 -5
  34. package/dist/{db-T4ZY64PB.js → db-7HQT2SXQ.js} +5 -5
  35. package/dist/instrumentation.js +2 -2
  36. package/dist/nitro.js +2 -2
  37. package/dist/{oauth-callback-server-LQ6DFI26.js → oauth-callback-server-VHTUCNHK.js} +14 -14
  38. package/dist/{runner-D3ZU6TJH.js → runner-3ONPZRED.js} +9 -9
  39. package/dist/{skills-JMXY7LIY.js → skills-WGAYGGPA.js} +6 -6
  40. package/dist/{validation-OEPJS7JX.js → validation-ZIWNBG4D.js} +6 -6
  41. package/dist/version.js +1 -1
  42. package/package.json +5 -5
@@ -2,18 +2,18 @@ import {
2
2
  SANDBOX_WORKSPACE_ROOT,
3
3
  getStateAdapter,
4
4
  sleep
5
- } from "./chunk-ALAKN7LR.js";
5
+ } from "./chunk-UURFXX66.js";
6
6
  import {
7
7
  toOptionalTrimmed
8
- } from "./chunk-VURFJVFH.js";
8
+ } from "./chunk-IDXLBKPS.js";
9
9
  import {
10
10
  pluginCatalogRuntime
11
- } from "./chunk-GNNV3UTY.js";
11
+ } from "./chunk-WUP7NWMP.js";
12
12
  import {
13
13
  setSpanAttributes,
14
14
  setSpanStatus,
15
15
  withSpan
16
- } from "./chunk-ALYQOZG7.js";
16
+ } from "./chunk-JZ47AFSH.js";
17
17
 
18
18
  // src/chat/sandbox/snapshot/profile.ts
19
19
  import { createHash } from "crypto";
@@ -196,6 +196,7 @@ async function runNonInteractiveCommand(sandbox, input) {
196
196
  const command = {
197
197
  ...buildNonInteractiveCommand(input),
198
198
  ...input.cwd ? { cwd: input.cwd } : {},
199
+ ...input.signal ? { signal: input.signal } : {},
199
200
  ...input.sudo !== void 0 ? { sudo: input.sudo } : {}
200
201
  };
201
202
  return await sandbox.runCommand(command);
@@ -219,10 +220,11 @@ async function tryRun(sandbox, params) {
219
220
  const result = await runNonInteractiveCommand(sandbox, params);
220
221
  return result.exitCode === 0;
221
222
  }
222
- async function installGh(sandbox) {
223
+ async function installGh(sandbox, signal) {
223
224
  const installed = await tryRun(sandbox, {
224
225
  cmd: "dnf",
225
226
  args: ["install", "-y", "gh"],
227
+ signal,
226
228
  sudo: true
227
229
  });
228
230
  if (installed) {
@@ -235,6 +237,7 @@ async function installGh(sandbox) {
235
237
  "addrepo",
236
238
  "--from-repofile=https://cli.github.com/packages/rpm/gh-cli.repo"
237
239
  ],
240
+ signal,
238
241
  sudo: true
239
242
  });
240
243
  if (!repoAdded) {
@@ -243,6 +246,7 @@ async function installGh(sandbox) {
243
246
  {
244
247
  cmd: "dnf",
245
248
  args: ["install", "-y", "dnf-command(config-manager)"],
249
+ signal,
246
250
  sudo: true
247
251
  },
248
252
  "dnf install dnf-command(config-manager)"
@@ -256,6 +260,7 @@ async function installGh(sandbox) {
256
260
  "--add-repo",
257
261
  "https://cli.github.com/packages/rpm/gh-cli.repo"
258
262
  ],
263
+ signal,
259
264
  sudo: true
260
265
  },
261
266
  "dnf config-manager --add-repo gh-cli.repo"
@@ -266,6 +271,7 @@ async function installGh(sandbox) {
266
271
  {
267
272
  cmd: "dnf",
268
273
  args: ["install", "-y", "gh", "--repo", "gh-cli"],
274
+ signal,
269
275
  sudo: true
270
276
  },
271
277
  "dnf install gh --repo gh-cli"
@@ -283,19 +289,21 @@ function filePath(url, sha256) {
283
289
  const sanitized = basename.replace(/[^a-zA-Z0-9._-]/g, "_");
284
290
  return `/tmp/junior-runtime-${sha256.slice(0, 12)}-${sanitized}`;
285
291
  }
286
- async function installUrl(sandbox, dependency) {
292
+ async function installUrl(sandbox, dependency, signal) {
287
293
  const rpmPath = filePath(dependency.url, dependency.sha256);
288
294
  await runOrThrow(
289
295
  sandbox,
290
296
  {
291
297
  cmd: "curl",
292
- args: ["-fsSL", dependency.url, "-o", rpmPath]
298
+ args: ["-fsSL", dependency.url, "-o", rpmPath],
299
+ signal
293
300
  },
294
301
  `curl download ${dependency.url}`
295
302
  );
296
303
  const checksum = await runNonInteractiveCommand(sandbox, {
297
304
  cmd: "sha256sum",
298
- args: [rpmPath]
305
+ args: [rpmPath],
306
+ signal
299
307
  });
300
308
  const expected = dependency.sha256;
301
309
  const actual = checksum.stdout.trim().split(/\s+/)[0]?.toLowerCase();
@@ -316,12 +324,13 @@ async function installUrl(sandbox, dependency) {
316
324
  {
317
325
  cmd: "dnf",
318
326
  args: ["install", "-y", rpmPath],
327
+ signal,
319
328
  sudo: true
320
329
  },
321
330
  `dnf install ${dependency.url}`
322
331
  );
323
332
  }
324
- async function dependencies(sandbox, values) {
333
+ async function dependencies(sandbox, values, signal) {
325
334
  const system = values.filter(
326
335
  (dependency) => dependency.type === "system"
327
336
  );
@@ -337,16 +346,18 @@ async function dependencies(sandbox, values) {
337
346
  },
338
347
  async () => {
339
348
  for (const dependency of system) {
349
+ signal?.throwIfAborted();
340
350
  if ("url" in dependency) {
341
- await installUrl(sandbox, dependency);
351
+ await installUrl(sandbox, dependency, signal);
342
352
  } else if (dependency.package === "gh") {
343
- await installGh(sandbox);
353
+ await installGh(sandbox, signal);
344
354
  } else {
345
355
  await runOrThrow(
346
356
  sandbox,
347
357
  {
348
358
  cmd: "dnf",
349
359
  args: ["install", "-y", dependency.package],
360
+ signal,
350
361
  sudo: true
351
362
  },
352
363
  `dnf install ${dependency.package}`
@@ -374,7 +385,8 @@ async function dependencies(sandbox, values) {
374
385
  "--prefix",
375
386
  `${SANDBOX_WORKSPACE_ROOT}/.junior`,
376
387
  ...npm
377
- ]
388
+ ],
389
+ signal
378
390
  },
379
391
  "npm install"
380
392
  );
@@ -382,7 +394,7 @@ async function dependencies(sandbox, values) {
382
394
  );
383
395
  }
384
396
  }
385
- async function postinstall(sandbox, commands) {
397
+ async function postinstall(sandbox, commands, signal) {
386
398
  if (commands.length === 0) {
387
399
  return;
388
400
  }
@@ -394,11 +406,13 @@ async function postinstall(sandbox, commands) {
394
406
  },
395
407
  async () => {
396
408
  for (const command of commands) {
409
+ signal?.throwIfAborted();
397
410
  const result = await runNonInteractiveCommand(sandbox, {
398
411
  cmd: command.cmd,
399
412
  args: command.args,
400
413
  login: true,
401
414
  pathPrefix: `${SANDBOX_WORKSPACE_ROOT}/.junior/bin:$PATH`,
415
+ signal,
402
416
  ...command.sudo !== void 0 ? { sudo: command.sudo } : {}
403
417
  });
404
418
  if (result.exitCode !== 0) {
@@ -719,9 +733,9 @@ function createSandboxSession(sandbox, options) {
719
733
  stderr
720
734
  };
721
735
  },
722
- snapshot() {
736
+ snapshot(options2) {
723
737
  return run(async () => {
724
- const snapshot = await session.snapshot();
738
+ const snapshot = await session.snapshot(options2);
725
739
  return { snapshotId: snapshot.snapshotId };
726
740
  });
727
741
  },
@@ -784,7 +798,7 @@ async function setCachedSnapshot(entry) {
784
798
  SNAPSHOT_CACHE_TTL_MS
785
799
  );
786
800
  }
787
- async function build(value, runtime, timeoutMs) {
801
+ async function build(value, runtime, timeoutMs, signal) {
788
802
  return await trace(
789
803
  "sandbox.snapshot.build",
790
804
  "sandbox.snapshot.build",
@@ -799,13 +813,14 @@ async function build(value, runtime, timeoutMs) {
799
813
  await Sandbox.create({
800
814
  timeout: timeoutMs,
801
815
  runtime,
816
+ signal,
802
817
  ...sandboxCredentials ?? {},
803
818
  ...resources ? { resources } : {}
804
819
  })
805
820
  );
806
821
  try {
807
- await dependencies(sandbox, value.dependencies);
808
- await postinstall(sandbox, value.postinstall);
822
+ await dependencies(sandbox, value.dependencies, signal);
823
+ await postinstall(sandbox, value.postinstall, signal);
809
824
  return await trace(
810
825
  "sandbox.snapshot.capture",
811
826
  "sandbox.snapshot.capture",
@@ -813,7 +828,7 @@ async function build(value, runtime, timeoutMs) {
813
828
  "app.sandbox.snapshot.dependency_count": value.dependencyCount
814
829
  },
815
830
  async () => {
816
- const snapshot = await sandbox.snapshot();
831
+ const snapshot = await sandbox.snapshot({ signal });
817
832
  return snapshot.snapshotId;
818
833
  }
819
834
  );
@@ -826,7 +841,8 @@ async function build(value, runtime, timeoutMs) {
826
841
  }
827
842
  );
828
843
  }
829
- async function withBuildLock(profileHash, timeoutMs, callback, canUseCachedSnapshot, onWaitingForLock) {
844
+ async function withBuildLock(profileHash, timeoutMs, callback, canUseCachedSnapshot, onWaitingForLock, signal) {
845
+ signal?.throwIfAborted();
830
846
  const state = getStateAdapter();
831
847
  await state.connect();
832
848
  const lockKey = profileLockKey(profileHash);
@@ -850,6 +866,7 @@ async function withBuildLock(profileHash, timeoutMs, callback, canUseCachedSnaps
850
866
  await onWaitingForLock?.();
851
867
  const waitUntil = Date.now() + lockTtlMs + SNAPSHOT_WAIT_FOR_LOCK_BUFFER_MS;
852
868
  while (Date.now() < waitUntil) {
869
+ signal?.throwIfAborted();
853
870
  const cached2 = await getCachedSnapshot(profileHash);
854
871
  if (cached2?.snapshotId && canUseCachedSnapshot(cached2)) {
855
872
  return {
@@ -869,8 +886,9 @@ async function withBuildLock(profileHash, timeoutMs, callback, canUseCachedSnaps
869
886
  await state.releaseLock(lock);
870
887
  }
871
888
  }
872
- await sleep(500);
889
+ await sleep(500, signal);
873
890
  }
891
+ signal?.throwIfAborted();
874
892
  const cached = await getCachedSnapshot(profileHash);
875
893
  if (cached?.snapshotId && canUseCachedSnapshot(cached)) {
876
894
  return {
@@ -909,6 +927,7 @@ async function resolve(params) {
909
927
  "app.sandbox.snapshot.force_rebuild": Boolean(params.forceRebuild)
910
928
  },
911
929
  async () => {
930
+ params.signal?.throwIfAborted();
912
931
  await params.onProgress?.("resolve_start");
913
932
  const currentProfile = create(params.runtime);
914
933
  if (!currentProfile) {
@@ -963,7 +982,8 @@ async function resolve(params) {
963
982
  const nextSnapshotId = await build(
964
983
  currentProfile,
965
984
  params.runtime,
966
- params.timeoutMs
985
+ params.timeoutMs,
986
+ params.signal
967
987
  );
968
988
  await setCachedSnapshot({
969
989
  profileHash: currentProfile.hash,
@@ -978,7 +998,8 @@ async function resolve(params) {
978
998
  canUseCachedSnapshot,
979
999
  async () => {
980
1000
  await params.onProgress?.("waiting_for_lock");
981
- }
1001
+ },
1002
+ params.signal
982
1003
  );
983
1004
  return {
984
1005
  snapshotId: lockResult.snapshotId,
@@ -22,28 +22,28 @@ import {
22
22
  persistThreadStateById,
23
23
  stripRuntimeTurnContext,
24
24
  updateConversationStats
25
- } from "./chunk-JQWP6V22.js";
25
+ } from "./chunk-Z2XXPUZG.js";
26
26
  import {
27
27
  createPluginEmbedder,
28
28
  createPluginLogger,
29
29
  createPluginModel,
30
30
  createPluginState,
31
31
  getPlugins
32
- } from "./chunk-24B5R6OU.js";
32
+ } from "./chunk-7HYV7KFM.js";
33
33
  import {
34
34
  getDb
35
- } from "./chunk-M243JMZH.js";
35
+ } from "./chunk-254MFDOF.js";
36
36
  import {
37
37
  getStateAdapter
38
- } from "./chunk-ALAKN7LR.js";
38
+ } from "./chunk-UURFXX66.js";
39
39
  import {
40
40
  ProviderError,
41
41
  getProviderErrorAttributes,
42
42
  getProviderErrorUserMessage
43
- } from "./chunk-VURFJVFH.js";
43
+ } from "./chunk-IDXLBKPS.js";
44
44
  import {
45
45
  buildTurnFailureResponse
46
- } from "./chunk-ALYQOZG7.js";
46
+ } from "./chunk-JZ47AFSH.js";
47
47
  import {
48
48
  parseSlackMessageTs
49
49
  } from "./chunk-F3B2YJ76.js";
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-6GWA276C.js";
14
14
  import {
15
15
  getDeploymentTelemetryAttributes
16
- } from "./chunk-DWOH57FW.js";
16
+ } from "./chunk-IK4QSS5H.js";
17
17
 
18
18
  // src/chat/logging.ts
19
19
  import path from "path";
@@ -13,7 +13,7 @@ import {
13
13
  persistAuthPauseTurnState,
14
14
  requireTurnFailureEventId,
15
15
  scheduleSessionCompletedPluginTasks
16
- } from "./chunk-BHXW734F.js";
16
+ } from "./chunk-JYDIBXFY.js";
17
17
  import {
18
18
  buildSentryConversationUrl
19
19
  } from "./chunk-4CODA7P5.js";
@@ -40,7 +40,7 @@ import {
40
40
  resolveBaseUrl,
41
41
  resolvePluginOAuthAccount,
42
42
  truncateStatusText
43
- } from "./chunk-TKUCRFNX.js";
43
+ } from "./chunk-3DBMANUI.js";
44
44
  import {
45
45
  JUNIOR_THREAD_STATE_TTL_MS,
46
46
  TurnSliceLimitExceededError,
@@ -70,7 +70,7 @@ import {
70
70
  recordDeliveredAssistantMessage,
71
71
  turnHasReply,
72
72
  updateConversationStats
73
- } from "./chunk-JQWP6V22.js";
73
+ } from "./chunk-Z2XXPUZG.js";
74
74
  import {
75
75
  SlackActionError,
76
76
  getDashboardConversationLink,
@@ -79,19 +79,19 @@ import {
79
79
  getSlackClient,
80
80
  isDmChannel,
81
81
  normalizeSlackConversationId
82
- } from "./chunk-24B5R6OU.js";
82
+ } from "./chunk-7HYV7KFM.js";
83
83
  import {
84
84
  getConversationEventStore,
85
85
  getConversationStore,
86
86
  parseDestination,
87
87
  requireSlackDestination,
88
88
  sameDestination
89
- } from "./chunk-M243JMZH.js";
89
+ } from "./chunk-254MFDOF.js";
90
90
  import {
91
91
  acquireActiveLock,
92
92
  getDefaultRedisStateAdapterFor,
93
93
  getStateAdapter
94
- } from "./chunk-ALAKN7LR.js";
94
+ } from "./chunk-UURFXX66.js";
95
95
  import {
96
96
  FUNCTION_TIMEOUT_BUFFER_SECONDS,
97
97
  botConfig,
@@ -100,7 +100,7 @@ import {
100
100
  getRuntimeMetadata,
101
101
  normalizeSlackEmojiName,
102
102
  standardModelId
103
- } from "./chunk-VURFJVFH.js";
103
+ } from "./chunk-IDXLBKPS.js";
104
104
  import {
105
105
  parseSlackThreadId,
106
106
  readSlackRawMessageContext,
@@ -109,15 +109,15 @@ import {
109
109
  } from "./chunk-HDFGNU5E.js";
110
110
  import {
111
111
  discoverSkills
112
- } from "./chunk-EIVE6GL4.js";
112
+ } from "./chunk-TRECK7RV.js";
113
113
  import {
114
114
  pluginCatalogRuntime
115
- } from "./chunk-GNNV3UTY.js";
115
+ } from "./chunk-WUP7NWMP.js";
116
116
  import {
117
117
  buildOAuthTokenRequest,
118
118
  hasRequiredOAuthScope,
119
119
  parseOAuthTokenResponse
120
- } from "./chunk-XAI2HNAY.js";
120
+ } from "./chunk-ET2SDCNV.js";
121
121
  import {
122
122
  createSlackResumeActor,
123
123
  isUserActor,
@@ -128,7 +128,7 @@ import {
128
128
  logException,
129
129
  logInfo,
130
130
  logWarn
131
- } from "./chunk-ALYQOZG7.js";
131
+ } from "./chunk-JZ47AFSH.js";
132
132
  import {
133
133
  isRecord,
134
134
  toOptionalNumber,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pluginCatalogRuntime
3
- } from "./chunk-GNNV3UTY.js";
3
+ } from "./chunk-WUP7NWMP.js";
4
4
 
5
5
  // src/chat/plugins/validation.ts
6
6
  import { isDeepStrictEqual } from "util";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pluginCatalogRuntime
3
- } from "./chunk-GNNV3UTY.js";
3
+ } from "./chunk-WUP7NWMP.js";
4
4
  import {
5
5
  logWarn
6
- } from "./chunk-ALYQOZG7.js";
6
+ } from "./chunk-JZ47AFSH.js";
7
7
  import {
8
8
  skillRoots
9
9
  } from "./chunk-H4HBKISO.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getChatConfig
3
- } from "./chunk-VURFJVFH.js";
3
+ } from "./chunk-IDXLBKPS.js";
4
4
 
5
5
  // src/chat/state/adapter.ts
6
6
  import { createMemoryState } from "@chat-adapter/state-memory";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-PE44LDDQ.js";
4
4
  import {
5
5
  normalizeSlackConversationId
6
- } from "./chunk-24B5R6OU.js";
6
+ } from "./chunk-7HYV7KFM.js";
7
7
  import {
8
8
  parseSlackThreadId
9
9
  } from "./chunk-HDFGNU5E.js";