@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,106 @@
1
+ import type NDK from "@nostr-dev-kit/ndk";
2
+ import { NDKEvent, type NDKRawEvent } from "@nostr-dev-kit/ndk";
3
+
4
+ export class NDKAgentLesson extends NDKEvent {
5
+ static kind = 4129;
6
+ static kinds = [4129];
7
+
8
+ constructor(ndk?: NDK, event?: NDKEvent | NDKRawEvent) {
9
+ super(ndk, event);
10
+ this.kind ??= 4129;
11
+ }
12
+
13
+ static from(event: NDKEvent): NDKAgentLesson {
14
+ return new NDKAgentLesson(event.ndk, event);
15
+ }
16
+
17
+ get title(): string | undefined {
18
+ return this.tagValue("title");
19
+ }
20
+
21
+ /**
22
+ * Title/description of what this lesson is about.
23
+ */
24
+ set title(value: string | undefined) {
25
+ this.removeTag("title");
26
+ if (value) this.tags.push(["title", value]);
27
+ }
28
+
29
+ /**
30
+ * The lesson content - what the agent learned.
31
+ * This is stored in the event content.
32
+ */
33
+ get lesson(): string {
34
+ return this.content;
35
+ }
36
+
37
+ set lesson(value: string) {
38
+ this.content = value;
39
+ }
40
+
41
+ /**
42
+ * Set the agent that this lesson belongs to.
43
+ * @param agentEvent The NDKAgentDefinition event to reference
44
+ */
45
+ set agentDefinitionId(agentDefinitionId: string) {
46
+ this.removeTag("e");
47
+ this.tags.push(["e", agentDefinitionId]);
48
+ }
49
+
50
+ /**
51
+ * Get the agent event ID this lesson belongs to.
52
+ */
53
+ get agentDefinitionId(): string | undefined {
54
+ return this.tags.find((tag) => tag[0] === "e")?.[1];
55
+ }
56
+
57
+ /**
58
+ * Metacognition reasoning - why this lesson is worth learning
59
+ */
60
+ get metacognition(): string | undefined {
61
+ return this.tagValue("metacognition");
62
+ }
63
+
64
+ set metacognition(value: string | undefined) {
65
+ this.removeTag("metacognition");
66
+ if (value) this.tags.push(["metacognition", value]);
67
+ }
68
+
69
+ /**
70
+ * Detailed version of the lesson with richer explanation
71
+ */
72
+ get detailed(): string | undefined {
73
+ return this.tagValue("detailed");
74
+ }
75
+
76
+ set detailed(value: string | undefined) {
77
+ this.removeTag("detailed");
78
+ if (value) this.tags.push(["detailed", value]);
79
+ }
80
+
81
+ /**
82
+ * Category for filing this lesson
83
+ */
84
+ get category(): string | undefined {
85
+ return this.tagValue("category");
86
+ }
87
+
88
+ set category(value: string | undefined) {
89
+ this.removeTag("category");
90
+ if (value) this.tags.push(["category", value]);
91
+ }
92
+
93
+ /**
94
+ * Hashtags for easier sorting and discovery
95
+ */
96
+ get hashtags(): string[] {
97
+ return this.tags.filter((tag) => tag[0] === "t").map((tag) => tag[1]);
98
+ }
99
+
100
+ set hashtags(values: string[]) {
101
+ this.tags = this.tags.filter((tag) => tag[0] !== "t");
102
+ for (const hashtag of values) {
103
+ this.tags.push(["t", hashtag]);
104
+ }
105
+ }
106
+ }
@@ -0,0 +1,34 @@
1
+ import { NDKEvent } from "@nostr-dev-kit/ndk";
2
+
3
+ /**
4
+ * NDKEventMetadata - Kind 513
5
+ *
6
+ * Allows setting metadata about conversations:
7
+ * - ["e", "<event-id>"] - References the conversation
8
+ * - ["title", "title-of-the-conversation"] - Sets the conversation title
9
+ */
10
+ export class NDKEventMetadata extends NDKEvent {
11
+ static kind = 513;
12
+
13
+ static from(event: NDKEvent): NDKEventMetadata {
14
+ return new NDKEventMetadata(event.ndk, event);
15
+ }
16
+
17
+ get conversationId(): string | undefined {
18
+ return this.tagValue("e");
19
+ }
20
+
21
+ get title(): string | undefined {
22
+ return this.tagValue("title");
23
+ }
24
+
25
+ set title(value: string) {
26
+ this.removeTag("title");
27
+ this.tags.push(["title", value]);
28
+ }
29
+
30
+ setConversationId(eventId: string): void {
31
+ this.removeTag("e");
32
+ this.tags.push(["e", eventId]);
33
+ }
34
+ }
@@ -0,0 +1,60 @@
1
+ import type NDK from "@nostr-dev-kit/ndk";
2
+ import { NDKEvent, type NDKRawEvent } from "@nostr-dev-kit/ndk";
3
+
4
+ export class NDKMCPTool extends NDKEvent {
5
+ static kind = 4200;
6
+ static kinds = [4200];
7
+
8
+ constructor(ndk?: NDK, event?: NDKEvent | NDKRawEvent) {
9
+ super(ndk, event);
10
+ this.kind ??= 4200;
11
+ }
12
+
13
+ static from(event: NDKEvent): NDKMCPTool {
14
+ return new NDKMCPTool(event.ndk, event);
15
+ }
16
+
17
+ get name(): string | undefined {
18
+ return this.tagValue("name");
19
+ }
20
+
21
+ set name(value: string | undefined) {
22
+ this.removeTag("name");
23
+ if (value) this.tags.push(["name", value]);
24
+ }
25
+
26
+ get description(): string | undefined {
27
+ return this.tagValue("description");
28
+ }
29
+
30
+ set description(value: string | undefined) {
31
+ this.removeTag("description");
32
+ if (value) this.tags.push(["description", value]);
33
+ }
34
+
35
+ get command(): string | undefined {
36
+ return this.tagValue("command");
37
+ }
38
+
39
+ set command(value: string | undefined) {
40
+ this.removeTag("command");
41
+ if (value) this.tags.push(["command", value]);
42
+ }
43
+
44
+ get image(): string | undefined {
45
+ return this.tagValue("image");
46
+ }
47
+
48
+ set image(value: string | undefined) {
49
+ this.removeTag("image");
50
+ if (value) this.tags.push(["image", value]);
51
+ }
52
+
53
+ get slug(): string {
54
+ const name = this.name || "unnamed";
55
+ return name
56
+ .toLowerCase()
57
+ .replace(/[^a-z0-9]+/g, "-")
58
+ .replace(/^-|-$/g, "");
59
+ }
60
+ }
@@ -0,0 +1,384 @@
1
+ import { NDKKind } from "@/nostr/kinds";
2
+ import type NDK from "@nostr-dev-kit/ndk";
3
+ import { NDKEvent, type NDKRawEvent } from "@nostr-dev-kit/ndk";
4
+
5
+ /**
6
+ * NDKProjectStatus represents a TenexProjectStatus event
7
+ * Used to indicate project status including online agents and model configurations
8
+ */
9
+ export class NDKProjectStatus extends NDKEvent {
10
+ static kind = NDKKind.TenexProjectStatus;
11
+ static kinds = [NDKKind.TenexProjectStatus];
12
+
13
+ constructor(ndk?: NDK, event?: NDKEvent | NDKRawEvent) {
14
+ super(ndk, event);
15
+ this.kind ??= NDKKind.TenexProjectStatus;
16
+ }
17
+
18
+ static from(event: NDKEvent): NDKProjectStatus {
19
+ return new NDKProjectStatus(event.ndk, event);
20
+ }
21
+
22
+ /**
23
+ * Get the project this status refers to
24
+ * Returns the value of the "a" tag (replaceable event reference)
25
+ */
26
+ get projectReference(): string | undefined {
27
+ return this.tagValue("a");
28
+ }
29
+
30
+ /**
31
+ * Set the project this status refers to
32
+ * @param projectTagId The tag ID of the NDKProject event (format: kind:pubkey:dTag)
33
+ */
34
+ set projectReference(projectTagId: string | undefined) {
35
+ this.removeTag("a");
36
+ if (projectTagId) {
37
+ this.tags.push(["a", projectTagId]);
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Get all agent entries from this status event
43
+ * Returns an array of {pubkey, slug} objects
44
+ */
45
+ get agents(): Array<{ pubkey: string; slug: string }> {
46
+ const agentTags = this.tags.filter((tag) => tag[0] === "agent" && tag[1] && tag[2]);
47
+ return agentTags.map((tag) => ({
48
+ pubkey: tag[1],
49
+ slug: tag[2],
50
+ }));
51
+ }
52
+
53
+ /**
54
+ * Add an agent to the status
55
+ * @param pubkey The agent's public key
56
+ * @param slug The agent's slug/identifier
57
+ */
58
+ addAgent(pubkey: string, slug: string): void {
59
+ this.tags.push(["agent", pubkey, slug]);
60
+ }
61
+
62
+ /**
63
+ * Remove an agent from the status
64
+ * @param pubkey The agent's public key to remove
65
+ */
66
+ removeAgent(pubkey: string): void {
67
+ this.tags = this.tags.filter((tag) => !(tag[0] === "agent" && tag[1] === pubkey));
68
+ }
69
+
70
+ /**
71
+ * Clear all agents from the status
72
+ */
73
+ clearAgents(): void {
74
+ this.tags = this.tags.filter((tag) => tag[0] !== "agent");
75
+ }
76
+
77
+ /**
78
+ * Check if a specific agent is in the status
79
+ * @param pubkey The agent's public key
80
+ */
81
+ hasAgent(pubkey: string): boolean {
82
+ return this.tags.some((tag) => tag[0] === "agent" && tag[1] === pubkey);
83
+ }
84
+
85
+ /**
86
+ * Get all model configurations from this status event
87
+ * Returns an array of {modelSlug, agents} objects where agents is an array of agent slugs
88
+ */
89
+ get models(): Array<{ modelSlug: string; agents: string[] }> {
90
+ const modelTags = this.tags.filter((tag) => tag[0] === "model" && tag[1]);
91
+ return modelTags.map((tag) => ({
92
+ modelSlug: tag[1],
93
+ agents: tag.slice(2).filter((a) => a), // Get all agent slugs from index 2 onwards
94
+ }));
95
+ }
96
+
97
+ /**
98
+ * Add a model with its agent access list
99
+ * @param modelSlug The model slug identifier (e.g., "gpt-4", "claude-3")
100
+ * @param agentSlugs Array of agent slugs that use this model
101
+ */
102
+ addModel(modelSlug: string, agentSlugs: string[]): void {
103
+ // Remove existing model tag if it exists
104
+ this.removeModel(modelSlug);
105
+ // Add new model tag with all agent slugs
106
+ this.tags.push(["model", modelSlug, ...agentSlugs]);
107
+ }
108
+
109
+ /**
110
+ * Remove a model from the status
111
+ * @param modelSlug The model slug to remove
112
+ */
113
+ removeModel(modelSlug: string): void {
114
+ this.tags = this.tags.filter((tag) => !(tag[0] === "model" && tag[1] === modelSlug));
115
+ }
116
+
117
+ /**
118
+ * Clear all model configurations from the status
119
+ */
120
+ clearModels(): void {
121
+ this.tags = this.tags.filter((tag) => tag[0] !== "model");
122
+ }
123
+
124
+ /**
125
+ * Check if a specific model exists
126
+ * @param modelSlug The model slug
127
+ */
128
+ hasModel(modelSlug: string): boolean {
129
+ return this.tags.some((tag) => tag[0] === "model" && tag[1] === modelSlug);
130
+ }
131
+
132
+ /**
133
+ * Get agents that use a specific model
134
+ * @param modelSlug The model slug
135
+ * @returns Array of agent slugs that use this model
136
+ */
137
+ getModelAgents(modelSlug: string): string[] {
138
+ const modelTag = this.tags.find((tag) => tag[0] === "model" && tag[1] === modelSlug);
139
+ return modelTag ? modelTag.slice(2).filter((a) => a) : [];
140
+ }
141
+
142
+ /**
143
+ * Check if a specific agent uses a model
144
+ * @param modelSlug The model slug
145
+ * @param agentSlug The agent slug
146
+ */
147
+ agentUsesModel(modelSlug: string, agentSlug: string): boolean {
148
+ const agents = this.getModelAgents(modelSlug);
149
+ return agents.includes(agentSlug);
150
+ }
151
+
152
+ /**
153
+ * Get all models used by a specific agent
154
+ * @param agentSlug The agent slug
155
+ * @returns Array of model slugs used by this agent
156
+ */
157
+ getAgentModels(agentSlug: string): string[] {
158
+ return this.models
159
+ .filter((model) => model.agents.includes(agentSlug))
160
+ .map((model) => model.modelSlug);
161
+ }
162
+
163
+ /**
164
+ * Get the status message/content
165
+ */
166
+ get status(): string {
167
+ return this.content;
168
+ }
169
+
170
+ /**
171
+ * Set the status message/content
172
+ */
173
+ set status(value: string) {
174
+ this.content = value;
175
+ }
176
+
177
+ /**
178
+ * Get all tools with their agent access information
179
+ * Returns an array of {toolName, agents} objects where agents is an array of agent slugs
180
+ */
181
+ get tools(): Array<{ toolName: string; agents: string[] }> {
182
+ const toolTags = this.tags.filter((tag) => tag[0] === "tool" && tag[1]);
183
+ return toolTags.map((tag) => ({
184
+ toolName: tag[1],
185
+ agents: tag.slice(2).filter((a) => a), // Get all agent slugs from index 2 onwards
186
+ }));
187
+ }
188
+
189
+ /**
190
+ * Add a tool with its agent access list
191
+ * @param toolName The name of the tool
192
+ * @param agentSlugs Array of agent slugs that have access to this tool
193
+ */
194
+ addTool(toolName: string, agentSlugs: string[]): void {
195
+ // Remove existing tool tag if it exists
196
+ this.removeTool(toolName);
197
+ // Add new tool tag with all agent slugs
198
+ this.tags.push(["tool", toolName, ...agentSlugs]);
199
+ }
200
+
201
+ /**
202
+ * Remove a tool from the status
203
+ * @param toolName The tool name to remove
204
+ */
205
+ removeTool(toolName: string): void {
206
+ this.tags = this.tags.filter((tag) => !(tag[0] === "tool" && tag[1] === toolName));
207
+ }
208
+
209
+ /**
210
+ * Clear all tools from the status
211
+ */
212
+ clearTools(): void {
213
+ this.tags = this.tags.filter((tag) => tag[0] !== "tool");
214
+ }
215
+
216
+ /**
217
+ * Check if a specific tool exists
218
+ * @param toolName The tool name
219
+ */
220
+ hasTool(toolName: string): boolean {
221
+ return this.tags.some((tag) => tag[0] === "tool" && tag[1] === toolName);
222
+ }
223
+
224
+ /**
225
+ * Get agents that have access to a specific tool
226
+ * @param toolName The tool name
227
+ * @returns Array of agent slugs that have access to this tool
228
+ */
229
+ getToolAgents(toolName: string): string[] {
230
+ const toolTag = this.tags.find((tag) => tag[0] === "tool" && tag[1] === toolName);
231
+ return toolTag ? toolTag.slice(2).filter((a) => a) : [];
232
+ }
233
+
234
+ /**
235
+ * Check if a specific agent has access to a tool
236
+ * @param toolName The tool name
237
+ * @param agentSlug The agent slug
238
+ */
239
+ agentHasTool(toolName: string, agentSlug: string): boolean {
240
+ const agents = this.getToolAgents(toolName);
241
+ return agents.includes(agentSlug);
242
+ }
243
+
244
+ /**
245
+ * Get all tools accessible by a specific agent
246
+ * @param agentSlug The agent slug
247
+ * @returns Array of tool names accessible by this agent
248
+ */
249
+ getAgentTools(agentSlug: string): string[] {
250
+ return this.tools
251
+ .filter((tool) => tool.agents.includes(agentSlug))
252
+ .map((tool) => tool.toolName);
253
+ }
254
+
255
+ /**
256
+ * Get all worktrees from this status event
257
+ * Returns an array of branch names, with the first being the default branch
258
+ */
259
+ get worktrees(): string[] {
260
+ const worktreeTags = this.tags.filter((tag) => tag[0] === "branch" && tag[1]);
261
+ return worktreeTags.map((tag) => tag[1]);
262
+ }
263
+
264
+ /**
265
+ * Add a worktree to the status
266
+ * @param branchName The branch name
267
+ */
268
+ addWorktree(branchName: string): void {
269
+ this.tags.push(["branch", branchName]);
270
+ }
271
+
272
+ /**
273
+ * Get the default worktree (first worktree in the list)
274
+ */
275
+ get defaultWorktree(): string | undefined {
276
+ return this.worktrees[0];
277
+ }
278
+
279
+ // ========================================================================
280
+ // Scheduled Tasks
281
+ // ========================================================================
282
+
283
+ /**
284
+ * Get all scheduled tasks from this status event
285
+ * Tag format: ["scheduled-task", id, title, schedule, targetAgent, type, lastRunTimestamp]
286
+ */
287
+ get scheduledTasks(): Array<{
288
+ id: string;
289
+ title: string;
290
+ schedule: string;
291
+ /** Agent slug when resolvable, otherwise a truncated pubkey prefix */
292
+ targetAgent: string;
293
+ type: "cron" | "oneoff";
294
+ lastRun?: number;
295
+ }> {
296
+ const taskTags = this.tags.filter((tag) => tag[0] === "scheduled-task" && tag[1]);
297
+ return taskTags.map((tag) => {
298
+ const rawType = tag[5];
299
+ const type = rawType === "cron" || rawType === "oneoff" ? rawType : "cron";
300
+ const parsedLastRun = tag[6] ? Number(tag[6]) : NaN;
301
+ const lastRun = Number.isFinite(parsedLastRun) ? parsedLastRun : undefined;
302
+
303
+ return {
304
+ id: tag[1],
305
+ title: tag[2] || "",
306
+ schedule: tag[3] || "",
307
+ targetAgent: tag[4] || "",
308
+ type,
309
+ lastRun,
310
+ };
311
+ });
312
+ }
313
+
314
+ /**
315
+ * Add a scheduled task to the status
316
+ * @param id Task identifier
317
+ * @param title Human-readable task title
318
+ * @param schedule Cron expression or ISO timestamp
319
+ * @param targetAgent Agent slug or pubkey-prefix label for the target agent
320
+ * @param type Task type: "cron" or "oneoff"
321
+ * @param lastRun Optional last run Unix timestamp in seconds
322
+ */
323
+ addScheduledTask(
324
+ id: string,
325
+ title: string,
326
+ schedule: string,
327
+ targetAgent: string,
328
+ type: "cron" | "oneoff",
329
+ lastRun?: number
330
+ ): void {
331
+ this.tags.push([
332
+ "scheduled-task",
333
+ id,
334
+ title,
335
+ schedule,
336
+ targetAgent,
337
+ type,
338
+ lastRun !== undefined ? String(lastRun) : "",
339
+ ]);
340
+ }
341
+
342
+ /**
343
+ * Remove a scheduled task from the status
344
+ * @param id The task ID to remove
345
+ */
346
+ removeScheduledTask(id: string): void {
347
+ this.tags = this.tags.filter(
348
+ (tag) => !(tag[0] === "scheduled-task" && tag[1] === id)
349
+ );
350
+ }
351
+
352
+ /**
353
+ * Clear all scheduled tasks from the status
354
+ */
355
+ clearScheduledTasks(): void {
356
+ this.tags = this.tags.filter((tag) => tag[0] !== "scheduled-task");
357
+ }
358
+
359
+ /**
360
+ * Check if a specific scheduled task exists
361
+ * @param id The task ID
362
+ */
363
+ hasScheduledTask(id: string): boolean {
364
+ return this.tags.some((tag) => tag[0] === "scheduled-task" && tag[1] === id);
365
+ }
366
+
367
+ /**
368
+ * Get all scheduled tasks targeting a specific agent
369
+ * @param agentIdentifier The agent slug or truncated pubkey prefix
370
+ */
371
+ getScheduledTasksForAgent(agentIdentifier: string): Array<{
372
+ id: string;
373
+ title: string;
374
+ schedule: string;
375
+ /** Agent slug when resolvable, otherwise a truncated pubkey prefix */
376
+ targetAgent: string;
377
+ type: "cron" | "oneoff";
378
+ lastRun?: number;
379
+ }> {
380
+ return this.scheduledTasks.filter(
381
+ (task) => task.targetAgent === agentIdentifier
382
+ );
383
+ }
384
+ }
@@ -0,0 +1,4 @@
1
+ export { NDKAgentDefinition } from "./NDKAgentDefinition";
2
+ export { NDKAgentLesson } from "./NDKAgentLesson";
3
+ export { NDKMCPTool } from "./NDKMCPTool";
4
+ export { NDKProjectStatus } from "./NDKProjectStatus";