@tenex-chat/backend 0.9.1

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 (427) hide show
  1. package/README.md +194 -0
  2. package/dist/backend-wrapper.cjs +3 -0
  3. package/dist/src/index.js +331928 -0
  4. package/package.json +103 -0
  5. package/src/agents/AgentRegistry.ts +418 -0
  6. package/src/agents/AgentStorage.ts +1133 -0
  7. package/src/agents/ConfigResolver.ts +229 -0
  8. package/src/agents/agent-installer.ts +236 -0
  9. package/src/agents/agent-loader.ts +241 -0
  10. package/src/agents/constants.ts +82 -0
  11. package/src/agents/errors.ts +48 -0
  12. package/src/agents/execution/AgentExecutor.ts +561 -0
  13. package/src/agents/execution/ExecutionContextFactory.ts +112 -0
  14. package/src/agents/execution/MessageCompiler.ts +597 -0
  15. package/src/agents/execution/MessageSyncer.ts +100 -0
  16. package/src/agents/execution/PostCompletionChecker.ts +278 -0
  17. package/src/agents/execution/ProgressMonitor.ts +50 -0
  18. package/src/agents/execution/RALResolver.ts +177 -0
  19. package/src/agents/execution/SessionManager.ts +181 -0
  20. package/src/agents/execution/StreamCallbacks.ts +312 -0
  21. package/src/agents/execution/StreamExecutionHandler.ts +579 -0
  22. package/src/agents/execution/StreamSetup.ts +313 -0
  23. package/src/agents/execution/ToolEventHandlers.ts +239 -0
  24. package/src/agents/execution/ToolExecutionTracker.ts +498 -0
  25. package/src/agents/execution/ToolResultUtils.ts +97 -0
  26. package/src/agents/execution/ToolSupervisionWrapper.ts +174 -0
  27. package/src/agents/execution/constants.ts +16 -0
  28. package/src/agents/execution/index.ts +3 -0
  29. package/src/agents/execution/types.ts +96 -0
  30. package/src/agents/execution/utils.ts +26 -0
  31. package/src/agents/index.ts +4 -0
  32. package/src/agents/script-installer.ts +266 -0
  33. package/src/agents/supervision/SupervisorLLMService.ts +253 -0
  34. package/src/agents/supervision/SupervisorOrchestrator.ts +471 -0
  35. package/src/agents/supervision/heuristics/ConsecutiveToolsWithoutTodoHeuristic.ts +73 -0
  36. package/src/agents/supervision/heuristics/DelegationClaimHeuristic.ts +80 -0
  37. package/src/agents/supervision/heuristics/HeuristicRegistry.ts +114 -0
  38. package/src/agents/supervision/heuristics/PendingTodosHeuristic.ts +93 -0
  39. package/src/agents/supervision/heuristics/SilentAgentHeuristic.ts +54 -0
  40. package/src/agents/supervision/heuristics/index.ts +5 -0
  41. package/src/agents/supervision/index.ts +28 -0
  42. package/src/agents/supervision/registerHeuristics.ts +110 -0
  43. package/src/agents/supervision/supervisionHealthCheck.ts +123 -0
  44. package/src/agents/supervision/types.ts +171 -0
  45. package/src/agents/tool-names.ts +46 -0
  46. package/src/agents/tool-normalization.ts +184 -0
  47. package/src/agents/types/index.ts +2 -0
  48. package/src/agents/types/runtime.ts +74 -0
  49. package/src/agents/types/storage.ts +145 -0
  50. package/src/commands/agent/import/index.ts +6 -0
  51. package/src/commands/agent/import/openclaw-distiller.ts +57 -0
  52. package/src/commands/agent/import/openclaw-reader.ts +141 -0
  53. package/src/commands/agent/import/openclaw.ts +154 -0
  54. package/src/commands/agent/index.ts +6 -0
  55. package/src/commands/agent.ts +215 -0
  56. package/src/commands/daemon.ts +198 -0
  57. package/src/commands/doctor.ts +134 -0
  58. package/src/commands/setup/embed.ts +228 -0
  59. package/src/commands/setup/global-system-prompt.ts +223 -0
  60. package/src/commands/setup/image.ts +179 -0
  61. package/src/commands/setup/index.ts +16 -0
  62. package/src/commands/setup/interactive.ts +95 -0
  63. package/src/commands/setup/llm.ts +38 -0
  64. package/src/commands/setup/onboarding.ts +294 -0
  65. package/src/commands/setup/providers.ts +27 -0
  66. package/src/constants.ts +34 -0
  67. package/src/conversations/ConversationDiskReader.ts +148 -0
  68. package/src/conversations/ConversationRegistry.ts +728 -0
  69. package/src/conversations/ConversationStore.ts +868 -0
  70. package/src/conversations/MessageBuilder.ts +866 -0
  71. package/src/conversations/executionTime.ts +62 -0
  72. package/src/conversations/formatters/DelegationXmlFormatter.ts +64 -0
  73. package/src/conversations/formatters/ThreadedConversationFormatter.ts +303 -0
  74. package/src/conversations/formatters/index.ts +9 -0
  75. package/src/conversations/formatters/utils/MessageFormatter.ts +46 -0
  76. package/src/conversations/formatters/utils/TimestampFormatter.ts +56 -0
  77. package/src/conversations/formatters/utils/TreeBuilder.ts +131 -0
  78. package/src/conversations/formatters/utils/TreeRenderer.ts +49 -0
  79. package/src/conversations/index.ts +2 -0
  80. package/src/conversations/persistence/ToolMessageStorage.ts +143 -0
  81. package/src/conversations/search/ConversationIndexManager.ts +393 -0
  82. package/src/conversations/search/QueryParser.ts +114 -0
  83. package/src/conversations/search/SearchEngine.ts +175 -0
  84. package/src/conversations/search/SnippetExtractor.ts +345 -0
  85. package/src/conversations/search/embeddings/ConversationEmbeddingService.ts +484 -0
  86. package/src/conversations/search/embeddings/ConversationIndexingJob.ts +320 -0
  87. package/src/conversations/search/embeddings/IndexingStateManager.ts +338 -0
  88. package/src/conversations/search/embeddings/index.ts +18 -0
  89. package/src/conversations/search/index.ts +49 -0
  90. package/src/conversations/search/types.ts +124 -0
  91. package/src/conversations/services/CategoryManager.ts +160 -0
  92. package/src/conversations/services/ConversationResolver.ts +296 -0
  93. package/src/conversations/services/ConversationSummarizer.ts +234 -0
  94. package/src/conversations/services/MetadataDebounceManager.ts +188 -0
  95. package/src/conversations/services/index.ts +2 -0
  96. package/src/conversations/types.ts +148 -0
  97. package/src/conversations/utils/content-utils.ts +69 -0
  98. package/src/conversations/utils/image-placeholder.ts +281 -0
  99. package/src/conversations/utils/image-url-utils.ts +171 -0
  100. package/src/conversations/utils/multimodal-content.ts +90 -0
  101. package/src/conversations/utils/tool-result-truncator.ts +159 -0
  102. package/src/daemon/Daemon.ts +1883 -0
  103. package/src/daemon/ProjectRuntime.ts +657 -0
  104. package/src/daemon/RestartState.ts +152 -0
  105. package/src/daemon/RuntimeLifecycle.ts +268 -0
  106. package/src/daemon/SubscriptionManager.ts +305 -0
  107. package/src/daemon/UnixSocketTransport.ts +318 -0
  108. package/src/daemon/filters/SubscriptionFilterBuilder.ts +119 -0
  109. package/src/daemon/index.ts +9 -0
  110. package/src/daemon/routing/DaemonRouter.ts +491 -0
  111. package/src/daemon/types.ts +150 -0
  112. package/src/daemon/utils/routing-log.ts +76 -0
  113. package/src/daemon/utils/telemetry.ts +173 -0
  114. package/src/event-handler/agentDeletion.ts +383 -0
  115. package/src/event-handler/index.ts +749 -0
  116. package/src/event-handler/newConversation.ts +165 -0
  117. package/src/event-handler/project.ts +166 -0
  118. package/src/event-handler/reply.ts +18 -0
  119. package/src/events/NDKAgentDefinition.ts +292 -0
  120. package/src/events/NDKAgentLesson.ts +106 -0
  121. package/src/events/NDKEventMetadata.ts +34 -0
  122. package/src/events/NDKMCPTool.ts +60 -0
  123. package/src/events/NDKProjectStatus.ts +384 -0
  124. package/src/events/index.ts +4 -0
  125. package/src/index.ts +126 -0
  126. package/src/lib/agent-home.ts +334 -0
  127. package/src/lib/error-formatter.ts +200 -0
  128. package/src/lib/fs/filesystem.ts +128 -0
  129. package/src/lib/fs/index.ts +1 -0
  130. package/src/lib/json-parser.ts +30 -0
  131. package/src/lib/string.ts +15 -0
  132. package/src/lib/time.ts +74 -0
  133. package/src/llm/ChunkHandler.ts +277 -0
  134. package/src/llm/FinishHandler.ts +250 -0
  135. package/src/llm/LLMConfigEditor.ts +154 -0
  136. package/src/llm/LLMServiceFactory.ts +230 -0
  137. package/src/llm/MessageProcessor.ts +90 -0
  138. package/src/llm/RecordingState.ts +37 -0
  139. package/src/llm/StreamPublisher.ts +40 -0
  140. package/src/llm/TracingUtils.ts +77 -0
  141. package/src/llm/chunk-validators.ts +57 -0
  142. package/src/llm/constants.ts +6 -0
  143. package/src/llm/index.ts +12 -0
  144. package/src/llm/meta/MetaModelResolver.ts +352 -0
  145. package/src/llm/meta/index.ts +11 -0
  146. package/src/llm/middleware/flight-recorder.ts +188 -0
  147. package/src/llm/providers/MockProvider.ts +332 -0
  148. package/src/llm/providers/agent/ClaudeCodeProvider.ts +343 -0
  149. package/src/llm/providers/agent/ClaudeCodeToolsAdapter.ts +203 -0
  150. package/src/llm/providers/agent/CodexAppServerProvider.ts +214 -0
  151. package/src/llm/providers/agent/CodexAppServerToolsAdapter.ts +91 -0
  152. package/src/llm/providers/agent/index.ts +10 -0
  153. package/src/llm/providers/base/AgentProvider.ts +107 -0
  154. package/src/llm/providers/base/BaseProvider.ts +114 -0
  155. package/src/llm/providers/base/StandardProvider.ts +38 -0
  156. package/src/llm/providers/base/index.ts +9 -0
  157. package/src/llm/providers/index.ts +106 -0
  158. package/src/llm/providers/key-manager.ts +238 -0
  159. package/src/llm/providers/ollama-models.ts +105 -0
  160. package/src/llm/providers/openrouter-models.ts +102 -0
  161. package/src/llm/providers/provider-ids.ts +18 -0
  162. package/src/llm/providers/registry/ProviderRegistry.ts +414 -0
  163. package/src/llm/providers/registry/index.ts +7 -0
  164. package/src/llm/providers/standard/AnthropicProvider.ts +71 -0
  165. package/src/llm/providers/standard/OllamaProvider.ts +59 -0
  166. package/src/llm/providers/standard/OpenAIProvider.ts +44 -0
  167. package/src/llm/providers/standard/OpenRouterProvider.ts +103 -0
  168. package/src/llm/providers/standard/index.ts +10 -0
  169. package/src/llm/providers/types.ts +194 -0
  170. package/src/llm/providers/usage-metadata.ts +78 -0
  171. package/src/llm/service.ts +713 -0
  172. package/src/llm/types.ts +167 -0
  173. package/src/llm/utils/ConfigurationManager.ts +650 -0
  174. package/src/llm/utils/ConfigurationTester.ts +229 -0
  175. package/src/llm/utils/ModelSelector.ts +212 -0
  176. package/src/llm/utils/ProviderConfigUI.ts +177 -0
  177. package/src/llm/utils/claudeCodePromptCompiler.ts +141 -0
  178. package/src/llm/utils/codex-models.ts +53 -0
  179. package/src/llm/utils/context-window-cache.ts +30 -0
  180. package/src/llm/utils/models-dev-cache.ts +267 -0
  181. package/src/llm/utils/provider-setup.ts +50 -0
  182. package/src/llm/utils/tool-errors.ts +78 -0
  183. package/src/llm/utils/usage.ts +74 -0
  184. package/src/logging/EventRoutingLogger.ts +205 -0
  185. package/src/nostr/AgentEventDecoder.ts +357 -0
  186. package/src/nostr/AgentEventEncoder.ts +677 -0
  187. package/src/nostr/AgentProfilePublisher.ts +657 -0
  188. package/src/nostr/AgentPublisher.ts +437 -0
  189. package/src/nostr/BlossomService.ts +226 -0
  190. package/src/nostr/InterventionPublisher.ts +132 -0
  191. package/src/nostr/TagExtractor.ts +228 -0
  192. package/src/nostr/collectEvents.ts +83 -0
  193. package/src/nostr/constants.ts +38 -0
  194. package/src/nostr/encryption.ts +26 -0
  195. package/src/nostr/index.ts +31 -0
  196. package/src/nostr/keys.ts +17 -0
  197. package/src/nostr/kinds.ts +37 -0
  198. package/src/nostr/ndkClient.ts +72 -0
  199. package/src/nostr/relays.ts +43 -0
  200. package/src/nostr/trace-context.ts +39 -0
  201. package/src/nostr/types.ts +227 -0
  202. package/src/nostr/utils.ts +84 -0
  203. package/src/prompts/core/FragmentRegistry.ts +30 -0
  204. package/src/prompts/core/PromptBuilder.ts +98 -0
  205. package/src/prompts/core/index.ts +3 -0
  206. package/src/prompts/core/types.ts +13 -0
  207. package/src/prompts/fragments/00-global-system-prompt.ts +44 -0
  208. package/src/prompts/fragments/01-agent-identity.ts +69 -0
  209. package/src/prompts/fragments/02-agent-home-directory.ts +114 -0
  210. package/src/prompts/fragments/03-system-reminders-explanation.ts +14 -0
  211. package/src/prompts/fragments/04-relay-configuration.ts +38 -0
  212. package/src/prompts/fragments/05-delegation-chain.ts +45 -0
  213. package/src/prompts/fragments/06-agent-todos.ts +74 -0
  214. package/src/prompts/fragments/06-todo-usage-guidance.ts +34 -0
  215. package/src/prompts/fragments/07-meta-project-context.ts +234 -0
  216. package/src/prompts/fragments/08-active-conversations.ts +382 -0
  217. package/src/prompts/fragments/09-recent-conversations.ts +153 -0
  218. package/src/prompts/fragments/10-referenced-article.ts +21 -0
  219. package/src/prompts/fragments/11-nudges.ts +134 -0
  220. package/src/prompts/fragments/12-skills.ts +127 -0
  221. package/src/prompts/fragments/13-available-nudges.ts +122 -0
  222. package/src/prompts/fragments/15-available-agents.ts +53 -0
  223. package/src/prompts/fragments/16-stay-in-your-lane.ts +41 -0
  224. package/src/prompts/fragments/17-todo-before-delegation.ts +39 -0
  225. package/src/prompts/fragments/20-voice-mode.ts +62 -0
  226. package/src/prompts/fragments/22-scheduled-tasks.ts +175 -0
  227. package/src/prompts/fragments/24-retrieved-lessons.ts +26 -0
  228. package/src/prompts/fragments/25-rag-instructions.ts +333 -0
  229. package/src/prompts/fragments/26-mcp-resources.ts +237 -0
  230. package/src/prompts/fragments/27-memorized-reports.ts +77 -0
  231. package/src/prompts/fragments/28-agent-directed-monitoring.ts +32 -0
  232. package/src/prompts/fragments/29-rag-collections.ts +50 -0
  233. package/src/prompts/fragments/30-worktree-context.ts +98 -0
  234. package/src/prompts/fragments/31-agents-md-guidance.ts +96 -0
  235. package/src/prompts/fragments/32-process-metrics.ts +72 -0
  236. package/src/prompts/fragments/debug-mode.ts +48 -0
  237. package/src/prompts/fragments/delegation-completion.ts +44 -0
  238. package/src/prompts/fragments/index.ts +91 -0
  239. package/src/prompts/index.ts +21 -0
  240. package/src/prompts/utils/systemPromptBuilder.ts +777 -0
  241. package/src/scripts/migrate-prefix-index.ts +157 -0
  242. package/src/services/AgentDefinitionMonitor.ts +701 -0
  243. package/src/services/ConfigService.ts +723 -0
  244. package/src/services/CooldownRegistry.ts +199 -0
  245. package/src/services/LLMOperationsRegistry.ts +424 -0
  246. package/src/services/OwnerAgentListService.ts +354 -0
  247. package/src/services/PubkeyService.ts +308 -0
  248. package/src/services/agents/AgentMetadataStore.ts +72 -0
  249. package/src/services/agents/AgentResolution.ts +59 -0
  250. package/src/services/agents/EscalationService.ts +281 -0
  251. package/src/services/agents/NDKAgentDiscovery.ts +95 -0
  252. package/src/services/agents/index.ts +7 -0
  253. package/src/services/agents-md/AgentsMdService.ts +184 -0
  254. package/src/services/agents-md/SystemReminderInjector.ts +238 -0
  255. package/src/services/agents-md/index.ts +11 -0
  256. package/src/services/apns/APNsClient.ts +203 -0
  257. package/src/services/apns/APNsService.ts +358 -0
  258. package/src/services/apns/index.ts +11 -0
  259. package/src/services/apns/types.ts +80 -0
  260. package/src/services/compression/CompressionService.ts +445 -0
  261. package/src/services/compression/compression-schema.ts +28 -0
  262. package/src/services/compression/compression-types.ts +74 -0
  263. package/src/services/compression/compression-utils.ts +587 -0
  264. package/src/services/config/types.ts +394 -0
  265. package/src/services/dispatch/AgentDispatchService.ts +937 -0
  266. package/src/services/dispatch/AgentRouter.ts +181 -0
  267. package/src/services/dispatch/DelegationCompletionHandler.ts +232 -0
  268. package/src/services/embedding/EmbeddingProvider.ts +188 -0
  269. package/src/services/embedding/index.ts +5 -0
  270. package/src/services/event-context/EventContextService.ts +108 -0
  271. package/src/services/event-context/index.ts +2 -0
  272. package/src/services/heuristics/ContextBuilder.ts +106 -0
  273. package/src/services/heuristics/HeuristicEngine.ts +200 -0
  274. package/src/services/heuristics/formatters.ts +58 -0
  275. package/src/services/heuristics/index.ts +12 -0
  276. package/src/services/heuristics/rules/index.ts +25 -0
  277. package/src/services/heuristics/rules/todoBeforeDelegation.ts +69 -0
  278. package/src/services/heuristics/rules/todoReminderOnToolUse.ts +63 -0
  279. package/src/services/heuristics/types.ts +144 -0
  280. package/src/services/image/ImageGenerationService.ts +389 -0
  281. package/src/services/image/index.ts +12 -0
  282. package/src/services/intervention/InterventionService.ts +1352 -0
  283. package/src/services/intervention/index.ts +7 -0
  284. package/src/services/mcp/MCPManager.ts +683 -0
  285. package/src/services/mcp/McpNotificationDelivery.ts +139 -0
  286. package/src/services/mcp/McpSubscriptionService.ts +653 -0
  287. package/src/services/mcp/mcpInstaller.ts +130 -0
  288. package/src/services/nip46/Nip46SigningLog.ts +81 -0
  289. package/src/services/nip46/Nip46SigningService.ts +467 -0
  290. package/src/services/nip46/index.ts +4 -0
  291. package/src/services/nudge/NudgeService.ts +224 -0
  292. package/src/services/nudge/NudgeWhitelistService.ts +382 -0
  293. package/src/services/nudge/index.ts +5 -0
  294. package/src/services/nudge/types.ts +83 -0
  295. package/src/services/projects/ProjectContext.ts +672 -0
  296. package/src/services/projects/ProjectContextStore.ts +102 -0
  297. package/src/services/projects/index.ts +6 -0
  298. package/src/services/prompt-compiler/index.ts +15 -0
  299. package/src/services/prompt-compiler/prompt-compiler-service.ts +1143 -0
  300. package/src/services/pubkey-gate/PubkeyGateService.ts +93 -0
  301. package/src/services/pubkey-gate/index.ts +1 -0
  302. package/src/services/rag/EmbeddingProviderFactory.ts +292 -0
  303. package/src/services/rag/LanceDBMaintenanceService.ts +211 -0
  304. package/src/services/rag/RAGDatabaseService.ts +173 -0
  305. package/src/services/rag/RAGOperations.ts +682 -0
  306. package/src/services/rag/RAGService.ts +240 -0
  307. package/src/services/rag/RagSubscriptionService.ts +618 -0
  308. package/src/services/rag/rag-utils.ts +174 -0
  309. package/src/services/ral/PendingDelegationsRegistry.ts +168 -0
  310. package/src/services/ral/RALRegistry.ts +2782 -0
  311. package/src/services/ral/index.ts +4 -0
  312. package/src/services/ral/types.ts +292 -0
  313. package/src/services/reports/LocalReportStore.ts +380 -0
  314. package/src/services/reports/ReportEmbeddingService.ts +430 -0
  315. package/src/services/reports/ReportService.ts +440 -0
  316. package/src/services/reports/articleUtils.ts +52 -0
  317. package/src/services/reports/index.ts +7 -0
  318. package/src/services/scheduling/SchedulerService.ts +1057 -0
  319. package/src/services/scheduling/errors.ts +14 -0
  320. package/src/services/scheduling/index.ts +7 -0
  321. package/src/services/scheduling/utils.ts +77 -0
  322. package/src/services/search/SearchProviderRegistry.ts +78 -0
  323. package/src/services/search/UnifiedSearchService.ts +218 -0
  324. package/src/services/search/index.ts +47 -0
  325. package/src/services/search/projectFilter.ts +22 -0
  326. package/src/services/search/providers/ConversationSearchProvider.ts +48 -0
  327. package/src/services/search/providers/LessonSearchProvider.ts +75 -0
  328. package/src/services/search/providers/ReportSearchProvider.ts +49 -0
  329. package/src/services/search/types.ts +144 -0
  330. package/src/services/skill/SkillService.ts +482 -0
  331. package/src/services/skill/index.ts +2 -0
  332. package/src/services/skill/types.ts +70 -0
  333. package/src/services/status/OperationsStatusService.ts +276 -0
  334. package/src/services/status/ProjectStatusService.ts +522 -0
  335. package/src/services/status/index.ts +11 -0
  336. package/src/services/storage/PrefixKVStore.ts +242 -0
  337. package/src/services/storage/index.ts +1 -0
  338. package/src/services/system-reminder/SystemReminderUtils.ts +96 -0
  339. package/src/services/system-reminder/index.ts +7 -0
  340. package/src/services/trust-pubkeys/TrustPubkeyService.ts +325 -0
  341. package/src/services/trust-pubkeys/index.ts +2 -0
  342. package/src/telemetry/ConversationSpanManager.ts +111 -0
  343. package/src/telemetry/EventLoopMonitor.ts +206 -0
  344. package/src/telemetry/LLMSpanRegistry.ts +20 -0
  345. package/src/telemetry/NostrSpanProcessor.ts +89 -0
  346. package/src/telemetry/ToolCallSpanProcessor.ts +66 -0
  347. package/src/telemetry/diagnostics.ts +27 -0
  348. package/src/telemetry/setup.ts +120 -0
  349. package/src/tools/implementations/agents_discover.ts +121 -0
  350. package/src/tools/implementations/agents_hire.ts +127 -0
  351. package/src/tools/implementations/agents_list.ts +96 -0
  352. package/src/tools/implementations/agents_publish.ts +611 -0
  353. package/src/tools/implementations/agents_read.ts +173 -0
  354. package/src/tools/implementations/agents_write.ts +200 -0
  355. package/src/tools/implementations/ask.ts +411 -0
  356. package/src/tools/implementations/change_model.ts +141 -0
  357. package/src/tools/implementations/conversation_get.ts +661 -0
  358. package/src/tools/implementations/conversation_list.ts +377 -0
  359. package/src/tools/implementations/conversation_search.ts +370 -0
  360. package/src/tools/implementations/delegate.ts +327 -0
  361. package/src/tools/implementations/delegate_crossproject.ts +209 -0
  362. package/src/tools/implementations/delegate_followup.ts +300 -0
  363. package/src/tools/implementations/fs_edit.ts +162 -0
  364. package/src/tools/implementations/fs_glob.ts +182 -0
  365. package/src/tools/implementations/fs_grep.ts +513 -0
  366. package/src/tools/implementations/fs_read.ts +332 -0
  367. package/src/tools/implementations/fs_write.ts +113 -0
  368. package/src/tools/implementations/generate_image.ts +259 -0
  369. package/src/tools/implementations/home_fs.ts +515 -0
  370. package/src/tools/implementations/kill.ts +651 -0
  371. package/src/tools/implementations/learn.ts +166 -0
  372. package/src/tools/implementations/lesson-formatter.ts +38 -0
  373. package/src/tools/implementations/lesson_delete.ts +164 -0
  374. package/src/tools/implementations/lesson_get.ts +105 -0
  375. package/src/tools/implementations/lessons_list.ts +153 -0
  376. package/src/tools/implementations/mcp_resource_read.ts +161 -0
  377. package/src/tools/implementations/mcp_subscribe.ts +158 -0
  378. package/src/tools/implementations/mcp_subscription_stop.ts +85 -0
  379. package/src/tools/implementations/nostr_fetch.ts +149 -0
  380. package/src/tools/implementations/nostr_publish_as_user.ts +353 -0
  381. package/src/tools/implementations/project_list.ts +146 -0
  382. package/src/tools/implementations/rag_add_documents.ts +573 -0
  383. package/src/tools/implementations/rag_create_collection.ts +65 -0
  384. package/src/tools/implementations/rag_delete_collection.ts +68 -0
  385. package/src/tools/implementations/rag_list_collections.ts +77 -0
  386. package/src/tools/implementations/rag_query.ts +107 -0
  387. package/src/tools/implementations/rag_subscription_create.ts +105 -0
  388. package/src/tools/implementations/rag_subscription_delete.ts +80 -0
  389. package/src/tools/implementations/rag_subscription_get.ts +123 -0
  390. package/src/tools/implementations/rag_subscription_list.ts +128 -0
  391. package/src/tools/implementations/report_delete.ts +79 -0
  392. package/src/tools/implementations/report_read.ts +160 -0
  393. package/src/tools/implementations/report_write.ts +278 -0
  394. package/src/tools/implementations/reports_list.ts +77 -0
  395. package/src/tools/implementations/schedule_task.ts +104 -0
  396. package/src/tools/implementations/schedule_task_cancel.ts +62 -0
  397. package/src/tools/implementations/schedule_task_once.ts +128 -0
  398. package/src/tools/implementations/schedule_tasks_list.ts +79 -0
  399. package/src/tools/implementations/search.ts +160 -0
  400. package/src/tools/implementations/shell.ts +553 -0
  401. package/src/tools/implementations/todo.ts +260 -0
  402. package/src/tools/implementations/upload_blob.ts +381 -0
  403. package/src/tools/implementations/web_fetch.ts +153 -0
  404. package/src/tools/implementations/web_search.ts +250 -0
  405. package/src/tools/registry.ts +670 -0
  406. package/src/tools/types.ts +177 -0
  407. package/src/tools/utils.ts +256 -0
  408. package/src/types/event-ids.ts +320 -0
  409. package/src/types/index.ts +46 -0
  410. package/src/utils/agentFetcher.ts +107 -0
  411. package/src/utils/cli-error.ts +29 -0
  412. package/src/utils/conversation-id.ts +27 -0
  413. package/src/utils/conversation-utils.ts +1 -0
  414. package/src/utils/delegation-chain.ts +357 -0
  415. package/src/utils/error-handler.ts +42 -0
  416. package/src/utils/git/gitignore.ts +69 -0
  417. package/src/utils/git/index.ts +2 -0
  418. package/src/utils/git/initializeGitRepo.ts +204 -0
  419. package/src/utils/git/worktree.ts +260 -0
  420. package/src/utils/lessonFormatter.ts +70 -0
  421. package/src/utils/lessonTrust.ts +24 -0
  422. package/src/utils/lockfile.ts +123 -0
  423. package/src/utils/logger.ts +149 -0
  424. package/src/utils/nostr-entity-parser.ts +365 -0
  425. package/src/utils/process.ts +49 -0
  426. package/src/wrapper.ts +262 -0
  427. package/tsconfig.json +41 -0
@@ -0,0 +1,128 @@
1
+ import { resolveRecipientToPubkey } from "@/services/agents";
2
+ import { SchedulerService } from "@/services/scheduling";
3
+ import { formatDelay, formatExecuteAt, parseRelativeDelay } from "@/services/scheduling/utils";
4
+ import type { ToolExecutionContext } from "@/tools/types";
5
+ import type { AISdkTool } from "@/tools/types";
6
+ import { logger } from "@/utils/logger";
7
+ import { tool } from "ai";
8
+ import { z } from "zod";
9
+
10
+ /**
11
+ * Creates a tool for scheduling one-off tasks with relative delays
12
+ */
13
+ export function createScheduleTaskOnceTool(context: ToolExecutionContext): AISdkTool {
14
+ const aiTool = tool({
15
+ description:
16
+ "Schedule a one-off task to execute after a relative delay (e.g., '5m' for 5 minutes, '2h' for 2 hours, '3d' for 3 days). The task runs once and is automatically deleted after execution.",
17
+ inputSchema: z.object({
18
+ title: z
19
+ .string()
20
+ .optional()
21
+ .describe("A human-readable title for the task (e.g., 'Follow up on PR review')"),
22
+ prompt: z.string().describe("The prompt/message to send when the task executes"),
23
+ delay: z
24
+ .string()
25
+ .describe(
26
+ "Relative delay before execution. Format: Xm (minutes), Xh (hours), or Xd (days). Examples: '30m', '2h', '1d'"
27
+ ),
28
+ targetAgent: z
29
+ .string()
30
+ .nullable()
31
+ .optional()
32
+ .describe(
33
+ "Target agent slug (e.g., 'architect'), name, npub, or hex pubkey. Defaults to self."
34
+ ),
35
+ }),
36
+ execute: async ({ title, prompt, delay, targetAgent }) => {
37
+ try {
38
+ // Parse the relative delay
39
+ const delayMs = parseRelativeDelay(delay);
40
+ if (delayMs === null) {
41
+ return {
42
+ success: false,
43
+ error: `Invalid delay format: '${delay}'. Use format like '5m' (minutes), '2h' (hours), or '3d' (days).`,
44
+ };
45
+ }
46
+
47
+ // Calculate the absolute execution time
48
+ const now = new Date();
49
+ const executeAt = new Date(now.getTime() + delayMs);
50
+
51
+ const schedulerService = SchedulerService.getInstance();
52
+
53
+ // Resolve target agent to pubkey if specified
54
+ let toPubkey: string;
55
+ if (targetAgent) {
56
+ const resolved = resolveRecipientToPubkey(targetAgent);
57
+ if (!resolved) {
58
+ return {
59
+ success: false,
60
+ error: `Could not resolve target agent: ${targetAgent}. Use agent slug (e.g., 'architect'), name, npub, or hex pubkey.`,
61
+ };
62
+ }
63
+ toPubkey = resolved;
64
+ } else {
65
+ // Default to self if no target specified
66
+ toPubkey = context.agent.pubkey;
67
+ }
68
+
69
+ // The agent scheduling the task is always the current agent
70
+ const fromPubkey = context.agent.pubkey;
71
+
72
+ // Add one-off task to scheduler
73
+ const taskId = await schedulerService.addOneoffTask(
74
+ executeAt,
75
+ prompt,
76
+ fromPubkey,
77
+ toPubkey,
78
+ undefined, // projectId - let it be resolved from context
79
+ title
80
+ );
81
+
82
+ logger.info(
83
+ `Successfully created one-off task ${taskId} to execute at: ${executeAt.toISOString()}`
84
+ );
85
+
86
+ return {
87
+ success: true,
88
+ taskId,
89
+ message: "One-off task scheduled successfully",
90
+ title,
91
+ delay,
92
+ delayHuman: formatDelay(delay),
93
+ executeAt: executeAt.toISOString(),
94
+ executeAtFormatted: formatExecuteAt(executeAt.toISOString()),
95
+ prompt,
96
+ targetAgent: targetAgent || "self",
97
+ };
98
+ } catch (error: unknown) {
99
+ logger.error("Failed to schedule one-off task:", error);
100
+
101
+ return {
102
+ success: false,
103
+ error:
104
+ error instanceof Error ? error.message : "Failed to schedule one-off task",
105
+ };
106
+ }
107
+ },
108
+ });
109
+
110
+ // Attach getHumanReadableContent as non-enumerable property
111
+ Object.defineProperty(aiTool, "getHumanReadableContent", {
112
+ value: (args: {
113
+ title?: string;
114
+ prompt: string;
115
+ delay: string;
116
+ targetAgent?: string | null;
117
+ }) => {
118
+ // Handle both undefined and null for targetAgent
119
+ const target = args.targetAgent ? ` for ${args.targetAgent}` : "";
120
+ const titlePart = args.title ? `'${args.title}' ` : "";
121
+ return `Scheduling one-off task ${titlePart}in ${formatDelay(args.delay)}${target}: ${args.prompt}`;
122
+ },
123
+ enumerable: false,
124
+ configurable: true,
125
+ });
126
+
127
+ return aiTool as AISdkTool;
128
+ }
@@ -0,0 +1,79 @@
1
+ import { getProjectContext } from "@/services/projects";
2
+ import { SchedulerService } from "@/services/scheduling";
3
+ import type { ToolExecutionContext } from "@/tools/types";
4
+ import type { AISdkTool } from "@/tools/types";
5
+ import { logger } from "@/utils/logger";
6
+ import { tool } from "ai";
7
+ import { z } from "zod";
8
+
9
+ /**
10
+ * Creates a tool for listing scheduled tasks
11
+ */
12
+ export function createListScheduledTasksTool(_context: ToolExecutionContext): AISdkTool {
13
+ const aiTool = tool({
14
+ description: "List all scheduled tasks (recurring and one-off) for the current project",
15
+ inputSchema: z.object({
16
+ // Status filter is simplified since we don't track all these states locally
17
+ }),
18
+ execute: async () => {
19
+ try {
20
+ const schedulerService = SchedulerService.getInstance();
21
+
22
+ // Get the current project ID from context
23
+ let projectId: string | undefined;
24
+ try {
25
+ const projectCtx = getProjectContext();
26
+ projectId = projectCtx.project.tagId();
27
+ } catch {
28
+ // No project context available - this shouldn't happen in normal operation
29
+ // but we handle it gracefully by returning no tasks
30
+ logger.warn("No project context available when listing scheduled tasks");
31
+ }
32
+
33
+ // Get tasks from scheduler, filtered by current project
34
+ const tasks = await schedulerService.getTasks(projectId);
35
+
36
+ // Format tasks for output
37
+ const formattedTasks = tasks.map((task) => ({
38
+ id: task.id,
39
+ title: task.title,
40
+ type: task.type || "cron", // Default to "cron" for backward compatibility
41
+ prompt: task.prompt,
42
+ createdAt: task.createdAt,
43
+ schedule: task.type === "oneoff" ? undefined : task.schedule, // Only show schedule for cron tasks
44
+ executeAt: task.executeAt, // Only present for one-off tasks
45
+ lastRun: task.lastRun,
46
+ nextRun: task.nextRun,
47
+ toPubkey: task.toPubkey,
48
+ }));
49
+
50
+ logger.info(`Retrieved ${formattedTasks.length} scheduled tasks`);
51
+
52
+ return {
53
+ success: true,
54
+ tasks: formattedTasks,
55
+ count: formattedTasks.length,
56
+ };
57
+ } catch (error: unknown) {
58
+ logger.error("Failed to list scheduled tasks:", error);
59
+
60
+ return {
61
+ success: false,
62
+ error:
63
+ error instanceof Error ? error.message : "Failed to list scheduled tasks",
64
+ };
65
+ }
66
+ },
67
+ });
68
+
69
+ // Attach getHumanReadableContent as non-enumerable property
70
+ Object.defineProperty(aiTool, "getHumanReadableContent", {
71
+ value: () => {
72
+ return "Listing scheduled tasks for current project";
73
+ },
74
+ enumerable: false,
75
+ configurable: true,
76
+ });
77
+
78
+ return aiTool as AISdkTool;
79
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Unified Search Tool
3
+ *
4
+ * Single search tool that queries across ALL project-scoped RAG collections
5
+ * (conversations, reports, lessons) and returns unified results with metadata
6
+ * that allows agents to dig deeper using other tools.
7
+ *
8
+ * Supports optional prompt-based LLM extraction for focused information retrieval.
9
+ */
10
+
11
+ import type { AISdkTool, ToolExecutionContext } from "@/tools/types";
12
+ import { getProjectContext, isProjectContextInitialized } from "@/services/projects";
13
+ import { bootstrapSearchProviders, UnifiedSearchService } from "@/services/search";
14
+ import { logger } from "@/utils/logger";
15
+ import { tool } from "ai";
16
+ import { z } from "zod";
17
+
18
+ const searchSchema = z.object({
19
+ query: z.string().describe(
20
+ "Natural language search query. Searches across all project knowledge: " +
21
+ "reports (documentation, architecture), conversations (past discussions), " +
22
+ "and lessons (agent insights). Use descriptive natural language for best results."
23
+ ),
24
+ prompt: z
25
+ .string()
26
+ .optional()
27
+ .describe(
28
+ "Optional extraction prompt. When provided, a fast LLM processes the search results " +
29
+ "through the lens of this prompt to extract focused information. " +
30
+ "Example: 'What decisions were made about the database schema?' " +
31
+ "When absent, raw ranked results with metadata are returned."
32
+ ),
33
+ limit: z
34
+ .number()
35
+ .optional()
36
+ .default(10)
37
+ .describe("Maximum number of results to return across all collections. Defaults to 10."),
38
+ collections: z
39
+ .array(z.enum(["reports", "conversations", "lessons"]))
40
+ .optional()
41
+ .describe(
42
+ "Which collections to search. Defaults to all. " +
43
+ "Use to narrow search scope when you know where the information lives."
44
+ ),
45
+ });
46
+
47
+ type SearchInput = z.infer<typeof searchSchema>;
48
+
49
+ async function executeSearch(
50
+ input: SearchInput,
51
+ context: ToolExecutionContext
52
+ ): Promise<Record<string, unknown>> {
53
+ const { query, prompt, limit = 10, collections } = input;
54
+
55
+ // Get project ID for scoping
56
+ let projectId: string;
57
+ if (isProjectContextInitialized()) {
58
+ try {
59
+ projectId = getProjectContext().project.tagId();
60
+ } catch {
61
+ return {
62
+ success: false,
63
+ error: "Project context not available. Cannot perform project-scoped search.",
64
+ };
65
+ }
66
+ } else {
67
+ return {
68
+ success: false,
69
+ error: "Project context not initialized. Cannot perform project-scoped search.",
70
+ };
71
+ }
72
+
73
+ logger.info("🔍 [SearchTool] Executing unified search", {
74
+ query,
75
+ prompt: prompt ? `${prompt.substring(0, 50)}...` : undefined,
76
+ limit,
77
+ collections: collections || "all",
78
+ projectId,
79
+ agent: context.agent.name,
80
+ });
81
+
82
+ // Ensure providers are bootstrapped (idempotent)
83
+ bootstrapSearchProviders();
84
+
85
+ const searchService = UnifiedSearchService.getInstance();
86
+
87
+ const result = await searchService.search({
88
+ query,
89
+ projectId,
90
+ limit,
91
+ prompt,
92
+ collections,
93
+ });
94
+
95
+ // Format results for agent consumption
96
+ return {
97
+ success: result.success,
98
+ query: result.query,
99
+ totalResults: result.totalResults,
100
+ collectionsSearched: result.collectionsSearched,
101
+ ...(result.collectionsErrored && { collectionsErrored: result.collectionsErrored }),
102
+ ...(result.warnings && { warnings: result.warnings }),
103
+ ...(result.extraction && { extraction: result.extraction }),
104
+ results: result.results.map((r) => ({
105
+ source: r.source,
106
+ id: r.id,
107
+ relevanceScore: Math.round(r.relevanceScore * 1000) / 1000,
108
+ title: r.title,
109
+ summary: r.summary,
110
+ ...(r.createdAt && { createdAt: r.createdAt }),
111
+ ...(r.updatedAt && { updatedAt: r.updatedAt }),
112
+ ...(r.author && { author: r.author }),
113
+ ...(r.authorName && { authorName: r.authorName }),
114
+ ...(r.tags?.length && { tags: r.tags }),
115
+ retrievalTool: r.retrievalTool,
116
+ retrievalArg: r.retrievalArg,
117
+ })),
118
+ };
119
+ }
120
+
121
+ export function createSearchTool(context: ToolExecutionContext): AISdkTool {
122
+ const aiTool = tool({
123
+ description:
124
+ "Search across ALL project knowledge — reports, conversations, and lessons — using " +
125
+ "natural language semantic search. Returns ranked results with metadata and retrieval " +
126
+ "instructions. Each result includes a `retrievalTool` and `retrievalArg` that you can " +
127
+ "use to fetch the full document (e.g., call report_read with the slug, lesson_get with " +
128
+ "the event ID, or conversation_get with the conversation ID).\n\n" +
129
+ "Optionally provide a `prompt` parameter to have an LLM extract focused information " +
130
+ "from the search results, rather than reviewing them manually.\n\n" +
131
+ "This is the primary discovery tool for finding information across the project. Use " +
132
+ "conversation_search for deep exploration of specific conversation content.",
133
+
134
+ inputSchema: searchSchema,
135
+
136
+ execute: async (input: SearchInput) => {
137
+ return await executeSearch(input, context);
138
+ },
139
+ });
140
+
141
+ Object.defineProperty(aiTool, "getHumanReadableContent", {
142
+ value: ({ query, prompt, limit, collections }: SearchInput) => {
143
+ const parts = [`Searching project knowledge for "${query}"`];
144
+ if (prompt) parts.push(`prompt: "${prompt.substring(0, 40)}..."`);
145
+ if (collections?.length) parts.push(`in: ${collections.join(", ")}`);
146
+ if (limit && limit !== 10) parts.push(`limit: ${limit}`);
147
+ return parts.join(", ");
148
+ },
149
+ enumerable: false,
150
+ configurable: true,
151
+ });
152
+
153
+ Object.defineProperty(aiTool, "hasSideEffects", {
154
+ value: false,
155
+ enumerable: false,
156
+ configurable: true,
157
+ });
158
+
159
+ return aiTool as AISdkTool;
160
+ }