@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.
- package/README.md +194 -0
- package/dist/backend-wrapper.cjs +3 -0
- package/dist/src/index.js +331928 -0
- package/package.json +103 -0
- package/src/agents/AgentRegistry.ts +418 -0
- package/src/agents/AgentStorage.ts +1133 -0
- package/src/agents/ConfigResolver.ts +229 -0
- package/src/agents/agent-installer.ts +236 -0
- package/src/agents/agent-loader.ts +241 -0
- package/src/agents/constants.ts +82 -0
- package/src/agents/errors.ts +48 -0
- package/src/agents/execution/AgentExecutor.ts +561 -0
- package/src/agents/execution/ExecutionContextFactory.ts +112 -0
- package/src/agents/execution/MessageCompiler.ts +597 -0
- package/src/agents/execution/MessageSyncer.ts +100 -0
- package/src/agents/execution/PostCompletionChecker.ts +278 -0
- package/src/agents/execution/ProgressMonitor.ts +50 -0
- package/src/agents/execution/RALResolver.ts +177 -0
- package/src/agents/execution/SessionManager.ts +181 -0
- package/src/agents/execution/StreamCallbacks.ts +312 -0
- package/src/agents/execution/StreamExecutionHandler.ts +579 -0
- package/src/agents/execution/StreamSetup.ts +313 -0
- package/src/agents/execution/ToolEventHandlers.ts +239 -0
- package/src/agents/execution/ToolExecutionTracker.ts +498 -0
- package/src/agents/execution/ToolResultUtils.ts +97 -0
- package/src/agents/execution/ToolSupervisionWrapper.ts +174 -0
- package/src/agents/execution/constants.ts +16 -0
- package/src/agents/execution/index.ts +3 -0
- package/src/agents/execution/types.ts +96 -0
- package/src/agents/execution/utils.ts +26 -0
- package/src/agents/index.ts +4 -0
- package/src/agents/script-installer.ts +266 -0
- package/src/agents/supervision/SupervisorLLMService.ts +253 -0
- package/src/agents/supervision/SupervisorOrchestrator.ts +471 -0
- package/src/agents/supervision/heuristics/ConsecutiveToolsWithoutTodoHeuristic.ts +73 -0
- package/src/agents/supervision/heuristics/DelegationClaimHeuristic.ts +80 -0
- package/src/agents/supervision/heuristics/HeuristicRegistry.ts +114 -0
- package/src/agents/supervision/heuristics/PendingTodosHeuristic.ts +93 -0
- package/src/agents/supervision/heuristics/SilentAgentHeuristic.ts +54 -0
- package/src/agents/supervision/heuristics/index.ts +5 -0
- package/src/agents/supervision/index.ts +28 -0
- package/src/agents/supervision/registerHeuristics.ts +110 -0
- package/src/agents/supervision/supervisionHealthCheck.ts +123 -0
- package/src/agents/supervision/types.ts +171 -0
- package/src/agents/tool-names.ts +46 -0
- package/src/agents/tool-normalization.ts +184 -0
- package/src/agents/types/index.ts +2 -0
- package/src/agents/types/runtime.ts +74 -0
- package/src/agents/types/storage.ts +145 -0
- package/src/commands/agent/import/index.ts +6 -0
- package/src/commands/agent/import/openclaw-distiller.ts +57 -0
- package/src/commands/agent/import/openclaw-reader.ts +141 -0
- package/src/commands/agent/import/openclaw.ts +154 -0
- package/src/commands/agent/index.ts +6 -0
- package/src/commands/agent.ts +215 -0
- package/src/commands/daemon.ts +198 -0
- package/src/commands/doctor.ts +134 -0
- package/src/commands/setup/embed.ts +228 -0
- package/src/commands/setup/global-system-prompt.ts +223 -0
- package/src/commands/setup/image.ts +179 -0
- package/src/commands/setup/index.ts +16 -0
- package/src/commands/setup/interactive.ts +95 -0
- package/src/commands/setup/llm.ts +38 -0
- package/src/commands/setup/onboarding.ts +294 -0
- package/src/commands/setup/providers.ts +27 -0
- package/src/constants.ts +34 -0
- package/src/conversations/ConversationDiskReader.ts +148 -0
- package/src/conversations/ConversationRegistry.ts +728 -0
- package/src/conversations/ConversationStore.ts +868 -0
- package/src/conversations/MessageBuilder.ts +866 -0
- package/src/conversations/executionTime.ts +62 -0
- package/src/conversations/formatters/DelegationXmlFormatter.ts +64 -0
- package/src/conversations/formatters/ThreadedConversationFormatter.ts +303 -0
- package/src/conversations/formatters/index.ts +9 -0
- package/src/conversations/formatters/utils/MessageFormatter.ts +46 -0
- package/src/conversations/formatters/utils/TimestampFormatter.ts +56 -0
- package/src/conversations/formatters/utils/TreeBuilder.ts +131 -0
- package/src/conversations/formatters/utils/TreeRenderer.ts +49 -0
- package/src/conversations/index.ts +2 -0
- package/src/conversations/persistence/ToolMessageStorage.ts +143 -0
- package/src/conversations/search/ConversationIndexManager.ts +393 -0
- package/src/conversations/search/QueryParser.ts +114 -0
- package/src/conversations/search/SearchEngine.ts +175 -0
- package/src/conversations/search/SnippetExtractor.ts +345 -0
- package/src/conversations/search/embeddings/ConversationEmbeddingService.ts +484 -0
- package/src/conversations/search/embeddings/ConversationIndexingJob.ts +320 -0
- package/src/conversations/search/embeddings/IndexingStateManager.ts +338 -0
- package/src/conversations/search/embeddings/index.ts +18 -0
- package/src/conversations/search/index.ts +49 -0
- package/src/conversations/search/types.ts +124 -0
- package/src/conversations/services/CategoryManager.ts +160 -0
- package/src/conversations/services/ConversationResolver.ts +296 -0
- package/src/conversations/services/ConversationSummarizer.ts +234 -0
- package/src/conversations/services/MetadataDebounceManager.ts +188 -0
- package/src/conversations/services/index.ts +2 -0
- package/src/conversations/types.ts +148 -0
- package/src/conversations/utils/content-utils.ts +69 -0
- package/src/conversations/utils/image-placeholder.ts +281 -0
- package/src/conversations/utils/image-url-utils.ts +171 -0
- package/src/conversations/utils/multimodal-content.ts +90 -0
- package/src/conversations/utils/tool-result-truncator.ts +159 -0
- package/src/daemon/Daemon.ts +1883 -0
- package/src/daemon/ProjectRuntime.ts +657 -0
- package/src/daemon/RestartState.ts +152 -0
- package/src/daemon/RuntimeLifecycle.ts +268 -0
- package/src/daemon/SubscriptionManager.ts +305 -0
- package/src/daemon/UnixSocketTransport.ts +318 -0
- package/src/daemon/filters/SubscriptionFilterBuilder.ts +119 -0
- package/src/daemon/index.ts +9 -0
- package/src/daemon/routing/DaemonRouter.ts +491 -0
- package/src/daemon/types.ts +150 -0
- package/src/daemon/utils/routing-log.ts +76 -0
- package/src/daemon/utils/telemetry.ts +173 -0
- package/src/event-handler/agentDeletion.ts +383 -0
- package/src/event-handler/index.ts +749 -0
- package/src/event-handler/newConversation.ts +165 -0
- package/src/event-handler/project.ts +166 -0
- package/src/event-handler/reply.ts +18 -0
- package/src/events/NDKAgentDefinition.ts +292 -0
- package/src/events/NDKAgentLesson.ts +106 -0
- package/src/events/NDKEventMetadata.ts +34 -0
- package/src/events/NDKMCPTool.ts +60 -0
- package/src/events/NDKProjectStatus.ts +384 -0
- package/src/events/index.ts +4 -0
- package/src/index.ts +126 -0
- package/src/lib/agent-home.ts +334 -0
- package/src/lib/error-formatter.ts +200 -0
- package/src/lib/fs/filesystem.ts +128 -0
- package/src/lib/fs/index.ts +1 -0
- package/src/lib/json-parser.ts +30 -0
- package/src/lib/string.ts +15 -0
- package/src/lib/time.ts +74 -0
- package/src/llm/ChunkHandler.ts +277 -0
- package/src/llm/FinishHandler.ts +250 -0
- package/src/llm/LLMConfigEditor.ts +154 -0
- package/src/llm/LLMServiceFactory.ts +230 -0
- package/src/llm/MessageProcessor.ts +90 -0
- package/src/llm/RecordingState.ts +37 -0
- package/src/llm/StreamPublisher.ts +40 -0
- package/src/llm/TracingUtils.ts +77 -0
- package/src/llm/chunk-validators.ts +57 -0
- package/src/llm/constants.ts +6 -0
- package/src/llm/index.ts +12 -0
- package/src/llm/meta/MetaModelResolver.ts +352 -0
- package/src/llm/meta/index.ts +11 -0
- package/src/llm/middleware/flight-recorder.ts +188 -0
- package/src/llm/providers/MockProvider.ts +332 -0
- package/src/llm/providers/agent/ClaudeCodeProvider.ts +343 -0
- package/src/llm/providers/agent/ClaudeCodeToolsAdapter.ts +203 -0
- package/src/llm/providers/agent/CodexAppServerProvider.ts +214 -0
- package/src/llm/providers/agent/CodexAppServerToolsAdapter.ts +91 -0
- package/src/llm/providers/agent/index.ts +10 -0
- package/src/llm/providers/base/AgentProvider.ts +107 -0
- package/src/llm/providers/base/BaseProvider.ts +114 -0
- package/src/llm/providers/base/StandardProvider.ts +38 -0
- package/src/llm/providers/base/index.ts +9 -0
- package/src/llm/providers/index.ts +106 -0
- package/src/llm/providers/key-manager.ts +238 -0
- package/src/llm/providers/ollama-models.ts +105 -0
- package/src/llm/providers/openrouter-models.ts +102 -0
- package/src/llm/providers/provider-ids.ts +18 -0
- package/src/llm/providers/registry/ProviderRegistry.ts +414 -0
- package/src/llm/providers/registry/index.ts +7 -0
- package/src/llm/providers/standard/AnthropicProvider.ts +71 -0
- package/src/llm/providers/standard/OllamaProvider.ts +59 -0
- package/src/llm/providers/standard/OpenAIProvider.ts +44 -0
- package/src/llm/providers/standard/OpenRouterProvider.ts +103 -0
- package/src/llm/providers/standard/index.ts +10 -0
- package/src/llm/providers/types.ts +194 -0
- package/src/llm/providers/usage-metadata.ts +78 -0
- package/src/llm/service.ts +713 -0
- package/src/llm/types.ts +167 -0
- package/src/llm/utils/ConfigurationManager.ts +650 -0
- package/src/llm/utils/ConfigurationTester.ts +229 -0
- package/src/llm/utils/ModelSelector.ts +212 -0
- package/src/llm/utils/ProviderConfigUI.ts +177 -0
- package/src/llm/utils/claudeCodePromptCompiler.ts +141 -0
- package/src/llm/utils/codex-models.ts +53 -0
- package/src/llm/utils/context-window-cache.ts +30 -0
- package/src/llm/utils/models-dev-cache.ts +267 -0
- package/src/llm/utils/provider-setup.ts +50 -0
- package/src/llm/utils/tool-errors.ts +78 -0
- package/src/llm/utils/usage.ts +74 -0
- package/src/logging/EventRoutingLogger.ts +205 -0
- package/src/nostr/AgentEventDecoder.ts +357 -0
- package/src/nostr/AgentEventEncoder.ts +677 -0
- package/src/nostr/AgentProfilePublisher.ts +657 -0
- package/src/nostr/AgentPublisher.ts +437 -0
- package/src/nostr/BlossomService.ts +226 -0
- package/src/nostr/InterventionPublisher.ts +132 -0
- package/src/nostr/TagExtractor.ts +228 -0
- package/src/nostr/collectEvents.ts +83 -0
- package/src/nostr/constants.ts +38 -0
- package/src/nostr/encryption.ts +26 -0
- package/src/nostr/index.ts +31 -0
- package/src/nostr/keys.ts +17 -0
- package/src/nostr/kinds.ts +37 -0
- package/src/nostr/ndkClient.ts +72 -0
- package/src/nostr/relays.ts +43 -0
- package/src/nostr/trace-context.ts +39 -0
- package/src/nostr/types.ts +227 -0
- package/src/nostr/utils.ts +84 -0
- package/src/prompts/core/FragmentRegistry.ts +30 -0
- package/src/prompts/core/PromptBuilder.ts +98 -0
- package/src/prompts/core/index.ts +3 -0
- package/src/prompts/core/types.ts +13 -0
- package/src/prompts/fragments/00-global-system-prompt.ts +44 -0
- package/src/prompts/fragments/01-agent-identity.ts +69 -0
- package/src/prompts/fragments/02-agent-home-directory.ts +114 -0
- package/src/prompts/fragments/03-system-reminders-explanation.ts +14 -0
- package/src/prompts/fragments/04-relay-configuration.ts +38 -0
- package/src/prompts/fragments/05-delegation-chain.ts +45 -0
- package/src/prompts/fragments/06-agent-todos.ts +74 -0
- package/src/prompts/fragments/06-todo-usage-guidance.ts +34 -0
- package/src/prompts/fragments/07-meta-project-context.ts +234 -0
- package/src/prompts/fragments/08-active-conversations.ts +382 -0
- package/src/prompts/fragments/09-recent-conversations.ts +153 -0
- package/src/prompts/fragments/10-referenced-article.ts +21 -0
- package/src/prompts/fragments/11-nudges.ts +134 -0
- package/src/prompts/fragments/12-skills.ts +127 -0
- package/src/prompts/fragments/13-available-nudges.ts +122 -0
- package/src/prompts/fragments/15-available-agents.ts +53 -0
- package/src/prompts/fragments/16-stay-in-your-lane.ts +41 -0
- package/src/prompts/fragments/17-todo-before-delegation.ts +39 -0
- package/src/prompts/fragments/20-voice-mode.ts +62 -0
- package/src/prompts/fragments/22-scheduled-tasks.ts +175 -0
- package/src/prompts/fragments/24-retrieved-lessons.ts +26 -0
- package/src/prompts/fragments/25-rag-instructions.ts +333 -0
- package/src/prompts/fragments/26-mcp-resources.ts +237 -0
- package/src/prompts/fragments/27-memorized-reports.ts +77 -0
- package/src/prompts/fragments/28-agent-directed-monitoring.ts +32 -0
- package/src/prompts/fragments/29-rag-collections.ts +50 -0
- package/src/prompts/fragments/30-worktree-context.ts +98 -0
- package/src/prompts/fragments/31-agents-md-guidance.ts +96 -0
- package/src/prompts/fragments/32-process-metrics.ts +72 -0
- package/src/prompts/fragments/debug-mode.ts +48 -0
- package/src/prompts/fragments/delegation-completion.ts +44 -0
- package/src/prompts/fragments/index.ts +91 -0
- package/src/prompts/index.ts +21 -0
- package/src/prompts/utils/systemPromptBuilder.ts +777 -0
- package/src/scripts/migrate-prefix-index.ts +157 -0
- package/src/services/AgentDefinitionMonitor.ts +701 -0
- package/src/services/ConfigService.ts +723 -0
- package/src/services/CooldownRegistry.ts +199 -0
- package/src/services/LLMOperationsRegistry.ts +424 -0
- package/src/services/OwnerAgentListService.ts +354 -0
- package/src/services/PubkeyService.ts +308 -0
- package/src/services/agents/AgentMetadataStore.ts +72 -0
- package/src/services/agents/AgentResolution.ts +59 -0
- package/src/services/agents/EscalationService.ts +281 -0
- package/src/services/agents/NDKAgentDiscovery.ts +95 -0
- package/src/services/agents/index.ts +7 -0
- package/src/services/agents-md/AgentsMdService.ts +184 -0
- package/src/services/agents-md/SystemReminderInjector.ts +238 -0
- package/src/services/agents-md/index.ts +11 -0
- package/src/services/apns/APNsClient.ts +203 -0
- package/src/services/apns/APNsService.ts +358 -0
- package/src/services/apns/index.ts +11 -0
- package/src/services/apns/types.ts +80 -0
- package/src/services/compression/CompressionService.ts +445 -0
- package/src/services/compression/compression-schema.ts +28 -0
- package/src/services/compression/compression-types.ts +74 -0
- package/src/services/compression/compression-utils.ts +587 -0
- package/src/services/config/types.ts +394 -0
- package/src/services/dispatch/AgentDispatchService.ts +937 -0
- package/src/services/dispatch/AgentRouter.ts +181 -0
- package/src/services/dispatch/DelegationCompletionHandler.ts +232 -0
- package/src/services/embedding/EmbeddingProvider.ts +188 -0
- package/src/services/embedding/index.ts +5 -0
- package/src/services/event-context/EventContextService.ts +108 -0
- package/src/services/event-context/index.ts +2 -0
- package/src/services/heuristics/ContextBuilder.ts +106 -0
- package/src/services/heuristics/HeuristicEngine.ts +200 -0
- package/src/services/heuristics/formatters.ts +58 -0
- package/src/services/heuristics/index.ts +12 -0
- package/src/services/heuristics/rules/index.ts +25 -0
- package/src/services/heuristics/rules/todoBeforeDelegation.ts +69 -0
- package/src/services/heuristics/rules/todoReminderOnToolUse.ts +63 -0
- package/src/services/heuristics/types.ts +144 -0
- package/src/services/image/ImageGenerationService.ts +389 -0
- package/src/services/image/index.ts +12 -0
- package/src/services/intervention/InterventionService.ts +1352 -0
- package/src/services/intervention/index.ts +7 -0
- package/src/services/mcp/MCPManager.ts +683 -0
- package/src/services/mcp/McpNotificationDelivery.ts +139 -0
- package/src/services/mcp/McpSubscriptionService.ts +653 -0
- package/src/services/mcp/mcpInstaller.ts +130 -0
- package/src/services/nip46/Nip46SigningLog.ts +81 -0
- package/src/services/nip46/Nip46SigningService.ts +467 -0
- package/src/services/nip46/index.ts +4 -0
- package/src/services/nudge/NudgeService.ts +224 -0
- package/src/services/nudge/NudgeWhitelistService.ts +382 -0
- package/src/services/nudge/index.ts +5 -0
- package/src/services/nudge/types.ts +83 -0
- package/src/services/projects/ProjectContext.ts +672 -0
- package/src/services/projects/ProjectContextStore.ts +102 -0
- package/src/services/projects/index.ts +6 -0
- package/src/services/prompt-compiler/index.ts +15 -0
- package/src/services/prompt-compiler/prompt-compiler-service.ts +1143 -0
- package/src/services/pubkey-gate/PubkeyGateService.ts +93 -0
- package/src/services/pubkey-gate/index.ts +1 -0
- package/src/services/rag/EmbeddingProviderFactory.ts +292 -0
- package/src/services/rag/LanceDBMaintenanceService.ts +211 -0
- package/src/services/rag/RAGDatabaseService.ts +173 -0
- package/src/services/rag/RAGOperations.ts +682 -0
- package/src/services/rag/RAGService.ts +240 -0
- package/src/services/rag/RagSubscriptionService.ts +618 -0
- package/src/services/rag/rag-utils.ts +174 -0
- package/src/services/ral/PendingDelegationsRegistry.ts +168 -0
- package/src/services/ral/RALRegistry.ts +2782 -0
- package/src/services/ral/index.ts +4 -0
- package/src/services/ral/types.ts +292 -0
- package/src/services/reports/LocalReportStore.ts +380 -0
- package/src/services/reports/ReportEmbeddingService.ts +430 -0
- package/src/services/reports/ReportService.ts +440 -0
- package/src/services/reports/articleUtils.ts +52 -0
- package/src/services/reports/index.ts +7 -0
- package/src/services/scheduling/SchedulerService.ts +1057 -0
- package/src/services/scheduling/errors.ts +14 -0
- package/src/services/scheduling/index.ts +7 -0
- package/src/services/scheduling/utils.ts +77 -0
- package/src/services/search/SearchProviderRegistry.ts +78 -0
- package/src/services/search/UnifiedSearchService.ts +218 -0
- package/src/services/search/index.ts +47 -0
- package/src/services/search/projectFilter.ts +22 -0
- package/src/services/search/providers/ConversationSearchProvider.ts +48 -0
- package/src/services/search/providers/LessonSearchProvider.ts +75 -0
- package/src/services/search/providers/ReportSearchProvider.ts +49 -0
- package/src/services/search/types.ts +144 -0
- package/src/services/skill/SkillService.ts +482 -0
- package/src/services/skill/index.ts +2 -0
- package/src/services/skill/types.ts +70 -0
- package/src/services/status/OperationsStatusService.ts +276 -0
- package/src/services/status/ProjectStatusService.ts +522 -0
- package/src/services/status/index.ts +11 -0
- package/src/services/storage/PrefixKVStore.ts +242 -0
- package/src/services/storage/index.ts +1 -0
- package/src/services/system-reminder/SystemReminderUtils.ts +96 -0
- package/src/services/system-reminder/index.ts +7 -0
- package/src/services/trust-pubkeys/TrustPubkeyService.ts +325 -0
- package/src/services/trust-pubkeys/index.ts +2 -0
- package/src/telemetry/ConversationSpanManager.ts +111 -0
- package/src/telemetry/EventLoopMonitor.ts +206 -0
- package/src/telemetry/LLMSpanRegistry.ts +20 -0
- package/src/telemetry/NostrSpanProcessor.ts +89 -0
- package/src/telemetry/ToolCallSpanProcessor.ts +66 -0
- package/src/telemetry/diagnostics.ts +27 -0
- package/src/telemetry/setup.ts +120 -0
- package/src/tools/implementations/agents_discover.ts +121 -0
- package/src/tools/implementations/agents_hire.ts +127 -0
- package/src/tools/implementations/agents_list.ts +96 -0
- package/src/tools/implementations/agents_publish.ts +611 -0
- package/src/tools/implementations/agents_read.ts +173 -0
- package/src/tools/implementations/agents_write.ts +200 -0
- package/src/tools/implementations/ask.ts +411 -0
- package/src/tools/implementations/change_model.ts +141 -0
- package/src/tools/implementations/conversation_get.ts +661 -0
- package/src/tools/implementations/conversation_list.ts +377 -0
- package/src/tools/implementations/conversation_search.ts +370 -0
- package/src/tools/implementations/delegate.ts +327 -0
- package/src/tools/implementations/delegate_crossproject.ts +209 -0
- package/src/tools/implementations/delegate_followup.ts +300 -0
- package/src/tools/implementations/fs_edit.ts +162 -0
- package/src/tools/implementations/fs_glob.ts +182 -0
- package/src/tools/implementations/fs_grep.ts +513 -0
- package/src/tools/implementations/fs_read.ts +332 -0
- package/src/tools/implementations/fs_write.ts +113 -0
- package/src/tools/implementations/generate_image.ts +259 -0
- package/src/tools/implementations/home_fs.ts +515 -0
- package/src/tools/implementations/kill.ts +651 -0
- package/src/tools/implementations/learn.ts +166 -0
- package/src/tools/implementations/lesson-formatter.ts +38 -0
- package/src/tools/implementations/lesson_delete.ts +164 -0
- package/src/tools/implementations/lesson_get.ts +105 -0
- package/src/tools/implementations/lessons_list.ts +153 -0
- package/src/tools/implementations/mcp_resource_read.ts +161 -0
- package/src/tools/implementations/mcp_subscribe.ts +158 -0
- package/src/tools/implementations/mcp_subscription_stop.ts +85 -0
- package/src/tools/implementations/nostr_fetch.ts +149 -0
- package/src/tools/implementations/nostr_publish_as_user.ts +353 -0
- package/src/tools/implementations/project_list.ts +146 -0
- package/src/tools/implementations/rag_add_documents.ts +573 -0
- package/src/tools/implementations/rag_create_collection.ts +65 -0
- package/src/tools/implementations/rag_delete_collection.ts +68 -0
- package/src/tools/implementations/rag_list_collections.ts +77 -0
- package/src/tools/implementations/rag_query.ts +107 -0
- package/src/tools/implementations/rag_subscription_create.ts +105 -0
- package/src/tools/implementations/rag_subscription_delete.ts +80 -0
- package/src/tools/implementations/rag_subscription_get.ts +123 -0
- package/src/tools/implementations/rag_subscription_list.ts +128 -0
- package/src/tools/implementations/report_delete.ts +79 -0
- package/src/tools/implementations/report_read.ts +160 -0
- package/src/tools/implementations/report_write.ts +278 -0
- package/src/tools/implementations/reports_list.ts +77 -0
- package/src/tools/implementations/schedule_task.ts +104 -0
- package/src/tools/implementations/schedule_task_cancel.ts +62 -0
- package/src/tools/implementations/schedule_task_once.ts +128 -0
- package/src/tools/implementations/schedule_tasks_list.ts +79 -0
- package/src/tools/implementations/search.ts +160 -0
- package/src/tools/implementations/shell.ts +553 -0
- package/src/tools/implementations/todo.ts +260 -0
- package/src/tools/implementations/upload_blob.ts +381 -0
- package/src/tools/implementations/web_fetch.ts +153 -0
- package/src/tools/implementations/web_search.ts +250 -0
- package/src/tools/registry.ts +670 -0
- package/src/tools/types.ts +177 -0
- package/src/tools/utils.ts +256 -0
- package/src/types/event-ids.ts +320 -0
- package/src/types/index.ts +46 -0
- package/src/utils/agentFetcher.ts +107 -0
- package/src/utils/cli-error.ts +29 -0
- package/src/utils/conversation-id.ts +27 -0
- package/src/utils/conversation-utils.ts +1 -0
- package/src/utils/delegation-chain.ts +357 -0
- package/src/utils/error-handler.ts +42 -0
- package/src/utils/git/gitignore.ts +69 -0
- package/src/utils/git/index.ts +2 -0
- package/src/utils/git/initializeGitRepo.ts +204 -0
- package/src/utils/git/worktree.ts +260 -0
- package/src/utils/lessonFormatter.ts +70 -0
- package/src/utils/lessonTrust.ts +24 -0
- package/src/utils/lockfile.ts +123 -0
- package/src/utils/logger.ts +149 -0
- package/src/utils/nostr-entity-parser.ts +365 -0
- package/src/utils/process.ts +49 -0
- package/src/wrapper.ts +262 -0
- package/tsconfig.json +41 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates images using OpenRouter's image-capable models via the multimodal chat pattern.
|
|
5
|
+
* Uses generateText with providerOptions.openrouter.image_config for aspect ratio and size.
|
|
6
|
+
*
|
|
7
|
+
* The generated image is automatically uploaded to Blossom storage and a URL is returned.
|
|
8
|
+
* This avoids returning large base64 payloads that would exceed LLM context limits.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { AISdkTool, ToolExecutionContext } from "@/tools/types";
|
|
12
|
+
import {
|
|
13
|
+
ImageGenerationService,
|
|
14
|
+
OPENROUTER_IMAGE_MODELS,
|
|
15
|
+
ASPECT_RATIOS,
|
|
16
|
+
IMAGE_SIZES,
|
|
17
|
+
} from "@/services/image/ImageGenerationService";
|
|
18
|
+
import { BlossomService } from "@/nostr/BlossomService";
|
|
19
|
+
import { config } from "@/services/ConfigService";
|
|
20
|
+
import { formatAnyError } from "@/lib/error-formatter";
|
|
21
|
+
import { logger } from "@/utils/logger";
|
|
22
|
+
import { tool } from "ai";
|
|
23
|
+
import { z } from "zod";
|
|
24
|
+
|
|
25
|
+
const DEFAULT_BLOSSOM_SERVER = "https://blossom.primal.net";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Load Blossom server URL from config.
|
|
29
|
+
* Falls back to default if config is unavailable.
|
|
30
|
+
*/
|
|
31
|
+
async function loadBlossomServerUrl(): Promise<string> {
|
|
32
|
+
try {
|
|
33
|
+
const tenexConfig = await config.loadTenexConfig(config.getGlobalPath());
|
|
34
|
+
return tenexConfig.blossomServerUrl || DEFAULT_BLOSSOM_SERVER;
|
|
35
|
+
} catch (error) {
|
|
36
|
+
logger.warn("[generate_image] Failed to load Blossom config, using default", {
|
|
37
|
+
error: error instanceof Error ? error.message : String(error),
|
|
38
|
+
});
|
|
39
|
+
return DEFAULT_BLOSSOM_SERVER;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Build valid model IDs from the available models
|
|
44
|
+
const validModelIds = OPENROUTER_IMAGE_MODELS.map((m) => m.value) as [string, ...string[]];
|
|
45
|
+
|
|
46
|
+
const generateImageSchema = z.object({
|
|
47
|
+
prompt: z
|
|
48
|
+
.string()
|
|
49
|
+
.min(1)
|
|
50
|
+
.max(4000)
|
|
51
|
+
.describe(
|
|
52
|
+
"A detailed description of the image to generate. Be specific about subjects, style, " +
|
|
53
|
+
"composition, colors, lighting, and mood. Longer, more detailed prompts often produce better results."
|
|
54
|
+
),
|
|
55
|
+
aspect_ratio: z
|
|
56
|
+
.enum(ASPECT_RATIOS)
|
|
57
|
+
.optional()
|
|
58
|
+
.describe(
|
|
59
|
+
"Aspect ratio for the image. Options: 1:1 (square), 16:9 (landscape), 9:16 (portrait), " +
|
|
60
|
+
"4:3, 3:4, 3:2, 2:3. Default: 1:1"
|
|
61
|
+
),
|
|
62
|
+
image_size: z
|
|
63
|
+
.enum(IMAGE_SIZES)
|
|
64
|
+
.optional()
|
|
65
|
+
.describe(
|
|
66
|
+
"Image resolution. Options: 1K, 2K, 4K. Higher resolution costs more. Default: 2K"
|
|
67
|
+
),
|
|
68
|
+
model: z
|
|
69
|
+
.enum(validModelIds)
|
|
70
|
+
.optional()
|
|
71
|
+
.describe(
|
|
72
|
+
"Override the default model. Options: " +
|
|
73
|
+
OPENROUTER_IMAGE_MODELS.map((m) => `${m.value} (${m.description})`).join(", ")
|
|
74
|
+
),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
type GenerateImageInput = z.infer<typeof generateImageSchema>;
|
|
78
|
+
|
|
79
|
+
interface GenerateImageOutput {
|
|
80
|
+
success: boolean;
|
|
81
|
+
/** URL of the uploaded image on Blossom */
|
|
82
|
+
url: string;
|
|
83
|
+
/** SHA256 hash of the image */
|
|
84
|
+
sha256: string;
|
|
85
|
+
/** Size of the image in bytes */
|
|
86
|
+
size: number;
|
|
87
|
+
/** MIME type of the image */
|
|
88
|
+
mimeType: string;
|
|
89
|
+
/** The prompt that was used */
|
|
90
|
+
prompt: string;
|
|
91
|
+
/** Model used for generation */
|
|
92
|
+
model: string;
|
|
93
|
+
/** Aspect ratio used */
|
|
94
|
+
aspectRatio: string;
|
|
95
|
+
/** Image size used */
|
|
96
|
+
imageSize: string;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Generate an image and upload it to Blossom.
|
|
101
|
+
*
|
|
102
|
+
* This function orchestrates the high-level workflow:
|
|
103
|
+
* 1. Create ImageGenerationService and generate the image
|
|
104
|
+
* 2. Delegate upload to BlossomService
|
|
105
|
+
* 3. Return the result with URL and metadata
|
|
106
|
+
*/
|
|
107
|
+
async function executeGenerateImage(
|
|
108
|
+
input: GenerateImageInput,
|
|
109
|
+
context: ToolExecutionContext
|
|
110
|
+
): Promise<GenerateImageOutput> {
|
|
111
|
+
const { prompt, aspect_ratio, image_size, model } = input;
|
|
112
|
+
|
|
113
|
+
logger.info(`Generating image`, {
|
|
114
|
+
promptPreview: prompt.slice(0, 100) + (prompt.length > 100 ? "..." : ""),
|
|
115
|
+
aspectRatio: aspect_ratio,
|
|
116
|
+
imageSize: image_size,
|
|
117
|
+
model,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Create the image generation service
|
|
121
|
+
const service = await ImageGenerationService.create();
|
|
122
|
+
const effectiveConfig = service.getConfig();
|
|
123
|
+
const effectiveAspectRatio = aspect_ratio || effectiveConfig.defaultAspectRatio || "1:1";
|
|
124
|
+
const effectiveImageSize = image_size || effectiveConfig.defaultImageSize || "2K";
|
|
125
|
+
const effectiveModel = model || effectiveConfig.model;
|
|
126
|
+
|
|
127
|
+
// Generate the image
|
|
128
|
+
const result = await service.generateImage(prompt, {
|
|
129
|
+
aspectRatio: effectiveAspectRatio,
|
|
130
|
+
imageSize: effectiveImageSize,
|
|
131
|
+
model: effectiveModel,
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// Convert base64 to Buffer for upload
|
|
135
|
+
const imageData = Buffer.from(result.base64, "base64");
|
|
136
|
+
|
|
137
|
+
logger.info(`Image generated, uploading to Blossom`, {
|
|
138
|
+
size: imageData.length,
|
|
139
|
+
mimeType: result.mimeType,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Upload to Blossom using the service (delegates NDK usage to nostr layer)
|
|
143
|
+
// Layer 3 (tools) loads config and passes serverUrl to Layer 2 (nostr)
|
|
144
|
+
const blossomServerUrl = await loadBlossomServerUrl();
|
|
145
|
+
const blossomService = new BlossomService(context.agent);
|
|
146
|
+
const uploadResult = await blossomService.upload(imageData, result.mimeType, {
|
|
147
|
+
serverUrl: blossomServerUrl,
|
|
148
|
+
description: `Generated image: ${prompt.slice(0, 100)}`,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
logger.info(`Image uploaded to Blossom`, {
|
|
152
|
+
url: uploadResult.url,
|
|
153
|
+
sha256: uploadResult.sha256,
|
|
154
|
+
size: uploadResult.size,
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
success: true,
|
|
159
|
+
url: uploadResult.url,
|
|
160
|
+
sha256: uploadResult.sha256,
|
|
161
|
+
size: uploadResult.size,
|
|
162
|
+
mimeType: result.mimeType,
|
|
163
|
+
prompt,
|
|
164
|
+
model: result.model,
|
|
165
|
+
aspectRatio: effectiveAspectRatio,
|
|
166
|
+
imageSize: effectiveImageSize,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Map error messages to user-friendly error responses.
|
|
172
|
+
*
|
|
173
|
+
* Error conditions are ordered from most specific to least specific
|
|
174
|
+
* to ensure proper matching.
|
|
175
|
+
*/
|
|
176
|
+
function mapErrorToUserMessage(errorMsg: string, originalError: unknown): Error {
|
|
177
|
+
// Most specific first: OpenRouter API key not configured
|
|
178
|
+
if (errorMsg.includes("OpenRouter API key required")) {
|
|
179
|
+
return new Error(
|
|
180
|
+
"OpenRouter API key not configured. Run 'tenex setup providers' and add your OpenRouter API key.",
|
|
181
|
+
{ cause: originalError }
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Generic API key / authentication issues
|
|
186
|
+
if (errorMsg.includes("API key") || errorMsg.includes("authentication") || errorMsg.includes("apiKey")) {
|
|
187
|
+
return new Error(
|
|
188
|
+
"Image generation is not configured. Run 'tenex setup image' to configure it.",
|
|
189
|
+
{ cause: originalError }
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Content policy violations
|
|
194
|
+
if (errorMsg.includes("content_policy") || errorMsg.includes("safety")) {
|
|
195
|
+
return new Error(
|
|
196
|
+
"Image generation was blocked due to content policy. " +
|
|
197
|
+
"Please revise your prompt to avoid potentially inappropriate content.",
|
|
198
|
+
{ cause: originalError }
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Rate limiting
|
|
203
|
+
if (errorMsg.includes("rate_limit") || errorMsg.includes("quota")) {
|
|
204
|
+
return new Error(
|
|
205
|
+
"Image generation rate limit reached. Please wait a moment and try again.",
|
|
206
|
+
{ cause: originalError }
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Generic fallback
|
|
211
|
+
return new Error(`Image generation failed: ${errorMsg}`, { cause: originalError });
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function createGenerateImageTool(context: ToolExecutionContext): AISdkTool {
|
|
215
|
+
const modelList = OPENROUTER_IMAGE_MODELS.map(
|
|
216
|
+
(m) => `${m.name} (${m.value})`
|
|
217
|
+
).join(", ");
|
|
218
|
+
|
|
219
|
+
const toolInstance = tool({
|
|
220
|
+
description:
|
|
221
|
+
`Generate an image from a text description using OpenRouter's image-capable models. ` +
|
|
222
|
+
`The image is automatically uploaded to Blossom storage and a URL is returned. ` +
|
|
223
|
+
`For best results, provide detailed prompts describing ` +
|
|
224
|
+
`the subject, style, composition, colors, lighting, and mood. ` +
|
|
225
|
+
`Available models: ${modelList}. ` +
|
|
226
|
+
`IMPORTANT: Image generation costs money. Use sparingly and only when the user explicitly requests image generation.`,
|
|
227
|
+
|
|
228
|
+
inputSchema: generateImageSchema,
|
|
229
|
+
|
|
230
|
+
execute: async (input: GenerateImageInput) => {
|
|
231
|
+
try {
|
|
232
|
+
return await executeGenerateImage(input, context);
|
|
233
|
+
} catch (error) {
|
|
234
|
+
const errorMsg = formatAnyError(error);
|
|
235
|
+
logger.error("Image generation failed", { error, prompt: input.prompt?.slice(0, 100) });
|
|
236
|
+
throw mapErrorToUserMessage(errorMsg, error);
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
Object.defineProperty(toolInstance, "getHumanReadableContent", {
|
|
242
|
+
value: ({ prompt, aspect_ratio, image_size, model }: GenerateImageInput) => {
|
|
243
|
+
const parts: string[] = [];
|
|
244
|
+
if (aspect_ratio) parts.push(aspect_ratio);
|
|
245
|
+
if (image_size) parts.push(image_size);
|
|
246
|
+
if (model) {
|
|
247
|
+
const modelInfo = OPENROUTER_IMAGE_MODELS.find((m) => m.value === model);
|
|
248
|
+
parts.push(modelInfo?.name || model);
|
|
249
|
+
}
|
|
250
|
+
const optionsStr = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
251
|
+
const promptPreview = prompt.length > 60 ? prompt.slice(0, 60) + "..." : prompt;
|
|
252
|
+
return `Generating image${optionsStr}: "${promptPreview}"`;
|
|
253
|
+
},
|
|
254
|
+
enumerable: false,
|
|
255
|
+
configurable: true,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
return toolInstance as AISdkTool;
|
|
259
|
+
}
|