@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,394 @@
1
+ import { z } from "zod";
2
+
3
+ /**
4
+ * Unified configuration types for TENEX
5
+ * All configuration files use the same schemas for both global and project contexts
6
+ */
7
+
8
+ // =====================================================================================
9
+ // MAIN CONFIG SCHEMA (config.json)
10
+ // =====================================================================================
11
+
12
+ export interface TenexConfig {
13
+ // Global fields
14
+ whitelistedPubkeys?: string[];
15
+ tenexPrivateKey?: string; // Backend private key for publishing TENEX announcements
16
+ backendName?: string; // Name for the TENEX backend profile (default: "tenex backend")
17
+ projectsBase?: string; // Base directory for all projects (default: ~/tenex)
18
+ relays?: string[]; // Nostr relay URLs
19
+ blossomServerUrl?: string; // Blossom server URL for blob uploads (default: https://blossom.primal.net)
20
+
21
+ // Logging configuration
22
+ logging?: {
23
+ logFile?: string; // Path to log file (default: ~/.tenex/daemon.log)
24
+ level?: "silent" | "error" | "warn" | "info" | "debug"; // Log level (inherits from LOG_LEVEL env var if not set)
25
+ };
26
+
27
+ // Summarization configuration
28
+ summarization?: {
29
+ inactivityTimeout?: number; // Milliseconds to wait after last activity before generating summary (default: 300000 = 5 minutes)
30
+ };
31
+
32
+ // Telemetry configuration
33
+ telemetry?: {
34
+ enabled?: boolean; // Enable OpenTelemetry tracing (default: true)
35
+ serviceName?: string; // OTL trace service name (default: 'tenex-daemon')
36
+ endpoint?: string; // OTLP HTTP endpoint URL (default: http://localhost:4318/v1/traces)
37
+ };
38
+
39
+ // Global system prompt configuration
40
+ // When set, this content is added to ALL projects' system prompts
41
+ globalSystemPrompt?: {
42
+ enabled?: boolean; // Enable the global system prompt (default: true when content exists)
43
+ content?: string; // The actual system prompt content
44
+ };
45
+
46
+ // Escalation agent configuration
47
+ // When set, ask() tool calls are routed through this agent instead of directly to the user
48
+ escalation?: {
49
+ agent?: string; // Agent slug to route ask() calls through (acts as first line of defense)
50
+ };
51
+
52
+ // Compression configuration
53
+ // Controls conversation history compression to manage context window
54
+ compression?: {
55
+ enabled?: boolean; // Enable compression (default: true)
56
+ tokenThreshold?: number; // Token count that triggers compression (default: 50000)
57
+ tokenBudget?: number; // Target token count after compression (default: 40000)
58
+ slidingWindowSize?: number; // Number of recent messages to keep in fallback mode (default: 50)
59
+ };
60
+
61
+ // Intervention configuration
62
+ // Monitors agent work completions and triggers human-replica review if user doesn't respond
63
+ intervention?: {
64
+ enabled?: boolean; // Enable intervention monitoring (default: false)
65
+ agent?: string; // Agent slug to notify when user doesn't respond (required if enabled)
66
+ timeout?: number; // Milliseconds to wait for user response (default: 300000 = 5 minutes)
67
+ conversationInactivityTimeoutSeconds?: number; // Seconds since last user message to skip intervention (default: 120 = 2 minutes). If user was active within this window when agent tags them, skip intervention entirely.
68
+ };
69
+
70
+ // APNs push notification configuration
71
+ apns?: {
72
+ enabled?: boolean; // Master switch (default: false)
73
+ keyPath?: string; // Path to .p8 key file from Apple
74
+ keyId?: string; // Apple Key ID (from developer portal)
75
+ teamId?: string; // Apple Team ID
76
+ bundleId?: string; // App Bundle ID (e.g., com.example.tenex)
77
+ production?: boolean; // true = api.push.apple.com, false = api.sandbox.push.apple.com
78
+ };
79
+
80
+ // NIP-46 remote signing configuration
81
+ nip46?: {
82
+ enabled?: boolean; // Master switch (default: false)
83
+ signingTimeoutMs?: number; // Per-request timeout (default: 30000)
84
+ maxRetries?: number; // Per-request retries (default: 2)
85
+ owners?: Record<string, { // Per-owner config, keyed by hex pubkey
86
+ bunkerUri?: string; // bunker://pubkey?relay=wss://...
87
+ }>;
88
+ };
89
+
90
+ // Project fields (optional for global config)
91
+ description?: string;
92
+ repoUrl?: string;
93
+ projectNaddr?: string;
94
+ }
95
+
96
+ export const TenexConfigSchema = z.object({
97
+ whitelistedPubkeys: z.array(z.string()).optional(),
98
+ tenexPrivateKey: z.string().optional(),
99
+ backendName: z.string().optional(),
100
+ projectsBase: z.string().optional(),
101
+ relays: z.array(z.string()).optional(),
102
+ blossomServerUrl: z.string().optional(),
103
+ logging: z
104
+ .object({
105
+ logFile: z.string().optional(),
106
+ level: z.enum(["silent", "error", "warn", "info", "debug"]).optional(),
107
+ })
108
+ .optional(),
109
+ summarization: z
110
+ .object({
111
+ inactivityTimeout: z.number().optional(),
112
+ })
113
+ .optional(),
114
+ telemetry: z
115
+ .object({
116
+ enabled: z.boolean().optional(),
117
+ serviceName: z.string().optional(),
118
+ endpoint: z.string().optional(),
119
+ })
120
+ .optional(),
121
+ globalSystemPrompt: z
122
+ .object({
123
+ enabled: z.boolean().optional(),
124
+ content: z.string().optional(),
125
+ })
126
+ .optional(),
127
+ escalation: z
128
+ .object({
129
+ agent: z.string().optional(),
130
+ })
131
+ .optional(),
132
+ compression: z
133
+ .object({
134
+ enabled: z.boolean().optional(),
135
+ tokenThreshold: z.number().optional(),
136
+ tokenBudget: z.number().optional(),
137
+ slidingWindowSize: z.number().optional(),
138
+ })
139
+ .optional(),
140
+ intervention: z
141
+ .object({
142
+ enabled: z.boolean().optional(),
143
+ agent: z.string().optional(),
144
+ timeout: z.number().optional(),
145
+ conversationInactivityTimeoutSeconds: z.number().optional(),
146
+ })
147
+ .optional(),
148
+ apns: z
149
+ .object({
150
+ enabled: z.boolean().optional(),
151
+ keyPath: z.string().optional(),
152
+ keyId: z.string().optional(),
153
+ teamId: z.string().optional(),
154
+ bundleId: z.string().optional(),
155
+ production: z.boolean().optional(),
156
+ })
157
+ .optional(),
158
+ nip46: z
159
+ .object({
160
+ enabled: z.boolean().optional(),
161
+ signingTimeoutMs: z.number().optional(),
162
+ maxRetries: z.number().optional(),
163
+ owners: z
164
+ .record(
165
+ z.string(),
166
+ z.object({
167
+ bunkerUri: z.string().optional(),
168
+ })
169
+ )
170
+ .optional(),
171
+ })
172
+ .optional(),
173
+ description: z.string().optional(),
174
+ repoUrl: z.string().optional(),
175
+ projectNaddr: z.string().optional(),
176
+ });
177
+
178
+ // =====================================================================================
179
+ // LLM SCHEMA (llms.json)
180
+ // =====================================================================================
181
+
182
+ /**
183
+ * Meta model variant configuration
184
+ * Defines a variant within a meta model that maps to a specific underlying model
185
+ */
186
+ export interface MetaModelVariant {
187
+ /** The underlying LLM configuration name to use for this variant */
188
+ model: string;
189
+ /** Keywords that trigger this variant (e.g., ["think", "ponder"]) */
190
+ keywords?: string[];
191
+ /** Description of when to use this variant - shown in system prompt */
192
+ description?: string;
193
+ /** Optional additional system prompt to inject when this variant is active */
194
+ systemPrompt?: string;
195
+ /** Priority tier for conflict resolution (higher number = higher priority) */
196
+ tier?: number;
197
+ }
198
+
199
+ /**
200
+ * Meta model configuration
201
+ * A meta model is a virtual model that dynamically selects from underlying models
202
+ */
203
+ export interface MetaModelConfiguration {
204
+ /** Must be "meta" to identify this as a meta model */
205
+ provider: "meta";
206
+ /** Map of variant names to their configurations */
207
+ variants: Record<string, MetaModelVariant>;
208
+ /** Default variant to use when no keyword matches */
209
+ default: string;
210
+ /** Optional description shown in system prompt preamble */
211
+ description?: string;
212
+ }
213
+
214
+ /**
215
+ * Individual LLM configuration
216
+ */
217
+ export interface LLMConfiguration {
218
+ provider: string;
219
+ model: string;
220
+ temperature?: number;
221
+ maxTokens?: number;
222
+ topP?: number;
223
+ /** Reasoning effort level (for codex-app-server provider) */
224
+ reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh";
225
+ [key: string]: unknown; // Allow additional provider-specific settings
226
+ }
227
+
228
+ /**
229
+ * Type guard to check if a configuration is a meta model
230
+ */
231
+ export function isMetaModelConfiguration(config: LLMConfiguration | MetaModelConfiguration): config is MetaModelConfiguration {
232
+ return config.provider === "meta" && "variants" in config;
233
+ }
234
+
235
+ /**
236
+ * Any LLM configuration type (standard or meta model)
237
+ */
238
+ export type AnyLLMConfiguration = LLMConfiguration | MetaModelConfiguration;
239
+
240
+ /**
241
+ * Main LLM configuration structure
242
+ */
243
+ export interface TenexLLMs {
244
+ configurations: Record<string, AnyLLMConfiguration>;
245
+ default?: string;
246
+ summarization?: string; // Named config to use for generating summaries (kind 513 events)
247
+ supervision?: string; // Named config to use for agent supervision
248
+ search?: string; // Named config to use for search operations
249
+ promptCompilation?: string; // Named config to use for prompt compilation (compiling lessons into system prompts)
250
+ compression?: string; // Named config to use for conversation history compression
251
+ }
252
+
253
+ /**
254
+ * Schema for meta model variant
255
+ */
256
+ export const MetaModelVariantSchema = z.object({
257
+ model: z.string(),
258
+ keywords: z.array(z.string()).optional(),
259
+ description: z.string().optional(),
260
+ systemPrompt: z.string().optional(),
261
+ tier: z.number().optional(),
262
+ });
263
+
264
+ /**
265
+ * Schema for meta model configuration
266
+ */
267
+ export const MetaModelConfigurationSchema = z.object({
268
+ provider: z.literal("meta"),
269
+ variants: z.record(z.string(), MetaModelVariantSchema),
270
+ default: z.string(),
271
+ description: z.string().optional(),
272
+ });
273
+
274
+ /**
275
+ * Schema for standard LLM configuration
276
+ */
277
+ export const StandardLLMConfigurationSchema = z
278
+ .object({
279
+ provider: z.string(),
280
+ model: z.string(),
281
+ temperature: z.number().optional(),
282
+ maxTokens: z.number().optional(),
283
+ topP: z.number().optional(),
284
+ reasoningEffort: z.enum(["none", "low", "medium", "high", "xhigh"]).optional(),
285
+ })
286
+ .passthrough(); // Allow additional properties
287
+
288
+ /**
289
+ * Union schema that accepts either standard or meta model configurations
290
+ */
291
+ export const LLMConfigurationSchema = z.union([
292
+ MetaModelConfigurationSchema,
293
+ StandardLLMConfigurationSchema,
294
+ ]);
295
+
296
+ export const TenexLLMsSchema = z.object({
297
+ configurations: z.record(z.string(), LLMConfigurationSchema).default({}),
298
+ default: z.string().optional(),
299
+ summarization: z.string().optional(),
300
+ supervision: z.string().optional(),
301
+ search: z.string().optional(),
302
+ promptCompilation: z.string().optional(),
303
+ compression: z.string().optional(),
304
+ });
305
+
306
+ // =====================================================================================
307
+ // PROVIDER CREDENTIALS SCHEMA (providers.json)
308
+ // =====================================================================================
309
+
310
+ /**
311
+ * Provider credentials configuration
312
+ * Contains API keys and connection details for external providers
313
+ */
314
+ export interface ProviderCredentials {
315
+ apiKey: string | string[];
316
+ baseUrl?: string;
317
+ timeout?: number;
318
+ options?: Record<string, unknown>;
319
+ }
320
+
321
+ /**
322
+ * Main provider credentials structure
323
+ */
324
+ export interface TenexProviders {
325
+ providers: Record<string, ProviderCredentials>;
326
+ }
327
+
328
+ export const ProviderCredentialsSchema = z.object({
329
+ apiKey: z.union([z.string(), z.array(z.string())]),
330
+ baseUrl: z.string().optional(),
331
+ timeout: z.number().optional(),
332
+ options: z.record(z.string(), z.unknown()).optional(),
333
+ });
334
+
335
+ export const TenexProvidersSchema = z.object({
336
+ providers: z.record(z.string(), ProviderCredentialsSchema).default({}),
337
+ });
338
+
339
+ // =====================================================================================
340
+ // MCP SCHEMA (mcp.json)
341
+ // =====================================================================================
342
+
343
+ export interface MCPServerConfig {
344
+ command: string;
345
+ args: string[];
346
+ env?: Record<string, string>;
347
+ description?: string;
348
+ allowedPaths?: string[];
349
+ eventId?: string; // Nostr event ID this server was installed from
350
+ }
351
+
352
+ export interface TenexMCP {
353
+ servers: Record<string, MCPServerConfig>;
354
+ enabled: boolean;
355
+ }
356
+
357
+ export const MCPServerConfigSchema = z.object({
358
+ command: z.string(),
359
+ args: z.array(z.string()),
360
+ env: z.record(z.string(), z.string()).optional(),
361
+ description: z.string().optional(),
362
+ allowedPaths: z.array(z.string()).optional(),
363
+ eventId: z.string().optional(),
364
+ });
365
+
366
+ export const TenexMCPSchema = z.object({
367
+ servers: z.record(z.string(), MCPServerConfigSchema).default({}),
368
+ enabled: z.boolean().default(true),
369
+ });
370
+
371
+ // =====================================================================================
372
+ // LOADED CONFIGURATION STATE
373
+ // =====================================================================================
374
+
375
+ export interface LoadedConfig {
376
+ config: TenexConfig;
377
+ llms: TenexLLMs;
378
+ mcp: TenexMCP;
379
+ providers: TenexProviders;
380
+ }
381
+
382
+ // =====================================================================================
383
+ // HELPER TYPES
384
+ // =====================================================================================
385
+
386
+ // resolveApiKey has moved to @/llm/providers/key-manager — re-export for backwards compatibility
387
+ export { resolveApiKey } from "@/llm/providers/key-manager";
388
+
389
+ export type ConfigFile = "config.json" | "llms.json" | "mcp.json" | "providers.json";
390
+
391
+ export interface ConfigPaths {
392
+ global: string;
393
+ project?: string;
394
+ }