@promptbook/cli 0.104.0-11 → 0.104.0-12

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 (27) hide show
  1. package/apps/agents-server/src/app/api/upload/route.ts +4 -2
  2. package/apps/agents-server/src/components/AgentProfile/AgentProfile.tsx +1 -1
  3. package/apps/agents-server/src/utils/messages/sendMessage.ts +6 -5
  4. package/esm/index.es.js +89 -27
  5. package/esm/index.es.js.map +1 -1
  6. package/esm/typings/src/_packages/types.index.d.ts +2 -0
  7. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +1 -0
  8. package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +5 -0
  9. package/esm/typings/src/book-2.0/agent-source/createAgentModelRequirements.tools.test.d.ts +1 -0
  10. package/esm/typings/src/commitments/META/META_DESCRIPTION.d.ts +41 -0
  11. package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +2 -2
  12. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.d.ts +1 -1
  13. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +1 -1
  14. package/esm/typings/src/llm-providers/_common/utils/count-total-usage/LlmExecutionToolsWithTotalUsage.d.ts +1 -1
  15. package/esm/typings/src/llm-providers/_common/utils/count-total-usage/limitTotalUsage.d.ts +1 -1
  16. package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -1
  17. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -1
  18. package/esm/typings/src/llm-providers/openai/utils/mapToolsToOpenAi.d.ts +8 -0
  19. package/esm/typings/src/search-engines/SearchResult.d.ts +4 -4
  20. package/esm/typings/src/search-engines/bing/BingSearchEngine.d.ts +1 -1
  21. package/esm/typings/src/search-engines/dummy/DummySearchEngine.d.ts +1 -1
  22. package/esm/typings/src/types/LlmToolDefinition.d.ts +20 -0
  23. package/esm/typings/src/types/ModelRequirements.d.ts +13 -0
  24. package/esm/typings/src/version.d.ts +1 -1
  25. package/package.json +1 -1
  26. package/umd/index.umd.js +89 -27
  27. package/umd/index.umd.js.map +1 -1
@@ -188,6 +188,7 @@ import type { BookTranspiler } from '../transpilers/_common/BookTranspiler';
188
188
  import type { BookTranspilerOptions } from '../transpilers/_common/BookTranspilerOptions';
189
189
  import type { IntermediateFilesStrategy } from '../types/IntermediateFilesStrategy';
190
190
  import type { LlmCall } from '../types/LlmCall';
191
+ import type { LlmToolDefinition } from '../types/LlmToolDefinition';
191
192
  import type { Message } from '../types/Message';
192
193
  import type { ModelRequirements } from '../types/ModelRequirements';
193
194
  import type { CompletionModelRequirements } from '../types/ModelRequirements';
@@ -559,6 +560,7 @@ export type { BookTranspiler };
559
560
  export type { BookTranspilerOptions };
560
561
  export type { IntermediateFilesStrategy };
561
562
  export type { LlmCall };
563
+ export type { LlmToolDefinition };
562
564
  export type { Message };
563
565
  export type { ModelRequirements };
564
566
  export type { CompletionModelRequirements };
@@ -73,6 +73,7 @@ export type AgentBasicInformation = {
73
73
  */
74
74
  meta: {
75
75
  fullname?: string;
76
+ description?: string;
76
77
  image?: string_url_image;
77
78
  font?: string_fonts;
78
79
  color?: string_color;
@@ -1,3 +1,4 @@
1
+ import type { LlmToolDefinition } from '../../types/LlmToolDefinition';
1
2
  import type { string_knowledge_source_link } from '../../types/typeAliases';
2
3
  import type { TODO_any } from '../../utils/organization/TODO_any';
3
4
  /**
@@ -45,6 +46,10 @@ export type AgentModelRequirements = {
45
46
  * Top-k sampling value for the agent's responses
46
47
  */
47
48
  readonly topK?: number;
49
+ /**
50
+ * Tools available for the agent
51
+ */
52
+ readonly tools?: ReadonlyArray<LlmToolDefinition>;
48
53
  /**
49
54
  * Arbitrary metadata storage for commitments
50
55
  * Each commitment can store its own data here
@@ -0,0 +1,41 @@
1
+ import type { AgentModelRequirements } from '../../book-2.0/agent-source/AgentModelRequirements';
2
+ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
3
+ /**
4
+ * META DESCRIPTION commitment definition
5
+ *
6
+ * The META DESCRIPTION commitment sets the agent's meta description for the profile page.
7
+ * This commitment is special because it doesn't affect the system message,
8
+ * but is handled separately in the parsing logic.
9
+ *
10
+ * Example usage in agent source:
11
+ *
12
+ * ```book
13
+ * META DESCRIPTION An AI assistant specialized in business tasks
14
+ * ```
15
+ *
16
+ * @private [🪔] Maybe export the commitments through some package
17
+ */
18
+ export declare class MetaDescriptionCommitmentDefinition extends BaseCommitmentDefinition<'META DESCRIPTION'> {
19
+ constructor();
20
+ /**
21
+ * Short one-line description of META DESCRIPTION.
22
+ */
23
+ get description(): string;
24
+ /**
25
+ * Icon for this commitment.
26
+ */
27
+ get icon(): string;
28
+ /**
29
+ * Markdown documentation for META DESCRIPTION commitment.
30
+ */
31
+ get documentation(): string;
32
+ applyToAgentModelRequirements(requirements: AgentModelRequirements, content: string): AgentModelRequirements;
33
+ /**
34
+ * Extracts the meta description from the content
35
+ * This is used by the parsing logic
36
+ */
37
+ extractMetaDescription(content: string): string | null;
38
+ }
39
+ /**
40
+ * Note: [💞] Ignore a discrepancy between file name and entity name
41
+ */
@@ -6,13 +6,13 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
6
6
  * The `USE SEARCH ENGINE` commitment indicates that the agent should utilize a search engine tool
7
7
  * to access and retrieve up-to-date information from the internet when necessary.
8
8
  *
9
- * The content following `USE SEARCH ENGINE` is ignored (similar to NOTE).
9
+ * The content following `USE SEARCH ENGINE` is an arbitrary text that the agent should know (e.g. search scope or instructions).
10
10
  *
11
11
  * Example usage in agent source:
12
12
  *
13
13
  * ```book
14
14
  * USE SEARCH ENGINE
15
- * USE SEARCH ENGINE This will be ignored
15
+ * USE SEARCH ENGINE Hledej informace o Přemyslovcích
16
16
  * ```
17
17
  *
18
18
  * @private [🪔] Maybe export the commitments through some package
@@ -21,7 +21,7 @@ export declare function $provideLlmToolsForTestingAndScriptsAndPlayground(option
21
21
  export {};
22
22
  /**
23
23
  * Note: [⚪] This should never be in any released package
24
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
24
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
25
25
  * TODO: This should be maybe not under `_common` but under `utils-internal` / `utils/internal`
26
26
  * TODO: [®] DRY Register logi
27
27
  */
@@ -51,7 +51,7 @@ export declare function $provideLlmToolsForWizardOrCli(options?: ProvideLlmTools
51
51
  export {};
52
52
  /**
53
53
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
54
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
54
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
55
55
  * TODO: [🥃] Allow `ptbk make` without llm tools
56
56
  * TODO: This should be maybe not under `_common` but under `utils-internal` / `utils/internal`
57
57
  * TODO: [®] DRY Register logic
@@ -17,6 +17,6 @@ export type LlmExecutionToolsWithTotalUsage = LlmExecutionTools & {
17
17
  spending(): Observable<Usage>;
18
18
  };
19
19
  /**
20
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
20
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
21
21
  * Note: [🥫] Not using getter `get totalUsage` but `getTotalUsage` to allow this object to be proxied
22
22
  */
@@ -32,5 +32,5 @@ export {};
32
32
  * TODO: [🧠][💸] Maybe make some common abstraction `interceptLlmTools` and use here (or use javascript Proxy?)
33
33
  * TODO: [🧠] Is there some meaningfull way how to test this util
34
34
  * TODO: [🧠][🌯] Maybe a way how to hide ability to `get totalUsage`
35
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
35
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
36
36
  */
@@ -8,5 +8,5 @@ import { MultipleLlmExecutionTools } from './MultipleLlmExecutionTools';
8
8
  export declare function getSingleLlmExecutionTools(oneOrMoreLlmExecutionTools: undefined | LlmExecutionTools | ReadonlyArray<LlmExecutionTools>): LlmExecutionTools | MultipleLlmExecutionTools;
9
9
  /**
10
10
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
11
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
11
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
12
12
  */
@@ -19,5 +19,5 @@ import { MultipleLlmExecutionTools } from './MultipleLlmExecutionTools';
19
19
  export declare function joinLlmExecutionTools(title: string_title & string_markdown_text, ...llmExecutionTools: ReadonlyArray<LlmExecutionTools>): MultipleLlmExecutionTools;
20
20
  /**
21
21
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
22
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
22
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
23
23
  */
@@ -0,0 +1,8 @@
1
+ import type OpenAI from 'openai';
2
+ import type { LlmToolDefinition } from '../../../types/LlmToolDefinition';
3
+ /**
4
+ * Maps Promptbook tools to OpenAI tools.
5
+ *
6
+ * @private
7
+ */
8
+ export declare function mapToolsToOpenAi(tools: ReadonlyArray<LlmToolDefinition>): Array<OpenAI.Chat.Completions.ChatCompletionTool>;
@@ -1,18 +1,18 @@
1
1
  import type { string_url } from '../types/typeAliases';
2
2
  /**
3
- * @@@
3
+ * Represents a search result from a search engine.
4
4
  */
5
5
  export type SearchResult = {
6
6
  /**
7
- * @@@
7
+ * The title of the search result.
8
8
  */
9
9
  title: string;
10
10
  /**
11
- * @@@
11
+ * The URL of the search result.
12
12
  */
13
13
  url: string_url;
14
14
  /**
15
- * @@@
15
+ * A short snippet or description of the search result.
16
16
  */
17
17
  snippet: string;
18
18
  };
@@ -3,7 +3,7 @@ import type { string_markdown, string_markdown_text, string_title } from '../../
3
3
  import type { SearchEngine } from '../SearchEngine';
4
4
  import type { SearchResult } from '../SearchResult';
5
5
  /**
6
- * @@@
6
+ * A search engine implementation that uses the Bing Web Search API.
7
7
  *
8
8
  * @private <- TODO: !!!! Export via some package
9
9
  */
@@ -3,7 +3,7 @@ import type { string_markdown, string_markdown_text, string_title } from '../../
3
3
  import type { SearchEngine } from '../SearchEngine';
4
4
  import type { SearchResult } from '../SearchResult';
5
5
  /**
6
- * @@@
6
+ * A dummy implementation of SearchEngine for testing purposes.
7
7
  *
8
8
  * @private <- TODO: !!!! Export via some package, maybe `@promptbook/search-engines` or `@promptbook/fake-llm`
9
9
  */
@@ -0,0 +1,20 @@
1
+ import type { string_markdown_text, string_name } from './typeAliases';
2
+ /**
3
+ * Definition of a tool that can be used by the model
4
+ *
5
+ * Note: [🚉] This is fully serializable as JSON
6
+ */
7
+ export type LlmToolDefinition = {
8
+ /**
9
+ * Name of the tool
10
+ */
11
+ readonly name: string_name;
12
+ /**
13
+ * Description of the tool
14
+ */
15
+ readonly description: string_markdown_text;
16
+ /**
17
+ * Parameters of the tool in JSON Schema format
18
+ */
19
+ readonly parameters: Record<string, unknown>;
20
+ };
@@ -1,3 +1,4 @@
1
+ import type { LlmToolDefinition } from './LlmToolDefinition';
1
2
  import type { ModelVariant } from './ModelVariant';
2
3
  import type { number_model_temperature, number_seed, string_model_name, string_system_message } from './typeAliases';
3
4
  /**
@@ -28,6 +29,12 @@ export type CompletionModelRequirements = CommonModelRequirements & {
28
29
  * Maximum number of tokens that can be generated by the model
29
30
  */
30
31
  readonly maxTokens?: number;
32
+ /**
33
+ * Tools available for the model
34
+ *
35
+ * Note: [🚉] This is fully serializable as JSON
36
+ */
37
+ readonly tools?: LlmToolDefinition[];
31
38
  };
32
39
  /**
33
40
  * Model requirements for the chat variant
@@ -53,6 +60,12 @@ export type ChatModelRequirements = CommonModelRequirements & {
53
60
  * Maximum number of tokens that can be generated by the model
54
61
  */
55
62
  readonly maxTokens?: number;
63
+ /**
64
+ * Tools available for the model
65
+ *
66
+ * Note: [🚉] This is fully serializable as JSON
67
+ */
68
+ readonly tools?: LlmToolDefinition[];
56
69
  };
57
70
  /**
58
71
  * Model requirements for the image generation variant
@@ -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.104.0-10`).
18
+ * It follows semantic versioning (e.g., `0.104.0-11`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/cli",
3
- "version": "0.104.0-11",
3
+ "version": "0.104.0-12",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
package/umd/index.umd.js CHANGED
@@ -56,7 +56,7 @@
56
56
  * @generated
57
57
  * @see https://github.com/webgptorg/promptbook
58
58
  */
59
- const PROMPTBOOK_ENGINE_VERSION = '0.104.0-11';
59
+ const PROMPTBOOK_ENGINE_VERSION = '0.104.0-12';
60
60
  /**
61
61
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
62
62
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -5672,7 +5672,7 @@
5672
5672
  }
5673
5673
  /**
5674
5674
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
5675
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
5675
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
5676
5676
  */
5677
5677
 
5678
5678
  /**
@@ -5857,7 +5857,7 @@
5857
5857
  }
5858
5858
  /**
5859
5859
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
5860
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
5860
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
5861
5861
  * TODO: [🥃] Allow `ptbk make` without llm tools
5862
5862
  * TODO: This should be maybe not under `_common` but under `utils-internal` / `utils/internal`
5863
5863
  * TODO: [®] DRY Register logic
@@ -8014,7 +8014,7 @@
8014
8014
  }
8015
8015
  /**
8016
8016
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
8017
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
8017
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
8018
8018
  */
8019
8019
 
8020
8020
  /**
@@ -19311,6 +19311,22 @@
19311
19311
  * TODO: [🤝] DRY Maybe some common abstraction between `computeOpenAiUsage` and `computeAnthropicClaudeUsage`
19312
19312
  */
19313
19313
 
19314
+ /**
19315
+ * Maps Promptbook tools to OpenAI tools.
19316
+ *
19317
+ * @private
19318
+ */
19319
+ function mapToolsToOpenAi(tools) {
19320
+ return tools.map((tool) => ({
19321
+ type: 'function',
19322
+ function: {
19323
+ name: tool.name,
19324
+ description: tool.description,
19325
+ parameters: tool.parameters,
19326
+ },
19327
+ }));
19328
+ }
19329
+
19314
19330
  /**
19315
19331
  * Parses an OpenAI error message to identify which parameter is unsupported
19316
19332
  *
@@ -19508,6 +19524,9 @@
19508
19524
  },
19509
19525
  ],
19510
19526
  user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString(),
19527
+ tools: currentModelRequirements.tools === undefined
19528
+ ? undefined
19529
+ : mapToolsToOpenAi(currentModelRequirements.tools),
19511
19530
  };
19512
19531
  const start = $getCurrentDate();
19513
19532
  if (this.options.isVerbose) {
@@ -19652,6 +19671,7 @@
19652
19671
  const rawPromptContent = templateParameters(content, { ...parameters, modelName });
19653
19672
  const rawRequest = {
19654
19673
  ...modelSettings,
19674
+ model: modelName,
19655
19675
  prompt: rawPromptContent,
19656
19676
  user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString(),
19657
19677
  };
@@ -19906,8 +19926,8 @@
19906
19926
  const rawPromptContent = templateParameters(content, { ...parameters, modelName });
19907
19927
  const rawRequest = {
19908
19928
  ...modelSettings,
19909
- size: modelSettings.size || '1024x1024',
19910
19929
  prompt: rawPromptContent,
19930
+ size: modelSettings.size || '1024x1024',
19911
19931
  user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString(),
19912
19932
  response_format: 'url', // TODO: [🧠] Maybe allow b64_json
19913
19933
  };
@@ -20805,6 +20825,7 @@
20805
20825
  thread: {
20806
20826
  messages: threadMessages,
20807
20827
  },
20828
+ tools: modelRequirements.tools === undefined ? undefined : mapToolsToOpenAi(modelRequirements.tools),
20808
20829
  // <- TODO: Add user identification here> user: this.options.user,
20809
20830
  };
20810
20831
  const start = $getCurrentDate();
@@ -25758,19 +25779,37 @@
25758
25779
  `);
25759
25780
  }
25760
25781
  applyToAgentModelRequirements(requirements, content) {
25761
- // We simply mark that browser capability is enabled in metadata
25762
- // Get existing metadata
25763
- const existingMetadata = requirements.metadata || {};
25764
25782
  // Get existing tools array or create new one
25765
- const existingTools = existingMetadata.tools || [];
25766
- // Add 'browser' to tools if not already present
25767
- const updatedTools = existingTools.includes('browser') ? existingTools : [...existingTools, 'browser'];
25768
- // Return requirements with updated metadata
25783
+ const existingTools = requirements.tools || [];
25784
+ // Add 'web_browser' to tools if not already present
25785
+ const updatedTools = existingTools.some((tool) => tool.name === 'web_browser')
25786
+ ? existingTools
25787
+ : [
25788
+ ...existingTools,
25789
+ {
25790
+ name: 'web_browser',
25791
+ description: spaceTrim$1.spaceTrim(`
25792
+ A tool that can browse the web.
25793
+ Use this tool when you need to access specific websites or browse the internet.
25794
+ `),
25795
+ parameters: {
25796
+ type: 'object',
25797
+ properties: {
25798
+ url: {
25799
+ type: 'string',
25800
+ description: 'The URL to browse',
25801
+ },
25802
+ },
25803
+ required: ['url'],
25804
+ },
25805
+ },
25806
+ ];
25807
+ // Return requirements with updated tools and metadata
25769
25808
  return {
25770
25809
  ...requirements,
25810
+ tools: updatedTools,
25771
25811
  metadata: {
25772
- ...existingMetadata,
25773
- tools: updatedTools,
25812
+ ...requirements.metadata,
25774
25813
  useBrowser: true,
25775
25814
  },
25776
25815
  };
@@ -25863,13 +25902,13 @@
25863
25902
  * The `USE SEARCH ENGINE` commitment indicates that the agent should utilize a search engine tool
25864
25903
  * to access and retrieve up-to-date information from the internet when necessary.
25865
25904
  *
25866
- * The content following `USE SEARCH ENGINE` is ignored (similar to NOTE).
25905
+ * The content following `USE SEARCH ENGINE` is an arbitrary text that the agent should know (e.g. search scope or instructions).
25867
25906
  *
25868
25907
  * Example usage in agent source:
25869
25908
  *
25870
25909
  * ```book
25871
25910
  * USE SEARCH ENGINE
25872
- * USE SEARCH ENGINE This will be ignored
25911
+ * USE SEARCH ENGINE Hledej informace o Přemyslovcích
25873
25912
  * ```
25874
25913
  *
25875
25914
  * @private [🪔] Maybe export the commitments through some package
@@ -25901,7 +25940,7 @@
25901
25940
 
25902
25941
  ## Key aspects
25903
25942
 
25904
- - The content following \`USE SEARCH ENGINE\` is ignored (similar to NOTE)
25943
+ - The content following \`USE SEARCH ENGINE\` is an arbitrary text that the agent should know (e.g. search scope or instructions).
25905
25944
  - The actual search engine tool usage is handled by the agent runtime
25906
25945
  - Allows the agent to search for current information from the web
25907
25946
  - Useful for research tasks, finding facts, and accessing dynamic content
@@ -25926,20 +25965,39 @@
25926
25965
  `);
25927
25966
  }
25928
25967
  applyToAgentModelRequirements(requirements, content) {
25929
- // We simply mark that search engine capability is enabled in metadata
25930
- // Get existing metadata
25931
- const existingMetadata = requirements.metadata || {};
25932
25968
  // Get existing tools array or create new one
25933
- const existingTools = existingMetadata.tools || [];
25934
- // Add 'search-engine' to tools if not already present
25935
- const updatedTools = existingTools.includes('search-engine') ? existingTools : [...existingTools, 'search-engine'];
25936
- // Return requirements with updated metadata
25969
+ const existingTools = requirements.tools || [];
25970
+ // Add 'web_search' to tools if not already present
25971
+ const updatedTools = existingTools.some((tool) => tool.name === 'web_search')
25972
+ ? existingTools
25973
+ : [
25974
+ ...existingTools,
25975
+ {
25976
+ name: 'web_search',
25977
+ description: spaceTrim$1.spaceTrim(`
25978
+ Search the internet for information.
25979
+ Use this tool when you need to find up-to-date information or facts that you don't know.
25980
+ ${!content ? '' : `Search scope / instructions: ${content}`}
25981
+ `),
25982
+ parameters: {
25983
+ type: 'object',
25984
+ properties: {
25985
+ query: {
25986
+ type: 'string',
25987
+ description: 'The search query',
25988
+ },
25989
+ },
25990
+ required: ['query'],
25991
+ },
25992
+ },
25993
+ ];
25994
+ // Return requirements with updated tools and metadata
25937
25995
  return {
25938
25996
  ...requirements,
25997
+ tools: updatedTools,
25939
25998
  metadata: {
25940
- ...existingMetadata,
25941
- tools: updatedTools,
25942
- useSearchEngine: true,
25999
+ ...requirements.metadata,
26000
+ useSearchEngine: content || true,
25943
26001
  },
25944
26002
  };
25945
26003
  }
@@ -26604,6 +26662,10 @@
26604
26662
  meta.image = spaceTrim__default["default"](commitment.content);
26605
26663
  continue;
26606
26664
  }
26665
+ if (commitment.type === 'META DESCRIPTION') {
26666
+ meta.description = spaceTrim__default["default"](commitment.content);
26667
+ continue;
26668
+ }
26607
26669
  if (commitment.type === 'META COLOR') {
26608
26670
  meta.color = normalizeSeparator(commitment.content);
26609
26671
  continue;