@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,173 @@
1
+ import type { AISdkTool, ToolExecutionContext } from "@/tools/types";
2
+ import type { EffectiveInstructionsCacheEntry } from "@/services/prompt-compiler";
3
+ import { PromptCompilerService } from "@/services/prompt-compiler";
4
+ import { getProjectContext } from "@/services/projects";
5
+ import { ReportService } from "@/services/reports";
6
+ import { logger } from "@/utils/logger";
7
+ import * as fs from "node:fs/promises";
8
+ import { tool } from "ai";
9
+ import { z } from "zod";
10
+
11
+ // Define the input schema
12
+ const agentsReadSchema = z.object({
13
+ slug: z.string().describe("The slug identifier of the agent to read"),
14
+ });
15
+
16
+ type AgentsReadInput = z.infer<typeof agentsReadSchema>;
17
+
18
+ // Define the report shape returned in the response
19
+ interface MemorizedReport {
20
+ slug: string;
21
+ title?: string;
22
+ content?: string;
23
+ publishedAt?: number;
24
+ }
25
+
26
+ // Define the output type — all fields are always present for a consistent response contract
27
+ interface AgentsReadOutput {
28
+ success: boolean;
29
+ message?: string;
30
+ error?: string;
31
+ agent?: {
32
+ slug: string;
33
+ name: string;
34
+ role: string;
35
+ description?: string;
36
+ instructions?: string;
37
+ compiledInstructions: string | null;
38
+ memorizedReports: MemorizedReport[];
39
+ useCriteria?: string;
40
+ llmConfig?: string;
41
+ tools?: string[];
42
+ eventId?: string;
43
+ pubkey: string;
44
+ };
45
+ }
46
+
47
+ /**
48
+ * Read compiled (effective) instructions from the PromptCompilerService disk cache.
49
+ * Uses the shared static helper from PromptCompilerService for the cache path.
50
+ *
51
+ * @returns The compiled instructions string, or null if no cache exists
52
+ */
53
+ async function readCompiledInstructions(agentPubkey: string): Promise<string | null> {
54
+ try {
55
+ const cachePath = PromptCompilerService.getCachePathForAgent(agentPubkey);
56
+ const data = await fs.readFile(cachePath, "utf-8");
57
+ const entry = JSON.parse(data) as EffectiveInstructionsCacheEntry;
58
+ return entry.effectiveAgentInstructions;
59
+ } catch {
60
+ // No cache file or invalid JSON — compiled instructions not available
61
+ return null;
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Read memorized reports for an agent from the ReportService cache.
67
+ * Returns team reports first, then agent-specific reports (deduped by slug).
68
+ * Each report includes publishedAt for chronological ordering by consumers.
69
+ *
70
+ * @returns Array of memorized report summaries, or empty array
71
+ */
72
+ function readMemorizedReports(agentPubkey: string): MemorizedReport[] {
73
+ try {
74
+ const reportService = new ReportService();
75
+ const agentReports = reportService.getMemorizedReportsForAgent(agentPubkey);
76
+ const teamReports = reportService.getTeamMemorizedReports();
77
+
78
+ // Deduplicate: team reports take precedence over agent reports with the same slug
79
+ const teamSlugs = new Set(teamReports.map(r => r.slug));
80
+ const combined = [
81
+ ...teamReports,
82
+ ...agentReports.filter(r => !teamSlugs.has(r.slug)),
83
+ ];
84
+
85
+ return combined
86
+ .filter(r => !r.isDeleted)
87
+ .map(r => ({
88
+ slug: r.slug,
89
+ title: r.title,
90
+ content: r.content,
91
+ publishedAt: r.publishedAt,
92
+ }));
93
+ } catch {
94
+ // ReportService may fail if no project context — return empty
95
+ return [];
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Core implementation of reading agents.
101
+ * Returns both the base agent definition and compiled runtime data when available.
102
+ */
103
+ async function executeAgentsRead(
104
+ input: AgentsReadInput,
105
+ _context: ToolExecutionContext
106
+ ): Promise<AgentsReadOutput> {
107
+ const { slug } = input;
108
+
109
+ if (!slug) {
110
+ throw new Error("Agent slug is required");
111
+ }
112
+
113
+ // Get agent from project context
114
+ const projectCtx = getProjectContext();
115
+ const agent = projectCtx.getAgent(slug);
116
+
117
+ if (!agent) {
118
+ throw new Error(`Agent with slug "${slug}" not found in current project`);
119
+ }
120
+
121
+ // Fetch compiled instructions from disk cache (non-blocking, best-effort)
122
+ const compiledInstructions = await readCompiledInstructions(agent.pubkey);
123
+
124
+ // Fetch memorized reports from in-memory cache (synchronous, best-effort)
125
+ const memorizedReports = readMemorizedReports(agent.pubkey);
126
+
127
+ logger.info(`Successfully read agent definition for "${agent.name}" (${slug})`, {
128
+ hasCompiledInstructions: compiledInstructions !== null,
129
+ memorizedReportsCount: memorizedReports.length,
130
+ });
131
+
132
+ return {
133
+ success: true,
134
+ message: `Successfully read agent definition for "${agent.name}"`,
135
+ agent: {
136
+ slug: agent.slug,
137
+ name: agent.name,
138
+ role: agent.role,
139
+ description: agent.description,
140
+ instructions: agent.instructions,
141
+ compiledInstructions,
142
+ memorizedReports,
143
+ useCriteria: agent.useCriteria,
144
+ llmConfig: agent.llmConfig,
145
+ tools: agent.tools,
146
+ eventId: agent.eventId,
147
+ pubkey: agent.pubkey,
148
+ },
149
+ };
150
+ }
151
+
152
+ /**
153
+ * Create an AI SDK tool for reading agents
154
+ * This is the primary implementation
155
+ */
156
+ export function createAgentsReadTool(context: ToolExecutionContext): AISdkTool {
157
+ return tool({
158
+ description:
159
+ "Read a local agent definition, including base instructions and compiled runtime instructions when available",
160
+ inputSchema: agentsReadSchema,
161
+ execute: async (input: AgentsReadInput) => {
162
+ try {
163
+ return await executeAgentsRead(input, context);
164
+ } catch (error) {
165
+ logger.error("Failed to read agent definition", { error });
166
+ throw new Error(
167
+ `Failed to read agent definition: ${error instanceof Error ? error.message : String(error)}`,
168
+ { cause: error }
169
+ );
170
+ }
171
+ },
172
+ }) as AISdkTool;
173
+ }
@@ -0,0 +1,200 @@
1
+ import { agentStorage, createStoredAgent } from "@/agents/AgentStorage";
2
+ import { createAgentInstance } from "@/agents/agent-loader";
3
+ import { CORE_AGENT_TOOLS, DELEGATE_TOOLS } from "@/agents/constants";
4
+ import type { AISdkTool, ToolExecutionContext } from "@/tools/types";
5
+ import { DEFAULT_AGENT_LLM_CONFIG } from "@/llm/constants";
6
+ import { getProjectContext } from "@/services/projects";
7
+ import { logger } from "@/utils/logger";
8
+ import { NDKPrivateKeySigner } from "@nostr-dev-kit/ndk";
9
+ import { tool } from "ai";
10
+ import { z } from "zod";
11
+ // Define the input schema
12
+ const agentsWriteSchema = z.object({
13
+ slug: z.string().describe("The slug identifier for the agent"),
14
+ name: z.string().describe("Display name of the agent"),
15
+ role: z.string().describe("Primary role/function of the agent"),
16
+ instructions: z.string().describe("System instructions that guide agent behavior"),
17
+ useCriteria: z.string().describe("Criteria for when this agent should be selected"),
18
+ llmConfig: z.string().nullable().describe("LLM configuration identifier"),
19
+ tools: z
20
+ .array(z.string())
21
+ .nullable()
22
+ .describe("List of tool names to make available to this agent"),
23
+ });
24
+
25
+ type AgentsWriteInput = z.infer<typeof agentsWriteSchema>;
26
+
27
+ // Define the output type
28
+ interface AgentsWriteOutput {
29
+ success: boolean;
30
+ message?: string;
31
+ error?: string;
32
+ filePath?: string;
33
+ agent?: {
34
+ slug: string;
35
+ name: string;
36
+ pubkey: string;
37
+ };
38
+ }
39
+
40
+ /**
41
+ * Core implementation of the agents_write functionality
42
+ * Shared between AI SDK and legacy Tool interfaces
43
+ */
44
+ async function executeAgentsWrite(
45
+ input: AgentsWriteInput,
46
+ context?: ToolExecutionContext
47
+ ): Promise<AgentsWriteOutput> {
48
+ const { slug, name, role, instructions, useCriteria, llmConfig, tools: rawTools } =
49
+ input;
50
+
51
+ // Normalize and filter tools
52
+ const autoInjectedTools = new Set<string>([...CORE_AGENT_TOOLS, ...DELEGATE_TOOLS]);
53
+ const tools = rawTools === null ? null : rawTools
54
+ // 1. Strip mcp__tenex__ prefix
55
+ .map(t => t.startsWith("mcp__tenex__") ? t.slice("mcp__tenex__".length) : t)
56
+ // 2. Filter out auto-injected tools
57
+ .filter(t => !autoInjectedTools.has(t));
58
+
59
+ if (!slug) {
60
+ return {
61
+ success: false,
62
+ error: "Agent slug is required",
63
+ };
64
+ }
65
+
66
+ if (!name || !role) {
67
+ return {
68
+ success: false,
69
+ error: `Agent ${name ? "role" : "name"} is required`,
70
+ };
71
+ }
72
+
73
+ // Get project context
74
+ const projectContext = getProjectContext();
75
+
76
+ if (!context?.workingDirectory) {
77
+ throw new Error("ToolExecutionContext with workingDirectory is required for agents_write tool");
78
+ }
79
+
80
+ // Check if agent exists by slug
81
+ const existingAgent = await agentStorage.getAgentBySlug(slug);
82
+
83
+ if (existingAgent) {
84
+ logger.info(`Updating existing agent: ${slug}`);
85
+
86
+ // Update fields
87
+ existingAgent.name = name;
88
+ existingAgent.role = role;
89
+ existingAgent.instructions = instructions;
90
+ existingAgent.useCriteria = useCriteria;
91
+ if (llmConfig !== undefined || tools !== undefined) {
92
+ if (!existingAgent.default) existingAgent.default = {};
93
+ if (llmConfig !== undefined) existingAgent.default.model = llmConfig ?? undefined;
94
+ if (tools !== undefined) existingAgent.default.tools = tools ?? undefined;
95
+ }
96
+
97
+ // Save to storage
98
+ await agentStorage.saveAgent(existingAgent);
99
+
100
+ // Reload project context to pick up changes
101
+ await projectContext.updateProjectData(projectContext.project);
102
+
103
+ const agent = projectContext.getAgent(slug);
104
+ if (!agent) {
105
+ return {
106
+ success: false,
107
+ error: `Agent ${slug} updated in storage but not found in project context`,
108
+ };
109
+ }
110
+
111
+ logger.info(`Successfully updated agent "${name}" (${slug})`);
112
+ logger.info(` Pubkey: ${agent.pubkey}`);
113
+
114
+ return {
115
+ success: true,
116
+ message: `Successfully updated agent "${name}"`,
117
+ agent: {
118
+ slug,
119
+ name,
120
+ pubkey: agent.pubkey,
121
+ },
122
+ };
123
+ }
124
+ logger.info(`Creating new agent: ${slug}`);
125
+
126
+ // Generate a new private key for this agent
127
+ const signer = NDKPrivateKeySigner.generate();
128
+
129
+ // Get project d-tag for consistent storage keys
130
+ // AgentRegistry uses dTag to lookup agents, so we must use the same key format
131
+ const projectDTag = projectContext.project.dTag || projectContext.project.tagValue("d");
132
+ if (!projectDTag) {
133
+ throw new Error(
134
+ "Project is missing d-tag. Cannot associate agent with project without a valid d-tag identifier."
135
+ );
136
+ }
137
+
138
+ // Create StoredAgent using factory
139
+ const storedAgent = createStoredAgent({
140
+ nsec: signer.nsec,
141
+ slug,
142
+ name,
143
+ role,
144
+ instructions,
145
+ useCriteria,
146
+ defaultConfig: {
147
+ model: llmConfig || DEFAULT_AGENT_LLM_CONFIG,
148
+ tools: tools ?? undefined,
149
+ },
150
+ eventId: undefined, // Locally created agents don't have event IDs
151
+ });
152
+
153
+ // Save to storage, then associate with project
154
+ await agentStorage.saveAgent(storedAgent);
155
+ await agentStorage.addAgentToProject(signer.pubkey, projectDTag);
156
+
157
+ // Create instance and add to registry
158
+ // Pass projectDTag for project-scoped config resolution
159
+ const agent = createAgentInstance(storedAgent, projectContext.agentRegistry, projectDTag);
160
+ projectContext.agentRegistry.addAgent(agent);
161
+
162
+ // Notify context that a new agent was added (for Daemon routing synchronization)
163
+ projectContext.notifyAgentAdded(agent);
164
+
165
+ logger.info(`Successfully created agent "${name}" (${slug})`);
166
+ logger.info(` Pubkey: ${agent.pubkey}`);
167
+
168
+ return {
169
+ success: true,
170
+ message: `Successfully created agent "${name}"`,
171
+ agent: {
172
+ slug,
173
+ name,
174
+ pubkey: agent.pubkey,
175
+ },
176
+ };
177
+ }
178
+
179
+ /**
180
+ * Create an AI SDK tool for writing agents
181
+ * This is the primary implementation
182
+ */
183
+ export function createAgentsWriteTool(context: ToolExecutionContext): AISdkTool {
184
+ return tool({
185
+ description:
186
+ "Write or update agent configuration and tools. Creates/updates agent definition files in .tenex/agents/. Core tools are automatically injected (lessons, reports, todos, conversation tools, kill). Delegation tools (ask, delegate, delegate_crossproject, delegate_followup) are automatically assigned - do not include them. Assign additional tools based on responsibilities. Agent activates immediately and becomes available for delegation. Use to create specialized agents for specific tasks or update existing agent configurations. Changes persist across sessions.",
187
+ inputSchema: agentsWriteSchema,
188
+ execute: async (input: AgentsWriteInput) => {
189
+ try {
190
+ return await executeAgentsWrite(input, context);
191
+ } catch (error) {
192
+ logger.error("Failed to write agent definition", { error });
193
+ throw new Error(
194
+ `Failed to write agent definition: ${error instanceof Error ? error.message : String(error)}`,
195
+ { cause: error }
196
+ );
197
+ }
198
+ },
199
+ }) as AISdkTool;
200
+ }