@promptbook/cli 0.113.0-1 → 0.113.0-11

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 (735) hide show
  1. package/README.md +1 -17
  2. package/agents/default/developer.book +3 -0
  3. package/apps/agents-server/next.config.ts +6 -3
  4. package/apps/agents-server/src/app/admin/{code-runners/CodeRunnersClient.tsx → harness-auth/HarnessAuthClient.tsx} +98 -65
  5. package/apps/agents-server/src/app/admin/{code-runners → harness-auth}/page.tsx +4 -4
  6. package/apps/agents-server/src/app/admin/resource-monitor/page.tsx +456 -0
  7. package/apps/agents-server/src/app/admin/task-manager/TaskManagerClient.tsx +17 -5
  8. package/apps/agents-server/src/app/admin/task-manager/TaskManagerTaskLogActions.tsx +150 -0
  9. package/apps/agents-server/src/app/admin/task-manager/TaskManagerTaskRow.tsx +62 -18
  10. package/apps/agents-server/src/app/admin/task-manager/TaskManagerTaskTerminalDialog.tsx +125 -0
  11. package/apps/agents-server/src/app/admin/task-manager/TaskManagerTasksCard.tsx +8 -6
  12. package/apps/agents-server/src/app/admin/task-manager/page.tsx +3 -2
  13. package/apps/agents-server/src/app/admin/update/AdvancedOriginRepositoryPanel.tsx +81 -0
  14. package/apps/agents-server/src/app/admin/update/AutomaticSelfUpdateConfigurationCard.tsx +90 -0
  15. package/apps/agents-server/src/app/admin/update/CurrentDeploymentCard.tsx +162 -0
  16. package/apps/agents-server/src/app/admin/update/CustomCommitPicker.tsx +10 -10
  17. package/apps/agents-server/src/app/admin/update/InstalledVersionsCard.tsx +112 -0
  18. package/apps/agents-server/src/app/admin/update/PendingCommitsCard.tsx +87 -0
  19. package/apps/agents-server/src/app/admin/update/TargetEnvironmentCard.tsx +331 -0
  20. package/apps/agents-server/src/app/admin/update/UpdateClient.tsx +35 -878
  21. package/apps/agents-server/src/app/admin/update/UpdateDatabaseMigrationsPanel.tsx +305 -0
  22. package/apps/agents-server/src/app/admin/update/UpdateJobCard.tsx +350 -0
  23. package/apps/agents-server/src/app/admin/update/UpdateOverview.ts +142 -0
  24. package/apps/agents-server/src/app/admin/update/buildDeploymentTimeBehindLabel.ts +29 -0
  25. package/apps/agents-server/src/app/admin/update/formatHumanReadableTimestamp.ts +18 -0
  26. package/apps/agents-server/src/app/admin/update/getUpdateJobFailureMessage.ts +13 -0
  27. package/apps/agents-server/src/app/admin/update/getUpdateJobSuccessMessage.ts +13 -0
  28. package/apps/agents-server/src/app/admin/update/updatePageCardClassName.ts +6 -0
  29. package/apps/agents-server/src/app/admin/update/useUpdateClientState.ts +675 -0
  30. package/apps/agents-server/src/app/agents/[agentName]/AgentChatWrapper.tsx +17 -3
  31. package/apps/agents-server/src/app/agents/[agentName]/api/book/route.ts +13 -1
  32. package/apps/agents-server/src/app/agents/[agentName]/chat/CanonicalAgentChatSurface.tsx +6 -2
  33. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/AgentCodePageClient.tsx +14 -559
  34. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/AgentCodePageHeader.tsx +84 -0
  35. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/AgentCodePageSection.tsx +52 -0
  36. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/GeneratedCodePreview.tsx +138 -0
  37. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/GeneratedHarnessSection.tsx +98 -0
  38. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/SourceBookSection.tsx +66 -0
  39. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/TranspiledCodeErrorBanner.tsx +30 -0
  40. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/TranspiledCodeExportWarningBanner.tsx +62 -0
  41. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/Transpiler.ts +9 -0
  42. package/apps/agents-server/src/app/agents/[agentName]/export-as-transpiled-code/useAgentCodeExportState.ts +478 -0
  43. package/apps/agents-server/src/app/api/admin/chat-tasks/[taskId]/terminal/route.ts +52 -0
  44. package/apps/agents-server/src/app/api/admin/{code-runners → harness-auth}/authentication/route.ts +17 -17
  45. package/apps/agents-server/src/app/api/admin/{code-runners → harness-auth}/route.ts +13 -13
  46. package/apps/agents-server/src/app/api/admin/update/route.ts +55 -8
  47. package/apps/agents-server/src/app/api/admin/update/versions/route.ts +34 -0
  48. package/apps/agents-server/src/app/api/auth/shibboleth/acs/route.ts +4 -2
  49. package/apps/agents-server/src/app/api/auth/shibboleth/login/route.ts +3 -1
  50. package/apps/agents-server/src/app/api/auth/shibboleth/metadata/route.ts +5 -2
  51. package/apps/agents-server/src/app/api/auth/shibboleth/status/route.ts +5 -2
  52. package/apps/agents-server/src/app/api/page-preview/check/route.ts +20 -5
  53. package/apps/agents-server/src/app/api/page-preview/input/route.ts +161 -0
  54. package/apps/agents-server/src/app/api/page-preview/screenshot/route.ts +21 -13
  55. package/apps/agents-server/src/app/api/page-preview/stream/route.ts +81 -0
  56. package/apps/agents-server/src/app/layout.tsx +55 -25
  57. package/apps/agents-server/src/app/system/utilities/mocked-chats/cloneMockedChatPreset.ts +17 -0
  58. package/apps/agents-server/src/app/system/utilities/mocked-chats/confirmDeleteMockedChat.ts +16 -0
  59. package/apps/agents-server/src/app/system/utilities/mocked-chats/createDraftWithUpdatedMessage.ts +81 -0
  60. package/apps/agents-server/src/app/system/utilities/mocked-chats/createDraftWithUpdatedParticipant.ts +146 -0
  61. package/apps/agents-server/src/app/system/utilities/mocked-chats/createDraftWithUpdatedSettings.ts +19 -0
  62. package/apps/agents-server/src/app/system/utilities/mocked-chats/createDuplicatedDraft.ts +66 -0
  63. package/apps/agents-server/src/app/system/utilities/mocked-chats/findMockedChatById.ts +51 -0
  64. package/apps/agents-server/src/app/system/utilities/mocked-chats/persistMockedChats.ts +51 -0
  65. package/apps/agents-server/src/app/system/utilities/mocked-chats/useMockedChatsEditorState.ts +16 -426
  66. package/apps/agents-server/src/components/AdminTerminal/AdminTerminalCard.tsx +32 -24
  67. package/apps/agents-server/src/components/AgentAvatar/AgentAvatar.tsx +1 -1
  68. package/apps/agents-server/src/components/AgentAvatar/DefaultAgentAvatarVisualProvider.tsx +1 -1
  69. package/apps/agents-server/src/components/CronJobConfiguration/CronJobConfiguration.tsx +834 -0
  70. package/apps/agents-server/src/components/Footer/Footer.tsx +38 -15
  71. package/apps/agents-server/src/components/Header/Header.tsx +16 -3
  72. package/apps/agents-server/src/components/Header/HeaderDesktopTopMenuNavigation.tsx +22 -2
  73. package/apps/agents-server/src/components/Header/HeaderHomepageLink.tsx +1 -1
  74. package/apps/agents-server/src/components/Header/HeaderMobileDrawer.tsx +22 -2
  75. package/apps/agents-server/src/components/Header/HeaderTypes.ts +12 -1
  76. package/apps/agents-server/src/components/Header/buildAgentMenuStructure.tsx +6 -4
  77. package/apps/agents-server/src/components/Header/buildDocumentationDropdownItems.tsx +198 -3
  78. package/apps/agents-server/src/components/Header/buildHeaderMenuItems.ts +6 -0
  79. package/apps/agents-server/src/components/Header/buildHeaderSystemMenuItems.ts +185 -18
  80. package/apps/agents-server/src/components/Homepage/buildFreeGraphBoxLayout.ts +446 -0
  81. package/apps/agents-server/src/components/Homepage/buildGraphLayoutNodes.ts +415 -157
  82. package/apps/agents-server/src/components/Homepage/useAgentsGraphCanvasState.ts +2 -1
  83. package/apps/agents-server/src/components/Homepage/useAgentsListState.ts +1 -1
  84. package/apps/agents-server/src/components/LayoutWrapper/LayoutWrapper.tsx +25 -6
  85. package/apps/agents-server/src/constants/defaultAgentAvatarVisual.ts +4 -3
  86. package/apps/agents-server/src/constants/harnessAuthRoutes.ts +20 -0
  87. package/apps/agents-server/src/database/metadataDefaults.ts +1 -1
  88. package/apps/agents-server/src/database/migrate.ts +25 -1
  89. package/apps/agents-server/src/database/migratePrefix.ts +24 -0
  90. package/apps/agents-server/src/database/runDatabaseMigrations.ts +9 -1
  91. package/apps/agents-server/src/database/sqlite/$provideLocalSqliteSupabase.ts +3 -1541
  92. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/LocalSqliteQueryBuilder.ts +623 -0
  93. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/LocalSqliteSupabaseClient.ts +64 -0
  94. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/ensureTable.ts +93 -0
  95. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/localSqliteFilters.ts +202 -0
  96. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/localSqliteMutationPayload.ts +131 -0
  97. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/localSqliteRowOperations.ts +102 -0
  98. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/localSqliteSql.ts +59 -0
  99. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/localSqliteTableSchema.ts +329 -0
  100. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/localSqliteTypes.ts +84 -0
  101. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/localSqliteValueCodec.ts +63 -0
  102. package/apps/agents-server/src/database/sqlite/localSqliteSupabase/normalizeSqliteError.ts +22 -0
  103. package/apps/agents-server/src/instrumentation-node.ts +15 -0
  104. package/apps/agents-server/src/languages/ServerTranslationKeys.ts +2 -1
  105. package/apps/agents-server/src/languages/translations/czech.yaml +3 -2
  106. package/apps/agents-server/src/languages/translations/english.yaml +2 -1
  107. package/apps/agents-server/src/search/createDefaultServerSearchProviders/loadLocalOrganizationSearchDataset.ts +12 -1
  108. package/apps/agents-server/src/tools/send_email.ts +1 -2
  109. package/apps/agents-server/src/{components/Homepage → utils/agentOrganization}/hiddenFolders.ts +49 -29
  110. package/apps/agents-server/src/utils/agentOrganization/loadAgentOrganizationState.ts +13 -1
  111. package/apps/agents-server/src/utils/backup/createServerBackupZipStream.ts +7 -1382
  112. package/apps/agents-server/src/utils/backup/serverBackup/appendAgentBackupEntriesToZip.ts +27 -0
  113. package/apps/agents-server/src/utils/backup/serverBackup/appendConversationBackupEntriesToZip.ts +140 -0
  114. package/apps/agents-server/src/utils/backup/serverBackup/appendFileBackupEntriesToZip.ts +147 -0
  115. package/apps/agents-server/src/utils/backup/serverBackup/appendMessageBackupEntriesToZip.ts +65 -0
  116. package/apps/agents-server/src/utils/backup/serverBackup/appendMetadataBackupEntriesToZip.ts +39 -0
  117. package/apps/agents-server/src/utils/backup/serverBackup/appendSectionEntriesToZip.ts +92 -0
  118. package/apps/agents-server/src/utils/backup/serverBackup/appendUserBackupEntriesToZip.ts +80 -0
  119. package/apps/agents-server/src/utils/backup/serverBackup/createRedactedWalletBackupRecord.ts +34 -0
  120. package/apps/agents-server/src/utils/backup/serverBackup/createServerBackupManifest.ts +82 -0
  121. package/apps/agents-server/src/utils/backup/serverBackup/downloadBackupBinaryContent.ts +39 -0
  122. package/apps/agents-server/src/utils/backup/serverBackup/resolveFeedbackThreadMessages.ts +53 -0
  123. package/apps/agents-server/src/utils/backup/serverBackup/serverBackupAttachments.ts +151 -0
  124. package/apps/agents-server/src/utils/backup/serverBackup/serverBackupContext.ts +167 -0
  125. package/apps/agents-server/src/utils/backup/serverBackup/serverBackupFilenames.ts +161 -0
  126. package/apps/agents-server/src/utils/backup/serverBackup/serverBackupPreviews.ts +97 -0
  127. package/apps/agents-server/src/utils/backup/serverBackup/serverBackupRowUtilities.ts +158 -0
  128. package/apps/agents-server/src/utils/backup/serverBackup/serverBackupTypes.ts +59 -0
  129. package/apps/agents-server/src/utils/chat/createAttachmentAwareCitationLabelResolver.ts +147 -0
  130. package/apps/agents-server/src/utils/chatTasksAdmin.ts +3 -2
  131. package/apps/agents-server/src/utils/createLocalAgentSourceImporter.ts +159 -0
  132. package/apps/agents-server/src/utils/createMissingImportedAgentFallback.ts +60 -0
  133. package/apps/agents-server/src/utils/createPagePreviewBrowserStream.ts +179 -0
  134. package/apps/agents-server/src/utils/customDomainRouting.ts +157 -12
  135. package/apps/agents-server/src/utils/externalChatRunner/processExternalUserChatJob.ts +12 -6
  136. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/GetAdminChatTasksData.ts +12 -0
  137. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/adminChatTaskSqlQuery.ts +264 -0
  138. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/adminChatTaskSqlValues.ts +35 -0
  139. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/adminChatTaskTimeUtilities.ts +30 -0
  140. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/compareAdminChatTasks.ts +135 -0
  141. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/createAdminChatTaskCounters.ts +29 -0
  142. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/filterAdminChatTasks.ts +78 -0
  143. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/getAdminChatTasksViaClientSql.ts +62 -0
  144. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/getAdminChatTasksViaSupabaseQuery.ts +29 -0
  145. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/loadAdminChatTaskFallbackData.ts +193 -0
  146. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/mapAdminChatTaskFallbackRows.ts +99 -0
  147. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/mapAdminChatTaskSqlRows.ts +94 -0
  148. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks.ts +4 -947
  149. package/apps/agents-server/src/utils/getAdminChatTasksResponse/mapVpsSelfUpdateJobToAdminChatTask.ts +18 -5
  150. package/apps/agents-server/src/utils/getAdminChatTasksResponse.ts +103 -41
  151. package/apps/agents-server/src/utils/{codeRunnerAuthentication.ts → harnessAuthentication.ts} +72 -56
  152. package/apps/agents-server/src/utils/{codeRunnerConfiguration.ts → harnessConfiguration.ts} +18 -12
  153. package/apps/agents-server/src/utils/importAgentWithFallback.ts +1 -58
  154. package/apps/agents-server/src/utils/localAgentRouteReferences.ts +167 -0
  155. package/apps/agents-server/src/utils/localChatRunner/processLocalUserChatJob.ts +21 -6
  156. package/apps/agents-server/src/utils/managementApi/managementApiAgents.ts +17 -3
  157. package/apps/agents-server/src/utils/messages/sendMessage.ts +5 -3
  158. package/apps/agents-server/src/utils/pagePreviewBrowserSessions.ts +246 -0
  159. package/apps/agents-server/src/utils/resolveAgentStateFromSource.ts +7 -1
  160. package/apps/agents-server/src/utils/resolveInheritedAgentSource.ts +54 -5
  161. package/apps/agents-server/src/utils/resolveServerAgentContext.ts +12 -1
  162. package/apps/agents-server/src/utils/resolveStoredAgentState.ts +2 -1
  163. package/apps/agents-server/src/utils/resourceMonitor/formatResourceMonitorValue.ts +50 -0
  164. package/apps/agents-server/src/utils/resourceMonitor/readCpuResourceUsage.ts +75 -0
  165. package/apps/agents-server/src/utils/resourceMonitor/readDiskResourceUsage.ts +42 -0
  166. package/apps/agents-server/src/utils/resourceMonitor/readMemoryResourceUsage.ts +28 -0
  167. package/apps/agents-server/src/utils/resourceMonitor/readNetworkResourceUsage.ts +271 -0
  168. package/apps/agents-server/src/utils/resourceMonitor/readServerResourceMonitorSnapshot.ts +47 -0
  169. package/apps/agents-server/src/utils/resourceMonitor/resolveServerResourceWarningStatus.ts +72 -0
  170. package/apps/agents-server/src/utils/resourceMonitor/resourceMonitorConstants.ts +29 -0
  171. package/apps/agents-server/src/utils/resourceMonitor/resourceMonitorTypes.ts +155 -0
  172. package/apps/agents-server/src/utils/resourceMonitor/waitForResourceMonitorSample.ts +11 -0
  173. package/apps/agents-server/src/utils/shibbolethAuthentication/createShibbolethSamlClient.ts +35 -0
  174. package/apps/agents-server/src/utils/shibbolethAuthentication/createShibbolethServiceProviderMetadataXml.ts +25 -0
  175. package/apps/agents-server/src/utils/shibbolethAuthentication/extractShibbolethProfileAttributes.ts +173 -0
  176. package/apps/agents-server/src/utils/shibbolethAuthentication/fetchIdentityProviderMetadataXml.ts +21 -0
  177. package/apps/agents-server/src/utils/shibbolethAuthentication/findOrCreateShibbolethUser.ts +323 -0
  178. package/apps/agents-server/src/utils/shibbolethAuthentication/getShibbolethAuthenticationAttemptTableName.ts +13 -0
  179. package/apps/agents-server/src/utils/shibbolethAuthentication/getShibbolethRequestDetails.ts +19 -0
  180. package/apps/agents-server/src/utils/shibbolethAuthentication/getShibbolethUserIdentityTableName.ts +13 -0
  181. package/apps/agents-server/src/utils/shibbolethAuthentication/parseIdentityProviderMetadataXml.ts +110 -0
  182. package/apps/agents-server/src/utils/shibbolethAuthentication/recordShibbolethAuthenticationAttempt.ts +57 -0
  183. package/apps/agents-server/src/utils/shibbolethAuthentication/resolveShibbolethAuthenticationConfiguration.ts +78 -0
  184. package/apps/agents-server/src/utils/shibbolethAuthentication/resolveShibbolethPublicRequestUrl.ts +101 -0
  185. package/apps/agents-server/src/utils/shibbolethAuthentication/resolveShibbolethServiceProviderUrls.ts +63 -0
  186. package/apps/agents-server/src/utils/shibbolethAuthentication/sanitizeShibbolethRelayState.ts +17 -0
  187. package/apps/agents-server/src/utils/shibbolethAuthentication/shibbolethAuthenticationConstants.ts +62 -0
  188. package/apps/agents-server/src/utils/shibbolethAuthentication/shibbolethAuthenticationTypes.ts +105 -0
  189. package/apps/agents-server/src/utils/shibbolethAuthentication.ts +25 -957
  190. package/apps/agents-server/src/utils/speech-to-text/SpeechToTextFailoverRecognition/SpeechToTextFailoverRecognitionProviderRuntime.ts +0 -1
  191. package/apps/agents-server/src/utils/speech-to-text/SpeechToTextFailoverRecognition.ts +34 -2
  192. package/apps/agents-server/src/utils/taskTerminal/resolveAdminTaskTerminalSession.ts +535 -0
  193. package/apps/agents-server/src/utils/taskTerminal/runWithTaskTerminalCapture.ts +134 -0
  194. package/apps/agents-server/src/utils/taskTerminal/taskTerminalLog.ts +360 -0
  195. package/apps/agents-server/src/utils/userChat/finalizeUserChatJob.ts +16 -0
  196. package/apps/agents-server/src/utils/userChat/userChatMessageLifecycle.ts +39 -9
  197. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutStore/updateUserChatTimeoutTerminalState.ts +3 -0
  198. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutWorker.ts +4 -1
  199. package/apps/agents-server/src/utils/vpsConfiguration.ts +7 -3
  200. package/apps/agents-server/src/utils/vpsSelfUpdate/deleteVpsSelfUpdateInstalledVersion.ts +81 -0
  201. package/apps/agents-server/src/utils/vpsSelfUpdate/listVpsSelfUpdateCandidateCommits.ts +217 -0
  202. package/apps/agents-server/src/utils/vpsSelfUpdate/readAgentsServerFooterVersion.ts +335 -0
  203. package/apps/agents-server/src/utils/vpsSelfUpdate/readPersistedVpsSelfUpdateJob.ts +310 -0
  204. package/apps/agents-server/src/utils/vpsSelfUpdate/readVpsSelfUpdateOverview.ts +178 -0
  205. package/apps/agents-server/src/utils/vpsSelfUpdate/resolveVpsSelfUpdateJobForOverview.ts +42 -0
  206. package/apps/agents-server/src/utils/vpsSelfUpdate/startVpsSelfUpdate.ts +201 -0
  207. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateAutomaticConfiguration.ts +152 -0
  208. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateConfiguration.ts +81 -0
  209. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateCron.ts +357 -0
  210. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateEnvironment.ts +120 -0
  211. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateInstalledVersions.ts +162 -0
  212. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateJobConstants.ts +15 -0
  213. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateJobHistory.ts +490 -0
  214. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateJobIdentity.ts +26 -0
  215. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateOriginRepository.ts +90 -0
  216. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateRepository.ts +286 -0
  217. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateScheduler.ts +191 -0
  218. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateStateFiles.ts +197 -0
  219. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateTypes.ts +452 -0
  220. package/apps/agents-server/src/utils/vpsSelfUpdate.ts +66 -1547
  221. package/apps/agents-server/tests/e2e/support/ChatHistoryNavigationSupport.ts +5 -0
  222. package/esm/apps/agents-server/src/database/migratePrefix.d.ts +19 -0
  223. package/esm/apps/agents-server/src/database/runDatabaseMigrations.d.ts +4 -0
  224. package/esm/book/scripts/import-markdown/increaseHeadings.d.ts +8 -0
  225. package/esm/index.es.js +30174 -28539
  226. package/esm/index.es.js.map +1 -1
  227. package/esm/scripts/find-refactor-candidates/find-refactor-candidates.d.ts +7 -0
  228. package/esm/scripts/find-refactor-candidates/selectMostImportantRefactorCandidates.d.ts +12 -0
  229. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages/MultipleAgentAutoPuller.d.ts +27 -0
  230. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages/MultipleAgentGithubSynchronizer.d.ts +26 -0
  231. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages/MultipleAgentRunUiPresenter.d.ts +66 -0
  232. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages/RunMultipleAgentMessageTaskScheduler.d.ts +67 -0
  233. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages/formatProjectPath.d.ts +6 -0
  234. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages/loadLocalAgentRunnerProjectSummaries.d.ts +11 -0
  235. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages/wait.d.ts +6 -0
  236. package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages.d.ts +1 -1
  237. package/esm/scripts/run-codex-prompts/common/buildCoderRunProgressSnapshot.d.ts +1 -1
  238. package/esm/scripts/run-codex-prompts/common/cliProgressDisplay.d.ts +2 -1
  239. package/esm/scripts/run-codex-prompts/common/resolveCoderAgent.d.ts +20 -0
  240. package/esm/scripts/run-codex-prompts/common/sleepWithCountdown.d.ts +1 -0
  241. package/esm/scripts/run-codex-prompts/common/waitUntilWorldTimeDeadline.d.ts +17 -0
  242. package/esm/scripts/run-codex-prompts/runners/claude-code/ClaudeCodeRunner.d.ts +4 -0
  243. package/esm/scripts/run-codex-prompts/runners/claude-code/ClaudeCodeSessionResurrection.d.ts +37 -0
  244. package/esm/scripts/run-codex-prompts/runners/claude-code/parseClaudeCodeOutputEvents.d.ts +47 -0
  245. package/esm/scripts/run-codex-prompts/ui/CoderRunUiState.d.ts +8 -1
  246. package/esm/scripts/run-codex-prompts/ui/buildCoderRunAgentVisual.d.ts +41 -0
  247. package/esm/scripts/run-codex-prompts/ui/buildCoderRunUiFrame.d.ts +10 -0
  248. package/esm/scripts/run-codex-prompts/ui/coderRunUiRefresh.d.ts +2 -2
  249. package/esm/src/_packages/types.index.d.ts +2 -2
  250. package/esm/src/avatars/renderAvatarVisualAsciiArt.d.ts +98 -0
  251. package/esm/src/avatars/visuals/octopus3dAvatarVisualShared.d.ts +1 -1
  252. package/esm/src/book-components/BookEditor/BookEditorMonacoUploadPanel.d.ts +1 -1
  253. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/bookEditorMonacoUploadTypes.d.ts +120 -0
  254. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/clearScheduledTimer.d.ts +6 -0
  255. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/enqueueFilesForUpload.d.ts +26 -0
  256. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadEditorSync.d.ts +23 -0
  257. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadItemsState.d.ts +21 -0
  258. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadProgressQueue.d.ts +12 -0
  259. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadQueue.d.ts +27 -0
  260. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads/useCompletedUploadsAutoClear.d.ts +12 -0
  261. package/esm/src/book-components/BookEditor/useBookEditorMonacoUploads.d.ts +5 -58
  262. package/esm/src/book-components/Chat/Chat/ChatImageAttachmentModal.d.ts +25 -0
  263. package/esm/src/book-components/Chat/Chat/ChatInputArea.d.ts +3 -0
  264. package/esm/src/book-components/Chat/Chat/ChatMessageAttachments.d.ts +27 -0
  265. package/esm/src/book-components/Chat/Chat/ChatMessageItem.d.ts +1 -1
  266. package/esm/src/book-components/Chat/Chat/ChatMessageList.d.ts +1 -0
  267. package/esm/src/book-components/Chat/Chat/ChatProps.d.ts +8 -0
  268. package/esm/src/book-components/Chat/Chat/CitationIframePreview.d.ts +1 -1
  269. package/esm/src/book-components/Chat/Chat/CitationIframePreview.test.d.ts +2 -0
  270. package/esm/src/book-components/Chat/Chat/insertDictationChunk.d.ts +1 -1
  271. package/esm/src/book-components/Chat/Chat/insertDictationChunk.test.d.ts +1 -0
  272. package/esm/src/book-components/Chat/Chat/learnDictationDictionary.test.d.ts +1 -0
  273. package/esm/src/book-components/Chat/Chat/refineFinalDictationChunk.test.d.ts +1 -0
  274. package/esm/src/book-components/Chat/Chat/useChatInputAreaComposer.d.ts +12 -0
  275. package/esm/src/book-components/Chat/Chat/useChatInputAreaComposer.draftMessage.test.d.ts +2 -0
  276. package/esm/src/book-components/Chat/utils/isVisibleChatToolCall.d.ts +1 -1
  277. package/esm/src/book-components/Chat/utils/parseMessageButtons.d.ts +16 -2
  278. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_BUILD_CACHE_FILENAME.d.ts +6 -0
  279. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_BUILD_CACHE_VERSION.d.ts +6 -0
  280. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_NEXT_BUILD_ID_FILENAME.d.ts +6 -0
  281. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/AgentsServerBuildCache.d.ts +10 -0
  282. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/AgentsServerBuildCacheOptions.d.ts +10 -0
  283. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/NODE_MODULES_DIRECTORY_NAME.d.ts +6 -0
  284. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/PreparedAgentsServerRuntime.d.ts +18 -0
  285. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerBuildSourceFingerprint.d.ts +6 -0
  286. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerRuntimeEnvironment.d.ts +28 -0
  287. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/ensureAgentsServerBuild.d.ts +19 -0
  288. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/getAgentsServerBuildInputRelativePaths.d.ts +11 -0
  289. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerAppPath.d.ts +6 -0
  290. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerAppPathMaterialized.d.ts +6 -0
  291. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerBuildCacheCurrent.d.ts +7 -0
  292. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerBuildInputTestFile.d.ts +6 -0
  293. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerBuildInputDirectoryName.d.ts +6 -0
  294. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerBuildInputPath.d.ts +6 -0
  295. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerRuntimeSourcePath.d.ts +6 -0
  296. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isFile.d.ts +6 -0
  297. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/isPathInsideNodeModules.d.ts +6 -0
  298. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/normalizeAgentsServerBuildInputPath.d.ts +6 -0
  299. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/prepareAgentsServerRuntime.d.ts +9 -0
  300. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/readAgentsServerBuildCache.d.ts +8 -0
  301. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerAppPath.d.ts +6 -0
  302. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerBuildAppPath.d.ts +9 -0
  303. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerBuildOutputPath.d.ts +7 -0
  304. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/resolveNextCliPath.d.ts +6 -0
  305. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/resolveNodeModulesPath.d.ts +6 -0
  306. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/runNextBuild.d.ts +12 -0
  307. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/shouldCopyAgentsServerRuntimePath.d.ts +6 -0
  308. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/synchronizeMaterializedAgentsServerRuntime.d.ts +11 -0
  309. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer/writeAgentsServerBuildCache.d.ts +7 -0
  310. package/esm/src/cli/cli-commands/agents-server/buildAgentsServer.d.ts +8 -109
  311. package/esm/src/cli/cli-commands/agents-server/ensureAgentsServerEnvFile.d.ts +1 -1
  312. package/esm/src/cli/cli-commands/agents-server/ensureAgentsServerGitignoreFile.d.ts +1 -1
  313. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerChildEnvironment.d.ts +16 -0
  314. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerLogStreams.d.ts +30 -0
  315. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerRuntimePaths.d.ts +19 -0
  316. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerSupervisorState.d.ts +37 -0
  317. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/LocalAgentRunnerLimits.d.ts +9 -0
  318. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/PreparedAgentsServerLaunch.d.ts +13 -0
  319. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/StartAgentsServerOptions.d.ts +24 -0
  320. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/createInternalRouteErrorMessage.d.ts +6 -0
  321. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/createLocalAgentRunOptions.d.ts +9 -0
  322. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/forwardChildOutput.d.ts +13 -0
  323. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/loadAgentsServerProjectEnvironment.d.ts +6 -0
  324. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/prepareAgentsServerLaunch.d.ts +18 -0
  325. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/readInternalRouteErrorDetails.d.ts +6 -0
  326. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/resolveAgentsServerChildHostname.d.ts +7 -0
  327. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/startNextServer.d.ts +20 -0
  328. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/startUserChatJobWorkerPump.d.ts +15 -0
  329. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/stopChildProcess.d.ts +8 -0
  330. package/esm/src/cli/cli-commands/agents-server/startAgentsServer/waitForLocalAgentRunnerLimits.d.ts +16 -0
  331. package/esm/src/cli/cli-commands/agents-server/startAgentsServer.d.ts +3 -30
  332. package/esm/src/cli/cli-commands/common/createPositiveIntegerOptionParser.d.ts +10 -0
  333. package/esm/src/cli/cli-commands/common/promptRunnerCliOptions.d.ts +1 -1
  334. package/esm/src/collection/agent-collection/CreateAgentInput.d.ts +1 -1
  335. package/esm/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.d.ts +1 -1
  336. package/esm/src/commitments/META/META.d.ts +2 -2
  337. package/esm/src/commitments/META_AVATAR/META_AVATAR.d.ts +9 -4
  338. package/esm/src/commitments/index.d.ts +1 -1
  339. package/esm/src/conversion/validation/validatePipeline/createPipelineValidationContext.d.ts +16 -0
  340. package/esm/src/conversion/validation/validatePipeline/validatePipelineCollectionsStructure.d.ts +7 -0
  341. package/esm/src/conversion/validation/validatePipeline/validatePipelineDependencyResolution.d.ts +7 -0
  342. package/esm/src/conversion/validation/validatePipeline/validatePipelineMetadata.d.ts +7 -0
  343. package/esm/src/conversion/validation/validatePipeline/validatePipelineParameters.d.ts +7 -0
  344. package/esm/src/conversion/validation/validatePipeline/validatePipelineTasks.d.ts +7 -0
  345. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/RegisteredLlmToolsMessageContext.d.ts +46 -0
  346. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/USED_ENV_FILENAME.d.ts +11 -0
  347. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolConfigurationStatusMessage.d.ts +7 -0
  348. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolEntryKey.d.ts +7 -0
  349. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolInstallationStatusMessage.d.ts +7 -0
  350. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolStatus.d.ts +14 -0
  351. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolsMessageContext.d.ts +7 -0
  352. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/getAvailableRegisteredLlmToolsEnvironmentVariables.d.ts +7 -0
  353. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/getRegisteredLlmToolRegisters.d.ts +7 -0
  354. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/hasRegisteredLlmToolEntry.d.ts +7 -0
  355. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/listRegisteredLlmToolEntries.d.ts +9 -0
  356. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/listRegisteredLlmToolStatuses.d.ts +7 -0
  357. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderAvailableRegisteredLlmTools.d.ts +7 -0
  358. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderNoRegisteredLlmToolsMessage.d.ts +7 -0
  359. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderRegisteredLlmToolsMessage.d.ts +8 -0
  360. package/esm/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderRelevantRegisteredLlmToolsEnvironmentVariables.d.ts +7 -0
  361. package/esm/src/utils/agent-message-runtime/agentMessageRuntimePaths.d.ts +24 -0
  362. package/esm/src/utils/agents/resolveAgentAvatarImageUrl.d.ts +2 -2
  363. package/esm/src/utils/agents/terminalAgentAvatarVisual.d.ts +94 -0
  364. package/esm/src/utils/agents/terminalAgentAvatarVisual.test.d.ts +1 -0
  365. package/esm/src/utils/ascii-art/$detectTerminalAnsiColorDepth.d.ts +15 -0
  366. package/esm/src/utils/ascii-art/convertImageDataToAsciiArt.d.ts +80 -0
  367. package/esm/src/utils/color/Color.d.ts +1 -1
  368. package/esm/src/version.d.ts +1 -1
  369. package/package.json +1 -1
  370. package/src/_packages/types.index.ts +2 -2
  371. package/src/avatars/Avatar.tsx +2 -13
  372. package/src/avatars/avatarAnimationScheduler.ts +2 -1
  373. package/src/avatars/renderAvatarVisual.ts +2 -13
  374. package/src/avatars/renderAvatarVisualAsciiArt.ts +257 -0
  375. package/src/avatars/visuals/asciiOctopusAvatarVisual.ts +1 -6
  376. package/src/avatars/visuals/avatarVisualRegistry.ts +1 -1
  377. package/src/avatars/visuals/minecraft2AvatarVisual.ts +1 -2
  378. package/src/avatars/visuals/octopus2AvatarVisual.ts +1 -5
  379. package/src/avatars/visuals/octopus3AvatarVisual.ts +1 -8
  380. package/src/avatars/visuals/octopus3d2AvatarVisual.ts +4 -13
  381. package/src/avatars/visuals/octopus3d3AvatarVisual.ts +10 -15
  382. package/src/avatars/visuals/octopus3d4AvatarVisual.ts +18 -31
  383. package/src/avatars/visuals/octopus3dAvatarVisual.ts +3 -3
  384. package/src/avatars/visuals/octopus3dAvatarVisualShared.ts +2 -7
  385. package/src/book-2.0/agent-source/parseAgentSource/applyMetaCommitment.ts +2 -1
  386. package/src/book-2.0/book-language-documentation/createStandaloneBookLanguageMarkdown.ts +3 -5
  387. package/src/book-3.0/CliAgent.ts +1 -7
  388. package/src/book-3.0/LiteAgent.ts +5 -5
  389. package/src/book-components/AvatarProfile/AvatarProfile/AvatarProfile.tsx +1 -4
  390. package/src/book-components/BookEditor/BookEditor.tsx +2 -2
  391. package/src/book-components/BookEditor/BookEditorAboutPromptbookInformation.tsx +3 -2
  392. package/src/book-components/BookEditor/BookEditorActionbar.tsx +1 -1
  393. package/src/book-components/BookEditor/BookEditorMonaco.tsx +2 -2
  394. package/src/book-components/BookEditor/BookEditorMonacoUploadPanel.tsx +1 -1
  395. package/src/book-components/BookEditor/useBookEditorMonacoLanguage.ts +1 -1
  396. package/src/book-components/BookEditor/useBookEditorMonacoStyles.ts +1 -1
  397. package/src/book-components/BookEditor/useBookEditorMonacoUploads/bookEditorMonacoUploadTypes.ts +147 -0
  398. package/src/book-components/BookEditor/useBookEditorMonacoUploads/clearScheduledTimer.ts +10 -0
  399. package/src/book-components/BookEditor/useBookEditorMonacoUploads/enqueueFilesForUpload.ts +209 -0
  400. package/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadEditorSync.ts +164 -0
  401. package/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadItemsState.ts +121 -0
  402. package/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadProgressQueue.ts +81 -0
  403. package/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadQueue.ts +360 -0
  404. package/src/book-components/BookEditor/useBookEditorMonacoUploads/useCompletedUploadsAutoClear.ts +47 -0
  405. package/src/book-components/BookEditor/useBookEditorMonacoUploads.ts +10 -1067
  406. package/src/book-components/Chat/Chat/Chat.module.css +199 -12
  407. package/src/book-components/Chat/Chat/Chat.tsx +16 -1
  408. package/src/book-components/Chat/Chat/ChatCitationModal.tsx +2 -2
  409. package/src/book-components/Chat/Chat/ChatImageAttachmentModal.tsx +108 -0
  410. package/src/book-components/Chat/Chat/ChatInputArea.tsx +43 -27
  411. package/src/book-components/Chat/Chat/ChatMessageAttachments.tsx +212 -0
  412. package/src/book-components/Chat/Chat/ChatMessageItem.tsx +32 -18
  413. package/src/book-components/Chat/Chat/ChatMessageList.tsx +3 -0
  414. package/src/book-components/Chat/Chat/ChatProps.tsx +9 -0
  415. package/src/book-components/Chat/Chat/CitationIframePreview.tsx +108 -156
  416. package/src/book-components/Chat/Chat/createProgressCardChecklistMarkdown.ts +1 -8
  417. package/src/book-components/Chat/Chat/insertDictationChunk.ts +3 -3
  418. package/src/book-components/Chat/Chat/learnDictationDictionary.ts +1 -1
  419. package/src/book-components/Chat/Chat/renderTimeoutToolCallDetails.tsx +1 -5
  420. package/src/book-components/Chat/Chat/useChatInputAreaComposer.ts +59 -7
  421. package/src/book-components/Chat/Chat/useChatInputAreaDictation.ts +140 -33
  422. package/src/book-components/Chat/Chat/useChatToolCallModalState.ts +1 -4
  423. package/src/book-components/Chat/hooks/useChatRatings.ts +1 -1
  424. package/src/book-components/Chat/save/html/htmlSaveFormatDefinition.ts +2 -3
  425. package/src/book-components/Chat/save/markdown/mdSaveFormatDefinition.ts +2 -2
  426. package/src/book-components/Chat/save/pdf/buildChatPdf.ts +1 -1
  427. package/src/book-components/Chat/utils/getToolCallChipletInfo.ts +1 -5
  428. package/src/book-components/Chat/utils/isVisibleChatToolCall.ts +2 -1
  429. package/src/book-components/Chat/utils/parseMessageButtons.ts +27 -2
  430. package/src/cli/cli-commands/about.ts +1 -1
  431. package/src/cli/cli-commands/agent/agentCliOptions.ts +2 -5
  432. package/src/cli/cli-commands/agent-folder/agentProjectPaths.ts +6 -12
  433. package/src/cli/cli-commands/agent-folder/init.ts +3 -8
  434. package/src/cli/cli-commands/agent-folder/initializeAgentProjectConfiguration.ts +2 -11
  435. package/src/cli/cli-commands/agent-folder/printAgentInitializationSummary.ts +2 -9
  436. package/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_BUILD_CACHE_FILENAME.ts +6 -0
  437. package/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_BUILD_CACHE_VERSION.ts +6 -0
  438. package/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_NEXT_BUILD_ID_FILENAME.ts +6 -0
  439. package/src/cli/cli-commands/agents-server/buildAgentsServer/AgentsServerBuildCache.ts +11 -0
  440. package/src/cli/cli-commands/agents-server/buildAgentsServer/AgentsServerBuildCacheOptions.ts +9 -0
  441. package/src/cli/cli-commands/agents-server/buildAgentsServer/NODE_MODULES_DIRECTORY_NAME.ts +6 -0
  442. package/src/cli/cli-commands/agents-server/buildAgentsServer/PreparedAgentsServerRuntime.ts +19 -0
  443. package/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerBuildSourceFingerprint.ts +71 -0
  444. package/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerRuntimeEnvironment.ts +69 -0
  445. package/src/cli/cli-commands/agents-server/buildAgentsServer/ensureAgentsServerBuild.ts +59 -0
  446. package/src/cli/cli-commands/agents-server/buildAgentsServer/getAgentsServerBuildInputRelativePaths.ts +23 -0
  447. package/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerAppPath.ts +20 -0
  448. package/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerAppPathMaterialized.ts +17 -0
  449. package/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerBuildCacheCurrent.ts +27 -0
  450. package/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerBuildInputTestFile.ts +21 -0
  451. package/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerBuildInputDirectoryName.ts +22 -0
  452. package/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerBuildInputPath.ts +30 -0
  453. package/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerRuntimeSourcePath.ts +41 -0
  454. package/src/cli/cli-commands/agents-server/buildAgentsServer/isFile.ts +14 -0
  455. package/src/cli/cli-commands/agents-server/buildAgentsServer/isPathInsideNodeModules.ts +10 -0
  456. package/src/cli/cli-commands/agents-server/buildAgentsServer/normalizeAgentsServerBuildInputPath.ts +10 -0
  457. package/src/cli/cli-commands/agents-server/buildAgentsServer/prepareAgentsServerRuntime.ts +31 -0
  458. package/src/cli/cli-commands/agents-server/buildAgentsServer/readAgentsServerBuildCache.ts +35 -0
  459. package/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerAppPath.ts +33 -0
  460. package/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerBuildAppPath.ts +30 -0
  461. package/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerBuildOutputPath.ts +19 -0
  462. package/src/cli/cli-commands/agents-server/buildAgentsServer/resolveNextCliPath.ts +21 -0
  463. package/src/cli/cli-commands/agents-server/buildAgentsServer/resolveNodeModulesPath.ts +19 -0
  464. package/src/cli/cli-commands/agents-server/buildAgentsServer/runNextBuild.ts +184 -0
  465. package/src/cli/cli-commands/agents-server/buildAgentsServer/shouldCopyAgentsServerRuntimePath.ts +48 -0
  466. package/src/cli/cli-commands/agents-server/buildAgentsServer/synchronizeMaterializedAgentsServerRuntime.ts +179 -0
  467. package/src/cli/cli-commands/agents-server/buildAgentsServer/writeAgentsServerBuildCache.ts +28 -0
  468. package/src/cli/cli-commands/agents-server/buildAgentsServer.ts +22 -1043
  469. package/src/cli/cli-commands/agents-server/ensureAgentsServerEnvFile.ts +2 -1
  470. package/src/cli/cli-commands/agents-server/ensureAgentsServerGitignoreFile.ts +2 -1
  471. package/src/cli/cli-commands/agents-server/run.ts +2 -5
  472. package/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerChildEnvironment.ts +67 -0
  473. package/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerLogStreams.ts +43 -0
  474. package/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerRuntimePaths.ts +44 -0
  475. package/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerSupervisorState.ts +59 -0
  476. package/src/cli/cli-commands/agents-server/startAgentsServer/LocalAgentRunnerLimits.ts +9 -0
  477. package/src/cli/cli-commands/agents-server/startAgentsServer/PreparedAgentsServerLaunch.ts +14 -0
  478. package/src/cli/cli-commands/agents-server/startAgentsServer/StartAgentsServerOptions.ts +26 -0
  479. package/src/cli/cli-commands/agents-server/startAgentsServer/createInternalRouteErrorMessage.ts +15 -0
  480. package/src/cli/cli-commands/agents-server/startAgentsServer/createLocalAgentRunOptions.ts +29 -0
  481. package/src/cli/cli-commands/agents-server/startAgentsServer/forwardChildOutput.ts +32 -0
  482. package/src/cli/cli-commands/agents-server/startAgentsServer/loadAgentsServerProjectEnvironment.ts +18 -0
  483. package/src/cli/cli-commands/agents-server/startAgentsServer/prepareAgentsServerLaunch.ts +81 -0
  484. package/src/cli/cli-commands/agents-server/startAgentsServer/readInternalRouteErrorDetails.ts +52 -0
  485. package/src/cli/cli-commands/agents-server/startAgentsServer/resolveAgentsServerChildHostname.ts +17 -0
  486. package/src/cli/cli-commands/agents-server/startAgentsServer/startNextServer.ts +97 -0
  487. package/src/cli/cli-commands/agents-server/startAgentsServer/startUserChatJobWorkerPump.ts +132 -0
  488. package/src/cli/cli-commands/agents-server/startAgentsServer/stopChildProcess.ts +14 -0
  489. package/src/cli/cli-commands/agents-server/startAgentsServer/waitForLocalAgentRunnerLimits.ts +132 -0
  490. package/src/cli/cli-commands/agents-server/startAgentsServer.ts +24 -797
  491. package/src/cli/cli-commands/agents-server.ts +2 -6
  492. package/src/cli/cli-commands/coder/agentCodingFile.ts +1 -7
  493. package/src/cli/cli-commands/coder/boilerplateTemplates.ts +14 -21
  494. package/src/cli/cli-commands/coder/find-refactor-candidates.ts +9 -2
  495. package/src/cli/cli-commands/coder/generate-boilerplates.ts +2 -6
  496. package/src/cli/cli-commands/coder/initializeCoderProjectConfiguration.ts +2 -10
  497. package/src/cli/cli-commands/coder/run.ts +3 -27
  498. package/src/cli/cli-commands/coder/server.ts +4 -2
  499. package/src/cli/cli-commands/common/createPositiveIntegerOptionParser.ts +31 -0
  500. package/src/cli/cli-commands/common/promptRunnerCliOptions.ts +3 -8
  501. package/src/cli/cli-commands/make.ts +1 -1
  502. package/src/cli/cli-commands/run/runCommandAction.ts +1 -1
  503. package/src/cli/promptbookCli.ts +28 -3
  504. package/src/collection/agent-collection/CreateAgentInput.ts +2 -5
  505. package/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.ts +1 -1
  506. package/src/commitments/MEMORY/createMemoryToolFunctions.ts +1 -10
  507. package/src/commitments/MEMORY/getMemoryToolRuntimeAdapterOrDisabledResult.ts +1 -10
  508. package/src/commitments/MEMORY/parseMemoryToolArgs.ts +1 -6
  509. package/src/commitments/META/META.ts +4 -4
  510. package/src/commitments/META_AVATAR/META_AVATAR.ts +16 -10
  511. package/src/commitments/TEAM/TEAM.ts +5 -5
  512. package/src/commitments/USE_CALENDAR/createUseCalendarToolFunctions.ts +1 -4
  513. package/src/commitments/USE_PROJECT/createUseProjectToolFunctions.ts +2 -10
  514. package/src/commitments/USE_TIMEOUT/createTimeoutToolFunctions.ts +1 -11
  515. package/src/commitments/USE_TIMEOUT/getTimeoutToolRuntimeAdapterOrDisabledResult.ts +1 -6
  516. package/src/commitments/USE_TIMEOUT/parseTimeoutToolArgs.ts +1 -6
  517. package/src/commitments/WALLET/createWalletToolFunctions.ts +2 -11
  518. package/src/commitments/WALLET/getWalletToolRuntimeAdapterOrDisabledResult.ts +1 -6
  519. package/src/commitments/WALLET/parseWalletToolArgs.ts +1 -10
  520. package/src/commitments/index.ts +1 -0
  521. package/src/conversion/parsePipeline/applyPipelineHead.ts +1 -1
  522. package/src/conversion/parsePipeline/createUniqueSectionNameResolver.ts +1 -1
  523. package/src/conversion/parsePipeline/processPipelineSection.ts +1 -1
  524. package/src/conversion/validation/validatePipeline/createPipelineValidationContext.ts +43 -0
  525. package/src/conversion/validation/validatePipeline/validatePipelineCollectionsStructure.ts +72 -0
  526. package/src/conversion/validation/validatePipeline/validatePipelineDependencyResolution.ts +220 -0
  527. package/src/conversion/validation/validatePipeline/validatePipelineMetadata.ts +66 -0
  528. package/src/conversion/validation/validatePipeline/validatePipelineParameters.ts +136 -0
  529. package/src/conversion/validation/validatePipeline/validatePipelineTasks.ts +243 -0
  530. package/src/conversion/validation/validatePipeline.ts +7 -750
  531. package/src/execution/LlmExecutionTools.ts +1 -6
  532. package/src/execution/createPipelineExecutor/getReservedParametersForTask.ts +1 -5
  533. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/RegisteredLlmToolsMessageContext.ts +51 -0
  534. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/USED_ENV_FILENAME.ts +30 -0
  535. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolConfigurationStatusMessage.ts +62 -0
  536. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolEntryKey.ts +10 -0
  537. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolInstallationStatusMessage.ts +75 -0
  538. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolStatus.ts +101 -0
  539. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolsMessageContext.ts +24 -0
  540. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/getAvailableRegisteredLlmToolsEnvironmentVariables.ts +17 -0
  541. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/getRegisteredLlmToolRegisters.ts +15 -0
  542. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/hasRegisteredLlmToolEntry.ts +19 -0
  543. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/listRegisteredLlmToolEntries.ts +44 -0
  544. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/listRegisteredLlmToolStatuses.ts +21 -0
  545. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderAvailableRegisteredLlmTools.ts +97 -0
  546. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderNoRegisteredLlmToolsMessage.ts +17 -0
  547. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderRegisteredLlmToolsMessage.ts +30 -0
  548. package/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderRelevantRegisteredLlmToolsEnvironmentVariables.ts +32 -0
  549. package/src/llm-providers/_common/register/$registeredLlmToolsMessage.ts +5 -568
  550. package/src/llm-providers/_common/utils/count-total-usage/limitTotalUsage.ts +1 -6
  551. package/src/llm-providers/openai/OpenAiAgentKitExecutionTools.ts +2 -2
  552. package/src/llm-providers/openai/OpenAiAssistantExecutionTools.ts +1 -1
  553. package/src/llm-providers/openai/OpenAiAssistantExecutionToolsStreamRunner.ts +2 -2
  554. package/src/llm-providers/openai/OpenAiAssistantExecutionToolsToolRunner.ts +1 -1
  555. package/src/llm-providers/openai/OpenAiCompatibleExecutionTools.ts +2 -7
  556. package/src/llm-providers/openai/utils/OpenAiCompatibleChatPromptBuilder.ts +1 -1
  557. package/src/llm-providers/openai/utils/OpenAiCompatibleChatToolCaller.ts +2 -2
  558. package/src/llm-providers/openai/utils/OpenAiCompatibleUnsupportedParameterRetrier.ts +1 -5
  559. package/src/llm-providers/openai/utils/buildToolInvocationScript.ts +1 -6
  560. package/src/other/templates/getTemplatesPipelineCollection.ts +840 -755
  561. package/src/remote-server/startRemoteServer/registerExecutionRoutes.ts +1 -1
  562. package/src/remote-server/startRemoteServer/registerServerIndexRoute.ts +1 -1
  563. package/src/scrapers/_common/utils/makeKnowledgeSourceHandler.ts +1 -6
  564. package/src/speech-recognition/OpenAiSpeechRecognition.ts +1 -6
  565. package/src/transpilers/_common/prepareSdkTranspilerContext.ts +1 -4
  566. package/src/types/Prompt.ts +1 -7
  567. package/src/types/string_host.ts +1 -9
  568. package/src/types/string_pipeline_url.ts +1 -4
  569. package/src/utils/agent-message-runtime/agentMessageRuntimePaths.ts +66 -0
  570. package/src/utils/agents/resolveAgentAvatarImageUrl.ts +2 -2
  571. package/src/utils/agents/terminalAgentAvatarVisual.ts +261 -0
  572. package/src/utils/ascii-art/$detectTerminalAnsiColorDepth.ts +45 -0
  573. package/src/utils/ascii-art/convertImageDataToAsciiArt.ts +396 -0
  574. package/src/utils/color/Color.ts +2 -2
  575. package/src/utils/markdown/parseMarkdownSection.ts +1 -5
  576. package/src/utils/random/$randomFullnameWithColor.ts +1 -6
  577. package/src/version.ts +2 -2
  578. package/src/versions.txt +7 -0
  579. package/umd/apps/agents-server/src/database/migratePrefix.d.ts +19 -0
  580. package/umd/apps/agents-server/src/database/runDatabaseMigrations.d.ts +4 -0
  581. package/umd/book/scripts/import-markdown/increaseHeadings.d.ts +8 -0
  582. package/umd/index.umd.js +30176 -28541
  583. package/umd/index.umd.js.map +1 -1
  584. package/umd/scripts/find-refactor-candidates/find-refactor-candidates.d.ts +7 -0
  585. package/umd/scripts/find-refactor-candidates/selectMostImportantRefactorCandidates.d.ts +12 -0
  586. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages/MultipleAgentAutoPuller.d.ts +27 -0
  587. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages/MultipleAgentGithubSynchronizer.d.ts +26 -0
  588. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages/MultipleAgentRunUiPresenter.d.ts +66 -0
  589. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages/RunMultipleAgentMessageTaskScheduler.d.ts +67 -0
  590. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages/formatProjectPath.d.ts +6 -0
  591. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages/loadLocalAgentRunnerProjectSummaries.d.ts +11 -0
  592. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages/wait.d.ts +6 -0
  593. package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages.d.ts +1 -1
  594. package/umd/scripts/run-codex-prompts/common/buildCoderRunProgressSnapshot.d.ts +1 -1
  595. package/umd/scripts/run-codex-prompts/common/cliProgressDisplay.d.ts +2 -1
  596. package/umd/scripts/run-codex-prompts/common/resolveCoderAgent.d.ts +20 -0
  597. package/umd/scripts/run-codex-prompts/common/sleepWithCountdown.d.ts +1 -0
  598. package/umd/scripts/run-codex-prompts/common/waitUntilWorldTimeDeadline.d.ts +17 -0
  599. package/umd/scripts/run-codex-prompts/runners/claude-code/ClaudeCodeRunner.d.ts +4 -0
  600. package/umd/scripts/run-codex-prompts/runners/claude-code/ClaudeCodeSessionResurrection.d.ts +37 -0
  601. package/umd/scripts/run-codex-prompts/runners/claude-code/parseClaudeCodeOutputEvents.d.ts +47 -0
  602. package/umd/scripts/run-codex-prompts/ui/CoderRunUiState.d.ts +8 -1
  603. package/umd/scripts/run-codex-prompts/ui/buildCoderRunAgentVisual.d.ts +41 -0
  604. package/umd/scripts/run-codex-prompts/ui/buildCoderRunUiFrame.d.ts +10 -0
  605. package/umd/scripts/run-codex-prompts/ui/coderRunUiRefresh.d.ts +2 -2
  606. package/umd/src/_packages/types.index.d.ts +2 -2
  607. package/umd/src/avatars/renderAvatarVisualAsciiArt.d.ts +98 -0
  608. package/umd/src/avatars/visuals/octopus3dAvatarVisualShared.d.ts +1 -1
  609. package/umd/src/book-components/BookEditor/BookEditorMonacoUploadPanel.d.ts +1 -1
  610. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/bookEditorMonacoUploadTypes.d.ts +120 -0
  611. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/clearScheduledTimer.d.ts +6 -0
  612. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/enqueueFilesForUpload.d.ts +26 -0
  613. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadEditorSync.d.ts +23 -0
  614. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadItemsState.d.ts +21 -0
  615. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadProgressQueue.d.ts +12 -0
  616. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/useBookEditorMonacoUploadQueue.d.ts +27 -0
  617. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads/useCompletedUploadsAutoClear.d.ts +12 -0
  618. package/umd/src/book-components/BookEditor/useBookEditorMonacoUploads.d.ts +5 -58
  619. package/umd/src/book-components/Chat/Chat/ChatImageAttachmentModal.d.ts +25 -0
  620. package/umd/src/book-components/Chat/Chat/ChatInputArea.d.ts +3 -0
  621. package/umd/src/book-components/Chat/Chat/ChatMessageAttachments.d.ts +27 -0
  622. package/umd/src/book-components/Chat/Chat/ChatMessageItem.d.ts +1 -1
  623. package/umd/src/book-components/Chat/Chat/ChatMessageList.d.ts +1 -0
  624. package/umd/src/book-components/Chat/Chat/ChatProps.d.ts +8 -0
  625. package/umd/src/book-components/Chat/Chat/CitationIframePreview.d.ts +1 -1
  626. package/umd/src/book-components/Chat/Chat/CitationIframePreview.test.d.ts +2 -0
  627. package/umd/src/book-components/Chat/Chat/insertDictationChunk.d.ts +1 -1
  628. package/umd/src/book-components/Chat/Chat/insertDictationChunk.test.d.ts +1 -0
  629. package/umd/src/book-components/Chat/Chat/learnDictationDictionary.test.d.ts +1 -0
  630. package/umd/src/book-components/Chat/Chat/refineFinalDictationChunk.test.d.ts +1 -0
  631. package/umd/src/book-components/Chat/Chat/useChatInputAreaComposer.d.ts +12 -0
  632. package/umd/src/book-components/Chat/Chat/useChatInputAreaComposer.draftMessage.test.d.ts +2 -0
  633. package/umd/src/book-components/Chat/utils/isVisibleChatToolCall.d.ts +1 -1
  634. package/umd/src/book-components/Chat/utils/parseMessageButtons.d.ts +16 -2
  635. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_BUILD_CACHE_FILENAME.d.ts +6 -0
  636. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_BUILD_CACHE_VERSION.d.ts +6 -0
  637. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/AGENTS_SERVER_NEXT_BUILD_ID_FILENAME.d.ts +6 -0
  638. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/AgentsServerBuildCache.d.ts +10 -0
  639. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/AgentsServerBuildCacheOptions.d.ts +10 -0
  640. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/NODE_MODULES_DIRECTORY_NAME.d.ts +6 -0
  641. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/PreparedAgentsServerRuntime.d.ts +18 -0
  642. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerBuildSourceFingerprint.d.ts +6 -0
  643. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/createAgentsServerRuntimeEnvironment.d.ts +28 -0
  644. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/ensureAgentsServerBuild.d.ts +19 -0
  645. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/getAgentsServerBuildInputRelativePaths.d.ts +11 -0
  646. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerAppPath.d.ts +6 -0
  647. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerAppPathMaterialized.d.ts +6 -0
  648. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerBuildCacheCurrent.d.ts +7 -0
  649. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isAgentsServerBuildInputTestFile.d.ts +6 -0
  650. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerBuildInputDirectoryName.d.ts +6 -0
  651. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerBuildInputPath.d.ts +6 -0
  652. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isExcludedAgentsServerRuntimeSourcePath.d.ts +6 -0
  653. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isFile.d.ts +6 -0
  654. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/isPathInsideNodeModules.d.ts +6 -0
  655. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/normalizeAgentsServerBuildInputPath.d.ts +6 -0
  656. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/prepareAgentsServerRuntime.d.ts +9 -0
  657. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/readAgentsServerBuildCache.d.ts +8 -0
  658. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerAppPath.d.ts +6 -0
  659. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerBuildAppPath.d.ts +9 -0
  660. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/resolveAgentsServerBuildOutputPath.d.ts +7 -0
  661. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/resolveNextCliPath.d.ts +6 -0
  662. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/resolveNodeModulesPath.d.ts +6 -0
  663. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/runNextBuild.d.ts +12 -0
  664. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/shouldCopyAgentsServerRuntimePath.d.ts +6 -0
  665. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/synchronizeMaterializedAgentsServerRuntime.d.ts +11 -0
  666. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer/writeAgentsServerBuildCache.d.ts +7 -0
  667. package/umd/src/cli/cli-commands/agents-server/buildAgentsServer.d.ts +8 -109
  668. package/umd/src/cli/cli-commands/agents-server/ensureAgentsServerEnvFile.d.ts +1 -1
  669. package/umd/src/cli/cli-commands/agents-server/ensureAgentsServerGitignoreFile.d.ts +1 -1
  670. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerChildEnvironment.d.ts +16 -0
  671. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerLogStreams.d.ts +30 -0
  672. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerRuntimePaths.d.ts +19 -0
  673. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/AgentsServerSupervisorState.d.ts +37 -0
  674. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/LocalAgentRunnerLimits.d.ts +9 -0
  675. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/PreparedAgentsServerLaunch.d.ts +13 -0
  676. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/StartAgentsServerOptions.d.ts +24 -0
  677. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/createInternalRouteErrorMessage.d.ts +6 -0
  678. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/createLocalAgentRunOptions.d.ts +9 -0
  679. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/forwardChildOutput.d.ts +13 -0
  680. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/loadAgentsServerProjectEnvironment.d.ts +6 -0
  681. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/prepareAgentsServerLaunch.d.ts +18 -0
  682. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/readInternalRouteErrorDetails.d.ts +6 -0
  683. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/resolveAgentsServerChildHostname.d.ts +7 -0
  684. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/startNextServer.d.ts +20 -0
  685. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/startUserChatJobWorkerPump.d.ts +15 -0
  686. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/stopChildProcess.d.ts +8 -0
  687. package/umd/src/cli/cli-commands/agents-server/startAgentsServer/waitForLocalAgentRunnerLimits.d.ts +16 -0
  688. package/umd/src/cli/cli-commands/agents-server/startAgentsServer.d.ts +3 -30
  689. package/umd/src/cli/cli-commands/common/createPositiveIntegerOptionParser.d.ts +10 -0
  690. package/umd/src/cli/cli-commands/common/promptRunnerCliOptions.d.ts +1 -1
  691. package/umd/src/collection/agent-collection/CreateAgentInput.d.ts +1 -1
  692. package/umd/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.d.ts +1 -1
  693. package/umd/src/commitments/META/META.d.ts +2 -2
  694. package/umd/src/commitments/META_AVATAR/META_AVATAR.d.ts +9 -4
  695. package/umd/src/commitments/index.d.ts +1 -1
  696. package/umd/src/conversion/validation/validatePipeline/createPipelineValidationContext.d.ts +16 -0
  697. package/umd/src/conversion/validation/validatePipeline/validatePipelineCollectionsStructure.d.ts +7 -0
  698. package/umd/src/conversion/validation/validatePipeline/validatePipelineDependencyResolution.d.ts +7 -0
  699. package/umd/src/conversion/validation/validatePipeline/validatePipelineMetadata.d.ts +7 -0
  700. package/umd/src/conversion/validation/validatePipeline/validatePipelineParameters.d.ts +7 -0
  701. package/umd/src/conversion/validation/validatePipeline/validatePipelineTasks.d.ts +7 -0
  702. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/RegisteredLlmToolsMessageContext.d.ts +46 -0
  703. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/USED_ENV_FILENAME.d.ts +11 -0
  704. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolConfigurationStatusMessage.d.ts +7 -0
  705. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolEntryKey.d.ts +7 -0
  706. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolInstallationStatusMessage.d.ts +7 -0
  707. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolStatus.d.ts +14 -0
  708. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/createRegisteredLlmToolsMessageContext.d.ts +7 -0
  709. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/getAvailableRegisteredLlmToolsEnvironmentVariables.d.ts +7 -0
  710. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/getRegisteredLlmToolRegisters.d.ts +7 -0
  711. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/hasRegisteredLlmToolEntry.d.ts +7 -0
  712. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/listRegisteredLlmToolEntries.d.ts +9 -0
  713. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/listRegisteredLlmToolStatuses.d.ts +7 -0
  714. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderAvailableRegisteredLlmTools.d.ts +7 -0
  715. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderNoRegisteredLlmToolsMessage.d.ts +7 -0
  716. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderRegisteredLlmToolsMessage.d.ts +8 -0
  717. package/umd/src/llm-providers/_common/register/$registeredLlmToolsMessage/renderRelevantRegisteredLlmToolsEnvironmentVariables.d.ts +7 -0
  718. package/umd/src/utils/agent-message-runtime/agentMessageRuntimePaths.d.ts +24 -0
  719. package/umd/src/utils/agents/resolveAgentAvatarImageUrl.d.ts +2 -2
  720. package/umd/src/utils/agents/terminalAgentAvatarVisual.d.ts +94 -0
  721. package/umd/src/utils/agents/terminalAgentAvatarVisual.test.d.ts +1 -0
  722. package/umd/src/utils/ascii-art/$detectTerminalAnsiColorDepth.d.ts +15 -0
  723. package/umd/src/utils/ascii-art/convertImageDataToAsciiArt.d.ts +80 -0
  724. package/umd/src/utils/color/Color.d.ts +1 -1
  725. package/umd/src/version.d.ts +1 -1
  726. package/apps/agents-server/src/app/api/page-preview/interact/route.ts +0 -179
  727. package/apps/agents-server/src/app/api/page-preview/live/route.ts +0 -67
  728. package/apps/agents-server/src/utils/pagePreview/livePagePreviewSessions.ts +0 -365
  729. package/apps/agents-server/src/utils/pagePreview/resolvePagePreviewRequestUrl.ts +0 -74
  730. package/apps/agents-server/src/utils/userChat/createUserChatRunnerProgressCard.ts +0 -57
  731. package/esm/scripts/run-codex-prompts/common/resolveAgentSystemMessage.d.ts +0 -6
  732. package/esm/src/book-components/Chat/utils/livePagePreviewConstants.d.ts +0 -12
  733. package/src/book-components/Chat/utils/livePagePreviewConstants.ts +0 -17
  734. package/umd/scripts/run-codex-prompts/common/resolveAgentSystemMessage.d.ts +0 -6
  735. package/umd/src/book-components/Chat/utils/livePagePreviewConstants.d.ts +0 -12
@@ -1,246 +1,28 @@
1
1
  'use client';
2
2
 
3
- import {
4
- CheckCircle2,
5
- ChevronDown,
6
- ChevronUp,
7
- ClipboardCopy,
8
- Download,
9
- FileDown,
10
- GitCommit,
11
- Loader2,
12
- RefreshCcw,
13
- Rocket,
14
- Server,
15
- Settings2,
16
- TriangleAlert,
17
- } from 'lucide-react';
18
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
19
- import { AdminXtermTerminal } from '../../../components/AdminTerminal/AdminXtermTerminal';
3
+ import { RefreshCcw } from 'lucide-react';
20
4
  import { Card } from '../../../components/Homepage/Card';
21
5
  import { useServerLanguage } from '../../../components/ServerLanguage/ServerLanguageProvider';
22
- import type { ServerLanguageCode } from '../../../languages/ServerLanguageRegistry';
23
- import { downloadBlob, parseFilenameFromContentDisposition } from '../../../utils/download/browserFileDownload';
24
- import { createServerLanguageMoment } from '../../../utils/localization/createServerLanguageMoment';
25
- import { formatServerLanguageHumanReadableDate } from '../../../utils/localization/formatServerLanguageHumanReadableDate';
26
- import { CustomCommitPicker, type CustomCommitPickerCandidate } from './CustomCommitPicker';
27
-
28
- /**
29
- * Browser-safe environment option returned by the update API.
30
- */
31
- type UpdateEnvironmentOption = {
32
- readonly id: string;
33
- readonly branch: string;
34
- readonly label: string;
35
- readonly description: string;
36
- readonly isCustom: boolean;
37
- };
38
-
39
- /**
40
- * Browser-safe latest update-job snapshot.
41
- */
42
- type UpdateJobSnapshot = {
43
- readonly status: 'idle' | 'running' | 'succeeded' | 'failed';
44
- readonly pid: number | null;
45
- readonly targetBranch: string | null;
46
- readonly targetEnvironment: UpdateEnvironmentOption;
47
- readonly currentStep: string | null;
48
- readonly currentCommitSha: string | null;
49
- readonly targetCommitSha: string | null;
50
- readonly errorMessage: string | null;
51
- readonly startedAt: string | null;
52
- readonly finishedAt: string | null;
53
- readonly isStale: boolean;
54
- readonly logTail: string | null;
55
- readonly logFilePath: string | null;
56
- };
57
-
58
- /**
59
- * Browser-safe summary of one commit between the deployed checkout and the latest remote commit.
60
- */
61
- type UpdatePendingCommit = {
62
- readonly commitSha: string;
63
- readonly shortCommitSha: string;
64
- readonly subject: string;
65
- readonly authoredAt: string | null;
66
- };
67
-
68
- /**
69
- * Browser-safe self-update overview returned by the super-admin API.
70
- */
71
- type UpdateOverview = {
72
- readonly isAvailable: boolean;
73
- readonly unavailableReason: string | null;
74
- readonly environments: ReadonlyArray<UpdateEnvironmentOption>;
75
- readonly currentEnvironment: UpdateEnvironmentOption;
76
- readonly repositoryDirectory: string | null;
77
- readonly currentCommitSha: string | null;
78
- readonly currentCommitShortSha: string | null;
79
- readonly currentCommitMessage: string | null;
80
- readonly currentCommitDate: string | null;
81
- readonly latestRemoteCommitSha: string | null;
82
- readonly latestRemoteCommitShortSha: string | null;
83
- readonly latestRemoteCommitDate: string | null;
84
- readonly latestRemoteCommitMessage: string | null;
85
- readonly commitsBehindCount: number | null;
86
- readonly pendingCommits: ReadonlyArray<UpdatePendingCommit>;
87
- readonly isUpdateAvailable: boolean;
88
- readonly originRepositoryUrl: string;
89
- readonly isOriginRepositoryDefault: boolean;
90
- readonly defaultOriginRepositoryUrl: string;
91
- readonly job: UpdateJobSnapshot;
92
- readonly error?: string;
93
- };
94
-
95
- /**
96
- * Duration (ms) of the transient "Copied!" / "Saved!" feedback shown next to log action buttons.
97
- */
98
- const UPDATE_LOG_ACTION_FEEDBACK_DURATION_MS = 2500;
99
-
100
- /**
101
- * Default download filename used when the server does not provide one via `Content-Disposition`.
102
- */
103
- const DEFAULT_UPDATE_LOG_DOWNLOAD_FILENAME = 'self-update.log';
6
+ import { AutomaticSelfUpdateConfigurationCard } from './AutomaticSelfUpdateConfigurationCard';
7
+ import { CurrentDeploymentCard } from './CurrentDeploymentCard';
8
+ import { InstalledVersionsCard } from './InstalledVersionsCard';
9
+ import { PendingCommitsCard } from './PendingCommitsCard';
10
+ import { TargetEnvironmentCard } from './TargetEnvironmentCard';
11
+ import { UpdateJobCard } from './UpdateJobCard';
12
+ import { useUpdateClientState } from './useUpdateClientState';
13
+ import { UPDATE_PAGE_CARD_CLASS_NAME } from './updatePageCardClassName';
104
14
 
105
15
  /**
106
16
  * Client UI for standalone VPS branch-aware self-updates.
107
17
  */
108
18
  export function UpdateClient() {
109
19
  const { language } = useServerLanguage();
110
- const [overview, setOverview] = useState<UpdateOverview | null>(null);
111
- const [selectedEnvironmentId, setSelectedEnvironmentId] = useState<string>('');
112
- const [customRef, setCustomRef] = useState<string>('');
113
- const [customCandidate, setCustomCandidate] = useState<CustomCommitPickerCandidate | null>(null);
114
- const [originRepositoryUrlOverride, setOriginRepositoryUrlOverride] = useState<string>('');
115
- const [isAdvancedExpanded, setIsAdvancedExpanded] = useState<boolean>(false);
116
- const [isLoading, setIsLoading] = useState(true);
117
- const [isStartingUpdate, setIsStartingUpdate] = useState(false);
118
- const [errorMessage, setErrorMessage] = useState<string | null>(null);
119
- const [successMessage, setSuccessMessage] = useState<string | null>(null);
120
-
121
- const loadOverview = useCallback(
122
- async (options?: { readonly isSilent?: boolean; readonly isRestartExpected?: boolean }): Promise<void> => {
123
- try {
124
- if (!options?.isSilent) {
125
- setIsLoading(true);
126
- }
127
- setErrorMessage(null);
128
-
129
- const response = await fetch('/api/admin/update', { cache: 'no-store' });
130
- const payload = (await response.json()) as UpdateOverview;
131
-
132
- if (!response.ok) {
133
- throw new Error(payload.error || 'Failed to load the update overview.');
134
- }
135
-
136
- setOverview(payload);
137
- setSelectedEnvironmentId(
138
- (currentSelectedEnvironmentId) => currentSelectedEnvironmentId || payload.currentEnvironment.id,
139
- );
140
- setOriginRepositoryUrlOverride((currentValue) => currentValue || payload.originRepositoryUrl);
141
- if (payload.job.status === 'succeeded') {
142
- setSuccessMessage(getUpdateJobSuccessMessage(payload.job));
143
- } else if (payload.job.status === 'failed') {
144
- setSuccessMessage(null);
145
- }
146
- } catch (error) {
147
- if (options?.isRestartExpected) {
148
- return;
149
- }
150
-
151
- setErrorMessage(error instanceof Error ? error.message : 'Failed to load the update overview.');
152
- } finally {
153
- if (!options?.isSilent) {
154
- setIsLoading(false);
155
- }
156
- }
157
- },
158
- [],
159
- );
160
-
161
- useEffect(() => {
162
- void loadOverview();
163
- }, [loadOverview]);
164
-
165
- useEffect(() => {
166
- if (overview?.job.status !== 'running') {
167
- return;
168
- }
169
-
170
- const interval = window.setInterval(() => {
171
- void loadOverview({ isSilent: true, isRestartExpected: true });
172
- }, 4000);
173
-
174
- return () => {
175
- window.clearInterval(interval);
176
- };
177
- }, [loadOverview, overview?.job.status]);
178
-
179
- const selectedEnvironment = useMemo(
180
- () =>
181
- overview?.environments.find((environment) => environment.id === selectedEnvironmentId) ||
182
- overview?.currentEnvironment ||
183
- null,
184
- [overview, selectedEnvironmentId],
185
- );
186
- const isCustomEnvironmentSelected = selectedEnvironment?.isCustom === true;
187
- const isEnvironmentSwitchRequired =
188
- Boolean(selectedEnvironment) && selectedEnvironment?.id !== overview?.currentEnvironment.id;
189
- const isUpdateRunning = overview?.job.status === 'running';
190
- const updateTerminalId = `standalone-vps-update:${overview?.job.startedAt || overview?.job.finishedAt || overview?.job.status || 'loading'}`;
191
- const updateTerminalEmptyState =
192
- isLoading && !overview ? 'Loading update log...' : 'No persisted update log output yet.';
193
- const isCustomRefRelease = isCustomEnvironmentSelected ? customCandidate?.isReleaseTag === true : true;
194
- const isCustomRefMissing = isCustomEnvironmentSelected && !customRef.trim();
195
- const isOriginOverrideChanged =
196
- overview !== null && originRepositoryUrlOverride.trim() !== overview.originRepositoryUrl;
197
-
198
- async function startUpdate(): Promise<void> {
199
- if (!selectedEnvironment) {
200
- return;
201
- }
202
-
203
- try {
204
- setIsStartingUpdate(true);
205
- setErrorMessage(null);
206
- setSuccessMessage(null);
207
-
208
- const response = await fetch('/api/admin/update', {
209
- method: 'POST',
210
- headers: {
211
- 'Content-Type': 'application/json',
212
- },
213
- body: JSON.stringify({
214
- environment: selectedEnvironment.id,
215
- customRef: isCustomEnvironmentSelected ? customRef.trim() : null,
216
- originRepositoryUrl: isOriginOverrideChanged ? originRepositoryUrlOverride.trim() : null,
217
- }),
218
- });
219
- const payload = (await response.json()) as UpdateOverview;
220
-
221
- if (!response.ok) {
222
- throw new Error(payload.error || 'Failed to start the update.');
223
- }
224
-
225
- setOverview(payload);
226
- setSuccessMessage(
227
- isCustomEnvironmentSelected
228
- ? `Started the standalone VPS update to custom ref ${customRef.trim()}.`
229
- : isEnvironmentSwitchRequired
230
- ? `Switched to ${selectedEnvironment.label} and started the standalone VPS update.`
231
- : 'Standalone VPS update started.',
232
- );
233
- } catch (error) {
234
- setErrorMessage(error instanceof Error ? error.message : 'Failed to start the update.');
235
- } finally {
236
- setIsStartingUpdate(false);
237
- }
238
- }
20
+ const state = useUpdateClientState();
239
21
 
240
22
  return (
241
- <div className="container mx-auto space-y-6 px-4 py-8">
23
+ <div className="container mx-auto min-w-0 space-y-6 px-4 py-8">
242
24
  <div className="mt-20 flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between">
243
- <div>
25
+ <div className="min-w-0">
244
26
  <h1 className="text-3xl font-light text-gray-900">Update</h1>
245
27
  <p className="mt-1 max-w-3xl text-sm text-gray-500">
246
28
  Switch the standalone VPS between Live, Preview, Production, LTS, or a custom ref, and update
@@ -250,676 +32,51 @@ export function UpdateClient() {
250
32
 
251
33
  <button
252
34
  type="button"
253
- onClick={() => void loadOverview()}
254
- disabled={isLoading || isStartingUpdate}
255
- className="inline-flex items-center gap-2 rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-semibold text-slate-700 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-60"
35
+ onClick={() => void state.loadOverview()}
36
+ disabled={state.isLoading || state.isStartingUpdate}
37
+ className="inline-flex shrink-0 items-center gap-2 rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-semibold text-slate-700 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-60"
256
38
  >
257
- <RefreshCcw className={`h-4 w-4 ${isLoading ? 'animate-spin' : ''}`} />
39
+ <RefreshCcw className={`h-4 w-4 ${state.isLoading ? 'animate-spin' : ''}`} />
258
40
  Refresh
259
41
  </button>
260
42
  </div>
261
43
 
262
- {errorMessage && (
44
+ {state.errorMessage && (
263
45
  <div className="rounded-xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700">
264
- {errorMessage}
46
+ {state.errorMessage}
265
47
  </div>
266
48
  )}
267
- {successMessage && (
49
+ {state.successMessage && (
268
50
  <div className="rounded-xl border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm text-emerald-700">
269
- {successMessage}
51
+ {state.successMessage}
270
52
  </div>
271
53
  )}
272
54
 
273
- {!overview?.isAvailable && overview?.unavailableReason && (
55
+ {!state.overview?.isAvailable && state.overview?.unavailableReason && (
274
56
  <div className="rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800">
275
- {overview.unavailableReason}
57
+ {state.overview.unavailableReason}
276
58
  </div>
277
59
  )}
278
60
 
279
- <div className="grid gap-4 lg:grid-cols-[1.4fr_1fr]">
280
- <Card className="hover:border-gray-200 hover:shadow-md">
281
- <CurrentDeploymentCard overview={overview} language={language} />
61
+ <div className="grid min-w-0 items-start gap-4 lg:grid-cols-[minmax(0,1.4fr)_minmax(0,1fr)]">
62
+ <Card className={UPDATE_PAGE_CARD_CLASS_NAME}>
63
+ <CurrentDeploymentCard overview={state.overview} language={language} />
282
64
  </Card>
283
65
 
284
- <Card className="hover:border-gray-200 hover:shadow-md">
285
- <div className="space-y-4">
286
- <div>
287
- <h2 className="text-lg font-semibold text-slate-900">Target environment</h2>
288
- <p className="mt-1 text-sm text-slate-500">
289
- Selecting another environment automatically updates the server to the latest commit on
290
- that branch.
291
- </p>
292
- </div>
293
-
294
- <div className="grid gap-3">
295
- {overview?.environments.map((environment) => {
296
- const isSelected = environment.id === selectedEnvironment?.id;
297
- const isCurrent = environment.id === overview.currentEnvironment.id;
298
-
299
- return (
300
- <button
301
- key={environment.id}
302
- type="button"
303
- onClick={() => setSelectedEnvironmentId(environment.id)}
304
- disabled={isUpdateRunning || isStartingUpdate}
305
- className={`rounded-2xl border px-4 py-4 text-left transition ${
306
- isSelected
307
- ? 'border-blue-300 bg-blue-50 text-blue-900 shadow-sm'
308
- : 'border-slate-200 bg-white text-slate-700 hover:border-slate-300 hover:shadow-sm'
309
- } disabled:cursor-not-allowed disabled:opacity-60`}
310
- >
311
- <div className="flex items-center justify-between gap-3">
312
- <div className="text-sm font-semibold">{environment.label}</div>
313
- {isCurrent && (
314
- <span className="rounded-full border border-emerald-200 bg-emerald-50 px-2 py-0.5 text-[11px] font-semibold uppercase tracking-wide text-emerald-700">
315
- Current
316
- </span>
317
- )}
318
- </div>
319
- {environment.branch && (
320
- <div className="mt-1 font-mono text-xs">{environment.branch}</div>
321
- )}
322
- <div className="mt-2 text-sm opacity-80">{environment.description}</div>
323
- </button>
324
- );
325
- })}
326
- </div>
327
-
328
- {isCustomEnvironmentSelected && overview?.isAvailable && (
329
- <div className="space-y-3 rounded-xl border border-blue-200 bg-blue-50/40 p-4">
330
- <CustomCommitPicker
331
- language={language}
332
- selectedRef={customRef}
333
- onSelectRef={(nextRef, matchedCandidate) => {
334
- setCustomRef(nextRef);
335
- setCustomCandidate(matchedCandidate);
336
- }}
337
- isDisabled={isUpdateRunning || isStartingUpdate}
338
- />
339
-
340
- {customRef.trim() && !isCustomRefRelease && (
341
- <div className="flex items-start gap-2 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800">
342
- <TriangleAlert className="mt-0.5 h-4 w-4 shrink-0" />
343
- <div>
344
- <strong>Heads up:</strong> the selected ref is not a release tag, so it may
345
- be unstable and was not validated by the regular release pipeline.
346
- </div>
347
- </div>
348
- )}
349
- </div>
350
- )}
351
-
352
- <AdvancedOriginRepositoryPanel
353
- originRepositoryUrlOverride={originRepositoryUrlOverride}
354
- onChange={setOriginRepositoryUrlOverride}
355
- overview={overview}
356
- isExpanded={isAdvancedExpanded}
357
- onToggleExpanded={() => setIsAdvancedExpanded((current) => !current)}
358
- isDisabled={isUpdateRunning || isStartingUpdate}
359
- />
360
-
361
- <button
362
- type="button"
363
- onClick={() => void startUpdate()}
364
- disabled={
365
- !overview?.isAvailable ||
366
- !selectedEnvironment ||
367
- isUpdateRunning ||
368
- isStartingUpdate ||
369
- isCustomRefMissing ||
370
- (!isCustomEnvironmentSelected &&
371
- !isEnvironmentSwitchRequired &&
372
- !overview?.isUpdateAvailable &&
373
- !isOriginOverrideChanged)
374
- }
375
- className="inline-flex w-full items-center justify-center gap-2 rounded-md bg-blue-600 px-4 py-3 text-sm font-semibold text-white hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-60"
376
- >
377
- {isStartingUpdate || isUpdateRunning ? (
378
- <Loader2 className="h-4 w-4 animate-spin" />
379
- ) : isCustomEnvironmentSelected ? (
380
- <Rocket className="h-4 w-4" />
381
- ) : isEnvironmentSwitchRequired ? (
382
- <Rocket className="h-4 w-4" />
383
- ) : (
384
- <Download className="h-4 w-4" />
385
- )}
386
- {isCustomEnvironmentSelected
387
- ? `Update to ${customRef.trim() || 'custom ref'}`
388
- : isEnvironmentSwitchRequired
389
- ? `Switch to ${selectedEnvironment?.label || 'selected environment'} and update`
390
- : 'Update to latest commit'}
391
- </button>
392
- </div>
393
- </Card>
394
- </div>
66
+ <div className="min-w-0 space-y-4">
67
+ <Card className={UPDATE_PAGE_CARD_CLASS_NAME}>
68
+ <TargetEnvironmentCard state={state} language={language} />
69
+ </Card>
395
70
 
396
- <Card className="hover:border-gray-200 hover:shadow-md">
397
- <div className="space-y-4">
398
- <div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between">
399
- <div>
400
- <h2 className="text-lg font-semibold text-slate-900">Update job</h2>
401
- <p className="mt-1 text-sm text-slate-500">
402
- The update runs in the background so the browser request can finish cleanly before pm2
403
- restarts the server.
404
- </p>
405
- </div>
406
- <span
407
- className={`inline-flex items-center gap-2 rounded-full border px-3 py-1 text-xs font-semibold uppercase tracking-wide ${
408
- overview?.job.status === 'running'
409
- ? 'border-blue-200 bg-blue-50 text-blue-700'
410
- : overview?.job.status === 'failed'
411
- ? 'border-rose-200 bg-rose-50 text-rose-700'
412
- : overview?.job.status === 'succeeded'
413
- ? 'border-emerald-200 bg-emerald-50 text-emerald-700'
414
- : 'border-slate-200 bg-slate-50 text-slate-500'
415
- }`}
416
- >
417
- {overview?.job.status || 'idle'}
418
- </span>
419
- </div>
420
-
421
- <dl className="grid gap-4 text-sm text-slate-600 md:grid-cols-2 xl:grid-cols-4">
422
- <div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
423
- <dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Target</dt>
424
- <dd className="mt-1 text-slate-900">
425
- {overview?.job.targetEnvironment.label || 'Production'}
426
- </dd>
427
- </div>
428
- <div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
429
- <dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Step</dt>
430
- <dd className="mt-1 text-slate-900">{overview?.job.currentStep || 'Idle'}</dd>
431
- </div>
432
- <div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
433
- <dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Started</dt>
434
- <dd className="mt-1 text-slate-900">
435
- {formatHumanReadableTimestamp(overview?.job.startedAt, language)}
436
- </dd>
437
- </div>
438
- <div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
439
- <dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Finished</dt>
440
- <dd className="mt-1 text-slate-900">
441
- {formatHumanReadableTimestamp(overview?.job.finishedAt, language)}
442
- </dd>
443
- </div>
444
- </dl>
445
-
446
- {overview?.job.status === 'succeeded' && (
447
- <div className="rounded-xl border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm text-emerald-700">
448
- {getUpdateJobSuccessMessage(overview.job)}
449
- </div>
450
- )}
451
- {overview?.job.status === 'failed' && (
452
- <div className="rounded-xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700">
453
- {getUpdateJobFailureMessage(overview.job)}
454
- </div>
455
- )}
456
- {overview?.job.logFilePath && (
457
- <div className="text-xs text-slate-500">
458
- Installer log:
459
- <span className="ml-2 font-mono text-slate-700">{overview.job.logFilePath}</span>
460
- </div>
461
- )}
462
- {overview?.job.status === 'failed' && <UpdateJobLogActions />}
463
- <AdminXtermTerminal
464
- terminalId={updateTerminalId}
465
- output={overview?.job.logTail || ''}
466
- emptyState={updateTerminalEmptyState}
467
- isReadOnly
468
- isPlainTextOutput
469
- ariaLabel="Standalone VPS update log"
470
- />
471
- </div>
472
- </Card>
473
-
474
- <PendingCommitsCard overview={overview} language={language} />
475
- </div>
476
- );
477
- }
478
-
479
- /**
480
- * Current-deployment metrics card, including the new commits-behind and time-behind info.
481
- *
482
- * @private internal component of `<UpdateClient/>`
483
- */
484
- function CurrentDeploymentCard({
485
- overview,
486
- language,
487
- }: {
488
- readonly overview: UpdateOverview | null;
489
- readonly language: ServerLanguageCode;
490
- }) {
491
- const driftLabel = useMemo(
492
- () => buildDeploymentDriftLabel(overview, language),
493
- [overview, language],
494
- );
495
-
496
- return (
497
- <div className="space-y-4">
498
- <div className="flex items-start gap-3">
499
- <Server className="mt-0.5 h-5 w-5 text-blue-600" />
500
- <div>
501
- <h2 className="text-lg font-semibold text-slate-900">Current deployment</h2>
502
- <p className="mt-1 text-sm text-slate-500">
503
- The server currently tracks the{' '}
504
- <span className="font-medium">
505
- {overview?.currentEnvironment.label || 'Production'}
506
- </span>{' '}
507
- environment on branch{' '}
508
- <span className="font-mono">{overview?.currentEnvironment.branch || 'production'}</span>.
509
- </p>
71
+ <Card className={UPDATE_PAGE_CARD_CLASS_NAME}>
72
+ <AutomaticSelfUpdateConfigurationCard state={state} />
73
+ </Card>
510
74
  </div>
511
75
  </div>
512
76
 
513
- <dl className="grid gap-4 text-sm text-slate-600 sm:grid-cols-2">
514
- <div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
515
- <dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Branch</dt>
516
- <dd className="mt-1 font-mono text-slate-900">
517
- {overview?.currentEnvironment.branch || 'production'}
518
- </dd>
519
- </div>
520
- <CommitSummaryCard
521
- label="Deployed commit"
522
- commitSha={overview?.currentCommitSha ?? null}
523
- shortCommitSha={overview?.currentCommitShortSha ?? null}
524
- subject={overview?.currentCommitMessage ?? null}
525
- authoredAt={overview?.currentCommitDate ?? null}
526
- language={language}
527
- />
528
- <CommitSummaryCard
529
- label="Latest remote commit"
530
- commitSha={overview?.latestRemoteCommitSha ?? null}
531
- shortCommitSha={overview?.latestRemoteCommitShortSha ?? null}
532
- subject={overview?.latestRemoteCommitMessage ?? null}
533
- authoredAt={overview?.latestRemoteCommitDate ?? null}
534
- language={language}
535
- />
536
- <div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
537
- <dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">
538
- Update availability
539
- </dt>
540
- <dd className="mt-1 flex items-center gap-2 text-slate-900">
541
- {overview?.isUpdateAvailable ? (
542
- <>
543
- <TriangleAlert className="h-4 w-4 text-amber-500" />
544
- {driftLabel}
545
- </>
546
- ) : (
547
- <>
548
- <CheckCircle2 className="h-4 w-4 text-emerald-600" />
549
- Up to date
550
- </>
551
- )}
552
- </dd>
553
- </div>
554
- </dl>
555
-
556
- {overview?.repositoryDirectory && (
557
- <div className="text-xs text-slate-500">
558
- Managed repository:
559
- <span className="ml-2 font-mono text-slate-700">{overview.repositoryDirectory}</span>
560
- </div>
561
- )}
77
+ <UpdateJobCard state={state} language={language} />
78
+ <PendingCommitsCard overview={state.overview} language={language} />
79
+ <InstalledVersionsCard state={state} language={language} />
562
80
  </div>
563
81
  );
564
82
  }
565
-
566
- /**
567
- * Renders one commit as subject, hash and authored date.
568
- *
569
- * @private internal component of `<UpdateClient/>`
570
- */
571
- function CommitSummaryCard({
572
- label,
573
- commitSha,
574
- shortCommitSha,
575
- subject,
576
- authoredAt,
577
- language,
578
- }: {
579
- readonly label: string;
580
- readonly commitSha: string | null;
581
- readonly shortCommitSha: string | null;
582
- readonly subject: string | null;
583
- readonly authoredAt: string | null;
584
- readonly language: ServerLanguageCode;
585
- }) {
586
- const commitHashLabel = commitSha || shortCommitSha || 'Unknown hash';
587
-
588
- return (
589
- <div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
590
- <dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">{label}</dt>
591
- <dd className="mt-1 text-slate-900">{subject || 'Unknown commit subject'}</dd>
592
- <div className="mt-2 break-all font-mono text-xs text-slate-600">{commitHashLabel}</div>
593
- <div className="mt-1 text-xs text-slate-500">{formatHumanReadableTimestamp(authoredAt, language)}</div>
594
- </div>
595
- );
596
- }
597
-
598
- /**
599
- * Lists the commits between the deployed checkout and the latest remote commit so the super admin can review what
600
- * exactly is about to be installed before triggering the self-update.
601
- *
602
- * @private internal component of `<UpdateClient/>`
603
- */
604
- function PendingCommitsCard({
605
- overview,
606
- language,
607
- }: {
608
- readonly overview: UpdateOverview | null;
609
- readonly language: ServerLanguageCode;
610
- }) {
611
- if (!overview || overview.pendingCommits.length === 0) {
612
- return null;
613
- }
614
-
615
- const commitsBehindLabel =
616
- overview.commitsBehindCount !== null && overview.commitsBehindCount > 0
617
- ? `${overview.commitsBehindCount} commit${overview.commitsBehindCount === 1 ? '' : 's'} behind`
618
- : `${overview.pendingCommits.length} commit${overview.pendingCommits.length === 1 ? '' : 's'} pending`;
619
- const timeBehindLabel = buildDeploymentTimeBehindLabel(overview, language);
620
-
621
- return (
622
- <Card className="hover:border-gray-200 hover:shadow-md">
623
- <div className="space-y-4">
624
- <div className="flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between">
625
- <div className="flex items-start gap-3">
626
- <GitCommit className="mt-0.5 h-5 w-5 text-amber-500" />
627
- <div>
628
- <h2 className="text-lg font-semibold text-slate-900">Pending commits</h2>
629
- <p className="mt-1 text-sm text-slate-500">
630
- Commits between the currently deployed checkout and the latest commit on{' '}
631
- <span className="font-mono">{overview.currentEnvironment.branch}</span>.
632
- </p>
633
- </div>
634
- </div>
635
- <div className="text-xs font-semibold uppercase tracking-wide text-slate-500 sm:text-right">
636
- <div>{commitsBehindLabel}</div>
637
- {timeBehindLabel && <div className="mt-1 normal-case text-slate-400">{timeBehindLabel}</div>}
638
- </div>
639
- </div>
640
-
641
- <ul className="divide-y divide-slate-100 rounded-xl border border-slate-200 bg-white">
642
- {overview.pendingCommits.map((pendingCommit) => (
643
- <li key={pendingCommit.commitSha} className="px-4 py-3">
644
- <div className="text-sm text-slate-900">{pendingCommit.subject}</div>
645
- <div className="mt-1 break-all font-mono text-xs text-slate-500">
646
- {pendingCommit.commitSha || pendingCommit.shortCommitSha}
647
- </div>
648
- <div className="mt-1 text-xs text-slate-500">
649
- {formatHumanReadableTimestamp(pendingCommit.authoredAt, language)}
650
- </div>
651
- </li>
652
- ))}
653
- </ul>
654
- </div>
655
- </Card>
656
- );
657
- }
658
-
659
- /**
660
- * Renders the copy / download actions for the persisted standalone VPS self-update log file.
661
- *
662
- * Shown when the latest update job failed so the super admin can quickly share the full log with the developers.
663
- *
664
- * @private internal component of `<UpdateClient/>`
665
- */
666
- function UpdateJobLogActions() {
667
- const [actionFeedback, setActionFeedback] = useState<string | null>(null);
668
- const [actionErrorMessage, setActionErrorMessage] = useState<string | null>(null);
669
- const [isCopying, setIsCopying] = useState(false);
670
- const [isDownloading, setIsDownloading] = useState(false);
671
- const feedbackTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
672
-
673
- useEffect(() => {
674
- return () => {
675
- if (feedbackTimeoutRef.current !== null) {
676
- clearTimeout(feedbackTimeoutRef.current);
677
- feedbackTimeoutRef.current = null;
678
- }
679
- };
680
- }, []);
681
-
682
- function showActionFeedback(feedbackMessage: string): void {
683
- if (feedbackTimeoutRef.current !== null) {
684
- clearTimeout(feedbackTimeoutRef.current);
685
- }
686
- setActionFeedback(feedbackMessage);
687
- setActionErrorMessage(null);
688
- feedbackTimeoutRef.current = setTimeout(() => {
689
- setActionFeedback(null);
690
- feedbackTimeoutRef.current = null;
691
- }, UPDATE_LOG_ACTION_FEEDBACK_DURATION_MS);
692
- }
693
-
694
- async function fetchUpdateLogResponse(): Promise<Response> {
695
- const response = await fetch('/api/admin/update/log', { cache: 'no-store' });
696
- if (!response.ok) {
697
- const errorPayload = (await response.json().catch(() => null)) as { readonly error?: string } | null;
698
- throw new Error(errorPayload?.error || 'Failed to load the self-update log file.');
699
- }
700
- return response;
701
- }
702
-
703
- async function handleCopyLog(): Promise<void> {
704
- if (isCopying || isDownloading) {
705
- return;
706
- }
707
-
708
- try {
709
- setIsCopying(true);
710
- setActionErrorMessage(null);
711
- if (!navigator.clipboard?.writeText) {
712
- throw new Error('The browser clipboard API is unavailable in this context.');
713
- }
714
- const response = await fetchUpdateLogResponse();
715
- const logContent = await response.text();
716
- await navigator.clipboard.writeText(logContent);
717
- showActionFeedback('Self-update log copied to clipboard.');
718
- } catch (error) {
719
- setActionErrorMessage(error instanceof Error ? error.message : 'Failed to copy the self-update log.');
720
- } finally {
721
- setIsCopying(false);
722
- }
723
- }
724
-
725
- async function handleDownloadLog(): Promise<void> {
726
- if (isCopying || isDownloading) {
727
- return;
728
- }
729
-
730
- try {
731
- setIsDownloading(true);
732
- setActionErrorMessage(null);
733
- const response = await fetchUpdateLogResponse();
734
- const logFilename =
735
- parseFilenameFromContentDisposition(response.headers.get('Content-Disposition')) ||
736
- DEFAULT_UPDATE_LOG_DOWNLOAD_FILENAME;
737
- const logBlob = await response.blob();
738
- downloadBlob(logBlob, logFilename);
739
- showActionFeedback(`Saved self-update log as ${logFilename}.`);
740
- } catch (error) {
741
- setActionErrorMessage(error instanceof Error ? error.message : 'Failed to download the self-update log.');
742
- } finally {
743
- setIsDownloading(false);
744
- }
745
- }
746
-
747
- return (
748
- <div className="flex flex-wrap items-center gap-3 rounded-xl border border-rose-200 bg-rose-50/40 px-4 py-3 text-sm text-rose-700">
749
- <span className="font-medium">Share the log with the developers:</span>
750
- <button
751
- type="button"
752
- onClick={() => void handleCopyLog()}
753
- disabled={isCopying || isDownloading}
754
- className="inline-flex items-center gap-2 rounded-md border border-rose-200 bg-white px-3 py-1.5 text-xs font-semibold text-rose-700 hover:bg-rose-100 disabled:cursor-not-allowed disabled:opacity-60"
755
- >
756
- {isCopying ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <ClipboardCopy className="h-3.5 w-3.5" />}
757
- Copy log
758
- </button>
759
- <button
760
- type="button"
761
- onClick={() => void handleDownloadLog()}
762
- disabled={isCopying || isDownloading}
763
- className="inline-flex items-center gap-2 rounded-md border border-rose-200 bg-white px-3 py-1.5 text-xs font-semibold text-rose-700 hover:bg-rose-100 disabled:cursor-not-allowed disabled:opacity-60"
764
- >
765
- {isDownloading ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <FileDown className="h-3.5 w-3.5" />}
766
- Download log
767
- </button>
768
- {actionFeedback && (
769
- <span className="text-xs text-rose-600" role="status" aria-live="polite">
770
- {actionFeedback}
771
- </span>
772
- )}
773
- {actionErrorMessage && (
774
- <span className="text-xs text-rose-700" role="alert">
775
- {actionErrorMessage}
776
- </span>
777
- )}
778
- </div>
779
- );
780
- }
781
-
782
- /**
783
- * Collapsible advanced panel for overriding the upstream repository URL.
784
- *
785
- * @private internal component of `<UpdateClient/>`
786
- */
787
- function AdvancedOriginRepositoryPanel({
788
- originRepositoryUrlOverride,
789
- onChange,
790
- overview,
791
- isExpanded,
792
- onToggleExpanded,
793
- isDisabled,
794
- }: {
795
- readonly originRepositoryUrlOverride: string;
796
- readonly onChange: (nextValue: string) => void;
797
- readonly overview: UpdateOverview | null;
798
- readonly isExpanded: boolean;
799
- readonly onToggleExpanded: () => void;
800
- readonly isDisabled: boolean;
801
- }) {
802
- return (
803
- <div className="rounded-xl border border-slate-200 bg-white">
804
- <button
805
- type="button"
806
- onClick={onToggleExpanded}
807
- className="flex w-full items-center justify-between gap-3 px-4 py-3 text-sm font-semibold text-slate-700"
808
- >
809
- <span className="inline-flex items-center gap-2">
810
- <Settings2 className="h-4 w-4" />
811
- Advanced
812
- </span>
813
- {isExpanded ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
814
- </button>
815
- {isExpanded && (
816
- <div className="space-y-3 border-t border-slate-100 px-4 py-3 text-sm text-slate-600">
817
- <label className="block">
818
- <span className="text-xs font-semibold uppercase tracking-wide text-slate-500">
819
- Upstream repository URL
820
- </span>
821
- <input
822
- type="url"
823
- value={originRepositoryUrlOverride}
824
- onChange={(event) => onChange(event.target.value)}
825
- disabled={isDisabled}
826
- placeholder={overview?.defaultOriginRepositoryUrl || ''}
827
- className="mt-1 w-full rounded-md border border-slate-300 bg-white px-3 py-2 font-mono text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 disabled:cursor-not-allowed disabled:opacity-60"
828
- />
829
- </label>
830
- <p className="text-xs text-slate-500">
831
- Defaults to <span className="font-mono">{overview?.defaultOriginRepositoryUrl}</span>. Only
832
- change this if you self-host a fork of the original Promptbook repository — the new value is
833
- persisted in the standalone VPS <code>.env</code>.
834
- </p>
835
- {overview && !overview.isOriginRepositoryDefault && (
836
- <div className="rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800">
837
- <strong>Custom origin active:</strong> updates currently pull from{' '}
838
- <span className="font-mono">{overview.originRepositoryUrl}</span>.
839
- </div>
840
- )}
841
- </div>
842
- )}
843
- </div>
844
- );
845
- }
846
-
847
- /**
848
- * Builds the "behind by …" label combining commits-behind and time-behind info.
849
- *
850
- * @param overview - Current overview snapshot.
851
- * @param language - Active UI language for moment localization.
852
- * @returns Human-readable label or fallback text.
853
- */
854
- function buildDeploymentDriftLabel(overview: UpdateOverview | null, language: ServerLanguageCode): string {
855
- if (!overview) {
856
- return 'New commit available';
857
- }
858
-
859
- const commitsBehindLabel =
860
- overview.commitsBehindCount !== null && overview.commitsBehindCount > 0
861
- ? `${overview.commitsBehindCount} commit${overview.commitsBehindCount === 1 ? '' : 's'} behind`
862
- : 'New commit available';
863
-
864
- const timeBehindLabel = buildDeploymentTimeBehindLabel(overview, language);
865
- if (!timeBehindLabel) {
866
- return commitsBehindLabel;
867
- }
868
-
869
- return `${commitsBehindLabel} · ${timeBehindLabel}`;
870
- }
871
-
872
- /**
873
- * Builds the localized time-behind portion of the deployment drift label (e.g. `3 days behind`).
874
- *
875
- * @param overview - Current overview snapshot.
876
- * @param language - Active UI language for moment localization.
877
- * @returns Time-behind label or empty string when either side of the comparison is missing.
878
- */
879
- function buildDeploymentTimeBehindLabel(overview: UpdateOverview | null, language: ServerLanguageCode): string {
880
- if (!overview?.currentCommitDate || !overview.latestRemoteCommitDate) {
881
- return '';
882
- }
883
-
884
- const currentMoment = createServerLanguageMoment(overview.currentCommitDate, language);
885
- const latestMoment = createServerLanguageMoment(overview.latestRemoteCommitDate, language);
886
- if (!currentMoment.isValid() || !latestMoment.isValid()) {
887
- return '';
888
- }
889
-
890
- return `${currentMoment.from(latestMoment, true)} behind`;
891
- }
892
-
893
- /**
894
- * Builds the success message for a finished standalone VPS update.
895
- *
896
- * @param job - Completed update job snapshot.
897
- * @returns Human-readable success message.
898
- */
899
- function getUpdateJobSuccessMessage(job: UpdateJobSnapshot): string {
900
- return job.currentStep || 'Standalone VPS update finished successfully.';
901
- }
902
-
903
- /**
904
- * Builds the failure message for a failed standalone VPS update.
905
- *
906
- * @param job - Failed update job snapshot.
907
- * @returns Human-readable failure message.
908
- */
909
- function getUpdateJobFailureMessage(job: UpdateJobSnapshot): string {
910
- return job.errorMessage || 'The standalone VPS update failed. Review the installer log for details.';
911
- }
912
-
913
- /**
914
- * Formats optional timestamps for the status cards using `moment.js` with the active UI language.
915
- *
916
- * @param value - ISO timestamp or `null`.
917
- * @param language - Active UI language code.
918
- * @returns Localized human-friendly timestamp or fallback text.
919
- */
920
- function formatHumanReadableTimestamp(value: string | null | undefined, language: ServerLanguageCode): string {
921
- return formatServerLanguageHumanReadableDate(value, language, {
922
- fallbackLabel: 'Not available',
923
- isExactDateIncluded: true,
924
- });
925
- }