@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,173 @@
|
|
|
1
|
+
import type { AISdkTool, ToolExecutionContext } from "@/tools/types";
|
|
2
|
+
import type { EffectiveInstructionsCacheEntry } from "@/services/prompt-compiler";
|
|
3
|
+
import { PromptCompilerService } from "@/services/prompt-compiler";
|
|
4
|
+
import { getProjectContext } from "@/services/projects";
|
|
5
|
+
import { ReportService } from "@/services/reports";
|
|
6
|
+
import { logger } from "@/utils/logger";
|
|
7
|
+
import * as fs from "node:fs/promises";
|
|
8
|
+
import { tool } from "ai";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
// Define the input schema
|
|
12
|
+
const agentsReadSchema = z.object({
|
|
13
|
+
slug: z.string().describe("The slug identifier of the agent to read"),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
type AgentsReadInput = z.infer<typeof agentsReadSchema>;
|
|
17
|
+
|
|
18
|
+
// Define the report shape returned in the response
|
|
19
|
+
interface MemorizedReport {
|
|
20
|
+
slug: string;
|
|
21
|
+
title?: string;
|
|
22
|
+
content?: string;
|
|
23
|
+
publishedAt?: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Define the output type — all fields are always present for a consistent response contract
|
|
27
|
+
interface AgentsReadOutput {
|
|
28
|
+
success: boolean;
|
|
29
|
+
message?: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
agent?: {
|
|
32
|
+
slug: string;
|
|
33
|
+
name: string;
|
|
34
|
+
role: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
instructions?: string;
|
|
37
|
+
compiledInstructions: string | null;
|
|
38
|
+
memorizedReports: MemorizedReport[];
|
|
39
|
+
useCriteria?: string;
|
|
40
|
+
llmConfig?: string;
|
|
41
|
+
tools?: string[];
|
|
42
|
+
eventId?: string;
|
|
43
|
+
pubkey: string;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Read compiled (effective) instructions from the PromptCompilerService disk cache.
|
|
49
|
+
* Uses the shared static helper from PromptCompilerService for the cache path.
|
|
50
|
+
*
|
|
51
|
+
* @returns The compiled instructions string, or null if no cache exists
|
|
52
|
+
*/
|
|
53
|
+
async function readCompiledInstructions(agentPubkey: string): Promise<string | null> {
|
|
54
|
+
try {
|
|
55
|
+
const cachePath = PromptCompilerService.getCachePathForAgent(agentPubkey);
|
|
56
|
+
const data = await fs.readFile(cachePath, "utf-8");
|
|
57
|
+
const entry = JSON.parse(data) as EffectiveInstructionsCacheEntry;
|
|
58
|
+
return entry.effectiveAgentInstructions;
|
|
59
|
+
} catch {
|
|
60
|
+
// No cache file or invalid JSON — compiled instructions not available
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Read memorized reports for an agent from the ReportService cache.
|
|
67
|
+
* Returns team reports first, then agent-specific reports (deduped by slug).
|
|
68
|
+
* Each report includes publishedAt for chronological ordering by consumers.
|
|
69
|
+
*
|
|
70
|
+
* @returns Array of memorized report summaries, or empty array
|
|
71
|
+
*/
|
|
72
|
+
function readMemorizedReports(agentPubkey: string): MemorizedReport[] {
|
|
73
|
+
try {
|
|
74
|
+
const reportService = new ReportService();
|
|
75
|
+
const agentReports = reportService.getMemorizedReportsForAgent(agentPubkey);
|
|
76
|
+
const teamReports = reportService.getTeamMemorizedReports();
|
|
77
|
+
|
|
78
|
+
// Deduplicate: team reports take precedence over agent reports with the same slug
|
|
79
|
+
const teamSlugs = new Set(teamReports.map(r => r.slug));
|
|
80
|
+
const combined = [
|
|
81
|
+
...teamReports,
|
|
82
|
+
...agentReports.filter(r => !teamSlugs.has(r.slug)),
|
|
83
|
+
];
|
|
84
|
+
|
|
85
|
+
return combined
|
|
86
|
+
.filter(r => !r.isDeleted)
|
|
87
|
+
.map(r => ({
|
|
88
|
+
slug: r.slug,
|
|
89
|
+
title: r.title,
|
|
90
|
+
content: r.content,
|
|
91
|
+
publishedAt: r.publishedAt,
|
|
92
|
+
}));
|
|
93
|
+
} catch {
|
|
94
|
+
// ReportService may fail if no project context — return empty
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Core implementation of reading agents.
|
|
101
|
+
* Returns both the base agent definition and compiled runtime data when available.
|
|
102
|
+
*/
|
|
103
|
+
async function executeAgentsRead(
|
|
104
|
+
input: AgentsReadInput,
|
|
105
|
+
_context: ToolExecutionContext
|
|
106
|
+
): Promise<AgentsReadOutput> {
|
|
107
|
+
const { slug } = input;
|
|
108
|
+
|
|
109
|
+
if (!slug) {
|
|
110
|
+
throw new Error("Agent slug is required");
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Get agent from project context
|
|
114
|
+
const projectCtx = getProjectContext();
|
|
115
|
+
const agent = projectCtx.getAgent(slug);
|
|
116
|
+
|
|
117
|
+
if (!agent) {
|
|
118
|
+
throw new Error(`Agent with slug "${slug}" not found in current project`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Fetch compiled instructions from disk cache (non-blocking, best-effort)
|
|
122
|
+
const compiledInstructions = await readCompiledInstructions(agent.pubkey);
|
|
123
|
+
|
|
124
|
+
// Fetch memorized reports from in-memory cache (synchronous, best-effort)
|
|
125
|
+
const memorizedReports = readMemorizedReports(agent.pubkey);
|
|
126
|
+
|
|
127
|
+
logger.info(`Successfully read agent definition for "${agent.name}" (${slug})`, {
|
|
128
|
+
hasCompiledInstructions: compiledInstructions !== null,
|
|
129
|
+
memorizedReportsCount: memorizedReports.length,
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
success: true,
|
|
134
|
+
message: `Successfully read agent definition for "${agent.name}"`,
|
|
135
|
+
agent: {
|
|
136
|
+
slug: agent.slug,
|
|
137
|
+
name: agent.name,
|
|
138
|
+
role: agent.role,
|
|
139
|
+
description: agent.description,
|
|
140
|
+
instructions: agent.instructions,
|
|
141
|
+
compiledInstructions,
|
|
142
|
+
memorizedReports,
|
|
143
|
+
useCriteria: agent.useCriteria,
|
|
144
|
+
llmConfig: agent.llmConfig,
|
|
145
|
+
tools: agent.tools,
|
|
146
|
+
eventId: agent.eventId,
|
|
147
|
+
pubkey: agent.pubkey,
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Create an AI SDK tool for reading agents
|
|
154
|
+
* This is the primary implementation
|
|
155
|
+
*/
|
|
156
|
+
export function createAgentsReadTool(context: ToolExecutionContext): AISdkTool {
|
|
157
|
+
return tool({
|
|
158
|
+
description:
|
|
159
|
+
"Read a local agent definition, including base instructions and compiled runtime instructions when available",
|
|
160
|
+
inputSchema: agentsReadSchema,
|
|
161
|
+
execute: async (input: AgentsReadInput) => {
|
|
162
|
+
try {
|
|
163
|
+
return await executeAgentsRead(input, context);
|
|
164
|
+
} catch (error) {
|
|
165
|
+
logger.error("Failed to read agent definition", { error });
|
|
166
|
+
throw new Error(
|
|
167
|
+
`Failed to read agent definition: ${error instanceof Error ? error.message : String(error)}`,
|
|
168
|
+
{ cause: error }
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
}) as AISdkTool;
|
|
173
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { agentStorage, createStoredAgent } from "@/agents/AgentStorage";
|
|
2
|
+
import { createAgentInstance } from "@/agents/agent-loader";
|
|
3
|
+
import { CORE_AGENT_TOOLS, DELEGATE_TOOLS } from "@/agents/constants";
|
|
4
|
+
import type { AISdkTool, ToolExecutionContext } from "@/tools/types";
|
|
5
|
+
import { DEFAULT_AGENT_LLM_CONFIG } from "@/llm/constants";
|
|
6
|
+
import { getProjectContext } from "@/services/projects";
|
|
7
|
+
import { logger } from "@/utils/logger";
|
|
8
|
+
import { NDKPrivateKeySigner } from "@nostr-dev-kit/ndk";
|
|
9
|
+
import { tool } from "ai";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
// Define the input schema
|
|
12
|
+
const agentsWriteSchema = z.object({
|
|
13
|
+
slug: z.string().describe("The slug identifier for the agent"),
|
|
14
|
+
name: z.string().describe("Display name of the agent"),
|
|
15
|
+
role: z.string().describe("Primary role/function of the agent"),
|
|
16
|
+
instructions: z.string().describe("System instructions that guide agent behavior"),
|
|
17
|
+
useCriteria: z.string().describe("Criteria for when this agent should be selected"),
|
|
18
|
+
llmConfig: z.string().nullable().describe("LLM configuration identifier"),
|
|
19
|
+
tools: z
|
|
20
|
+
.array(z.string())
|
|
21
|
+
.nullable()
|
|
22
|
+
.describe("List of tool names to make available to this agent"),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
type AgentsWriteInput = z.infer<typeof agentsWriteSchema>;
|
|
26
|
+
|
|
27
|
+
// Define the output type
|
|
28
|
+
interface AgentsWriteOutput {
|
|
29
|
+
success: boolean;
|
|
30
|
+
message?: string;
|
|
31
|
+
error?: string;
|
|
32
|
+
filePath?: string;
|
|
33
|
+
agent?: {
|
|
34
|
+
slug: string;
|
|
35
|
+
name: string;
|
|
36
|
+
pubkey: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Core implementation of the agents_write functionality
|
|
42
|
+
* Shared between AI SDK and legacy Tool interfaces
|
|
43
|
+
*/
|
|
44
|
+
async function executeAgentsWrite(
|
|
45
|
+
input: AgentsWriteInput,
|
|
46
|
+
context?: ToolExecutionContext
|
|
47
|
+
): Promise<AgentsWriteOutput> {
|
|
48
|
+
const { slug, name, role, instructions, useCriteria, llmConfig, tools: rawTools } =
|
|
49
|
+
input;
|
|
50
|
+
|
|
51
|
+
// Normalize and filter tools
|
|
52
|
+
const autoInjectedTools = new Set<string>([...CORE_AGENT_TOOLS, ...DELEGATE_TOOLS]);
|
|
53
|
+
const tools = rawTools === null ? null : rawTools
|
|
54
|
+
// 1. Strip mcp__tenex__ prefix
|
|
55
|
+
.map(t => t.startsWith("mcp__tenex__") ? t.slice("mcp__tenex__".length) : t)
|
|
56
|
+
// 2. Filter out auto-injected tools
|
|
57
|
+
.filter(t => !autoInjectedTools.has(t));
|
|
58
|
+
|
|
59
|
+
if (!slug) {
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
error: "Agent slug is required",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!name || !role) {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
error: `Agent ${name ? "role" : "name"} is required`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Get project context
|
|
74
|
+
const projectContext = getProjectContext();
|
|
75
|
+
|
|
76
|
+
if (!context?.workingDirectory) {
|
|
77
|
+
throw new Error("ToolExecutionContext with workingDirectory is required for agents_write tool");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Check if agent exists by slug
|
|
81
|
+
const existingAgent = await agentStorage.getAgentBySlug(slug);
|
|
82
|
+
|
|
83
|
+
if (existingAgent) {
|
|
84
|
+
logger.info(`Updating existing agent: ${slug}`);
|
|
85
|
+
|
|
86
|
+
// Update fields
|
|
87
|
+
existingAgent.name = name;
|
|
88
|
+
existingAgent.role = role;
|
|
89
|
+
existingAgent.instructions = instructions;
|
|
90
|
+
existingAgent.useCriteria = useCriteria;
|
|
91
|
+
if (llmConfig !== undefined || tools !== undefined) {
|
|
92
|
+
if (!existingAgent.default) existingAgent.default = {};
|
|
93
|
+
if (llmConfig !== undefined) existingAgent.default.model = llmConfig ?? undefined;
|
|
94
|
+
if (tools !== undefined) existingAgent.default.tools = tools ?? undefined;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Save to storage
|
|
98
|
+
await agentStorage.saveAgent(existingAgent);
|
|
99
|
+
|
|
100
|
+
// Reload project context to pick up changes
|
|
101
|
+
await projectContext.updateProjectData(projectContext.project);
|
|
102
|
+
|
|
103
|
+
const agent = projectContext.getAgent(slug);
|
|
104
|
+
if (!agent) {
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
error: `Agent ${slug} updated in storage but not found in project context`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
logger.info(`Successfully updated agent "${name}" (${slug})`);
|
|
112
|
+
logger.info(` Pubkey: ${agent.pubkey}`);
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
message: `Successfully updated agent "${name}"`,
|
|
117
|
+
agent: {
|
|
118
|
+
slug,
|
|
119
|
+
name,
|
|
120
|
+
pubkey: agent.pubkey,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
logger.info(`Creating new agent: ${slug}`);
|
|
125
|
+
|
|
126
|
+
// Generate a new private key for this agent
|
|
127
|
+
const signer = NDKPrivateKeySigner.generate();
|
|
128
|
+
|
|
129
|
+
// Get project d-tag for consistent storage keys
|
|
130
|
+
// AgentRegistry uses dTag to lookup agents, so we must use the same key format
|
|
131
|
+
const projectDTag = projectContext.project.dTag || projectContext.project.tagValue("d");
|
|
132
|
+
if (!projectDTag) {
|
|
133
|
+
throw new Error(
|
|
134
|
+
"Project is missing d-tag. Cannot associate agent with project without a valid d-tag identifier."
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Create StoredAgent using factory
|
|
139
|
+
const storedAgent = createStoredAgent({
|
|
140
|
+
nsec: signer.nsec,
|
|
141
|
+
slug,
|
|
142
|
+
name,
|
|
143
|
+
role,
|
|
144
|
+
instructions,
|
|
145
|
+
useCriteria,
|
|
146
|
+
defaultConfig: {
|
|
147
|
+
model: llmConfig || DEFAULT_AGENT_LLM_CONFIG,
|
|
148
|
+
tools: tools ?? undefined,
|
|
149
|
+
},
|
|
150
|
+
eventId: undefined, // Locally created agents don't have event IDs
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// Save to storage, then associate with project
|
|
154
|
+
await agentStorage.saveAgent(storedAgent);
|
|
155
|
+
await agentStorage.addAgentToProject(signer.pubkey, projectDTag);
|
|
156
|
+
|
|
157
|
+
// Create instance and add to registry
|
|
158
|
+
// Pass projectDTag for project-scoped config resolution
|
|
159
|
+
const agent = createAgentInstance(storedAgent, projectContext.agentRegistry, projectDTag);
|
|
160
|
+
projectContext.agentRegistry.addAgent(agent);
|
|
161
|
+
|
|
162
|
+
// Notify context that a new agent was added (for Daemon routing synchronization)
|
|
163
|
+
projectContext.notifyAgentAdded(agent);
|
|
164
|
+
|
|
165
|
+
logger.info(`Successfully created agent "${name}" (${slug})`);
|
|
166
|
+
logger.info(` Pubkey: ${agent.pubkey}`);
|
|
167
|
+
|
|
168
|
+
return {
|
|
169
|
+
success: true,
|
|
170
|
+
message: `Successfully created agent "${name}"`,
|
|
171
|
+
agent: {
|
|
172
|
+
slug,
|
|
173
|
+
name,
|
|
174
|
+
pubkey: agent.pubkey,
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Create an AI SDK tool for writing agents
|
|
181
|
+
* This is the primary implementation
|
|
182
|
+
*/
|
|
183
|
+
export function createAgentsWriteTool(context: ToolExecutionContext): AISdkTool {
|
|
184
|
+
return tool({
|
|
185
|
+
description:
|
|
186
|
+
"Write or update agent configuration and tools. Creates/updates agent definition files in .tenex/agents/. Core tools are automatically injected (lessons, reports, todos, conversation tools, kill). Delegation tools (ask, delegate, delegate_crossproject, delegate_followup) are automatically assigned - do not include them. Assign additional tools based on responsibilities. Agent activates immediately and becomes available for delegation. Use to create specialized agents for specific tasks or update existing agent configurations. Changes persist across sessions.",
|
|
187
|
+
inputSchema: agentsWriteSchema,
|
|
188
|
+
execute: async (input: AgentsWriteInput) => {
|
|
189
|
+
try {
|
|
190
|
+
return await executeAgentsWrite(input, context);
|
|
191
|
+
} catch (error) {
|
|
192
|
+
logger.error("Failed to write agent definition", { error });
|
|
193
|
+
throw new Error(
|
|
194
|
+
`Failed to write agent definition: ${error instanceof Error ? error.message : String(error)}`,
|
|
195
|
+
{ cause: error }
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
}) as AISdkTool;
|
|
200
|
+
}
|