@promptbook/cli 0.114.0-13 → 0.114.0-18

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 (231) hide show
  1. package/apps/agents-server/next.config.ts +6 -0
  2. package/apps/agents-server/src/app/admin/_components/AdminFilterFields.tsx +84 -0
  3. package/apps/agents-server/src/app/admin/_components/AdminMetricCard.tsx +36 -0
  4. package/apps/agents-server/src/app/admin/_components/AdminTaskManagerTabs.tsx +97 -0
  5. package/apps/agents-server/src/app/admin/planned-messages/PlannedMessageManagerClient.tsx +103 -0
  6. package/apps/agents-server/src/app/admin/planned-messages/PlannedMessageManagerEditDialog.tsx +232 -0
  7. package/apps/agents-server/src/app/admin/planned-messages/PlannedMessageManagerFiltersCard.tsx +195 -0
  8. package/apps/agents-server/src/app/admin/planned-messages/PlannedMessageManagerRow.tsx +189 -0
  9. package/apps/agents-server/src/app/admin/planned-messages/PlannedMessageManagerSummaryMetrics.tsx +60 -0
  10. package/apps/agents-server/src/app/admin/planned-messages/PlannedMessageManagerTableCard.tsx +147 -0
  11. package/apps/agents-server/src/app/admin/planned-messages/page.tsx +17 -0
  12. package/apps/agents-server/src/app/admin/planned-messages/plannedMessageEditForm.ts +186 -0
  13. package/apps/agents-server/src/app/admin/planned-messages/plannedMessageManagerDialogs.ts +46 -0
  14. package/apps/agents-server/src/app/admin/planned-messages/plannedMessageManagerPresentation.tsx +188 -0
  15. package/apps/agents-server/src/app/admin/planned-messages/resolvePlannedMessageSortValue.ts +115 -0
  16. package/apps/agents-server/src/app/admin/planned-messages/usePlannedMessageManagerData.ts +116 -0
  17. package/apps/agents-server/src/app/admin/planned-messages/usePlannedMessageManagerState.ts +289 -0
  18. package/apps/agents-server/src/app/admin/task-manager/TaskManagerClient.tsx +7 -2
  19. package/apps/agents-server/src/app/admin/task-manager/TaskManagerFiltersCard.tsx +7 -73
  20. package/apps/agents-server/src/app/admin/task-manager/TaskManagerSummaryMetrics.tsx +5 -30
  21. package/apps/agents-server/src/app/admin/task-manager/[taskId]/TaskManagerTaskDetailClient.tsx +1 -1
  22. package/apps/agents-server/src/app/agents/[agentName]/api/book/reference-diagnostics/route.ts +30 -7
  23. package/apps/agents-server/src/app/agents/[agentName]/api/book/route.ts +1 -0
  24. package/apps/agents-server/src/app/agents/[agentName]/api/book/test.http +3 -3
  25. package/apps/agents-server/src/app/agents/[agentName]/book/BookEditorMissingReferences.tsx +106 -12
  26. package/apps/agents-server/src/app/agents/[agentName]/book/BookEditorWrapper.tsx +3 -0
  27. package/apps/agents-server/src/app/agents/[agentName]/book/useBookEditorDiagnostics.ts +12 -0
  28. package/apps/agents-server/src/app/agents/[agentName]/book/useBookEditorWrapper.tsx +2 -0
  29. package/apps/agents-server/src/app/agents/[agentName]/chat/AgentGoalChatPlannedMessages.tsx +46 -3
  30. package/apps/agents-server/src/app/api/admin/default-agents/reinstate/route.ts +5 -1
  31. package/apps/agents-server/src/app/api/admin/planned-messages/[timeoutId]/route.ts +80 -0
  32. package/apps/agents-server/src/app/api/admin/planned-messages/route.ts +19 -0
  33. package/apps/agents-server/src/app/api/internal/agent-goal-chat-planned-messages/route.ts +30 -2
  34. package/apps/agents-server/src/components/DefaultAgents/ReinstateBundledAgentsButton.tsx +7 -0
  35. package/apps/agents-server/src/components/DefaultAgents/coreAgentsAdminRoute.ts +6 -0
  36. package/apps/agents-server/src/components/Header/buildHeaderSystemMenuItems.ts +7 -0
  37. package/apps/agents-server/src/components/Homepage/DefaultAgentsStatusNotice.tsx +1 -7
  38. package/apps/agents-server/src/database/migrations/2026-08-1800-user-chat-timeout-schedule.sql +11 -0
  39. package/apps/agents-server/src/instrumentation-node.ts +18 -0
  40. package/apps/agents-server/src/languages/ServerTranslationKeys.ts +4 -0
  41. package/apps/agents-server/src/languages/translations/czech.yaml +4 -0
  42. package/apps/agents-server/src/languages/translations/english.yaml +4 -0
  43. package/apps/agents-server/src/tools/agentGoalChatTimeoutToolFunctions.ts +62 -15
  44. package/apps/agents-server/src/tools/agentGoalChatTimeoutTools.ts +63 -9
  45. package/apps/agents-server/src/utils/adminEntityLookups/loadAgentNamesByPermanentId.ts +45 -0
  46. package/apps/agents-server/src/utils/adminEntityLookups/loadUsernamesByUserId.ts +36 -0
  47. package/apps/agents-server/src/utils/adminEntityLookups.ts +2 -0
  48. package/apps/agents-server/src/utils/agentGoalChat/agentGoalChatPlannedMessageActions.ts +299 -52
  49. package/apps/agents-server/src/utils/agentGoalChat/createAgentGoalChatNoteContent.ts +45 -17
  50. package/apps/agents-server/src/utils/agentGoalChat.ts +1 -0
  51. package/apps/agents-server/src/utils/agentProjects/agentProjectIdentity.ts +46 -0
  52. package/apps/agents-server/src/utils/agentProjects/agentProjectRuntimeAutostartScheduler.ts +162 -0
  53. package/apps/agents-server/src/utils/agentProjects/agentProjectRuntimeDesiredState.ts +252 -0
  54. package/apps/agents-server/src/utils/agentProjects/agentProjectRuntimeDisplay.ts +6 -3
  55. package/apps/agents-server/src/utils/agentProjects/agentProjectRuntimeDomains.ts +2 -44
  56. package/apps/agents-server/src/utils/agentProjects/agentProjectRuntimePaths.ts +25 -0
  57. package/apps/agents-server/src/utils/agentProjects/agentProjectRuntimePm2.ts +4 -3
  58. package/apps/agents-server/src/utils/agentProjects/agentProjectRuntimeRegistry.ts +77 -24
  59. package/apps/agents-server/src/utils/agentProjects/agentProjectStateMutationQueue.ts +58 -0
  60. package/apps/agents-server/src/utils/agentProjects/listAllLocalAgentProjectIdentities.ts +48 -0
  61. package/apps/agents-server/src/utils/agentProjects/resolveAgentProjectRuntimeEnvironmentFlag.ts +23 -0
  62. package/apps/agents-server/src/utils/agentProjects/resolveAgentProjectRuntimeStatus.ts +73 -0
  63. package/apps/agents-server/src/utils/agentProjects/startDefaultAgentProjectRuntimes.ts +110 -0
  64. package/apps/agents-server/src/utils/agentReferenceResolver/MissingCoreAgentRecovery.ts +19 -0
  65. package/apps/agents-server/src/utils/agentReferenceResolver/bookScopedAgentReferences.ts +7 -0
  66. package/apps/agents-server/src/utils/agentReferenceResolver/createAgentInheritanceDiagnostics.ts +457 -0
  67. package/apps/agents-server/src/utils/agentReferenceResolver/createUnresolvedAgentReferenceDiagnostics.ts +27 -0
  68. package/apps/agents-server/src/utils/agentReferenceResolver/resolveCoreAgentAwareMissingReferences.ts +156 -0
  69. package/apps/agents-server/src/utils/chatMessageChips/createAnsweredMessageChipToolCalls.ts +15 -3
  70. package/apps/agents-server/src/utils/chatMessageChips/createPlannedMessageChipToolCalls.ts +8 -3
  71. package/apps/agents-server/src/utils/chatMessageChips/createTouchedExternalSourceChipToolCalls.ts +39 -0
  72. package/apps/agents-server/src/utils/chatMessageChips/createTouchedProjectChipResult.ts +45 -0
  73. package/apps/agents-server/src/utils/chatMessageChips/createTouchedProjectChipToolCalls.ts +58 -24
  74. package/apps/agents-server/src/utils/cronExpression/CronExpression.ts +63 -0
  75. package/apps/agents-server/src/utils/cronExpression/normalizeCronExpression.ts +34 -0
  76. package/apps/agents-server/src/utils/cronExpression/normalizeCronExpressionWhitespace.ts +11 -0
  77. package/apps/agents-server/src/utils/cronExpression/parseCronExpression.ts +41 -0
  78. package/apps/agents-server/src/utils/cronExpression/parseCronExpressionField.ts +140 -0
  79. package/apps/agents-server/src/utils/cronExpression/resolveNextCronRun.ts +100 -0
  80. package/apps/agents-server/src/utils/cronExpression/throwInvalidCronExpressionField.ts +20 -0
  81. package/apps/agents-server/src/utils/cronExpression.ts +10 -0
  82. package/apps/agents-server/src/utils/explicitFromCommitment.ts +130 -0
  83. package/apps/agents-server/src/utils/getAdminChatTasksResponse/getAdminChatTasks/loadAdminChatTaskFallbackData.ts +3 -77
  84. package/apps/agents-server/src/utils/localChatRunner/applyLocalAgentPlannedMessageCommands.ts +53 -4
  85. package/apps/agents-server/src/utils/localChatRunner/prepareLocalAgentPlannedMessagesSidecar.ts +15 -7
  86. package/apps/agents-server/src/utils/localChatRunner/processLocalUserChatJob.ts +8 -0
  87. package/apps/agents-server/src/utils/manGoOnboarding/manGoOnboardingAgentBooks.ts +5 -11
  88. package/apps/agents-server/src/utils/manGoOnboarding/manGoOnboardingAgentRuntime.ts +2 -2
  89. package/apps/agents-server/src/utils/managementApi/managementApiSchemas.ts +2 -2
  90. package/apps/agents-server/src/utils/plannedMessageManager/cancelManagedPlannedMessage.ts +35 -0
  91. package/apps/agents-server/src/utils/plannedMessageManager/collectPlannedMessageAgentOptions.ts +56 -0
  92. package/apps/agents-server/src/utils/plannedMessageManager/createPlannedMessageManagerCounters.ts +104 -0
  93. package/apps/agents-server/src/utils/plannedMessageManager/filterPlannedMessages.ts +191 -0
  94. package/apps/agents-server/src/utils/plannedMessageManager/getPlannedMessageManagerResponse.ts +55 -0
  95. package/apps/agents-server/src/utils/plannedMessageManager/isPlannedMessageStillPlanned.ts +18 -0
  96. package/apps/agents-server/src/utils/plannedMessageManager/loadPlannedMessageManagerRecord.ts +32 -0
  97. package/apps/agents-server/src/utils/plannedMessageManager/mapPlannedMessageManagerRecord.ts +73 -0
  98. package/apps/agents-server/src/utils/plannedMessageManager/parsePlannedMessageManagerUpdateRequest.ts +76 -0
  99. package/apps/agents-server/src/utils/plannedMessageManager/resolvePlannedMessageEndReason.ts +59 -0
  100. package/apps/agents-server/src/utils/plannedMessageManager/resolvePlannedMessageLifecycle.ts +99 -0
  101. package/apps/agents-server/src/utils/plannedMessageManager/resolvePlannedMessageRecurrenceKind.ts +40 -0
  102. package/apps/agents-server/src/utils/plannedMessageManager/updateManagedPlannedMessage.ts +121 -0
  103. package/apps/agents-server/src/utils/plannedMessagesAdmin.ts +200 -0
  104. package/apps/agents-server/src/utils/resolveInheritedAgentSource.ts +114 -95
  105. package/apps/agents-server/src/utils/userChatClient.ts +4 -0
  106. package/apps/agents-server/src/utils/userChatTimeout/UserChatTimeoutRecord.ts +37 -1
  107. package/apps/agents-server/src/utils/userChatTimeout/agentScopedTimeoutBulkActions.ts +11 -17
  108. package/apps/agents-server/src/utils/userChatTimeout/createTimeoutWakeUpMessage.ts +37 -13
  109. package/apps/agents-server/src/utils/userChatTimeout/plannedMessageSchedule/PlannedMessageSchedule.ts +52 -0
  110. package/apps/agents-server/src/utils/userChatTimeout/plannedMessageSchedule/hasPlannedMessageRecurrence.ts +13 -0
  111. package/apps/agents-server/src/utils/userChatTimeout/plannedMessageSchedule/isPlannedMessageScheduleFinished.ts +30 -0
  112. package/apps/agents-server/src/utils/userChatTimeout/plannedMessageSchedule/normalizePlannedMessageScheduleValues.ts +62 -0
  113. package/apps/agents-server/src/utils/userChatTimeout/plannedMessageSchedule/parsePlannedMessageSchedule.ts +202 -0
  114. package/apps/agents-server/src/utils/userChatTimeout/plannedMessageSchedule/resolvePlannedMessageDueAt.ts +121 -0
  115. package/apps/agents-server/src/utils/userChatTimeout/plannedMessageSchedule.ts +12 -0
  116. package/apps/agents-server/src/utils/userChatTimeout/setAgentScopedUserChatTimeoutPausedState.ts +66 -0
  117. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutStore/createUserChatTimeout.ts +76 -5
  118. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutStore/listAllUserChatTimeouts.ts +37 -0
  119. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutStore/mapUserChatTimeoutRow.ts +9 -0
  120. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutStore/repeatFiredUserChatTimeout.ts +19 -9
  121. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutStore/updateAgentScopedUserChatTimeout.ts +39 -6
  122. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutStore.ts +1 -0
  123. package/apps/agents-server/src/utils/userChatTimeout/userChatTimeoutWorker.ts +110 -11
  124. package/apps/agents-server/src/utils/userChatTimeout.ts +16 -0
  125. package/apps/agents-server/src/utils/vpsSelfUpdate/vpsSelfUpdateCron.ts +23 -316
  126. package/apps/agents-server/tests/e2e/support/AgentManagementApi.ts +3 -3
  127. package/esm/index.es.js +951 -102
  128. package/esm/index.es.js.map +1 -1
  129. package/esm/scripts/run-agent-messages/git/commitAgentProjectChanges.d.ts +15 -0
  130. package/esm/scripts/run-agent-messages/git/commitAnsweredMessageProjectChanges.d.ts +24 -0
  131. package/esm/scripts/run-agent-messages/git/ensureAgentProjectGitRepository.d.ts +20 -0
  132. package/esm/scripts/run-agent-messages/git/readAgentProjectCommitChange.d.ts +11 -0
  133. package/esm/scripts/run-agent-messages/git/runAgentProjectGitCommand.d.ts +29 -0
  134. package/esm/scripts/run-agent-messages/messages/buildAgentGoalChatPromptSection.d.ts +3 -3
  135. package/esm/scripts/run-agent-messages/messages/listAgentProjectDirectoryNames.d.ts +7 -0
  136. package/esm/scripts/run-agent-messages/messages/resolveAnsweredMessageTouches.d.ts +29 -0
  137. package/esm/scripts/run-codex-prompts/ping/pingCoderHarnessPeriodically.d.ts +22 -0
  138. package/esm/src/book-3.0/AgentMessageRunReport.d.ts +18 -0
  139. package/esm/src/book-3.0/AgentPlannedMessagesSidecar.d.ts +38 -5
  140. package/esm/src/book-3.0/describeAgentPlannedMessageSchedule.d.ts +31 -0
  141. package/esm/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.browser.d.ts +1 -9
  142. package/esm/src/book-components/BookEditor/createDuplicateFromCommitmentDiagnostics.d.ts +28 -0
  143. package/esm/src/book-components/BookEditor/createDuplicateFromCommitmentDiagnostics.test.d.ts +1 -0
  144. package/esm/src/book-components/Chat/Chat/renderAgentProjectDiff.d.ts +13 -0
  145. package/esm/src/book-components/Chat/Chat/renderAgentProjectToolCallDetails.d.ts +16 -0
  146. package/esm/src/book-components/Chat/utils/agentProjectToolCall.d.ts +39 -0
  147. package/esm/src/book-components/Chat/utils/agentProjectToolCall.test.d.ts +1 -0
  148. package/esm/src/book-components/Chat/utils/externalSourceToolCall.d.ts +38 -0
  149. package/esm/src/book-components/Chat/utils/timeoutToolCallPresentation.d.ts +6 -0
  150. package/esm/src/cli/cli-commands/coder/waitOptions.d.ts +12 -0
  151. package/esm/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +15 -0
  152. package/esm/src/utils/agent-message-runtime/AgentMessageProjectChange.d.ts +76 -0
  153. package/esm/src/utils/agent-message-runtime/AgentMessageTouchedExternalSource.d.ts +45 -0
  154. package/esm/src/utils/agent-message-runtime/parseAgentMessageRuntimeLogEvents.d.ts +3 -0
  155. package/esm/src/utils/agent-message-runtime/resolveAgentMessageTouchedExternalSources.d.ts +18 -0
  156. package/esm/src/utils/agent-message-runtime/resolveAgentMessageTouchedExternalSources.test.d.ts +1 -0
  157. package/esm/src/utils/random/$generateBookBoilerplate.test.d.ts +1 -0
  158. package/esm/src/version.d.ts +1 -1
  159. package/package.json +1 -1
  160. package/src/book-2.0/agent-source/string_book.ts +1 -1
  161. package/src/book-2.0/book-language-documentation/czechBookLanguageManualDictionary.ts +6 -1
  162. package/src/book-2.0/book-language-documentation/englishBookLanguageManualDictionary.ts +6 -1
  163. package/src/book-3.0/AgentMessageRunReport.ts +59 -0
  164. package/src/book-3.0/AgentPlannedMessagesSidecar.ts +64 -9
  165. package/src/book-3.0/describeAgentPlannedMessageSchedule.ts +94 -0
  166. package/src/book-components/BookEditor/BookEditorMonaco.tsx +2 -0
  167. package/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.browser.ts +3 -11
  168. package/src/book-components/BookEditor/createDuplicateFromCommitmentDiagnostics.ts +71 -0
  169. package/src/book-components/Chat/Chat/Chat.module.css +165 -18
  170. package/src/book-components/Chat/Chat/ChatMessageMap.tsx +0 -1
  171. package/src/book-components/Chat/Chat/renderAgentProjectDiff.tsx +85 -0
  172. package/src/book-components/Chat/Chat/renderAgentProjectToolCallDetails.tsx +206 -0
  173. package/src/book-components/Chat/Chat/renderToolCallDetails.tsx +8 -0
  174. package/src/book-components/Chat/MarkdownContent/MarkdownContent.tsx +2 -3
  175. package/src/book-components/Chat/utils/agentProjectToolCall.ts +82 -5
  176. package/src/book-components/Chat/utils/externalSourceToolCall.ts +65 -0
  177. package/src/book-components/Chat/utils/getToolCallChipletInfo.ts +36 -0
  178. package/src/book-components/Chat/utils/renderMarkdown.ts +3 -10
  179. package/src/book-components/Chat/utils/timeoutToolCallPresentation.ts +12 -1
  180. package/src/cli/cli-commands/coder/ping.ts +35 -9
  181. package/src/cli/cli-commands/coder/waitOptions.ts +33 -0
  182. package/src/cli/cli-commands/common/harness/$applyHarnessInstallationStatus.ts +3 -1
  183. package/src/cli/cli-commands/common/harness/$checkHarnessInstallation.ts +3 -1
  184. package/src/cli/cli-commands/common/harnessUpdateCliOptions.ts +1 -4
  185. package/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.ts +47 -3
  186. package/src/commands/FORMAT/formatCommandParser.ts +4 -2
  187. package/src/commitments/FROM/FROM.ts +13 -0
  188. package/src/other/templates/getTemplatesPipelineCollection.ts +819 -751
  189. package/src/utils/agent-message-runtime/AgentMessageProjectChange.ts +183 -0
  190. package/src/utils/agent-message-runtime/AgentMessageTouchedExternalSource.ts +80 -0
  191. package/src/utils/agent-message-runtime/parseAgentMessageRuntimeLogEvents.ts +3 -0
  192. package/src/utils/agent-message-runtime/resolveAgentMessageRuntimeActivity.ts +2 -4
  193. package/src/utils/agent-message-runtime/resolveAgentMessageTouchedExternalSources.ts +341 -0
  194. package/src/utils/random/$generateBookBoilerplate.ts +1 -1
  195. package/src/version.ts +2 -2
  196. package/src/versions.txt +5 -0
  197. package/umd/index.umd.js +950 -101
  198. package/umd/index.umd.js.map +1 -1
  199. package/umd/scripts/run-agent-messages/git/commitAgentProjectChanges.d.ts +15 -0
  200. package/umd/scripts/run-agent-messages/git/commitAnsweredMessageProjectChanges.d.ts +24 -0
  201. package/umd/scripts/run-agent-messages/git/ensureAgentProjectGitRepository.d.ts +20 -0
  202. package/umd/scripts/run-agent-messages/git/readAgentProjectCommitChange.d.ts +11 -0
  203. package/umd/scripts/run-agent-messages/git/runAgentProjectGitCommand.d.ts +29 -0
  204. package/umd/scripts/run-agent-messages/messages/buildAgentGoalChatPromptSection.d.ts +3 -3
  205. package/umd/scripts/run-agent-messages/messages/listAgentProjectDirectoryNames.d.ts +7 -0
  206. package/umd/scripts/run-agent-messages/messages/resolveAnsweredMessageTouches.d.ts +29 -0
  207. package/umd/scripts/run-codex-prompts/ping/pingCoderHarnessPeriodically.d.ts +22 -0
  208. package/umd/src/book-3.0/AgentMessageRunReport.d.ts +18 -0
  209. package/umd/src/book-3.0/AgentPlannedMessagesSidecar.d.ts +38 -5
  210. package/umd/src/book-3.0/describeAgentPlannedMessageSchedule.d.ts +31 -0
  211. package/umd/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.browser.d.ts +1 -9
  212. package/umd/src/book-components/BookEditor/createDuplicateFromCommitmentDiagnostics.d.ts +28 -0
  213. package/umd/src/book-components/BookEditor/createDuplicateFromCommitmentDiagnostics.test.d.ts +1 -0
  214. package/umd/src/book-components/Chat/Chat/renderAgentProjectDiff.d.ts +13 -0
  215. package/umd/src/book-components/Chat/Chat/renderAgentProjectToolCallDetails.d.ts +16 -0
  216. package/umd/src/book-components/Chat/utils/agentProjectToolCall.d.ts +39 -0
  217. package/umd/src/book-components/Chat/utils/agentProjectToolCall.test.d.ts +1 -0
  218. package/umd/src/book-components/Chat/utils/externalSourceToolCall.d.ts +38 -0
  219. package/umd/src/book-components/Chat/utils/timeoutToolCallPresentation.d.ts +6 -0
  220. package/umd/src/cli/cli-commands/coder/waitOptions.d.ts +12 -0
  221. package/umd/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +15 -0
  222. package/umd/src/utils/agent-message-runtime/AgentMessageProjectChange.d.ts +76 -0
  223. package/umd/src/utils/agent-message-runtime/AgentMessageTouchedExternalSource.d.ts +45 -0
  224. package/umd/src/utils/agent-message-runtime/parseAgentMessageRuntimeLogEvents.d.ts +3 -0
  225. package/umd/src/utils/agent-message-runtime/resolveAgentMessageTouchedExternalSources.d.ts +18 -0
  226. package/umd/src/utils/agent-message-runtime/resolveAgentMessageTouchedExternalSources.test.d.ts +1 -0
  227. package/umd/src/utils/random/$generateBookBoilerplate.test.d.ts +1 -0
  228. package/umd/src/version.d.ts +1 -1
  229. package/apps/agents-server/src/app/admin/task-manager/TaskManagerScopeTabs.tsx +0 -74
  230. package/esm/scripts/run-agent-messages/messages/resolveTouchedAgentProjects.d.ts +0 -15
  231. package/umd/scripts/run-agent-messages/messages/resolveTouchedAgentProjects.d.ts +0 -15
@@ -17,6 +17,9 @@ goalChat.plannedMessagesEmptyLabel: No planned messages. The agent will wake up
17
17
  goalChat.plannedMessagesLoadErrorLabel: Failed to load planned messages.
18
18
  goalChat.plannedMessageDefaultLabel: Planned wake-up
19
19
  goalChat.plannedMessageIntervalLabel: Repeats every {interval}
20
+ goalChat.plannedMessageCronLabel: 'Repeats on cron {cron}'
21
+ goalChat.plannedMessageRunCountLabel: '{runCount} of {maxRunCount} runs done'
22
+ goalChat.plannedMessageWindowLabel: 'From {from} to {to}'
20
23
  goalChat.plannedMessageCancelLabel: Cancel
21
24
  goalChat.plannedMessageCancellingLabel: Cancelling
22
25
  common.projects: Projects
@@ -170,6 +173,7 @@ header.chatHistory: Chat history
170
173
  header.usageAnalytics: Usage analytics
171
174
  header.taskManager: Task manager
172
175
  header.vpsTaskManager: Task manager (all servers)
176
+ header.plannedMessageManager: Planned messages
173
177
  header.messagesEmails: Messages & Emails
174
178
  header.emailServer: Email server
175
179
  header.backups: Backups
@@ -1,5 +1,5 @@
1
1
  import { spaceTrim } from 'spacetrim';
2
- import { formatTimeoutDurationHuman } from '../../../../src/book-components/Chat/utils/timeoutToolCallPresentation';
2
+ import { describeAgentPlannedMessageSchedule } from '../../../../src/book-3.0/describeAgentPlannedMessageSchedule';
3
3
  import type { string_javascript_name } from '../../../../src/types/string_person_fullname';
4
4
  import type { ToolFunction } from '../../../../src/scripting/javascript/JavascriptExecutionToolsOptions';
5
5
  import { createToolExecutionEnvelope } from '../../../../src/commitments/_common/toolExecutionEnvelope';
@@ -9,6 +9,7 @@ import {
9
9
  createAgentGoalChatPlannedMessageActions,
10
10
  type AgentGoalChatPlannedMessageDependencies,
11
11
  type AgentGoalChatPlannedMessageItem,
12
+ type UpdateAgentGoalChatPlannedMessageResult,
12
13
  } from '../utils/agentGoalChat/agentGoalChatPlannedMessageActions';
13
14
  import { AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES } from './agentGoalChatTimeoutTools';
14
15
 
@@ -41,14 +42,14 @@ export function createAgentGoalChatTimeoutToolFunctions(
41
42
  const agentPermanentId = resolveAgentPermanentId(toolArguments);
42
43
  const result = await actions.set({
43
44
  agentPermanentId,
44
- milliseconds: toolArguments.milliseconds,
45
+ ...createPlannedMessageScheduleArguments(toolArguments),
45
46
  message: toolArguments.message,
46
47
  });
47
48
 
48
49
  return createToolExecutionEnvelope({
49
50
  assistantMessage: `Planned message ${JSON.stringify(
50
51
  result.timeoutId,
51
- )} ${createPlannedMessageScheduleLabel(result)}.`,
52
+ )} ${describeAgentPlannedMessageSchedule(result)}.`,
52
53
  toolResult: result,
53
54
  });
54
55
  } catch (error) {
@@ -56,6 +57,27 @@ export function createAgentGoalChatTimeoutToolFunctions(
56
57
  }
57
58
  },
58
59
 
60
+ async [AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES.update](
61
+ toolArguments: AgentGoalChatTimeoutToolArguments,
62
+ ): Promise<string> {
63
+ try {
64
+ const agentPermanentId = resolveAgentPermanentId(toolArguments);
65
+ const result = await actions.update({
66
+ agentPermanentId,
67
+ timeoutId: toolArguments.timeoutId,
68
+ ...createPlannedMessageScheduleArguments(toolArguments),
69
+ ...(toolArguments.message === undefined ? {} : { message: toolArguments.message }),
70
+ });
71
+
72
+ return createToolExecutionEnvelope({
73
+ assistantMessage: createUpdatedPlannedMessageAssistantMessage(result),
74
+ toolResult: result,
75
+ });
76
+ } catch (error) {
77
+ return serializeToolError('update', error);
78
+ }
79
+ },
80
+
59
81
  async [AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES.list](
60
82
  toolArguments: AgentGoalChatTimeoutToolArguments,
61
83
  ): Promise<string> {
@@ -150,7 +172,7 @@ function createPlannedMessagesAssistantSummary(
150
172
  const visiblePlannedMessages = plannedMessages.slice(0, MAX_ASSISTANT_VISIBLE_PLANNED_MESSAGES);
151
173
  const summaryRows = visiblePlannedMessages.map((plannedMessage, index) => {
152
174
  const message = plannedMessage.message?.trim() || 'Wake up and continue working towards the current goal.';
153
- return `${index + 1}. ${plannedMessage.timeoutId} ${createPlannedMessageScheduleLabel(
175
+ return `${index + 1}. ${plannedMessage.timeoutId} ${describeAgentPlannedMessageSchedule(
154
176
  plannedMessage,
155
177
  )}: ${message}`;
156
178
  });
@@ -170,20 +192,45 @@ function createPlannedMessagesAssistantSummary(
170
192
  }
171
193
 
172
194
  /**
173
- * Describes when one planned message wakes the agent.
195
+ * Builds the text shown to the model after one re-planning attempt.
174
196
  *
175
- * @param plannedMessage - Planned message with its repeat interval and nearest execution time.
176
- * @returns Schedule fragment such as `repeating every 5 minutes (next at ...)`.
197
+ * @param result - Result of the shared re-planning action.
198
+ * @returns Assistant-visible sentence telling what really happened to the planned message.
177
199
  */
178
- function createPlannedMessageScheduleLabel(plannedMessage: {
179
- readonly dueAt: string;
180
- readonly intervalMs: number | null;
181
- }): string {
182
- if (!plannedMessage.intervalMs) {
183
- return `at ${plannedMessage.dueAt}`;
200
+ function createUpdatedPlannedMessageAssistantMessage(result: UpdateAgentGoalChatPlannedMessageResult): string {
201
+ if (result.status === 'updated') {
202
+ return `Planned message ${JSON.stringify(result.timeoutId)} now ${describeAgentPlannedMessageSchedule(
203
+ result,
204
+ )}.`;
205
+ }
206
+
207
+ if (result.status === 'busy') {
208
+ return `Planned message ${JSON.stringify(
209
+ result.timeoutId,
210
+ )} is waking you right now and was left unchanged, so change it again afterwards.`;
184
211
  }
185
212
 
186
- return `repeating every ${formatTimeoutDurationHuman(plannedMessage.intervalMs)} (next at ${plannedMessage.dueAt})`;
213
+ return 'The planned message was already inactive or was not found.';
214
+ }
215
+
216
+ /**
217
+ * Collects the schedule arguments of one planned-message tool call.
218
+ *
219
+ * An argument the model did not pass stays absent, so an update changes only the fields it names.
220
+ *
221
+ * @param toolArguments - Raw arguments of the tool call.
222
+ * @returns Schedule fields passed to the shared planned-message actions.
223
+ */
224
+ function createPlannedMessageScheduleArguments(
225
+ toolArguments: AgentGoalChatTimeoutToolArguments,
226
+ ): AgentGoalChatTimeoutToolArguments {
227
+ return {
228
+ ...(toolArguments.milliseconds === undefined ? {} : { milliseconds: toolArguments.milliseconds }),
229
+ ...(toolArguments.cronExpression === undefined ? {} : { cronExpression: toolArguments.cronExpression }),
230
+ ...(toolArguments.startsAt === undefined ? {} : { startsAt: toolArguments.startsAt }),
231
+ ...(toolArguments.endsAt === undefined ? {} : { endsAt: toolArguments.endsAt }),
232
+ ...(toolArguments.maxRunCount === undefined ? {} : { maxRunCount: toolArguments.maxRunCount }),
233
+ };
187
234
  }
188
235
 
189
236
  /**
@@ -193,7 +240,7 @@ function createPlannedMessageScheduleLabel(plannedMessage: {
193
240
  * @param error - Caught failure.
194
241
  * @returns JSON result readable by the model and persisted tool-call inspector.
195
242
  */
196
- function serializeToolError(action: 'set' | 'list' | 'cancel', error: unknown): string {
243
+ function serializeToolError(action: 'set' | 'update' | 'list' | 'cancel', error: unknown): string {
197
244
  return JSON.stringify({
198
245
  action,
199
246
  status: 'error',
@@ -5,10 +5,44 @@ import type { LlmToolDefinition } from '../../../../src/types/LlmToolDefinition'
5
5
  */
6
6
  export const AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES = {
7
7
  set: 'set_timeout',
8
+ update: 'update_timeout',
8
9
  list: 'list_timeouts',
9
10
  cancel: 'cancel_timeout',
10
11
  } as const;
11
12
 
13
+ /**
14
+ * Schedule parameters shared by the planning and re-planning tools.
15
+ *
16
+ * One planned message follows exactly one recurrence rule, bounded by an optional date window and an
17
+ * optional total number of runs, so both tools describe the very same fields.
18
+ */
19
+ const AGENT_GOAL_CHAT_TIMEOUT_SCHEDULE_PARAMETERS = {
20
+ milliseconds: {
21
+ type: 'number',
22
+ description:
23
+ 'Repeat interval in milliseconds between two wake-ups by this planned message (at least 60000). Use either this or `cronExpression`.',
24
+ },
25
+ cronExpression: {
26
+ type: 'string',
27
+ description:
28
+ 'Five-field cron expression such as `0 9 * * 1-5`, evaluated in the server time zone. Use either this or `milliseconds`.',
29
+ },
30
+ maxRunCount: {
31
+ type: 'number',
32
+ description:
33
+ 'How many times in total this planned message wakes you, for example 1 for a one-off message. Leave it out to repeat until cancelled.',
34
+ },
35
+ startsAt: {
36
+ type: 'string',
37
+ description:
38
+ 'ISO date before which the planned message never wakes you, for example `2026-09-01T08:00:00.000Z`.',
39
+ },
40
+ endsAt: {
41
+ type: 'string',
42
+ description: 'ISO date after which the planned message stops waking you and finishes on its own.',
43
+ },
44
+ } as const;
45
+
12
46
  /**
13
47
  * Adds the Agents Server planned-message tools while preserving already registered tools.
14
48
  *
@@ -27,22 +61,42 @@ export function createAgentGoalChatTimeoutTools(
27
61
  tools.push({
28
62
  name: AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES.set,
29
63
  description:
30
- 'Plan a message that repeatedly wakes you in your singleton goal chat, like `setInterval`. Use this for useful autonomous follow-up towards your current goal; the wake-up is not tied to the human conversation where you schedule it, and it keeps repeating until you cancel it. Do not plan a message that matches one you already planned.',
64
+ 'Plan a message that wakes you in your singleton goal chat, like `setInterval`. Use this for useful autonomous follow-up towards your current goal; the wake-up is not tied to the human conversation where you schedule it, and it keeps repeating until its schedule is over or you cancel it. Do not plan a message that matches one you already planned.',
31
65
  parameters: {
32
66
  type: 'object',
33
67
  properties: {
34
- milliseconds: {
35
- type: 'number',
36
- description:
37
- 'Repeat interval in milliseconds between two wake-ups by this planned message (at least 60000).',
38
- },
68
+ ...AGENT_GOAL_CHAT_TIMEOUT_SCHEDULE_PARAMETERS,
39
69
  message: {
40
70
  type: 'string',
41
71
  description:
42
72
  'The concrete future instruction or reminder that will be delivered in your goal chat.',
43
73
  },
44
74
  },
45
- required: ['milliseconds', 'message'],
75
+ required: ['message'],
76
+ additionalProperties: false,
77
+ },
78
+ });
79
+ }
80
+
81
+ if (!tools.some((tool) => tool.name === AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES.update)) {
82
+ tools.push({
83
+ name: AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES.update,
84
+ description:
85
+ 'Change the schedule or the text of one planned goal-chat message without losing its identity. Pass only the fields you want to change; every other field keeps its current value, and `null` removes a bound such as `endsAt`. Prefer this over cancelling and planning the same message again.',
86
+ parameters: {
87
+ type: 'object',
88
+ properties: {
89
+ timeoutId: {
90
+ type: 'string',
91
+ description: 'Identifier returned by `set_timeout` or `list_timeouts`.',
92
+ },
93
+ ...AGENT_GOAL_CHAT_TIMEOUT_SCHEDULE_PARAMETERS,
94
+ message: {
95
+ type: 'string',
96
+ description: 'New instruction delivered by this planned message in your goal chat.',
97
+ },
98
+ },
99
+ required: ['timeoutId'],
46
100
  additionalProperties: false,
47
101
  },
48
102
  });
@@ -52,7 +106,7 @@ export function createAgentGoalChatTimeoutTools(
52
106
  tools.push({
53
107
  name: AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES.list,
54
108
  description:
55
- 'List your planned goal-chat messages, including their identifiers, repeat intervals, and next execution times, across every conversation in which you were invoked. Keep the listed messages as they are unless they no longer match your goal.',
109
+ 'List your planned goal-chat messages, including their identifiers, whole schedules, and next execution times, across every conversation in which you were invoked. Messages which already finished are left out. Keep the listed messages as they are unless they no longer match your goal.',
56
110
  parameters: {
57
111
  type: 'object',
58
112
  properties: {
@@ -74,7 +128,7 @@ export function createAgentGoalChatTimeoutTools(
74
128
  tools.push({
75
129
  name: AGENT_GOAL_CHAT_TIMEOUT_TOOL_NAMES.cancel,
76
130
  description:
77
- 'Stop one repeating planned goal-chat message by its timeout identifier. List planned messages first when the identifier is not known.',
131
+ 'Stop one planned goal-chat message by its timeout identifier, which also stops all of its remaining repetitions. List planned messages first when the identifier is not known.',
78
132
  parameters: {
79
133
  type: 'object',
80
134
  properties: {
@@ -0,0 +1,45 @@
1
+ import { $getTableName } from '@/src/database/$getTableName';
2
+ import { $provideSupabaseForServer } from '@/src/database/$provideSupabaseForServer';
3
+ import type { AgentsServerDatabase } from '@/src/database/schema';
4
+
5
+ /**
6
+ * Minimal agent lookup row needed to name the agent behind one admin row.
7
+ *
8
+ * @private type of `loadAgentNamesByPermanentId`
9
+ */
10
+ type AgentNameLookupRow = Pick<AgentsServerDatabase['public']['Tables']['Agent']['Row'], 'permanentId' | 'agentName'>;
11
+
12
+ /**
13
+ * Loads agent names keyed by permanent id, for admin listings that only store the permanent id.
14
+ *
15
+ * @param agentPermanentIds - Permanent ids of the agents to name, duplicates allowed.
16
+ * @returns Agent names keyed by permanent id, empty when nothing was asked for.
17
+ *
18
+ * @private internal admin utility of Agents Server
19
+ */
20
+ export async function loadAgentNamesByPermanentId(
21
+ agentPermanentIds: ReadonlyArray<string>,
22
+ ): Promise<Map<string, string | null>> {
23
+ const uniqueAgentPermanentIds = [...new Set(agentPermanentIds)].filter(Boolean);
24
+
25
+ if (uniqueAgentPermanentIds.length === 0) {
26
+ return new Map();
27
+ }
28
+
29
+ const supabase = $provideSupabaseForServer();
30
+ const agentTable = await $getTableName('Agent');
31
+ const { data, error } = await supabase
32
+ .from(agentTable)
33
+ .select('permanentId,agentName')
34
+ .in('permanentId', uniqueAgentPermanentIds);
35
+
36
+ if (error) {
37
+ throw new Error(`Failed to load admin listing agents: ${error.message}`);
38
+ }
39
+
40
+ return new Map(
41
+ ((data || []) as Array<AgentNameLookupRow>)
42
+ .filter((agentRow): agentRow is AgentNameLookupRow & { permanentId: string } => Boolean(agentRow.permanentId))
43
+ .map((agentRow) => [agentRow.permanentId, agentRow.agentName] as const),
44
+ );
45
+ }
@@ -0,0 +1,36 @@
1
+ import { $getTableName } from '@/src/database/$getTableName';
2
+ import { $provideSupabaseForServer } from '@/src/database/$provideSupabaseForServer';
3
+ import type { AgentsServerDatabase } from '@/src/database/schema';
4
+
5
+ /**
6
+ * Minimal user lookup row needed to name the owner of one admin row.
7
+ *
8
+ * @private type of `loadUsernamesByUserId`
9
+ */
10
+ type UsernameLookupRow = Pick<AgentsServerDatabase['public']['Tables']['User']['Row'], 'id' | 'username'>;
11
+
12
+ /**
13
+ * Loads usernames keyed by user id, for admin listings that only store the owning user id.
14
+ *
15
+ * @param userIds - Ids of the users to name, duplicates allowed.
16
+ * @returns Usernames keyed by user id, empty when nothing was asked for.
17
+ *
18
+ * @private internal admin utility of Agents Server
19
+ */
20
+ export async function loadUsernamesByUserId(userIds: ReadonlyArray<number>): Promise<Map<number, string>> {
21
+ const uniqueUserIds = [...new Set(userIds)];
22
+
23
+ if (uniqueUserIds.length === 0) {
24
+ return new Map();
25
+ }
26
+
27
+ const supabase = $provideSupabaseForServer();
28
+ const userTable = await $getTableName('User');
29
+ const { data, error } = await supabase.from(userTable).select('id,username').in('id', uniqueUserIds);
30
+
31
+ if (error) {
32
+ throw new Error(`Failed to load admin listing users: ${error.message}`);
33
+ }
34
+
35
+ return new Map(((data || []) as Array<UsernameLookupRow>).map((userRow) => [userRow.id, userRow.username] as const));
36
+ }
@@ -0,0 +1,2 @@
1
+ export { loadAgentNamesByPermanentId } from './adminEntityLookups/loadAgentNamesByPermanentId';
2
+ export { loadUsernamesByUserId } from './adminEntityLookups/loadUsernamesByUserId';