@promptbook/utils 0.103.0-47 → 0.103.0-49

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 (55) hide show
  1. package/esm/index.es.js +46 -5
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/servers.d.ts +1 -0
  4. package/esm/typings/src/_packages/core.index.d.ts +6 -0
  5. package/esm/typings/src/_packages/types.index.d.ts +4 -0
  6. package/esm/typings/src/_packages/utils.index.d.ts +2 -0
  7. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +17 -3
  8. package/esm/typings/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +2 -1
  9. package/esm/typings/src/book-2.0/agent-source/computeAgentHash.d.ts +8 -0
  10. package/esm/typings/src/book-2.0/agent-source/computeAgentHash.test.d.ts +1 -0
  11. package/esm/typings/src/book-2.0/agent-source/createDefaultAgentName.d.ts +8 -0
  12. package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.d.ts +9 -0
  13. package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.test.d.ts +1 -0
  14. package/esm/typings/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +1 -1
  15. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +14 -8
  16. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabaseOptions.d.ts +10 -0
  17. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +57 -32
  18. package/esm/typings/src/commitments/MESSAGE/InitialMessageCommitmentDefinition.d.ts +28 -0
  19. package/esm/typings/src/commitments/index.d.ts +2 -1
  20. package/esm/typings/src/config.d.ts +1 -0
  21. package/esm/typings/src/errors/DatabaseError.d.ts +2 -2
  22. package/esm/typings/src/errors/WrappedError.d.ts +2 -2
  23. package/esm/typings/src/execution/ExecutionTask.d.ts +2 -2
  24. package/esm/typings/src/execution/LlmExecutionTools.d.ts +6 -1
  25. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +2 -2
  26. package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
  27. package/esm/typings/src/llm-providers/agent/Agent.d.ts +17 -4
  28. package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +10 -1
  29. package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +6 -2
  30. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +30 -4
  31. package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
  32. package/esm/typings/src/remote-server/startAgentServer.d.ts +2 -2
  33. package/esm/typings/src/remote-server/startRemoteServer.d.ts +1 -2
  34. package/esm/typings/src/transpilers/openai-sdk/register.d.ts +1 -1
  35. package/esm/typings/src/types/typeAliases.d.ts +6 -0
  36. package/esm/typings/src/utils/color/Color.d.ts +7 -0
  37. package/esm/typings/src/utils/color/Color.test.d.ts +1 -0
  38. package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -2
  39. package/esm/typings/src/utils/misc/computeHash.d.ts +11 -0
  40. package/esm/typings/src/utils/misc/computeHash.test.d.ts +1 -0
  41. package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
  42. package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
  43. package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
  44. package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
  45. package/esm/typings/src/utils/organization/$sideEffect.d.ts +2 -2
  46. package/esm/typings/src/utils/organization/$side_effect.d.ts +2 -2
  47. package/esm/typings/src/utils/organization/TODO_USE.d.ts +2 -2
  48. package/esm/typings/src/utils/organization/keepUnused.d.ts +2 -2
  49. package/esm/typings/src/utils/organization/preserve.d.ts +3 -3
  50. package/esm/typings/src/utils/organization/really_any.d.ts +7 -0
  51. package/esm/typings/src/utils/serialization/asSerializable.d.ts +2 -2
  52. package/esm/typings/src/version.d.ts +1 -1
  53. package/package.json +2 -1
  54. package/umd/index.umd.js +49 -8
  55. package/umd/index.umd.js.map +1 -1
@@ -1,7 +1,7 @@
1
1
  import type { LlmExecutionTools } from '../../execution/LlmExecutionTools';
2
2
  import type { ChatPromptResult } from '../../execution/PromptResult';
3
3
  import type { Prompt } from '../../types/Prompt';
4
- import type { string_markdown, string_markdown_text, string_title } from '../../types/typeAliases';
4
+ import type { string_markdown, string_markdown_text, string_title, string_token } from '../../types/typeAliases';
5
5
  import type { OpenAiAssistantExecutionToolsOptions } from './OpenAiAssistantExecutionToolsOptions';
6
6
  import { OpenAiExecutionTools } from './OpenAiExecutionTools';
7
7
  /**
@@ -9,16 +9,17 @@ import { OpenAiExecutionTools } from './OpenAiExecutionTools';
9
9
  *
10
10
  * This is useful for calling OpenAI API with a single assistant, for more wide usage use `OpenAiExecutionTools`.
11
11
  *
12
- * !!! Note: [🦖] There are several different things in Promptbook:
12
+ * Note: [🦖] There are several different things in Promptbook:
13
13
  * - `Agent` - which represents an AI Agent with its source, memories, actions, etc. Agent is a higher-level abstraction which is internally using:
14
14
  * - `LlmExecutionTools` - which wraps one or more LLM models and provides an interface to execute them
15
15
  * - `AgentLlmExecutionTools` - which is a specific implementation of `LlmExecutionTools` that wraps another LlmExecutionTools and applies agent-specific system prompts and requirements
16
16
  * - `OpenAiAssistantExecutionTools` - which is a specific implementation of `LlmExecutionTools` for OpenAI models with assistant capabilities, recommended for usage in `Agent` or `AgentLlmExecutionTools`
17
+ * - `RemoteAgent` - which is an `Agent` that connects to a Promptbook Agents Server
17
18
  *
18
19
  * @public exported from `@promptbook/openai`
19
20
  */
20
21
  export declare class OpenAiAssistantExecutionTools extends OpenAiExecutionTools implements LlmExecutionTools {
21
- private readonly assistantId;
22
+ readonly assistantId: string_token;
22
23
  private readonly isCreatingNewAssistantsAllowed;
23
24
  /**
24
25
  * Creates OpenAI Execution Tools.
@@ -32,7 +33,14 @@ export declare class OpenAiAssistantExecutionTools extends OpenAiExecutionTools
32
33
  * Calls OpenAI API to use a chat model.
33
34
  */
34
35
  callChatModel(prompt: Pick<Prompt, 'content' | 'parameters' | 'modelRequirements' | 'format'>): Promise<ChatPromptResult>;
35
- playground(): Promise<void>;
36
+ /**
37
+ * Calls OpenAI API to use a chat model with streaming.
38
+ */
39
+ callChatModelStream(prompt: Pick<Prompt, 'content' | 'parameters' | 'modelRequirements' | 'format'>, onProgress: (chunk: ChatPromptResult) => void): Promise<ChatPromptResult>;
40
+ /**
41
+ * Get an existing assistant tool wrapper
42
+ */
43
+ getAssistant(assistantId: string_token): OpenAiAssistantExecutionTools;
36
44
  createNewAssistant(options: {
37
45
  /**
38
46
  * Name of the new assistant
@@ -47,6 +55,24 @@ export declare class OpenAiAssistantExecutionTools extends OpenAiExecutionTools
47
55
  */
48
56
  readonly knowledgeSources?: ReadonlyArray<string>;
49
57
  }): Promise<OpenAiAssistantExecutionTools>;
58
+ updateAssistant(options: {
59
+ /**
60
+ * ID of the assistant to update
61
+ */
62
+ readonly assistantId: string_token;
63
+ /**
64
+ * Name of the assistant
65
+ */
66
+ readonly name?: string_title;
67
+ /**
68
+ * Instructions for the assistant
69
+ */
70
+ readonly instructions?: string_markdown;
71
+ /**
72
+ * Optional list of knowledge source links (URLs or file paths) to attach to the assistant via vector store
73
+ */
74
+ readonly knowledgeSources?: ReadonlyArray<string>;
75
+ }): Promise<OpenAiAssistantExecutionTools>;
50
76
  /**
51
77
  * Discriminant for type guards
52
78
  */
@@ -0,0 +1,4 @@
1
+ export {};
2
+ /**
3
+ * TODO: [🧠] Maybe do this test for all model providers + boilerplate
4
+ */
@@ -9,7 +9,7 @@ type AgentsServerOptions = {
9
9
  port: number_port;
10
10
  };
11
11
  /**
12
- * !!!!!
12
+ * [🐱‍🚀]
13
13
  * Remote server is a proxy server that uses its execution tools internally and exposes the executor interface externally.
14
14
  *
15
15
  * You can simply use `RemoteExecutionTools` on client-side javascript and connect to your remote server.
@@ -17,7 +17,7 @@ type AgentsServerOptions = {
17
17
  *
18
18
  * @see https://github.com/webgptorg/promptbook#remote-server
19
19
  * @public exported from `@promptbook/remote-server`
20
- * <- TODO: !!!! Maybe change to `@promptbook/agent-server`
20
+ * <- TODO: [🐱‍🚀] Change to `@promptbook/agent-server`
21
21
  */
22
22
  export declare function startAgentServer(options: AgentsServerOptions): Promise<TODO_any>;
23
23
  export {};
@@ -11,8 +11,7 @@ import type { RemoteServerOptions } from './types/RemoteServerOptions';
11
11
  */
12
12
  export declare function startRemoteServer<TCustomOptions = undefined>(options: RemoteServerOptions<TCustomOptions>): RemoteServer;
13
13
  /**
14
- * TODO !!!! Add agent
15
- * TODO: !!!! Allow to chat with agents directly via remote server
14
+
16
15
  * TODO: [🕋] Use here `aboutPromptbookInformation`
17
16
  * TODO: [🌡] Add CORS and security - probably via `helmet`
18
17
  * TODO: Split this file into multiple functions - handler for each request
@@ -7,7 +7,7 @@ import type { Registration } from '../../utils/misc/$Register';
7
7
  * @public exported from `@promptbook/wizard`
8
8
  * @public exported from `@promptbook/cli`
9
9
  *
10
- * TODO: !!!! Which package should export this?
10
+ * TODO: [🧠] Which package should export this?
11
11
  */
12
12
  export declare const _OpenAiSdkTranspilerRegistration: Registration;
13
13
  /**
@@ -148,6 +148,12 @@ export type string_agent_name = string;
148
148
  * For example `"My AI Assistant"`
149
149
  */
150
150
  export type string_agent_name_in_book = string;
151
+ /**
152
+ * Semantic helper
153
+ *
154
+ * For example `"b126926439c5fcb83609888a11283723c1ef137c0ad599a77a1be81812bd221d"`
155
+ */
156
+ export type string_agent_hash = string_sha256;
151
157
  /**
152
158
  * Unstructured description of the persona
153
159
  *
@@ -59,6 +59,13 @@ export declare class Color {
59
59
  * @returns Color object
60
60
  */
61
61
  private static fromHex3;
62
+ /**
63
+ * Creates a new Color instance from color in hex format with 4 digits (with alpha channel)
64
+ *
65
+ * @param color in hex for example `09df`
66
+ * @returns Color object
67
+ */
68
+ private static fromHex4;
62
69
  /**
63
70
  * Creates a new Color instance from color in hex format with 6 color digits (without alpha channel)
64
71
  *
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import type { really_any } from '../organization/really_any';
1
+ import type { chococake } from '../organization/really_any';
2
2
  /**
3
3
  * Safely retrieves the global scope object (window in browser, global in Node.js)
4
4
  * regardless of the JavaScript environment in which the code is running
@@ -7,4 +7,4 @@ import type { really_any } from '../organization/really_any';
7
7
  *
8
8
  * @private internal function of `$Register`
9
9
  */
10
- export declare function $getGlobalScope(): really_any;
10
+ export declare function $getGlobalScope(): chococake;
@@ -0,0 +1,11 @@
1
+ import { string_sha256 } from '../../types/typeAliases';
2
+ import { really_unknown } from '../organization/really_unknown';
3
+ /**
4
+ * Computes SHA-256 hash of the given object
5
+ *
6
+ * @public exported from `@promptbook/utils`
7
+ */
8
+ export declare function computeHash(value: really_unknown): string_sha256;
9
+ /**
10
+ * TODO: [🥬][🥬] Use this ACRY
11
+ */
@@ -0,0 +1 @@
1
+ export {};
@@ -9,6 +9,8 @@ export type string_kebab_case = string;
9
9
  /**
10
10
  * Converts a given text to kebab-case format.
11
11
  *
12
+ * Note: [🔂] This function is idempotent.
13
+ *
12
14
  * @param text The text to be converted.
13
15
  * @returns The kebab-case formatted string.
14
16
  * @example 'hello-world'
@@ -7,6 +7,9 @@
7
7
  */
8
8
  export type string_PascalCase = string;
9
9
  /**
10
+ * Normalizes a given text to PascalCase format.
11
+ *
12
+ * Note: [🔂] This function is idempotent.
10
13
  *
11
14
  * @param text @public exported from `@promptbook/utils`
12
15
  * @returns
@@ -9,6 +9,8 @@ export type string_camelCase = string;
9
9
  /**
10
10
  * Normalizes a given text to camelCase format.
11
11
  *
12
+ * Note: [🔂] This function is idempotent.
13
+ *
12
14
  * @param text The text to be normalized.
13
15
  * @param _isFirstLetterCapital Whether the first letter should be capitalized.
14
16
  * @returns The camelCase formatted string.
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Converts a title string into a normalized name.
3
3
  *
4
+ * Note: [🔂] This function is idempotent.
5
+ *
4
6
  * @param value The title string to be converted to a name.
5
7
  * @returns A normalized name derived from the input title.
6
8
  * @example 'Hello World!' -> 'hello-world'
@@ -1,4 +1,4 @@
1
- import type { really_any } from './really_any';
1
+ import type { chococake } from './really_any';
2
2
  /**
3
3
  * Just says that the variable is not used directlys but should be kept because the existence of the variable is important
4
4
  *
@@ -6,4 +6,4 @@ import type { really_any } from './really_any';
6
6
  * @returns void
7
7
  * @private within the repository
8
8
  */
9
- export declare function $sideEffect(...sideEffectSubjects: ReadonlyArray<really_any>): void;
9
+ export declare function $sideEffect(...sideEffectSubjects: ReadonlyArray<chococake>): void;
@@ -1,7 +1,7 @@
1
- import type { really_any } from './really_any';
1
+ import type { chococake } from './really_any';
2
2
  /**
3
3
  * Organizational helper to mark a function that produces side effects
4
4
  *
5
5
  * @private within the repository
6
6
  */
7
- export type $side_effect = void | really_any;
7
+ export type $side_effect = void | chococake;
@@ -1,4 +1,4 @@
1
- import type { really_any } from './really_any';
1
+ import type { chococake } from './really_any';
2
2
  /**
3
3
  * Just marks a place of place where should be something implemented
4
4
  * No side effects.
@@ -9,4 +9,4 @@ import type { really_any } from './really_any';
9
9
  * @returns void
10
10
  * @private within the repository
11
11
  */
12
- export declare function TODO_USE(...value: ReadonlyArray<really_any>): void;
12
+ export declare function TODO_USE(...value: ReadonlyArray<chococake>): void;
@@ -1,4 +1,4 @@
1
- import type { really_any } from './really_any';
1
+ import type { chococake } from './really_any';
2
2
  /**
3
3
  * Just says that the variable is not used but should be kept
4
4
  * No side effects.
@@ -13,4 +13,4 @@ import type { really_any } from './really_any';
13
13
  * @returns void
14
14
  * @private within the repository
15
15
  */
16
- export declare function keepUnused<TTypeToKeep1 = really_any, TTypeToKeep2 = really_any, TTypeToKeep3 = really_any>(...valuesToKeep: ReadonlyArray<really_any>): void;
16
+ export declare function keepUnused<TTypeToKeep1 = chococake, TTypeToKeep2 = chococake, TTypeToKeep3 = chococake>(...valuesToKeep: ReadonlyArray<chococake>): void;
@@ -1,4 +1,4 @@
1
- import type { really_any } from './really_any';
1
+ import type { chococake } from './really_any';
2
2
  /**
3
3
  * Does nothing, but preserves the function in the bundle
4
4
  * Compiler is tricked into thinking the function is used
@@ -7,7 +7,7 @@ import type { really_any } from './really_any';
7
7
  * @returns nothing
8
8
  * @private within the repository
9
9
  */
10
- export declare function $preserve(...value: Array<really_any>): void;
10
+ export declare function $preserve(...value: Array<chococake>): void;
11
11
  /**
12
12
  * DO NOT USE THIS FUNCTION
13
13
  * Only purpose of this function is to trick the compiler and javascript engine
@@ -15,7 +15,7 @@ export declare function $preserve(...value: Array<really_any>): void;
15
15
  *
16
16
  * @private internal for `preserve`
17
17
  */
18
- export declare function __DO_NOT_USE_getPreserved(): Array<really_any>;
18
+ export declare function __DO_NOT_USE_getPreserved(): Array<chococake>;
19
19
  /**
20
20
  * Note: [💞] Ignore a discrepancy between file name and entity name
21
21
  */
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Organizational helper to tell to use intentionally `any`
3
+ *
4
+ * @alias really_any
5
+ * @private within the repository
6
+ */
7
+ export type chococake = really_any;
1
8
  /**
2
9
  * Organizational helper to mark a place where to really use `any`
3
10
  *
@@ -1,4 +1,4 @@
1
- import type { really_any } from '../organization/really_any';
1
+ import type { chococake } from '../organization/really_any';
2
2
  /**
3
3
  * Function `asSerializable` will convert values which are not serializable to serializable values
4
4
  * It walks deeply through the object and converts all values
@@ -12,4 +12,4 @@ import type { really_any } from '../organization/really_any';
12
12
  *
13
13
  * @private Internal helper function
14
14
  */
15
- export declare function asSerializable(value: really_any): really_any;
15
+ export declare function asSerializable(value: chococake): chococake;
@@ -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-46`).
18
+ * It follows semantic versioning (e.g., `0.103.0-48`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/utils",
3
- "version": "0.103.0-47",
3
+ "version": "0.103.0-49",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -97,6 +97,7 @@
97
97
  "typings": "./esm/typings/src/_packages/utils.index.d.ts",
98
98
  "dependencies": {
99
99
  "crypto": "1.0.1",
100
+ "crypto-js": "4.2.0",
100
101
  "spacetrim": "0.11.60",
101
102
  "type-fest": "4.5.0"
102
103
  }
package/umd/index.umd.js CHANGED
@@ -1,12 +1,13 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('spacetrim'), require('path'), require('crypto')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'spacetrim', 'path', 'crypto'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-utils"] = {}, global.spaceTrim$1, global.path, global.crypto));
5
- })(this, (function (exports, spaceTrim$1, path, crypto) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('spacetrim'), require('path'), require('crypto'), require('crypto-js'), require('crypto-js/enc-hex')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'spacetrim', 'path', 'crypto', 'crypto-js', 'crypto-js/enc-hex'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-utils"] = {}, global.spaceTrim$1, global.path, global.crypto, global.cryptoJs, global.hexEncoder));
5
+ })(this, (function (exports, spaceTrim$1, path, crypto, cryptoJs, hexEncoder) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
9
9
  var spaceTrim__default = /*#__PURE__*/_interopDefaultLegacy(spaceTrim$1);
10
+ var hexEncoder__default = /*#__PURE__*/_interopDefaultLegacy(hexEncoder);
10
11
 
11
12
  // ⚠️ WARNING: This code has been generated so that any manual changes will be overwritten
12
13
  /**
@@ -22,7 +23,7 @@
22
23
  * @generated
23
24
  * @see https://github.com/webgptorg/promptbook
24
25
  */
25
- const PROMPTBOOK_ENGINE_VERSION = '0.103.0-47';
26
+ const PROMPTBOOK_ENGINE_VERSION = '0.103.0-49';
26
27
  /**
27
28
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
28
29
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -358,6 +359,9 @@
358
359
  if (hex.length === 3) {
359
360
  return Color.fromHex3(hex);
360
361
  }
362
+ if (hex.length === 4) {
363
+ return Color.fromHex4(hex);
364
+ }
361
365
  if (hex.length === 6) {
362
366
  return Color.fromHex6(hex);
363
367
  }
@@ -378,6 +382,19 @@
378
382
  const b = parseInt(hex.substr(2, 1), 16) * 16;
379
383
  return take(new Color(r, g, b));
380
384
  }
385
+ /**
386
+ * Creates a new Color instance from color in hex format with 4 digits (with alpha channel)
387
+ *
388
+ * @param color in hex for example `09df`
389
+ * @returns Color object
390
+ */
391
+ static fromHex4(hex) {
392
+ const r = parseInt(hex.substr(0, 1), 16) * 16;
393
+ const g = parseInt(hex.substr(1, 1), 16) * 16;
394
+ const b = parseInt(hex.substr(2, 1), 16) * 16;
395
+ const a = parseInt(hex.substr(3, 1), 16) * 16;
396
+ return take(new Color(r, g, b, a));
397
+ }
381
398
  /**
382
399
  * Creates a new Color instance from color in hex format with 6 color digits (without alpha channel)
383
400
  *
@@ -568,7 +585,8 @@
568
585
  * @returns true if the value is a valid hex color string (e.g., `#009edd`, `#fff`, etc.)
569
586
  */
570
587
  static isHexColorString(value) {
571
- return typeof value === 'string' && /^#(?:[0-9a-fA-F]{3}){1,2}$/.test(value);
588
+ return (typeof value === 'string' &&
589
+ /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(value));
572
590
  }
573
591
  /**
574
592
  * Creates new Color object
@@ -875,6 +893,7 @@
875
893
  ({
876
894
  TITLE: Color.fromHex('#244EA8'),
877
895
  LINE: Color.fromHex('#eeeeee'),
896
+ SEPARATOR: Color.fromHex('#cccccc'),
878
897
  COMMITMENT: Color.fromHex('#DA0F78'),
879
898
  PARAMETER: Color.fromHex('#8e44ad'),
880
899
  });
@@ -1260,7 +1279,7 @@
1260
1279
  TODO: [🧠] Is there a better implementation?
1261
1280
  > const propertyNames = Object.getOwnPropertyNames(objectValue);
1262
1281
  > for (const propertyName of propertyNames) {
1263
- > const value = (objectValue as really_any)[propertyName];
1282
+ > const value = (objectValue as chococake)[propertyName];
1264
1283
  > if (value && typeof value === 'object') {
1265
1284
  > deepClone(value);
1266
1285
  > }
@@ -1351,6 +1370,8 @@
1351
1370
  /**
1352
1371
  * Normalizes a given text to camelCase format.
1353
1372
  *
1373
+ * Note: [🔂] This function is idempotent.
1374
+ *
1354
1375
  * @param text The text to be normalized.
1355
1376
  * @param _isFirstLetterCapital Whether the first letter should be capitalized.
1356
1377
  * @returns The camelCase formatted string.
@@ -1752,6 +1773,8 @@
1752
1773
  /**
1753
1774
  * Converts a given text to kebab-case format.
1754
1775
  *
1776
+ * Note: [🔂] This function is idempotent.
1777
+ *
1755
1778
  * @param text The text to be converted.
1756
1779
  * @returns The kebab-case formatted string.
1757
1780
  * @example 'hello-world'
@@ -1821,6 +1844,8 @@
1821
1844
  /**
1822
1845
  * Converts a title string into a normalized name.
1823
1846
  *
1847
+ * Note: [🔂] This function is idempotent.
1848
+ *
1824
1849
  * @param value The title string to be converted to a name.
1825
1850
  * @returns A normalized name derived from the input title.
1826
1851
  * @example 'Hello World!' -> 'hello-world'
@@ -2019,7 +2044,7 @@
2019
2044
  }
2020
2045
  }
2021
2046
  /**
2022
- * TODO: !!!! Explain that NotFoundError (!!! and other specific errors) has priority over DatabaseError in some contexts
2047
+ * TODO: [🐱‍🚀] Explain that NotFoundError ([🐱‍🚀] and other specific errors) has priority over DatabaseError in some contexts
2023
2048
  */
2024
2049
 
2025
2050
  /**
@@ -2955,6 +2980,18 @@
2955
2980
  return new Date().toISOString();
2956
2981
  }
2957
2982
 
2983
+ /**
2984
+ * Computes SHA-256 hash of the given object
2985
+ *
2986
+ * @public exported from `@promptbook/utils`
2987
+ */
2988
+ function computeHash(value) {
2989
+ return cryptoJs.SHA256(hexEncoder__default["default"].parse(spaceTrim__default["default"](valueToString(value)))).toString( /* hex */);
2990
+ }
2991
+ /**
2992
+ * TODO: [🥬][🥬] Use this ACRY
2993
+ */
2994
+
2958
2995
  /**
2959
2996
  * @public exported from `@promptbook/utils`
2960
2997
  */
@@ -3181,6 +3218,9 @@
3181
3218
  }
3182
3219
 
3183
3220
  /**
3221
+ * Normalizes a given text to PascalCase format.
3222
+ *
3223
+ * Note: [🔂] This function is idempotent.
3184
3224
  *
3185
3225
  * @param text @public exported from `@promptbook/utils`
3186
3226
  * @returns
@@ -3828,6 +3868,7 @@
3828
3868
  exports.capitalize = capitalize;
3829
3869
  exports.checkSerializableAsJson = checkSerializableAsJson;
3830
3870
  exports.clonePipeline = clonePipeline;
3871
+ exports.computeHash = computeHash;
3831
3872
  exports.countCharacters = countCharacters;
3832
3873
  exports.countLines = countLines;
3833
3874
  exports.countPages = countPages;