@promptbook/cli 0.114.0-1 → 0.114.0-3

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 (199) hide show
  1. package/README.md +16 -15
  2. package/apps/agents-server/next.config.ts +11 -0
  3. package/apps/agents-server/package.json +6 -4
  4. package/apps/agents-server/playwright.config.ts +28 -38
  5. package/apps/agents-server/scripts/build-agents-server.js +62 -0
  6. package/apps/agents-server/scripts/build-e2e.js +38 -0
  7. package/apps/agents-server/scripts/ensure-root-dependencies.js +86 -0
  8. package/apps/agents-server/scripts/prerender-homepage.js +1 -1
  9. package/apps/agents-server/scripts/run-e2e-tests.js +34 -0
  10. package/apps/agents-server/scripts/run-npm.js +42 -0
  11. package/apps/agents-server/src/app/admin/email-server/page.tsx +14 -6
  12. package/apps/agents-server/src/app/api/elevenlabs/tts/route.ts +3 -3
  13. package/apps/agents-server/src/app/api/onboarding/book/route.ts +7 -6
  14. package/apps/agents-server/src/app/layout.tsx +6 -0
  15. package/apps/agents-server/src/app/superadmin/servers/ServersRegistryTable.tsx +105 -102
  16. package/apps/agents-server/src/app/superadmin/servers/useServersRegistryState.ts +15 -7
  17. package/apps/agents-server/src/components/AgentProjectDnsInstructions/AgentProjectDnsInstructions.tsx +11 -11
  18. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ManGoBookEditor.tsx +82 -0
  19. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/WizardShell.tsx +2 -2
  20. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/steps/BookStep.tsx +13 -16
  21. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/steps/ZadaniStep.tsx +4 -4
  22. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/config/bookSections.ts +23 -16
  23. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/lib/bookSource.ts +54 -0
  24. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/bookService.ts +15 -8
  25. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/createManGoAgentSource.ts +3 -37
  26. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/createManGoOpenEditorRequest.ts +1 -1
  27. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/state/OnboardingProvider.tsx +2 -2
  28. package/apps/agents-server/src/components/UsersList/CreateUserDialog.tsx +13 -22
  29. package/apps/agents-server/src/components/UsersList/PasswordGeneratorDialog.tsx +216 -0
  30. package/apps/agents-server/src/components/UsersList/UsersList.tsx +16 -11
  31. package/apps/agents-server/src/components/UsersList/generateSecurePassword.ts +112 -24
  32. package/apps/agents-server/src/components/UsersList/userDialogClassNames.ts +11 -0
  33. package/apps/agents-server/src/languages/ServerTranslationKeys.ts +11 -0
  34. package/apps/agents-server/src/languages/translations/czech.yaml +11 -0
  35. package/apps/agents-server/src/languages/translations/english.yaml +11 -0
  36. package/apps/agents-server/src/utils/agentProjects/agentProjectHrefs.ts +11 -0
  37. package/apps/agents-server/src/utils/agentProjects/createAgentProjectDnsRecords.ts +53 -7
  38. package/apps/agents-server/src/utils/agentProjects/createAgentProjectMarkdownReferences.ts +37 -27
  39. package/apps/agents-server/src/utils/manGoOnboarding/manGoOnboardingAgentBooks.ts +2 -13
  40. package/apps/agents-server/src/utils/manGoOnboarding/manGoOnboardingAgentRuntime.ts +21 -73
  41. package/apps/agents-server/src/utils/stalwart/createEmailDnsInstructions.ts +9 -5
  42. package/apps/agents-server/src/utils/stalwart/readStalwartEmailSnapshot.ts +23 -5
  43. package/apps/agents-server/src/utils/stalwart/stalwartBootstrap.ts +2 -1
  44. package/apps/agents-server/src/utils/stalwart/stalwartMailBridge.ts +7 -0
  45. package/apps/agents-server/tests/e2e/e2eEnvironment.cjs +49 -0
  46. package/esm/index.es.js +1105 -273
  47. package/esm/index.es.js.map +1 -1
  48. package/esm/scripts/run-codex-prompts/common/runGoScript/scriptExecutionLog.d.ts +7 -0
  49. package/esm/scripts/run-codex-prompts/git/coderGitSync.d.ts +43 -0
  50. package/esm/scripts/run-codex-prompts/git/commitChanges.d.ts +3 -0
  51. package/esm/scripts/run-codex-prompts/main/resolvePromptRunner.d.ts +8 -1
  52. package/esm/scripts/run-codex-prompts/ping/buildCoderPingPrompt.d.ts +20 -0
  53. package/esm/scripts/run-codex-prompts/ping/extractCoderPingAnswer.d.ts +9 -0
  54. package/esm/scripts/run-codex-prompts/ping/pingCoderHarness.d.ts +23 -0
  55. package/esm/scripts/run-codex-prompts/ping/printCoderPingResult.d.ts +5 -0
  56. package/esm/scripts/run-codex-prompts/prompts/findNextTodoPrompt.d.ts +2 -1
  57. package/esm/scripts/run-codex-prompts/prompts/isPromptCompatibleWithRunner.d.ts +27 -0
  58. package/esm/scripts/run-codex-prompts/prompts/listRunnablePrompts.d.ts +2 -1
  59. package/esm/scripts/run-codex-prompts/prompts/listUpcomingTasks.d.ts +2 -1
  60. package/esm/scripts/run-codex-prompts/prompts/replacePromptTodoStatusLine.d.ts +7 -0
  61. package/esm/scripts/run-codex-prompts/testing/TestBeforeMode.d.ts +16 -0
  62. package/esm/scripts/run-codex-prompts/testing/createTestBeforeRepairPrompt.d.ts +9 -0
  63. package/esm/scripts/run-codex-prompts/testing/limitTestOutput.d.ts +4 -0
  64. package/esm/scripts/run-codex-prompts/testing/runPromptTestCommand.d.ts +1 -2
  65. package/esm/scripts/run-codex-prompts/testing/runTestBefore.d.ts +24 -0
  66. package/esm/scripts/run-codex-prompts/ui/buildRunUiFrameShared.d.ts +1 -0
  67. package/esm/scripts/verify-prompts/verify-prompts.d.ts +5 -0
  68. package/esm/src/book-2.0/book-language-documentation/BookLanguageManualDictionary.d.ts +1 -15
  69. package/esm/src/book-2.0/book-language-documentation/getBookLanguageManualCommitmentGroups.d.ts +1 -1
  70. package/esm/src/book-2.0/book-language-documentation/renderCommitmentCatalogSection.d.ts +0 -4
  71. package/esm/src/book-components/Chat/utils/$provideServerDomWindow.d.ts +11 -0
  72. package/esm/src/book-components/Chat/utils/renderMarkdown.d.ts +7 -0
  73. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerRuntimeEnvironment.d.ts +7 -0
  74. package/esm/src/cli/cli-commands/coder/agentCodingFile.d.ts +2 -3
  75. package/esm/src/cli/cli-commands/coder/ping.d.ts +10 -0
  76. package/esm/src/cli/cli-commands/coder/ping.test.d.ts +1 -0
  77. package/esm/src/cli/cli-commands/coder.d.ts +1 -0
  78. package/esm/src/cli/cli-commands/common/coderGitSyncCliOptions.d.ts +34 -0
  79. package/esm/src/cli/cli-commands/common/coderGitSyncCliOptions.test.d.ts +1 -0
  80. package/esm/src/cli/common/loadPromptsModule.d.ts +16 -0
  81. package/esm/src/llm-providers/anthropic-claude/AnthropicClaudeExecutionTools.d.ts +1 -1
  82. package/esm/src/llm-providers/azure-openai/AzureOpenAiExecutionTools.d.ts +1 -1
  83. package/esm/src/llm-providers/openai/OpenAiAgentKitExecutionTools.d.ts +1 -1
  84. package/esm/src/llm-providers/openai/OpenAiAgentKitExecutionToolsToolBuilder.d.ts +1 -1
  85. package/esm/src/llm-providers/openai/OpenAiAssistantExecutionToolsStreamRunner.d.ts +1 -1
  86. package/esm/src/llm-providers/openai/OpenAiAssistantExecutionToolsToolRunner.d.ts +1 -1
  87. package/esm/src/llm-providers/openai/OpenAiCompatibleNonChatPromptCaller.d.ts +1 -1
  88. package/esm/src/llm-providers/openai/OpenAiCompatibleRequestManager.d.ts +1 -1
  89. package/esm/src/llm-providers/openai/utils/callOpenAiCompatibleChatModel.d.ts +1 -1
  90. package/esm/src/llm-providers/openai/utils/loadOpenAiAgentsModule.d.ts +203 -0
  91. package/esm/src/llm-providers/openai/utils/uploadFilesToOpenAi.d.ts +1 -1
  92. package/esm/src/utils/misc/createLazyModuleLoader.d.ts +14 -0
  93. package/esm/src/version.d.ts +1 -1
  94. package/package.json +1 -1
  95. package/src/book-2.0/book-language-documentation/BookLanguageManualDictionary.ts +1 -15
  96. package/src/book-2.0/book-language-documentation/bookLanguageDocumentationExamples.ts +1 -2
  97. package/src/book-2.0/book-language-documentation/createStandaloneBookLanguageMarkdown.ts +92 -32
  98. package/src/book-2.0/book-language-documentation/czechBookLanguageManualDictionary.ts +16 -39
  99. package/src/book-2.0/book-language-documentation/englishBookLanguageManualDictionary.ts +16 -36
  100. package/src/book-2.0/book-language-documentation/getBookLanguageManualCommitmentGroups.ts +9 -1
  101. package/src/book-2.0/book-language-documentation/renderCommitmentCatalogSection.ts +4 -51
  102. package/src/book-2.0/book-language-documentation/renderGroupedCommitmentDocumentationMarkdown.ts +291 -4
  103. package/src/book-3.0/LiteAgent.ts +11 -9
  104. package/src/book-components/Chat/utils/$provideServerDomWindow.ts +77 -0
  105. package/src/book-components/Chat/utils/renderMarkdown.ts +135 -32
  106. package/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerRuntimeEnvironment.ts +14 -0
  107. package/src/cli/cli-commands/agents-server/buildAgentsServer/ensureAgentsServerBuild.ts +1 -0
  108. package/src/cli/cli-commands/agents-server/startAgentsServer/createLocalAgentRunOptions.ts +1 -0
  109. package/src/cli/cli-commands/coder/add.ts +40 -12
  110. package/src/cli/cli-commands/coder/agentCodingFile.ts +6 -129
  111. package/src/cli/cli-commands/coder/generate-boilerplates.ts +31 -5
  112. package/src/cli/cli-commands/coder/getDefaultCoderPackageJsonScripts.ts +1 -1
  113. package/src/cli/cli-commands/coder/init.ts +27 -1
  114. package/src/cli/cli-commands/coder/initializeCoderProjectConfiguration.ts +1 -4
  115. package/src/cli/cli-commands/coder/ping.ts +72 -0
  116. package/src/cli/cli-commands/coder/run.ts +25 -2
  117. package/src/cli/cli-commands/coder/verify.ts +27 -12
  118. package/src/cli/cli-commands/coder.ts +4 -0
  119. package/src/cli/cli-commands/common/coderGitSyncCliOptions.ts +78 -0
  120. package/src/cli/cli-commands/run/prepareRunCommandResources.ts +2 -1
  121. package/src/cli/cli-commands/run/resolveRunInputParameters.ts +2 -1
  122. package/src/cli/cli-commands/runInteractiveChatbot.ts +2 -1
  123. package/src/cli/common/$provideLlmToolsForCli.ts +2 -1
  124. package/src/cli/common/loadPromptsModule.ts +13 -0
  125. package/src/conversion/archive/loadArchive.ts +2 -1
  126. package/src/conversion/archive/loadJsZipModule.ts +10 -0
  127. package/src/conversion/archive/saveArchive.ts +2 -1
  128. package/src/llm-providers/anthropic-claude/AnthropicClaudeExecutionTools.ts +13 -1
  129. package/src/llm-providers/azure-openai/AzureOpenAiExecutionTools.ts +13 -1
  130. package/src/llm-providers/openai/OpenAiAgentKitExecutionTools.ts +6 -2
  131. package/src/llm-providers/openai/OpenAiAgentKitExecutionToolsToolBuilder.ts +7 -5
  132. package/src/llm-providers/openai/OpenAiAssistantExecutionTools.ts +1 -1
  133. package/src/llm-providers/openai/OpenAiAssistantExecutionToolsStreamRunner.ts +1 -1
  134. package/src/llm-providers/openai/OpenAiAssistantExecutionToolsToolRunner.ts +1 -1
  135. package/src/llm-providers/openai/OpenAiCompatibleNonChatPromptCaller.ts +1 -1
  136. package/src/llm-providers/openai/OpenAiCompatibleRequestManager.ts +12 -1
  137. package/src/llm-providers/openai/utils/callOpenAiCompatibleChatModel.ts +1 -1
  138. package/src/llm-providers/openai/utils/loadOpenAiAgentsModule.ts +11 -0
  139. package/src/llm-providers/openai/utils/uploadFilesToOpenAi.ts +1 -1
  140. package/src/other/templates/getTemplatesPipelineCollection.ts +731 -923
  141. package/src/remote-server/createRemoteClient.ts +12 -1
  142. package/src/scrapers/website/WebsiteScraper.ts +22 -2
  143. package/src/utils/agent-message-runtime/resolveAgentMessageRuntimeActivity.ts +101 -0
  144. package/src/utils/misc/createLazyModuleLoader.ts +27 -0
  145. package/src/version.ts +2 -2
  146. package/src/versions.txt +2 -1
  147. package/umd/index.umd.js +1180 -342
  148. package/umd/index.umd.js.map +1 -1
  149. package/umd/scripts/run-codex-prompts/common/runGoScript/scriptExecutionLog.d.ts +7 -0
  150. package/umd/scripts/run-codex-prompts/git/coderGitSync.d.ts +43 -0
  151. package/umd/scripts/run-codex-prompts/git/commitChanges.d.ts +3 -0
  152. package/umd/scripts/run-codex-prompts/main/resolvePromptRunner.d.ts +8 -1
  153. package/umd/scripts/run-codex-prompts/ping/buildCoderPingPrompt.d.ts +20 -0
  154. package/umd/scripts/run-codex-prompts/ping/extractCoderPingAnswer.d.ts +9 -0
  155. package/umd/scripts/run-codex-prompts/ping/pingCoderHarness.d.ts +23 -0
  156. package/umd/scripts/run-codex-prompts/ping/printCoderPingResult.d.ts +5 -0
  157. package/umd/scripts/run-codex-prompts/prompts/findNextTodoPrompt.d.ts +2 -1
  158. package/umd/scripts/run-codex-prompts/prompts/isPromptCompatibleWithRunner.d.ts +27 -0
  159. package/umd/scripts/run-codex-prompts/prompts/listRunnablePrompts.d.ts +2 -1
  160. package/umd/scripts/run-codex-prompts/prompts/listUpcomingTasks.d.ts +2 -1
  161. package/umd/scripts/run-codex-prompts/prompts/replacePromptTodoStatusLine.d.ts +7 -0
  162. package/umd/scripts/run-codex-prompts/testing/TestBeforeMode.d.ts +16 -0
  163. package/umd/scripts/run-codex-prompts/testing/createTestBeforeRepairPrompt.d.ts +9 -0
  164. package/umd/scripts/run-codex-prompts/testing/limitTestOutput.d.ts +4 -0
  165. package/umd/scripts/run-codex-prompts/testing/runPromptTestCommand.d.ts +1 -2
  166. package/umd/scripts/run-codex-prompts/testing/runTestBefore.d.ts +24 -0
  167. package/umd/scripts/run-codex-prompts/ui/buildRunUiFrameShared.d.ts +1 -0
  168. package/umd/scripts/verify-prompts/verify-prompts.d.ts +5 -0
  169. package/umd/src/book-2.0/book-language-documentation/BookLanguageManualDictionary.d.ts +1 -15
  170. package/umd/src/book-2.0/book-language-documentation/getBookLanguageManualCommitmentGroups.d.ts +1 -1
  171. package/umd/src/book-2.0/book-language-documentation/renderCommitmentCatalogSection.d.ts +0 -4
  172. package/umd/src/book-components/Chat/utils/$provideServerDomWindow.d.ts +11 -0
  173. package/umd/src/book-components/Chat/utils/renderMarkdown.d.ts +7 -0
  174. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerRuntimeEnvironment.d.ts +7 -0
  175. package/umd/src/cli/cli-commands/coder/agentCodingFile.d.ts +2 -3
  176. package/umd/src/cli/cli-commands/coder/ping.d.ts +10 -0
  177. package/umd/src/cli/cli-commands/coder/ping.test.d.ts +1 -0
  178. package/umd/src/cli/cli-commands/coder.d.ts +1 -0
  179. package/umd/src/cli/cli-commands/common/coderGitSyncCliOptions.d.ts +34 -0
  180. package/umd/src/cli/cli-commands/common/coderGitSyncCliOptions.test.d.ts +1 -0
  181. package/umd/src/cli/common/loadPromptsModule.d.ts +16 -0
  182. package/umd/src/llm-providers/anthropic-claude/AnthropicClaudeExecutionTools.d.ts +1 -1
  183. package/umd/src/llm-providers/azure-openai/AzureOpenAiExecutionTools.d.ts +1 -1
  184. package/umd/src/llm-providers/openai/OpenAiAgentKitExecutionTools.d.ts +1 -1
  185. package/umd/src/llm-providers/openai/OpenAiAgentKitExecutionToolsToolBuilder.d.ts +1 -1
  186. package/umd/src/llm-providers/openai/OpenAiAssistantExecutionToolsStreamRunner.d.ts +1 -1
  187. package/umd/src/llm-providers/openai/OpenAiAssistantExecutionToolsToolRunner.d.ts +1 -1
  188. package/umd/src/llm-providers/openai/OpenAiCompatibleNonChatPromptCaller.d.ts +1 -1
  189. package/umd/src/llm-providers/openai/OpenAiCompatibleRequestManager.d.ts +1 -1
  190. package/umd/src/llm-providers/openai/utils/callOpenAiCompatibleChatModel.d.ts +1 -1
  191. package/umd/src/llm-providers/openai/utils/loadOpenAiAgentsModule.d.ts +203 -0
  192. package/umd/src/llm-providers/openai/utils/uploadFilesToOpenAi.d.ts +1 -1
  193. package/umd/src/utils/misc/createLazyModuleLoader.d.ts +14 -0
  194. package/umd/src/version.d.ts +1 -1
  195. package/apps/agents-server/src/app/api/onboarding/draft/route.ts +0 -23
  196. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/BookLanguagePanel.tsx +0 -125
  197. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/MarkdownBookEditor.tsx +0 -154
  198. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/MarkdownPreview.tsx +0 -188
  199. package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/draftService.ts +0 -32
@@ -1,10 +1,19 @@
1
1
  import type { Socket } from 'socket.io-client';
2
- import { io } from 'socket.io-client';
3
2
  import { spaceTrim } from 'spacetrim';
4
3
  import { CONNECTION_RETRIES_LIMIT, CONNECTION_TIMEOUT_MS } from '../config';
4
+ import { createLazyModuleLoader } from '../utils/misc/createLazyModuleLoader';
5
5
  import { isValidUrl } from '../utils/validators/url/isValidUrl';
6
6
  import type { RemoteClientOptions } from './types/RemoteClientOptions';
7
7
 
8
+ /**
9
+ * Loads the Socket.io client (`socket.io-client`) on demand
10
+ *
11
+ * Note: [🐌] Loaded lazily to keep the startup of the `ptbk` CLI utility fast
12
+ *
13
+ * @private internal utility of `createRemoteClient`
14
+ */
15
+ const loadSocketIoClientModule = createLazyModuleLoader(() => import('socket.io-client'));
16
+
8
17
  /**
9
18
  * Creates a connection to the remote proxy server.
10
19
  *
@@ -44,6 +53,8 @@ export async function createRemoteClient<TCustomOptions = undefined>(
44
53
  );
45
54
  }
46
55
 
56
+ const { io } = await loadSocketIoClientModule();
57
+
47
58
  return new Promise((resolve, reject) => {
48
59
  const socket = io(remoteServerUrl, {
49
60
  retries: CONNECTION_RETRIES_LIMIT,
@@ -4,8 +4,6 @@ import type { Converter } from '../_common/Converter';
4
4
  import type { Scraper, ScraperSourceHandler } from '../_common/Scraper';
5
5
  // TODO: [🏳‍🌈] Finally take pick of .json vs .ts
6
6
  // import PipelineCollection from '../../../books/books';
7
- import { Readability } from '@mozilla/readability';
8
- import { JSDOM } from 'jsdom';
9
7
  import type { Converter as ShowdownConverter } from 'showdown';
10
8
  import { DEFAULT_INTERMEDIATE_FILES_STRATEGY, DEFAULT_IS_VERBOSE, DEFAULT_SCRAPE_CACHE_DIRNAME } from '../../config';
11
9
  import { EnvironmentMismatchError } from '../../errors/EnvironmentMismatchError';
@@ -13,6 +11,7 @@ import { KnowledgeScrapeError } from '../../errors/KnowledgeScrapeError';
13
11
  import { UnexpectedError } from '../../errors/UnexpectedError';
14
12
  import type { ExecutionTools } from '../../execution/ExecutionTools';
15
13
  import type { PrepareAndScrapeOptions } from '../../prepare/PrepareAndScrapeOptions';
14
+ import { createLazyModuleLoader } from '../../utils/misc/createLazyModuleLoader';
16
15
  import { MarkdownScraper } from '../markdown/MarkdownScraper';
17
16
  import type { ScraperAndConverterMetadata } from '../_common/register/ScraperAndConverterMetadata';
18
17
  import type { ScraperIntermediateSource } from '../_common/ScraperIntermediateSource';
@@ -20,6 +19,25 @@ import { getScraperIntermediateSource } from '../_common/utils/getScraperInterme
20
19
  import { websiteScraperMetadata } from './register-metadata';
21
20
  import { createShowdownConverter } from './utils/createShowdownConverter';
22
21
 
22
+ /**
23
+ * Loads `jsdom` on demand
24
+ *
25
+ * Note: [🐌] `jsdom` is by far the heaviest dependency of Promptbook, loading it eagerly would slow down every single
26
+ * run of the `ptbk` CLI utility even when no website is scraped
27
+ *
28
+ * @private internal utility of `WebsiteScraper`
29
+ */
30
+ const loadJsdomModule = createLazyModuleLoader(() => import('jsdom'));
31
+
32
+ /**
33
+ * Loads `@mozilla/readability` on demand
34
+ *
35
+ * Note: [🐌] Loaded lazily to keep the startup of the `ptbk` CLI utility fast
36
+ *
37
+ * @private internal utility of `WebsiteScraper`
38
+ */
39
+ const loadReadabilityModule = createLazyModuleLoader(() => import('@mozilla/readability'));
40
+
23
41
  /**
24
42
  * Scraper for websites
25
43
  *
@@ -77,6 +95,8 @@ export class WebsiteScraper implements Converter, Scraper {
77
95
  throw new EnvironmentMismatchError('Can not scrape websites without filesystem tools');
78
96
  }
79
97
 
98
+ const [{ JSDOM }, { Readability }] = await Promise.all([loadJsdomModule(), loadReadabilityModule()]);
99
+
80
100
  const jsdom = new JSDOM(await source.asText(), {
81
101
  url: source.url,
82
102
  });
@@ -21,6 +21,11 @@ type RuntimeLogEvent = {
21
21
  readonly text?: string;
22
22
  }>;
23
23
  };
24
+ readonly item?: {
25
+ readonly type?: string;
26
+ readonly command?: string;
27
+ readonly exit_code?: number | null;
28
+ };
24
29
  };
25
30
 
26
31
  /**
@@ -89,6 +94,11 @@ function parseRuntimeLogEvent(line: string): RuntimeLogEvent | null {
89
94
  * @private internal helper of `resolveAgentMessageRuntimeActivity`
90
95
  */
91
96
  function resolveRuntimeLogEventActivity(event: RuntimeLogEvent): string | null {
97
+ const codexActivity = resolveCodexRuntimeLogEventActivity(event);
98
+ if (codexActivity) {
99
+ return codexActivity;
100
+ }
101
+
92
102
  if (event.type !== 'assistant' || !Array.isArray(event.message?.content)) {
93
103
  return null;
94
104
  }
@@ -103,6 +113,97 @@ function resolveRuntimeLogEventActivity(event: RuntimeLogEvent): string | null {
103
113
  return assistantText.length > 0 ? assistantText : null;
104
114
  }
105
115
 
116
+ /**
117
+ * Resolves one short user-facing status from a structured Codex JSONL event.
118
+ *
119
+ * Codex reasoning and raw command text deliberately remain private. The event type tells us
120
+ * enough to report a useful action without exposing the internal trace or a command payload.
121
+ *
122
+ * @private internal helper of `resolveAgentMessageRuntimeActivity`
123
+ */
124
+ function resolveCodexRuntimeLogEventActivity(event: RuntimeLogEvent): string | null {
125
+ if (!event.item || !isCodexItemEvent(event.type)) {
126
+ return null;
127
+ }
128
+
129
+ const isCompleted = event.type === 'item.completed';
130
+
131
+ switch (event.item.type) {
132
+ case 'reasoning':
133
+ return isCompleted ? 'Considered the request.' : 'Considering the request.';
134
+ case 'command_execution':
135
+ return resolveCodexCommandActivity(event.item.command, isCompleted, event.item.exit_code);
136
+ case 'file_change':
137
+ return isCompleted ? 'Updated relevant files.' : 'Updating relevant files.';
138
+ case 'web_search':
139
+ return isCompleted ? 'Finished searching the web.' : 'Searching the web.';
140
+ case 'mcp_tool_call':
141
+ return isCompleted ? 'Finished using an integration.' : 'Using an integration.';
142
+ case 'plan_update':
143
+ return isCompleted ? 'Updated the plan.' : 'Planning the work.';
144
+ default:
145
+ return null;
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Returns whether one runtime event is a Codex item lifecycle event.
151
+ *
152
+ * @private internal helper of `resolveAgentMessageRuntimeActivity`
153
+ */
154
+ function isCodexItemEvent(eventType: string | undefined): boolean {
155
+ return eventType === 'item.started' || eventType === 'item.updated' || eventType === 'item.completed';
156
+ }
157
+
158
+ /**
159
+ * Maps one Codex command event to a concise action without revealing the command itself.
160
+ *
161
+ * @private internal helper of `resolveAgentMessageRuntimeActivity`
162
+ */
163
+ function resolveCodexCommandActivity(
164
+ command: string | undefined,
165
+ isCompleted: boolean,
166
+ exitCode: number | null | undefined,
167
+ ): string {
168
+ if (isCompleted && exitCode !== undefined && exitCode !== null && exitCode !== 0) {
169
+ return 'A command needs attention.';
170
+ }
171
+
172
+ const activity = resolveCodexCommandActivityLabel(command);
173
+ return isCompleted ? activity.completed : activity.running;
174
+ }
175
+
176
+ /**
177
+ * Resolves the short running/completed labels for one safe command category.
178
+ *
179
+ * @private internal helper of `resolveAgentMessageRuntimeActivity`
180
+ */
181
+ function resolveCodexCommandActivityLabel(command: string | undefined): { running: string; completed: string } {
182
+ const normalizedCommand = command?.toLowerCase() || '';
183
+
184
+ if (/(^|\s)(npm\s+(?:run\s+)?test|pnpm\s+(?:run\s+)?test|yarn\s+test|jest|vitest|pytest)\b/u.test(normalizedCommand)) {
185
+ return { running: 'Running tests.', completed: 'Finished running tests.' };
186
+ }
187
+
188
+ if (/(^|\s)(npm\s+run\s+build|pnpm\s+(?:run\s+)?build|yarn\s+build|next\s+build)\b/u.test(normalizedCommand)) {
189
+ return { running: 'Building the project.', completed: 'Finished building the project.' };
190
+ }
191
+
192
+ if (/(^|\s)(npm|pnpm|yarn)\s+(?:install|add)\b/u.test(normalizedCommand)) {
193
+ return { running: 'Installing dependencies.', completed: 'Finished installing dependencies.' };
194
+ }
195
+
196
+ if (/(^|\s)git\s+(?:status|diff|log|show)\b/u.test(normalizedCommand)) {
197
+ return { running: 'Reviewing changes.', completed: 'Finished reviewing changes.' };
198
+ }
199
+
200
+ if (/(^|\s)(ls|find|rg|grep|sed|cat|head|tail)\b/u.test(normalizedCommand)) {
201
+ return { running: 'Inspecting relevant files.', completed: 'Finished inspecting relevant files.' };
202
+ }
203
+
204
+ return { running: 'Running a task.', completed: 'Finished a task.' };
205
+ }
206
+
106
207
  /**
107
208
  * Collapses one activity string to a single trimmed line, truncated for the progress card.
108
209
  *
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Creates a loader which imports one module on the first call and reuses the very same module afterwards
3
+ *
4
+ * Note: [🐌] Heavy third-party dependencies are imported lazily to keep the startup of the Promptbook CLI fast.
5
+ * A statically imported dependency is loaded every single time the bundle is loaded, even when the running
6
+ * command never touches it. A lazily imported dependency is loaded only when the feature is really used.
7
+ *
8
+ * @example
9
+ * const loadJsdomModule = createLazyModuleLoader(() => import('jsdom'));
10
+ * const { JSDOM } = await loadJsdomModule();
11
+ *
12
+ * @private internal utility of Promptbook
13
+ */
14
+ export function createLazyModuleLoader<TModule>(importModule: () => Promise<TModule>): () => Promise<TModule> {
15
+ let importedModulePromise: Promise<TModule> | null = null;
16
+
17
+ return function loadModule(): Promise<TModule> {
18
+ if (importedModulePromise === null) {
19
+ importedModulePromise = importModule();
20
+ }
21
+
22
+ return importedModulePromise;
23
+ };
24
+ }
25
+
26
+ // Note: [🐌] Do not convert the lazy `import(...)` calls back to static `import` statements, it would bring back the
27
+ // slow startup of the `ptbk` CLI utility
package/src/version.ts CHANGED
@@ -16,11 +16,11 @@ export const BOOK_LANGUAGE_VERSION: string_semantic_version = '2.0.0';
16
16
  * @generated
17
17
  * @see https://github.com/webgptorg/promptbook
18
18
  */
19
- export const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version = '0.114.0-1';
19
+ export const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version = '0.114.0-3';
20
20
 
21
21
  /**
22
22
  * Represents the version string of the Promptbook engine.
23
- * It follows semantic versioning (e.g., `0.113.1-0`).
23
+ * It follows semantic versioning (e.g., `0.114.0-2`).
24
24
  *
25
25
  * @generated
26
26
  */
package/src/versions.txt CHANGED
@@ -1179,4 +1179,5 @@
1179
1179
  0.113.0-14
1180
1180
  0.113.0
1181
1181
  0.113.1-0
1182
- 0.114.0-1
1182
+ 0.114.0-2
1183
+ 0.114.0-3