@promptbook/browser 0.103.0-55 → 0.103.0-66
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 +803 -332
- package/esm/index.es.js.map +1 -1
- package/esm/typings/src/_packages/components.index.d.ts +2 -2
- package/esm/typings/src/_packages/core.index.d.ts +6 -8
- package/esm/typings/src/_packages/types.index.d.ts +7 -1
- package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +2 -1
- package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +1 -1
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +3 -0
- package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +6 -0
- package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
- package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentIntegration.d.ts +52 -0
- package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentSeamlessIntegration.d.ts +14 -0
- package/esm/typings/src/book-components/icons/SendIcon.d.ts +3 -0
- package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +4 -0
- package/esm/typings/src/commitments/CLOSED/CLOSED.test.d.ts +4 -0
- package/esm/typings/src/commitments/META_COLOR/META_COLOR.d.ts +6 -0
- package/esm/typings/src/commitments/META_FONT/META_FONT.d.ts +42 -0
- package/esm/typings/src/commitments/USE/USE.d.ts +53 -0
- package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +42 -0
- package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.test.d.ts +1 -0
- package/esm/typings/src/commitments/{IMPORTANT/IMPORTANT.d.ts → USE_MCP/USE_MCP.d.ts} +16 -5
- package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +38 -0
- package/esm/typings/src/commitments/_base/BaseCommitmentDefinition.d.ts +6 -0
- package/esm/typings/src/commitments/index.d.ts +93 -1
- package/esm/typings/src/llm-providers/agent/Agent.d.ts +3 -1
- package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
- package/esm/typings/src/playground/playground.d.ts +3 -0
- package/esm/typings/src/types/typeAliases.d.ts +6 -0
- package/esm/typings/src/utils/color/Color.d.ts +9 -1
- package/esm/typings/src/utils/color/css-colors.d.ts +1 -0
- package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +6 -0
- package/esm/typings/src/utils/random/CzechNamePool.d.ts +7 -0
- package/esm/typings/src/utils/random/EnglishNamePool.d.ts +7 -0
- package/esm/typings/src/utils/random/NamePool.d.ts +17 -0
- package/esm/typings/src/utils/random/getNamePool.d.ts +10 -0
- package/esm/typings/src/version.d.ts +1 -1
- package/package.json +3 -3
- package/umd/index.umd.js +791 -320
- package/umd/index.umd.js.map +1 -1
- package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgent.d.ts +0 -29
- package/esm/typings/src/commitments/registry.d.ts +0 -68
- package/esm/typings/src/playground/playground1.d.ts +0 -2
package/esm/index.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import spaceTrim$
|
|
1
|
+
import spaceTrim$2, { spaceTrim as spaceTrim$1 } from 'spacetrim';
|
|
2
2
|
import { randomBytes } from 'crypto';
|
|
3
3
|
import { SHA256 } from 'crypto-js';
|
|
4
4
|
import hexEncoder from 'crypto-js/enc-hex';
|
|
@@ -19,7 +19,7 @@ const BOOK_LANGUAGE_VERSION = '2.0.0';
|
|
|
19
19
|
* @generated
|
|
20
20
|
* @see https://github.com/webgptorg/promptbook
|
|
21
21
|
*/
|
|
22
|
-
const PROMPTBOOK_ENGINE_VERSION = '0.103.0-
|
|
22
|
+
const PROMPTBOOK_ENGINE_VERSION = '0.103.0-66';
|
|
23
23
|
/**
|
|
24
24
|
* TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
|
|
25
25
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
@@ -77,13 +77,13 @@ class SimplePromptInterfaceTools {
|
|
|
77
77
|
* Trigger window.prompt dialog
|
|
78
78
|
*/
|
|
79
79
|
async promptDialog(options) {
|
|
80
|
-
const answer = window.prompt(spaceTrim((block) => `
|
|
80
|
+
const answer = window.prompt(spaceTrim$1((block) => `
|
|
81
81
|
${block(options.promptTitle)}
|
|
82
82
|
|
|
83
83
|
${block(options.promptMessage)}
|
|
84
84
|
`));
|
|
85
85
|
if (this.options.isVerbose) {
|
|
86
|
-
console.info(spaceTrim((block) => `
|
|
86
|
+
console.info(spaceTrim$1((block) => `
|
|
87
87
|
📖 ${block(options.promptTitle)}
|
|
88
88
|
👤 ${block(answer || '🚫 User cancelled prompt')}
|
|
89
89
|
`));
|
|
@@ -151,6 +151,17 @@ const $isRunningInWebWorker = new Function(`
|
|
|
151
151
|
* TODO: [🎺]
|
|
152
152
|
*/
|
|
153
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Trims string from all 4 sides
|
|
156
|
+
*
|
|
157
|
+
* Note: This is a re-exported function from the `spacetrim` package which is
|
|
158
|
+
* Developed by same author @hejny as this package
|
|
159
|
+
*
|
|
160
|
+
* @public exported from `@promptbook/utils`
|
|
161
|
+
* @see https://github.com/hejny/spacetrim#usage
|
|
162
|
+
*/
|
|
163
|
+
const spaceTrim = spaceTrim$1;
|
|
164
|
+
|
|
154
165
|
/**
|
|
155
166
|
* @private util of `@promptbook/color`
|
|
156
167
|
* @de
|
|
@@ -199,6 +210,7 @@ function take(initialValue) {
|
|
|
199
210
|
* @public exported from `@promptbook/color`
|
|
200
211
|
*/
|
|
201
212
|
const CSS_COLORS = {
|
|
213
|
+
promptbook: '#79EAFD',
|
|
202
214
|
transparent: 'rgba(0,0,0,0)',
|
|
203
215
|
aliceblue: '#f0f8ff',
|
|
204
216
|
antiquewhite: '#faebd7',
|
|
@@ -399,21 +411,61 @@ class Color {
|
|
|
399
411
|
* @param color
|
|
400
412
|
* @returns Color object
|
|
401
413
|
*/
|
|
402
|
-
static from(color) {
|
|
403
|
-
if (color
|
|
414
|
+
static from(color, _isSingleValue = false) {
|
|
415
|
+
if (color === '') {
|
|
416
|
+
throw new Error(`Can not create color from empty string`);
|
|
417
|
+
}
|
|
418
|
+
else if (color instanceof Color) {
|
|
404
419
|
return take(color);
|
|
405
420
|
}
|
|
406
421
|
else if (Color.isColor(color)) {
|
|
407
422
|
return take(color);
|
|
408
423
|
}
|
|
409
424
|
else if (typeof color === 'string') {
|
|
410
|
-
|
|
425
|
+
try {
|
|
426
|
+
return Color.fromString(color);
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
// <- Note: Can not use `assertsError(error)` here because it causes circular dependency
|
|
430
|
+
if (_isSingleValue) {
|
|
431
|
+
throw error;
|
|
432
|
+
}
|
|
433
|
+
const parts = color.split(/[\s+,;|]/);
|
|
434
|
+
if (parts.length > 0) {
|
|
435
|
+
return Color.from(parts[0].trim(), true);
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
throw new Error(`Can not create color from given string "${color}"`);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
411
441
|
}
|
|
412
442
|
else {
|
|
413
443
|
console.error({ color });
|
|
414
444
|
throw new Error(`Can not create color from given object`);
|
|
415
445
|
}
|
|
416
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Creates a new Color instance from miscellaneous formats
|
|
449
|
+
* It just does not throw error when it fails, it returns PROMPTBOOK_COLOR instead
|
|
450
|
+
*
|
|
451
|
+
* @param color
|
|
452
|
+
* @returns Color object
|
|
453
|
+
*/
|
|
454
|
+
static fromSafe(color) {
|
|
455
|
+
try {
|
|
456
|
+
return Color.from(color);
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
// <- Note: Can not use `assertsError(error)` here because it causes circular dependency
|
|
460
|
+
console.warn(spaceTrim((block) => `
|
|
461
|
+
Color.fromSafe error:
|
|
462
|
+
${block(error.message)}
|
|
463
|
+
|
|
464
|
+
Returning default PROMPTBOOK_COLOR.
|
|
465
|
+
`));
|
|
466
|
+
return Color.fromString('promptbook');
|
|
467
|
+
}
|
|
468
|
+
}
|
|
417
469
|
/**
|
|
418
470
|
* Creates a new Color instance from miscellaneous string formats
|
|
419
471
|
*
|
|
@@ -1003,7 +1055,7 @@ const ADMIN_GITHUB_NAME = 'hejny';
|
|
|
1003
1055
|
*
|
|
1004
1056
|
* @public exported from `@promptbook/core`
|
|
1005
1057
|
*/
|
|
1006
|
-
const PROMPTBOOK_COLOR = Color.
|
|
1058
|
+
const PROMPTBOOK_COLOR = Color.fromString('promptbook');
|
|
1007
1059
|
// <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
|
|
1008
1060
|
/**
|
|
1009
1061
|
* Colors for syntax highlighting in the `<BookEditor/>`
|
|
@@ -1096,7 +1148,7 @@ parseInt(process.env.API_REQUEST_TIMEOUT || '90000');
|
|
|
1096
1148
|
*/
|
|
1097
1149
|
class NotYetImplementedError extends Error {
|
|
1098
1150
|
constructor(message) {
|
|
1099
|
-
super(spaceTrim((block) => `
|
|
1151
|
+
super(spaceTrim$1((block) => `
|
|
1100
1152
|
${block(message)}
|
|
1101
1153
|
|
|
1102
1154
|
Note: This feature is not implemented yet but it will be soon.
|
|
@@ -1120,7 +1172,7 @@ class NotYetImplementedError extends Error {
|
|
|
1120
1172
|
function getErrorReportUrl(error) {
|
|
1121
1173
|
const report = {
|
|
1122
1174
|
title: `🐜 Error report from ${NAME}`,
|
|
1123
|
-
body: spaceTrim$
|
|
1175
|
+
body: spaceTrim$2((block) => `
|
|
1124
1176
|
|
|
1125
1177
|
|
|
1126
1178
|
\`${error.name || 'Error'}\` has occurred in the [${NAME}], please look into it @${ADMIN_GITHUB_NAME}.
|
|
@@ -1163,7 +1215,7 @@ function getErrorReportUrl(error) {
|
|
|
1163
1215
|
*/
|
|
1164
1216
|
class UnexpectedError extends Error {
|
|
1165
1217
|
constructor(message) {
|
|
1166
|
-
super(spaceTrim((block) => `
|
|
1218
|
+
super(spaceTrim$1((block) => `
|
|
1167
1219
|
${block(message)}
|
|
1168
1220
|
|
|
1169
1221
|
Note: This error should not happen.
|
|
@@ -1444,7 +1496,7 @@ function jsonParse(value) {
|
|
|
1444
1496
|
}
|
|
1445
1497
|
else if (typeof value !== 'string') {
|
|
1446
1498
|
console.error('Can not parse JSON from non-string value.', { text: value });
|
|
1447
|
-
throw new Error(spaceTrim$
|
|
1499
|
+
throw new Error(spaceTrim$2(`
|
|
1448
1500
|
Can not parse JSON from non-string value.
|
|
1449
1501
|
|
|
1450
1502
|
The value type: ${typeof value}
|
|
@@ -1458,7 +1510,7 @@ function jsonParse(value) {
|
|
|
1458
1510
|
if (!(error instanceof Error)) {
|
|
1459
1511
|
throw error;
|
|
1460
1512
|
}
|
|
1461
|
-
throw new Error(spaceTrim$
|
|
1513
|
+
throw new Error(spaceTrim$2((block) => `
|
|
1462
1514
|
${block(error.message)}
|
|
1463
1515
|
|
|
1464
1516
|
The expected JSON text:
|
|
@@ -1518,7 +1570,7 @@ class WrappedError extends Error {
|
|
|
1518
1570
|
constructor(whatWasThrown) {
|
|
1519
1571
|
const tag = `[🤮]`;
|
|
1520
1572
|
console.error(tag, whatWasThrown);
|
|
1521
|
-
super(spaceTrim(`
|
|
1573
|
+
super(spaceTrim$1(`
|
|
1522
1574
|
Non-Error object was thrown
|
|
1523
1575
|
|
|
1524
1576
|
Note: Look for ${tag} in the console for more details
|
|
@@ -1607,7 +1659,7 @@ function checkSerializableAsJson(options) {
|
|
|
1607
1659
|
}
|
|
1608
1660
|
else if (typeof value === 'object') {
|
|
1609
1661
|
if (value instanceof Date) {
|
|
1610
|
-
throw new UnexpectedError(spaceTrim$
|
|
1662
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
1611
1663
|
\`${name}\` is Date
|
|
1612
1664
|
|
|
1613
1665
|
Use \`string_date_iso8601\` instead
|
|
@@ -1626,7 +1678,7 @@ function checkSerializableAsJson(options) {
|
|
|
1626
1678
|
throw new UnexpectedError(`${name} is RegExp`);
|
|
1627
1679
|
}
|
|
1628
1680
|
else if (value instanceof Error) {
|
|
1629
|
-
throw new UnexpectedError(spaceTrim$
|
|
1681
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
1630
1682
|
\`${name}\` is unserialized Error
|
|
1631
1683
|
|
|
1632
1684
|
Use function \`serializeError\`
|
|
@@ -1649,7 +1701,7 @@ function checkSerializableAsJson(options) {
|
|
|
1649
1701
|
}
|
|
1650
1702
|
catch (error) {
|
|
1651
1703
|
assertsError(error);
|
|
1652
|
-
throw new UnexpectedError(spaceTrim$
|
|
1704
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
1653
1705
|
\`${name}\` is not serializable
|
|
1654
1706
|
|
|
1655
1707
|
${block(error.stack || error.message)}
|
|
@@ -1681,7 +1733,7 @@ function checkSerializableAsJson(options) {
|
|
|
1681
1733
|
}
|
|
1682
1734
|
}
|
|
1683
1735
|
else {
|
|
1684
|
-
throw new UnexpectedError(spaceTrim$
|
|
1736
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
1685
1737
|
\`${name}\` is unknown type
|
|
1686
1738
|
|
|
1687
1739
|
Additional message for \`${name}\`:
|
|
@@ -1831,7 +1883,7 @@ function isSerializableAsJson(value) {
|
|
|
1831
1883
|
*/
|
|
1832
1884
|
function stringifyPipelineJson(pipeline) {
|
|
1833
1885
|
if (!isSerializableAsJson(pipeline)) {
|
|
1834
|
-
throw new UnexpectedError(spaceTrim$
|
|
1886
|
+
throw new UnexpectedError(spaceTrim$2(`
|
|
1835
1887
|
Cannot stringify the pipeline, because it is not serializable as JSON
|
|
1836
1888
|
|
|
1837
1889
|
There can be multiple reasons:
|
|
@@ -2117,7 +2169,7 @@ function valueToString(value) {
|
|
|
2117
2169
|
* @public exported from `@promptbook/utils`
|
|
2118
2170
|
*/
|
|
2119
2171
|
function computeHash(value) {
|
|
2120
|
-
return SHA256(hexEncoder.parse(spaceTrim$
|
|
2172
|
+
return SHA256(hexEncoder.parse(spaceTrim$2(valueToString(value)))).toString( /* hex */);
|
|
2121
2173
|
}
|
|
2122
2174
|
/**
|
|
2123
2175
|
* TODO: [🥬][🥬] Use this ACRY
|
|
@@ -2649,7 +2701,7 @@ new Function(`
|
|
|
2649
2701
|
* @public exported from `@promptbook/core`
|
|
2650
2702
|
*/
|
|
2651
2703
|
function normalizeAgentName(rawAgentName) {
|
|
2652
|
-
return titleToName(spaceTrim$
|
|
2704
|
+
return titleToName(spaceTrim$2(rawAgentName));
|
|
2653
2705
|
}
|
|
2654
2706
|
|
|
2655
2707
|
/**
|
|
@@ -2670,15 +2722,19 @@ function createDefaultAgentName(agentSource) {
|
|
|
2670
2722
|
*
|
|
2671
2723
|
* @private - TODO: [🧠] Maybe should be public?
|
|
2672
2724
|
*/
|
|
2673
|
-
function createCommitmentRegex(commitment, aliases = []) {
|
|
2725
|
+
function createCommitmentRegex(commitment, aliases = [], requiresContent = true) {
|
|
2674
2726
|
const allCommitments = [commitment, ...aliases];
|
|
2675
2727
|
const patterns = allCommitments.map((c) => {
|
|
2676
2728
|
const escapedCommitment = c.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
2677
2729
|
return escapedCommitment.split(/\s+/).join('\\s+');
|
|
2678
2730
|
});
|
|
2679
2731
|
const keywordPattern = patterns.join('|');
|
|
2680
|
-
|
|
2681
|
-
|
|
2732
|
+
if (requiresContent) {
|
|
2733
|
+
return new RegExp(`^\\s*(?<type>${keywordPattern})\\b\\s+(?<contents>.+)$`, 'gim');
|
|
2734
|
+
}
|
|
2735
|
+
else {
|
|
2736
|
+
return new RegExp(`^\\s*(?<type>${keywordPattern})\\b(?:\\s+(?<contents>.+))?$`, 'gim');
|
|
2737
|
+
}
|
|
2682
2738
|
}
|
|
2683
2739
|
/**
|
|
2684
2740
|
* Generates a regex pattern to match a specific commitment type
|
|
@@ -2711,12 +2767,20 @@ class BaseCommitmentDefinition {
|
|
|
2711
2767
|
this.type = type;
|
|
2712
2768
|
this.aliases = aliases;
|
|
2713
2769
|
}
|
|
2770
|
+
/**
|
|
2771
|
+
* Whether this commitment requires content.
|
|
2772
|
+
* If true, regex will match only if there is content after the commitment keyword.
|
|
2773
|
+
* If false, regex will match even if there is no content.
|
|
2774
|
+
*/
|
|
2775
|
+
get requiresContent() {
|
|
2776
|
+
return true;
|
|
2777
|
+
}
|
|
2714
2778
|
/**
|
|
2715
2779
|
* Creates a regex pattern to match this commitment in agent source
|
|
2716
2780
|
* Uses the existing createCommitmentRegex function as internal helper
|
|
2717
2781
|
*/
|
|
2718
2782
|
createRegex() {
|
|
2719
|
-
return createCommitmentRegex(this.type, this.aliases);
|
|
2783
|
+
return createCommitmentRegex(this.type, this.aliases, this.requiresContent);
|
|
2720
2784
|
}
|
|
2721
2785
|
/**
|
|
2722
2786
|
* Creates a regex pattern to match just the commitment type
|
|
@@ -2803,7 +2867,7 @@ class ActionCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
2803
2867
|
* Markdown documentation for ACTION commitment.
|
|
2804
2868
|
*/
|
|
2805
2869
|
get documentation() {
|
|
2806
|
-
return spaceTrim(`
|
|
2870
|
+
return spaceTrim$1(`
|
|
2807
2871
|
# ${this.type}
|
|
2808
2872
|
|
|
2809
2873
|
Defines specific actions or capabilities that the agent can perform.
|
|
@@ -2868,6 +2932,12 @@ class ClosedCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
2868
2932
|
constructor() {
|
|
2869
2933
|
super('CLOSED');
|
|
2870
2934
|
}
|
|
2935
|
+
/**
|
|
2936
|
+
* The `CLOSED` commitment is standalone.
|
|
2937
|
+
*/
|
|
2938
|
+
get requiresContent() {
|
|
2939
|
+
return false;
|
|
2940
|
+
}
|
|
2871
2941
|
/**
|
|
2872
2942
|
* Short one-line description of CLOSED.
|
|
2873
2943
|
*/
|
|
@@ -2884,7 +2954,7 @@ class ClosedCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
2884
2954
|
* Markdown documentation for CLOSED commitment.
|
|
2885
2955
|
*/
|
|
2886
2956
|
get documentation() {
|
|
2887
|
-
return spaceTrim(`
|
|
2957
|
+
return spaceTrim$1(`
|
|
2888
2958
|
# CLOSED
|
|
2889
2959
|
|
|
2890
2960
|
Specifies that the agent **cannot** be modified by conversation with it.
|
|
@@ -2943,7 +3013,7 @@ class ComponentCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
2943
3013
|
* Markdown documentation for COMPONENT commitment.
|
|
2944
3014
|
*/
|
|
2945
3015
|
get documentation() {
|
|
2946
|
-
return spaceTrim(`
|
|
3016
|
+
return spaceTrim$1(`
|
|
2947
3017
|
# COMPONENT
|
|
2948
3018
|
|
|
2949
3019
|
Defines a UI component that the agent can render in the chat.
|
|
@@ -3015,7 +3085,7 @@ class DeleteCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3015
3085
|
* Markdown documentation for DELETE commitment.
|
|
3016
3086
|
*/
|
|
3017
3087
|
get documentation() {
|
|
3018
|
-
return spaceTrim(`
|
|
3088
|
+
return spaceTrim$1(`
|
|
3019
3089
|
# DELETE (CANCEL, DISCARD, REMOVE)
|
|
3020
3090
|
|
|
3021
3091
|
A commitment to remove or disregard certain information or context. This can be useful for overriding previous commitments or removing unwanted behaviors.
|
|
@@ -3137,7 +3207,7 @@ class FormatCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3137
3207
|
* Markdown documentation for FORMAT commitment.
|
|
3138
3208
|
*/
|
|
3139
3209
|
get documentation() {
|
|
3140
|
-
return spaceTrim(`
|
|
3210
|
+
return spaceTrim$1(`
|
|
3141
3211
|
# ${this.type}
|
|
3142
3212
|
|
|
3143
3213
|
Defines the specific output structure and formatting for responses (data formats, templates, structure).
|
|
@@ -3215,7 +3285,7 @@ class FromCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3215
3285
|
* Markdown documentation for FROM commitment.
|
|
3216
3286
|
*/
|
|
3217
3287
|
get documentation() {
|
|
3218
|
-
return spaceTrim(`
|
|
3288
|
+
return spaceTrim$1(`
|
|
3219
3289
|
# ${this.type}
|
|
3220
3290
|
|
|
3221
3291
|
Inherits agent source from another agent.
|
|
@@ -3291,7 +3361,7 @@ class GoalCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3291
3361
|
* Markdown documentation for GOAL commitment.
|
|
3292
3362
|
*/
|
|
3293
3363
|
get documentation() {
|
|
3294
|
-
return spaceTrim(`
|
|
3364
|
+
return spaceTrim$1(`
|
|
3295
3365
|
# ${this.type}
|
|
3296
3366
|
|
|
3297
3367
|
Defines the main goal which should be achieved by the AI assistant. There can be multiple goals, and later goals are more important than earlier goals.
|
|
@@ -3355,217 +3425,6 @@ class GoalCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3355
3425
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
3356
3426
|
*/
|
|
3357
3427
|
|
|
3358
|
-
/**
|
|
3359
|
-
* Placeholder commitment definition for commitments that are not yet implemented
|
|
3360
|
-
*
|
|
3361
|
-
* This commitment simply adds its content 1:1 into the system message,
|
|
3362
|
-
* preserving the original behavior until proper implementation is added.
|
|
3363
|
-
*
|
|
3364
|
-
* @public exported from `@promptbook/core`
|
|
3365
|
-
*/
|
|
3366
|
-
class NotYetImplementedCommitmentDefinition extends BaseCommitmentDefinition {
|
|
3367
|
-
constructor(type) {
|
|
3368
|
-
super(type);
|
|
3369
|
-
}
|
|
3370
|
-
/**
|
|
3371
|
-
* Short one-line description of a placeholder commitment.
|
|
3372
|
-
*/
|
|
3373
|
-
get description() {
|
|
3374
|
-
return 'Placeholder commitment that appends content verbatim to the system message.';
|
|
3375
|
-
}
|
|
3376
|
-
/**
|
|
3377
|
-
* Icon for this commitment.
|
|
3378
|
-
*/
|
|
3379
|
-
get icon() {
|
|
3380
|
-
return '🚧';
|
|
3381
|
-
}
|
|
3382
|
-
/**
|
|
3383
|
-
* Markdown documentation available at runtime.
|
|
3384
|
-
*/
|
|
3385
|
-
get documentation() {
|
|
3386
|
-
return spaceTrim(`
|
|
3387
|
-
# ${this.type}
|
|
3388
|
-
|
|
3389
|
-
This commitment is not yet fully implemented.
|
|
3390
|
-
|
|
3391
|
-
## Key aspects
|
|
3392
|
-
|
|
3393
|
-
- Content is appended directly to the system message.
|
|
3394
|
-
- No special processing or validation is performed.
|
|
3395
|
-
- Behavior preserved until proper implementation is added.
|
|
3396
|
-
|
|
3397
|
-
## Status
|
|
3398
|
-
|
|
3399
|
-
- **Status:** Placeholder implementation
|
|
3400
|
-
- **Effect:** Appends content prefixed by commitment type
|
|
3401
|
-
- **Future:** Will be replaced with specialized logic
|
|
3402
|
-
|
|
3403
|
-
## Examples
|
|
3404
|
-
|
|
3405
|
-
\`\`\`book
|
|
3406
|
-
Example Agent
|
|
3407
|
-
|
|
3408
|
-
PERSONA You are a helpful assistant
|
|
3409
|
-
${this.type} Your content here
|
|
3410
|
-
RULE Always be helpful
|
|
3411
|
-
\`\`\`
|
|
3412
|
-
`);
|
|
3413
|
-
}
|
|
3414
|
-
applyToAgentModelRequirements(requirements, content) {
|
|
3415
|
-
const trimmedContent = content.trim();
|
|
3416
|
-
if (!trimmedContent) {
|
|
3417
|
-
return requirements;
|
|
3418
|
-
}
|
|
3419
|
-
// Add the commitment content 1:1 to the system message
|
|
3420
|
-
const commitmentLine = `${this.type} ${trimmedContent}`;
|
|
3421
|
-
return this.appendToSystemMessage(requirements, commitmentLine, '\n\n');
|
|
3422
|
-
}
|
|
3423
|
-
}
|
|
3424
|
-
|
|
3425
|
-
/**
|
|
3426
|
-
* Registry of all available commitment definitions
|
|
3427
|
-
* This array contains instances of all commitment definitions
|
|
3428
|
-
* This is the single source of truth for all commitments in the system
|
|
3429
|
-
*
|
|
3430
|
-
* @private Use functions to access commitments instead of this array directly
|
|
3431
|
-
*/
|
|
3432
|
-
const COMMITMENT_REGISTRY = [];
|
|
3433
|
-
/**
|
|
3434
|
-
* Registers a new commitment definition
|
|
3435
|
-
* @param definition The commitment definition to register
|
|
3436
|
-
*
|
|
3437
|
-
* @public exported from `@promptbook/core`
|
|
3438
|
-
*/
|
|
3439
|
-
function registerCommitment(definition) {
|
|
3440
|
-
COMMITMENT_REGISTRY.push(definition);
|
|
3441
|
-
}
|
|
3442
|
-
/**
|
|
3443
|
-
* Gets all available commitment definitions
|
|
3444
|
-
* @returns Array of all commitment definitions
|
|
3445
|
-
*
|
|
3446
|
-
* @public exported from `@promptbook/core`
|
|
3447
|
-
*/
|
|
3448
|
-
function getAllCommitmentDefinitions() {
|
|
3449
|
-
return $deepFreeze([...COMMITMENT_REGISTRY]);
|
|
3450
|
-
}
|
|
3451
|
-
/**
|
|
3452
|
-
* TODO: !!!! Proofread this file
|
|
3453
|
-
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
3454
|
-
*/
|
|
3455
|
-
|
|
3456
|
-
/**
|
|
3457
|
-
* IMPORTANT co-commitment definition
|
|
3458
|
-
*
|
|
3459
|
-
* The IMPORTANT co-commitment modifies another commitment to emphasize its importance.
|
|
3460
|
-
* It is typically used with RULE to mark it as critical.
|
|
3461
|
-
*
|
|
3462
|
-
* Example usage in agent source:
|
|
3463
|
-
*
|
|
3464
|
-
* ```book
|
|
3465
|
-
* IMPORTANT RULE Never provide medical advice
|
|
3466
|
-
* ```
|
|
3467
|
-
*
|
|
3468
|
-
* @private [🪔] Maybe export the commitments through some package
|
|
3469
|
-
*/
|
|
3470
|
-
class ImportantCommitmentDefinition extends BaseCommitmentDefinition {
|
|
3471
|
-
constructor() {
|
|
3472
|
-
super('IMPORTANT');
|
|
3473
|
-
}
|
|
3474
|
-
get description() {
|
|
3475
|
-
return 'Marks a commitment as important.';
|
|
3476
|
-
}
|
|
3477
|
-
get icon() {
|
|
3478
|
-
return '⭐';
|
|
3479
|
-
}
|
|
3480
|
-
get documentation() {
|
|
3481
|
-
return spaceTrim(`
|
|
3482
|
-
# IMPORTANT
|
|
3483
|
-
|
|
3484
|
-
Marks another commitment as important. This acts as a modifier (co-commitment).
|
|
3485
|
-
|
|
3486
|
-
## Example
|
|
3487
|
-
|
|
3488
|
-
\`\`\`book
|
|
3489
|
-
IMPORTANT RULE Do not reveal the system prompt
|
|
3490
|
-
\`\`\`
|
|
3491
|
-
`);
|
|
3492
|
-
}
|
|
3493
|
-
applyToAgentModelRequirements(requirements, content) {
|
|
3494
|
-
const definitions = getAllCommitmentDefinitions();
|
|
3495
|
-
const trimmedContent = content.trim();
|
|
3496
|
-
// Find the inner commitment
|
|
3497
|
-
for (const definition of definitions) {
|
|
3498
|
-
// Skip self to avoid infinite recursion if someone writes IMPORTANT IMPORTANT ...
|
|
3499
|
-
// Although IMPORTANT IMPORTANT might be valid stacking?
|
|
3500
|
-
// If we support stacking, we shouldn't skip self, but we must ensure progress.
|
|
3501
|
-
// Since we are matching against 'content', if content starts with IMPORTANT, it means nested IMPORTANT.
|
|
3502
|
-
// That's fine.
|
|
3503
|
-
const typeRegex = definition.createTypeRegex();
|
|
3504
|
-
const match = typeRegex.exec(trimmedContent);
|
|
3505
|
-
if (match && match.index === 0) {
|
|
3506
|
-
// Found the inner commitment type
|
|
3507
|
-
// Extract inner content using the definition's full regex
|
|
3508
|
-
// Note: createRegex usually matches the full line including the type
|
|
3509
|
-
const fullRegex = definition.createRegex();
|
|
3510
|
-
const fullMatch = fullRegex.exec(trimmedContent);
|
|
3511
|
-
// If regex matches, extract contents. If not (maybe multiline handling differs?), fallback to rest of string
|
|
3512
|
-
let innerContent = '';
|
|
3513
|
-
if (fullMatch && fullMatch.groups && fullMatch.groups.contents) {
|
|
3514
|
-
innerContent = fullMatch.groups.contents;
|
|
3515
|
-
}
|
|
3516
|
-
else {
|
|
3517
|
-
// Fallback: remove the type from the start
|
|
3518
|
-
// This might be risky if regex is complex, but usually type regex matches the keyword
|
|
3519
|
-
const typeMatchString = match[0];
|
|
3520
|
-
innerContent = trimmedContent.substring(typeMatchString.length).trim();
|
|
3521
|
-
}
|
|
3522
|
-
// Apply the inner commitment
|
|
3523
|
-
const modifiedRequirements = definition.applyToAgentModelRequirements(requirements, innerContent);
|
|
3524
|
-
// Now modify the result to reflect "IMPORTANT" status
|
|
3525
|
-
// We compare the system message
|
|
3526
|
-
if (modifiedRequirements.systemMessage !== requirements.systemMessage) {
|
|
3527
|
-
const originalMsg = requirements.systemMessage;
|
|
3528
|
-
const newMsg = modifiedRequirements.systemMessage;
|
|
3529
|
-
// If the inner commitment appended something
|
|
3530
|
-
if (newMsg.startsWith(originalMsg)) {
|
|
3531
|
-
const appended = newMsg.substring(originalMsg.length);
|
|
3532
|
-
// Add "IMPORTANT: " prefix to the appended part
|
|
3533
|
-
// We need to be careful about newlines
|
|
3534
|
-
// Heuristic: If appended starts with separator (newlines), preserve them
|
|
3535
|
-
const matchSep = appended.match(/^(\s*)(.*)/s);
|
|
3536
|
-
if (matchSep) {
|
|
3537
|
-
const [, separator, text] = matchSep;
|
|
3538
|
-
// Check if it already has "Rule:" prefix or similar
|
|
3539
|
-
// We want "IMPORTANT Rule: ..."
|
|
3540
|
-
// Let's just prepend IMPORTANT to the text
|
|
3541
|
-
// But formatted nicely
|
|
3542
|
-
// If it's a rule: "\n\nRule: content"
|
|
3543
|
-
// We want "\n\nIMPORTANT Rule: content"
|
|
3544
|
-
const importantText = `IMPORTANT ${text}`;
|
|
3545
|
-
return {
|
|
3546
|
-
...modifiedRequirements,
|
|
3547
|
-
systemMessage: originalMsg + separator + importantText
|
|
3548
|
-
};
|
|
3549
|
-
}
|
|
3550
|
-
}
|
|
3551
|
-
}
|
|
3552
|
-
// If no system message change or we couldn't detect how to modify it, just return the modified requirements
|
|
3553
|
-
// Maybe the inner commitment modified metadata?
|
|
3554
|
-
return modifiedRequirements;
|
|
3555
|
-
}
|
|
3556
|
-
}
|
|
3557
|
-
// If no inner commitment found, treat as a standalone note?
|
|
3558
|
-
// Or warn?
|
|
3559
|
-
// For now, treat as no-op or maybe just append as text?
|
|
3560
|
-
// Let's treat as Note if fallback? No, explicit is better.
|
|
3561
|
-
console.warn(`IMPORTANT commitment used without a valid inner commitment: ${content}`);
|
|
3562
|
-
return requirements;
|
|
3563
|
-
}
|
|
3564
|
-
}
|
|
3565
|
-
/**
|
|
3566
|
-
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
3567
|
-
*/
|
|
3568
|
-
|
|
3569
3428
|
/**
|
|
3570
3429
|
* KNOWLEDGE commitment definition
|
|
3571
3430
|
*
|
|
@@ -3604,7 +3463,7 @@ class KnowledgeCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3604
3463
|
* Markdown documentation for KNOWLEDGE commitment.
|
|
3605
3464
|
*/
|
|
3606
3465
|
get documentation() {
|
|
3607
|
-
return spaceTrim(`
|
|
3466
|
+
return spaceTrim$1(`
|
|
3608
3467
|
# ${this.type}
|
|
3609
3468
|
|
|
3610
3469
|
Adds specific knowledge, facts, or context to the agent using a RAG (Retrieval-Augmented Generation) approach for external sources.
|
|
@@ -3708,7 +3567,7 @@ class LanguageCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3708
3567
|
* Markdown documentation for LANGUAGE/LANGUAGES commitment.
|
|
3709
3568
|
*/
|
|
3710
3569
|
get documentation() {
|
|
3711
|
-
return spaceTrim(`
|
|
3570
|
+
return spaceTrim$1(`
|
|
3712
3571
|
# ${this.type}
|
|
3713
3572
|
|
|
3714
3573
|
Specifies the language(s) the agent should use in its responses.
|
|
@@ -3782,7 +3641,7 @@ class MemoryCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3782
3641
|
* Markdown documentation for MEMORY commitment.
|
|
3783
3642
|
*/
|
|
3784
3643
|
get documentation() {
|
|
3785
|
-
return spaceTrim(`
|
|
3644
|
+
return spaceTrim$1(`
|
|
3786
3645
|
# ${this.type}
|
|
3787
3646
|
|
|
3788
3647
|
Similar to KNOWLEDGE but focuses on remembering past interactions and user preferences. This commitment helps the agent maintain context about the user's history, preferences, and previous conversations.
|
|
@@ -3886,7 +3745,7 @@ class AgentMessageCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3886
3745
|
* Markdown documentation for AGENT MESSAGE commitment.
|
|
3887
3746
|
*/
|
|
3888
3747
|
get documentation() {
|
|
3889
|
-
return spaceTrim(`
|
|
3748
|
+
return spaceTrim$1(`
|
|
3890
3749
|
# ${this.type}
|
|
3891
3750
|
|
|
3892
3751
|
Defines a message from the agent in the conversation history. This is used to pre-fill the chat with a conversation history or to provide few-shot examples.
|
|
@@ -3963,7 +3822,7 @@ class InitialMessageCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
3963
3822
|
* Markdown documentation for INITIAL MESSAGE commitment.
|
|
3964
3823
|
*/
|
|
3965
3824
|
get documentation() {
|
|
3966
|
-
return spaceTrim(`
|
|
3825
|
+
return spaceTrim$1(`
|
|
3967
3826
|
# ${this.type}
|
|
3968
3827
|
|
|
3969
3828
|
Defines the first message that the user sees when opening the chat. This message is purely for display purposes in the UI and does not inherently become part of the LLM's system prompt context (unless also included via other means).
|
|
@@ -4027,7 +3886,7 @@ class MessageCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4027
3886
|
* Markdown documentation for MESSAGE commitment.
|
|
4028
3887
|
*/
|
|
4029
3888
|
get documentation() {
|
|
4030
|
-
return spaceTrim(`
|
|
3889
|
+
return spaceTrim$1(`
|
|
4031
3890
|
# ${this.type}
|
|
4032
3891
|
|
|
4033
3892
|
Contains 1:1 text of the message which AI assistant already sent during the conversation. Later messages are later in the conversation. It is similar to EXAMPLE but it is not example, it is the real message which AI assistant already sent.
|
|
@@ -4139,7 +3998,7 @@ class UserMessageCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4139
3998
|
* Markdown documentation for USER MESSAGE commitment.
|
|
4140
3999
|
*/
|
|
4141
4000
|
get documentation() {
|
|
4142
|
-
return spaceTrim(`
|
|
4001
|
+
return spaceTrim$1(`
|
|
4143
4002
|
# ${this.type}
|
|
4144
4003
|
|
|
4145
4004
|
Defines a message from the user in the conversation history. This is used to pre-fill the chat with a conversation history or to provide few-shot examples.
|
|
@@ -4218,7 +4077,7 @@ class MetaCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4218
4077
|
* Markdown documentation for META commitment.
|
|
4219
4078
|
*/
|
|
4220
4079
|
get documentation() {
|
|
4221
|
-
return spaceTrim(`
|
|
4080
|
+
return spaceTrim$1(`
|
|
4222
4081
|
# META
|
|
4223
4082
|
|
|
4224
4083
|
Sets meta-information about the agent that is used for display and attribution purposes.
|
|
@@ -4329,6 +4188,12 @@ class MetaCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4329
4188
|
* META COLOR #00ff00
|
|
4330
4189
|
* ```
|
|
4331
4190
|
*
|
|
4191
|
+
* You can also specify multiple colors separated by comma:
|
|
4192
|
+
*
|
|
4193
|
+
* ```book
|
|
4194
|
+
* META COLOR #ff0000, #00ff00, #0000ff
|
|
4195
|
+
* ```
|
|
4196
|
+
*
|
|
4332
4197
|
* @private [🪔] Maybe export the commitments through some package
|
|
4333
4198
|
*/
|
|
4334
4199
|
class MetaColorCommitmentDefinition extends BaseCommitmentDefinition {
|
|
@@ -4339,7 +4204,7 @@ class MetaColorCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4339
4204
|
* Short one-line description of META COLOR.
|
|
4340
4205
|
*/
|
|
4341
4206
|
get description() {
|
|
4342
|
-
return "Set the agent's accent color.";
|
|
4207
|
+
return "Set the agent's accent color or gradient.";
|
|
4343
4208
|
}
|
|
4344
4209
|
/**
|
|
4345
4210
|
* Icon for this commitment.
|
|
@@ -4351,10 +4216,10 @@ class MetaColorCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4351
4216
|
* Markdown documentation for META COLOR commitment.
|
|
4352
4217
|
*/
|
|
4353
4218
|
get documentation() {
|
|
4354
|
-
return spaceTrim(`
|
|
4219
|
+
return spaceTrim$1(`
|
|
4355
4220
|
# META COLOR
|
|
4356
4221
|
|
|
4357
|
-
Sets the agent's accent color.
|
|
4222
|
+
Sets the agent's accent color or gradient.
|
|
4358
4223
|
|
|
4359
4224
|
## Key aspects
|
|
4360
4225
|
|
|
@@ -4362,6 +4227,7 @@ class MetaColorCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4362
4227
|
- Only one \`META COLOR\` should be used per agent.
|
|
4363
4228
|
- If multiple are specified, the last one takes precedence.
|
|
4364
4229
|
- Used for visual representation in user interfaces.
|
|
4230
|
+
- Can specify multiple colors separated by comma to create a gradient.
|
|
4365
4231
|
|
|
4366
4232
|
## Examples
|
|
4367
4233
|
|
|
@@ -4378,6 +4244,13 @@ class MetaColorCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4378
4244
|
META COLOR #e74c3c
|
|
4379
4245
|
PERSONA You are a creative and inspiring assistant
|
|
4380
4246
|
\`\`\`
|
|
4247
|
+
|
|
4248
|
+
\`\`\`book
|
|
4249
|
+
Gradient Agent
|
|
4250
|
+
|
|
4251
|
+
META COLOR #ff0000, #00ff00, #0000ff
|
|
4252
|
+
PERSONA You are a colorful agent
|
|
4253
|
+
\`\`\`
|
|
4381
4254
|
`);
|
|
4382
4255
|
}
|
|
4383
4256
|
applyToAgentModelRequirements(requirements, content) {
|
|
@@ -4399,6 +4272,91 @@ class MetaColorCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4399
4272
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
4400
4273
|
*/
|
|
4401
4274
|
|
|
4275
|
+
/**
|
|
4276
|
+
* META FONT commitment definition
|
|
4277
|
+
*
|
|
4278
|
+
* The META FONT commitment sets the agent's font.
|
|
4279
|
+
* This commitment is special because it doesn't affect the system message,
|
|
4280
|
+
* but is handled separately in the parsing logic.
|
|
4281
|
+
*
|
|
4282
|
+
* Example usage in agent source:
|
|
4283
|
+
*
|
|
4284
|
+
* ```book
|
|
4285
|
+
* META FONT Poppins, Arial, sans-serif
|
|
4286
|
+
* META FONT Roboto
|
|
4287
|
+
* ```
|
|
4288
|
+
*
|
|
4289
|
+
* @private [🪔] Maybe export the commitments through some package
|
|
4290
|
+
*/
|
|
4291
|
+
class MetaFontCommitmentDefinition extends BaseCommitmentDefinition {
|
|
4292
|
+
constructor() {
|
|
4293
|
+
super('META FONT', ['FONT']);
|
|
4294
|
+
}
|
|
4295
|
+
/**
|
|
4296
|
+
* Short one-line description of META FONT.
|
|
4297
|
+
*/
|
|
4298
|
+
get description() {
|
|
4299
|
+
return "Set the agent's font.";
|
|
4300
|
+
}
|
|
4301
|
+
/**
|
|
4302
|
+
* Icon for this commitment.
|
|
4303
|
+
*/
|
|
4304
|
+
get icon() {
|
|
4305
|
+
return '🔤';
|
|
4306
|
+
}
|
|
4307
|
+
/**
|
|
4308
|
+
* Markdown documentation for META FONT commitment.
|
|
4309
|
+
*/
|
|
4310
|
+
get documentation() {
|
|
4311
|
+
return spaceTrim$1(`
|
|
4312
|
+
# META FONT
|
|
4313
|
+
|
|
4314
|
+
Sets the agent's font.
|
|
4315
|
+
|
|
4316
|
+
## Key aspects
|
|
4317
|
+
|
|
4318
|
+
- Does not modify the agent's behavior or responses.
|
|
4319
|
+
- Only one \`META FONT\` should be used per agent.
|
|
4320
|
+
- If multiple are specified, the last one takes precedence.
|
|
4321
|
+
- Used for visual representation in user interfaces.
|
|
4322
|
+
- Supports Google Fonts.
|
|
4323
|
+
|
|
4324
|
+
## Examples
|
|
4325
|
+
|
|
4326
|
+
\`\`\`book
|
|
4327
|
+
Modern Assistant
|
|
4328
|
+
|
|
4329
|
+
META FONT Poppins, Arial, sans-serif
|
|
4330
|
+
PERSONA You are a modern assistant
|
|
4331
|
+
\`\`\`
|
|
4332
|
+
|
|
4333
|
+
\`\`\`book
|
|
4334
|
+
Classic Helper
|
|
4335
|
+
|
|
4336
|
+
META FONT Times New Roman
|
|
4337
|
+
PERSONA You are a classic helper
|
|
4338
|
+
\`\`\`
|
|
4339
|
+
`);
|
|
4340
|
+
}
|
|
4341
|
+
applyToAgentModelRequirements(requirements, content) {
|
|
4342
|
+
// META FONT doesn't modify the system message or model requirements
|
|
4343
|
+
// It's handled separately in the parsing logic
|
|
4344
|
+
// This method exists for consistency with the CommitmentDefinition interface
|
|
4345
|
+
return requirements;
|
|
4346
|
+
}
|
|
4347
|
+
/**
|
|
4348
|
+
* Extracts the font from the content
|
|
4349
|
+
* This is used by the parsing logic
|
|
4350
|
+
*/
|
|
4351
|
+
extractProfileFont(content) {
|
|
4352
|
+
const trimmedContent = content.trim();
|
|
4353
|
+
return trimmedContent || null;
|
|
4354
|
+
}
|
|
4355
|
+
}
|
|
4356
|
+
/**
|
|
4357
|
+
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
4358
|
+
*/
|
|
4359
|
+
|
|
4402
4360
|
/**
|
|
4403
4361
|
* META IMAGE commitment definition
|
|
4404
4362
|
*
|
|
@@ -4435,7 +4393,7 @@ class MetaImageCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4435
4393
|
* Markdown documentation for META IMAGE commitment.
|
|
4436
4394
|
*/
|
|
4437
4395
|
get documentation() {
|
|
4438
|
-
return spaceTrim(`
|
|
4396
|
+
return spaceTrim$1(`
|
|
4439
4397
|
# META IMAGE
|
|
4440
4398
|
|
|
4441
4399
|
Sets the agent's avatar/profile image URL.
|
|
@@ -4530,7 +4488,7 @@ class MetaLinkCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4530
4488
|
* Markdown documentation for META LINK commitment.
|
|
4531
4489
|
*/
|
|
4532
4490
|
get documentation() {
|
|
4533
|
-
return spaceTrim(`
|
|
4491
|
+
return spaceTrim$1(`
|
|
4534
4492
|
# META LINK
|
|
4535
4493
|
|
|
4536
4494
|
Represents a profile or source link for the person the agent is modeled after.
|
|
@@ -4640,7 +4598,7 @@ class ModelCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4640
4598
|
* Markdown documentation for MODEL commitment.
|
|
4641
4599
|
*/
|
|
4642
4600
|
get documentation() {
|
|
4643
|
-
return spaceTrim(`
|
|
4601
|
+
return spaceTrim$1(`
|
|
4644
4602
|
# ${this.type}
|
|
4645
4603
|
|
|
4646
4604
|
Enforces technical parameters for the AI model, ensuring consistent behavior across different execution environments.
|
|
@@ -4881,7 +4839,7 @@ class NoteCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4881
4839
|
* Markdown documentation for NOTE commitment.
|
|
4882
4840
|
*/
|
|
4883
4841
|
get documentation() {
|
|
4884
|
-
return spaceTrim(`
|
|
4842
|
+
return spaceTrim$1(`
|
|
4885
4843
|
# ${this.type}
|
|
4886
4844
|
|
|
4887
4845
|
Adds comments for documentation without changing agent behavior.
|
|
@@ -4980,7 +4938,7 @@ class OpenCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
4980
4938
|
* Markdown documentation for OPEN commitment.
|
|
4981
4939
|
*/
|
|
4982
4940
|
get documentation() {
|
|
4983
|
-
return spaceTrim(`
|
|
4941
|
+
return spaceTrim$1(`
|
|
4984
4942
|
# OPEN
|
|
4985
4943
|
|
|
4986
4944
|
Specifies that the agent can be modified by conversation with it.
|
|
@@ -5057,7 +5015,7 @@ class PersonaCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
5057
5015
|
* Markdown documentation for PERSONA commitment.
|
|
5058
5016
|
*/
|
|
5059
5017
|
get documentation() {
|
|
5060
|
-
return spaceTrim(`
|
|
5018
|
+
return spaceTrim$1(`
|
|
5061
5019
|
# ${this.type}
|
|
5062
5020
|
|
|
5063
5021
|
Defines who the agent is, their background, expertise, and personality traits.
|
|
@@ -5190,7 +5148,7 @@ class RuleCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
5190
5148
|
* Markdown documentation for RULE/RULES commitment.
|
|
5191
5149
|
*/
|
|
5192
5150
|
get documentation() {
|
|
5193
|
-
return spaceTrim(`
|
|
5151
|
+
return spaceTrim$1(`
|
|
5194
5152
|
# ${this.type}
|
|
5195
5153
|
|
|
5196
5154
|
Adds behavioral constraints and guidelines that the agent must follow.
|
|
@@ -5272,7 +5230,7 @@ class SampleCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
5272
5230
|
* Markdown documentation for SAMPLE/EXAMPLE commitment.
|
|
5273
5231
|
*/
|
|
5274
5232
|
get documentation() {
|
|
5275
|
-
return spaceTrim(`
|
|
5233
|
+
return spaceTrim$1(`
|
|
5276
5234
|
# ${this.type}
|
|
5277
5235
|
|
|
5278
5236
|
Provides examples of how the agent should respond or behave in certain situations.
|
|
@@ -5355,7 +5313,7 @@ class ScenarioCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
5355
5313
|
* Markdown documentation for SCENARIO commitment.
|
|
5356
5314
|
*/
|
|
5357
5315
|
get documentation() {
|
|
5358
|
-
return spaceTrim(`
|
|
5316
|
+
return spaceTrim$1(`
|
|
5359
5317
|
# ${this.type}
|
|
5360
5318
|
|
|
5361
5319
|
Defines a specific situation or context in which the AI assistant should operate. It helps to set the scene for the AI's responses. Later scenarios are more important than earlier scenarios.
|
|
@@ -5477,7 +5435,7 @@ class StyleCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
5477
5435
|
* Markdown documentation for STYLE commitment.
|
|
5478
5436
|
*/
|
|
5479
5437
|
get documentation() {
|
|
5480
|
-
return spaceTrim(`
|
|
5438
|
+
return spaceTrim$1(`
|
|
5481
5439
|
# ${this.type}
|
|
5482
5440
|
|
|
5483
5441
|
Defines how the agent should format and present its responses (tone, writing style, formatting).
|
|
@@ -5524,70 +5482,548 @@ class StyleCommitmentDefinition extends BaseCommitmentDefinition {
|
|
|
5524
5482
|
* [💞] Ignore a discrepancy between file name and entity name
|
|
5525
5483
|
*/
|
|
5526
5484
|
|
|
5527
|
-
// Import all commitment definition classes
|
|
5528
|
-
// Register fully implemented commitments
|
|
5529
|
-
registerCommitment(new PersonaCommitmentDefinition('PERSONA'));
|
|
5530
|
-
registerCommitment(new PersonaCommitmentDefinition('PERSONAE'));
|
|
5531
|
-
registerCommitment(new KnowledgeCommitmentDefinition());
|
|
5532
|
-
registerCommitment(new MemoryCommitmentDefinition('MEMORY'));
|
|
5533
|
-
registerCommitment(new MemoryCommitmentDefinition('MEMORIES'));
|
|
5534
|
-
registerCommitment(new StyleCommitmentDefinition('STYLE'));
|
|
5535
|
-
registerCommitment(new StyleCommitmentDefinition('STYLES'));
|
|
5536
|
-
registerCommitment(new RuleCommitmentDefinition('RULE'));
|
|
5537
|
-
registerCommitment(new RuleCommitmentDefinition('RULES'));
|
|
5538
|
-
registerCommitment(new LanguageCommitmentDefinition('LANGUAGE'));
|
|
5539
|
-
registerCommitment(new LanguageCommitmentDefinition('LANGUAGES'));
|
|
5540
|
-
registerCommitment(new SampleCommitmentDefinition('SAMPLE'));
|
|
5541
|
-
registerCommitment(new SampleCommitmentDefinition('EXAMPLE'));
|
|
5542
|
-
registerCommitment(new FormatCommitmentDefinition('FORMAT'));
|
|
5543
|
-
registerCommitment(new FormatCommitmentDefinition('FORMATS'));
|
|
5544
|
-
registerCommitment(new FromCommitmentDefinition('FROM'));
|
|
5545
|
-
registerCommitment(new ModelCommitmentDefinition('MODEL'));
|
|
5546
|
-
registerCommitment(new ModelCommitmentDefinition('MODELS'));
|
|
5547
|
-
registerCommitment(new ActionCommitmentDefinition('ACTION'));
|
|
5548
|
-
registerCommitment(new ActionCommitmentDefinition('ACTIONS'));
|
|
5549
|
-
registerCommitment(new ComponentCommitmentDefinition());
|
|
5550
|
-
registerCommitment(new MetaImageCommitmentDefinition());
|
|
5551
|
-
registerCommitment(new MetaColorCommitmentDefinition());
|
|
5552
|
-
registerCommitment(new MetaLinkCommitmentDefinition());
|
|
5553
|
-
registerCommitment(new MetaCommitmentDefinition());
|
|
5554
|
-
registerCommitment(new NoteCommitmentDefinition('NOTE'));
|
|
5555
|
-
registerCommitment(new NoteCommitmentDefinition('NOTES'));
|
|
5556
|
-
registerCommitment(new NoteCommitmentDefinition('COMMENT'));
|
|
5557
|
-
registerCommitment(new NoteCommitmentDefinition('NONCE'));
|
|
5558
|
-
registerCommitment(new GoalCommitmentDefinition('GOAL'));
|
|
5559
|
-
registerCommitment(new GoalCommitmentDefinition('GOALS'));
|
|
5560
|
-
registerCommitment(new ImportantCommitmentDefinition());
|
|
5561
|
-
registerCommitment(new InitialMessageCommitmentDefinition());
|
|
5562
|
-
registerCommitment(new UserMessageCommitmentDefinition());
|
|
5563
|
-
registerCommitment(new AgentMessageCommitmentDefinition());
|
|
5564
|
-
registerCommitment(new MessageCommitmentDefinition('MESSAGE'));
|
|
5565
|
-
registerCommitment(new MessageCommitmentDefinition('MESSAGES'));
|
|
5566
|
-
registerCommitment(new ScenarioCommitmentDefinition('SCENARIO'));
|
|
5567
|
-
registerCommitment(new ScenarioCommitmentDefinition('SCENARIOS'));
|
|
5568
|
-
registerCommitment(new DeleteCommitmentDefinition('DELETE'));
|
|
5569
|
-
registerCommitment(new DeleteCommitmentDefinition('CANCEL'));
|
|
5570
|
-
registerCommitment(new DeleteCommitmentDefinition('DISCARD'));
|
|
5571
|
-
registerCommitment(new DeleteCommitmentDefinition('REMOVE'));
|
|
5572
|
-
registerCommitment(new OpenCommitmentDefinition());
|
|
5573
|
-
registerCommitment(new ClosedCommitmentDefinition());
|
|
5574
|
-
// Register not yet implemented commitments
|
|
5575
|
-
registerCommitment(new NotYetImplementedCommitmentDefinition('EXPECT'));
|
|
5576
|
-
registerCommitment(new NotYetImplementedCommitmentDefinition('BEHAVIOUR'));
|
|
5577
|
-
registerCommitment(new NotYetImplementedCommitmentDefinition('BEHAVIOURS'));
|
|
5578
|
-
registerCommitment(new NotYetImplementedCommitmentDefinition('AVOID'));
|
|
5579
|
-
registerCommitment(new NotYetImplementedCommitmentDefinition('AVOIDANCE'));
|
|
5580
|
-
registerCommitment(new NotYetImplementedCommitmentDefinition('CONTEXT'));
|
|
5581
|
-
|
|
5582
5485
|
/**
|
|
5583
|
-
*
|
|
5584
|
-
* This function replaces the hardcoded commitment parsing in the original parseAgentSource
|
|
5486
|
+
* USE commitment definition
|
|
5585
5487
|
*
|
|
5586
|
-
*
|
|
5488
|
+
* The USE commitment indicates that the agent should utilize specific tools or capabilities
|
|
5489
|
+
* to access and interact with external systems when necessary.
|
|
5490
|
+
*
|
|
5491
|
+
* Supported USE types:
|
|
5492
|
+
* - USE BROWSER: Enables the agent to use a web browser tool
|
|
5493
|
+
* - USE SEARCH ENGINE (future): Enables search engine access
|
|
5494
|
+
* - USE FILE SYSTEM (future): Enables file system operations
|
|
5495
|
+
* - USE MCP (future): Enables MCP server connections
|
|
5496
|
+
*
|
|
5497
|
+
* The content following the USE commitment is ignored (similar to NOTE).
|
|
5498
|
+
*
|
|
5499
|
+
* Example usage in agent source:
|
|
5500
|
+
*
|
|
5501
|
+
* ```book
|
|
5502
|
+
* USE BROWSER
|
|
5503
|
+
* USE SEARCH ENGINE
|
|
5504
|
+
* ```
|
|
5505
|
+
*
|
|
5506
|
+
* @private [🪔] Maybe export the commitments through some package
|
|
5587
5507
|
*/
|
|
5588
|
-
|
|
5589
|
-
|
|
5590
|
-
|
|
5508
|
+
class UseCommitmentDefinition extends BaseCommitmentDefinition {
|
|
5509
|
+
constructor() {
|
|
5510
|
+
super('USE');
|
|
5511
|
+
}
|
|
5512
|
+
/**
|
|
5513
|
+
* Short one-line description of USE commitments.
|
|
5514
|
+
*/
|
|
5515
|
+
get description() {
|
|
5516
|
+
return 'Enable the agent to use specific tools or capabilities (BROWSER, SEARCH ENGINE, etc.).';
|
|
5517
|
+
}
|
|
5518
|
+
/**
|
|
5519
|
+
* Icon for this commitment.
|
|
5520
|
+
*/
|
|
5521
|
+
get icon() {
|
|
5522
|
+
return '🔧';
|
|
5523
|
+
}
|
|
5524
|
+
/**
|
|
5525
|
+
* Markdown documentation for USE commitment.
|
|
5526
|
+
*/
|
|
5527
|
+
get documentation() {
|
|
5528
|
+
return spaceTrim$1(`
|
|
5529
|
+
# USE
|
|
5530
|
+
|
|
5531
|
+
Enables the agent to use specific tools or capabilities for interacting with external systems.
|
|
5532
|
+
|
|
5533
|
+
## Supported USE types
|
|
5534
|
+
|
|
5535
|
+
- **USE BROWSER** - Enables the agent to use a web browser tool to access and retrieve information from the internet
|
|
5536
|
+
- **USE SEARCH ENGINE** (future) - Enables search engine access
|
|
5537
|
+
- **USE FILE SYSTEM** (future) - Enables file system operations
|
|
5538
|
+
- **USE MCP** (future) - Enables MCP server connections
|
|
5539
|
+
|
|
5540
|
+
## Key aspects
|
|
5541
|
+
|
|
5542
|
+
- The content following the USE commitment is ignored (similar to NOTE)
|
|
5543
|
+
- Multiple USE commitments can be specified to enable multiple capabilities
|
|
5544
|
+
- The actual tool usage is handled by the agent runtime
|
|
5545
|
+
|
|
5546
|
+
## Examples
|
|
5547
|
+
|
|
5548
|
+
### Basic browser usage
|
|
5549
|
+
|
|
5550
|
+
\`\`\`book
|
|
5551
|
+
Research Assistant
|
|
5552
|
+
|
|
5553
|
+
PERSONA You are a helpful research assistant
|
|
5554
|
+
USE BROWSER
|
|
5555
|
+
KNOWLEDGE Can search the web for up-to-date information
|
|
5556
|
+
\`\`\`
|
|
5557
|
+
|
|
5558
|
+
### Multiple tools
|
|
5559
|
+
|
|
5560
|
+
\`\`\`book
|
|
5561
|
+
Data Analyst
|
|
5562
|
+
|
|
5563
|
+
PERSONA You are a data analyst assistant
|
|
5564
|
+
USE BROWSER
|
|
5565
|
+
USE FILE SYSTEM
|
|
5566
|
+
ACTION Can analyze data from various sources
|
|
5567
|
+
\`\`\`
|
|
5568
|
+
`);
|
|
5569
|
+
}
|
|
5570
|
+
applyToAgentModelRequirements(requirements, content) {
|
|
5571
|
+
// USE commitments don't modify the system message or model requirements directly
|
|
5572
|
+
// They are handled separately in the parsing logic for capability extraction
|
|
5573
|
+
// This method exists for consistency with the CommitmentDefinition interface
|
|
5574
|
+
return requirements;
|
|
5575
|
+
}
|
|
5576
|
+
/**
|
|
5577
|
+
* Extracts the tool type from the USE commitment
|
|
5578
|
+
* This is used by the parsing logic
|
|
5579
|
+
*/
|
|
5580
|
+
extractToolType(content) {
|
|
5581
|
+
var _a, _b;
|
|
5582
|
+
const trimmedContent = content.trim();
|
|
5583
|
+
// The tool type is the first word after USE (already stripped)
|
|
5584
|
+
const match = trimmedContent.match(/^(\w+)/);
|
|
5585
|
+
return (_b = (_a = match === null || match === void 0 ? void 0 : match[1]) === null || _a === void 0 ? void 0 : _a.toUpperCase()) !== null && _b !== void 0 ? _b : null;
|
|
5586
|
+
}
|
|
5587
|
+
/**
|
|
5588
|
+
* Checks if this is a known USE type
|
|
5589
|
+
*/
|
|
5590
|
+
isKnownUseType(useType) {
|
|
5591
|
+
const knownTypes = ['BROWSER', 'SEARCH ENGINE', 'FILE SYSTEM', 'MCP'];
|
|
5592
|
+
return knownTypes.includes(useType.toUpperCase());
|
|
5593
|
+
}
|
|
5594
|
+
}
|
|
5595
|
+
/**
|
|
5596
|
+
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
5597
|
+
*/
|
|
5598
|
+
|
|
5599
|
+
/**
|
|
5600
|
+
* USE BROWSER commitment definition
|
|
5601
|
+
*
|
|
5602
|
+
* The `USE BROWSER` commitment indicates that the agent should utilize a web browser tool
|
|
5603
|
+
* to access and retrieve up-to-date information from the internet when necessary.
|
|
5604
|
+
*
|
|
5605
|
+
* The content following `USE BROWSER` is ignored (similar to NOTE).
|
|
5606
|
+
*
|
|
5607
|
+
* Example usage in agent source:
|
|
5608
|
+
*
|
|
5609
|
+
* ```book
|
|
5610
|
+
* USE BROWSER
|
|
5611
|
+
* USE BROWSER This will be ignored
|
|
5612
|
+
* ```
|
|
5613
|
+
*
|
|
5614
|
+
* @private [🪔] Maybe export the commitments through some package
|
|
5615
|
+
*/
|
|
5616
|
+
class UseBrowserCommitmentDefinition extends BaseCommitmentDefinition {
|
|
5617
|
+
constructor() {
|
|
5618
|
+
super('USE BROWSER', ['BROWSER']);
|
|
5619
|
+
}
|
|
5620
|
+
/**
|
|
5621
|
+
* The `USE BROWSER` commitment is standalone.
|
|
5622
|
+
*/
|
|
5623
|
+
get requiresContent() {
|
|
5624
|
+
return false;
|
|
5625
|
+
}
|
|
5626
|
+
/**
|
|
5627
|
+
* Short one-line description of USE BROWSER.
|
|
5628
|
+
*/
|
|
5629
|
+
get description() {
|
|
5630
|
+
return 'Enable the agent to use a web browser tool for accessing internet information.';
|
|
5631
|
+
}
|
|
5632
|
+
/**
|
|
5633
|
+
* Icon for this commitment.
|
|
5634
|
+
*/
|
|
5635
|
+
get icon() {
|
|
5636
|
+
return '🌐';
|
|
5637
|
+
}
|
|
5638
|
+
/**
|
|
5639
|
+
* Markdown documentation for USE BROWSER commitment.
|
|
5640
|
+
*/
|
|
5641
|
+
get documentation() {
|
|
5642
|
+
return spaceTrim$1(`
|
|
5643
|
+
# USE BROWSER
|
|
5644
|
+
|
|
5645
|
+
Enables the agent to use a web browser tool to access and retrieve up-to-date information from the internet.
|
|
5646
|
+
|
|
5647
|
+
## Key aspects
|
|
5648
|
+
|
|
5649
|
+
- The content following \`USE BROWSER\` is ignored (similar to NOTE)
|
|
5650
|
+
- The actual browser tool usage is handled by the agent runtime
|
|
5651
|
+
- Allows the agent to fetch current information from websites
|
|
5652
|
+
- Useful for research tasks, fact-checking, and accessing dynamic content
|
|
5653
|
+
|
|
5654
|
+
## Examples
|
|
5655
|
+
|
|
5656
|
+
\`\`\`book
|
|
5657
|
+
Research Assistant
|
|
5658
|
+
|
|
5659
|
+
PERSONA You are a helpful research assistant specialized in finding current information
|
|
5660
|
+
USE BROWSER
|
|
5661
|
+
RULE Always cite your sources when providing information from the web
|
|
5662
|
+
\`\`\`
|
|
5663
|
+
|
|
5664
|
+
\`\`\`book
|
|
5665
|
+
News Analyst
|
|
5666
|
+
|
|
5667
|
+
PERSONA You are a news analyst who stays up-to-date with current events
|
|
5668
|
+
USE BROWSER
|
|
5669
|
+
STYLE Present news in a balanced and objective manner
|
|
5670
|
+
ACTION Can search for and summarize news articles
|
|
5671
|
+
\`\`\`
|
|
5672
|
+
|
|
5673
|
+
\`\`\`book
|
|
5674
|
+
Company Lawyer
|
|
5675
|
+
|
|
5676
|
+
PERSONA You are a company lawyer providing legal advice
|
|
5677
|
+
USE BROWSER
|
|
5678
|
+
KNOWLEDGE Corporate law and legal procedures
|
|
5679
|
+
RULE Always recommend consulting with a licensed attorney for specific legal matters
|
|
5680
|
+
\`\`\`
|
|
5681
|
+
`);
|
|
5682
|
+
}
|
|
5683
|
+
applyToAgentModelRequirements(requirements, content) {
|
|
5684
|
+
// We simply mark that browser capability is enabled in metadata
|
|
5685
|
+
// Get existing metadata
|
|
5686
|
+
const existingMetadata = requirements.metadata || {};
|
|
5687
|
+
// Get existing tools array or create new one
|
|
5688
|
+
const existingTools = existingMetadata.tools || [];
|
|
5689
|
+
// Add 'browser' to tools if not already present
|
|
5690
|
+
const updatedTools = existingTools.includes('browser') ? existingTools : [...existingTools, 'browser'];
|
|
5691
|
+
// Return requirements with updated metadata
|
|
5692
|
+
return {
|
|
5693
|
+
...requirements,
|
|
5694
|
+
metadata: {
|
|
5695
|
+
...existingMetadata,
|
|
5696
|
+
tools: updatedTools,
|
|
5697
|
+
useBrowser: true,
|
|
5698
|
+
},
|
|
5699
|
+
};
|
|
5700
|
+
}
|
|
5701
|
+
}
|
|
5702
|
+
/**
|
|
5703
|
+
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
5704
|
+
*/
|
|
5705
|
+
|
|
5706
|
+
/**
|
|
5707
|
+
* USE MCP commitment definition
|
|
5708
|
+
*
|
|
5709
|
+
* The `USE MCP` commitment allows to specify an MCP server URL which the agent will connect to
|
|
5710
|
+
* for retrieving additional instructions and actions.
|
|
5711
|
+
*
|
|
5712
|
+
* The content following `USE MCP` is the URL of the MCP server.
|
|
5713
|
+
*
|
|
5714
|
+
* Example usage in agent source:
|
|
5715
|
+
*
|
|
5716
|
+
* ```book
|
|
5717
|
+
* USE MCP http://mcp-server-url.com
|
|
5718
|
+
* ```
|
|
5719
|
+
*
|
|
5720
|
+
* @private [🪔] Maybe export the commitments through some package
|
|
5721
|
+
*/
|
|
5722
|
+
class UseMcpCommitmentDefinition extends BaseCommitmentDefinition {
|
|
5723
|
+
constructor() {
|
|
5724
|
+
super('USE MCP', ['MCP']);
|
|
5725
|
+
}
|
|
5726
|
+
/**
|
|
5727
|
+
* Short one-line description of USE MCP.
|
|
5728
|
+
*/
|
|
5729
|
+
get description() {
|
|
5730
|
+
return 'Connects the agent to an external MCP server for additional capabilities.';
|
|
5731
|
+
}
|
|
5732
|
+
/**
|
|
5733
|
+
* Icon for this commitment.
|
|
5734
|
+
*/
|
|
5735
|
+
get icon() {
|
|
5736
|
+
return '🔌';
|
|
5737
|
+
}
|
|
5738
|
+
/**
|
|
5739
|
+
* Markdown documentation for USE MCP commitment.
|
|
5740
|
+
*/
|
|
5741
|
+
get documentation() {
|
|
5742
|
+
return spaceTrim$1(`
|
|
5743
|
+
# USE MCP
|
|
5744
|
+
|
|
5745
|
+
Connects the agent to an external Model Context Protocol (MCP) server.
|
|
5746
|
+
|
|
5747
|
+
## Key aspects
|
|
5748
|
+
|
|
5749
|
+
- The content following \`USE MCP\` must be a valid URL
|
|
5750
|
+
- Multiple MCP servers can be connected by using multiple \`USE MCP\` commitments
|
|
5751
|
+
- The agent will have access to tools and resources provided by the MCP server
|
|
5752
|
+
|
|
5753
|
+
## Example
|
|
5754
|
+
|
|
5755
|
+
\`\`\`book
|
|
5756
|
+
Company Lawyer
|
|
5757
|
+
|
|
5758
|
+
PERSONA You are a company lawyer.
|
|
5759
|
+
USE MCP http://legal-db.example.com
|
|
5760
|
+
\`\`\`
|
|
5761
|
+
`);
|
|
5762
|
+
}
|
|
5763
|
+
applyToAgentModelRequirements(requirements, content) {
|
|
5764
|
+
const mcpServerUrl = content.trim();
|
|
5765
|
+
if (!mcpServerUrl) {
|
|
5766
|
+
return requirements;
|
|
5767
|
+
}
|
|
5768
|
+
const existingMcpServers = requirements.mcpServers || [];
|
|
5769
|
+
// Avoid duplicates
|
|
5770
|
+
if (existingMcpServers.includes(mcpServerUrl)) {
|
|
5771
|
+
return requirements;
|
|
5772
|
+
}
|
|
5773
|
+
return {
|
|
5774
|
+
...requirements,
|
|
5775
|
+
mcpServers: [...existingMcpServers, mcpServerUrl],
|
|
5776
|
+
};
|
|
5777
|
+
}
|
|
5778
|
+
}
|
|
5779
|
+
/**
|
|
5780
|
+
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
5781
|
+
*/
|
|
5782
|
+
|
|
5783
|
+
/**
|
|
5784
|
+
* USE SEARCH ENGINE commitment definition
|
|
5785
|
+
*
|
|
5786
|
+
* The `USE SEARCH ENGINE` commitment indicates that the agent should utilize a search engine tool
|
|
5787
|
+
* to access and retrieve up-to-date information from the internet when necessary.
|
|
5788
|
+
*
|
|
5789
|
+
* The content following `USE SEARCH ENGINE` is ignored (similar to NOTE).
|
|
5790
|
+
*
|
|
5791
|
+
* Example usage in agent source:
|
|
5792
|
+
*
|
|
5793
|
+
* ```book
|
|
5794
|
+
* USE SEARCH ENGINE
|
|
5795
|
+
* USE SEARCH ENGINE This will be ignored
|
|
5796
|
+
* ```
|
|
5797
|
+
*
|
|
5798
|
+
* @private [🪔] Maybe export the commitments through some package
|
|
5799
|
+
*/
|
|
5800
|
+
class UseSearchEngineCommitmentDefinition extends BaseCommitmentDefinition {
|
|
5801
|
+
constructor() {
|
|
5802
|
+
super('USE SEARCH ENGINE', ['SEARCH ENGINE', 'SEARCH']);
|
|
5803
|
+
}
|
|
5804
|
+
/**
|
|
5805
|
+
* Short one-line description of USE SEARCH ENGINE.
|
|
5806
|
+
*/
|
|
5807
|
+
get description() {
|
|
5808
|
+
return 'Enable the agent to use a search engine tool for accessing internet information.';
|
|
5809
|
+
}
|
|
5810
|
+
/**
|
|
5811
|
+
* Icon for this commitment.
|
|
5812
|
+
*/
|
|
5813
|
+
get icon() {
|
|
5814
|
+
return '🔍';
|
|
5815
|
+
}
|
|
5816
|
+
/**
|
|
5817
|
+
* Markdown documentation for USE SEARCH ENGINE commitment.
|
|
5818
|
+
*/
|
|
5819
|
+
get documentation() {
|
|
5820
|
+
return spaceTrim$1(`
|
|
5821
|
+
# USE SEARCH ENGINE
|
|
5822
|
+
|
|
5823
|
+
Enables the agent to use a search engine tool to access and retrieve up-to-date information from the internet.
|
|
5824
|
+
|
|
5825
|
+
## Key aspects
|
|
5826
|
+
|
|
5827
|
+
- The content following \`USE SEARCH ENGINE\` is ignored (similar to NOTE)
|
|
5828
|
+
- The actual search engine tool usage is handled by the agent runtime
|
|
5829
|
+
- Allows the agent to search for current information from the web
|
|
5830
|
+
- Useful for research tasks, finding facts, and accessing dynamic content
|
|
5831
|
+
|
|
5832
|
+
## Examples
|
|
5833
|
+
|
|
5834
|
+
\`\`\`book
|
|
5835
|
+
Research Assistant
|
|
5836
|
+
|
|
5837
|
+
PERSONA You are a helpful research assistant specialized in finding current information
|
|
5838
|
+
USE SEARCH ENGINE
|
|
5839
|
+
RULE Always cite your sources when providing information from the web
|
|
5840
|
+
\`\`\`
|
|
5841
|
+
|
|
5842
|
+
\`\`\`book
|
|
5843
|
+
Fact Checker
|
|
5844
|
+
|
|
5845
|
+
PERSONA You are a fact checker
|
|
5846
|
+
USE SEARCH ENGINE
|
|
5847
|
+
ACTION Search for claims and verify them against reliable sources
|
|
5848
|
+
\`\`\`
|
|
5849
|
+
`);
|
|
5850
|
+
}
|
|
5851
|
+
applyToAgentModelRequirements(requirements, content) {
|
|
5852
|
+
// We simply mark that search engine capability is enabled in metadata
|
|
5853
|
+
// Get existing metadata
|
|
5854
|
+
const existingMetadata = requirements.metadata || {};
|
|
5855
|
+
// Get existing tools array or create new one
|
|
5856
|
+
const existingTools = existingMetadata.tools || [];
|
|
5857
|
+
// Add 'search-engine' to tools if not already present
|
|
5858
|
+
const updatedTools = existingTools.includes('search-engine') ? existingTools : [...existingTools, 'search-engine'];
|
|
5859
|
+
// Return requirements with updated metadata
|
|
5860
|
+
return {
|
|
5861
|
+
...requirements,
|
|
5862
|
+
metadata: {
|
|
5863
|
+
...existingMetadata,
|
|
5864
|
+
tools: updatedTools,
|
|
5865
|
+
useSearchEngine: true,
|
|
5866
|
+
},
|
|
5867
|
+
};
|
|
5868
|
+
}
|
|
5869
|
+
}
|
|
5870
|
+
/**
|
|
5871
|
+
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
5872
|
+
*/
|
|
5873
|
+
|
|
5874
|
+
/**
|
|
5875
|
+
* Placeholder commitment definition for commitments that are not yet implemented
|
|
5876
|
+
*
|
|
5877
|
+
* This commitment simply adds its content 1:1 into the system message,
|
|
5878
|
+
* preserving the original behavior until proper implementation is added.
|
|
5879
|
+
*
|
|
5880
|
+
* @public exported from `@promptbook/core`
|
|
5881
|
+
*/
|
|
5882
|
+
class NotYetImplementedCommitmentDefinition extends BaseCommitmentDefinition {
|
|
5883
|
+
constructor(type) {
|
|
5884
|
+
super(type);
|
|
5885
|
+
}
|
|
5886
|
+
/**
|
|
5887
|
+
* Short one-line description of a placeholder commitment.
|
|
5888
|
+
*/
|
|
5889
|
+
get description() {
|
|
5890
|
+
return 'Placeholder commitment that appends content verbatim to the system message.';
|
|
5891
|
+
}
|
|
5892
|
+
/**
|
|
5893
|
+
* Icon for this commitment.
|
|
5894
|
+
*/
|
|
5895
|
+
get icon() {
|
|
5896
|
+
return '🚧';
|
|
5897
|
+
}
|
|
5898
|
+
/**
|
|
5899
|
+
* Markdown documentation available at runtime.
|
|
5900
|
+
*/
|
|
5901
|
+
get documentation() {
|
|
5902
|
+
return spaceTrim$1(`
|
|
5903
|
+
# ${this.type}
|
|
5904
|
+
|
|
5905
|
+
This commitment is not yet fully implemented.
|
|
5906
|
+
|
|
5907
|
+
## Key aspects
|
|
5908
|
+
|
|
5909
|
+
- Content is appended directly to the system message.
|
|
5910
|
+
- No special processing or validation is performed.
|
|
5911
|
+
- Behavior preserved until proper implementation is added.
|
|
5912
|
+
|
|
5913
|
+
## Status
|
|
5914
|
+
|
|
5915
|
+
- **Status:** Placeholder implementation
|
|
5916
|
+
- **Effect:** Appends content prefixed by commitment type
|
|
5917
|
+
- **Future:** Will be replaced with specialized logic
|
|
5918
|
+
|
|
5919
|
+
## Examples
|
|
5920
|
+
|
|
5921
|
+
\`\`\`book
|
|
5922
|
+
Example Agent
|
|
5923
|
+
|
|
5924
|
+
PERSONA You are a helpful assistant
|
|
5925
|
+
${this.type} Your content here
|
|
5926
|
+
RULE Always be helpful
|
|
5927
|
+
\`\`\`
|
|
5928
|
+
`);
|
|
5929
|
+
}
|
|
5930
|
+
applyToAgentModelRequirements(requirements, content) {
|
|
5931
|
+
const trimmedContent = content.trim();
|
|
5932
|
+
if (!trimmedContent) {
|
|
5933
|
+
return requirements;
|
|
5934
|
+
}
|
|
5935
|
+
// Add the commitment content 1:1 to the system message
|
|
5936
|
+
const commitmentLine = `${this.type} ${trimmedContent}`;
|
|
5937
|
+
return this.appendToSystemMessage(requirements, commitmentLine, '\n\n');
|
|
5938
|
+
}
|
|
5939
|
+
}
|
|
5940
|
+
|
|
5941
|
+
// Import all commitment definition classes
|
|
5942
|
+
/**
|
|
5943
|
+
* Registry of all available commitment definitions
|
|
5944
|
+
* This array contains instances of all commitment definitions
|
|
5945
|
+
* This is the single source of truth for all commitments in the system
|
|
5946
|
+
*
|
|
5947
|
+
* @private Use functions to access commitments instead of this array directly
|
|
5948
|
+
*/
|
|
5949
|
+
const COMMITMENT_REGISTRY = [
|
|
5950
|
+
// Fully implemented commitments
|
|
5951
|
+
new PersonaCommitmentDefinition('PERSONA'),
|
|
5952
|
+
new PersonaCommitmentDefinition('PERSONAE'),
|
|
5953
|
+
new KnowledgeCommitmentDefinition(),
|
|
5954
|
+
new MemoryCommitmentDefinition('MEMORY'),
|
|
5955
|
+
new MemoryCommitmentDefinition('MEMORIES'),
|
|
5956
|
+
new StyleCommitmentDefinition('STYLE'),
|
|
5957
|
+
new StyleCommitmentDefinition('STYLES'),
|
|
5958
|
+
new RuleCommitmentDefinition('RULE'),
|
|
5959
|
+
new RuleCommitmentDefinition('RULES'),
|
|
5960
|
+
new LanguageCommitmentDefinition('LANGUAGE'),
|
|
5961
|
+
new LanguageCommitmentDefinition('LANGUAGES'),
|
|
5962
|
+
new SampleCommitmentDefinition('SAMPLE'),
|
|
5963
|
+
new SampleCommitmentDefinition('EXAMPLE'),
|
|
5964
|
+
new FormatCommitmentDefinition('FORMAT'),
|
|
5965
|
+
new FormatCommitmentDefinition('FORMATS'),
|
|
5966
|
+
new FromCommitmentDefinition('FROM'),
|
|
5967
|
+
new ModelCommitmentDefinition('MODEL'),
|
|
5968
|
+
new ModelCommitmentDefinition('MODELS'),
|
|
5969
|
+
new ActionCommitmentDefinition('ACTION'),
|
|
5970
|
+
new ActionCommitmentDefinition('ACTIONS'),
|
|
5971
|
+
new ComponentCommitmentDefinition(),
|
|
5972
|
+
new MetaImageCommitmentDefinition(),
|
|
5973
|
+
new MetaColorCommitmentDefinition(),
|
|
5974
|
+
new MetaFontCommitmentDefinition(),
|
|
5975
|
+
new MetaLinkCommitmentDefinition(),
|
|
5976
|
+
new MetaCommitmentDefinition(),
|
|
5977
|
+
new NoteCommitmentDefinition('NOTE'),
|
|
5978
|
+
new NoteCommitmentDefinition('NOTES'),
|
|
5979
|
+
new NoteCommitmentDefinition('COMMENT'),
|
|
5980
|
+
new NoteCommitmentDefinition('NONCE'),
|
|
5981
|
+
new GoalCommitmentDefinition('GOAL'),
|
|
5982
|
+
new GoalCommitmentDefinition('GOALS'),
|
|
5983
|
+
new InitialMessageCommitmentDefinition(),
|
|
5984
|
+
new UserMessageCommitmentDefinition(),
|
|
5985
|
+
new AgentMessageCommitmentDefinition(),
|
|
5986
|
+
new MessageCommitmentDefinition('MESSAGE'),
|
|
5987
|
+
new MessageCommitmentDefinition('MESSAGES'),
|
|
5988
|
+
new ScenarioCommitmentDefinition('SCENARIO'),
|
|
5989
|
+
new ScenarioCommitmentDefinition('SCENARIOS'),
|
|
5990
|
+
new DeleteCommitmentDefinition('DELETE'),
|
|
5991
|
+
new DeleteCommitmentDefinition('CANCEL'),
|
|
5992
|
+
new DeleteCommitmentDefinition('DISCARD'),
|
|
5993
|
+
new DeleteCommitmentDefinition('REMOVE'),
|
|
5994
|
+
new OpenCommitmentDefinition(),
|
|
5995
|
+
new ClosedCommitmentDefinition(),
|
|
5996
|
+
new UseBrowserCommitmentDefinition(),
|
|
5997
|
+
new UseSearchEngineCommitmentDefinition(),
|
|
5998
|
+
new UseMcpCommitmentDefinition(),
|
|
5999
|
+
new UseCommitmentDefinition(),
|
|
6000
|
+
// Not yet implemented commitments (using placeholder)
|
|
6001
|
+
new NotYetImplementedCommitmentDefinition('EXPECT'),
|
|
6002
|
+
new NotYetImplementedCommitmentDefinition('BEHAVIOUR'),
|
|
6003
|
+
new NotYetImplementedCommitmentDefinition('BEHAVIOURS'),
|
|
6004
|
+
new NotYetImplementedCommitmentDefinition('AVOID'),
|
|
6005
|
+
new NotYetImplementedCommitmentDefinition('AVOIDANCE'),
|
|
6006
|
+
new NotYetImplementedCommitmentDefinition('CONTEXT'),
|
|
6007
|
+
];
|
|
6008
|
+
/**
|
|
6009
|
+
* TODO: [🧠] Maybe create through standardized $register
|
|
6010
|
+
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
6011
|
+
*/
|
|
6012
|
+
|
|
6013
|
+
/**
|
|
6014
|
+
* Regex pattern to match horizontal lines (markdown thematic breaks)
|
|
6015
|
+
* Matches 3 or more hyphens, underscores, or asterisks (with optional spaces between)
|
|
6016
|
+
*/
|
|
6017
|
+
const HORIZONTAL_LINE_PATTERN = /^[\s]*[-_*][\s]*[-_*][\s]*[-_*][\s]*[-_*]*[\s]*$/;
|
|
6018
|
+
/**
|
|
6019
|
+
* Parses agent source using the new commitment system with multiline support
|
|
6020
|
+
* This function replaces the hardcoded commitment parsing in the original parseAgentSource
|
|
6021
|
+
*
|
|
6022
|
+
* @private internal utility of `parseAgentSource`
|
|
6023
|
+
*/
|
|
6024
|
+
function parseAgentSourceWithCommitments(agentSource) {
|
|
6025
|
+
var _a, _b, _c;
|
|
6026
|
+
if (!agentSource || !agentSource.trim()) {
|
|
5591
6027
|
return {
|
|
5592
6028
|
agentName: null,
|
|
5593
6029
|
commitments: [],
|
|
@@ -5621,7 +6057,7 @@ function parseAgentSourceWithCommitments(agentSource) {
|
|
|
5621
6057
|
const fullContent = currentCommitment.contentLines.join('\n');
|
|
5622
6058
|
commitments.push({
|
|
5623
6059
|
type: currentCommitment.type,
|
|
5624
|
-
content: spaceTrim(fullContent),
|
|
6060
|
+
content: spaceTrim$1(fullContent),
|
|
5625
6061
|
originalLine: currentCommitment.originalStartLine,
|
|
5626
6062
|
lineNumber: currentCommitment.startLineNumber,
|
|
5627
6063
|
});
|
|
@@ -5641,6 +6077,24 @@ function parseAgentSourceWithCommitments(agentSource) {
|
|
|
5641
6077
|
break;
|
|
5642
6078
|
}
|
|
5643
6079
|
}
|
|
6080
|
+
// Check if this is a horizontal line (ends any current commitment)
|
|
6081
|
+
const isHorizontalLine = HORIZONTAL_LINE_PATTERN.test(line);
|
|
6082
|
+
if (isHorizontalLine) {
|
|
6083
|
+
// Save the current commitment if it exists
|
|
6084
|
+
if (currentCommitment) {
|
|
6085
|
+
const fullContent = currentCommitment.contentLines.join('\n');
|
|
6086
|
+
commitments.push({
|
|
6087
|
+
type: currentCommitment.type,
|
|
6088
|
+
content: spaceTrim$1(fullContent),
|
|
6089
|
+
originalLine: currentCommitment.originalStartLine,
|
|
6090
|
+
lineNumber: currentCommitment.startLineNumber,
|
|
6091
|
+
});
|
|
6092
|
+
currentCommitment = null;
|
|
6093
|
+
}
|
|
6094
|
+
// Add horizontal line to non-commitment lines
|
|
6095
|
+
nonCommitmentLines.push(line);
|
|
6096
|
+
continue;
|
|
6097
|
+
}
|
|
5644
6098
|
if (!foundNewCommitment) {
|
|
5645
6099
|
if (currentCommitment) {
|
|
5646
6100
|
// This line belongs to the current commitment
|
|
@@ -5657,7 +6111,7 @@ function parseAgentSourceWithCommitments(agentSource) {
|
|
|
5657
6111
|
const fullContent = currentCommitment.contentLines.join('\n');
|
|
5658
6112
|
commitments.push({
|
|
5659
6113
|
type: currentCommitment.type,
|
|
5660
|
-
content: spaceTrim(fullContent),
|
|
6114
|
+
content: spaceTrim$1(fullContent),
|
|
5661
6115
|
originalLine: currentCommitment.originalStartLine,
|
|
5662
6116
|
lineNumber: currentCommitment.startLineNumber,
|
|
5663
6117
|
});
|
|
@@ -5766,17 +6220,21 @@ function parseAgentSource(agentSource) {
|
|
|
5766
6220
|
const links = [];
|
|
5767
6221
|
for (const commitment of parseResult.commitments) {
|
|
5768
6222
|
if (commitment.type === 'META LINK') {
|
|
5769
|
-
const linkValue = spaceTrim$
|
|
6223
|
+
const linkValue = spaceTrim$2(commitment.content);
|
|
5770
6224
|
links.push(linkValue);
|
|
5771
6225
|
meta.link = linkValue;
|
|
5772
6226
|
continue;
|
|
5773
6227
|
}
|
|
5774
6228
|
if (commitment.type === 'META IMAGE') {
|
|
5775
|
-
meta.image = spaceTrim$
|
|
6229
|
+
meta.image = spaceTrim$2(commitment.content);
|
|
5776
6230
|
continue;
|
|
5777
6231
|
}
|
|
5778
6232
|
if (commitment.type === 'META COLOR') {
|
|
5779
|
-
meta.color =
|
|
6233
|
+
meta.color = normalizeSeparator(commitment.content);
|
|
6234
|
+
continue;
|
|
6235
|
+
}
|
|
6236
|
+
if (commitment.type === 'META FONT') {
|
|
6237
|
+
meta.font = normalizeSeparator(commitment.content);
|
|
5780
6238
|
continue;
|
|
5781
6239
|
}
|
|
5782
6240
|
if (commitment.type !== 'META') {
|
|
@@ -5785,10 +6243,10 @@ function parseAgentSource(agentSource) {
|
|
|
5785
6243
|
// Parse META commitments - format is "META TYPE content"
|
|
5786
6244
|
const metaTypeRaw = commitment.content.split(' ')[0] || 'NONE';
|
|
5787
6245
|
if (metaTypeRaw === 'LINK') {
|
|
5788
|
-
links.push(spaceTrim$
|
|
6246
|
+
links.push(spaceTrim$2(commitment.content.substring(metaTypeRaw.length)));
|
|
5789
6247
|
}
|
|
5790
6248
|
const metaType = normalizeTo_camelCase(metaTypeRaw);
|
|
5791
|
-
meta[metaType] = spaceTrim$
|
|
6249
|
+
meta[metaType] = spaceTrim$2(commitment.content.substring(metaTypeRaw.length));
|
|
5792
6250
|
}
|
|
5793
6251
|
// Generate gravatar fallback if no meta image specified
|
|
5794
6252
|
if (!meta.image) {
|
|
@@ -5812,6 +6270,19 @@ function parseAgentSource(agentSource) {
|
|
|
5812
6270
|
parameters,
|
|
5813
6271
|
};
|
|
5814
6272
|
}
|
|
6273
|
+
/**
|
|
6274
|
+
* Normalizes the separator in the content
|
|
6275
|
+
*
|
|
6276
|
+
* @param content - The content to normalize
|
|
6277
|
+
* @returns The content with normalized separators
|
|
6278
|
+
*/
|
|
6279
|
+
function normalizeSeparator(content) {
|
|
6280
|
+
const trimmed = spaceTrim$2(content);
|
|
6281
|
+
if (trimmed.includes(',')) {
|
|
6282
|
+
return trimmed;
|
|
6283
|
+
}
|
|
6284
|
+
return trimmed.split(/\s+/).join(', ');
|
|
6285
|
+
}
|
|
5815
6286
|
/**
|
|
5816
6287
|
* TODO: [🕛] Unite `AgentBasicInformation`, `ChatParticipant`, `LlmExecutionTools` + `LlmToolsMetadata`
|
|
5817
6288
|
*/
|