@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,121 @@
|
|
|
1
|
+
import type { ToolExecutionContext } from "@/tools/types";
|
|
2
|
+
import { getNDK } from "@/nostr";
|
|
3
|
+
import { NDKAgentDiscovery } from "@/services/agents";
|
|
4
|
+
import type { AISdkTool } from "@/tools/types";
|
|
5
|
+
import { logger } from "@/utils/logger";
|
|
6
|
+
import { tool } from "ai";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const agentsDiscoverSchema = z.object({
|
|
9
|
+
searchText: z.string().nullable().describe("Text to search for in agent name/description/role"),
|
|
10
|
+
limit: z.coerce.number().default(50).describe("Maximum number of agents to return"),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
type AgentsDiscoverInput = z.infer<typeof agentsDiscoverSchema>;
|
|
14
|
+
type AgentsDiscoverOutput = {
|
|
15
|
+
markdown: string;
|
|
16
|
+
agentsFound: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Format discovered agents as markdown
|
|
21
|
+
*/
|
|
22
|
+
function formatAgentsAsMarkdown(
|
|
23
|
+
agents: Array<{
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
role: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
useCriteria?: string;
|
|
29
|
+
authorPubkey: string;
|
|
30
|
+
createdAt?: number;
|
|
31
|
+
}>
|
|
32
|
+
): string {
|
|
33
|
+
if (agents.length === 0) {
|
|
34
|
+
return "## No agents found\n\nNo agents match your search criteria. Try broadening your search or check back later.";
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const lines: string[] = [];
|
|
38
|
+
lines.push("# Agent Discovery Results");
|
|
39
|
+
lines.push(`\nFound **${agents.length}** available agent${agents.length === 1 ? "" : "s"}:\n`);
|
|
40
|
+
|
|
41
|
+
for (const [index, agent] of agents.entries()) {
|
|
42
|
+
lines.push(`## ${index + 1}. ${agent.title}`);
|
|
43
|
+
lines.push(`nostr:${agent.id}`);
|
|
44
|
+
lines.push("");
|
|
45
|
+
|
|
46
|
+
lines.push("---");
|
|
47
|
+
lines.push("");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return lines.join("\n");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Core implementation of the agents_discover functionality
|
|
55
|
+
* Shared between AI SDK and legacy Tool interfaces
|
|
56
|
+
*/
|
|
57
|
+
async function executeAgentsDiscover(input: AgentsDiscoverInput): Promise<AgentsDiscoverOutput> {
|
|
58
|
+
const { searchText, limit = 50 } = input;
|
|
59
|
+
|
|
60
|
+
const ndk = getNDK();
|
|
61
|
+
const discovery = new NDKAgentDiscovery(ndk);
|
|
62
|
+
|
|
63
|
+
// Discover agents with specified filters
|
|
64
|
+
const agents = await discovery.discoverAgents({
|
|
65
|
+
searchText: searchText ?? undefined,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Format results with bech32 encoded IDs
|
|
69
|
+
let results = agents.map((agent) => {
|
|
70
|
+
// Get bech32 encoded ID from the NDKAgentDefinition event
|
|
71
|
+
const bech32Id = agent.encode();
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
id: bech32Id,
|
|
75
|
+
title: agent.title || "Unnamed Agent",
|
|
76
|
+
role: agent.role || "assistant",
|
|
77
|
+
description: agent.description,
|
|
78
|
+
useCriteria: agent.useCriteria,
|
|
79
|
+
authorPubkey: agent.pubkey,
|
|
80
|
+
createdAt: agent.created_at,
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Apply limit if specified
|
|
85
|
+
if (limit && results.length > limit) {
|
|
86
|
+
results = results.slice(0, limit);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
logger.info(`Returning ${results.length} AgentDefinition events after limiting`);
|
|
90
|
+
|
|
91
|
+
// Format as markdown
|
|
92
|
+
const markdown = formatAgentsAsMarkdown(results);
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
markdown,
|
|
96
|
+
agentsFound: results.length,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Create an AI SDK tool for discovering agents
|
|
102
|
+
* This is the primary implementation
|
|
103
|
+
*/
|
|
104
|
+
export function createAgentsDiscoverTool(_context: ToolExecutionContext): AISdkTool {
|
|
105
|
+
return tool({
|
|
106
|
+
description:
|
|
107
|
+
"Discover agent definition events; these are agent definitions that can be useful to be installed in the project. Use this when trying to discover NEW possible agents to add to the project NOT to see the list of current agents in the project.",
|
|
108
|
+
inputSchema: agentsDiscoverSchema,
|
|
109
|
+
execute: async (input: AgentsDiscoverInput) => {
|
|
110
|
+
try {
|
|
111
|
+
return await executeAgentsDiscover(input);
|
|
112
|
+
} catch (error) {
|
|
113
|
+
logger.error("Failed to discover agents", { error });
|
|
114
|
+
throw new Error(
|
|
115
|
+
`Failed to discover agents: ${error instanceof Error ? error.message : String(error)}`,
|
|
116
|
+
{ cause: error }
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
}) as AISdkTool;
|
|
121
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { AISdkTool, ToolExecutionContext } from "@/tools/types";
|
|
2
|
+
import { loadAgentIntoRegistry } from "@/agents/agent-loader";
|
|
3
|
+
import { getNDK } from "@/nostr";
|
|
4
|
+
import { getProjectContext } from "@/services/projects";
|
|
5
|
+
import { logger } from "@/utils/logger";
|
|
6
|
+
import { normalizeNostrIdentifier } from "@/utils/nostr-entity-parser";
|
|
7
|
+
import { filterAndRelaySetFromBech32 } from "@nostr-dev-kit/ndk";
|
|
8
|
+
import { tool } from "ai";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
const agentsHireSchema = z.object({
|
|
11
|
+
eventId: z.string().describe("The event ID of the Agent Definition Event to hire"),
|
|
12
|
+
slug: z
|
|
13
|
+
.string()
|
|
14
|
+
.nullable()
|
|
15
|
+
.describe("Optional custom slug for the agent (defaults to normalized name)"),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
type AgentsHireInput = z.infer<typeof agentsHireSchema>;
|
|
19
|
+
type AgentsHireOutput = {
|
|
20
|
+
success: boolean;
|
|
21
|
+
message?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
agent?: {
|
|
24
|
+
slug: string;
|
|
25
|
+
name: string;
|
|
26
|
+
role?: string;
|
|
27
|
+
pubkey: string;
|
|
28
|
+
eventId?: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Core implementation of the agents_hire functionality
|
|
34
|
+
* Shared between AI SDK and legacy Tool interfaces
|
|
35
|
+
*/
|
|
36
|
+
async function executeAgentsHire(
|
|
37
|
+
input: AgentsHireInput,
|
|
38
|
+
_context: ToolExecutionContext
|
|
39
|
+
): Promise<AgentsHireOutput> {
|
|
40
|
+
const { eventId: rawEventId, slug } = input;
|
|
41
|
+
|
|
42
|
+
if (!rawEventId) {
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
error: "Event ID is required to hire an agent",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Normalize the event ID using our utility
|
|
50
|
+
const eventId = normalizeNostrIdentifier(rawEventId);
|
|
51
|
+
if (!eventId) {
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
error: `Invalid event ID format: "${rawEventId}". Please provide a valid Nostr event ID in bech32 format (e.g., nevent1...) or hex format.`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Get NDK instance for validation and fetching
|
|
59
|
+
const ndk = getNDK();
|
|
60
|
+
|
|
61
|
+
// Additional validation for bech32 format
|
|
62
|
+
if (eventId.startsWith("nevent1") || eventId.startsWith("note1")) {
|
|
63
|
+
try {
|
|
64
|
+
filterAndRelaySetFromBech32(eventId, ndk);
|
|
65
|
+
} catch {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
error: `Invalid event ID format: "${eventId}". Please provide a valid Nostr event ID.`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Get project context
|
|
74
|
+
const projectContext = getProjectContext();
|
|
75
|
+
|
|
76
|
+
// Load the agent into the registry (handles storage, Nostr fetch, project association)
|
|
77
|
+
const agent = await loadAgentIntoRegistry(
|
|
78
|
+
eventId,
|
|
79
|
+
projectContext.agentRegistry,
|
|
80
|
+
slug || undefined
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
// Note: We don't update the project event here because:
|
|
84
|
+
// 1. The project event is signed by the user, not the agents
|
|
85
|
+
// 2. The backend doesn't have the user's private key
|
|
86
|
+
// 3. The agent is already installed in ~/.tenex/agents/<pubkey>.json
|
|
87
|
+
// 4. The user can update their project event from the client if needed
|
|
88
|
+
|
|
89
|
+
logger.info(`Successfully hired agent "${agent.name}" (${agent.eventId})`);
|
|
90
|
+
logger.info(` Slug: ${agent.slug}`);
|
|
91
|
+
logger.info(` Pubkey: ${agent.pubkey}`);
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
success: true,
|
|
95
|
+
message: `Successfully hired agent "${agent.name}"`,
|
|
96
|
+
agent: {
|
|
97
|
+
slug: agent.slug,
|
|
98
|
+
name: agent.name,
|
|
99
|
+
role: agent.role,
|
|
100
|
+
pubkey: agent.pubkey,
|
|
101
|
+
eventId: agent.eventId,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Create an AI SDK tool for hiring agents
|
|
108
|
+
* This is the primary implementation
|
|
109
|
+
*/
|
|
110
|
+
export function createAgentsHireTool(context: ToolExecutionContext): AISdkTool {
|
|
111
|
+
return tool({
|
|
112
|
+
description:
|
|
113
|
+
"Hire (add) a new agent from the Nostr network to the current project using its event ID",
|
|
114
|
+
inputSchema: agentsHireSchema,
|
|
115
|
+
execute: async (input: AgentsHireInput) => {
|
|
116
|
+
try {
|
|
117
|
+
return await executeAgentsHire(input, context);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
logger.error("Failed to hire agent", { error });
|
|
120
|
+
throw new Error(
|
|
121
|
+
`Failed to hire agent: ${error instanceof Error ? error.message : String(error)}`,
|
|
122
|
+
{ cause: error }
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
}) as AISdkTool;
|
|
127
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { ToolExecutionContext } from "@/tools/types";
|
|
2
|
+
import { getProjectContext } from "@/services/projects";
|
|
3
|
+
import type { AISdkTool } from "@/tools/types";
|
|
4
|
+
import { logger } from "@/utils/logger";
|
|
5
|
+
import { tool } from "ai";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
const agentsListSchema = z.object({
|
|
8
|
+
verbose: z
|
|
9
|
+
.boolean()
|
|
10
|
+
.nullable()
|
|
11
|
+
.describe("Whether to include full instructions and details (default: false)"),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
type AgentsListInput = z.infer<typeof agentsListSchema>;
|
|
15
|
+
|
|
16
|
+
type AgentInfo = {
|
|
17
|
+
slug: string;
|
|
18
|
+
name: string;
|
|
19
|
+
role: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
instructions?: string;
|
|
22
|
+
useCriteria?: string;
|
|
23
|
+
tools?: string[];
|
|
24
|
+
eventId?: string;
|
|
25
|
+
pubkey: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
type AgentsListOutput = {
|
|
29
|
+
success: boolean;
|
|
30
|
+
message?: string;
|
|
31
|
+
error?: string;
|
|
32
|
+
agents: AgentInfo[];
|
|
33
|
+
summary?: {
|
|
34
|
+
total: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Core implementation of the agents_list functionality
|
|
40
|
+
*/
|
|
41
|
+
async function executeAgentsList(input: AgentsListInput): Promise<AgentsListOutput> {
|
|
42
|
+
const { verbose = false } = input;
|
|
43
|
+
|
|
44
|
+
// Get agents from project context
|
|
45
|
+
const projectCtx = getProjectContext();
|
|
46
|
+
const agentInstances = projectCtx.agentRegistry.getAllAgents();
|
|
47
|
+
|
|
48
|
+
const agents: AgentInfo[] = agentInstances.map((agent) => ({
|
|
49
|
+
slug: agent.slug,
|
|
50
|
+
name: agent.name,
|
|
51
|
+
role: agent.role,
|
|
52
|
+
description: agent.description,
|
|
53
|
+
instructions: verbose ? agent.instructions : undefined,
|
|
54
|
+
useCriteria: agent.useCriteria,
|
|
55
|
+
tools: agent.tools,
|
|
56
|
+
eventId: agent.eventId,
|
|
57
|
+
pubkey: agent.pubkey,
|
|
58
|
+
}));
|
|
59
|
+
|
|
60
|
+
// Sort agents by name
|
|
61
|
+
agents.sort((a, b) => a.name.localeCompare(b.name));
|
|
62
|
+
|
|
63
|
+
logger.info(`Listed ${agents.length} agents`);
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
success: true,
|
|
67
|
+
message: `Found ${agents.length} agents`,
|
|
68
|
+
agents,
|
|
69
|
+
summary: {
|
|
70
|
+
total: agents.length,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Create an AI SDK tool for listing agents
|
|
77
|
+
* This is the primary implementation
|
|
78
|
+
*/
|
|
79
|
+
export function createAgentsListTool(_context: ToolExecutionContext): AISdkTool {
|
|
80
|
+
return tool({
|
|
81
|
+
description:
|
|
82
|
+
"List all available agents in the project, including their system prompts and configurations",
|
|
83
|
+
inputSchema: agentsListSchema,
|
|
84
|
+
execute: async (input: AgentsListInput) => {
|
|
85
|
+
try {
|
|
86
|
+
return await executeAgentsList(input);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
logger.error("Failed to list agents", { error });
|
|
89
|
+
throw new Error(
|
|
90
|
+
`Failed to list agents: ${error instanceof Error ? error.message : String(error)}`,
|
|
91
|
+
{ cause: error }
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
}) as AISdkTool;
|
|
96
|
+
}
|