@promptbook/core 0.112.0-42 → 0.112.0-43

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.
@@ -745,7 +745,7 @@ export type ChatProps = {
745
745
  * - `BUBBLE_MODE`: keeps the default bubble appearance for all messages.
746
746
  * - `ARTICLE_MODE`: keeps user bubbles while rendering assistant replies as borderless article blocks.
747
747
  *
748
- * @default 'BUBBLE_MODE'
748
+ * @default 'ARTICLE_MODE'
749
749
  */
750
750
  readonly CHAT_VISUAL_MODE?: ChatVisualMode;
751
751
  /**
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Possible runtime shapes returned when importing the `typescript` package.
3
+ */
4
+ type ImportedTypescriptModule = typeof import('typescript') | {
5
+ default: typeof import('typescript');
6
+ };
7
+ /**
8
+ * Loads the TypeScript runtime used for parsing JSONC-style project files.
9
+ *
10
+ * @private internal utility of `coder init`
11
+ */
12
+ export declare function getTypescriptModule(): Promise<typeof import('typescript')>;
13
+ /**
14
+ * Normalizes CommonJS-via-`default` and direct namespace imports of TypeScript.
15
+ *
16
+ * @private internal utility of `getTypescriptModule`
17
+ */
18
+ export declare function normalizeImportedTypescriptModule(importedTypescriptModule: ImportedTypescriptModule): typeof import('typescript');
19
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -44,6 +44,10 @@ export declare class AgentLlmExecutionTools implements LlmExecutionTools {
44
44
  * Cached parsed agent information
45
45
  */
46
46
  private _cachedAgentInfo;
47
+ /**
48
+ * Optional server-precomputed model requirements reused until the source changes.
49
+ */
50
+ private precomputedModelRequirements;
47
51
  /**
48
52
  * Creates new AgentLlmExecutionTools
49
53
  *
@@ -1,4 +1,5 @@
1
1
  import type { string_book } from '../../book-2.0/agent-source/string_book';
2
+ import type { AgentModelRequirements } from '../../book-2.0/agent-source/AgentModelRequirements';
2
3
  import type { CommonToolsOptions } from '../../execution/CommonToolsOptions';
3
4
  import type { ExecutionTools } from '../../execution/ExecutionTools';
4
5
  import type { Updatable } from '../../types/Updatable';
@@ -27,6 +28,13 @@ export type AgentOptions = CommonToolsOptions & {
27
28
  * The source of the agent
28
29
  */
29
30
  agentSource: Updatable<string_book>;
31
+ /**
32
+ * Optional precomputed model requirements reused until `agentSource` changes.
33
+ *
34
+ * This keeps the actual runtime prompt aligned with server-prepared requirements
35
+ * such as compact-reference-resolved `TEAM` tools.
36
+ */
37
+ precomputedModelRequirements?: AgentModelRequirements;
30
38
  /**
31
39
  * Teacher agent for self-learning
32
40
  *
@@ -1,4 +1,5 @@
1
1
  import type { string_book } from '../../book-2.0/agent-source/string_book';
2
+ import type { AgentModelRequirements } from '../../book-2.0/agent-source/AgentModelRequirements';
2
3
  import type { CommonToolsOptions } from '../../execution/CommonToolsOptions';
3
4
  import type { LlmExecutionTools } from '../../execution/LlmExecutionTools';
4
5
  import type { OpenAiAgentKitExecutionTools } from '../openai/OpenAiAgentKitExecutionTools';
@@ -25,4 +26,12 @@ export type CreateAgentLlmExecutionToolsOptions = CommonToolsOptions & {
25
26
  * The agent source string that defines the agent's behavior
26
27
  */
27
28
  agentSource: string_book;
29
+ /**
30
+ * Optional precomputed model requirements reused until `agentSource` changes.
31
+ *
32
+ * This is useful for runtimes such as Agents Server that already resolved compact
33
+ * references (for example in `TEAM`) and need the executed prompt to stay aligned
34
+ * with the server-prepared tool list.
35
+ */
36
+ precomputedModelRequirements?: AgentModelRequirements;
28
37
  };
@@ -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-41`).
18
+ * It follows semantic versioning (e.g., `0.112.0-42`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/core",
3
- "version": "0.112.0-42",
3
+ "version": "0.112.0-43",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
package/umd/index.umd.js CHANGED
@@ -27,7 +27,7 @@
27
27
  * @generated
28
28
  * @see https://github.com/webgptorg/promptbook
29
29
  */
30
- const PROMPTBOOK_ENGINE_VERSION = '0.112.0-42';
30
+ const PROMPTBOOK_ENGINE_VERSION = '0.112.0-43';
31
31
  /**
32
32
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
33
33
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -7867,7 +7867,7 @@
7867
7867
  systemMessage: '',
7868
7868
  promptSuffix: '',
7869
7869
  // modelName: 'gpt-5',
7870
- modelName: 'gemini-2.5-flash-lite',
7870
+ modelName: 'gpt-5.4-mini',
7871
7871
  temperature: 0.7,
7872
7872
  topP: 0.9,
7873
7873
  topK: 50,
@@ -15055,6 +15055,15 @@
15055
15055
  * Map of team tool titles.
15056
15056
  */
15057
15057
  const teamToolTitles = {};
15058
+ /**
15059
+ * Shared TEAM usage rules appended ahead of teammate listings.
15060
+ *
15061
+ * @private
15062
+ */
15063
+ const TEAM_SYSTEM_MESSAGE_GUIDANCE_LINES = [
15064
+ '- If a teammate is relevant to the request, consult that teammate using the matching tool.',
15065
+ '- Do not ask the user for information that a listed teammate can provide directly.',
15066
+ ];
15058
15067
  /**
15059
15068
  * Constant for remote agents by Url.
15060
15069
  */
@@ -15144,12 +15153,9 @@
15144
15153
  if (updatedTools.some((tool) => tool.name === entry.toolName)) {
15145
15154
  continue;
15146
15155
  }
15147
- const toolDescription = entry.description
15148
- ? `Consult teammate ${entry.teammate.label}\n${entry.description}`
15149
- : `Consult teammate ${entry.teammate.label}`;
15150
15156
  updatedTools.push({
15151
15157
  name: entry.toolName,
15152
- description: toolDescription,
15158
+ description: buildTeamToolDescription(entry),
15153
15159
  parameters: {
15154
15160
  type: 'object',
15155
15161
  properties: {
@@ -15218,22 +15224,72 @@
15218
15224
  /**
15219
15225
  * Builds the textual TEAM section body for the final system message.
15220
15226
  *
15221
- * Each teammate is listed with its tool name and, when available, a one-line description.
15222
- * Uses `spaceTrim` to ensure consistent whitespace and indentation.
15227
+ * Each teammate is listed with its tool name, TEAM instructions, and optional profile hints.
15223
15228
  */
15224
15229
  function buildTeamSystemMessageBody(teamEntries) {
15225
- const lines = teamEntries.map((entry, index) => {
15226
- const toolLine = `${index + 1}) ${entry.teammate.label} tool \`${entry.toolName}\``;
15227
- if (!entry.description) {
15228
- return toolLine;
15229
- }
15230
- return spacetrim.spaceTrim(`
15231
- ${toolLine}
15232
- ${entry.description}
15233
- `);
15234
- });
15230
+ const lines = [
15231
+ ...TEAM_SYSTEM_MESSAGE_GUIDANCE_LINES,
15232
+ '',
15233
+ ...teamEntries.map((entry, index) => {
15234
+ const toolLine = `${index + 1}) ${entry.teammate.label} tool \`${entry.toolName}\``;
15235
+ const detailLines = collectTeamEntryDetails(entry).map(formatTeamEntryDetailLine);
15236
+ return [toolLine, ...detailLines].join('\n');
15237
+ }),
15238
+ ];
15235
15239
  return lines.join('\n');
15236
15240
  }
15241
+ /**
15242
+ * Builds the model-visible description for one teammate tool.
15243
+ *
15244
+ * @private
15245
+ */
15246
+ function buildTeamToolDescription(entry) {
15247
+ const detailLines = collectTeamEntryDetails(entry).map(({ label, content }) => `${label}: ${content}`);
15248
+ return [`Consult teammate ${entry.teammate.label}`, ...detailLines].join('\n');
15249
+ }
15250
+ /**
15251
+ * Collects structured teammate details that should stay visible to the model.
15252
+ *
15253
+ * @private
15254
+ */
15255
+ function collectTeamEntryDetails(entry) {
15256
+ var _a;
15257
+ const details = [];
15258
+ const instructions = entry.teammate.instructions.trim();
15259
+ const description = ((_a = entry.description) === null || _a === void 0 ? void 0 : _a.trim()) || '';
15260
+ if (instructions) {
15261
+ details.push({
15262
+ label: 'TEAM instructions',
15263
+ content: instructions,
15264
+ });
15265
+ }
15266
+ if (description) {
15267
+ details.push({
15268
+ label: 'Profile',
15269
+ content: description,
15270
+ });
15271
+ }
15272
+ return details;
15273
+ }
15274
+ /**
15275
+ * Formats one teammate detail line for the TEAM system-message section.
15276
+ *
15277
+ * @private
15278
+ */
15279
+ function formatTeamEntryDetailLine(detail) {
15280
+ return indentMultilineText(`${detail.label}: ${detail.content}`, ' ');
15281
+ }
15282
+ /**
15283
+ * Indents all lines of one potentially multi-line text block.
15284
+ *
15285
+ * @private
15286
+ */
15287
+ function indentMultilineText(text, prefix) {
15288
+ return text
15289
+ .split('\n')
15290
+ .map((line) => `${prefix}${line}`)
15291
+ .join('\n');
15292
+ }
15237
15293
  /**
15238
15294
  * Registers tool function and title for a teammate tool.
15239
15295
  */
@@ -32700,7 +32756,7 @@
32700
32756
  /**
32701
32757
  * Constant for default agent kit model name.
32702
32758
  */
32703
- const DEFAULT_AGENT_KIT_MODEL_NAME = 'gpt-5.4-nano';
32759
+ const DEFAULT_AGENT_KIT_MODEL_NAME = 'gpt-5.4-mini';
32704
32760
  /**
32705
32761
  * Creates one structured log entry for streamed tool-call updates.
32706
32762
  *
@@ -34766,6 +34822,7 @@
34766
34822
  * @param agentSource The agent source string that defines the agent's behavior
34767
34823
  */
34768
34824
  constructor(options) {
34825
+ var _a;
34769
34826
  this.options = options;
34770
34827
  /**
34771
34828
  * Cached model requirements to avoid re-parsing the agent source
@@ -34775,6 +34832,7 @@
34775
34832
  * Cached parsed agent information
34776
34833
  */
34777
34834
  this._cachedAgentInfo = null;
34835
+ this.precomputedModelRequirements = (_a = options.precomputedModelRequirements) !== null && _a !== void 0 ? _a : null;
34778
34836
  }
34779
34837
  /**
34780
34838
  * Updates the agent source and clears the cache
@@ -34782,9 +34840,13 @@
34782
34840
  * @param agentSource The new agent source string
34783
34841
  */
34784
34842
  updateAgentSource(agentSource) {
34843
+ if (this.options.agentSource === agentSource) {
34844
+ return;
34845
+ }
34785
34846
  this.options.agentSource = agentSource;
34786
34847
  this._cachedAgentInfo = null;
34787
34848
  this._cachedModelRequirements = null;
34849
+ this.precomputedModelRequirements = null;
34788
34850
  }
34789
34851
  /**
34790
34852
  * Get cached or parse agent information
@@ -34801,6 +34863,16 @@
34801
34863
  * Note: [🐤] This is names `getModelRequirements` *(not `getAgentModelRequirements`)* because in future these two will be united
34802
34864
  */
34803
34865
  async getModelRequirements() {
34866
+ var _a, _b;
34867
+ if (this.precomputedModelRequirements !== null) {
34868
+ if (this.options.isVerbose) {
34869
+ console.info('[🤰]', 'Using precomputed agent model requirements', {
34870
+ agent: this.title,
34871
+ toolCount: (_b = (_a = this.precomputedModelRequirements.tools) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,
34872
+ });
34873
+ }
34874
+ return this.precomputedModelRequirements;
34875
+ }
34804
34876
  if (this._cachedModelRequirements === null) {
34805
34877
  const preparationStartedAtMs = Date.now();
34806
34878
  if (this.options.isVerbose) {
@@ -34910,6 +34982,7 @@
34910
34982
  * Resolves agent requirements, attachments, and runtime overrides into one forwarded chat prompt.
34911
34983
  */
34912
34984
  async prepareChatPrompt(prompt) {
34985
+ var _a;
34913
34986
  const chatPrompt = this.requireChatPrompt(prompt);
34914
34987
  const { sanitizedRequirements, promptSuffix } = await this.getSanitizedAgentModelRequirements();
34915
34988
  const attachments = normalizeChatAttachments(chatPrompt.attachments);
@@ -34927,7 +35000,16 @@
34927
35000
  mergedTools,
34928
35001
  knowledgeSourcesForAgent,
34929
35002
  });
34930
- console.log('!!!! promptWithAgentModelRequirements:', forwardedPrompt);
35003
+ if (this.options.isVerbose) {
35004
+ console.info('[🤰]', 'Prepared agent chat prompt', {
35005
+ agent: this.title,
35006
+ usedPrecomputedModelRequirements: this.precomputedModelRequirements !== null,
35007
+ toolNames: mergedTools.map((tool) => tool.name),
35008
+ knowledgeSourcesCount: (_a = knowledgeSourcesForAgent === null || knowledgeSourcesForAgent === void 0 ? void 0 : knowledgeSourcesForAgent.length) !== null && _a !== void 0 ? _a : 0,
35009
+ promptSuffixLength: promptSuffix.length,
35010
+ systemMessageLength: sanitizedRequirements.systemMessage.length,
35011
+ });
35012
+ }
34931
35013
  return {
34932
35014
  forwardedPrompt,
34933
35015
  sanitizedRequirements,
@@ -35114,6 +35196,7 @@
35114
35196
  * Runs one prepared prompt through the deprecated OpenAI Assistant backend.
35115
35197
  */
35116
35198
  async callOpenAiAssistantChatModelStream(options) {
35199
+ var _a, _b, _c, _d;
35117
35200
  const assistant = await this.getOrPrepareOpenAiAssistant({
35118
35201
  llmTools: options.llmTools,
35119
35202
  originalPrompt: options.originalPrompt,
@@ -35121,7 +35204,14 @@
35121
35204
  onProgress: options.onProgress,
35122
35205
  });
35123
35206
  const promptWithAgentModelRequirementsForOpenAiAssistantExecutionTools = createOpenAiAssistantPrompt(options.preparedChatPrompt.forwardedPrompt);
35124
- console.log('!!!! promptWithAgentModelRequirementsForOpenAiAssistantExecutionTools:', promptWithAgentModelRequirementsForOpenAiAssistantExecutionTools);
35207
+ if (this.options.isVerbose) {
35208
+ console.info('[🤰]', 'Prepared OpenAI Assistant prompt', {
35209
+ agent: this.title,
35210
+ toolNames: (_b = (_a = promptWithAgentModelRequirementsForOpenAiAssistantExecutionTools.modelRequirements.tools) === null || _a === void 0 ? void 0 : _a.map((tool) => tool.name)) !== null && _b !== void 0 ? _b : [],
35211
+ knowledgeSourcesCount: (_d = (_c = promptWithAgentModelRequirementsForOpenAiAssistantExecutionTools.modelRequirements
35212
+ .knowledgeSources) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0,
35213
+ });
35214
+ }
35125
35215
  return assistant.callChatModelStream(promptWithAgentModelRequirementsForOpenAiAssistantExecutionTools, options.onProgress, options.streamOptions);
35126
35216
  }
35127
35217
  /**
@@ -35812,7 +35902,8 @@
35812
35902
  isVerbose: options.isVerbose,
35813
35903
  llmTools: getSingleLlmExecutionTools(options.executionTools.llm),
35814
35904
  assistantPreparationMode: options.assistantPreparationMode,
35815
- agentSource: agentSource.value, // <- TODO: [🐱‍🚀] Allow to pass BehaviorSubject<string_book> OR refresh llmExecutionTools.callChat on agentSource change
35905
+ agentSource: agentSource.value,
35906
+ precomputedModelRequirements: options.precomputedModelRequirements,
35816
35907
  });
35817
35908
  this._agentName = undefined;
35818
35909
  /**
@@ -38430,6 +38521,7 @@
38430
38521
 
38431
38522
  PERSONA ${block(personaDescription)}
38432
38523
  ${block(initialRules.map((rule) => `RULE ${rule}`).join('\n'))}
38524
+ CLOSED
38433
38525
  `));
38434
38526
  // Note: `META COLOR ${color || PROMPTBOOK_COLOR.toHex()}` was removed for now
38435
38527
  // Note: `META FONT Playfair Display, sans-serif` was removed for now