@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,150 @@
1
+ import type { Hexpubkey } from "@nostr-dev-kit/ndk";
2
+
3
+ /**
4
+ * Branded type for Project IDs
5
+ * Format: "31933:authorPubkey:dTag"
6
+ *
7
+ * Using branded types provides compile-time safety to prevent
8
+ * mixing up regular strings with project IDs.
9
+ */
10
+ export type ProjectId = string & { __brand: "ProjectId" };
11
+
12
+ /**
13
+ * Event classification for daemon routing decisions
14
+ */
15
+ export type EventClassification =
16
+ | "never_route" // Events that should never be routed (status, streaming, etc.)
17
+ | "project" // Project creation/update events (kind 31933)
18
+ | "lesson" // Agent lesson events (kind 4129)
19
+ | "conversation" // Reply and thread events
20
+ | "unknown"; // Unclassified events
21
+
22
+ /**
23
+ * Routing decision for an event
24
+ * This is a discriminated union for type-safe routing handling
25
+ */
26
+ export type RoutingDecision =
27
+ | {
28
+ type: "route_to_project";
29
+ projectId: ProjectId;
30
+ method: "a_tag" | "p_tag_agent";
31
+ matchedTags: string[];
32
+ }
33
+ | {
34
+ type: "dropped";
35
+ reason: string;
36
+ }
37
+ | {
38
+ type: "lesson_hydration";
39
+ targetProjects: ProjectId[];
40
+ agentDefinitionId: string;
41
+ }
42
+ | {
43
+ type: "project_event";
44
+ projectId: ProjectId;
45
+ isUpdate: boolean;
46
+ };
47
+
48
+ /**
49
+ * Runtime action performed when routing an event
50
+ */
51
+ export type RuntimeAction = "existing" | "started" | "crashed";
52
+
53
+ /**
54
+ * Routing context containing all data needed for routing decisions
55
+ */
56
+ export interface RoutingContext {
57
+ /** Known project IDs mapped to their NDKProject instances */
58
+ knownProjects: Map<ProjectId, unknown>; // Using unknown to avoid circular deps
59
+ /** Map of agent pubkeys to their project IDs */
60
+ agentPubkeyToProjects: Map<Hexpubkey, Set<ProjectId>>;
61
+ /** Whitelisted user pubkeys */
62
+ whitelistedPubkeys: Hexpubkey[];
63
+ /** Currently active runtime project IDs */
64
+ activeProjectIds: Set<ProjectId>;
65
+ }
66
+
67
+ /**
68
+ * Event routing result with telemetry metadata
69
+ */
70
+ export interface EventRoutingResult {
71
+ decision: RoutingDecision;
72
+ timestamp: number;
73
+ eventId: string;
74
+ eventKind: number | undefined;
75
+ processingTimeMs?: number;
76
+ }
77
+
78
+ /**
79
+ * Runtime status for monitoring
80
+ */
81
+ export interface RuntimeStatus {
82
+ projectId: ProjectId;
83
+ isRunning: boolean;
84
+ title: string;
85
+ startTime: Date | null;
86
+ lastEventTime: Date | null;
87
+ eventCount: number;
88
+ agentCount: number;
89
+ hasError?: boolean;
90
+ errorMessage?: string;
91
+ }
92
+
93
+ /**
94
+ * Daemon status for monitoring
95
+ */
96
+ export interface DaemonStatus {
97
+ running: boolean;
98
+ knownProjects: number;
99
+ activeProjects: number;
100
+ startingProjects: number;
101
+ totalAgents: number;
102
+ uptime: number;
103
+ memoryUsage: NodeJS.MemoryUsage;
104
+ }
105
+
106
+ /**
107
+ * Subscription state for filter building
108
+ */
109
+ export interface SubscriptionState {
110
+ whitelistedPubkeys: Set<Hexpubkey>;
111
+ knownProjects: Set<ProjectId>;
112
+ agentPubkeys: Set<Hexpubkey>;
113
+ agentDefinitionIds: Set<string>;
114
+ lastUpdate: Date;
115
+ restartPending: boolean;
116
+ }
117
+
118
+ /**
119
+ * Agent index entry for routing
120
+ */
121
+ export interface AgentIndexEntry {
122
+ pubkey: Hexpubkey;
123
+ projectId: ProjectId;
124
+ name: string;
125
+ slug: string;
126
+ }
127
+
128
+ /**
129
+ * Event processing error types
130
+ */
131
+ export enum EventProcessingError {
132
+ UnknownProject = "UNKNOWN_PROJECT",
133
+ NoRoutingMatch = "NO_ROUTING_MATCH",
134
+ RuntimeCrash = "RUNTIME_CRASH",
135
+ RuntimeStartupFailed = "RUNTIME_STARTUP_FAILED",
136
+ InvalidEvent = "INVALID_EVENT",
137
+ }
138
+
139
+ /**
140
+ * Lifecycle event types for telemetry
141
+ */
142
+ export enum LifecycleEvent {
143
+ DaemonStart = "daemon.start",
144
+ DaemonStop = "daemon.stop",
145
+ RuntimeStart = "runtime.start",
146
+ RuntimeStop = "runtime.stop",
147
+ RuntimeCrash = "runtime.crash",
148
+ SubscriptionRestart = "subscription.restart",
149
+ }
150
+
@@ -0,0 +1,76 @@
1
+ import type { NDKEvent } from "@nostr-dev-kit/ndk";
2
+ import type { EventRoutingLogger } from "@/logging/EventRoutingLogger";
3
+ import type { RoutingDecision } from "@/daemon/types";
4
+ import { logger } from "@/utils/logger";
5
+
6
+ /**
7
+ * Consolidated routing logging utilities to reduce verbosity
8
+ */
9
+
10
+ export function logRoutingDecision(
11
+ routingLogger: EventRoutingLogger,
12
+ event: NDKEvent,
13
+ routingDecision: RoutingDecision,
14
+ targetProjectId: string | null,
15
+ routingMethod: "a_tag" | "p_tag_agent" | "none" = "none",
16
+ matchedTags: string[] = [],
17
+ reason?: string
18
+ ): Promise<void> {
19
+ // Convert complex RoutingDecision to simple string type for logger
20
+ const loggerDecision = routingDecision.type === "route_to_project" ? "routed" : routingDecision.type;
21
+
22
+ return routingLogger.logRoutingDecision({
23
+ event,
24
+ routingDecision: loggerDecision as "routed" | "dropped" | "project_event",
25
+ targetProjectId,
26
+ routingMethod,
27
+ matchedTags,
28
+ reason,
29
+ });
30
+ }
31
+
32
+ export function logDropped(
33
+ routingLogger: EventRoutingLogger,
34
+ event: NDKEvent,
35
+ reason: string
36
+ ): Promise<void> {
37
+ logger.debug(`Event dropped: ${reason}`, {
38
+ eventId: event.id?.slice(0, 8),
39
+ eventKind: event.kind,
40
+ reason,
41
+ });
42
+ const routingDecision: RoutingDecision = {
43
+ type: "dropped",
44
+ reason,
45
+ };
46
+ return logRoutingDecision(routingLogger, event, routingDecision, null, "none", [], reason);
47
+ }
48
+
49
+ export function logRouted(
50
+ routingLogger: EventRoutingLogger,
51
+ event: NDKEvent,
52
+ projectId: string,
53
+ method: "a_tag" | "p_tag_agent",
54
+ matchedTags: string[]
55
+ ): Promise<void> {
56
+ logger.debug("Routing event to project", {
57
+ eventId: event.id?.slice(0, 8),
58
+ projectId: projectId.slice(0, 16),
59
+ method,
60
+ });
61
+ const routingDecision: RoutingDecision = {
62
+ type: "route_to_project",
63
+ projectId: projectId as import("@/daemon/types").ProjectId,
64
+ method,
65
+ matchedTags,
66
+ };
67
+ return logRoutingDecision(
68
+ routingLogger,
69
+ event,
70
+ routingDecision,
71
+ projectId,
72
+ method,
73
+ matchedTags,
74
+ `Routed via ${method}`
75
+ );
76
+ }
@@ -0,0 +1,173 @@
1
+ import type { NDKEvent } from "@nostr-dev-kit/ndk";
2
+ import {
3
+ ROOT_CONTEXT,
4
+ SpanStatusCode,
5
+ propagation,
6
+ trace,
7
+ TraceFlags,
8
+ type Context,
9
+ type Span,
10
+ type SpanContext,
11
+ } from "@opentelemetry/api";
12
+ import { shortenConversationId } from "@/utils/conversation-id";
13
+ import { AgentEventDecoder } from "@/nostr/AgentEventDecoder";
14
+ import { TagExtractor } from "@/nostr/TagExtractor";
15
+ import { getConversationSpanManager } from "@/telemetry/ConversationSpanManager";
16
+
17
+ /**
18
+ * Convert a Nostr hex ID to OpenTelemetry traceID (32 hex chars)
19
+ * Uses shortened 12-char conversation ID and pads to 32 chars for OTEL format.
20
+ * This makes Jaeger trace URLs readable: /trace/83f83677f9c7 instead of /trace/83f83677f9c7211e1dcbcbf934e3884f
21
+ */
22
+ function nostrIdToTraceId(nostrId: string): string {
23
+ // Use shortened 12-char ID (consistent with span attributes)
24
+ const shortId = shortenConversationId(nostrId);
25
+ // Pad to 32 chars with zeros (OTEL requirement)
26
+ return shortId.padEnd(32, "0");
27
+ }
28
+
29
+ /**
30
+ * Convert a Nostr hex ID to OpenTelemetry spanID (16 hex chars)
31
+ */
32
+ function nostrIdToSpanId(nostrId: string): string {
33
+ return nostrId.substring(0, 16);
34
+ }
35
+
36
+ /**
37
+ * Create a trace context from Nostr event threading.
38
+ *
39
+ * This derives traceID from the conversation root (E tag) and parentSpanId
40
+ * from the reply-to event (e tag), enabling proper trace hierarchies based
41
+ * on Nostr's natural threading model.
42
+ */
43
+ function createContextFromNostrEvent(event: NDKEvent): {
44
+ context: typeof ROOT_CONTEXT;
45
+ parentSpanId: string | undefined;
46
+ traceId: string;
47
+ } {
48
+ // 1. Determine conversationId (becomes traceID)
49
+ // For root events (no e tag), use the event's own ID as conversation root
50
+ const conversationId = AgentEventDecoder.getReplyTarget(event) || event.id;
51
+ if (!conversationId) {
52
+ return { context: ROOT_CONTEXT, parentSpanId: undefined, traceId: "" };
53
+ }
54
+
55
+ const traceId = nostrIdToTraceId(conversationId);
56
+
57
+ // 2. Determine parent event ID from e-tag (the event this is replying to)
58
+ const parentEventId = TagExtractor.getFirstETag(event);
59
+ const parentSpanId = parentEventId ? nostrIdToSpanId(parentEventId) : undefined;
60
+
61
+ // 3. Create span context - if we have a parent, use its spanId; otherwise this is root
62
+ const spanContext: SpanContext = {
63
+ traceId,
64
+ // Use parent's span ID if this is a reply, otherwise use conversation root as the span
65
+ spanId: parentSpanId || nostrIdToSpanId(conversationId),
66
+ traceFlags: TraceFlags.SAMPLED,
67
+ isRemote: true,
68
+ };
69
+
70
+ // 4. Create context with this span context as parent
71
+ const parentContext = trace.setSpanContext(ROOT_CONTEXT, spanContext);
72
+
73
+ return { context: parentContext, parentSpanId, traceId };
74
+ }
75
+
76
+ /**
77
+ * Create a telemetry span for event processing with conversation-aware trace context.
78
+ *
79
+ * This function derives OpenTelemetry trace/span IDs from Nostr event threading:
80
+ * - traceID = first 32 chars of conversation root ID (all messages in a conversation share this)
81
+ * - parentSpanId = first 16 chars of reply-to event ID (creates parent-child hierarchy)
82
+ * - spanID = first 16 chars of this event's ID (unique per event)
83
+ *
84
+ * This enables viewing entire conversations as single traces in Jaeger with proper
85
+ * hierarchical relationships based on Nostr's e-tag threading.
86
+ */
87
+ export function createEventSpan(event: NDKEvent): Span {
88
+ // First check for explicit trace_context tag (backwards compat with delegations)
89
+ const traceContextTag = event.tags.find((t) => t[0] === "trace_context");
90
+
91
+ let conversationId = AgentEventDecoder.getReplyTarget(event);
92
+ let derivedTraceId: string | undefined;
93
+
94
+ let parentContext: Context;
95
+ if (traceContextTag) {
96
+ // Use explicit W3C trace context if provided (delegation events)
97
+ const carrier = { traceparent: traceContextTag[1] };
98
+ parentContext = propagation.extract(ROOT_CONTEXT, carrier);
99
+ } else {
100
+ // Derive trace context from Nostr event threading
101
+ const derived = createContextFromNostrEvent(event);
102
+ parentContext = derived.context;
103
+ derivedTraceId = derived.traceId;
104
+ }
105
+
106
+ if (!conversationId && event.id) {
107
+ conversationId = event.id;
108
+ }
109
+
110
+ // Get reply-to event for attribute logging
111
+ const replyToEventId = TagExtractor.getFirstETag(event);
112
+
113
+ // Create span with conversation-aware context
114
+ const span = trace.getTracer("tenex.daemon").startSpan(
115
+ "tenex.event.process",
116
+ {
117
+ attributes: {
118
+ "event.id": event.id,
119
+ "event.kind": event.kind || 0,
120
+ "event.pubkey": event.pubkey,
121
+ "event.created_at": event.created_at || 0,
122
+ // Truncate content to avoid huge spans
123
+ "event.content": event.content.substring(0, 500),
124
+ "event.content_length": event.content.length,
125
+ "event.tag_count": event.tags.length,
126
+ "event.has_trace_context": !!traceContextTag,
127
+ "event.reply_to": replyToEventId || "",
128
+ "conversation.id": conversationId ? shortenConversationId(conversationId) : "unknown",
129
+ "conversation.is_root": !AgentEventDecoder.getReplyTarget(event),
130
+ "trace.derived_from_nostr": !traceContextTag && !!derivedTraceId,
131
+ },
132
+ },
133
+ parentContext
134
+ );
135
+
136
+ // Track message sequence
137
+ if (conversationId) {
138
+ getConversationSpanManager().incrementMessageCount(conversationId, span);
139
+ }
140
+
141
+ return span;
142
+ }
143
+
144
+ /**
145
+ * End span with success status
146
+ */
147
+ export function endSpanSuccess(span: Span): void {
148
+ span.setStatus({ code: SpanStatusCode.OK });
149
+ span.end();
150
+ }
151
+
152
+ /**
153
+ * End span with error status
154
+ */
155
+ export function endSpanError(span: Span, error: unknown): void {
156
+ span.recordException(error instanceof Error ? error : new Error(String(error)));
157
+ span.setStatus({
158
+ code: SpanStatusCode.ERROR,
159
+ message: error instanceof Error ? error.message : String(error),
160
+ });
161
+ span.end();
162
+ }
163
+
164
+ /**
165
+ * Add routing decision event to span
166
+ */
167
+ export function addRoutingEvent(
168
+ span: Span,
169
+ decision: string,
170
+ details: Record<string, unknown>
171
+ ): void {
172
+ span.addEvent("routing_decision", { decision, ...details });
173
+ }