@promptbook/browser 0.103.0-56 → 0.103.0-67

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 (29) hide show
  1. package/esm/index.es.js +65 -10
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/src/_packages/components.index.d.ts +2 -2
  4. package/esm/typings/src/_packages/types.index.d.ts +6 -0
  5. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +2 -1
  6. package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +1 -1
  7. package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +3 -0
  8. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +6 -0
  9. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentIntegration.d.ts +52 -0
  10. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentSeamlessIntegration.d.ts +14 -0
  11. package/esm/typings/src/book-components/icons/SendIcon.d.ts +3 -0
  12. package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +4 -0
  13. package/esm/typings/src/commitments/CLOSED/CLOSED.test.d.ts +4 -0
  14. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +4 -0
  15. package/esm/typings/src/commitments/_base/BaseCommitmentDefinition.d.ts +6 -0
  16. package/esm/typings/src/llm-providers/agent/Agent.d.ts +3 -1
  17. package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
  18. package/esm/typings/src/types/typeAliases.d.ts +6 -0
  19. package/esm/typings/src/utils/color/Color.d.ts +1 -1
  20. package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +6 -0
  21. package/esm/typings/src/utils/random/CzechNamePool.d.ts +7 -0
  22. package/esm/typings/src/utils/random/EnglishNamePool.d.ts +7 -0
  23. package/esm/typings/src/utils/random/NamePool.d.ts +17 -0
  24. package/esm/typings/src/utils/random/getNamePool.d.ts +10 -0
  25. package/esm/typings/src/version.d.ts +1 -1
  26. package/package.json +3 -3
  27. package/umd/index.umd.js +65 -10
  28. package/umd/index.umd.js.map +1 -1
  29. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgent.d.ts +0 -29
@@ -3,6 +3,8 @@ import type { Promisable } from 'type-fest';
3
3
  import type { string_chat_format_name } from '../save/_common/string_chat_format_name';
4
4
  import type { ChatMessage } from '../types/ChatMessage';
5
5
  import type { ChatParticipant } from '../types/ChatParticipant';
6
+ import { string_color } from '../../../types/typeAliases';
7
+ import { Color } from '../../../_packages/color.index';
6
8
  /**
7
9
  * @public exported from `@promptbook/components`
8
10
  */
@@ -87,6 +89,10 @@ export type ChatProps = {
87
89
  * instead of its default position within the chat.
88
90
  */
89
91
  readonly actionsContainer?: HTMLElement | null;
92
+ /**
93
+ * Color of the action buttons (send, reset, voice, etc.)
94
+ */
95
+ readonly buttonColor?: string_color | Color;
90
96
  /**
91
97
  * Optional CSS class name which will be added to root <div/> element
92
98
  */
@@ -0,0 +1,52 @@
1
+ import { CSSProperties } from 'react';
2
+ import type { AgentBasicInformation } from '../../book-2.0/agent-source/AgentBasicInformation';
3
+ import { string_css_class } from '../../types/typeAliases';
4
+ /**
5
+ * @private props of PromptbookAgentIntegration component
6
+ */
7
+ export type PromptbookAgentIntegrationProps = {
8
+ /**
9
+ * URL of the agent to connect to
10
+ *
11
+ * @example "http://s6.ptbk.io/benjamin-white"
12
+ */
13
+ readonly agentUrl: string;
14
+ /**
15
+ * Form of the agent integration
16
+ *
17
+ * @default `seamless`
18
+ *
19
+ * - `seamless` Default, current behavior
20
+ * - `book` Show the Agent as a book in BookEditor
21
+ * - `chat` Show the Agent as a chat which is not floating but as AgentChat component
22
+ * - `profile` Show the Agent as a profile using
23
+ */
24
+ readonly formfactor?: 'seamless' | 'book' | 'chat' | 'profile';
25
+ /**
26
+ * Optional metadata to show before the agent is connected
27
+ * Or to override the agent metadata if the agent does not provide it
28
+ */
29
+ readonly meta?: Partial<AgentBasicInformation['meta']>;
30
+ /**
31
+ * Callback when the window is opened or closed
32
+ */
33
+ onOpenChange?(isOpen: boolean): void;
34
+ /**
35
+ * Optional CSS class name which will be added to root element
36
+ */
37
+ readonly className?: string_css_class;
38
+ /**
39
+ * Optional CSS style which will be added to root element
40
+ */
41
+ readonly style?: CSSProperties;
42
+ };
43
+ /**
44
+ * Renders a floating agent button that opens a chat window with the remote agent.
45
+ *
46
+ * @public exported from `@promptbook/components`
47
+ */
48
+ export declare function PromptbookAgentIntegration(props: PromptbookAgentIntegrationProps): import("react/jsx-runtime").JSX.Element | undefined;
49
+ /**
50
+ * TODO: !!! Load the full branding
51
+ * TODO: !!! <promptbook-agent> element
52
+ */
@@ -0,0 +1,14 @@
1
+ import { PromptbookAgentIntegrationProps } from './PromptbookAgentIntegration';
2
+ type PromptbookAgentSeamlessIntegrationProps = Omit<PromptbookAgentIntegrationProps, 'formfactor'>;
3
+ /**
4
+ * Renders a floating agent button that opens a chat window with the remote agent.
5
+ *
6
+ * @private component of PromptbookAgentIntegration
7
+ */
8
+ export declare function PromptbookAgentSeamlessIntegration(props: PromptbookAgentSeamlessIntegrationProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ /**
11
+ * TODO: !!!! Use iframe here instead of implementing the chat directly, allow to switch between seamless and iframe mode via `isIframeUsed` prop
12
+ * TODO: !!! Load the full branding
13
+ * TODO: !!! <promptbook-agent> element
14
+ */
@@ -6,3 +6,6 @@
6
6
  export declare const SendIcon: ({ size }: {
7
7
  size: number;
8
8
  }) => import("react/jsx-runtime").JSX.Element;
9
+ /**
10
+ * TODO: !!!! Search ACRY for "currentColor", it probably does not work and make no sense to have it in project
11
+ */
@@ -16,6 +16,10 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
16
16
  */
17
17
  export declare class ClosedCommitmentDefinition extends BaseCommitmentDefinition<'CLOSED'> {
18
18
  constructor();
19
+ /**
20
+ * The `CLOSED` commitment is standalone.
21
+ */
22
+ get requiresContent(): boolean;
19
23
  /**
20
24
  * Short one-line description of CLOSED.
21
25
  */
@@ -0,0 +1,4 @@
1
+ export {};
2
+ /**
3
+ * TODO: !!!! Must be last commitment to take effect
4
+ */
@@ -19,6 +19,10 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
19
19
  */
20
20
  export declare class UseBrowserCommitmentDefinition extends BaseCommitmentDefinition<'USE BROWSER'> {
21
21
  constructor();
22
+ /**
23
+ * The `USE BROWSER` commitment is standalone.
24
+ */
25
+ get requiresContent(): boolean;
22
26
  /**
23
27
  * Short one-line description of USE BROWSER.
24
28
  */
@@ -15,6 +15,12 @@ export declare abstract class BaseCommitmentDefinition<TBookCommitment extends s
15
15
  * Must be implemented by each concrete commitment.
16
16
  */
17
17
  abstract get description(): string;
18
+ /**
19
+ * Whether this commitment requires content.
20
+ * If true, regex will match only if there is content after the commitment keyword.
21
+ * If false, regex will match even if there is no content.
22
+ */
23
+ get requiresContent(): boolean;
18
24
  /**
19
25
  * Icon for this commitment.
20
26
  * It should be a single emoji.
@@ -4,7 +4,7 @@ import type { string_book } from '../../book-2.0/agent-source/string_book';
4
4
  import type { LlmExecutionTools } from '../../execution/LlmExecutionTools';
5
5
  import type { ChatPromptResult } from '../../execution/PromptResult';
6
6
  import type { Prompt } from '../../types/Prompt';
7
- import type { string_agent_hash, string_agent_name, string_agent_url, string_url_image } from '../../types/typeAliases';
7
+ import type { string_agent_hash, string_agent_name, string_agent_url, string_color, string_fonts, string_url_image } from '../../types/typeAliases';
8
8
  import { AgentLlmExecutionTools } from './AgentLlmExecutionTools';
9
9
  import type { AgentOptions } from './AgentOptions';
10
10
  /**
@@ -48,6 +48,8 @@ export declare class Agent extends AgentLlmExecutionTools implements LlmExecutio
48
48
  fullname?: string;
49
49
  image?: string_url_image;
50
50
  link?: string;
51
+ font?: string_fonts;
52
+ color?: string_color;
51
53
  title?: string;
52
54
  description?: string;
53
55
  [key: string]: string | undefined;
@@ -1,4 +1,4 @@
1
- import type { PipelineCollection } from '../../collection/pipeline-collection/pipeline-collection/PipelineCollection';
1
+ import type { PipelineCollection } from '../../collection/pipeline-collection/PipelineCollection';
2
2
  /**
3
3
  * Get pipeline collection for Untitled Promptbook project
4
4
  *
@@ -330,6 +330,12 @@ export type string_css_class = string;
330
330
  * For example `border`
331
331
  */
332
332
  export type string_css_property = string;
333
+ /**
334
+ * Semantic helper
335
+ *
336
+ * For example `"Arial, sans-serif"`
337
+ */
338
+ export type string_fonts = string;
333
339
  /**
334
340
  * Semantic helper
335
341
  *
@@ -23,7 +23,7 @@ export declare class Color {
23
23
  * @param color
24
24
  * @returns Color object
25
25
  */
26
- static from(color: string_color | Color): WithTake<Color>;
26
+ static from(color: string_color | Color, _isSingleValue?: boolean): WithTake<Color>;
27
27
  /**
28
28
  * Creates a new Color instance from miscellaneous formats
29
29
  * It just does not throw error when it fails, it returns PROMPTBOOK_COLOR instead
@@ -9,6 +9,12 @@ type GenerateBookBoilerplateOptions = PartialDeep<Omit<AgentBasicInformation, 'p
9
9
  * @default 'Adam'
10
10
  */
11
11
  parentAgentName?: string_agent_name_in_book;
12
+ /**
13
+ * Name pool to use for generating agent name
14
+ *
15
+ * @default 'ENGLISH'
16
+ */
17
+ namePool?: string;
12
18
  };
13
19
  /**
14
20
  * Generates boilerplate for a new agent book
@@ -0,0 +1,7 @@
1
+ import type { NamePool } from './NamePool';
2
+ /**
3
+ * Name pool for Czech names
4
+ *
5
+ * @private [🍇] Maybe expose via some package
6
+ */
7
+ export declare const CzechNamePool: NamePool;
@@ -0,0 +1,7 @@
1
+ import type { NamePool } from './NamePool';
2
+ /**
3
+ * Name pool for English names
4
+ *
5
+ * @private [🍇] Maybe expose via some package
6
+ */
7
+ export declare const EnglishNamePool: NamePool;
@@ -0,0 +1,17 @@
1
+ import type { string_color, string_person_fullname } from '../../types/typeAliases';
2
+ /**
3
+ * Result of generating a name
4
+ */
5
+ export type GenerateNameResult = {
6
+ fullname: string_person_fullname;
7
+ color: string_color;
8
+ };
9
+ /**
10
+ * Interface for a name pool
11
+ */
12
+ export type NamePool = {
13
+ /**
14
+ * Generates a random name
15
+ */
16
+ generateName(): GenerateNameResult;
17
+ };
@@ -0,0 +1,10 @@
1
+ import type { NamePool } from './NamePool';
2
+ /**
3
+ * Gets the name pool based on the language code
4
+ *
5
+ * @param language - The language code (e.g. 'ENGLISH', 'CZECH')
6
+ * @returns The name pool
7
+ *
8
+ * @private [🍇] Maybe expose via some package
9
+ */
10
+ export declare function getNamePool(language: string): NamePool;
@@ -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.103.0-55`).
18
+ * It follows semantic versioning (e.g., `0.103.0-66`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@promptbook/browser",
3
- "version": "0.103.0-56",
3
+ "version": "0.103.0-67",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "https://github.com/webgptorg/promptbook"
9
+ "url": "git+https://github.com/webgptorg/promptbook.git"
10
10
  },
11
11
  "author": "Pavol Hejný <pavol@ptbk.io> (https://www.pavolhejny.com/)",
12
12
  "contributors": [
@@ -94,7 +94,7 @@
94
94
  "module": "./esm/index.es.js",
95
95
  "typings": "./esm/typings/src/_packages/browser.index.d.ts",
96
96
  "peerDependencies": {
97
- "@promptbook/core": "0.103.0-56"
97
+ "@promptbook/core": "0.103.0-67"
98
98
  },
99
99
  "dependencies": {
100
100
  "crypto": "1.0.1",
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.103.0-56';
26
+ const PROMPTBOOK_ENGINE_VERSION = '0.103.0-67';
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
@@ -415,15 +415,33 @@
415
415
  * @param color
416
416
  * @returns Color object
417
417
  */
418
- static from(color) {
419
- if (color instanceof Color) {
418
+ static from(color, _isSingleValue = false) {
419
+ if (color === '') {
420
+ throw new Error(`Can not create color from empty string`);
421
+ }
422
+ else if (color instanceof Color) {
420
423
  return take(color);
421
424
  }
422
425
  else if (Color.isColor(color)) {
423
426
  return take(color);
424
427
  }
425
428
  else if (typeof color === 'string') {
426
- return Color.fromString(color);
429
+ try {
430
+ return Color.fromString(color);
431
+ }
432
+ catch (error) {
433
+ // <- Note: Can not use `assertsError(error)` here because it causes circular dependency
434
+ if (_isSingleValue) {
435
+ throw error;
436
+ }
437
+ const parts = color.split(/[\s+,;|]/);
438
+ if (parts.length > 0) {
439
+ return Color.from(parts[0].trim(), true);
440
+ }
441
+ else {
442
+ throw new Error(`Can not create color from given string "${color}"`);
443
+ }
444
+ }
427
445
  }
428
446
  else {
429
447
  console.error({ color });
@@ -2708,15 +2726,19 @@
2708
2726
  *
2709
2727
  * @private - TODO: [🧠] Maybe should be public?
2710
2728
  */
2711
- function createCommitmentRegex(commitment, aliases = []) {
2729
+ function createCommitmentRegex(commitment, aliases = [], requiresContent = true) {
2712
2730
  const allCommitments = [commitment, ...aliases];
2713
2731
  const patterns = allCommitments.map((c) => {
2714
2732
  const escapedCommitment = c.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
2715
2733
  return escapedCommitment.split(/\s+/).join('\\s+');
2716
2734
  });
2717
2735
  const keywordPattern = patterns.join('|');
2718
- const regex = new RegExp(`^\\s*(?<type>${keywordPattern})\\b\\s+(?<contents>.+)$`, 'gim');
2719
- return regex;
2736
+ if (requiresContent) {
2737
+ return new RegExp(`^\\s*(?<type>${keywordPattern})\\b\\s+(?<contents>.+)$`, 'gim');
2738
+ }
2739
+ else {
2740
+ return new RegExp(`^\\s*(?<type>${keywordPattern})\\b(?:\\s+(?<contents>.+))?$`, 'gim');
2741
+ }
2720
2742
  }
2721
2743
  /**
2722
2744
  * Generates a regex pattern to match a specific commitment type
@@ -2749,12 +2771,20 @@
2749
2771
  this.type = type;
2750
2772
  this.aliases = aliases;
2751
2773
  }
2774
+ /**
2775
+ * Whether this commitment requires content.
2776
+ * If true, regex will match only if there is content after the commitment keyword.
2777
+ * If false, regex will match even if there is no content.
2778
+ */
2779
+ get requiresContent() {
2780
+ return true;
2781
+ }
2752
2782
  /**
2753
2783
  * Creates a regex pattern to match this commitment in agent source
2754
2784
  * Uses the existing createCommitmentRegex function as internal helper
2755
2785
  */
2756
2786
  createRegex() {
2757
- return createCommitmentRegex(this.type, this.aliases);
2787
+ return createCommitmentRegex(this.type, this.aliases, this.requiresContent);
2758
2788
  }
2759
2789
  /**
2760
2790
  * Creates a regex pattern to match just the commitment type
@@ -2906,6 +2936,12 @@
2906
2936
  constructor() {
2907
2937
  super('CLOSED');
2908
2938
  }
2939
+ /**
2940
+ * The `CLOSED` commitment is standalone.
2941
+ */
2942
+ get requiresContent() {
2943
+ return false;
2944
+ }
2909
2945
  /**
2910
2946
  * Short one-line description of CLOSED.
2911
2947
  */
@@ -5585,6 +5621,12 @@
5585
5621
  constructor() {
5586
5622
  super('USE BROWSER', ['BROWSER']);
5587
5623
  }
5624
+ /**
5625
+ * The `USE BROWSER` commitment is standalone.
5626
+ */
5627
+ get requiresContent() {
5628
+ return false;
5629
+ }
5588
5630
  /**
5589
5631
  * Short one-line description of USE BROWSER.
5590
5632
  */
@@ -6192,11 +6234,11 @@
6192
6234
  continue;
6193
6235
  }
6194
6236
  if (commitment.type === 'META COLOR') {
6195
- meta.color = spaceTrim__default["default"](commitment.content);
6237
+ meta.color = normalizeSeparator(commitment.content);
6196
6238
  continue;
6197
6239
  }
6198
6240
  if (commitment.type === 'META FONT') {
6199
- meta.font = spaceTrim__default["default"](commitment.content);
6241
+ meta.font = normalizeSeparator(commitment.content);
6200
6242
  continue;
6201
6243
  }
6202
6244
  if (commitment.type !== 'META') {
@@ -6232,6 +6274,19 @@
6232
6274
  parameters,
6233
6275
  };
6234
6276
  }
6277
+ /**
6278
+ * Normalizes the separator in the content
6279
+ *
6280
+ * @param content - The content to normalize
6281
+ * @returns The content with normalized separators
6282
+ */
6283
+ function normalizeSeparator(content) {
6284
+ const trimmed = spaceTrim__default["default"](content);
6285
+ if (trimmed.includes(',')) {
6286
+ return trimmed;
6287
+ }
6288
+ return trimmed.split(/\s+/).join(', ');
6289
+ }
6235
6290
  /**
6236
6291
  * TODO: [🕛] Unite `AgentBasicInformation`, `ChatParticipant`, `LlmExecutionTools` + `LlmToolsMetadata`
6237
6292
  */