@promptbook/editable 0.101.0-0 → 0.101.0-10

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 (60) hide show
  1. package/esm/index.es.js +11 -1
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/src/_packages/components.index.d.ts +18 -0
  4. package/esm/typings/src/_packages/core.index.d.ts +2 -0
  5. package/esm/typings/src/_packages/types.index.d.ts +6 -0
  6. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +41 -3
  7. package/esm/typings/src/book-2.0/agent-source/parseParameters.d.ts +13 -0
  8. package/esm/typings/src/book-2.0/commitments/ACTION/ACTION.d.ts +8 -2
  9. package/esm/typings/src/book-2.0/commitments/DELETE/DELETE.d.ts +59 -0
  10. package/esm/typings/src/book-2.0/commitments/FORMAT/FORMAT.d.ts +8 -2
  11. package/esm/typings/src/book-2.0/commitments/GOAL/GOAL.d.ts +45 -0
  12. package/esm/typings/src/book-2.0/commitments/KNOWLEDGE/KNOWLEDGE.d.ts +1 -1
  13. package/esm/typings/src/book-2.0/commitments/MEMORY/MEMORY.d.ts +46 -0
  14. package/esm/typings/src/book-2.0/commitments/MESSAGE/MESSAGE.d.ts +47 -0
  15. package/esm/typings/src/book-2.0/commitments/META/META.d.ts +62 -0
  16. package/esm/typings/src/book-2.0/commitments/MODEL/MODEL.d.ts +8 -2
  17. package/esm/typings/src/book-2.0/commitments/NOTE/NOTE.d.ts +8 -2
  18. package/esm/typings/src/book-2.0/commitments/PERSONA/PERSONA.d.ts +8 -2
  19. package/esm/typings/src/book-2.0/commitments/SCENARIO/SCENARIO.d.ts +46 -0
  20. package/esm/typings/src/book-2.0/commitments/STYLE/STYLE.d.ts +8 -2
  21. package/esm/typings/src/book-2.0/commitments/index.d.ts +7 -3
  22. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/MockedChat.d.ts +46 -0
  23. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/index.d.ts +3 -0
  24. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +10 -0
  25. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +3 -0
  26. package/esm/typings/src/book-components/Chat/Chat/Chat.d.ts +0 -5
  27. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +28 -2
  28. package/esm/typings/src/book-components/Chat/Chat/constants.d.ts +8 -0
  29. package/esm/typings/src/book-components/Chat/examples/ChatMarkdownDemo.d.ts +16 -0
  30. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +21 -0
  31. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.test.d.ts +1 -0
  32. package/esm/typings/src/book-components/icons/ArrowIcon.d.ts +9 -0
  33. package/esm/typings/src/book-components/icons/ResetIcon.d.ts +6 -0
  34. package/esm/typings/src/book-components/icons/SendIcon.d.ts +8 -0
  35. package/esm/typings/src/book-components/icons/TemplateIcon.d.ts +8 -0
  36. package/esm/typings/src/utils/markdown/escapeMarkdownBlock.d.ts +2 -0
  37. package/esm/typings/src/utils/markdown/humanizeAiText.d.ts +2 -0
  38. package/esm/typings/src/utils/markdown/humanizeAiTextEllipsis.d.ts +1 -0
  39. package/esm/typings/src/utils/markdown/humanizeAiTextEmdashed.d.ts +1 -0
  40. package/esm/typings/src/utils/markdown/humanizeAiTextQuotes.d.ts +1 -0
  41. package/esm/typings/src/utils/markdown/humanizeAiTextWhitespace.d.ts +1 -0
  42. package/esm/typings/src/utils/markdown/prettifyMarkdown.d.ts +8 -0
  43. package/esm/typings/src/utils/markdown/promptbookifyAiText.d.ts +1 -0
  44. package/esm/typings/src/utils/normalization/capitalize.d.ts +2 -0
  45. package/esm/typings/src/utils/normalization/decapitalize.d.ts +3 -1
  46. package/esm/typings/src/utils/normalization/normalizeTo_SCREAMING_CASE.d.ts +2 -0
  47. package/esm/typings/src/utils/normalization/normalizeTo_snake_case.d.ts +2 -0
  48. package/esm/typings/src/utils/normalization/normalizeWhitespaces.d.ts +2 -0
  49. package/esm/typings/src/utils/normalization/removeDiacritics.d.ts +2 -0
  50. package/esm/typings/src/utils/parseNumber.d.ts +1 -0
  51. package/esm/typings/src/utils/removeEmojis.d.ts +2 -0
  52. package/esm/typings/src/utils/removeQuotes.d.ts +1 -0
  53. package/esm/typings/src/utils/serialization/deepClone.d.ts +1 -0
  54. package/esm/typings/src/utils/trimCodeBlock.d.ts +1 -0
  55. package/esm/typings/src/utils/validators/url/isValidUrl.d.ts +1 -0
  56. package/esm/typings/src/utils/validators/uuid/isValidUuid.d.ts +2 -0
  57. package/esm/typings/src/version.d.ts +1 -1
  58. package/package.json +2 -2
  59. package/umd/index.umd.js +11 -1
  60. package/umd/index.umd.js.map +1 -1
@@ -1,3 +1,4 @@
1
+ import { Promisable } from 'type-fest';
1
2
  import type { string_book } from '../../book-2.0/agent-source/string_book';
2
3
  /**
3
4
  * @private util of `<BookEditor />`
@@ -7,7 +8,9 @@ export type BookEditorInnerProps = {
7
8
  fontClassName?: string;
8
9
  value?: string_book;
9
10
  onChange?(value: string_book): void;
11
+ onFileUpload?(file: File): Promisable<string>;
10
12
  isVerbose?: boolean;
13
+ isBorderRadiusDisabled?: boolean;
11
14
  };
12
15
  /**
13
16
  * @private util of `<BookEditor />`
@@ -1,9 +1,4 @@
1
1
  import type { ChatProps } from './ChatProps';
2
- /**
3
- * @deprecated use `isComplete` instead
4
- * @private util of `<Chat />`
5
- */
6
- export declare const LOADING_INTERACTIVE_IMAGE = "Loading...";
7
2
  /**
8
3
  * Renders a chat with messages and input for new messages
9
4
  *
@@ -23,10 +23,16 @@ export type ChatProps = {
23
23
  * Called when user sends a message
24
24
  *
25
25
  * Note: You must handle the message yourself and add it to the `messages` array
26
+ *
27
+ * - When set, the send textarea and button will be shown
28
+ * - When undefined, the chat has no input and is read-only showing only the messages
26
29
  */
27
- onMessage(messageContent: string): Promisable<void>;
30
+ onMessage?(messageContent: string): Promisable<void>;
28
31
  /**
29
- * Optional callback, when set, button for resetting chat will be shown
32
+ * Optional callback
33
+ *
34
+ * - When set, button for resetting chat will be shown
35
+ * - When undefined, no reset button will be shown
30
36
  */
31
37
  onReset?(): Promisable<void>;
32
38
  /**
@@ -113,4 +119,24 @@ export type ChatProps = {
113
119
  * Keys should match ChatMessage.from values (e.g., 'USER', 'AGENT_{id}', etc.)
114
120
  */
115
121
  readonly participants?: ReadonlyArray<ChatParticipant>;
122
+ /**
123
+ * Optional callback for handling user feedback on messages
124
+ * When provided, star rating buttons (1-5 stars) will be displayed next to each message
125
+ *
126
+ * @param feedback - Object containing the feedback data
127
+ * @param feedback.message - The message being rated
128
+ * @param feedback.rating - Star rating from 1 to 5
129
+ * @param feedback.textRating - Optional text feedback/note from user
130
+ * @param feedback.chatThread - Complete chat thread as string
131
+ * @param feedback.expectedAnswer - Optional expected answer provided by user
132
+ * @param feedback.url - Current page URL where feedback was given
133
+ */
134
+ onFeedback?(feedback: {
135
+ message: ChatMessage;
136
+ rating: number;
137
+ textRating: string;
138
+ chatThread: string;
139
+ expectedAnswer: string | null;
140
+ url: string;
141
+ }): Promisable<void>;
116
142
  };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @deprecated use `isComplete` instead
3
+ * @private util of `<Chat />`
4
+ */
5
+ export declare const LOADING_INTERACTIVE_IMAGE = "Loading...";
6
+ /**
7
+ * Note: [💞] Ignore a discrepancy between file name and entity name
8
+ */
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Demo component showing Chat with markdown rendering capabilities
3
+ *
4
+ * This example demonstrates various markdown features supported by the Chat component:
5
+ * - Headers
6
+ * - Bold and italic text
7
+ * - Code blocks and inline code
8
+ * - Lists (ordered and unordered)
9
+ * - Links
10
+ * - Blockquotes
11
+ * - Tables
12
+ * - Strikethrough text
13
+ *
14
+ * @private temporary for testing purposes
15
+ */
16
+ export declare function ChatMarkdownDemo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import type { string_html, string_markdown } from '../../../types/typeAliases';
2
+ /**
3
+ * Convert markdown content to HTML for display in chat messages
4
+ *
5
+ * @param markdown - The markdown content to convert
6
+ * @returns HTML string ready for rendering
7
+ *
8
+ * @public exported from `@promptbook/components`
9
+ * <- TODO: [🧠] Maybe export from `@promptbook/markdown-utils`
10
+ */
11
+ export declare function renderMarkdown(markdown: string_markdown): string_html;
12
+ /**
13
+ * Check if content appears to be markdown (contains markdown syntax)
14
+ *
15
+ * @param content - Content to check
16
+ * @returns true if content appears to contain markdown syntax
17
+ *
18
+ * @public exported from `@promptbook/components`
19
+ * <- TODO: [🧠] Maybe export from `@promptbook/markdown-utils`
20
+ */
21
+ export declare function isMarkdownContent(content: string): boolean;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shows simple arrow icon pointing up or down
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export declare const ArrowIcon: ({ direction, size }: {
7
+ direction: string;
8
+ size: number;
9
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shows simple reset icon
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export declare const ResetIcon: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shows simple send icon
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export declare const SendIcon: ({ size }: {
7
+ size: number;
8
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shows simple template icon
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export declare const TemplateIcon: ({ size }: {
7
+ size: number;
8
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -3,6 +3,8 @@ import type { string_markdown_text } from '../../types/typeAliases';
3
3
  * Function escapeMarkdownBlock will escape markdown block if needed
4
4
  * It is useful when you want have block in block
5
5
  *
6
+ * Note: [🔂] This function is idempotent.
7
+ *
6
8
  * @public exported from `@promptbook/markdown-utils`
7
9
  */
8
10
  export declare function escapeMarkdownBlock(value: string_markdown_text): string_markdown_text;
@@ -2,11 +2,13 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Function `humanizeAiText` will remove traces of AI text generation artifacts
4
4
  *
5
+ * Note: [🔂] This function is idempotent.
5
6
  * Tip: If you want more control, look for other functions for example `humanizeAiTextEmdashed` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
8
9
  */
9
10
  export declare function humanizeAiText(aiText: string_markdown): string_markdown;
10
11
  /**
12
+ * TODO: [🧠] Maybe this should be exported from `@promptbook/utils` not `@promptbook/markdown-utils`
11
13
  * TODO: [🅾️] !!! Use this across the project where AI text is involved
12
14
  */
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change ellipsis character to three dots `…` -> `...`
4
4
  *
5
+ * Note: [🔂] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change em-dashes to regular dashes `—` -> `-`
4
4
  *
5
+ * Note: [🔂] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change smart quotes to regular quotes
4
4
  *
5
+ * Note: [🔂] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -2,6 +2,7 @@ import { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change unprintable hard spaces to regular spaces
4
4
  *
5
+ * Note: [🔂] This function is idempotent.
5
6
  * Tip: If you want to do the full cleanup, look for `humanizeAiText` exported `@promptbook/markdown-utils`
6
7
  *
7
8
  * @public exported from `@promptbook/markdown-utils`
@@ -7,3 +7,11 @@ import type { string_html } from '../../types/typeAliases';
7
7
  * @private withing the package because of HUGE size of prettier dependency
8
8
  */
9
9
  export declare function prettifyMarkdown<TContent extends string_html>(content: TContent): TContent;
10
+ /**
11
+ * Async version of prettifyMarkdown using dynamic imports
12
+ *
13
+ * @param content raw html code
14
+ * @returns formatted html code
15
+ * @private withing the package because of HUGE size of prettier dependency
16
+ */
17
+ export declare function prettifyMarkdownAsync<TContent extends string_html>(content: TContent): Promise<TContent>;
@@ -6,6 +6,7 @@ import { string_markdown } from '../../types/typeAliases';
6
6
  */
7
7
  export declare function promptbookifyAiText(text: string_markdown): string_markdown;
8
8
  /**
9
+ * TODO: !!!!! Make the function idempotent and add "Note: [🔂] This function is idempotent."
9
10
  * TODO: [🅾️]!!! Use this across the project where AI text is involved
10
11
  * TODO: [🧠][✌️] Make some Promptbook-native token system
11
12
  */
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Makes first letter of a string uppercase
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
5
+ *
4
6
  * @public exported from `@promptbook/utils`
5
7
  */
6
8
  export declare function capitalize(word: string): string;
@@ -1,5 +1,7 @@
1
1
  /**
2
- * Makes first letter of a string uppercase
2
+ * Makes first letter of a string lowercase
3
+ *
4
+ * Note: [🔂] This function is idempotent.
3
5
  *
4
6
  * @public exported from `@promptbook/utils`
5
7
  */
@@ -9,6 +9,8 @@ export type string_SCREAMING_CASE = string;
9
9
  /**
10
10
  * Normalizes a text string to SCREAMING_CASE (all uppercase with underscores).
11
11
  *
12
+ * Note: [🔂] This function is idempotent.
13
+ *
12
14
  * @param text The text string to be converted to SCREAMING_CASE format.
13
15
  * @returns The normalized text in SCREAMING_CASE format.
14
16
  * @example 'HELLO_WORLD'
@@ -8,6 +8,8 @@ export type string_snake_case = string;
8
8
  /**
9
9
  * Normalizes a text string to snake_case format.
10
10
  *
11
+ * Note: [🔂] This function is idempotent.
12
+ *
11
13
  * @param text The text string to be converted to snake_case format.
12
14
  * @returns The normalized text in snake_case format.
13
15
  * @example 'hello_world'
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Take every whitespace (space, new line, tab) and replace it with a single space
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
5
+ *
4
6
  * @public exported from `@promptbook/utils`
5
7
  */
6
8
  export declare function normalizeWhitespaces(sentence: string): string;
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Removes diacritic marks (accents) from characters in a string.
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
5
+ *
4
6
  * @param input The string containing diacritics to be normalized.
5
7
  * @returns The string with diacritics removed or normalized.
6
8
  * @public exported from `@promptbook/utils`
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Function parseNumber will parse number from string
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
4
5
  * Unlike Number.parseInt, Number.parseFloat it will never ever result in NaN
5
6
  * Note: it also works only with decimal numbers
6
7
  *
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Removes emojis from a string and fix whitespaces
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
5
+ *
4
6
  * @param text with emojis
5
7
  * @returns text without emojis
6
8
  * @public exported from `@promptbook/utils`
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Removes quotes from a string
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
4
5
  * Tip: This is very useful for post-processing of the result of the LLM model
5
6
  * Note: This function removes only the same quotes from the beginning and the end of the string
6
7
  * Note: There are two similar functions:
@@ -2,6 +2,7 @@ import type { WritableDeep } from 'type-fest';
2
2
  /**
3
3
  * Creates a deep clone of the given object
4
4
  *
5
+ * Note: [🔂] This function is idempotent.
5
6
  * Note: This method only works for objects that are fully serializable to JSON and do not contain functions, Dates, or special types.
6
7
  *
7
8
  * @param objectValue The object to clone.
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Function trimCodeBlock will trim starting and ending code block from the string if it is present.
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
4
5
  * Note: This is useful for post-processing of the result of the chat LLM model
5
6
  * when the model wraps the result in the (markdown) code block.
6
7
  *
@@ -3,6 +3,7 @@ import type { really_unknown } from '../../organization/really_unknown';
3
3
  /**
4
4
  * Tests if given string is valid URL.
5
5
  *
6
+ * Note: [🔂] This function is idempotent.
6
7
  * Note: Dataurl are considered perfectly valid.
7
8
  * Note: There are two similar functions:
8
9
  * - `isValidUrl` which tests any URL
@@ -3,6 +3,8 @@ import type { really_unknown } from '../../organization/really_unknown';
3
3
  /**
4
4
  * Checks if value is valid uuid
5
5
  *
6
+ * Note: [🔂] This function is idempotent.
7
+ *
6
8
  * @public exported from `@promptbook/utils`
7
9
  */
8
10
  export declare function isValidUuid(value: really_unknown): value is string_uuid;
@@ -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.100.4-0`).
18
+ * It follows semantic versioning (e.g., `0.101.0-9`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/editable",
3
- "version": "0.101.0-0",
3
+ "version": "0.101.0-10",
4
4
  "description": "Promptbook: Run AI apps in plain human language across multiple models and platforms",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -95,7 +95,7 @@
95
95
  "module": "./esm/index.es.js",
96
96
  "typings": "./esm/typings/src/_packages/editable.index.d.ts",
97
97
  "peerDependencies": {
98
- "@promptbook/core": "0.101.0-0"
98
+ "@promptbook/core": "0.101.0-10"
99
99
  },
100
100
  "dependencies": {
101
101
  "crypto-js": "4.2.0",
package/umd/index.umd.js CHANGED
@@ -23,7 +23,7 @@
23
23
  * @generated
24
24
  * @see https://github.com/webgptorg/promptbook
25
25
  */
26
- const PROMPTBOOK_ENGINE_VERSION = '0.101.0-0';
26
+ const PROMPTBOOK_ENGINE_VERSION = '0.101.0-10';
27
27
  /**
28
28
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
29
29
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -493,6 +493,7 @@
493
493
  /**
494
494
  * Function parseNumber will parse number from string
495
495
  *
496
+ * Note: [🔂] This function is idempotent.
496
497
  * Unlike Number.parseInt, Number.parseFloat it will never ever result in NaN
497
498
  * Note: it also works only with decimal numbers
498
499
  *
@@ -1049,6 +1050,8 @@
1049
1050
  /**
1050
1051
  * Normalizes a text string to SCREAMING_CASE (all uppercase with underscores).
1051
1052
  *
1053
+ * Note: [🔂] This function is idempotent.
1054
+ *
1052
1055
  * @param text The text string to be converted to SCREAMING_CASE format.
1053
1056
  * @returns The normalized text in SCREAMING_CASE format.
1054
1057
  * @example 'HELLO_WORLD'
@@ -1284,6 +1287,7 @@
1284
1287
  /**
1285
1288
  * Creates a deep clone of the given object
1286
1289
  *
1290
+ * Note: [🔂] This function is idempotent.
1287
1291
  * Note: This method only works for objects that are fully serializable to JSON and do not contain functions, Dates, or special types.
1288
1292
  *
1289
1293
  * @param objectValue The object to clone.
@@ -1671,6 +1675,8 @@
1671
1675
  /**
1672
1676
  * Removes diacritic marks (accents) from characters in a string.
1673
1677
  *
1678
+ * Note: [🔂] This function is idempotent.
1679
+ *
1674
1680
  * @param input The string containing diacritics to be normalized.
1675
1681
  * @returns The string with diacritics removed or normalized.
1676
1682
  * @public exported from `@promptbook/utils`
@@ -1688,6 +1694,8 @@
1688
1694
  /**
1689
1695
  * Removes emojis from a string and fix whitespaces
1690
1696
  *
1697
+ * Note: [🔂] This function is idempotent.
1698
+ *
1691
1699
  * @param text with emojis
1692
1700
  * @returns text without emojis
1693
1701
  * @public exported from `@promptbook/utils`
@@ -1704,6 +1712,7 @@
1704
1712
  /**
1705
1713
  * Removes quotes from a string
1706
1714
  *
1715
+ * Note: [🔂] This function is idempotent.
1707
1716
  * Tip: This is very useful for post-processing of the result of the LLM model
1708
1717
  * Note: This function removes only the same quotes from the beginning and the end of the string
1709
1718
  * Note: There are two similar functions:
@@ -2535,6 +2544,7 @@
2535
2544
  /**
2536
2545
  * Tests if given string is valid URL.
2537
2546
  *
2547
+ * Note: [🔂] This function is idempotent.
2538
2548
  * Note: Dataurl are considered perfectly valid.
2539
2549
  * Note: There are two similar functions:
2540
2550
  * - `isValidUrl` which tests any URL