@promptbook/wizard 0.112.0-115 → 0.112.0-117

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.
@@ -12,6 +12,7 @@ import type { BookEditorUploadProgressCallback } from '../book-components/BookEd
12
12
  import type { BookEditorUploadOptions } from '../book-components/BookEditor/BookEditor';
13
13
  import type { BookEditorProps } from '../book-components/BookEditor/BookEditor';
14
14
  import { BookEditor } from '../book-components/BookEditor/BookEditor';
15
+ import { BookEditorForClient } from '../book-components/BookEditor/BookEditorForClient';
15
16
  import { AgentChat } from '../book-components/Chat/AgentChat/AgentChat';
16
17
  import type { AgentChatProps } from '../book-components/Chat/AgentChat/AgentChatProps';
17
18
  import { Chat } from '../book-components/Chat/Chat/Chat';
@@ -95,6 +96,7 @@ export type { BookEditorUploadProgressCallback };
95
96
  export type { BookEditorUploadOptions };
96
97
  export type { BookEditorProps };
97
98
  export { BookEditor };
99
+ export { BookEditorForClient };
98
100
  export { AgentChat };
99
101
  export type { AgentChatProps };
100
102
  export { Chat };
@@ -1,4 +1,9 @@
1
1
  import { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION } from '../version';
2
+ import { AGENT_BOOK_FILE_PATH } from '../book-3.0/agentFolderPaths';
3
+ import { AGENT_MESSAGES_DIRECTORY_PATH } from '../book-3.0/agentFolderPaths';
4
+ import { AGENT_QUEUED_MESSAGES_DIRECTORY_PATH } from '../book-3.0/agentFolderPaths';
5
+ import { AGENT_FINISHED_MESSAGES_DIRECTORY_PATH } from '../book-3.0/agentFolderPaths';
6
+ import { AGENT_FAILED_MESSAGES_DIRECTORY_PATH } from '../book-3.0/agentFolderPaths';
2
7
  import type { BookNodeAgentSource } from '../book-3.0/BookNodeAgentSource';
3
8
  import type { BookNodeAgentSourceOptions } from '../book-3.0/BookNodeAgentSource';
4
9
  import type { CliAgentHarness } from '../book-3.0/CliAgent';
@@ -22,6 +27,11 @@ import { FileCacheStorage } from '../storage/file-cache-storage/FileCacheStorage
22
27
  import { $execCommand } from '../utils/execCommand/$execCommand';
23
28
  import { $execCommands } from '../utils/execCommand/$execCommands';
24
29
  export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
30
+ export { AGENT_BOOK_FILE_PATH };
31
+ export { AGENT_MESSAGES_DIRECTORY_PATH };
32
+ export { AGENT_QUEUED_MESSAGES_DIRECTORY_PATH };
33
+ export { AGENT_FINISHED_MESSAGES_DIRECTORY_PATH };
34
+ export { AGENT_FAILED_MESSAGES_DIRECTORY_PATH };
25
35
  export type { BookNodeAgentSource };
26
36
  export type { BookNodeAgentSourceOptions };
27
37
  export type { CliAgentHarness };
@@ -31,19 +31,12 @@ export type CliAgentRunOptions = {
31
31
  *
32
32
  * @public exported from `@promptbook/node`
33
33
  */
34
- export type CliAgentOptions = BookNodeAgentSourceOptions & CliAgentRunOptions & {
35
- /**
36
- * Executable used for the wrapper command.
37
- *
38
- * @default ptbk
39
- */
40
- readonly command?: string;
41
- };
34
+ export type CliAgentOptions = BookNodeAgentSourceOptions & CliAgentRunOptions;
42
35
  /**
43
- * Lightweight JavaScript wrapper around `ptbk agent exec`.
36
+ * Lightweight JavaScript wrapper around the Promptbook agent execution pipeline.
44
37
  *
45
- * It uses the same CLI harnesses as Promptbook's agent command, making it the most faithful
46
- * way to run a local Book agent from Node.js when you want the CLI execution flow.
38
+ * It uses the same harnesses and execution path as `ptbk agent exec`, running the runner
39
+ * in-process instead of spawning a separate CLI process.
47
40
  *
48
41
  * @public exported from `@promptbook/node`
49
42
  */
@@ -52,15 +45,15 @@ export declare class CliAgent {
52
45
  private temporaryAgentPath;
53
46
  constructor(options: CliAgentOptions);
54
47
  /**
55
- * Runs one non-interactive agent turn through `ptbk agent exec`.
48
+ * Runs one non-interactive agent turn through the selected harness.
56
49
  *
57
50
  * @param message - User message sent to the agent.
58
- * @param options - Optional per-run CLI overrides.
59
- * @returns Raw stdout emitted by the CLI command.
51
+ * @param options - Optional per-run overrides.
52
+ * @returns Final agent answer.
60
53
  */
61
54
  run(message: string, options?: CliAgentRunOptions): Promise<string>;
62
55
  /**
63
- * Resolves the agent path passed to the CLI, materializing one temporary `.book` file when needed.
56
+ * Resolves the agent path passed to the runner, materializing one temporary `.book` file when needed.
64
57
  *
65
58
  * @private internal utility of `CliAgent`
66
59
  */
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Relative path to the local agent source used by the agent folder convention.
3
+ *
4
+ * @public exported from `@promptbook/node`
5
+ */
6
+ export declare const AGENT_BOOK_FILE_PATH = "agent.book";
7
+ /**
8
+ * Relative path to the message queue root used by the agent folder convention.
9
+ *
10
+ * @public exported from `@promptbook/node`
11
+ */
12
+ export declare const AGENT_MESSAGES_DIRECTORY_PATH = "messages";
13
+ /**
14
+ * Relative path to queued user messages consumed by the agent runner.
15
+ *
16
+ * @public exported from `@promptbook/node`
17
+ */
18
+ export declare const AGENT_QUEUED_MESSAGES_DIRECTORY_PATH: string;
19
+ /**
20
+ * Relative path to answered messages written by the agent runner.
21
+ *
22
+ * @public exported from `@promptbook/node`
23
+ */
24
+ export declare const AGENT_FINISHED_MESSAGES_DIRECTORY_PATH: string;
25
+ /**
26
+ * Relative path to messages that the agent runner stopped retrying.
27
+ *
28
+ * @public exported from `@promptbook/node`
29
+ */
30
+ export declare const AGENT_FAILED_MESSAGES_DIRECTORY_PATH: string;
@@ -0,0 +1,2 @@
1
+ export { NAME, CLAIM, PROMPTBOOK_LEGAL_ENTITY, IS_COST_PREVENTED, DEFAULT_IS_VERBOSE, DEFAULT_MAX_CONCURRENT_UPLOADS, PROMPTBOOK_SYNTAX_COLORS, } from '../../config';
2
+ export { PUBLIC_AGENTS_SERVERS } from '../../../servers';
@@ -0,0 +1,7 @@
1
+ import { BookEditorProps } from './BookEditor';
2
+ /**
3
+ * Renders a book editor
4
+ *
5
+ * @public exported from `@promptbook/components`
6
+ */
7
+ export declare function BookEditorForClient(props: BookEditorProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Browser-compatible stub for `createDeprecatedCommitmentDiagnostics`.
3
+ *
4
+ * In the browser build the full Node.js implementation is not available,
5
+ * so this stub always returns an empty array to keep the editor functional.
6
+ *
7
+ * @private internal utility of `BookEditorMonaco`
8
+ */
9
+ export declare function createDeprecatedCommitmentDiagnostics(_agentSource?: string): [];
@@ -1,39 +1,11 @@
1
- /**
2
- * Relative path to the local agent source initialized by `ptbk agent-folder init`.
3
- *
4
- * @private internal utility of `ptbk agent-folder`
5
- */
6
- export declare const AGENT_BOOK_FILE_PATH = "agent.book";
1
+ import { AGENT_BOOK_FILE_PATH, AGENT_FAILED_MESSAGES_DIRECTORY_PATH, AGENT_FINISHED_MESSAGES_DIRECTORY_PATH, AGENT_MESSAGES_DIRECTORY_PATH, AGENT_QUEUED_MESSAGES_DIRECTORY_PATH } from '../../../book-3.0/agentFolderPaths';
2
+ export { AGENT_BOOK_FILE_PATH, AGENT_FAILED_MESSAGES_DIRECTORY_PATH, AGENT_FINISHED_MESSAGES_DIRECTORY_PATH, AGENT_MESSAGES_DIRECTORY_PATH, AGENT_QUEUED_MESSAGES_DIRECTORY_PATH, };
7
3
  /**
8
4
  * Relative path to local knowledge files initialized by `ptbk agent-folder init`.
9
5
  *
10
6
  * @private internal utility of `ptbk agent-folder`
11
7
  */
12
8
  export declare const AGENT_KNOWLEDGE_DIRECTORY_PATH = "knowledge";
13
- /**
14
- * Relative path to the message queue root initialized by `ptbk agent-folder init`.
15
- *
16
- * @private internal utility of `ptbk agent-folder`
17
- */
18
- export declare const AGENT_MESSAGES_DIRECTORY_PATH = "messages";
19
- /**
20
- * Relative path to queued user messages consumed by `ptbk agent-folder run-once`.
21
- *
22
- * @private internal utility of `ptbk agent-folder`
23
- */
24
- export declare const AGENT_QUEUED_MESSAGES_DIRECTORY_PATH: string;
25
- /**
26
- * Relative path to answered messages written by `ptbk agent-folder run-once`.
27
- *
28
- * @private internal utility of `ptbk agent-folder`
29
- */
30
- export declare const AGENT_FINISHED_MESSAGES_DIRECTORY_PATH: string;
31
- /**
32
- * Relative path to messages that the agent runner stopped retrying.
33
- *
34
- * @private internal utility of `ptbk agent-folder`
35
- */
36
- export declare const AGENT_FAILED_MESSAGES_DIRECTORY_PATH: string;
37
9
  /**
38
10
  * Relative path to generated local agent documentation initialized by `ptbk agent-folder init`.
39
11
  *
@@ -1,7 +1,7 @@
1
- import { Converter as ShowdownConverter } from 'showdown';
1
+ import showdown from 'showdown';
2
2
  /**
3
3
  * Create a new showdown converter instance
4
4
  *
5
5
  * @private utility of `WebsiteScraper`
6
6
  */
7
- export declare function createShowdownConverter(): ShowdownConverter;
7
+ export declare function createShowdownConverter(): showdown.Converter;
@@ -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.112.0-114`).
18
+ * It follows semantic versioning (e.g., `0.112.0-116`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/wizard",
3
- "version": "0.112.0-115",
3
+ "version": "0.112.0-117",
4
4
  "description": "Promptbook: Create persistent AI agents that turn your company's scattered knowledge into action",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -99,7 +99,7 @@
99
99
  "types": "./esm/src/_packages/wizard.index.d.ts",
100
100
  "typings": "./esm/src/_packages/wizard.index.d.ts",
101
101
  "peerDependencies": {
102
- "@promptbook/core": "0.112.0-115"
102
+ "@promptbook/core": "0.112.0-117"
103
103
  },
104
104
  "dependencies": {
105
105
  "@ai-sdk/deepseek": "0.1.17",
@@ -110,7 +110,6 @@
110
110
  "@openai/agents": "0.4.15",
111
111
  "bottleneck": "2.19.5",
112
112
  "colors": "1.4.0",
113
- "crypto": "1.0.1",
114
113
  "crypto-js": "4.2.0",
115
114
  "dotenv": "16.3.2",
116
115
  "jsdom": "25.0.1",
package/umd/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('socket.io-client'), require('spacetrim'), require('@anthropic-ai/sdk'), require('bottleneck'), require('colors'), require('@azure/openai'), require('fs/promises'), require('child_process'), require('waitasecond'), require('crypto-js'), require('crypto-js/enc-hex'), require('path'), require('@mozilla/readability'), require('jsdom'), require('showdown'), require('dotenv'), require('crypto-js/sha256'), require('jszip'), require('rxjs'), require('crypto'), require('moment'), require('mime-types'), require('papaparse'), require('@openai/agents'), require('openai')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'socket.io-client', 'spacetrim', '@anthropic-ai/sdk', 'bottleneck', 'colors', '@azure/openai', 'fs/promises', 'child_process', 'waitasecond', 'crypto-js', 'crypto-js/enc-hex', 'path', '@mozilla/readability', 'jsdom', 'showdown', 'dotenv', 'crypto-js/sha256', 'jszip', 'rxjs', 'crypto', 'moment', 'mime-types', 'papaparse', '@openai/agents', 'openai'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-wizard"] = {}, global.socket_ioClient, global._spaceTrim, global.Anthropic, global.Bottleneck, global.colors, global.openai, global.promises, global.child_process, global.waitasecond, global.cryptoJs, global.hexEncoder, global.path, global.readability, global.jsdom, global.showdown, global.dotenv, global.sha256, global.JSZip, global.rxjs, global.crypto, global.moment, global.mimeTypes, global.papaparse, global.agents, global.OpenAI));
5
- })(this, (function (exports, socket_ioClient, _spaceTrim, Anthropic, Bottleneck, colors, openai, promises, child_process, waitasecond, cryptoJs, hexEncoder, path, readability, jsdom, showdown, dotenv, sha256, JSZip, rxjs, crypto, moment, mimeTypes, papaparse, agents, OpenAI) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('socket.io-client'), require('spacetrim'), require('@anthropic-ai/sdk'), require('bottleneck'), require('colors'), require('@azure/openai'), require('fs/promises'), require('child_process'), require('waitasecond'), require('crypto-js'), require('crypto-js/enc-hex'), require('path'), require('@mozilla/readability'), require('jsdom'), require('showdown'), require('dotenv'), require('crypto-js/sha256'), require('jszip'), require('rxjs'), require('moment'), require('mime-types'), require('papaparse'), require('@openai/agents'), require('openai')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'socket.io-client', 'spacetrim', '@anthropic-ai/sdk', 'bottleneck', 'colors', '@azure/openai', 'fs/promises', 'child_process', 'waitasecond', 'crypto-js', 'crypto-js/enc-hex', 'path', '@mozilla/readability', 'jsdom', 'showdown', 'dotenv', 'crypto-js/sha256', 'jszip', 'rxjs', 'moment', 'mime-types', 'papaparse', '@openai/agents', 'openai'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-wizard"] = {}, global.socket_ioClient, global._spaceTrim, global.Anthropic, global.Bottleneck, global.colors, global.openai, global.promises, global.child_process, global.waitasecond, global.CryptoJS, global.hexEncoder, global.path, global.readability, global.jsdom, global.showdown, global.dotenv, global.sha256, global.JSZip, global.rxjs, global.moment, global.mimeTypes, global.papaparse, global.agents, global.OpenAI));
5
+ })(this, (function (exports, socket_ioClient, _spaceTrim, Anthropic, Bottleneck, colors, openai, promises, child_process, waitasecond, CryptoJS, hexEncoder, path, readability, jsdom, showdown, dotenv, sha256, JSZip, rxjs, moment, mimeTypes, papaparse, agents, OpenAI) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -28,11 +28,14 @@
28
28
  var Anthropic__default = /*#__PURE__*/_interopDefaultLegacy(Anthropic);
29
29
  var Bottleneck__default = /*#__PURE__*/_interopDefaultLegacy(Bottleneck);
30
30
  var colors__default = /*#__PURE__*/_interopDefaultLegacy(colors);
31
+ var CryptoJS__default = /*#__PURE__*/_interopDefaultLegacy(CryptoJS);
31
32
  var hexEncoder__default = /*#__PURE__*/_interopDefaultLegacy(hexEncoder);
33
+ var showdown__default = /*#__PURE__*/_interopDefaultLegacy(showdown);
32
34
  var dotenv__namespace = /*#__PURE__*/_interopNamespace(dotenv);
33
35
  var sha256__default = /*#__PURE__*/_interopDefaultLegacy(sha256);
34
36
  var JSZip__default = /*#__PURE__*/_interopDefaultLegacy(JSZip);
35
37
  var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
38
+ var papaparse__default = /*#__PURE__*/_interopDefaultLegacy(papaparse);
36
39
  var OpenAI__default = /*#__PURE__*/_interopDefaultLegacy(OpenAI);
37
40
 
38
41
  // ⚠️ WARNING: This code has been generated so that any manual changes will be overwritten
@@ -49,7 +52,7 @@
49
52
  * @generated
50
53
  * @see https://github.com/webgptorg/promptbook
51
54
  */
52
- const PROMPTBOOK_ENGINE_VERSION = '0.112.0-115';
55
+ const PROMPTBOOK_ENGINE_VERSION = '0.112.0-117';
53
56
  /**
54
57
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
55
58
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -2357,7 +2360,7 @@
2357
2360
  * @private internal helper function
2358
2361
  */
2359
2362
  function $randomToken(randomness) {
2360
- return crypto.randomBytes(randomness).toString('hex');
2363
+ return CryptoJS__default["default"].lib.WordArray.random(randomness).toString(CryptoJS__default["default"].enc.Hex);
2361
2364
  }
2362
2365
  // TODO: [🤶] Maybe export through `@promptbook/utils` or `@promptbook/random` package
2363
2366
  // TODO: Maybe use nanoid instead https://github.com/ai/nanoid
@@ -13312,7 +13315,7 @@
13312
13315
  * @public exported from `@promptbook/editable`
13313
13316
  */
13314
13317
  function knowledgeSourceContentToName(knowledgeSourceContent) {
13315
- const hash = cryptoJs.SHA256(hexEncoder__default["default"].parse(JSON.stringify(knowledgeSourceContent)))
13318
+ const hash = CryptoJS__default["default"].SHA256(hexEncoder__default["default"].parse(JSON.stringify(knowledgeSourceContent)))
13316
13319
  // <- TODO: [🥬] Encapsulate sha256 to some private utility function
13317
13320
  .toString( /* hex */)
13318
13321
  .substring(0, 20);
@@ -14192,7 +14195,7 @@
14192
14195
  console.warn('CSV string contains carriage return characters, but in the CSV settings the `newline` setting does not include them. Autohealing the CSV string.');
14193
14196
  value = value.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
14194
14197
  }
14195
- const csv = papaparse.parse(value, settings);
14198
+ const csv = papaparse__default["default"].parse(value, settings);
14196
14199
  return csv;
14197
14200
  }
14198
14201
 
@@ -14277,10 +14280,10 @@
14277
14280
  i > index ? { ...row, [outputParameterName]: PENDING_VALUE_PLACEHOLDER } : row,
14278
14281
  );
14279
14282
  */
14280
- await onProgress(papaparse.unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS }));
14283
+ await onProgress(papaparse__default["default"].unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS }));
14281
14284
  }
14282
14285
  }
14283
- return papaparse.unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS });
14286
+ return papaparse__default["default"].unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS });
14284
14287
  },
14285
14288
  },
14286
14289
  {
@@ -14308,7 +14311,7 @@
14308
14311
  return /* not await */ mapCallback({ [key]: value }, index, array.length);
14309
14312
  }));
14310
14313
  }));
14311
- return papaparse.unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS });
14314
+ return papaparse__default["default"].unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS });
14312
14315
  },
14313
14316
  },
14314
14317
  ],
@@ -16324,7 +16327,7 @@
16324
16327
  const { filename: sourceFilename, url } = source;
16325
16328
  const { rootDirname, cacheDirname, intermediateFilesStrategy, extension, isVerbose } = options;
16326
16329
  // TODO: [👬] DRY
16327
- const hash = cryptoJs.SHA256(
16330
+ const hash = CryptoJS__default["default"].SHA256(
16328
16331
  // <- TODO: [🥬] Encapsulate sha256 to some private utility function
16329
16332
  hexEncoder__default["default"].parse(sourceFilename || url || 'untitled'))
16330
16333
  .toString( /* hex */)
@@ -17227,7 +17230,7 @@
17227
17230
  * @private utility of `WebsiteScraper`
17228
17231
  */
17229
17232
  function createShowdownConverter() {
17230
- return new showdown.Converter({
17233
+ return new showdown__default["default"].Converter({
17231
17234
  flavor: 'github',
17232
17235
  /*
17233
17236
  > import showdownHighlight from 'showdown-highlight';
@@ -17411,7 +17414,7 @@
17411
17414
  * @public exported from `@promptbook/utils`
17412
17415
  */
17413
17416
  function computeHash(value) {
17414
- return cryptoJs.SHA256(hexEncoder__default["default"].parse(_spaceTrim.spaceTrim(valueToString(value)))).toString( /* hex */);
17417
+ return CryptoJS__default["default"].SHA256(hexEncoder__default["default"].parse(_spaceTrim.spaceTrim(valueToString(value)))).toString( /* hex */);
17415
17418
  }
17416
17419
  // TODO: [🥬][🥬] Use this ACRY
17417
17420
 
@@ -49810,7 +49813,7 @@
49810
49813
  * Computes one stable hash from a JSON-serializable value.
49811
49814
  */
49812
49815
  function computeJsonHash$1(value) {
49813
- return cryptoJs.SHA256(JSON.stringify(value)).toString();
49816
+ return CryptoJS__default["default"].SHA256(JSON.stringify(value)).toString();
49814
49817
  }
49815
49818
  /**
49816
49819
  * Handles OpenAI AgentKit-backed executions for `AgentLlmExecutionTools`.
@@ -49968,7 +49971,7 @@
49968
49971
  * Computes one stable hash from a JSON-serializable value.
49969
49972
  */
49970
49973
  function computeJsonHash(value) {
49971
- return cryptoJs.SHA256(JSON.stringify(value)).toString();
49974
+ return CryptoJS__default["default"].SHA256(JSON.stringify(value)).toString();
49972
49975
  }
49973
49976
  /**
49974
49977
  * Removes assistant-managed requirements before the prompt is executed via OpenAI Assistants.
@@ -50770,7 +50773,7 @@
50770
50773
  * Returns a virtual model name representing the agent behavior.
50771
50774
  */
50772
50775
  get modelName() {
50773
- const hash = cryptoJs.SHA256(hexEncoder__default["default"].parse(this.options.agentSource)).toString( /* hex */);
50776
+ const hash = CryptoJS__default["default"].SHA256(hexEncoder__default["default"].parse(this.options.agentSource)).toString( /* hex */);
50774
50777
  const agentId = hash.substring(0, 10);
50775
50778
  return (normalizeToKebabCase(this.title) + '-' + agentId);
50776
50779
  }