@promptbook/node 0.101.0-2 → 0.101.0-20

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 (76) hide show
  1. package/esm/index.es.js +55 -46
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/src/_packages/components.index.d.ts +20 -0
  4. package/esm/typings/src/_packages/core.index.d.ts +14 -0
  5. package/esm/typings/src/_packages/types.index.d.ts +14 -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/AgentModelRequirements.d.ts +3 -0
  8. package/esm/typings/src/book-2.0/agent-source/createAgentModelRequirements.d.ts +4 -22
  9. package/esm/typings/src/book-2.0/agent-source/createAgentModelRequirementsWithCommitments.d.ts +1 -26
  10. package/esm/typings/src/book-2.0/agent-source/parseParameters.d.ts +13 -0
  11. package/esm/typings/src/book-2.0/commitments/ACTION/ACTION.d.ts +8 -2
  12. package/esm/typings/src/book-2.0/commitments/DELETE/DELETE.d.ts +59 -0
  13. package/esm/typings/src/book-2.0/commitments/FORMAT/FORMAT.d.ts +8 -2
  14. package/esm/typings/src/book-2.0/commitments/GOAL/GOAL.d.ts +45 -0
  15. package/esm/typings/src/book-2.0/commitments/KNOWLEDGE/KNOWLEDGE.d.ts +1 -1
  16. package/esm/typings/src/book-2.0/commitments/MEMORY/MEMORY.d.ts +46 -0
  17. package/esm/typings/src/book-2.0/commitments/MESSAGE/MESSAGE.d.ts +47 -0
  18. package/esm/typings/src/book-2.0/commitments/META/META.d.ts +62 -0
  19. package/esm/typings/src/book-2.0/commitments/MODEL/MODEL.d.ts +31 -4
  20. package/esm/typings/src/book-2.0/commitments/NOTE/NOTE.d.ts +20 -2
  21. package/esm/typings/src/book-2.0/commitments/PERSONA/PERSONA.d.ts +8 -2
  22. package/esm/typings/src/book-2.0/commitments/SCENARIO/SCENARIO.d.ts +46 -0
  23. package/esm/typings/src/book-2.0/commitments/STYLE/STYLE.d.ts +8 -2
  24. package/esm/typings/src/book-2.0/commitments/index.d.ts +7 -3
  25. package/esm/typings/src/book-2.0/utils/generatePlaceholderAgentProfileImageUrl.d.ts +3 -0
  26. package/esm/typings/src/book-components/AvatarProfile/AvatarChip/AvatarChip.d.ts +2 -2
  27. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/MockedChat.d.ts +63 -0
  28. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/index.d.ts +3 -0
  29. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +15 -0
  30. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +4 -0
  31. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +26 -0
  32. package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +13 -0
  33. package/esm/typings/src/book-components/Chat/hooks/index.d.ts +2 -0
  34. package/esm/typings/src/book-components/Chat/hooks/useChatAutoScroll.d.ts +41 -0
  35. package/esm/typings/src/book-components/Chat/hooks/useSendMessageToLlmChat.d.ts +44 -0
  36. package/esm/typings/src/book-components/Chat/utils/parseMessageButtons.d.ts +22 -0
  37. package/esm/typings/src/book-components/icons/PauseIcon.d.ts +8 -0
  38. package/esm/typings/src/book-components/icons/PlayIcon.d.ts +8 -0
  39. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +1 -2
  40. package/esm/typings/src/execution/createPipelineExecutor/getKnowledgeForTask.d.ts +1 -3
  41. package/esm/typings/src/formats/csv/CsvFormatError.d.ts +1 -1
  42. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsConfigurationFromEnv.d.ts +1 -1
  43. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.d.ts +1 -1
  44. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +1 -2
  45. package/esm/typings/src/llm-providers/_common/register/createLlmToolsFromConfiguration.d.ts +8 -2
  46. package/esm/typings/src/llm-providers/_common/utils/removeUnsupportedModelRequirements.d.ts +25 -0
  47. package/esm/typings/src/llm-providers/_multiple/MultipleLlmExecutionTools.d.ts +5 -13
  48. package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +11 -0
  49. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +2 -1
  50. package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +54 -0
  51. package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +29 -0
  52. package/esm/typings/src/llm-providers/agent/playground/playground.d.ts +8 -0
  53. package/esm/typings/src/llm-providers/agent/register-configuration.d.ts +11 -0
  54. package/esm/typings/src/llm-providers/agent/register-constructor.d.ts +13 -0
  55. package/esm/typings/src/llm-providers/mocked/$fakeTextToExpectations.d.ts +1 -0
  56. package/esm/typings/src/llm-providers/mocked/MockedEchoLlmExecutionTools.d.ts +2 -5
  57. package/esm/typings/src/llm-providers/mocked/MockedFackedLlmExecutionTools.d.ts +2 -6
  58. package/esm/typings/src/llm-providers/openai/OpenAiCompatibleExecutionTools.d.ts +15 -8
  59. package/esm/typings/src/personas/preparePersona.d.ts +1 -0
  60. package/esm/typings/src/remote-server/openapi-types.d.ts +31 -31
  61. package/esm/typings/src/scrapers/markdown/MarkdownScraper.d.ts +1 -2
  62. package/esm/typings/src/types/ModelRequirements.d.ts +2 -4
  63. package/esm/typings/src/utils/color/utils/colorSaturation.d.ts +1 -1
  64. package/esm/typings/src/utils/editable/edit-pipeline-string/addPipelineCommand.d.ts +1 -1
  65. package/esm/typings/src/utils/markdown/humanizeAiText.d.ts +1 -0
  66. package/esm/typings/src/version.d.ts +1 -1
  67. package/package.json +2 -2
  68. package/umd/index.umd.js +55 -46
  69. package/umd/index.umd.js.map +1 -1
  70. package/esm/typings/src/book-2.0/utils/extractAgentMetadata.d.ts +0 -17
  71. package/esm/typings/src/book-2.0/utils/extractProfileImageFromSystemMessage.d.ts +0 -12
  72. package/esm/typings/src/llm-providers/mocked/test/joker.test.d.ts +0 -4
  73. package/esm/typings/src/llm-providers/mocked/test/mocked-chat.test.d.ts +0 -5
  74. package/esm/typings/src/llm-providers/mocked/test/mocked-completion.test.d.ts +0 -4
  75. package/esm/typings/src/scripting/_test/postprocessing.test.d.ts +0 -1
  76. /package/esm/typings/src/{cli/test/ptbk.test.d.ts → llm-providers/_common/utils/removeUnsupportedModelRequirements.test.d.ts} +0 -0
@@ -4,20 +4,29 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
4
4
  * MODEL commitment definition
5
5
  *
6
6
  * The MODEL commitment specifies which AI model to use and can also set
7
- * model-specific parameters like temperature, topP, and topK.
7
+ * model-specific parameters like temperature, topP, topK, and maxTokens.
8
8
  *
9
- * Example usage in agent source:
9
+ * Supports multiple syntax variations:
10
10
  *
11
+ * Single-line format:
11
12
  * ```book
12
13
  * MODEL gpt-4
13
14
  * MODEL claude-3-opus temperature=0.3
14
15
  * MODEL gpt-3.5-turbo temperature=0.8 topP=0.9
15
16
  * ```
16
17
  *
18
+ * Multi-line named parameter format:
19
+ * ```book
20
+ * MODEL NAME gpt-4
21
+ * MODEL TEMPERATURE 0.7
22
+ * MODEL TOP_P 0.9
23
+ * MODEL MAX_TOKENS 2048
24
+ * ```
25
+ *
17
26
  * @private [🪔] Maybe export the commitments through some package
18
27
  */
19
- export declare class ModelCommitmentDefinition extends BaseCommitmentDefinition<'MODEL'> {
20
- constructor();
28
+ export declare class ModelCommitmentDefinition extends BaseCommitmentDefinition<'MODEL' | 'MODELS'> {
29
+ constructor(type?: 'MODEL' | 'MODELS');
21
30
  /**
22
31
  * Short one-line description of MODEL.
23
32
  */
@@ -27,6 +36,18 @@ export declare class ModelCommitmentDefinition extends BaseCommitmentDefinition<
27
36
  */
28
37
  get documentation(): string;
29
38
  applyToAgentModelRequirements(requirements: AgentModelRequirements, content: string): AgentModelRequirements;
39
+ /**
40
+ * Check if the first part is a known named parameter
41
+ */
42
+ private isNamedParameter;
43
+ /**
44
+ * Parse the new named parameter format: "MODEL TEMPERATURE 0.7"
45
+ */
46
+ private parseNamedParameter;
47
+ /**
48
+ * Parse the legacy format: "MODEL gpt-4 temperature=0.3 topP=0.9"
49
+ */
50
+ private parseLegacyFormat;
30
51
  }
31
52
  /**
32
53
  * Singleton instance of the MODEL commitment definition
@@ -34,6 +55,12 @@ export declare class ModelCommitmentDefinition extends BaseCommitmentDefinition<
34
55
  * @private [🪔] Maybe export the commitments through some package
35
56
  */
36
57
  export declare const ModelCommitment: ModelCommitmentDefinition;
58
+ /**
59
+ * Singleton instance of the MODELS commitment definition
60
+ *
61
+ * @private [🪔] Maybe export the commitments through some package
62
+ */
63
+ export declare const ModelsCommitment: ModelCommitmentDefinition;
37
64
  /**
38
65
  * Note: [💞] Ignore a discrepancy between file name and entity name
39
66
  */
@@ -26,8 +26,8 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
26
26
  *
27
27
  * @private [🪔] Maybe export the commitments through some package
28
28
  */
29
- export declare class NoteCommitmentDefinition extends BaseCommitmentDefinition<'NOTE'> {
30
- constructor();
29
+ export declare class NoteCommitmentDefinition extends BaseCommitmentDefinition<'NOTE' | 'NOTES' | 'COMMENT' | 'NONCE'> {
30
+ constructor(type?: 'NOTE' | 'NOTES' | 'COMMENT' | 'NONCE');
31
31
  /**
32
32
  * Short one-line description of NOTE.
33
33
  */
@@ -44,6 +44,24 @@ export declare class NoteCommitmentDefinition extends BaseCommitmentDefinition<'
44
44
  * @private [🪔] Maybe export the commitments through some package
45
45
  */
46
46
  export declare const NoteCommitment: NoteCommitmentDefinition;
47
+ /**
48
+ * Singleton instance of the NOTES commitment definition
49
+ *
50
+ * @private [🪔] Maybe export the commitments through some package
51
+ */
52
+ export declare const NotesCommitment: NoteCommitmentDefinition;
53
+ /**
54
+ * Singleton instance of the COMMENT commitment definition
55
+ *
56
+ * @private [🪔] Maybe export the commitments through some package
57
+ */
58
+ export declare const CommentCommitment: NoteCommitmentDefinition;
59
+ /**
60
+ * Singleton instance of the NONCE commitment definition
61
+ *
62
+ * @private [🪔] Maybe export the commitments through some package
63
+ */
64
+ export declare const NonceCommitment: NoteCommitmentDefinition;
47
65
  /**
48
66
  * [💞] Ignore a discrepancy between file name and entity name
49
67
  */
@@ -23,8 +23,8 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
23
23
  *
24
24
  * @private [🪔] Maybe export the commitments through some package
25
25
  */
26
- export declare class PersonaCommitmentDefinition extends BaseCommitmentDefinition<'PERSONA'> {
27
- constructor();
26
+ export declare class PersonaCommitmentDefinition extends BaseCommitmentDefinition<'PERSONA' | 'PERSONAE'> {
27
+ constructor(type?: 'PERSONA' | 'PERSONAE');
28
28
  /**
29
29
  * Short one-line description of PERSONA.
30
30
  */
@@ -41,6 +41,12 @@ export declare class PersonaCommitmentDefinition extends BaseCommitmentDefinitio
41
41
  * @private [🪔] Maybe export the commitments through some package
42
42
  */
43
43
  export declare const PersonaCommitment: PersonaCommitmentDefinition;
44
+ /**
45
+ * Singleton instance of the PERSONAE commitment definition
46
+ *
47
+ * @private [🪔] Maybe export the commitments through some package
48
+ */
49
+ export declare const PersonaeCommitment: PersonaCommitmentDefinition;
44
50
  /**
45
51
  * Note: [💞] Ignore a discrepancy between file name and entity name
46
52
  */
@@ -0,0 +1,46 @@
1
+ import type { AgentModelRequirements } from '../../agent-source/AgentModelRequirements';
2
+ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
3
+ /**
4
+ * SCENARIO commitment definition
5
+ *
6
+ * The SCENARIO commitment defines a specific situation or context in which the AI
7
+ * assistant should operate. It helps to set the scene for the AI's responses.
8
+ * Later scenarios are more important than earlier scenarios.
9
+ *
10
+ * Example usage in agent source:
11
+ *
12
+ * ```book
13
+ * SCENARIO You are in a customer service call center during peak hours
14
+ * SCENARIO The customer is frustrated and has been on hold for 20 minutes
15
+ * SCENARIO This is the customer's third call about the same issue
16
+ * ```
17
+ *
18
+ * @private [🪔] Maybe export the commitments through some package
19
+ */
20
+ export declare class ScenarioCommitmentDefinition extends BaseCommitmentDefinition<'SCENARIO' | 'SCENARIOS'> {
21
+ constructor(type?: 'SCENARIO' | 'SCENARIOS');
22
+ /**
23
+ * Short one-line description of SCENARIO.
24
+ */
25
+ get description(): string;
26
+ /**
27
+ * Markdown documentation for SCENARIO commitment.
28
+ */
29
+ get documentation(): string;
30
+ applyToAgentModelRequirements(requirements: AgentModelRequirements, content: string): AgentModelRequirements;
31
+ }
32
+ /**
33
+ * Singleton instance of the SCENARIO commitment definition
34
+ *
35
+ * @private [🪔] Maybe export the commitments through some package
36
+ */
37
+ export declare const ScenarioCommitment: ScenarioCommitmentDefinition;
38
+ /**
39
+ * Singleton instance of the SCENARIOS commitment definition
40
+ *
41
+ * @private [🪔] Maybe export the commitments through some package
42
+ */
43
+ export declare const ScenariosCommitment: ScenarioCommitmentDefinition;
44
+ /**
45
+ * Note: [💞] Ignore a discrepancy between file name and entity name
46
+ */
@@ -15,8 +15,8 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
15
15
  *
16
16
  * @private [🪔] Maybe export the commitments through some package
17
17
  */
18
- export declare class StyleCommitmentDefinition extends BaseCommitmentDefinition<'STYLE'> {
19
- constructor();
18
+ export declare class StyleCommitmentDefinition extends BaseCommitmentDefinition<'STYLE' | 'STYLES'> {
19
+ constructor(type?: 'STYLE' | 'STYLES');
20
20
  /**
21
21
  * Short one-line description of STYLE.
22
22
  */
@@ -33,6 +33,12 @@ export declare class StyleCommitmentDefinition extends BaseCommitmentDefinition<
33
33
  * @private [🪔] Maybe export the commitments through some package
34
34
  */
35
35
  export declare const StyleCommitment: StyleCommitmentDefinition;
36
+ /**
37
+ * Singleton instance of the STYLES commitment definition
38
+ *
39
+ * @private [🪔] Maybe export the commitments through some package
40
+ */
41
+ export declare const StylesCommitment: StyleCommitmentDefinition;
36
42
  /**
37
43
  * [💞] Ignore a discrepancy between file name and entity name
38
44
  */
@@ -1,15 +1,19 @@
1
1
  import type { BookCommitment } from './_base/BookCommitment';
2
2
  import type { CommitmentDefinition } from './_base/CommitmentDefinition';
3
3
  import { ActionCommitmentDefinition } from './ACTION/ACTION';
4
+ import { DeleteCommitmentDefinition } from './DELETE/DELETE';
4
5
  import { FormatCommitmentDefinition } from './FORMAT/FORMAT';
6
+ import { GoalCommitmentDefinition } from './GOAL/GOAL';
5
7
  import { KnowledgeCommitmentDefinition } from './KNOWLEDGE/KNOWLEDGE';
6
- import { MetaImageCommitmentDefinition } from './META_IMAGE/META_IMAGE';
7
- import { MetaLinkCommitmentDefinition } from './META_LINK/META_LINK';
8
+ import { MemoryCommitmentDefinition } from './MEMORY/MEMORY';
9
+ import { MessageCommitmentDefinition } from './MESSAGE/MESSAGE';
10
+ import { MetaCommitmentDefinition } from './META/META';
8
11
  import { ModelCommitmentDefinition } from './MODEL/MODEL';
9
12
  import { NoteCommitmentDefinition } from './NOTE/NOTE';
10
13
  import { PersonaCommitmentDefinition } from './PERSONA/PERSONA';
11
14
  import { RuleCommitmentDefinition } from './RULE/RULE';
12
15
  import { SampleCommitmentDefinition } from './SAMPLE/SAMPLE';
16
+ import { ScenarioCommitmentDefinition } from './SCENARIO/SCENARIO';
13
17
  import { StyleCommitmentDefinition } from './STYLE/STYLE';
14
18
  import { NotYetImplementedCommitmentDefinition } from './_base/NotYetImplementedCommitmentDefinition';
15
19
  /**
@@ -19,7 +23,7 @@ import { NotYetImplementedCommitmentDefinition } from './_base/NotYetImplemented
19
23
  *
20
24
  * @private Use functions to access commitments instead of this array directly
21
25
  */
22
- export declare const COMMITMENT_REGISTRY: readonly [PersonaCommitmentDefinition, KnowledgeCommitmentDefinition, StyleCommitmentDefinition, RuleCommitmentDefinition, RuleCommitmentDefinition, SampleCommitmentDefinition, SampleCommitmentDefinition, FormatCommitmentDefinition, ModelCommitmentDefinition, ActionCommitmentDefinition, MetaImageCommitmentDefinition, MetaLinkCommitmentDefinition, NoteCommitmentDefinition, NotYetImplementedCommitmentDefinition<"EXPECT">, NotYetImplementedCommitmentDefinition<"SCENARIO">, NotYetImplementedCommitmentDefinition<"SCENARIOS">, NotYetImplementedCommitmentDefinition<"BEHAVIOUR">, NotYetImplementedCommitmentDefinition<"BEHAVIOURS">, NotYetImplementedCommitmentDefinition<"AVOID">, NotYetImplementedCommitmentDefinition<"AVOIDANCE">, NotYetImplementedCommitmentDefinition<"GOAL">, NotYetImplementedCommitmentDefinition<"GOALS">, NotYetImplementedCommitmentDefinition<"CONTEXT">];
26
+ export declare const COMMITMENT_REGISTRY: readonly [PersonaCommitmentDefinition, PersonaCommitmentDefinition, KnowledgeCommitmentDefinition, MemoryCommitmentDefinition, MemoryCommitmentDefinition, StyleCommitmentDefinition, StyleCommitmentDefinition, RuleCommitmentDefinition, RuleCommitmentDefinition, SampleCommitmentDefinition, SampleCommitmentDefinition, FormatCommitmentDefinition, FormatCommitmentDefinition, ModelCommitmentDefinition, ModelCommitmentDefinition, ActionCommitmentDefinition, ActionCommitmentDefinition, MetaCommitmentDefinition, NoteCommitmentDefinition, NoteCommitmentDefinition, NoteCommitmentDefinition, NoteCommitmentDefinition, GoalCommitmentDefinition, GoalCommitmentDefinition, MessageCommitmentDefinition, MessageCommitmentDefinition, ScenarioCommitmentDefinition, ScenarioCommitmentDefinition, DeleteCommitmentDefinition, DeleteCommitmentDefinition, DeleteCommitmentDefinition, DeleteCommitmentDefinition, NotYetImplementedCommitmentDefinition<"EXPECT">, NotYetImplementedCommitmentDefinition<"BEHAVIOUR">, NotYetImplementedCommitmentDefinition<"BEHAVIOURS">, NotYetImplementedCommitmentDefinition<"AVOID">, NotYetImplementedCommitmentDefinition<"AVOIDANCE">, NotYetImplementedCommitmentDefinition<"CONTEXT">];
23
27
  /**
24
28
  * Gets a commitment definition by its type
25
29
  * @param type The commitment type to look up
@@ -8,3 +8,6 @@ import { string_agent_name, string_url_image } from '../../types/typeAliases';
8
8
  * @public exported from `@promptbook/core`
9
9
  */
10
10
  export declare function generatePlaceholderAgentProfileImageUrl(agentName?: string_agent_name): string_url_image;
11
+ /**
12
+ * TODO: [🤹] Figure out best placeholder image generator https://i.pravatar.cc/1000?u=568
13
+ */
@@ -9,7 +9,7 @@ export type AvatarChipProps = {
9
9
  /**
10
10
  * Avatar to be shown
11
11
  */
12
- readonly avatarBasicInformation: AgentBasicInformation;
12
+ readonly avatarBasicInformation: Omit<AgentBasicInformation, 'parameters'>;
13
13
  /**
14
14
  * Whether this chip is a template avatar
15
15
  */
@@ -21,7 +21,7 @@ export type AvatarChipProps = {
21
21
  /**
22
22
  * Called when chip is clicked
23
23
  */
24
- readonly onSelect?: (avatar: AgentBasicInformation) => void;
24
+ readonly onSelect?: (avatar: Omit<AgentBasicInformation, 'parameters'>) => void;
25
25
  /**
26
26
  * Whether this chip is selected
27
27
  */
@@ -0,0 +1,63 @@
1
+ import type { ChatProps } from '../../Chat/Chat/ChatProps';
2
+ /**
3
+ * Delay configuration for the MockedChat component
4
+ *
5
+ * @public exported from `@promptbook/components`
6
+ */
7
+ export type MockedChatDelayConfig = {
8
+ /**
9
+ * Delay before showing the first message (in milliseconds)
10
+ * @default 1000
11
+ */
12
+ beforeFirstMessage?: number;
13
+ /**
14
+ * Emulated thinking time between messages (in milliseconds)
15
+ * @default 2000
16
+ */
17
+ thinkingBetweenMessages?: number;
18
+ /**
19
+ * Wait time after each written word (in milliseconds)
20
+ * @default 100
21
+ */
22
+ waitAfterWord?: number;
23
+ /**
24
+ * Extra delay on top of the word waiting (in milliseconds)
25
+ * @default 50
26
+ */
27
+ extraWordDelay?: number;
28
+ };
29
+ /**
30
+ * Props for MockedChat component
31
+ *
32
+ * @public exported from `@promptbook/components`
33
+ */
34
+ export type MockedChatProps = Omit<ChatProps, 'onReset' | /*'onMessage' | */ 'onUseTemplate' | 'isVoiceRecognitionButtonShown'> & {
35
+ /**
36
+ * Whether the chat can be reset via the "New chat" button.
37
+ *
38
+ * When true (default), the reset button is shown and clicking it restarts the simulated flow.
39
+ * When false, the reset button is hidden (read-only simulation without manual restart).
40
+ *
41
+ * @default true
42
+ */
43
+ isResettable?: boolean;
44
+ /**
45
+ * Optional delays configuration for emulating typing behavior
46
+ */
47
+ delayConfig?: MockedChatDelayConfig;
48
+ /**
49
+ * When true, shows Pause/Resume control and allows pausing the simulated flow.
50
+ * Pausing finishes the currently typing message first (transitions via PAUSING state),
51
+ * then prevents new messages from starting until resumed.
52
+ *
53
+ * @default true
54
+ */
55
+ isPausable?: boolean;
56
+ };
57
+ /**
58
+ * MockedChat component that shows the same chat as Chat but emulates ongoing discussion
59
+ * with realistic typing delays and thinking pauses.
60
+ *
61
+ * @public exported from `@promptbook/components`
62
+ */
63
+ export declare function MockedChat(props: MockedChatProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export * from './AvatarProfile';
2
+ export * from './AvatarProfileFromSource';
3
+ export * from './MockedChat';
@@ -1,5 +1,7 @@
1
1
  import type { CSSProperties } from 'react';
2
+ import type { Promisable } from 'type-fest';
2
3
  import type { string_book } from '../../book-2.0/agent-source/string_book';
4
+ import { string_knowledge_source_content } from '../../types/typeAliases';
3
5
  /**
4
6
  * Props of `BookEditor`
5
7
  *
@@ -27,10 +29,23 @@ export type BookEditorProps = {
27
29
  * Callback function to handle changes in the book content.
28
30
  */
29
31
  onChange?(value: string_book): void;
32
+ /**
33
+ * returns the URL of the uploaded file on CDN or storage
34
+ */
35
+ onFileUpload?(file: File): Promisable<string_knowledge_source_content>;
30
36
  /**
31
37
  * If true, logs verbose debug info to the console and shows additional visual cues
32
38
  */
33
39
  readonly isVerbose?: boolean;
40
+ /**
41
+ * If true, disables border radius making the editor have sharp corners
42
+ */
43
+ readonly isBorderRadiusDisabled?: boolean;
44
+ /**
45
+ * If true, shows the footer with book title and version information.
46
+ * By default, the footer is hidden.
47
+ */
48
+ readonly isFooterShown?: boolean;
34
49
  };
35
50
  /**
36
51
  * Renders a book editor
@@ -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,10 @@ 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;
14
+ isFooterShown?: boolean;
11
15
  };
12
16
  /**
13
17
  * @private util of `<BookEditor />`
@@ -66,6 +66,12 @@ export type ChatProps = {
66
66
  * If not provided, the chat bar will not be rendered
67
67
  */
68
68
  readonly children?: ReactNode;
69
+ /**
70
+ * Extra action buttons/elements rendered in the actions toolbar
71
+ * (next to reset / template buttons). Keeps consumers DRY when
72
+ * adding feature–specific controls (e.g. Pause / Resume in MockedChat).
73
+ */
74
+ readonly extraActions?: ReactNode;
69
75
  /**
70
76
  * Optional CSS class name which will be added to root <div/> element
71
77
  */
@@ -119,4 +125,24 @@ export type ChatProps = {
119
125
  * Keys should match ChatMessage.from values (e.g., 'USER', 'AGENT_{id}', etc.)
120
126
  */
121
127
  readonly participants?: ReadonlyArray<ChatParticipant>;
128
+ /**
129
+ * Optional callback for handling user feedback on messages
130
+ * When provided, star rating buttons (1-5 stars) will be displayed next to each message
131
+ *
132
+ * @param feedback - Object containing the feedback data
133
+ * @param feedback.message - The message being rated
134
+ * @param feedback.rating - Star rating from 1 to 5
135
+ * @param feedback.textRating - Optional text feedback/note from user
136
+ * @param feedback.chatThread - Complete chat thread as string
137
+ * @param feedback.expectedAnswer - Optional expected answer provided by user
138
+ * @param feedback.url - Current page URL where feedback was given
139
+ */
140
+ onFeedback?(feedback: {
141
+ message: ChatMessage;
142
+ rating: number;
143
+ textRating: string;
144
+ chatThread: string;
145
+ expectedAnswer: string | null;
146
+ url: string;
147
+ }): Promisable<void>;
122
148
  };
@@ -2,6 +2,7 @@ import type { LlmExecutionTools } from '../../../execution/LlmExecutionTools';
2
2
  import type { ChatProps } from '../Chat/ChatProps';
3
3
  import type { ChatMessage } from '../types/ChatMessage';
4
4
  import type { ChatParticipant } from '../types/ChatParticipant';
5
+ import type { SendMessageToLlmChatFunction } from '../hooks/useSendMessageToLlmChat';
5
6
  /**
6
7
  * Props for LlmChat component, derived from ChatProps but with LLM-specific modifications
7
8
  *
@@ -17,8 +18,20 @@ export type LlmChatProps = Omit<ChatProps, 'messages' | 'onMessage' | 'onChange'
17
18
  * When provided, the conversation will be saved and restored from localStorage
18
19
  */
19
20
  readonly persistenceKey?: string;
21
+ /**
22
+ * Optional initial messages to pre-populate the chat.
23
+ * - They can include both USER and ASSISTANT messages.
24
+ * - They are only used when there is no persisted conversation (persistence takes precedence).
25
+ * - They are not automatically persisted until the user sends a new message.
26
+ */
27
+ readonly initialMessages?: ReadonlyArray<ChatMessage>;
20
28
  /**
21
29
  * Called when the chat state changes (messages, participants, etc.)
22
30
  */
23
31
  onChange?(messages: ReadonlyArray<ChatMessage>, participants: ReadonlyArray<ChatParticipant>): void;
32
+ /**
33
+ * Optional external sendMessage function produced by useSendMessageToLlmChat hook.
34
+ * When provided, LlmChat will attach its internal handler to it (no React context needed).
35
+ */
36
+ readonly sendMessage?: SendMessageToLlmChatFunction;
24
37
  };
@@ -0,0 +1,2 @@
1
+ export * from './useChatAutoScroll';
2
+ export * from './useSendMessageToLlmChat';
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Configuration for the auto-scroll behavior
3
+ */
4
+ export type ChatAutoScrollConfig = {
5
+ /**
6
+ * Threshold in pixels from bottom to consider as "at bottom"
7
+ * @default 100
8
+ */
9
+ bottomThreshold?: number;
10
+ /**
11
+ * Whether to use smooth scrolling
12
+ * @default true
13
+ */
14
+ smoothScroll?: boolean;
15
+ /**
16
+ * Delay before checking scroll position after new messages (in milliseconds)
17
+ * @default 100
18
+ */
19
+ scrollCheckDelay?: number;
20
+ };
21
+ /**
22
+ * Hook for managing auto-scroll behavior in chat components
23
+ *
24
+ * This hook provides:
25
+ * - Automatic scrolling to bottom when new messages arrive (if user is already at bottom)
26
+ * - Detection of when user scrolls away from bottom
27
+ * - Scroll-to-bottom functionality with smooth animation
28
+ * - Mobile-optimized scrolling behavior
29
+ *
30
+ * @public exported from `@promptbook/components`
31
+ */
32
+ export declare function useChatAutoScroll(config?: ChatAutoScrollConfig): {
33
+ isAutoScrolling: boolean;
34
+ chatMessagesRef: (element: HTMLDivElement | null) => void;
35
+ handleScroll: (event: React.UIEvent<HTMLDivElement>) => void;
36
+ handleMessagesChange: () => void;
37
+ scrollToBottom: () => void;
38
+ enableAutoScroll: () => void;
39
+ disableAutoScroll: () => void;
40
+ isMobile: boolean;
41
+ };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Function type for sending a message to LlmChat.
3
+ *
4
+ * Implementation detail: The returned function is "attachable".
5
+ * LlmChat will call the internal `_attach` method (if present) to bind
6
+ * its real message handler. Messages sent before attachment are queued
7
+ * and flushed after attachment.
8
+ *
9
+ * @public exported from `@promptbook/components`
10
+ */
11
+ export type SendMessageToLlmChatFunction = {
12
+ /**
13
+ * Send a message to the bound LlmChat instance (or queue it until attached).
14
+ */
15
+ (message: string): void;
16
+ /**
17
+ * Internal method used by the <LlmChat/> component to attach its handler.
18
+ * Not intended for consumer usage.
19
+ *
20
+ * @internal
21
+ */
22
+ _attach?: (handler: (message: string) => Promise<void> | void) => void;
23
+ };
24
+ /**
25
+ * Hook to create a sendMessage function for an <LlmChat/> component WITHOUT needing any React Context.
26
+ *
27
+ * Usage pattern:
28
+ * ```tsx
29
+ * const sendMessage = useSendMessageToLlmChat();
30
+ * return (
31
+ * <>
32
+ * <button onClick={() => sendMessage('Hello!')}>Hello</button>
33
+ * <LlmChat llmTools={llmTools} sendMessage={sendMessage} />
34
+ * </>
35
+ * );
36
+ * ```
37
+ *
38
+ * - No provider wrapping needed.
39
+ * - Safe to call before the <LlmChat/> mounts (messages will be queued).
40
+ * - Keeps DRY by letting <LlmChat/> reuse its internal `handleMessage` logic.
41
+ *
42
+ * @public exported from `@promptbook/components`
43
+ */
44
+ export declare function useSendMessageToLlmChat(): SendMessageToLlmChatFunction;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Represents a parsed message button from markdown
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export type MessageButton = {
7
+ text: string;
8
+ message: string;
9
+ };
10
+ /**
11
+ * Parses markdown buttons in the format [Button Text](?message=Message%20to%20send)
12
+ * Returns both the content without buttons and the extracted buttons
13
+ *
14
+ * @param content The markdown content that may contain buttons
15
+ * @returns Object with contentWithoutButtons and buttons array
16
+ *
17
+ * @public exported from `@promptbook/components`
18
+ */
19
+ export declare function parseMessageButtons(content: string): {
20
+ contentWithoutButtons: string;
21
+ buttons: MessageButton[];
22
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Pause icon (two vertical bars)
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export declare const PauseIcon: ({ size }: {
7
+ size?: number | undefined;
8
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Play icon (triangle) used for resume action
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export declare const PlayIcon: ({ size }: {
7
+ size?: number | undefined;
8
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -1,8 +1,7 @@
1
1
  import type { PartialDeep, Promisable, ReadonlyDeep, WritableDeep } from 'type-fest';
2
2
  import type { PipelineJson } from '../../pipeline/PipelineJson/PipelineJson';
3
3
  import type { TaskJson } from '../../pipeline/PipelineJson/TaskJson';
4
- import type { Parameters } from '../../types/typeAliases';
5
- import type { string_parameter_name } from '../../types/typeAliases';
4
+ import type { Parameters, string_parameter_name } from '../../types/typeAliases';
6
5
  import type { TODO_string } from '../../utils/organization/TODO_string';
7
6
  import type { ExecutionReportJson } from '../execution-report/ExecutionReportJson';
8
7
  import type { PipelineExecutorResult } from '../PipelineExecutorResult';
@@ -1,9 +1,7 @@
1
1
  import type { ReadonlyDeep } from 'type-fest';
2
2
  import type { PipelineJson } from '../../pipeline/PipelineJson/PipelineJson';
3
3
  import type { TaskJson } from '../../pipeline/PipelineJson/TaskJson';
4
- import type { Parameters } from '../../types/typeAliases';
5
- import type { string_markdown } from '../../types/typeAliases';
6
- import type { string_parameter_value } from '../../types/typeAliases';
4
+ import type { Parameters, string_markdown, string_parameter_value } from '../../types/typeAliases';
7
5
  import type { ExecutionTools } from '../ExecutionTools';
8
6
  /**
9
7
  * Options for retrieving relevant knowledge for a specific task during pipeline execution.
@@ -1,4 +1,4 @@
1
- import { AbstractFormatError } from "../../errors/AbstractFormatError";
1
+ import { AbstractFormatError } from '../../errors/AbstractFormatError';
2
2
  /**
3
3
  * This error indicates problem with parsing of CSV
4
4
  *
@@ -16,4 +16,4 @@ import type { LlmToolsConfiguration } from './LlmToolsConfiguration';
16
16
  export declare function $provideLlmToolsConfigurationFromEnv(): Promise<LlmToolsConfiguration>;
17
17
  /**
18
18
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
19
- */
19
+ */
@@ -24,4 +24,4 @@ export {};
24
24
  * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
25
25
  * TODO: This should be maybe not under `_common` but under `utils-internal` / `utils/internal`
26
26
  * TODO: [®] DRY Register logi
27
- */
27
+ */
@@ -1,7 +1,6 @@
1
1
  import { Promisable } from 'type-fest';
2
2
  import type { Identification } from '../../../remote-server/socket-types/_subtypes/Identification';
3
- import type { string_app_id } from '../../../types/typeAliases';
4
- import type { string_url } from '../../../types/typeAliases';
3
+ import type { string_app_id, string_url } from '../../../types/typeAliases';
5
4
  import type { really_any } from '../../../utils/organization/really_any';
6
5
  import type { CacheLlmToolsOptions } from '../utils/cache/CacheLlmToolsOptions';
7
6
  import type { LlmExecutionToolsWithTotalUsage } from '../utils/count-total-usage/LlmExecutionToolsWithTotalUsage';