@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,50 @@
|
|
|
1
|
+
import type { PromptFragment } from "../core/types";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* RAG collections attribution fragment - shows agents which RAG collections
|
|
5
|
+
* they have contributed to and their document counts.
|
|
6
|
+
*
|
|
7
|
+
* This fragment leverages the provenance tracking metadata (agent_pubkey)
|
|
8
|
+
* added during document ingestion to surface personalized collection stats.
|
|
9
|
+
*
|
|
10
|
+
* Registration: This fragment is registered explicitly in fragments/index.ts
|
|
11
|
+
* following the project's explicit registration pattern.
|
|
12
|
+
*/
|
|
13
|
+
interface RAGCollectionStats {
|
|
14
|
+
name: string;
|
|
15
|
+
agentDocCount: number;
|
|
16
|
+
totalDocCount: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface RAGCollectionsArgs {
|
|
20
|
+
/** The agent's public key for filtering contributions */
|
|
21
|
+
agentPubkey: string;
|
|
22
|
+
/** Pre-fetched collection statistics (avoids async in template) */
|
|
23
|
+
collections: RAGCollectionStats[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const ragCollectionsFragment: PromptFragment<RAGCollectionsArgs> = {
|
|
27
|
+
id: "rag-collections",
|
|
28
|
+
priority: 29, // After agent-directed-monitoring (28), before worktree-context (30)
|
|
29
|
+
template: ({ collections }) => {
|
|
30
|
+
// Filter to only collections where the agent has contributions
|
|
31
|
+
const agentCollections = collections.filter((c) => c.agentDocCount > 0);
|
|
32
|
+
|
|
33
|
+
if (agentCollections.length === 0) {
|
|
34
|
+
return ""; // No RAG contributions - omit section entirely
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const parts: string[] = [];
|
|
38
|
+
parts.push("## Your RAG Collections\n");
|
|
39
|
+
parts.push("Collections you've contributed to:");
|
|
40
|
+
|
|
41
|
+
for (const collection of agentCollections) {
|
|
42
|
+
parts.push(
|
|
43
|
+
`- \`${collection.name}\` — ${collection.agentDocCount} docs by you (${collection.totalDocCount} total)`
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return parts.join("\n");
|
|
48
|
+
},
|
|
49
|
+
expectedArgs: "{ agentPubkey: string, collections: RAGCollectionStats[] }",
|
|
50
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { AgentInstance } from "@/agents/types";
|
|
2
|
+
import { config } from "@/services/ConfigService";
|
|
3
|
+
import { fragmentRegistry } from "../core/FragmentRegistry";
|
|
4
|
+
import type { PromptFragment } from "../core/types";
|
|
5
|
+
import { listWorktrees, loadWorktreeMetadata, type WorktreeMetadata } from "@/utils/git/worktree";
|
|
6
|
+
import { logger } from "@/utils/logger";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Worktree context for the fragment.
|
|
10
|
+
*/
|
|
11
|
+
interface WorktreeContext {
|
|
12
|
+
workingDirectory: string;
|
|
13
|
+
currentBranch: string;
|
|
14
|
+
/**
|
|
15
|
+
* Project directory (normal git repository root).
|
|
16
|
+
* Worktrees are in .worktrees/ subdirectory.
|
|
17
|
+
*/
|
|
18
|
+
projectBasePath: string;
|
|
19
|
+
agent: AgentInstance;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Worktree context fragment for agents.
|
|
24
|
+
* Shows current working directory and available worktrees.
|
|
25
|
+
*/
|
|
26
|
+
interface WorktreeContextArgs {
|
|
27
|
+
context: WorktreeContext;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const worktreeContextFragment: PromptFragment<WorktreeContextArgs> = {
|
|
31
|
+
id: "worktree-context",
|
|
32
|
+
priority: 30,
|
|
33
|
+
template: async ({ context }) => {
|
|
34
|
+
const parts: string[] = [];
|
|
35
|
+
|
|
36
|
+
// Get worktree information
|
|
37
|
+
const workingDirectory = context.workingDirectory;
|
|
38
|
+
const currentBranch = context.currentBranch;
|
|
39
|
+
|
|
40
|
+
// List worktrees first to determine what to show
|
|
41
|
+
let worktrees: Array<{ branch: string; path: string }> = [];
|
|
42
|
+
let metadata: Record<string, WorktreeMetadata> = {};
|
|
43
|
+
let hasFeatureWorktrees = false;
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
worktrees = await listWorktrees(context.projectBasePath);
|
|
47
|
+
metadata = await loadWorktreeMetadata(context.projectBasePath, config.getConfigPath("projects"));
|
|
48
|
+
// Check if there are worktrees in .worktrees/ directory (beyond the main repo)
|
|
49
|
+
hasFeatureWorktrees = worktrees.some(wt => wt.path.includes("/.worktrees/"));
|
|
50
|
+
} catch (error) {
|
|
51
|
+
// If we can't list worktrees (e.g., not a git repo yet), just skip
|
|
52
|
+
logger.warn("Failed to list worktrees", { error });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
parts.push("## Git Worktree Context\n");
|
|
56
|
+
parts.push("This project uses git worktrees for parallel work on different branches.");
|
|
57
|
+
parts.push("The default branch is checked out at the project root.");
|
|
58
|
+
if (hasFeatureWorktrees) {
|
|
59
|
+
parts.push(`Feature branches are in \`${context.projectBasePath}/.worktrees/\` (branch slashes become underscores).`);
|
|
60
|
+
}
|
|
61
|
+
parts.push("All standard git commands (status, commit, push, etc.) work normally.");
|
|
62
|
+
parts.push("");
|
|
63
|
+
parts.push(`**Current Working Directory:** ${workingDirectory}`);
|
|
64
|
+
parts.push(`**Current Branch:** ${currentBranch}`);
|
|
65
|
+
parts.push(`**Project Root:** ${context.projectBasePath}`);
|
|
66
|
+
parts.push("");
|
|
67
|
+
|
|
68
|
+
if (worktrees.length > 0) {
|
|
69
|
+
parts.push("### Available Worktrees:");
|
|
70
|
+
for (const wt of worktrees) {
|
|
71
|
+
const meta = metadata[wt.branch];
|
|
72
|
+
const isCurrent = wt.branch === currentBranch;
|
|
73
|
+
|
|
74
|
+
parts.push(`- **${wt.branch}**${isCurrent ? " [YOU ARE HERE]" : ""}`);
|
|
75
|
+
parts.push(` - Path: ${wt.path}`);
|
|
76
|
+
|
|
77
|
+
if (meta) {
|
|
78
|
+
parts.push(` - Created by: ${meta.createdBy.substring(0, 8)}...`);
|
|
79
|
+
parts.push(` - Conversation: ${meta.conversationId.substring(0, 8)}...`);
|
|
80
|
+
parts.push(` - Parent branch: ${meta.parentBranch}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
parts.push("");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Add worktree commands guidance
|
|
87
|
+
parts.push("### Delegation with Worktrees:");
|
|
88
|
+
parts.push("When using `delegate`, you can specify `branch: \"<name>\"` to create and work in an isolated worktree.");
|
|
89
|
+
parts.push("The worktree will be created from your current branch in `.worktrees/`, and the delegated agent will work in that isolation.");
|
|
90
|
+
parts.push("You are responsible for merging or cleaning up worktrees you create.");
|
|
91
|
+
parts.push("");
|
|
92
|
+
|
|
93
|
+
return parts.join("\n");
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Register the fragment
|
|
98
|
+
fragmentRegistry.register(worktreeContextFragment);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENTS.md Guidance Fragment
|
|
3
|
+
*
|
|
4
|
+
* This fragment is ALWAYS included in the system prompt to inform agents about
|
|
5
|
+
* the AGENTS.md system. It provides guidance to agents about:
|
|
6
|
+
* - What AGENTS.md files are and how they work
|
|
7
|
+
* - How to write and update AGENTS.md files
|
|
8
|
+
* - The hierarchical nature of AGENTS.md inheritance
|
|
9
|
+
*
|
|
10
|
+
* When the project has no root AGENTS.md, it explicitly states so.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { fragmentRegistry } from "../core/FragmentRegistry";
|
|
14
|
+
import type { PromptFragment } from "../core/types";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Maximum length for root AGENTS.md content to be included directly in the system prompt.
|
|
18
|
+
* Beyond this threshold, the content is omitted to avoid bloating the prompt.
|
|
19
|
+
* Short AGENTS.md files (< 2000 chars) typically contain essential project guidelines
|
|
20
|
+
* that benefit from being in the system prompt context.
|
|
21
|
+
*/
|
|
22
|
+
const MAX_ROOT_CONTENT_LENGTH_FOR_SYSTEM_PROMPT = 2000;
|
|
23
|
+
|
|
24
|
+
interface AgentsMdGuidanceArgs {
|
|
25
|
+
/** Whether the project has an AGENTS.md at the root */
|
|
26
|
+
hasRootAgentsMd: boolean;
|
|
27
|
+
/** Content of the root AGENTS.md (for context) */
|
|
28
|
+
rootAgentsMdContent?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const agentsMdGuidanceFragment: PromptFragment<AgentsMdGuidanceArgs> = {
|
|
32
|
+
id: "agents-md-guidance",
|
|
33
|
+
priority: 31, // After worktree context (30)
|
|
34
|
+
template: ({ hasRootAgentsMd, rootAgentsMdContent }) => {
|
|
35
|
+
const parts: string[] = [];
|
|
36
|
+
|
|
37
|
+
parts.push("## AGENTS.md Guidelines\n");
|
|
38
|
+
|
|
39
|
+
// When no root AGENTS.md exists, explicitly state so
|
|
40
|
+
if (!hasRootAgentsMd) {
|
|
41
|
+
parts.push(
|
|
42
|
+
"No root AGENTS.md file exists for this project. " +
|
|
43
|
+
"AGENTS.md files provide contextual guidelines for AI agents working in specific directories. " +
|
|
44
|
+
"If you need to establish project-specific conventions, commands, or guidelines, " +
|
|
45
|
+
"consider creating an AGENTS.md file at the project root."
|
|
46
|
+
);
|
|
47
|
+
return parts.join("\n");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
parts.push(`This project uses AGENTS.md files to provide contextual guidelines for different directories.
|
|
51
|
+
|
|
52
|
+
### How AGENTS.md Works
|
|
53
|
+
- AGENTS.md files serve as a "README for Agents," containing context, commands, and conventions.
|
|
54
|
+
- Unlike human-focused READMEs, these files focus on actionable instructions (build steps, test commands, code style).
|
|
55
|
+
- **Automatic Injection**: When you use tools that interact with files in a directory containing an AGENTS.md, the system automatically injects relevant AGENTS.md content as a \`<system-reminder>\`. You do NOT need to manually search for or read these files—they are provided to you when relevant.
|
|
56
|
+
- Multiple AGENTS.md files may apply (Root + Directory specific). The system handles this hierarchy automatically.
|
|
57
|
+
- Deeper, more specific AGENTS.md files override general root instructions.
|
|
58
|
+
|
|
59
|
+
### Writing AGENTS.md Files
|
|
60
|
+
When working in a directory that needs specific agent guidance:
|
|
61
|
+
1. Create an AGENTS.md file in that directory.
|
|
62
|
+
2. Focus on **executable commands** (test/build) and **strict conventions**.
|
|
63
|
+
3. Do not duplicate generic info; focus on what is unique to this directory.
|
|
64
|
+
|
|
65
|
+
### AGENTS.md Format
|
|
66
|
+
\`\`\`markdown
|
|
67
|
+
# Directory Context
|
|
68
|
+
Specific architectural details or business logic for this directory.
|
|
69
|
+
|
|
70
|
+
## Commands
|
|
71
|
+
- Test: \`npm test path/to/dir\`
|
|
72
|
+
- Lint: \`npm run lint:specific\`
|
|
73
|
+
|
|
74
|
+
## Conventions
|
|
75
|
+
- Code Style: Functional patterns preferred
|
|
76
|
+
- Naming: CamelCase for files, PascalCase for classes
|
|
77
|
+
|
|
78
|
+
## Related
|
|
79
|
+
- [API Docs](./docs/api.md)
|
|
80
|
+
\`\`\``);
|
|
81
|
+
|
|
82
|
+
// If root AGENTS.md content is available and short, include it
|
|
83
|
+
if (rootAgentsMdContent && rootAgentsMdContent.length < MAX_ROOT_CONTENT_LENGTH_FOR_SYSTEM_PROMPT) {
|
|
84
|
+
parts.push("\n### Root AGENTS.md\n");
|
|
85
|
+
parts.push("This project's root AGENTS.md:\n");
|
|
86
|
+
parts.push("```");
|
|
87
|
+
parts.push(rootAgentsMdContent.trim());
|
|
88
|
+
parts.push("```");
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return parts.join("\n");
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// Register the fragment
|
|
96
|
+
fragmentRegistry.register(agentsMdGuidanceFragment);
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import type { PromptFragment } from "../core/types";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Process metrics fragment.
|
|
6
|
+
* Provides agents with runtime metadata about the backend process:
|
|
7
|
+
* PID, process uptime, CPU/memory usage, and system uptime.
|
|
8
|
+
*/
|
|
9
|
+
export const processMetricsFragment: PromptFragment<Record<string, never>> = {
|
|
10
|
+
id: "process-metrics",
|
|
11
|
+
priority: 4, // Alongside relay-configuration, environment metadata
|
|
12
|
+
template: () => {
|
|
13
|
+
const pid = process.pid;
|
|
14
|
+
const uptimeSeconds = process.uptime();
|
|
15
|
+
|
|
16
|
+
// Format process uptime: show seconds when < 60s, otherwise minutes
|
|
17
|
+
const processUptimeStr =
|
|
18
|
+
uptimeSeconds < 60
|
|
19
|
+
? `${Math.floor(uptimeSeconds)}s`
|
|
20
|
+
: `${Math.floor(uptimeSeconds / 60)}m`;
|
|
21
|
+
|
|
22
|
+
// CPU usage: average over process lifetime as percentage
|
|
23
|
+
const cpuUsage = process.cpuUsage();
|
|
24
|
+
const totalCpuMicros = cpuUsage.user + cpuUsage.system;
|
|
25
|
+
const numCpus = os.cpus().length;
|
|
26
|
+
const cpuPercentStr =
|
|
27
|
+
uptimeSeconds > 0 && numCpus > 0
|
|
28
|
+
? `${((totalCpuMicros / (uptimeSeconds * 1_000_000) / numCpus) * 100).toFixed(1)}%`
|
|
29
|
+
: "n/a";
|
|
30
|
+
|
|
31
|
+
// Memory usage: RSS as percentage of total system memory
|
|
32
|
+
const rss = process.memoryUsage().rss;
|
|
33
|
+
const totalMem = os.totalmem();
|
|
34
|
+
const memPercentStr =
|
|
35
|
+
totalMem > 0
|
|
36
|
+
? `${((rss / totalMem) * 100).toFixed(1)}%`
|
|
37
|
+
: "n/a";
|
|
38
|
+
|
|
39
|
+
// System uptime
|
|
40
|
+
const sysUptimeSeconds = os.uptime();
|
|
41
|
+
const sysUptimeHours = Math.floor(sysUptimeSeconds / 3600);
|
|
42
|
+
const sysUptimeMinutes = Math.floor((sysUptimeSeconds % 3600) / 60);
|
|
43
|
+
|
|
44
|
+
const sysUptimeStr =
|
|
45
|
+
sysUptimeHours > 0
|
|
46
|
+
? `${sysUptimeHours}h ${sysUptimeMinutes}m`
|
|
47
|
+
: sysUptimeSeconds < 60
|
|
48
|
+
? `${Math.floor(sysUptimeSeconds)}s`
|
|
49
|
+
: `${sysUptimeMinutes}m`;
|
|
50
|
+
|
|
51
|
+
const lines = [
|
|
52
|
+
"## Process Metrics",
|
|
53
|
+
`- PID: ${pid}`,
|
|
54
|
+
`- Process uptime: ${processUptimeStr}`,
|
|
55
|
+
`- CPU usage: ${cpuPercentStr}`,
|
|
56
|
+
`- Memory usage: ${memPercentStr} (${formatBytes(rss)} RSS)`,
|
|
57
|
+
`- System uptime: ${sysUptimeStr}`,
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
return lines.join("\n");
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
function formatBytes(bytes: number): string {
|
|
65
|
+
if (bytes < 1024) return `${bytes}B`;
|
|
66
|
+
const kb = bytes / 1024;
|
|
67
|
+
if (kb < 1024) return `${Math.round(kb)}KB`;
|
|
68
|
+
const mb = kb / 1024;
|
|
69
|
+
if (mb < 1024) return `${Math.round(mb)}MB`;
|
|
70
|
+
const gb = mb / 1024;
|
|
71
|
+
return `${gb.toFixed(1)}GB`;
|
|
72
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { NDKEvent } from "@nostr-dev-kit/ndk";
|
|
2
|
+
import type { PromptFragment } from "../core/types";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Fragment for debug mode meta-cognitive analysis
|
|
6
|
+
* Applied when the user includes #debug in their message
|
|
7
|
+
*/
|
|
8
|
+
export const debugModeFragment: PromptFragment<{ enabled: boolean }> = {
|
|
9
|
+
id: "debug-mode",
|
|
10
|
+
priority: 100, // High priority to ensure it appears after system prompt
|
|
11
|
+
template: (data) => {
|
|
12
|
+
if (!data.enabled) return "";
|
|
13
|
+
|
|
14
|
+
return `
|
|
15
|
+
=== DEBUG MODE: META-COGNITIVE ANALYSIS REQUESTED ===
|
|
16
|
+
|
|
17
|
+
The user has included "#debug" in their message. They are asking you to explain your decision-making process.
|
|
18
|
+
|
|
19
|
+
Provide a transparent, honest analysis of:
|
|
20
|
+
|
|
21
|
+
1. Transparent response of the decision-making process. <-- This is the critical part.
|
|
22
|
+
2. Your understanding of the current status of the current conversation. What was said recently? Who did what? Which agents are involved and what was the last thing they accomplished. Include textual quotes from the agents and users that are involved in the conversation.
|
|
23
|
+
3. **System Prompt Influence**: Which specific parts of your system prompt or instructions guided this decision
|
|
24
|
+
4. **Reasoning Chain**: The step-by-step thought process that led to your choice
|
|
25
|
+
5. **Alternatives Considered**: Other approaches you evaluated but didn't choose, and why
|
|
26
|
+
6. **Assumptions Made**: Any implicit assumptions about the project, user needs, or context
|
|
27
|
+
7. **Constraints Applied**: Technical, architectural, or guideline constraints that limited options
|
|
28
|
+
8. **Confidence Level**: How certain you were about this decision and any doubts you had
|
|
29
|
+
9. **Pattern Matching**: If you followed a common pattern or best practice, explain why it seemed applicable
|
|
30
|
+
|
|
31
|
+
Be completely transparent about your internal process. If you made a mistake or could have done better, acknowledge it. The goal is to help the user understand exactly how you arrived at your decision.
|
|
32
|
+
|
|
33
|
+
ONLY reply to the question being asked; do NOT perform any other action, do NOT call any tool. Do not apologize. Just transparently respond.
|
|
34
|
+
=== END DEBUG MODE ===`;
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// Note: Fragment is registered in the fragments/index.ts file
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Helper function to check if debug mode is enabled
|
|
42
|
+
*/
|
|
43
|
+
export function isDebugMode(triggeringEvent: NDKEvent | undefined): boolean {
|
|
44
|
+
if (!triggeringEvent || !triggeringEvent.content) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return triggeringEvent.content.includes("#debug");
|
|
48
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { PromptFragment } from "../core/types";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Fragment for delegation completion instructions
|
|
5
|
+
* Applied when an agent is reactivated after a delegated task completes.
|
|
6
|
+
* Differentiates between partial completion (some pending) and full completion.
|
|
7
|
+
*/
|
|
8
|
+
export const delegationCompletionFragment: PromptFragment<{
|
|
9
|
+
isDelegationCompletion?: boolean;
|
|
10
|
+
hasPendingDelegations?: boolean;
|
|
11
|
+
}> = {
|
|
12
|
+
id: "delegation-completion",
|
|
13
|
+
priority: 95, // High priority to ensure agent sees this instruction
|
|
14
|
+
template: (data) => {
|
|
15
|
+
if (!data.isDelegationCompletion) return "";
|
|
16
|
+
|
|
17
|
+
if (data.hasPendingDelegations) {
|
|
18
|
+
return `
|
|
19
|
+
=== DELEGATION UPDATE ===
|
|
20
|
+
|
|
21
|
+
One or more delegated tasks have completed. The response(s) are in the conversation above.
|
|
22
|
+
You are still waiting for other delegations to complete.
|
|
23
|
+
|
|
24
|
+
You may:
|
|
25
|
+
- Acknowledge receipt of partial results
|
|
26
|
+
- Ask follow-up questions to completed agents
|
|
27
|
+
- Wait silently for remaining delegations
|
|
28
|
+
- Take other actions as appropriate
|
|
29
|
+
|
|
30
|
+
=== END UPDATE ===`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return `
|
|
34
|
+
=== ALL DELEGATIONS COMPLETE ===
|
|
35
|
+
|
|
36
|
+
All delegated tasks have completed. The responses are in the conversation above.
|
|
37
|
+
|
|
38
|
+
Synthesize the results and respond to the user.
|
|
39
|
+
|
|
40
|
+
=== END NOTIFICATION ===`;
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Note: Fragment is registered in the fragments/index.ts file
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fragment registration manifest
|
|
3
|
+
* Explicitly registers all prompt fragments in the system
|
|
4
|
+
* This replaces the implicit import side-effects pattern
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { fragmentRegistry } from "../core/FragmentRegistry";
|
|
8
|
+
|
|
9
|
+
// Import all fragment definitions
|
|
10
|
+
import { globalSystemPromptFragment } from "./00-global-system-prompt";
|
|
11
|
+
import { agentIdentityFragment } from "./01-agent-identity";
|
|
12
|
+
import { agentHomeDirectoryFragment } from "./02-agent-home-directory";
|
|
13
|
+
import { systemRemindersExplanationFragment } from "./03-system-reminders-explanation";
|
|
14
|
+
import { relayConfigurationFragment } from "./04-relay-configuration";
|
|
15
|
+
import { delegationChainFragment } from "./05-delegation-chain";
|
|
16
|
+
import { agentTodosFragment } from "./06-agent-todos";
|
|
17
|
+
import { metaProjectContextFragment } from "./07-meta-project-context";
|
|
18
|
+
import { activeConversationsFragment } from "./08-active-conversations";
|
|
19
|
+
import { recentConversationsFragment } from "./09-recent-conversations";
|
|
20
|
+
import { todoUsageGuidanceFragment } from "./06-todo-usage-guidance";
|
|
21
|
+
// 10-referenced-article uses inline registration, no named export
|
|
22
|
+
import "./10-referenced-article";
|
|
23
|
+
import { availableAgentsFragment } from "./15-available-agents";
|
|
24
|
+
import { stayInYourLaneFragment } from "./16-stay-in-your-lane";
|
|
25
|
+
import { todoBeforeDelegationFragment } from "./17-todo-before-delegation";
|
|
26
|
+
// 20-voice-mode doesn't export the fragment, it's registered inline
|
|
27
|
+
import "./20-voice-mode";
|
|
28
|
+
import { nudgesFragment } from "./11-nudges";
|
|
29
|
+
import { skillsFragment } from "./12-skills";
|
|
30
|
+
import { availableNudgesAndSkillsFragment } from "./13-available-nudges";
|
|
31
|
+
import { scheduledTasksFragment } from "./22-scheduled-tasks";
|
|
32
|
+
import { retrievedLessonsFragment } from "./24-retrieved-lessons";
|
|
33
|
+
import { ragInstructionsFragment } from "./25-rag-instructions";
|
|
34
|
+
import { mcpResourcesFragment } from "./26-mcp-resources";
|
|
35
|
+
import { memorizedReportsFragment } from "./27-memorized-reports";
|
|
36
|
+
import { agentDirectedMonitoringFragment } from "./28-agent-directed-monitoring";
|
|
37
|
+
import { ragCollectionsFragment } from "./29-rag-collections";
|
|
38
|
+
import { worktreeContextFragment } from "./30-worktree-context";
|
|
39
|
+
import { agentsMdGuidanceFragment } from "./31-agents-md-guidance";
|
|
40
|
+
import { debugModeFragment } from "./debug-mode";
|
|
41
|
+
import { delegationCompletionFragment } from "./delegation-completion";
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Register all fragments explicitly
|
|
45
|
+
* This provides a clear view of all available fragments
|
|
46
|
+
*/
|
|
47
|
+
export function registerAllFragments(): void {
|
|
48
|
+
// Global user-configured prompt (ordered with other fragments by priority)
|
|
49
|
+
fragmentRegistry.register(globalSystemPromptFragment);
|
|
50
|
+
|
|
51
|
+
// Core identity and context
|
|
52
|
+
fragmentRegistry.register(agentIdentityFragment);
|
|
53
|
+
fragmentRegistry.register(agentHomeDirectoryFragment);
|
|
54
|
+
fragmentRegistry.register(systemRemindersExplanationFragment);
|
|
55
|
+
fragmentRegistry.register(relayConfigurationFragment);
|
|
56
|
+
fragmentRegistry.register(delegationChainFragment);
|
|
57
|
+
fragmentRegistry.register(agentTodosFragment);
|
|
58
|
+
fragmentRegistry.register(todoUsageGuidanceFragment);
|
|
59
|
+
fragmentRegistry.register(metaProjectContextFragment);
|
|
60
|
+
fragmentRegistry.register(activeConversationsFragment);
|
|
61
|
+
fragmentRegistry.register(recentConversationsFragment);
|
|
62
|
+
fragmentRegistry.register(debugModeFragment);
|
|
63
|
+
fragmentRegistry.register(delegationCompletionFragment);
|
|
64
|
+
|
|
65
|
+
// Agent collaboration
|
|
66
|
+
fragmentRegistry.register(availableAgentsFragment);
|
|
67
|
+
fragmentRegistry.register(stayInYourLaneFragment);
|
|
68
|
+
fragmentRegistry.register(todoBeforeDelegationFragment);
|
|
69
|
+
|
|
70
|
+
// Behavioral guidance
|
|
71
|
+
// voice-mode and referenced-article are registered via side effects
|
|
72
|
+
fragmentRegistry.register(nudgesFragment);
|
|
73
|
+
fragmentRegistry.register(skillsFragment);
|
|
74
|
+
fragmentRegistry.register(availableNudgesAndSkillsFragment);
|
|
75
|
+
|
|
76
|
+
// Scheduled tasks context
|
|
77
|
+
fragmentRegistry.register(scheduledTasksFragment);
|
|
78
|
+
|
|
79
|
+
// Context and learning
|
|
80
|
+
fragmentRegistry.register(retrievedLessonsFragment);
|
|
81
|
+
fragmentRegistry.register(ragInstructionsFragment);
|
|
82
|
+
fragmentRegistry.register(mcpResourcesFragment);
|
|
83
|
+
fragmentRegistry.register(memorizedReportsFragment);
|
|
84
|
+
fragmentRegistry.register(agentDirectedMonitoringFragment);
|
|
85
|
+
fragmentRegistry.register(ragCollectionsFragment);
|
|
86
|
+
fragmentRegistry.register(worktreeContextFragment);
|
|
87
|
+
fragmentRegistry.register(agentsMdGuidanceFragment);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Auto-register all fragments on import
|
|
91
|
+
registerAllFragments();
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Export core functionality
|
|
2
|
+
|
|
3
|
+
export { FragmentRegistry, fragmentRegistry } from "./core/FragmentRegistry";
|
|
4
|
+
export { PromptBuilder } from "./core/PromptBuilder";
|
|
5
|
+
export type { FragmentConfig, PromptFragment } from "./core/types";
|
|
6
|
+
|
|
7
|
+
// Import all fragments to ensure they're registered when the module is imported
|
|
8
|
+
// Priority 01 - Identity
|
|
9
|
+
import "./fragments/01-agent-identity";
|
|
10
|
+
|
|
11
|
+
// Priority 10 - Early context
|
|
12
|
+
import "./fragments/10-referenced-article"; // Conditional
|
|
13
|
+
|
|
14
|
+
// Priority 15 - Available agents
|
|
15
|
+
import "./fragments/15-available-agents";
|
|
16
|
+
|
|
17
|
+
// Priority 20 - Mode context
|
|
18
|
+
import "./fragments/20-voice-mode"; // Conditional
|
|
19
|
+
|
|
20
|
+
// Priority 24 - Lessons
|
|
21
|
+
import "./fragments/24-retrieved-lessons"; // Shared
|