@sentry/junior-plugin-api 0.120.0 → 0.122.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -291,6 +291,14 @@ var PluginToolInputError = class extends Error {
291
291
  this.name = "PluginToolInputError";
292
292
  }
293
293
  };
294
+ var pluginToolContentSchema = z6.discriminatedUnion("type", [
295
+ z6.object({ type: z6.literal("text"), text: z6.string() }).strict(),
296
+ z6.object({
297
+ type: z6.literal("image"),
298
+ data: z6.string(),
299
+ mimeType: z6.string()
300
+ }).strict()
301
+ ]);
294
302
  var pluginToolContinuationSchema = z6.object({
295
303
  arguments: z6.record(z6.string(), z6.unknown()),
296
304
  reason: z6.string().min(1).optional()
@@ -310,6 +318,9 @@ var pluginToolResultSchema = z6.object({
310
318
  error: z6.union([pluginToolErrorSchema, z6.string()]).optional()
311
319
  }).passthrough();
312
320
  var toolApprovalModeSchema = z6.enum(["auto", "review", "approve"]);
321
+ function isPluginToolResultEnvelope(value) {
322
+ return value !== null && typeof value === "object" && Array.isArray(value.content) && "details" in value;
323
+ }
313
324
  function formatZodPath(path) {
314
325
  return path.length > 0 ? path.map(String).join(".") : "root";
315
326
  }
@@ -362,6 +373,14 @@ function createZodTool(definition, helperName) {
362
373
  input,
363
374
  options
364
375
  );
376
+ if (isPluginToolResultEnvelope(result)) {
377
+ return {
378
+ content: z6.array(pluginToolContentSchema).parse(result.content),
379
+ details: outputSchema.parse(
380
+ pluginToolResultSchema.parse(result.details)
381
+ )
382
+ };
383
+ }
365
384
  return outputSchema.parse(pluginToolResultSchema.parse(result));
366
385
  }
367
386
  } : {}
@@ -609,6 +628,7 @@ export {
609
628
  pluginRunTranscriptEntrySchema,
610
629
  pluginRunTranscriptProvenanceSchema,
611
630
  pluginStoredTokensSchema,
631
+ pluginToolContentSchema,
612
632
  pluginToolContinuationSchema,
613
633
  pluginToolErrorSchema,
614
634
  pluginToolResultSchema,
package/dist/tools.d.ts CHANGED
@@ -53,14 +53,22 @@ export interface PluginEgress {
53
53
  request: Request;
54
54
  }): Promise<Response>;
55
55
  }
56
- export type PluginMcpContent = {
57
- type: "text";
58
- text: string;
59
- } | {
60
- type: "image";
61
- data: string;
62
- mimeType: string;
63
- };
56
+ export declare const pluginToolContentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
57
+ type: z.ZodLiteral<"text">;
58
+ text: z.ZodString;
59
+ }, z.core.$strict>, z.ZodObject<{
60
+ type: z.ZodLiteral<"image">;
61
+ data: z.ZodString;
62
+ mimeType: z.ZodString;
63
+ }, z.core.$strict>], "type">;
64
+ /** Model-visible content returned by a plugin tool. */
65
+ export type PluginToolContent = z.output<typeof pluginToolContentSchema>;
66
+ /** Standard tool result envelope with separate model content and runtime details. */
67
+ export interface PluginToolResultEnvelope<TDetails = PluginToolResult> {
68
+ content: PluginToolContent[];
69
+ details: TDetails;
70
+ }
71
+ export type PluginMcpContent = PluginToolContent;
64
72
  /** Successful raw provider result returned to a plugin-owned wrapper tool. */
65
73
  export type PluginMcpToolSuccess = {
66
74
  content: PluginMcpContent[];
@@ -206,7 +214,7 @@ export interface ToolApprovalMetadata<TInput = unknown> {
206
214
  */
207
215
  describeProposal?(input: TInput): string;
208
216
  }
209
- export interface PluginToolDefinition<TInput = unknown, TOutput = unknown> extends ToolApprovalMetadata<TInput> {
217
+ export interface PluginToolDefinition<TInput = unknown, TOutput = unknown, TExecuteOutput = TOutput> extends ToolApprovalMetadata<TInput> {
210
218
  description: string;
211
219
  executionMode?: unknown;
212
220
  inputSchema: unknown;
@@ -229,18 +237,19 @@ export interface PluginToolDefinition<TInput = unknown, TOutput = unknown> exten
229
237
  * future major version.
230
238
  */
231
239
  promptSnippet?: string;
232
- execute?: PluginToolExecute<TInput, TOutput>;
240
+ execute?: PluginToolExecute<TInput, TExecuteOutput>;
233
241
  }
234
- type ZodPluginToolDefinition<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodType<PluginToolResult>> = Omit<PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>>, "inputSchema" | "outputSchema" | "prepareArguments" | "execute"> & {
242
+ type ZodPluginToolDefinition<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodType<PluginToolResult>, TExecuteResult extends z.input<TOutputSchema> | PluginToolResultEnvelope<z.input<TOutputSchema>>> = Omit<PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>>, "inputSchema" | "outputSchema" | "prepareArguments" | "execute"> & {
235
243
  inputSchema: TInputSchema;
236
244
  outputSchema: TOutputSchema;
237
245
  prepareArguments?: (args: unknown) => z.input<TInputSchema>;
238
- execute?: (input: z.output<TInputSchema>, options: PluginToolExecuteOptions) => Promise<z.input<TOutputSchema>> | z.input<TOutputSchema>;
246
+ execute?: (input: z.output<TInputSchema>, options: PluginToolExecuteOptions) => Promise<TExecuteResult> | TExecuteResult;
239
247
  };
248
+ type ParsedPluginToolExecuteResult<TOutputSchema extends ZodTypeAny, TResult> = TResult extends PluginToolResultEnvelope<unknown> ? PluginToolResultEnvelope<z.output<TOutputSchema>> : z.output<TOutputSchema>;
240
249
  /** Define a plugin tool with Zod input parsing and validated structured results. */
241
- export declare function zodTool<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodType<PluginToolResult>>(definition: ZodPluginToolDefinition<TInputSchema, TOutputSchema>): PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>>;
250
+ export declare function zodTool<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodType<PluginToolResult>, TExecuteResult extends z.input<TOutputSchema> | PluginToolResultEnvelope<z.input<TOutputSchema>>>(definition: ZodPluginToolDefinition<TInputSchema, TOutputSchema, TExecuteResult>): PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>, ParsedPluginToolExecuteResult<TOutputSchema, TExecuteResult>>;
242
251
  /** Define a plugin tool with Zod input parsing and the structured result contract. */
243
- export declare function definePluginTool<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodType<PluginToolResult>>(definition: ZodPluginToolDefinition<TInputSchema, TOutputSchema>): PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>>;
252
+ export declare function definePluginTool<TInputSchema extends ZodTypeAny, TOutputSchema extends ZodType<PluginToolResult>, TExecuteResult extends z.input<TOutputSchema> | PluginToolResultEnvelope<z.input<TOutputSchema>>>(definition: ZodPluginToolDefinition<TInputSchema, TOutputSchema, TExecuteResult>): PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>, ParsedPluginToolExecuteResult<TOutputSchema, TExecuteResult>>;
244
253
  export interface SlackToolRegistrationHookContext {
245
254
  /**
246
255
  * Capabilities of the source Slack conversation exposed to this plugin.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/junior-plugin-api",
3
- "version": "0.120.0",
3
+ "version": "0.122.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
package/src/tools.ts CHANGED
@@ -67,9 +67,27 @@ export interface PluginEgress {
67
67
  }): Promise<Response>;
68
68
  }
69
69
 
70
- export type PluginMcpContent =
71
- | { type: "text"; text: string }
72
- | { type: "image"; data: string; mimeType: string };
70
+ export const pluginToolContentSchema = z.discriminatedUnion("type", [
71
+ z.object({ type: z.literal("text"), text: z.string() }).strict(),
72
+ z
73
+ .object({
74
+ type: z.literal("image"),
75
+ data: z.string(),
76
+ mimeType: z.string(),
77
+ })
78
+ .strict(),
79
+ ]);
80
+
81
+ /** Model-visible content returned by a plugin tool. */
82
+ export type PluginToolContent = z.output<typeof pluginToolContentSchema>;
83
+
84
+ /** Standard tool result envelope with separate model content and runtime details. */
85
+ export interface PluginToolResultEnvelope<TDetails = PluginToolResult> {
86
+ content: PluginToolContent[];
87
+ details: TDetails;
88
+ }
89
+
90
+ export type PluginMcpContent = PluginToolContent;
73
91
 
74
92
  /** Successful raw provider result returned to a plugin-owned wrapper tool. */
75
93
  export type PluginMcpToolSuccess = {
@@ -234,6 +252,7 @@ export interface ToolApprovalMetadata<TInput = unknown> {
234
252
  export interface PluginToolDefinition<
235
253
  TInput = unknown,
236
254
  TOutput = unknown,
255
+ TExecuteOutput = TOutput,
237
256
  > extends ToolApprovalMetadata<TInput> {
238
257
  description: string;
239
258
  executionMode?: unknown;
@@ -257,12 +276,15 @@ export interface PluginToolDefinition<
257
276
  * future major version.
258
277
  */
259
278
  promptSnippet?: string;
260
- execute?: PluginToolExecute<TInput, TOutput>;
279
+ execute?: PluginToolExecute<TInput, TExecuteOutput>;
261
280
  }
262
281
 
263
282
  type ZodPluginToolDefinition<
264
283
  TInputSchema extends ZodTypeAny,
265
284
  TOutputSchema extends ZodType<PluginToolResult>,
285
+ TExecuteResult extends
286
+ | z.input<TOutputSchema>
287
+ | PluginToolResultEnvelope<z.input<TOutputSchema>>,
266
288
  > = Omit<
267
289
  PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>>,
268
290
  "inputSchema" | "outputSchema" | "prepareArguments" | "execute"
@@ -273,9 +295,25 @@ type ZodPluginToolDefinition<
273
295
  execute?: (
274
296
  input: z.output<TInputSchema>,
275
297
  options: PluginToolExecuteOptions,
276
- ) => Promise<z.input<TOutputSchema>> | z.input<TOutputSchema>;
298
+ ) => Promise<TExecuteResult> | TExecuteResult;
277
299
  };
278
300
 
301
+ type ParsedPluginToolExecuteResult<TOutputSchema extends ZodTypeAny, TResult> =
302
+ TResult extends PluginToolResultEnvelope<unknown>
303
+ ? PluginToolResultEnvelope<z.output<TOutputSchema>>
304
+ : z.output<TOutputSchema>;
305
+
306
+ function isPluginToolResultEnvelope(
307
+ value: unknown,
308
+ ): value is PluginToolResultEnvelope<unknown> {
309
+ return (
310
+ value !== null &&
311
+ typeof value === "object" &&
312
+ Array.isArray((value as { content?: unknown }).content) &&
313
+ "details" in value
314
+ );
315
+ }
316
+
279
317
  function formatZodPath(path: readonly PropertyKey[]): string {
280
318
  return path.length > 0 ? path.map(String).join(".") : "root";
281
319
  }
@@ -304,10 +342,21 @@ function parsePluginToolInput<TInputSchema extends ZodTypeAny>(
304
342
  function createZodTool<
305
343
  TInputSchema extends ZodTypeAny,
306
344
  TOutputSchema extends ZodType<PluginToolResult>,
345
+ TExecuteResult extends
346
+ | z.input<TOutputSchema>
347
+ | PluginToolResultEnvelope<z.input<TOutputSchema>>,
307
348
  >(
308
- definition: ZodPluginToolDefinition<TInputSchema, TOutputSchema>,
349
+ definition: ZodPluginToolDefinition<
350
+ TInputSchema,
351
+ TOutputSchema,
352
+ TExecuteResult
353
+ >,
309
354
  helperName: "definePluginTool" | "zodTool",
310
- ): PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>> {
355
+ ): PluginToolDefinition<
356
+ z.output<TInputSchema>,
357
+ z.output<TOutputSchema>,
358
+ ParsedPluginToolExecuteResult<TOutputSchema, TExecuteResult>
359
+ > {
311
360
  const { inputSchema, outputSchema, prepareArguments, execute, ...tool } =
312
361
  definition;
313
362
  let modelInputSchema: unknown;
@@ -345,20 +394,43 @@ function createZodTool<
345
394
  input as z.output<TInputSchema>,
346
395
  options,
347
396
  );
397
+ if (isPluginToolResultEnvelope(result)) {
398
+ return {
399
+ content: z.array(pluginToolContentSchema).parse(result.content),
400
+ details: outputSchema.parse(
401
+ pluginToolResultSchema.parse(result.details),
402
+ ),
403
+ };
404
+ }
348
405
  return outputSchema.parse(pluginToolResultSchema.parse(result));
349
406
  },
350
407
  }
351
408
  : {}),
352
- };
409
+ } as PluginToolDefinition<
410
+ z.output<TInputSchema>,
411
+ z.output<TOutputSchema>,
412
+ ParsedPluginToolExecuteResult<TOutputSchema, TExecuteResult>
413
+ >;
353
414
  }
354
415
 
355
416
  /** Define a plugin tool with Zod input parsing and validated structured results. */
356
417
  export function zodTool<
357
418
  TInputSchema extends ZodTypeAny,
358
419
  TOutputSchema extends ZodType<PluginToolResult>,
420
+ TExecuteResult extends
421
+ | z.input<TOutputSchema>
422
+ | PluginToolResultEnvelope<z.input<TOutputSchema>>,
359
423
  >(
360
- definition: ZodPluginToolDefinition<TInputSchema, TOutputSchema>,
361
- ): PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>> {
424
+ definition: ZodPluginToolDefinition<
425
+ TInputSchema,
426
+ TOutputSchema,
427
+ TExecuteResult
428
+ >,
429
+ ): PluginToolDefinition<
430
+ z.output<TInputSchema>,
431
+ z.output<TOutputSchema>,
432
+ ParsedPluginToolExecuteResult<TOutputSchema, TExecuteResult>
433
+ > {
362
434
  return createZodTool(definition, "zodTool");
363
435
  }
364
436
 
@@ -366,9 +438,20 @@ export function zodTool<
366
438
  export function definePluginTool<
367
439
  TInputSchema extends ZodTypeAny,
368
440
  TOutputSchema extends ZodType<PluginToolResult>,
441
+ TExecuteResult extends
442
+ | z.input<TOutputSchema>
443
+ | PluginToolResultEnvelope<z.input<TOutputSchema>>,
369
444
  >(
370
- definition: ZodPluginToolDefinition<TInputSchema, TOutputSchema>,
371
- ): PluginToolDefinition<z.output<TInputSchema>, z.output<TOutputSchema>> {
445
+ definition: ZodPluginToolDefinition<
446
+ TInputSchema,
447
+ TOutputSchema,
448
+ TExecuteResult
449
+ >,
450
+ ): PluginToolDefinition<
451
+ z.output<TInputSchema>,
452
+ z.output<TOutputSchema>,
453
+ ParsedPluginToolExecuteResult<TOutputSchema, TExecuteResult>
454
+ > {
372
455
  return createZodTool(definition, "definePluginTool");
373
456
  }
374
457