@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,214 @@
1
+ /**
2
+ * Codex App Server Provider
3
+ *
4
+ * OpenAI Codex using app-server mode with JSON-RPC for mid-execution
5
+ * message injection support.
6
+ */
7
+
8
+ import {
9
+ createCodexAppServer,
10
+ type CodexAppServerSettings,
11
+ type Session,
12
+ type McpServerConfigOrSdk,
13
+ } from "ai-sdk-provider-codex-app-server";
14
+ import type { LanguageModelUsage } from "ai";
15
+ import { logger } from "@/utils/logger";
16
+ import { trace } from "@opentelemetry/api";
17
+ import type { LanguageModelUsageWithCostUsd } from "../../types";
18
+ import type {
19
+ ProviderInitConfig,
20
+ ProviderMetadata,
21
+ ProviderRuntimeContext,
22
+ } from "../types";
23
+ import { AgentProvider, type AgentProviderFunction } from "../base/AgentProvider";
24
+ import { CodexAppServerToolsAdapter } from "./CodexAppServerToolsAdapter";
25
+ import { PROVIDER_IDS } from "../provider-ids";
26
+
27
+ /**
28
+ * Codex App Server-specific metadata structure
29
+ */
30
+ interface CodexAppServerProviderMetadata {
31
+ costUsd?: number;
32
+ sessionId?: string;
33
+ }
34
+
35
+ /**
36
+ * AI SDK usage with optional extended fields
37
+ */
38
+ interface ExtendedUsage extends LanguageModelUsage {
39
+ cachedInputTokens?: number;
40
+ reasoningTokens?: number;
41
+ }
42
+
43
+ /**
44
+ * Codex App Server provider implementation
45
+ *
46
+ * Unlike CodexCliProvider which uses one-shot execution, this provider
47
+ * uses app-server mode for persistent threads and mid-execution injection.
48
+ */
49
+ export class CodexAppServerProvider extends AgentProvider {
50
+ static readonly METADATA: ProviderMetadata = AgentProvider.createMetadata(
51
+ PROVIDER_IDS.CODEX_APP_SERVER,
52
+ "Codex App Server",
53
+ "OpenAI Codex with app-server mode and mid-execution injection",
54
+ "agent",
55
+ "gpt-5.1-codex-max",
56
+ {
57
+ streaming: true,
58
+ toolCalling: true,
59
+ builtInTools: true,
60
+ sessionResumption: true,
61
+ requiresApiKey: false,
62
+ mcpSupport: true,
63
+ },
64
+ "https://openai.com/codex"
65
+ );
66
+
67
+ private currentSession: Session | null = null;
68
+
69
+ get metadata(): ProviderMetadata {
70
+ return CodexAppServerProvider.METADATA;
71
+ }
72
+
73
+ /**
74
+ * Get the current session for mid-execution injection
75
+ */
76
+ getSession(): Session | null {
77
+ return this.currentSession;
78
+ }
79
+
80
+ /**
81
+ * Create the Codex App Server provider function
82
+ */
83
+ protected createProviderFunction(_config: ProviderInitConfig): AgentProviderFunction {
84
+ return createCodexAppServer({
85
+ defaultSettings: {},
86
+ }) as AgentProviderFunction;
87
+ }
88
+
89
+ /**
90
+ * Create the agent settings for Codex App Server
91
+ */
92
+ protected createAgentSettings(
93
+ context: ProviderRuntimeContext,
94
+ _modelId: string
95
+ ): CodexAppServerSettings {
96
+ trace.getActiveSpan()?.addEvent("llm_factory.creating_codex_app_server", {
97
+ "agent.name": context.agentName ?? "",
98
+ "session.id": context.sessionId ?? "",
99
+ });
100
+
101
+ const toolNames = context.tools ? Object.keys(context.tools) : [];
102
+ const regularTools = toolNames.filter((name) => !name.startsWith("mcp__"));
103
+
104
+ logger.debug("[CodexAppServerProvider] Tool analysis", {
105
+ agentName: context.agentName,
106
+ totalToolNames: toolNames.length,
107
+ regularTools: regularTools.length,
108
+ });
109
+
110
+ // Build mcpServers configuration - can include SdkMcpServer for in-process tools
111
+ const mcpServersConfig: Record<string, McpServerConfigOrSdk> = {};
112
+
113
+ // Create TENEX SDK MCP server if we have TENEX tools
114
+ if (context.tools && regularTools.length > 0) {
115
+ const tenexServer = CodexAppServerToolsAdapter.createSdkMcpServer(
116
+ context.tools,
117
+ { agentName: context.agentName }
118
+ );
119
+ if (tenexServer) {
120
+ mcpServersConfig.tenex = tenexServer;
121
+ logger.debug("[CodexAppServerProvider] Added TENEX SDK MCP server", {
122
+ toolCount: regularTools.length,
123
+ });
124
+ }
125
+ }
126
+
127
+ // Add configured MCP servers (stdio format)
128
+ const mcpConfig = context.mcpConfig;
129
+ if (mcpConfig?.enabled && mcpConfig.servers) {
130
+ for (const [serverName, serverConfig] of Object.entries(mcpConfig.servers)) {
131
+ mcpServersConfig[serverName] = {
132
+ transport: "stdio",
133
+ command: serverConfig.command,
134
+ args: serverConfig.args,
135
+ env: serverConfig.env,
136
+ };
137
+ }
138
+
139
+ trace.getActiveSpan()?.addEvent("llm_factory.codex_app_server_mcp_added", {
140
+ "mcp.server_count": Object.keys(mcpConfig.servers).length,
141
+ "mcp.servers": Object.keys(mcpConfig.servers).join(", "),
142
+ });
143
+ }
144
+
145
+ const settings: CodexAppServerSettings = {
146
+ cwd: context.workingDirectory,
147
+ mcpServers: mcpServersConfig,
148
+ approvalMode: "on-failure",
149
+ sandboxMode: "workspace-write",
150
+ threadMode: "stateless",
151
+ reasoningEffort: context.reasoningEffort,
152
+ verbose: false,
153
+ logger: {
154
+ warn: (message: string) => logger.warn("[CodexAppServer]", message),
155
+ error: (message: string) => logger.error("[CodexAppServer]", message),
156
+ info: (message: string) => logger.info("[CodexAppServer]", message),
157
+ debug: (message: string) => logger.debug("[CodexAppServer]", message),
158
+ },
159
+ onSessionCreated: (session: Session) => {
160
+ this.currentSession = session;
161
+ logger.info("[CodexAppServerProvider] Session created", {
162
+ threadId: session.threadId,
163
+ reasoningEffort: context.reasoningEffort,
164
+ });
165
+ trace.getActiveSpan()?.addEvent("codex_app_server.session_created", {
166
+ "session.threadId": session.threadId,
167
+ "reasoning.effort": context.reasoningEffort ?? "default",
168
+ });
169
+ },
170
+ };
171
+
172
+ if (context.sessionId) {
173
+ settings.resume = context.sessionId;
174
+ }
175
+
176
+ return settings;
177
+ }
178
+
179
+ /**
180
+ * Codex App Server is always available (no API key required)
181
+ */
182
+ isAvailable(): boolean {
183
+ return this._initialized;
184
+ }
185
+
186
+ /**
187
+ * Extract usage metadata from Codex App Server provider response
188
+ */
189
+ static extractUsageMetadata(
190
+ model: string,
191
+ totalUsage: LanguageModelUsage | undefined,
192
+ providerMetadata: Record<string, unknown> | undefined
193
+ ): LanguageModelUsageWithCostUsd {
194
+ const metadata = providerMetadata?.[PROVIDER_IDS.CODEX_APP_SERVER] as CodexAppServerProviderMetadata | undefined;
195
+ const extendedUsage = totalUsage as ExtendedUsage | undefined;
196
+
197
+ const inputTokens = totalUsage?.inputTokens;
198
+ const outputTokens = totalUsage?.outputTokens;
199
+ const totalTokens = totalUsage?.totalTokens ??
200
+ (inputTokens !== undefined && outputTokens !== undefined
201
+ ? inputTokens + outputTokens
202
+ : undefined);
203
+
204
+ return {
205
+ model,
206
+ inputTokens,
207
+ outputTokens,
208
+ totalTokens,
209
+ costUsd: metadata?.costUsd,
210
+ cachedInputTokens: extendedUsage?.cachedInputTokens,
211
+ reasoningTokens: extendedUsage?.reasoningTokens,
212
+ } as LanguageModelUsageWithCostUsd;
213
+ }
214
+ }
@@ -0,0 +1,91 @@
1
+ import type { AISdkTool } from "@/tools/types";
2
+ import { logger } from "@/utils/logger";
3
+ import { createSdkMcpServer, tool, type SdkMcpServer, type Tool, type ToolDefinition } from "ai-sdk-provider-codex-app-server";
4
+ import { z, type ZodRawShape } from "zod";
5
+
6
+ /**
7
+ * Converts TENEX tools to Codex App Server SDK MCP server format.
8
+ *
9
+ * This adapter uses createSdkMcpServer which handles HTTP server lifecycle
10
+ * automatically - the user API is identical to Claude Code's createSdkMcpServer.
11
+ */
12
+ export class CodexAppServerToolsAdapter {
13
+ /**
14
+ * Create an SDK MCP server from TENEX tools
15
+ * Pass the result directly to mcpServers in provider settings.
16
+ */
17
+ static createSdkMcpServer(
18
+ tools: Record<string, AISdkTool>,
19
+ context: { agentName?: string }
20
+ ): SdkMcpServer | undefined {
21
+ const localTools = Object.entries(tools);
22
+
23
+ logger.debug("[CodexAppServerToolsAdapter] Input tools analysis:", {
24
+ totalTools: Object.keys(tools).length,
25
+ localToolsCount: localTools.length,
26
+ localToolNames: localTools.map(([name]) => name),
27
+ agentName: context.agentName,
28
+ });
29
+
30
+ if (localTools.length === 0) {
31
+ return undefined;
32
+ }
33
+
34
+ const codexTools = this.convertTools(localTools, tools);
35
+
36
+ logger.info("[CodexAppServerToolsAdapter] Creating SDK MCP server:", {
37
+ serverName: "tenex",
38
+ toolCount: codexTools.length,
39
+ toolNames: localTools.map(([name]) => name),
40
+ });
41
+
42
+ return createSdkMcpServer({
43
+ name: "tenex",
44
+ tools: codexTools,
45
+ });
46
+ }
47
+
48
+ /**
49
+ * Convert TENEX tools to Codex Tool format
50
+ */
51
+ private static convertTools(
52
+ localTools: [string, AISdkTool][],
53
+ allTools: Record<string, AISdkTool>
54
+ ): Tool[] {
55
+ return localTools.map(([name, tenexTool]) => {
56
+ let zodSchema: unknown = z.object({});
57
+
58
+ if (tenexTool.inputSchema) {
59
+ const schema = tenexTool.inputSchema;
60
+ if (schema && typeof schema === "object" && "shape" in schema) {
61
+ const shape = (schema as z.ZodObject<ZodRawShape>).shape;
62
+ zodSchema = z.object(shape);
63
+ } else if (schema && typeof schema === "object" && !("_def" in schema)) {
64
+ zodSchema = z.object(schema as unknown as ZodRawShape);
65
+ }
66
+ }
67
+
68
+ return tool<unknown, unknown>({
69
+ name,
70
+ description: tenexTool.description || `Execute ${name}`,
71
+ parameters: zodSchema as ToolDefinition<unknown, unknown>["parameters"],
72
+ execute: async (args: unknown) => {
73
+ const executeTool = allTools[name];
74
+ if (!executeTool?.execute) {
75
+ throw new Error(`Tool ${name} not found or has no execute function`);
76
+ }
77
+
78
+ logger.debug(`[CodexAppServerToolsAdapter] Executing tool ${name}`);
79
+
80
+ const result = await executeTool.execute(args, {
81
+ abortSignal: new AbortController().signal,
82
+ toolCallId: "tool-call-" + Date.now(),
83
+ messages: [],
84
+ });
85
+
86
+ return result;
87
+ },
88
+ });
89
+ });
90
+ }
91
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Agent Providers Index
3
+ *
4
+ * Exports all agent-based providers.
5
+ */
6
+
7
+ export { ClaudeCodeProvider } from "./ClaudeCodeProvider";
8
+ export { ClaudeCodeToolsAdapter } from "./ClaudeCodeToolsAdapter";
9
+ export { CodexAppServerProvider } from "./CodexAppServerProvider";
10
+ export { CodexAppServerToolsAdapter } from "./CodexAppServerToolsAdapter";
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Agent Provider - Base class for agent-based LLM providers
3
+ *
4
+ * Agent providers (like claude-code, codex-app-server) have their own
5
+ * execution model with built-in tools and session management.
6
+ */
7
+
8
+ import type { LanguageModel } from "ai";
9
+ import type {
10
+ ProviderInitConfig,
11
+ ProviderRuntimeContext,
12
+ ProviderModelResult,
13
+ } from "../types";
14
+ import { BaseProvider } from "./BaseProvider";
15
+
16
+ /**
17
+ * Configuration type for agent provider functions
18
+ */
19
+ export type AgentProviderFunction<TSettings = unknown> = (
20
+ model: string,
21
+ options?: TSettings
22
+ ) => LanguageModel;
23
+
24
+ /**
25
+ * Base class for agent-based providers
26
+ *
27
+ * Agent providers:
28
+ * - Have their own built-in tools
29
+ * - Support session resumption
30
+ * - Bypass the standard AI SDK registry
31
+ * - Create provider functions instead of provider instances
32
+ */
33
+ export abstract class AgentProvider extends BaseProvider {
34
+ protected providerFunction: AgentProviderFunction | null = null;
35
+
36
+ /**
37
+ * Agent providers don't use the standard provider instance
38
+ */
39
+ getProviderInstance(): null {
40
+ return null;
41
+ }
42
+
43
+ /**
44
+ * Get the provider function for creating models
45
+ */
46
+ getProviderFunction(): AgentProviderFunction | null {
47
+ return this.providerFunction;
48
+ }
49
+
50
+ /**
51
+ * Create the agent settings for the provider
52
+ * Must be implemented by subclasses
53
+ */
54
+ protected abstract createAgentSettings(
55
+ context: ProviderRuntimeContext,
56
+ modelId: string
57
+ ): unknown;
58
+
59
+ /**
60
+ * Create the provider function
61
+ * Must be implemented by subclasses
62
+ */
63
+ protected abstract createProviderFunction(config: ProviderInitConfig): AgentProviderFunction;
64
+
65
+ /**
66
+ * Initialize the agent provider
67
+ */
68
+ async initialize(config: ProviderInitConfig): Promise<void> {
69
+ this.config = config;
70
+ this.providerFunction = this.createProviderFunction(config);
71
+ this._initialized = true;
72
+ }
73
+
74
+ /**
75
+ * Agent providers don't create a standard provider instance
76
+ */
77
+ protected createProviderInstance(_config: ProviderInitConfig): null {
78
+ return null;
79
+ }
80
+
81
+ /**
82
+ * Create a language model using the provider function
83
+ */
84
+ createModel(modelId: string, context?: ProviderRuntimeContext): ProviderModelResult {
85
+ if (!this.providerFunction) {
86
+ throw new Error(`Provider ${this.metadata.id} not initialized`);
87
+ }
88
+
89
+ const settings = this.createAgentSettings(context || {}, modelId);
90
+ const model = this.providerFunction(modelId, settings);
91
+
92
+ return {
93
+ model,
94
+ providerFunction: this.providerFunction,
95
+ bypassRegistry: true,
96
+ agentSettings: settings,
97
+ };
98
+ }
99
+
100
+ /**
101
+ * Reset the provider state
102
+ */
103
+ reset(): void {
104
+ super.reset();
105
+ this.providerFunction = null;
106
+ }
107
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Base Provider - Abstract base class for all LLM providers
3
+ *
4
+ * Provides common functionality for provider implementations.
5
+ */
6
+
7
+ import type {
8
+ ILLMProvider,
9
+ ProviderInitConfig,
10
+ ProviderMetadata,
11
+ ProviderRuntimeContext,
12
+ ProviderModelResult,
13
+ ProviderCapabilities,
14
+ ProviderCategory,
15
+ } from "../types";
16
+
17
+ /**
18
+ * Abstract base class for LLM providers
19
+ */
20
+ export abstract class BaseProvider implements ILLMProvider {
21
+ protected config: ProviderInitConfig | null = null;
22
+ protected _initialized = false;
23
+
24
+ /**
25
+ * Get provider metadata - must be implemented by subclasses
26
+ */
27
+ abstract get metadata(): ProviderMetadata;
28
+
29
+ /**
30
+ * Create the underlying provider instance
31
+ * Called during initialization for standard providers
32
+ */
33
+ protected abstract createProviderInstance(config: ProviderInitConfig): unknown | null;
34
+
35
+ /**
36
+ * Provider instance storage
37
+ */
38
+ protected providerInstance: unknown | null = null;
39
+
40
+ /**
41
+ * Initialize the provider with configuration
42
+ */
43
+ async initialize(config: ProviderInitConfig): Promise<void> {
44
+ this.config = config;
45
+ this.providerInstance = this.createProviderInstance(config);
46
+ this._initialized = true;
47
+ }
48
+
49
+ /**
50
+ * Check if the provider is initialized
51
+ */
52
+ isInitialized(): boolean {
53
+ return this._initialized;
54
+ }
55
+
56
+ /**
57
+ * Check if the provider is available
58
+ */
59
+ isAvailable(): boolean {
60
+ return this._initialized;
61
+ }
62
+
63
+ /**
64
+ * Get the AI SDK provider instance
65
+ */
66
+ getProviderInstance(): unknown | null {
67
+ return this.providerInstance;
68
+ }
69
+
70
+ /**
71
+ * Create a language model - must be implemented by subclasses
72
+ */
73
+ abstract createModel(modelId: string, context?: ProviderRuntimeContext): ProviderModelResult;
74
+
75
+ /**
76
+ * Reset the provider state
77
+ */
78
+ reset(): void {
79
+ this.config = null;
80
+ this.providerInstance = null;
81
+ this._initialized = false;
82
+ }
83
+
84
+ /**
85
+ * Helper to create metadata
86
+ */
87
+ protected static createMetadata(
88
+ id: string,
89
+ displayName: string,
90
+ description: string,
91
+ category: ProviderCategory,
92
+ defaultModel: string,
93
+ capabilities?: Partial<ProviderCapabilities>,
94
+ documentationUrl?: string
95
+ ): ProviderMetadata {
96
+ return {
97
+ id,
98
+ displayName,
99
+ description,
100
+ category,
101
+ defaultModel,
102
+ documentationUrl,
103
+ capabilities: {
104
+ streaming: true,
105
+ toolCalling: true,
106
+ builtInTools: false,
107
+ sessionResumption: false,
108
+ requiresApiKey: true,
109
+ mcpSupport: false,
110
+ ...capabilities,
111
+ },
112
+ };
113
+ }
114
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Standard Provider - Base class for standard AI SDK providers
3
+ *
4
+ * Standard providers use AI SDK's createProviderRegistry and follow
5
+ * the standard language model pattern.
6
+ */
7
+
8
+ import type { ProviderRuntimeContext, ProviderModelResult } from "../types";
9
+ import { BaseProvider } from "./BaseProvider";
10
+
11
+ /**
12
+ * Base class for standard AI SDK providers
13
+ *
14
+ * Standard providers:
15
+ * - Use AI SDK's provider packages (@ai-sdk/openai, @ai-sdk/anthropic, etc.)
16
+ * - Are registered in createProviderRegistry
17
+ * - Use the registry.languageModel() pattern
18
+ */
19
+ export abstract class StandardProvider extends BaseProvider {
20
+ /**
21
+ * Create a language model using the standard registry pattern
22
+ */
23
+ createModel(modelId: string, _context?: ProviderRuntimeContext): ProviderModelResult {
24
+ if (!this.providerInstance) {
25
+ throw new Error(`Provider ${this.metadata.id} not initialized`);
26
+ }
27
+
28
+ // Standard providers get their model from the AI SDK registry
29
+ // The actual model creation is done by the registry in LLMService
30
+ const provider = this.providerInstance as { languageModel: (id: string) => unknown };
31
+ const model = provider.languageModel(modelId);
32
+
33
+ return {
34
+ model: model as import("ai").LanguageModel,
35
+ bypassRegistry: false,
36
+ };
37
+ }
38
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Base Providers Index
3
+ *
4
+ * Exports base classes for provider implementations.
5
+ */
6
+
7
+ export { BaseProvider } from "./BaseProvider";
8
+ export { StandardProvider } from "./StandardProvider";
9
+ export { AgentProvider, type AgentProviderFunction } from "./AgentProvider";
@@ -0,0 +1,106 @@
1
+ /**
2
+ * LLM Providers Module
3
+ *
4
+ * This module provides a modular, extensible system for LLM providers.
5
+ * Each provider implements the ILLMProvider interface and registers
6
+ * itself with the ProviderRegistry.
7
+ *
8
+ * ## Architecture
9
+ *
10
+ * - **Standard Providers**: Use AI SDK's provider packages and createProviderRegistry
11
+ * Examples: OpenRouter, Anthropic, OpenAI, Ollama
12
+ *
13
+ * - **Agent Providers**: Have built-in tools and session management
14
+ * Examples: Claude Code, Codex CLI
15
+ *
16
+ * ## Adding a New Provider
17
+ *
18
+ * 1. Create a new provider class extending StandardProvider or AgentProvider
19
+ * 2. Implement the required abstract methods
20
+ * 3. Add the provider to the ALL_PROVIDERS array below
21
+ * 4. The provider will be automatically registered and available
22
+ *
23
+ * @module
24
+ */
25
+
26
+ // Export types
27
+ export * from "./types";
28
+
29
+ // Export provider ID constants
30
+ export { PROVIDER_IDS, type ProviderId } from "./provider-ids";
31
+
32
+ // Export base classes
33
+ export * from "./base";
34
+
35
+ // Export registry
36
+ export { ProviderRegistry, providerRegistry } from "./registry";
37
+
38
+ // Export key manager
39
+ export { KeyManager, keyManager, type KeyManagerConfig, resolveApiKey, hasApiKey } from "./key-manager";
40
+
41
+ // Export standard providers
42
+ export {
43
+ OpenRouterProvider,
44
+ AnthropicProvider,
45
+ OpenAIProvider,
46
+ OllamaProvider,
47
+ } from "./standard";
48
+
49
+ // Export agent providers
50
+ export { ClaudeCodeProvider, CodexAppServerProvider } from "./agent";
51
+
52
+ // Import for registration
53
+ import type { ProviderRegistration } from "./types";
54
+ import { OpenRouterProvider } from "./standard/OpenRouterProvider";
55
+ import { AnthropicProvider } from "./standard/AnthropicProvider";
56
+ import { OpenAIProvider } from "./standard/OpenAIProvider";
57
+ import { OllamaProvider } from "./standard/OllamaProvider";
58
+ import { ClaudeCodeProvider } from "./agent/ClaudeCodeProvider";
59
+ import { CodexAppServerProvider } from "./agent/CodexAppServerProvider";
60
+ import { providerRegistry } from "./registry";
61
+
62
+ /**
63
+ * All available provider registrations
64
+ *
65
+ * Each provider exposes static metadata to avoid wasteful instantiation.
66
+ * Add new providers to this array to make them available.
67
+ */
68
+ export const ALL_PROVIDER_REGISTRATIONS: ProviderRegistration[] = [
69
+ // Standard providers
70
+ {
71
+ Provider: OpenRouterProvider,
72
+ metadata: OpenRouterProvider.METADATA,
73
+ },
74
+ {
75
+ Provider: AnthropicProvider,
76
+ metadata: AnthropicProvider.METADATA,
77
+ },
78
+ {
79
+ Provider: OpenAIProvider,
80
+ metadata: OpenAIProvider.METADATA,
81
+ },
82
+ {
83
+ Provider: OllamaProvider,
84
+ metadata: OllamaProvider.METADATA,
85
+ },
86
+ // Agent providers
87
+ {
88
+ Provider: ClaudeCodeProvider,
89
+ metadata: ClaudeCodeProvider.METADATA,
90
+ },
91
+ {
92
+ Provider: CodexAppServerProvider,
93
+ metadata: CodexAppServerProvider.METADATA,
94
+ },
95
+ ];
96
+
97
+ /**
98
+ * Register all providers with the registry
99
+ * This is called automatically on module load
100
+ */
101
+ export function registerAllProviders(): void {
102
+ providerRegistry.registerAll(ALL_PROVIDER_REGISTRATIONS);
103
+ }
104
+
105
+ // Auto-register all providers on module load
106
+ registerAllProviders();