@promptbook/remote-server 0.112.0-26 → 0.112.0-28

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.
@@ -26,45 +26,6 @@ export type HoistedMenuItem = {
26
26
  */
27
27
  isActive?: boolean;
28
28
  };
29
- /**
30
- * Shared actions provided to hoisted mobile menu-section renderers.
31
- *
32
- * @private mechanism inside Promptbook
33
- */
34
- export type HoistedMobileMenuSectionRenderOptions = {
35
- /**
36
- * Closes the owning mobile header menu.
37
- */
38
- readonly closeMenu: () => void;
39
- };
40
- /**
41
- * Mobile-only section hoisted into the shared application menu.
42
- *
43
- * @private mechanism inside Promptbook
44
- */
45
- export type HoistedMobileMenuSection = {
46
- /**
47
- * Stable identifier used to preserve section open state.
48
- */
49
- readonly key: string;
50
- /**
51
- * Visible section label rendered by the mobile menu.
52
- */
53
- readonly label: ReactNode;
54
- /**
55
- * Whether the section should start expanded whenever the menu opens.
56
- */
57
- readonly isDefaultOpen?: boolean;
58
- /**
59
- * Lazily renders section content inside the mobile header menu.
60
- */
61
- readonly renderContent: (options: HoistedMobileMenuSectionRenderOptions) => ReactNode;
62
- };
63
- /**
64
- * Value exposed through the shared menu-hoisting context.
65
- *
66
- * @private mechanism inside Promptbook
67
- */
68
29
  type MenuHoistingContextType = {
69
30
  /**
70
31
  * The currently hoisted menu items
@@ -74,14 +35,6 @@ type MenuHoistingContextType = {
74
35
  * Set the hoisted menu items
75
36
  */
76
37
  setMenu: (items: HoistedMenuItem[]) => void;
77
- /**
78
- * Mobile-only sections hoisted into the shared application menu.
79
- */
80
- mobileMenuSections: HoistedMobileMenuSection[];
81
- /**
82
- * Sets the mobile-only hoisted menu sections.
83
- */
84
- setMobileMenuSections: (sections: HoistedMobileMenuSection[]) => void;
85
38
  };
86
39
  /**
87
40
  * Provider for menu hoisting
@@ -0,0 +1,30 @@
1
+ import type { AgentModelRequirements } from '../../book-2.0/agent-source/AgentModelRequirements';
2
+ import type { ParsedCommitment } from '../_base/ParsedCommitment';
3
+ /**
4
+ * `USE` commitment types whose system-message sections are aggregated after the
5
+ * commitment-by-commitment application step.
6
+ *
7
+ * @private internal utility of `createAgentModelRequirementsWithCommitments`
8
+ */
9
+ type AggregatedUseCommitmentType = 'USE BROWSER' | 'USE SEARCH ENGINE' | 'USE TIME';
10
+ /**
11
+ * Adds the placeholder for an aggregated `USE` system-message section only once, preserving the section position from the first occurrence.
12
+ *
13
+ * @param requirements - Current model requirements.
14
+ * @param type - Aggregated `USE` commitment type being applied.
15
+ * @returns Requirements with the placeholder inserted when it was not already present.
16
+ * @private internal utility of `USE` commitments
17
+ */
18
+ export declare function appendAggregatedUseCommitmentPlaceholder(requirements: AgentModelRequirements, type: AggregatedUseCommitmentType): AgentModelRequirements;
19
+ /**
20
+ * Replaces temporary `USE` placeholders with one aggregated system-message block per commitment type.
21
+ *
22
+ * Distinct additional-instruction blocks are merged in stable source order while the hard-coded section is emitted only once.
23
+ *
24
+ * @param requirements - Model requirements produced by commitment-by-commitment application.
25
+ * @param commitments - Filtered commitments in their original source order.
26
+ * @returns Requirements with aggregated `USE` system-message sections.
27
+ * @private internal utility of `createAgentModelRequirementsWithCommitments`
28
+ */
29
+ export declare function aggregateUseCommitmentSystemMessages(requirements: AgentModelRequirements, commitments: ReadonlyArray<ParsedCommitment>): AgentModelRequirements;
30
+ export {};
@@ -12,13 +12,14 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
12
12
  * 1. One-shot URL fetching: Simple function to fetch and scrape URL content
13
13
  * 2. Running browser: For complex tasks like scrolling, clicking, form filling, etc.
14
14
  *
15
- * The content following `USE BROWSER` is ignored (similar to NOTE).
15
+ * The content following `USE BROWSER` is an arbitrary text that the agent should know
16
+ * (e.g. browsing scope or preferred sources).
16
17
  *
17
18
  * Example usage in agent source:
18
19
  *
19
20
  * ```book
20
21
  * USE BROWSER
21
- * USE BROWSER This will be ignored
22
+ * USE BROWSER Prefer official documentation and source websites.
22
23
  * ```
23
24
  *
24
25
  * @private [🪔] Maybe export the commitments through some package
@@ -15,7 +15,7 @@ export declare const BOOK_LANGUAGE_VERSION: string_semantic_version;
15
15
  export declare const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version;
16
16
  /**
17
17
  * Represents the version string of the Promptbook engine.
18
- * It follows semantic versioning (e.g., `0.112.0-25`).
18
+ * It follows semantic versioning (e.g., `0.112.0-27`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/remote-server",
3
- "version": "0.112.0-26",
3
+ "version": "0.112.0-28",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -98,7 +98,7 @@
98
98
  "module": "./esm/index.es.js",
99
99
  "typings": "./esm/typings/src/_packages/remote-server.index.d.ts",
100
100
  "peerDependencies": {
101
- "@promptbook/core": "0.112.0-26"
101
+ "@promptbook/core": "0.112.0-28"
102
102
  },
103
103
  "dependencies": {
104
104
  "@mozilla/readability": "0.6.0",
package/umd/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('path'), require('child_process'), require('colors'), require('spacetrim'), require('waitasecond'), require('express'), require('express-openapi-validator'), require('http'), require('socket.io'), require('swagger-ui-express'), require('fs/promises'), require('crypto'), require('crypto-js'), require('crypto-js/enc-hex'), require('@mozilla/readability'), require('jsdom'), require('showdown'), require('react'), require('react-dom/server'), require('rxjs'), require('mime-types'), require('moment'), require('crypto-js/sha256'), require('papaparse'), require('@openai/agents'), require('bottleneck'), require('openai')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'path', 'child_process', 'colors', 'spacetrim', 'waitasecond', 'express', 'express-openapi-validator', 'http', 'socket.io', 'swagger-ui-express', 'fs/promises', 'crypto', 'crypto-js', 'crypto-js/enc-hex', '@mozilla/readability', 'jsdom', 'showdown', 'react', 'react-dom/server', 'rxjs', 'mime-types', 'moment', 'crypto-js/sha256', 'papaparse', '@openai/agents', 'bottleneck', 'openai'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-remote-server"] = {}, global.path, global.child_process, global.colors, global._spaceTrim, global.waitasecond, global.express, global.OpenApiValidator, global.http, global.socket_io, global.swaggerUi, global.promises, global.crypto, global.cryptoJs, global.hexEncoder, global.readability, global.jsdom, global.showdown, global.react, global.server, global.rxjs, global.mimeTypes, global.moment, global.sha256, global.papaparse, global.agents, global.Bottleneck, global.OpenAI));
5
- })(this, (function (exports, path, child_process, colors, _spaceTrim, waitasecond, express, OpenApiValidator, http, socket_io, swaggerUi, promises, crypto, cryptoJs, hexEncoder, readability, jsdom, showdown, react, server, rxjs, mimeTypes, moment, sha256, papaparse, agents, Bottleneck, OpenAI) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('path'), require('child_process'), require('colors'), require('spacetrim'), require('waitasecond'), require('express'), require('express-openapi-validator'), require('http'), require('socket.io'), require('swagger-ui-express'), require('fs/promises'), require('crypto'), require('crypto-js'), require('crypto-js/enc-hex'), require('@mozilla/readability'), require('jsdom'), require('showdown'), require('react'), require('react-dom/server'), require('rxjs'), require('moment'), require('mime-types'), require('crypto-js/sha256'), require('papaparse'), require('@openai/agents'), require('bottleneck'), require('openai')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'path', 'child_process', 'colors', 'spacetrim', 'waitasecond', 'express', 'express-openapi-validator', 'http', 'socket.io', 'swagger-ui-express', 'fs/promises', 'crypto', 'crypto-js', 'crypto-js/enc-hex', '@mozilla/readability', 'jsdom', 'showdown', 'react', 'react-dom/server', 'rxjs', 'moment', 'mime-types', 'crypto-js/sha256', 'papaparse', '@openai/agents', 'bottleneck', 'openai'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-remote-server"] = {}, global.path, global.child_process, global.colors, global._spaceTrim, global.waitasecond, global.express, global.OpenApiValidator, global.http, global.socket_io, global.swaggerUi, global.promises, global.crypto, global.cryptoJs, global.hexEncoder, global.readability, global.jsdom, global.showdown, global.react, global.server, global.rxjs, global.moment, global.mimeTypes, global.sha256, global.papaparse, global.agents, global.Bottleneck, global.OpenAI));
5
+ })(this, (function (exports, path, child_process, colors, _spaceTrim, waitasecond, express, OpenApiValidator, http, socket_io, swaggerUi, promises, crypto, cryptoJs, hexEncoder, readability, jsdom, showdown, react, server, rxjs, moment, mimeTypes, sha256, papaparse, agents, Bottleneck, OpenAI) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -50,7 +50,7 @@
50
50
  * @generated
51
51
  * @see https://github.com/webgptorg/promptbook
52
52
  */
53
- const PROMPTBOOK_ENGINE_VERSION = '0.112.0-26';
53
+ const PROMPTBOOK_ENGINE_VERSION = '0.112.0-28';
54
54
  /**
55
55
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
56
56
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -16258,6 +16258,147 @@
16258
16258
  * Note: [💞] Ignore a discrepancy between file name and entity name
16259
16259
  */
16260
16260
 
16261
+ /**
16262
+ * All `USE` commitment types currently participating in final system-message aggregation.
16263
+ *
16264
+ * @private internal constant for `aggregateUseCommitmentSystemMessages`
16265
+ */
16266
+ const AGGREGATED_USE_COMMITMENT_TYPES = ['USE BROWSER', 'USE SEARCH ENGINE', 'USE TIME'];
16267
+ /**
16268
+ * Prefix used for temporary in-system-message placeholders that preserve the first-occurrence position of aggregated `USE` sections.
16269
+ *
16270
+ * @private internal constant for `appendAggregatedUseCommitmentPlaceholder`
16271
+ */
16272
+ const AGGREGATED_USE_COMMITMENT_PLACEHOLDER_PREFIX = '# AGGREGATED USE COMMITMENT: ';
16273
+ /**
16274
+ * Type guard for `USE` commitment types that are aggregated in the final system message.
16275
+ *
16276
+ * @param type - Commitment type to check.
16277
+ * @returns `true` when the commitment participates in `USE` system-message aggregation.
16278
+ * @private internal utility of `aggregateUseCommitmentSystemMessages`
16279
+ */
16280
+ function isAggregatedUseCommitmentType(type) {
16281
+ return AGGREGATED_USE_COMMITMENT_TYPES.includes(type);
16282
+ }
16283
+ /**
16284
+ * Creates the placeholder token used to reserve the first-occurrence position of an aggregated `USE` system-message section.
16285
+ *
16286
+ * @param type - Aggregated `USE` commitment type.
16287
+ * @returns Single-line placeholder comment stored in the interim system message.
16288
+ * @private internal utility of `appendAggregatedUseCommitmentPlaceholder`
16289
+ */
16290
+ function getAggregatedUseCommitmentPlaceholder(type) {
16291
+ return `${AGGREGATED_USE_COMMITMENT_PLACEHOLDER_PREFIX}${type}`;
16292
+ }
16293
+ /**
16294
+ * Combines distinct additional instruction blocks in source order.
16295
+ *
16296
+ * @param additionalInstructions - Deduplicated instruction blocks collected from the agent source.
16297
+ * @returns Combined instruction text ready for `formatOptionalInstructionBlock`.
16298
+ * @private internal utility of `createAggregatedUseCommitmentSystemMessage`
16299
+ */
16300
+ function combineAdditionalInstructions(additionalInstructions) {
16301
+ return additionalInstructions.join('\n');
16302
+ }
16303
+ /**
16304
+ * Creates the final aggregated system-message section for a supported `USE` commitment type.
16305
+ *
16306
+ * @param type - Aggregated `USE` commitment type.
16307
+ * @param additionalInstructions - Distinct additional instructions in source order.
16308
+ * @returns Final system-message block for the commitment type.
16309
+ * @private internal utility of `aggregateUseCommitmentSystemMessages`
16310
+ */
16311
+ function createAggregatedUseCommitmentSystemMessage(type, additionalInstructions) {
16312
+ const combinedAdditionalInstructions = combineAdditionalInstructions(additionalInstructions);
16313
+ switch (type) {
16314
+ case 'USE TIME':
16315
+ return _spaceTrim.spaceTrim((block) => `
16316
+ Time and date context:
16317
+ - It is ${moment__default["default"]().format('MMMM YYYY')} now.
16318
+ - If you need more precise current time information, use the tool "get_current_time".
16319
+ ${block(formatOptionalInstructionBlock('Time instructions', combinedAdditionalInstructions))}
16320
+ `);
16321
+ case 'USE BROWSER':
16322
+ return _spaceTrim.spaceTrim((block) => `
16323
+ You have access to browser tools to fetch and access content from the internet.
16324
+ - Use "fetch_url_content" to retrieve content from specific URLs (webpages or documents) using scrapers.
16325
+ - Use "run_browser" for real interactive browser automation (navigation, clicks, typing, waiting, scrolling).
16326
+ When you need to know information from a specific website or document, use the fetch_url_content tool.
16327
+ ${block(formatOptionalInstructionBlock('Browser instructions', combinedAdditionalInstructions))}
16328
+ `);
16329
+ case 'USE SEARCH ENGINE':
16330
+ return _spaceTrim.spaceTrim((block) => `
16331
+ Tool:
16332
+ - You have access to the web search engine via the tool "web_search".
16333
+ - Use it to find up-to-date information or facts that you don't know.
16334
+ - When you need to know some information from the internet, use the tool provided to you.
16335
+ - Do not make up information when you can search for it.
16336
+ - Do not tell the user you cannot search for information, YOU CAN.
16337
+ ${block(formatOptionalInstructionBlock('Search instructions', combinedAdditionalInstructions))}
16338
+ `);
16339
+ }
16340
+ }
16341
+ /**
16342
+ * Adds the placeholder for an aggregated `USE` system-message section only once, preserving the section position from the first occurrence.
16343
+ *
16344
+ * @param requirements - Current model requirements.
16345
+ * @param type - Aggregated `USE` commitment type being applied.
16346
+ * @returns Requirements with the placeholder inserted when it was not already present.
16347
+ * @private internal utility of `USE` commitments
16348
+ */
16349
+ function appendAggregatedUseCommitmentPlaceholder(requirements, type) {
16350
+ const placeholder = getAggregatedUseCommitmentPlaceholder(type);
16351
+ if (requirements.systemMessage.includes(placeholder)) {
16352
+ return requirements;
16353
+ }
16354
+ const systemMessage = requirements.systemMessage.trim()
16355
+ ? `${requirements.systemMessage}\n\n${placeholder}`
16356
+ : placeholder;
16357
+ return {
16358
+ ...requirements,
16359
+ systemMessage,
16360
+ };
16361
+ }
16362
+ /**
16363
+ * Replaces temporary `USE` placeholders with one aggregated system-message block per commitment type.
16364
+ *
16365
+ * Distinct additional-instruction blocks are merged in stable source order while the hard-coded section is emitted only once.
16366
+ *
16367
+ * @param requirements - Model requirements produced by commitment-by-commitment application.
16368
+ * @param commitments - Filtered commitments in their original source order.
16369
+ * @returns Requirements with aggregated `USE` system-message sections.
16370
+ * @private internal utility of `createAgentModelRequirementsWithCommitments`
16371
+ */
16372
+ function aggregateUseCommitmentSystemMessages(requirements, commitments) {
16373
+ const additionalInstructionsByType = new Map();
16374
+ for (const commitment of commitments) {
16375
+ if (!isAggregatedUseCommitmentType(commitment.type)) {
16376
+ continue;
16377
+ }
16378
+ let additionalInstructions = additionalInstructionsByType.get(commitment.type);
16379
+ if (!additionalInstructions) {
16380
+ additionalInstructions = [];
16381
+ additionalInstructionsByType.set(commitment.type, additionalInstructions);
16382
+ }
16383
+ const normalizedContent = _spaceTrim.spaceTrim(commitment.content);
16384
+ if (normalizedContent && !additionalInstructions.includes(normalizedContent)) {
16385
+ additionalInstructions.push(normalizedContent);
16386
+ }
16387
+ }
16388
+ let systemMessage = requirements.systemMessage;
16389
+ for (const [type, additionalInstructions] of additionalInstructionsByType) {
16390
+ const placeholder = getAggregatedUseCommitmentPlaceholder(type);
16391
+ if (!systemMessage.includes(placeholder)) {
16392
+ continue;
16393
+ }
16394
+ systemMessage = systemMessage.replace(placeholder, createAggregatedUseCommitmentSystemMessage(type, additionalInstructions));
16395
+ }
16396
+ return {
16397
+ ...requirements,
16398
+ systemMessage,
16399
+ };
16400
+ }
16401
+
16261
16402
  /**
16262
16403
  * Client-side safe wrapper for fetching URL content
16263
16404
  *
@@ -16308,13 +16449,14 @@
16308
16449
  * 1. One-shot URL fetching: Simple function to fetch and scrape URL content
16309
16450
  * 2. Running browser: For complex tasks like scrolling, clicking, form filling, etc.
16310
16451
  *
16311
- * The content following `USE BROWSER` is ignored (similar to NOTE).
16452
+ * The content following `USE BROWSER` is an arbitrary text that the agent should know
16453
+ * (e.g. browsing scope or preferred sources).
16312
16454
  *
16313
16455
  * Example usage in agent source:
16314
16456
  *
16315
16457
  * ```book
16316
16458
  * USE BROWSER
16317
- * USE BROWSER This will be ignored
16459
+ * USE BROWSER Prefer official documentation and source websites.
16318
16460
  * ```
16319
16461
  *
16320
16462
  * @private [🪔] Maybe export the commitments through some package
@@ -16352,7 +16494,7 @@
16352
16494
 
16353
16495
  ## Key aspects
16354
16496
 
16355
- - The content following \`USE BROWSER\` is ignored (similar to NOTE)
16497
+ - The content following \`USE BROWSER\` is an arbitrary text that the agent should know (e.g. browsing scope or preferred sources).
16356
16498
  - Provides two levels of browser access:
16357
16499
  1. **One-shot URL fetching**: Simple function to fetch and scrape URL content (active)
16358
16500
  2. **Running browser**: For complex tasks like scrolling, clicking, form filling, etc. (runtime-dependent)
@@ -16469,20 +16611,14 @@
16469
16611
  });
16470
16612
  }
16471
16613
  const updatedTools = [...existingTools, ...toolsToAdd];
16472
- // Return requirements with updated tools and metadata
16473
- return this.appendToSystemMessage({
16614
+ return appendAggregatedUseCommitmentPlaceholder({
16474
16615
  ...requirements,
16475
16616
  tools: updatedTools,
16476
16617
  _metadata: {
16477
16618
  ...requirements._metadata,
16478
16619
  useBrowser: true,
16479
16620
  },
16480
- }, _spaceTrim.spaceTrim(`
16481
- You have access to browser tools to fetch and access content from the internet.
16482
- - Use "fetch_url_content" to retrieve content from specific URLs (webpages or documents) using scrapers.
16483
- - Use "run_browser" for real interactive browser automation (navigation, clicks, typing, waiting, scrolling).
16484
- When you need to know information from a specific website or document, use the fetch_url_content tool.
16485
- `));
16621
+ }, this.type);
16486
16622
  }
16487
16623
  /**
16488
16624
  * Gets the browser tool function implementations.
@@ -20269,7 +20405,6 @@
20269
20405
  `);
20270
20406
  }
20271
20407
  applyToAgentModelRequirements(requirements, content) {
20272
- const extraInstructions = formatOptionalInstructionBlock('Search instructions', content);
20273
20408
  // Get existing tools array or create new one
20274
20409
  const existingTools = requirements.tools || [];
20275
20410
  // Add 'web_search' to tools if not already present
@@ -20282,7 +20417,6 @@
20282
20417
  description: _spaceTrim.spaceTrim(`
20283
20418
  Search the internet for information.
20284
20419
  Use this tool when you need to find up-to-date information or facts that you don't know.
20285
- ${!content ? '' : `Search scope / instructions: ${content}`}
20286
20420
  `),
20287
20421
  parameters: {
20288
20422
  type: 'object',
@@ -20320,23 +20454,14 @@
20320
20454
  },
20321
20455
  },
20322
20456
  ];
20323
- // Return requirements with updated tools and metadata
20324
- return this.appendToSystemMessage({
20457
+ return appendAggregatedUseCommitmentPlaceholder({
20325
20458
  ...requirements,
20326
20459
  tools: updatedTools,
20327
20460
  _metadata: {
20328
20461
  ...requirements._metadata,
20329
20462
  useSearchEngine: content || true,
20330
20463
  },
20331
- }, _spaceTrim.spaceTrim((block) => `
20332
- Tool:
20333
- - You have access to the web search engine via the tool "web_search".
20334
- - Use it to find up-to-date information or facts that you don't know.
20335
- - When you need to know some information from the internet, use the tool provided to you.
20336
- - Do not make up information when you can search for it.
20337
- - Do not tell the user you cannot search for information, YOU CAN.
20338
- ${block(extraInstructions)}
20339
- `));
20464
+ }, this.type);
20340
20465
  }
20341
20466
  /**
20342
20467
  * Gets human-readable titles for tool functions provided by this commitment.
@@ -21447,7 +21572,6 @@
21447
21572
  `);
21448
21573
  }
21449
21574
  applyToAgentModelRequirements(requirements, content) {
21450
- const extraInstructions = formatOptionalInstructionBlock('Time instructions', content);
21451
21575
  // Get existing tools array or create new one
21452
21576
  const existingTools = requirements.tools || [];
21453
21577
  // Add 'get_current_time' to tools if not already present
@@ -21471,19 +21595,13 @@
21471
21595
  },
21472
21596
  // <- TODO: !!!! define the function in LLM tools
21473
21597
  ];
21474
- // Return requirements with updated tools and metadata
21475
- return this.appendToSystemMessage({
21598
+ return appendAggregatedUseCommitmentPlaceholder({
21476
21599
  ...requirements,
21477
21600
  tools: updatedTools,
21478
21601
  _metadata: {
21479
21602
  ...requirements._metadata,
21480
21603
  },
21481
- }, _spaceTrim.spaceTrim((block) => `
21482
- Time and date context:
21483
- - It is ${moment__default["default"]().format('MMMM YYYY')} now.
21484
- - If you need more precise current time information, use the tool "get_current_time".
21485
- ${block(extraInstructions)}
21486
- `));
21604
+ }, this.type);
21487
21605
  }
21488
21606
  /**
21489
21607
  * Gets human-readable titles for tool functions provided by this commitment.
@@ -25178,6 +25296,7 @@
25178
25296
  }
25179
25297
  }
25180
25298
  }
25299
+ requirements = aggregateUseCommitmentSystemMessages(requirements, filteredCommitments);
25181
25300
  // Handle IMPORT commitments for generic files
25182
25301
  // Note: This logic could be moved to ImportCommitmentDefinition, but it needs to be asynchronous
25183
25302
  if (requirements.importedFileUrls && requirements.importedFileUrls.length > 0) {