@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,150 @@
|
|
|
1
|
+
import type { Hexpubkey } from "@nostr-dev-kit/ndk";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Branded type for Project IDs
|
|
5
|
+
* Format: "31933:authorPubkey:dTag"
|
|
6
|
+
*
|
|
7
|
+
* Using branded types provides compile-time safety to prevent
|
|
8
|
+
* mixing up regular strings with project IDs.
|
|
9
|
+
*/
|
|
10
|
+
export type ProjectId = string & { __brand: "ProjectId" };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Event classification for daemon routing decisions
|
|
14
|
+
*/
|
|
15
|
+
export type EventClassification =
|
|
16
|
+
| "never_route" // Events that should never be routed (status, streaming, etc.)
|
|
17
|
+
| "project" // Project creation/update events (kind 31933)
|
|
18
|
+
| "lesson" // Agent lesson events (kind 4129)
|
|
19
|
+
| "conversation" // Reply and thread events
|
|
20
|
+
| "unknown"; // Unclassified events
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Routing decision for an event
|
|
24
|
+
* This is a discriminated union for type-safe routing handling
|
|
25
|
+
*/
|
|
26
|
+
export type RoutingDecision =
|
|
27
|
+
| {
|
|
28
|
+
type: "route_to_project";
|
|
29
|
+
projectId: ProjectId;
|
|
30
|
+
method: "a_tag" | "p_tag_agent";
|
|
31
|
+
matchedTags: string[];
|
|
32
|
+
}
|
|
33
|
+
| {
|
|
34
|
+
type: "dropped";
|
|
35
|
+
reason: string;
|
|
36
|
+
}
|
|
37
|
+
| {
|
|
38
|
+
type: "lesson_hydration";
|
|
39
|
+
targetProjects: ProjectId[];
|
|
40
|
+
agentDefinitionId: string;
|
|
41
|
+
}
|
|
42
|
+
| {
|
|
43
|
+
type: "project_event";
|
|
44
|
+
projectId: ProjectId;
|
|
45
|
+
isUpdate: boolean;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Runtime action performed when routing an event
|
|
50
|
+
*/
|
|
51
|
+
export type RuntimeAction = "existing" | "started" | "crashed";
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Routing context containing all data needed for routing decisions
|
|
55
|
+
*/
|
|
56
|
+
export interface RoutingContext {
|
|
57
|
+
/** Known project IDs mapped to their NDKProject instances */
|
|
58
|
+
knownProjects: Map<ProjectId, unknown>; // Using unknown to avoid circular deps
|
|
59
|
+
/** Map of agent pubkeys to their project IDs */
|
|
60
|
+
agentPubkeyToProjects: Map<Hexpubkey, Set<ProjectId>>;
|
|
61
|
+
/** Whitelisted user pubkeys */
|
|
62
|
+
whitelistedPubkeys: Hexpubkey[];
|
|
63
|
+
/** Currently active runtime project IDs */
|
|
64
|
+
activeProjectIds: Set<ProjectId>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Event routing result with telemetry metadata
|
|
69
|
+
*/
|
|
70
|
+
export interface EventRoutingResult {
|
|
71
|
+
decision: RoutingDecision;
|
|
72
|
+
timestamp: number;
|
|
73
|
+
eventId: string;
|
|
74
|
+
eventKind: number | undefined;
|
|
75
|
+
processingTimeMs?: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Runtime status for monitoring
|
|
80
|
+
*/
|
|
81
|
+
export interface RuntimeStatus {
|
|
82
|
+
projectId: ProjectId;
|
|
83
|
+
isRunning: boolean;
|
|
84
|
+
title: string;
|
|
85
|
+
startTime: Date | null;
|
|
86
|
+
lastEventTime: Date | null;
|
|
87
|
+
eventCount: number;
|
|
88
|
+
agentCount: number;
|
|
89
|
+
hasError?: boolean;
|
|
90
|
+
errorMessage?: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Daemon status for monitoring
|
|
95
|
+
*/
|
|
96
|
+
export interface DaemonStatus {
|
|
97
|
+
running: boolean;
|
|
98
|
+
knownProjects: number;
|
|
99
|
+
activeProjects: number;
|
|
100
|
+
startingProjects: number;
|
|
101
|
+
totalAgents: number;
|
|
102
|
+
uptime: number;
|
|
103
|
+
memoryUsage: NodeJS.MemoryUsage;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Subscription state for filter building
|
|
108
|
+
*/
|
|
109
|
+
export interface SubscriptionState {
|
|
110
|
+
whitelistedPubkeys: Set<Hexpubkey>;
|
|
111
|
+
knownProjects: Set<ProjectId>;
|
|
112
|
+
agentPubkeys: Set<Hexpubkey>;
|
|
113
|
+
agentDefinitionIds: Set<string>;
|
|
114
|
+
lastUpdate: Date;
|
|
115
|
+
restartPending: boolean;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Agent index entry for routing
|
|
120
|
+
*/
|
|
121
|
+
export interface AgentIndexEntry {
|
|
122
|
+
pubkey: Hexpubkey;
|
|
123
|
+
projectId: ProjectId;
|
|
124
|
+
name: string;
|
|
125
|
+
slug: string;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Event processing error types
|
|
130
|
+
*/
|
|
131
|
+
export enum EventProcessingError {
|
|
132
|
+
UnknownProject = "UNKNOWN_PROJECT",
|
|
133
|
+
NoRoutingMatch = "NO_ROUTING_MATCH",
|
|
134
|
+
RuntimeCrash = "RUNTIME_CRASH",
|
|
135
|
+
RuntimeStartupFailed = "RUNTIME_STARTUP_FAILED",
|
|
136
|
+
InvalidEvent = "INVALID_EVENT",
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Lifecycle event types for telemetry
|
|
141
|
+
*/
|
|
142
|
+
export enum LifecycleEvent {
|
|
143
|
+
DaemonStart = "daemon.start",
|
|
144
|
+
DaemonStop = "daemon.stop",
|
|
145
|
+
RuntimeStart = "runtime.start",
|
|
146
|
+
RuntimeStop = "runtime.stop",
|
|
147
|
+
RuntimeCrash = "runtime.crash",
|
|
148
|
+
SubscriptionRestart = "subscription.restart",
|
|
149
|
+
}
|
|
150
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { NDKEvent } from "@nostr-dev-kit/ndk";
|
|
2
|
+
import type { EventRoutingLogger } from "@/logging/EventRoutingLogger";
|
|
3
|
+
import type { RoutingDecision } from "@/daemon/types";
|
|
4
|
+
import { logger } from "@/utils/logger";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Consolidated routing logging utilities to reduce verbosity
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export function logRoutingDecision(
|
|
11
|
+
routingLogger: EventRoutingLogger,
|
|
12
|
+
event: NDKEvent,
|
|
13
|
+
routingDecision: RoutingDecision,
|
|
14
|
+
targetProjectId: string | null,
|
|
15
|
+
routingMethod: "a_tag" | "p_tag_agent" | "none" = "none",
|
|
16
|
+
matchedTags: string[] = [],
|
|
17
|
+
reason?: string
|
|
18
|
+
): Promise<void> {
|
|
19
|
+
// Convert complex RoutingDecision to simple string type for logger
|
|
20
|
+
const loggerDecision = routingDecision.type === "route_to_project" ? "routed" : routingDecision.type;
|
|
21
|
+
|
|
22
|
+
return routingLogger.logRoutingDecision({
|
|
23
|
+
event,
|
|
24
|
+
routingDecision: loggerDecision as "routed" | "dropped" | "project_event",
|
|
25
|
+
targetProjectId,
|
|
26
|
+
routingMethod,
|
|
27
|
+
matchedTags,
|
|
28
|
+
reason,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function logDropped(
|
|
33
|
+
routingLogger: EventRoutingLogger,
|
|
34
|
+
event: NDKEvent,
|
|
35
|
+
reason: string
|
|
36
|
+
): Promise<void> {
|
|
37
|
+
logger.debug(`Event dropped: ${reason}`, {
|
|
38
|
+
eventId: event.id?.slice(0, 8),
|
|
39
|
+
eventKind: event.kind,
|
|
40
|
+
reason,
|
|
41
|
+
});
|
|
42
|
+
const routingDecision: RoutingDecision = {
|
|
43
|
+
type: "dropped",
|
|
44
|
+
reason,
|
|
45
|
+
};
|
|
46
|
+
return logRoutingDecision(routingLogger, event, routingDecision, null, "none", [], reason);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function logRouted(
|
|
50
|
+
routingLogger: EventRoutingLogger,
|
|
51
|
+
event: NDKEvent,
|
|
52
|
+
projectId: string,
|
|
53
|
+
method: "a_tag" | "p_tag_agent",
|
|
54
|
+
matchedTags: string[]
|
|
55
|
+
): Promise<void> {
|
|
56
|
+
logger.debug("Routing event to project", {
|
|
57
|
+
eventId: event.id?.slice(0, 8),
|
|
58
|
+
projectId: projectId.slice(0, 16),
|
|
59
|
+
method,
|
|
60
|
+
});
|
|
61
|
+
const routingDecision: RoutingDecision = {
|
|
62
|
+
type: "route_to_project",
|
|
63
|
+
projectId: projectId as import("@/daemon/types").ProjectId,
|
|
64
|
+
method,
|
|
65
|
+
matchedTags,
|
|
66
|
+
};
|
|
67
|
+
return logRoutingDecision(
|
|
68
|
+
routingLogger,
|
|
69
|
+
event,
|
|
70
|
+
routingDecision,
|
|
71
|
+
projectId,
|
|
72
|
+
method,
|
|
73
|
+
matchedTags,
|
|
74
|
+
`Routed via ${method}`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import type { NDKEvent } from "@nostr-dev-kit/ndk";
|
|
2
|
+
import {
|
|
3
|
+
ROOT_CONTEXT,
|
|
4
|
+
SpanStatusCode,
|
|
5
|
+
propagation,
|
|
6
|
+
trace,
|
|
7
|
+
TraceFlags,
|
|
8
|
+
type Context,
|
|
9
|
+
type Span,
|
|
10
|
+
type SpanContext,
|
|
11
|
+
} from "@opentelemetry/api";
|
|
12
|
+
import { shortenConversationId } from "@/utils/conversation-id";
|
|
13
|
+
import { AgentEventDecoder } from "@/nostr/AgentEventDecoder";
|
|
14
|
+
import { TagExtractor } from "@/nostr/TagExtractor";
|
|
15
|
+
import { getConversationSpanManager } from "@/telemetry/ConversationSpanManager";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Convert a Nostr hex ID to OpenTelemetry traceID (32 hex chars)
|
|
19
|
+
* Uses shortened 12-char conversation ID and pads to 32 chars for OTEL format.
|
|
20
|
+
* This makes Jaeger trace URLs readable: /trace/83f83677f9c7 instead of /trace/83f83677f9c7211e1dcbcbf934e3884f
|
|
21
|
+
*/
|
|
22
|
+
function nostrIdToTraceId(nostrId: string): string {
|
|
23
|
+
// Use shortened 12-char ID (consistent with span attributes)
|
|
24
|
+
const shortId = shortenConversationId(nostrId);
|
|
25
|
+
// Pad to 32 chars with zeros (OTEL requirement)
|
|
26
|
+
return shortId.padEnd(32, "0");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Convert a Nostr hex ID to OpenTelemetry spanID (16 hex chars)
|
|
31
|
+
*/
|
|
32
|
+
function nostrIdToSpanId(nostrId: string): string {
|
|
33
|
+
return nostrId.substring(0, 16);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Create a trace context from Nostr event threading.
|
|
38
|
+
*
|
|
39
|
+
* This derives traceID from the conversation root (E tag) and parentSpanId
|
|
40
|
+
* from the reply-to event (e tag), enabling proper trace hierarchies based
|
|
41
|
+
* on Nostr's natural threading model.
|
|
42
|
+
*/
|
|
43
|
+
function createContextFromNostrEvent(event: NDKEvent): {
|
|
44
|
+
context: typeof ROOT_CONTEXT;
|
|
45
|
+
parentSpanId: string | undefined;
|
|
46
|
+
traceId: string;
|
|
47
|
+
} {
|
|
48
|
+
// 1. Determine conversationId (becomes traceID)
|
|
49
|
+
// For root events (no e tag), use the event's own ID as conversation root
|
|
50
|
+
const conversationId = AgentEventDecoder.getReplyTarget(event) || event.id;
|
|
51
|
+
if (!conversationId) {
|
|
52
|
+
return { context: ROOT_CONTEXT, parentSpanId: undefined, traceId: "" };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const traceId = nostrIdToTraceId(conversationId);
|
|
56
|
+
|
|
57
|
+
// 2. Determine parent event ID from e-tag (the event this is replying to)
|
|
58
|
+
const parentEventId = TagExtractor.getFirstETag(event);
|
|
59
|
+
const parentSpanId = parentEventId ? nostrIdToSpanId(parentEventId) : undefined;
|
|
60
|
+
|
|
61
|
+
// 3. Create span context - if we have a parent, use its spanId; otherwise this is root
|
|
62
|
+
const spanContext: SpanContext = {
|
|
63
|
+
traceId,
|
|
64
|
+
// Use parent's span ID if this is a reply, otherwise use conversation root as the span
|
|
65
|
+
spanId: parentSpanId || nostrIdToSpanId(conversationId),
|
|
66
|
+
traceFlags: TraceFlags.SAMPLED,
|
|
67
|
+
isRemote: true,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// 4. Create context with this span context as parent
|
|
71
|
+
const parentContext = trace.setSpanContext(ROOT_CONTEXT, spanContext);
|
|
72
|
+
|
|
73
|
+
return { context: parentContext, parentSpanId, traceId };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Create a telemetry span for event processing with conversation-aware trace context.
|
|
78
|
+
*
|
|
79
|
+
* This function derives OpenTelemetry trace/span IDs from Nostr event threading:
|
|
80
|
+
* - traceID = first 32 chars of conversation root ID (all messages in a conversation share this)
|
|
81
|
+
* - parentSpanId = first 16 chars of reply-to event ID (creates parent-child hierarchy)
|
|
82
|
+
* - spanID = first 16 chars of this event's ID (unique per event)
|
|
83
|
+
*
|
|
84
|
+
* This enables viewing entire conversations as single traces in Jaeger with proper
|
|
85
|
+
* hierarchical relationships based on Nostr's e-tag threading.
|
|
86
|
+
*/
|
|
87
|
+
export function createEventSpan(event: NDKEvent): Span {
|
|
88
|
+
// First check for explicit trace_context tag (backwards compat with delegations)
|
|
89
|
+
const traceContextTag = event.tags.find((t) => t[0] === "trace_context");
|
|
90
|
+
|
|
91
|
+
let conversationId = AgentEventDecoder.getReplyTarget(event);
|
|
92
|
+
let derivedTraceId: string | undefined;
|
|
93
|
+
|
|
94
|
+
let parentContext: Context;
|
|
95
|
+
if (traceContextTag) {
|
|
96
|
+
// Use explicit W3C trace context if provided (delegation events)
|
|
97
|
+
const carrier = { traceparent: traceContextTag[1] };
|
|
98
|
+
parentContext = propagation.extract(ROOT_CONTEXT, carrier);
|
|
99
|
+
} else {
|
|
100
|
+
// Derive trace context from Nostr event threading
|
|
101
|
+
const derived = createContextFromNostrEvent(event);
|
|
102
|
+
parentContext = derived.context;
|
|
103
|
+
derivedTraceId = derived.traceId;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!conversationId && event.id) {
|
|
107
|
+
conversationId = event.id;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Get reply-to event for attribute logging
|
|
111
|
+
const replyToEventId = TagExtractor.getFirstETag(event);
|
|
112
|
+
|
|
113
|
+
// Create span with conversation-aware context
|
|
114
|
+
const span = trace.getTracer("tenex.daemon").startSpan(
|
|
115
|
+
"tenex.event.process",
|
|
116
|
+
{
|
|
117
|
+
attributes: {
|
|
118
|
+
"event.id": event.id,
|
|
119
|
+
"event.kind": event.kind || 0,
|
|
120
|
+
"event.pubkey": event.pubkey,
|
|
121
|
+
"event.created_at": event.created_at || 0,
|
|
122
|
+
// Truncate content to avoid huge spans
|
|
123
|
+
"event.content": event.content.substring(0, 500),
|
|
124
|
+
"event.content_length": event.content.length,
|
|
125
|
+
"event.tag_count": event.tags.length,
|
|
126
|
+
"event.has_trace_context": !!traceContextTag,
|
|
127
|
+
"event.reply_to": replyToEventId || "",
|
|
128
|
+
"conversation.id": conversationId ? shortenConversationId(conversationId) : "unknown",
|
|
129
|
+
"conversation.is_root": !AgentEventDecoder.getReplyTarget(event),
|
|
130
|
+
"trace.derived_from_nostr": !traceContextTag && !!derivedTraceId,
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
parentContext
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
// Track message sequence
|
|
137
|
+
if (conversationId) {
|
|
138
|
+
getConversationSpanManager().incrementMessageCount(conversationId, span);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return span;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* End span with success status
|
|
146
|
+
*/
|
|
147
|
+
export function endSpanSuccess(span: Span): void {
|
|
148
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
149
|
+
span.end();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* End span with error status
|
|
154
|
+
*/
|
|
155
|
+
export function endSpanError(span: Span, error: unknown): void {
|
|
156
|
+
span.recordException(error instanceof Error ? error : new Error(String(error)));
|
|
157
|
+
span.setStatus({
|
|
158
|
+
code: SpanStatusCode.ERROR,
|
|
159
|
+
message: error instanceof Error ? error.message : String(error),
|
|
160
|
+
});
|
|
161
|
+
span.end();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Add routing decision event to span
|
|
166
|
+
*/
|
|
167
|
+
export function addRoutingEvent(
|
|
168
|
+
span: Span,
|
|
169
|
+
decision: string,
|
|
170
|
+
details: Record<string, unknown>
|
|
171
|
+
): void {
|
|
172
|
+
span.addEvent("routing_decision", { decision, ...details });
|
|
173
|
+
}
|