@promptbook/browser 0.112.0-20 → 0.112.0-22

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/esm/index.es.js CHANGED
@@ -29,7 +29,7 @@ const BOOK_LANGUAGE_VERSION = '2.0.0';
29
29
  * @generated
30
30
  * @see https://github.com/webgptorg/promptbook
31
31
  */
32
- const PROMPTBOOK_ENGINE_VERSION = '0.112.0-20';
32
+ const PROMPTBOOK_ENGINE_VERSION = '0.112.0-22';
33
33
  /**
34
34
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
35
35
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -15041,8 +15041,9 @@ function createTimeoutSystemMessage(extraInstructions) {
15041
15041
  return spaceTrim$1((block) => `
15042
15042
  Timeout scheduling:
15043
15043
  - Use "set_timeout" to wake this same chat thread in the future.
15044
- - Use "list_timeouts" to review timeouts across all chats for the same user+agent scope.
15045
- - "cancel_timeout" accepts a timeout id from any chat in this same user+agent scope.
15044
+ - Use "list_timeouts" to review timeout ids/details across all chats for the same user+agent scope.
15045
+ - "cancel_timeout" accepts either one timeout id or \`allActive: true\` to cancel all active timeouts in this same user+agent scope.
15046
+ - Use "update_timeout" to pause/resume, edit next run, edit recurrence, or update timeout payload details.
15046
15047
  - When one timeout elapses, you will receive a new user-like message that explicitly says it is a timeout wake-up and includes the \`timeoutId\`.
15047
15048
  - Do not claim a timer was set or cancelled unless the tool confirms it.
15048
15049
  ${block(extraInstructions)}
@@ -15169,9 +15170,18 @@ const parseTimeoutToolArgs = {
15169
15170
  */
15170
15171
  cancel(args) {
15171
15172
  const timeoutId = typeof args.timeoutId === 'string' ? args.timeoutId.trim() : '';
15173
+ const allActive = args.allActive === true;
15174
+ if (timeoutId && allActive) {
15175
+ throw new PipelineExecutionError(spaceTrim$1(`
15176
+ Timeout cancellation must target either one \`timeoutId\` or \`allActive: true\`, not both.
15177
+ `));
15178
+ }
15179
+ if (allActive) {
15180
+ return { allActive: true };
15181
+ }
15172
15182
  if (!timeoutId) {
15173
15183
  throw new PipelineExecutionError(spaceTrim$1(`
15174
- Timeout \`timeoutId\` is required.
15184
+ Timeout \`timeoutId\` is required unless you pass \`allActive: true\`.
15175
15185
  `));
15176
15186
  }
15177
15187
  return { timeoutId };
@@ -15201,6 +15211,111 @@ const parseTimeoutToolArgs = {
15201
15211
  limit: parsedLimit,
15202
15212
  };
15203
15213
  },
15214
+ /**
15215
+ * Parses `update_timeout` input.
15216
+ */
15217
+ update(args) {
15218
+ const timeoutId = typeof args.timeoutId === 'string' ? args.timeoutId.trim() : '';
15219
+ const allActive = args.allActive === true;
15220
+ if (timeoutId && allActive) {
15221
+ throw new PipelineExecutionError(spaceTrim$1(`
15222
+ Timeout update must target either one \`timeoutId\` or \`allActive: true\`, not both.
15223
+ `));
15224
+ }
15225
+ if (!timeoutId && !allActive) {
15226
+ throw new PipelineExecutionError(spaceTrim$1(`
15227
+ Timeout update requires one \`timeoutId\` or \`allActive: true\`.
15228
+ `));
15229
+ }
15230
+ const patch = {};
15231
+ if (typeof args.dueAt === 'string' && args.dueAt.trim().length > 0) {
15232
+ const normalizedDueAt = args.dueAt.trim();
15233
+ const dueAtTimestamp = Date.parse(normalizedDueAt);
15234
+ if (!Number.isFinite(dueAtTimestamp)) {
15235
+ throw new PipelineExecutionError(spaceTrim$1(`
15236
+ Timeout \`dueAt\` must be one valid ISO timestamp.
15237
+ `));
15238
+ }
15239
+ patch.dueAt = new Date(dueAtTimestamp).toISOString();
15240
+ }
15241
+ if (typeof args.extendByMs === 'number') {
15242
+ if (!Number.isFinite(args.extendByMs) || args.extendByMs <= 0) {
15243
+ throw new PipelineExecutionError(spaceTrim$1(`
15244
+ Timeout \`extendByMs\` must be a positive number of milliseconds.
15245
+ `));
15246
+ }
15247
+ patch.extendByMs = Math.floor(args.extendByMs);
15248
+ }
15249
+ if (patch.dueAt !== undefined && patch.extendByMs !== undefined) {
15250
+ throw new PipelineExecutionError(spaceTrim$1(`
15251
+ Timeout update cannot include both \`dueAt\` and \`extendByMs\`.
15252
+ `));
15253
+ }
15254
+ if (args.recurrenceIntervalMs === null) {
15255
+ patch.recurrenceIntervalMs = null;
15256
+ }
15257
+ else if (typeof args.recurrenceIntervalMs === 'number') {
15258
+ if (!Number.isFinite(args.recurrenceIntervalMs) || args.recurrenceIntervalMs <= 0) {
15259
+ throw new PipelineExecutionError(spaceTrim$1(`
15260
+ Timeout \`recurrenceIntervalMs\` must be a positive number of milliseconds or \`null\`.
15261
+ `));
15262
+ }
15263
+ patch.recurrenceIntervalMs = Math.floor(args.recurrenceIntervalMs);
15264
+ }
15265
+ if (args.message === null) {
15266
+ patch.message = null;
15267
+ }
15268
+ else if (typeof args.message === 'string') {
15269
+ const normalizedMessage = args.message.trim();
15270
+ patch.message = normalizedMessage.length > 0 ? normalizedMessage : null;
15271
+ }
15272
+ if (args.parameters !== undefined) {
15273
+ if (!args.parameters || typeof args.parameters !== 'object' || Array.isArray(args.parameters)) {
15274
+ throw new PipelineExecutionError(spaceTrim$1(`
15275
+ Timeout \`parameters\` must be one JSON object.
15276
+ `));
15277
+ }
15278
+ patch.parameters = args.parameters;
15279
+ }
15280
+ if (typeof args.paused === 'boolean') {
15281
+ patch.paused = args.paused;
15282
+ }
15283
+ if (allActive) {
15284
+ if (patch.paused === undefined) {
15285
+ throw new PipelineExecutionError(spaceTrim$1(`
15286
+ Bulk timeout update with \`allActive: true\` requires \`paused\` to be explicitly set.
15287
+ `));
15288
+ }
15289
+ const hasSingleOnlyPatch = patch.dueAt !== undefined ||
15290
+ patch.extendByMs !== undefined ||
15291
+ patch.recurrenceIntervalMs !== undefined ||
15292
+ patch.message !== undefined ||
15293
+ patch.parameters !== undefined;
15294
+ if (hasSingleOnlyPatch) {
15295
+ throw new PipelineExecutionError(spaceTrim$1(`
15296
+ Bulk timeout update only supports the \`paused\` field.
15297
+ `));
15298
+ }
15299
+ return {
15300
+ allActive: true,
15301
+ paused: patch.paused,
15302
+ };
15303
+ }
15304
+ if (!timeoutId) {
15305
+ throw new PipelineExecutionError(spaceTrim$1(`
15306
+ Timeout \`timeoutId\` is required for single-timeout updates.
15307
+ `));
15308
+ }
15309
+ if (Object.keys(patch).length === 0) {
15310
+ throw new PipelineExecutionError(spaceTrim$1(`
15311
+ Timeout update must include at least one editable field.
15312
+ `));
15313
+ }
15314
+ return {
15315
+ timeoutId,
15316
+ patch,
15317
+ };
15318
+ },
15204
15319
  };
15205
15320
 
15206
15321
  /**
@@ -15212,6 +15327,7 @@ const TimeoutToolNames = {
15212
15327
  set: 'set_timeout',
15213
15328
  cancel: 'cancel_timeout',
15214
15329
  list: 'list_timeouts',
15330
+ update: 'update_timeout',
15215
15331
  };
15216
15332
 
15217
15333
  /**
@@ -15244,6 +15360,18 @@ function normalizePromptParameters(rawParameters) {
15244
15360
  return Object.fromEntries(normalizedEntries);
15245
15361
  }
15246
15362
 
15363
+ /**
15364
+ * Maximum number of timeout rows rendered into the assistant-visible `list_timeouts` message.
15365
+ *
15366
+ * @private internal USE TIMEOUT constant
15367
+ */
15368
+ const MAX_ASSISTANT_VISIBLE_TIMEOUT_ROWS = 20;
15369
+ /**
15370
+ * Maximum number of timeout ids rendered in bulk-action summaries.
15371
+ *
15372
+ * @private internal USE TIMEOUT constant
15373
+ */
15374
+ const MAX_ASSISTANT_VISIBLE_BULK_TIMEOUT_IDS = 10;
15247
15375
  /**
15248
15376
  * Gets `USE TIMEOUT` tool function implementations.
15249
15377
  *
@@ -15289,6 +15417,23 @@ function createTimeoutToolFunctions() {
15289
15417
  try {
15290
15418
  const parsedArgs = parseTimeoutToolArgs.cancel(args);
15291
15419
  const cancelledTimeout = await adapter.cancelTimeout(parsedArgs, runtimeContext);
15420
+ if (cancelledTimeout.status === 'cancelled_all') {
15421
+ const result = {
15422
+ action: 'cancel',
15423
+ status: 'cancelled_all',
15424
+ cancelledCount: cancelledTimeout.cancelledCount || 0,
15425
+ cancelledTimeoutIds: cancelledTimeout.cancelledTimeoutIds || [],
15426
+ hasMore: cancelledTimeout.hasMore,
15427
+ };
15428
+ return createToolExecutionEnvelope({
15429
+ assistantMessage: createBulkCancelAssistantMessage({
15430
+ cancelledCount: result.cancelledCount || 0,
15431
+ cancelledTimeoutIds: result.cancelledTimeoutIds || [],
15432
+ hasMore: result.hasMore,
15433
+ }),
15434
+ toolResult: result,
15435
+ });
15436
+ }
15292
15437
  const result = {
15293
15438
  action: 'cancel',
15294
15439
  status: cancelledTimeout.status,
@@ -15327,7 +15472,10 @@ function createTimeoutToolFunctions() {
15327
15472
  total: listedTimeouts.total,
15328
15473
  };
15329
15474
  return createToolExecutionEnvelope({
15330
- assistantMessage: listedTimeouts.total === 1 ? 'Found 1 timeout.' : `Found ${listedTimeouts.total} timeouts.`,
15475
+ assistantMessage: createListedTimeoutsAssistantMessage({
15476
+ total: listedTimeouts.total,
15477
+ items: listedTimeouts.items,
15478
+ }),
15331
15479
  toolResult: result,
15332
15480
  });
15333
15481
  }
@@ -15340,8 +15488,155 @@ function createTimeoutToolFunctions() {
15340
15488
  return JSON.stringify(result);
15341
15489
  }
15342
15490
  },
15491
+ async [TimeoutToolNames.update](args) {
15492
+ const runtimeContext = resolveTimeoutRuntimeContext(args);
15493
+ const { adapter, disabledResult } = getTimeoutToolRuntimeAdapterOrDisabledResult('update', runtimeContext);
15494
+ if (!adapter || disabledResult) {
15495
+ return JSON.stringify(disabledResult);
15496
+ }
15497
+ try {
15498
+ const parsedArgs = parseTimeoutToolArgs.update(args);
15499
+ const updatedTimeout = await adapter.updateTimeout(parsedArgs, runtimeContext);
15500
+ if (updatedTimeout.status === 'updated_all') {
15501
+ const result = {
15502
+ action: 'update',
15503
+ status: 'updated_all',
15504
+ updatedCount: updatedTimeout.updatedCount,
15505
+ matchedCount: updatedTimeout.matchedCount,
15506
+ updatedTimeoutIds: updatedTimeout.updatedTimeoutIds,
15507
+ hasMore: updatedTimeout.hasMore,
15508
+ };
15509
+ return createToolExecutionEnvelope({
15510
+ assistantMessage: createBulkUpdateAssistantMessage({
15511
+ paused: 'allActive' in parsedArgs && parsedArgs.allActive ? parsedArgs.paused : false,
15512
+ updatedCount: updatedTimeout.updatedCount,
15513
+ matchedCount: updatedTimeout.matchedCount,
15514
+ updatedTimeoutIds: updatedTimeout.updatedTimeoutIds,
15515
+ hasMore: updatedTimeout.hasMore,
15516
+ }),
15517
+ toolResult: result,
15518
+ });
15519
+ }
15520
+ if (updatedTimeout.status === 'not_found') {
15521
+ const result = {
15522
+ action: 'update',
15523
+ status: 'not_found',
15524
+ timeoutId: updatedTimeout.timeoutId,
15525
+ };
15526
+ return createToolExecutionEnvelope({
15527
+ assistantMessage: 'The timeout was not found.',
15528
+ toolResult: result,
15529
+ });
15530
+ }
15531
+ if (updatedTimeout.status === 'conflict') {
15532
+ const conflictMessage = updatedTimeout.reason === 'running'
15533
+ ? 'Running timeout cannot be edited.'
15534
+ : 'Finished timeout cannot be edited.';
15535
+ const result = {
15536
+ action: 'update',
15537
+ status: 'conflict',
15538
+ timeoutId: updatedTimeout.timeoutId,
15539
+ message: conflictMessage,
15540
+ };
15541
+ return createToolExecutionEnvelope({
15542
+ assistantMessage: conflictMessage,
15543
+ toolResult: result,
15544
+ });
15545
+ }
15546
+ const result = {
15547
+ action: 'update',
15548
+ status: 'updated',
15549
+ timeoutId: updatedTimeout.timeout.timeoutId,
15550
+ dueAt: updatedTimeout.timeout.dueAt,
15551
+ paused: updatedTimeout.timeout.paused,
15552
+ recurrenceIntervalMs: updatedTimeout.timeout.recurrenceIntervalMs,
15553
+ };
15554
+ return createToolExecutionEnvelope({
15555
+ assistantMessage: `Updated timeout ${JSON.stringify(updatedTimeout.timeout.timeoutId)}.`,
15556
+ toolResult: result,
15557
+ });
15558
+ }
15559
+ catch (error) {
15560
+ const result = {
15561
+ action: 'update',
15562
+ status: 'error',
15563
+ message: error instanceof Error ? error.message : String(error),
15564
+ };
15565
+ return JSON.stringify(result);
15566
+ }
15567
+ },
15343
15568
  };
15344
15569
  }
15570
+ /**
15571
+ * Creates assistant-visible summary for one `list_timeouts` response.
15572
+ *
15573
+ * @private internal utility of USE TIMEOUT
15574
+ */
15575
+ function createListedTimeoutsAssistantMessage(options) {
15576
+ if (options.total <= 0 || options.items.length === 0) {
15577
+ return 'Found 0 timeouts.';
15578
+ }
15579
+ const visibleItems = options.items.slice(0, MAX_ASSISTANT_VISIBLE_TIMEOUT_ROWS);
15580
+ const summaryRows = visibleItems.map((item, index) => `${index + 1}. ${formatTimeoutListRow(item)}`);
15581
+ const hiddenCount = Math.max(0, options.total - visibleItems.length);
15582
+ if (hiddenCount > 0) {
15583
+ summaryRows.push(`...and ${hiddenCount} more.`);
15584
+ }
15585
+ return [`Found ${options.total} ${options.total === 1 ? 'timeout' : 'timeouts'}:`, ...summaryRows].join('\n');
15586
+ }
15587
+ /**
15588
+ * Formats one timeout row for assistant-visible timeout listings.
15589
+ *
15590
+ * @private internal utility of USE TIMEOUT
15591
+ */
15592
+ function formatTimeoutListRow(item) {
15593
+ const normalizedMessage = typeof item.message === 'string' ? item.message.trim() : '';
15594
+ const messageSuffix = normalizedMessage ? ` | message ${JSON.stringify(normalizedMessage)}` : '';
15595
+ const recurrenceSuffix = typeof item.recurrenceIntervalMs === 'number' && item.recurrenceIntervalMs > 0
15596
+ ? ` | recurrence ${item.recurrenceIntervalMs}ms`
15597
+ : '';
15598
+ const pausedSuffix = item.paused ? ' (paused)' : '';
15599
+ return `${item.timeoutId} | ${item.status}${pausedSuffix} | chat ${item.chatId} | due ${item.dueAt}${recurrenceSuffix}${messageSuffix}`;
15600
+ }
15601
+ /**
15602
+ * Creates assistant-visible summary for bulk timeout cancellation.
15603
+ *
15604
+ * @private internal utility of USE TIMEOUT
15605
+ */
15606
+ function createBulkCancelAssistantMessage(options) {
15607
+ if (options.cancelledCount <= 0) {
15608
+ return 'No active timeouts were found to cancel.';
15609
+ }
15610
+ const visibleTimeoutIds = options.cancelledTimeoutIds.slice(0, MAX_ASSISTANT_VISIBLE_BULK_TIMEOUT_IDS);
15611
+ const hiddenIdsCount = Math.max(0, options.cancelledTimeoutIds.length - visibleTimeoutIds.length);
15612
+ const hasMoreSuffix = options.hasMore ? ' Additional active timeouts may still exist.' : '';
15613
+ const idsSuffix = visibleTimeoutIds.length > 0
15614
+ ? ` Cancelled ids: ${visibleTimeoutIds.join(', ')}${hiddenIdsCount > 0 ? `, and ${hiddenIdsCount} more.` : '.'}`
15615
+ : '';
15616
+ return `Cancelled ${options.cancelledCount} active ${options.cancelledCount === 1 ? 'timeout' : 'timeouts'}.${idsSuffix}${hasMoreSuffix}`;
15617
+ }
15618
+ /**
15619
+ * Creates assistant-visible summary for bulk timeout pause/resume updates.
15620
+ *
15621
+ * @private internal utility of USE TIMEOUT
15622
+ */
15623
+ function createBulkUpdateAssistantMessage(options) {
15624
+ if (options.matchedCount <= 0) {
15625
+ return options.paused
15626
+ ? 'No active queued timeouts were found to pause.'
15627
+ : 'No paused queued timeouts were found to resume.';
15628
+ }
15629
+ const verb = options.paused ? 'Paused' : 'Resumed';
15630
+ const visibleTimeoutIds = options.updatedTimeoutIds.slice(0, MAX_ASSISTANT_VISIBLE_BULK_TIMEOUT_IDS);
15631
+ const hiddenIdsCount = Math.max(0, options.updatedTimeoutIds.length - visibleTimeoutIds.length);
15632
+ const skippedCount = Math.max(0, options.matchedCount - options.updatedCount);
15633
+ const idsSuffix = visibleTimeoutIds.length > 0
15634
+ ? ` Updated ids: ${visibleTimeoutIds.join(', ')}${hiddenIdsCount > 0 ? `, and ${hiddenIdsCount} more.` : '.'}`
15635
+ : '';
15636
+ const skippedSuffix = skippedCount > 0 ? ` Skipped ${skippedCount} due to concurrent changes.` : '';
15637
+ const hasMoreSuffix = options.hasMore ? ' Additional matching timeouts may still exist.' : '';
15638
+ return `${verb} ${options.updatedCount} ${options.updatedCount === 1 ? 'timeout' : 'timeouts'}.${idsSuffix}${skippedSuffix}${hasMoreSuffix}`;
15639
+ }
15345
15640
 
15346
15641
  /**
15347
15642
  * Adds `USE TIMEOUT` tool definitions while preserving already registered tools.
@@ -15373,7 +15668,7 @@ function createTimeoutTools(existingTools = []) {
15373
15668
  if (!tools.some((tool) => tool.name === TimeoutToolNames.cancel)) {
15374
15669
  tools.push({
15375
15670
  name: TimeoutToolNames.cancel,
15376
- description: 'Cancel one previously scheduled timeout within the same user+agent scope, even if it was set in another chat.',
15671
+ description: 'Cancel one timeout by id or cancel all active timeouts across chats for the same user+agent scope.',
15377
15672
  parameters: {
15378
15673
  type: 'object',
15379
15674
  properties: {
@@ -15381,15 +15676,18 @@ function createTimeoutTools(existingTools = []) {
15381
15676
  type: 'string',
15382
15677
  description: 'Identifier returned earlier by `set_timeout` or `list_timeouts`.',
15383
15678
  },
15679
+ allActive: {
15680
+ type: 'boolean',
15681
+ description: 'When true, cancel all currently active timeouts across chats in this user+agent scope.',
15682
+ },
15384
15683
  },
15385
- required: ['timeoutId'],
15386
15684
  },
15387
15685
  });
15388
15686
  }
15389
15687
  if (!tools.some((tool) => tool.name === TimeoutToolNames.list)) {
15390
15688
  tools.push({
15391
15689
  name: TimeoutToolNames.list,
15392
- description: 'List scheduled timeouts across all chats for this same user+agent scope so they can be reviewed or cancelled.',
15690
+ description: 'List timeout details across all chats for this same user+agent scope so they can be reviewed and managed.',
15393
15691
  parameters: {
15394
15692
  type: 'object',
15395
15693
  properties: {
@@ -15405,6 +15703,49 @@ function createTimeoutTools(existingTools = []) {
15405
15703
  },
15406
15704
  });
15407
15705
  }
15706
+ if (!tools.some((tool) => tool.name === TimeoutToolNames.update)) {
15707
+ tools.push({
15708
+ name: TimeoutToolNames.update,
15709
+ description: 'Update one timeout (pause/resume, next run, recurrence, payload) or pause/resume all active queued timeouts across chats.',
15710
+ parameters: {
15711
+ type: 'object',
15712
+ properties: {
15713
+ timeoutId: {
15714
+ type: 'string',
15715
+ description: 'Identifier returned earlier by `set_timeout` or `list_timeouts` for one timeout update.',
15716
+ },
15717
+ allActive: {
15718
+ type: 'boolean',
15719
+ description: 'When true, run one bulk pause/resume across all active queued timeouts in this same user+agent scope.',
15720
+ },
15721
+ paused: {
15722
+ type: 'boolean',
15723
+ description: 'Pause (`true`) or resume (`false`) one timeout; with `allActive: true` this pauses/resumes all active queued timeouts.',
15724
+ },
15725
+ dueAt: {
15726
+ type: 'string',
15727
+ description: 'Set the next run timestamp (ISO string). Cannot be used with `extendByMs`.',
15728
+ },
15729
+ extendByMs: {
15730
+ type: 'number',
15731
+ description: 'Move next run by this many milliseconds. Cannot be used with `dueAt`.',
15732
+ },
15733
+ recurrenceIntervalMs: {
15734
+ type: 'number',
15735
+ description: 'Set recurrence interval in milliseconds; pass `null` to disable recurrence.',
15736
+ },
15737
+ message: {
15738
+ type: 'string',
15739
+ description: 'Set wake-up message text for this timeout; pass empty string to clear.',
15740
+ },
15741
+ parameters: {
15742
+ type: 'object',
15743
+ description: 'Replace stored JSON parameters passed back when timeout fires.',
15744
+ },
15745
+ },
15746
+ },
15747
+ });
15748
+ }
15408
15749
  return tools;
15409
15750
  }
15410
15751
 
@@ -15426,7 +15767,7 @@ class UseTimeoutCommitmentDefinition extends BaseCommitmentDefinition {
15426
15767
  * Short one-line description of `USE TIMEOUT`.
15427
15768
  */
15428
15769
  get description() {
15429
- return 'Enable timeout wake-ups plus scoped timeout listing/cancellation across chats.';
15770
+ return 'Enable timeout wake-ups plus scoped timeout listing, updates, and cancellation across chats.';
15430
15771
  }
15431
15772
  /**
15432
15773
  * Icon for this commitment.
@@ -15448,8 +15789,9 @@ class UseTimeoutCommitmentDefinition extends BaseCommitmentDefinition {
15448
15789
  - The agent uses \`set_timeout\` to schedule a future wake-up in the same chat thread.
15449
15790
  - The tool returns immediately while the timeout is stored and executed by the runtime later.
15450
15791
  - The wake-up arrives as a new user-like timeout message in the same conversation.
15451
- - The agent can inspect known timeouts via \`list_timeouts\`.
15452
- - The agent can cancel an existing timeout by \`timeoutId\` via \`cancel_timeout\`, including timeouts created in another chat.
15792
+ - The agent can inspect known timeout details via \`list_timeouts\`.
15793
+ - The agent can cancel one timeout by \`timeoutId\` or cancel all active timeouts via \`cancel_timeout\`.
15794
+ - The agent can pause/resume and edit timeout details via \`update_timeout\`.
15453
15795
  - Commitment content is treated as optional timeout policy instructions.
15454
15796
 
15455
15797
  ## Examples
@@ -15479,6 +15821,7 @@ class UseTimeoutCommitmentDefinition extends BaseCommitmentDefinition {
15479
15821
  [TimeoutToolNames.set]: 'Set timer',
15480
15822
  [TimeoutToolNames.cancel]: 'Cancel timer',
15481
15823
  [TimeoutToolNames.list]: 'List timers',
15824
+ [TimeoutToolNames.update]: 'Update timer',
15482
15825
  };
15483
15826
  }
15484
15827
  /**