@su-record/vibe 3.0.0 → 3.1.0
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/hooks/scripts/__tests__/.vibe/command-log.txt +3 -78
- package/hooks/scripts/__tests__/.vibe/memories/memories.db +0 -0
- package/hooks/scripts/__tests__/.vibe/memories/memories.db-shm +0 -0
- package/hooks/scripts/__tests__/.vibe/memories/memories.db-wal +0 -0
- package/hooks/scripts/__tests__/clone-behaviors.test.js +64 -0
- package/hooks/scripts/__tests__/clone-merge-responsive.test.js +106 -0
- package/hooks/scripts/clone-extract.js +242 -28
- package/hooks/scripts/clone-merge-responsive.js +184 -0
- package/hooks/scripts/clone-spec.js +33 -8
- package/hooks/scripts/clone-validate.js +15 -9
- package/package.json +5 -2
- package/skills/clone/SKILL.md +132 -55
- package/skills/vibe.clone/SKILL.md +39 -19
- package/dist/cli/llm/gemini-commands.d.ts +0 -25
- package/dist/cli/llm/gemini-commands.d.ts.map +0 -1
- package/dist/cli/llm/gemini-commands.js +0 -143
- package/dist/cli/llm/gemini-commands.js.map +0 -1
- package/dist/cli/postinstall/codex-agents.d.ts +0 -24
- package/dist/cli/postinstall/codex-agents.d.ts.map +0 -1
- package/dist/cli/postinstall/codex-agents.js +0 -114
- package/dist/cli/postinstall/codex-agents.js.map +0 -1
- package/dist/cli/postinstall/codex-instruction.d.ts +0 -10
- package/dist/cli/postinstall/codex-instruction.d.ts.map +0 -1
- package/dist/cli/postinstall/codex-instruction.js +0 -56
- package/dist/cli/postinstall/codex-instruction.js.map +0 -1
- package/dist/cli/postinstall/gemini-agents.d.ts +0 -12
- package/dist/cli/postinstall/gemini-agents.d.ts.map +0 -1
- package/dist/cli/postinstall/gemini-agents.js +0 -80
- package/dist/cli/postinstall/gemini-agents.js.map +0 -1
- package/dist/cli/postinstall/gemini-instruction.d.ts +0 -10
- package/dist/cli/postinstall/gemini-instruction.d.ts.map +0 -1
- package/dist/cli/postinstall/gemini-instruction.js +0 -59
- package/dist/cli/postinstall/gemini-instruction.js.map +0 -1
- package/dist/infra/lib/ContextCompressor.d.ts +0 -104
- package/dist/infra/lib/ContextCompressor.d.ts.map +0 -1
- package/dist/infra/lib/ContextCompressor.js +0 -297
- package/dist/infra/lib/ContextCompressor.js.map +0 -1
- package/dist/infra/lib/ContextCompressor.test.d.ts +0 -2
- package/dist/infra/lib/ContextCompressor.test.d.ts.map +0 -1
- package/dist/infra/lib/ContextCompressor.test.js +0 -25
- package/dist/infra/lib/ContextCompressor.test.js.map +0 -1
- package/dist/infra/lib/ProgressTracker.d.ts +0 -73
- package/dist/infra/lib/ProgressTracker.d.ts.map +0 -1
- package/dist/infra/lib/ProgressTracker.js +0 -267
- package/dist/infra/lib/ProgressTracker.js.map +0 -1
- package/dist/infra/lib/TokenBudgetTracker.d.ts +0 -68
- package/dist/infra/lib/TokenBudgetTracker.d.ts.map +0 -1
- package/dist/infra/lib/TokenBudgetTracker.js +0 -191
- package/dist/infra/lib/TokenBudgetTracker.js.map +0 -1
- package/dist/infra/lib/autonomy/AuditStore.d.ts +0 -63
- package/dist/infra/lib/autonomy/AuditStore.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/AuditStore.js +0 -185
- package/dist/infra/lib/autonomy/AuditStore.js.map +0 -1
- package/dist/infra/lib/autonomy/AutonomyConfig.d.ts +0 -84
- package/dist/infra/lib/autonomy/AutonomyConfig.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/AutonomyConfig.js +0 -49
- package/dist/infra/lib/autonomy/AutonomyConfig.js.map +0 -1
- package/dist/infra/lib/autonomy/AutonomyOrchestrator.d.ts +0 -78
- package/dist/infra/lib/autonomy/AutonomyOrchestrator.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/AutonomyOrchestrator.js +0 -246
- package/dist/infra/lib/autonomy/AutonomyOrchestrator.js.map +0 -1
- package/dist/infra/lib/autonomy/BackgroundMonitor.d.ts +0 -36
- package/dist/infra/lib/autonomy/BackgroundMonitor.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/BackgroundMonitor.js +0 -138
- package/dist/infra/lib/autonomy/BackgroundMonitor.js.map +0 -1
- package/dist/infra/lib/autonomy/CollaborationProtocol.d.ts +0 -56
- package/dist/infra/lib/autonomy/CollaborationProtocol.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/CollaborationProtocol.js +0 -122
- package/dist/infra/lib/autonomy/CollaborationProtocol.js.map +0 -1
- package/dist/infra/lib/autonomy/ConfirmationManager.d.ts +0 -42
- package/dist/infra/lib/autonomy/ConfirmationManager.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/ConfirmationManager.js +0 -200
- package/dist/infra/lib/autonomy/ConfirmationManager.js.map +0 -1
- package/dist/infra/lib/autonomy/ConfirmationStore.d.ts +0 -55
- package/dist/infra/lib/autonomy/ConfirmationStore.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/ConfirmationStore.js +0 -130
- package/dist/infra/lib/autonomy/ConfirmationStore.js.map +0 -1
- package/dist/infra/lib/autonomy/EventBus.d.ts +0 -20
- package/dist/infra/lib/autonomy/EventBus.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/EventBus.js +0 -119
- package/dist/infra/lib/autonomy/EventBus.js.map +0 -1
- package/dist/infra/lib/autonomy/EventOutbox.d.ts +0 -32
- package/dist/infra/lib/autonomy/EventOutbox.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/EventOutbox.js +0 -152
- package/dist/infra/lib/autonomy/EventOutbox.js.map +0 -1
- package/dist/infra/lib/autonomy/NotificationDispatcher.d.ts +0 -24
- package/dist/infra/lib/autonomy/NotificationDispatcher.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/NotificationDispatcher.js +0 -112
- package/dist/infra/lib/autonomy/NotificationDispatcher.js.map +0 -1
- package/dist/infra/lib/autonomy/PolicyEngine.d.ts +0 -76
- package/dist/infra/lib/autonomy/PolicyEngine.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/PolicyEngine.js +0 -208
- package/dist/infra/lib/autonomy/PolicyEngine.js.map +0 -1
- package/dist/infra/lib/autonomy/ProactiveAnalyzer.d.ts +0 -61
- package/dist/infra/lib/autonomy/ProactiveAnalyzer.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/ProactiveAnalyzer.js +0 -236
- package/dist/infra/lib/autonomy/ProactiveAnalyzer.js.map +0 -1
- package/dist/infra/lib/autonomy/RiskClassifier.d.ts +0 -35
- package/dist/infra/lib/autonomy/RiskClassifier.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/RiskClassifier.js +0 -147
- package/dist/infra/lib/autonomy/RiskClassifier.js.map +0 -1
- package/dist/infra/lib/autonomy/SecuritySentinel.d.ts +0 -51
- package/dist/infra/lib/autonomy/SecuritySentinel.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/SecuritySentinel.js +0 -162
- package/dist/infra/lib/autonomy/SecuritySentinel.js.map +0 -1
- package/dist/infra/lib/autonomy/SuggestionStore.d.ts +0 -54
- package/dist/infra/lib/autonomy/SuggestionStore.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/SuggestionStore.js +0 -144
- package/dist/infra/lib/autonomy/SuggestionStore.js.map +0 -1
- package/dist/infra/lib/autonomy/TaskDecomposer.d.ts +0 -38
- package/dist/infra/lib/autonomy/TaskDecomposer.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/TaskDecomposer.js +0 -175
- package/dist/infra/lib/autonomy/TaskDecomposer.js.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/audit-store.test.d.ts +0 -2
- package/dist/infra/lib/autonomy/__tests__/audit-store.test.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/audit-store.test.js +0 -198
- package/dist/infra/lib/autonomy/__tests__/audit-store.test.js.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/event-bus.test.d.ts +0 -2
- package/dist/infra/lib/autonomy/__tests__/event-bus.test.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/event-bus.test.js +0 -225
- package/dist/infra/lib/autonomy/__tests__/event-bus.test.js.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/event-core.test.d.ts +0 -2
- package/dist/infra/lib/autonomy/__tests__/event-core.test.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/event-core.test.js +0 -194
- package/dist/infra/lib/autonomy/__tests__/event-core.test.js.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/governance.test.d.ts +0 -2
- package/dist/infra/lib/autonomy/__tests__/governance.test.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/governance.test.js +0 -540
- package/dist/infra/lib/autonomy/__tests__/governance.test.js.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/integration.test.d.ts +0 -2
- package/dist/infra/lib/autonomy/__tests__/integration.test.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/integration.test.js +0 -480
- package/dist/infra/lib/autonomy/__tests__/integration.test.js.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/proactive.test.d.ts +0 -2
- package/dist/infra/lib/autonomy/__tests__/proactive.test.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/proactive.test.js +0 -410
- package/dist/infra/lib/autonomy/__tests__/proactive.test.js.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/sentinel.test.d.ts +0 -2
- package/dist/infra/lib/autonomy/__tests__/sentinel.test.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/__tests__/sentinel.test.js +0 -486
- package/dist/infra/lib/autonomy/__tests__/sentinel.test.js.map +0 -1
- package/dist/infra/lib/autonomy/index.d.ts +0 -18
- package/dist/infra/lib/autonomy/index.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/index.js +0 -22
- package/dist/infra/lib/autonomy/index.js.map +0 -1
- package/dist/infra/lib/autonomy/schemas.d.ts +0 -317
- package/dist/infra/lib/autonomy/schemas.d.ts.map +0 -1
- package/dist/infra/lib/autonomy/schemas.js +0 -90
- package/dist/infra/lib/autonomy/schemas.js.map +0 -1
- package/dist/infra/lib/claude/index.d.ts +0 -5
- package/dist/infra/lib/claude/index.d.ts.map +0 -1
- package/dist/infra/lib/claude/index.js +0 -5
- package/dist/infra/lib/claude/index.js.map +0 -1
- package/dist/infra/lib/claude/storage.d.ts +0 -12
- package/dist/infra/lib/claude/storage.d.ts.map +0 -1
- package/dist/infra/lib/claude/storage.js +0 -54
- package/dist/infra/lib/claude/storage.js.map +0 -1
- package/dist/infra/lib/gemini/auth.d.ts +0 -18
- package/dist/infra/lib/gemini/auth.d.ts.map +0 -1
- package/dist/infra/lib/gemini/auth.js +0 -32
- package/dist/infra/lib/gemini/auth.js.map +0 -1
- package/dist/infra/lib/gemini/capabilities.d.ts +0 -28
- package/dist/infra/lib/gemini/capabilities.d.ts.map +0 -1
- package/dist/infra/lib/gemini/capabilities.js +0 -178
- package/dist/infra/lib/gemini/capabilities.js.map +0 -1
- package/dist/infra/lib/gemini/chat.d.ts +0 -35
- package/dist/infra/lib/gemini/chat.d.ts.map +0 -1
- package/dist/infra/lib/gemini/chat.js +0 -161
- package/dist/infra/lib/gemini/chat.js.map +0 -1
- package/dist/infra/lib/gemini/completion.d.ts +0 -12
- package/dist/infra/lib/gemini/completion.d.ts.map +0 -1
- package/dist/infra/lib/gemini/completion.js +0 -13
- package/dist/infra/lib/gemini/completion.js.map +0 -1
- package/dist/infra/lib/gemini/constants.d.ts +0 -8
- package/dist/infra/lib/gemini/constants.d.ts.map +0 -1
- package/dist/infra/lib/gemini/constants.js +0 -11
- package/dist/infra/lib/gemini/constants.js.map +0 -1
- package/dist/infra/lib/gemini/index.d.ts +0 -13
- package/dist/infra/lib/gemini/index.d.ts.map +0 -1
- package/dist/infra/lib/gemini/index.js +0 -12
- package/dist/infra/lib/gemini/index.js.map +0 -1
- package/dist/infra/lib/gemini/models.d.ts +0 -11
- package/dist/infra/lib/gemini/models.d.ts.map +0 -1
- package/dist/infra/lib/gemini/models.js +0 -38
- package/dist/infra/lib/gemini/models.js.map +0 -1
- package/dist/infra/lib/gemini/orchestration.d.ts +0 -33
- package/dist/infra/lib/gemini/orchestration.d.ts.map +0 -1
- package/dist/infra/lib/gemini/orchestration.js +0 -62
- package/dist/infra/lib/gemini/orchestration.js.map +0 -1
- package/dist/infra/lib/gemini/types.d.ts +0 -115
- package/dist/infra/lib/gemini/types.d.ts.map +0 -1
- package/dist/infra/lib/gemini/types.js +0 -5
- package/dist/infra/lib/gemini/types.js.map +0 -1
- package/dist/infra/orchestrator/AgentAnnouncer.d.ts +0 -64
- package/dist/infra/orchestrator/AgentAnnouncer.d.ts.map +0 -1
- package/dist/infra/orchestrator/AgentAnnouncer.js +0 -127
- package/dist/infra/orchestrator/AgentAnnouncer.js.map +0 -1
- package/dist/infra/orchestrator/AgentAnnouncer.test.d.ts +0 -5
- package/dist/infra/orchestrator/AgentAnnouncer.test.d.ts.map +0 -1
- package/dist/infra/orchestrator/AgentAnnouncer.test.js +0 -119
- package/dist/infra/orchestrator/AgentAnnouncer.test.js.map +0 -1
- package/dist/infra/orchestrator/AgentExecutor.d.ts +0 -22
- package/dist/infra/orchestrator/AgentExecutor.d.ts.map +0 -1
- package/dist/infra/orchestrator/AgentExecutor.js +0 -272
- package/dist/infra/orchestrator/AgentExecutor.js.map +0 -1
- package/dist/infra/orchestrator/AgentManager.d.ts +0 -72
- package/dist/infra/orchestrator/AgentManager.d.ts.map +0 -1
- package/dist/infra/orchestrator/AgentManager.js +0 -183
- package/dist/infra/orchestrator/AgentManager.js.map +0 -1
- package/dist/infra/orchestrator/AgentManifestCache.d.ts +0 -54
- package/dist/infra/orchestrator/AgentManifestCache.d.ts.map +0 -1
- package/dist/infra/orchestrator/AgentManifestCache.js +0 -191
- package/dist/infra/orchestrator/AgentManifestCache.js.map +0 -1
- package/dist/infra/orchestrator/AgentRegistry.d.ts +0 -76
- package/dist/infra/orchestrator/AgentRegistry.d.ts.map +0 -1
- package/dist/infra/orchestrator/AgentRegistry.js +0 -217
- package/dist/infra/orchestrator/AgentRegistry.js.map +0 -1
- package/dist/infra/orchestrator/AgentRegistry.test.d.ts +0 -5
- package/dist/infra/orchestrator/AgentRegistry.test.d.ts.map +0 -1
- package/dist/infra/orchestrator/AgentRegistry.test.js +0 -122
- package/dist/infra/orchestrator/AgentRegistry.test.js.map +0 -1
- package/dist/infra/orchestrator/BackgroundManager.d.ts +0 -128
- package/dist/infra/orchestrator/BackgroundManager.d.ts.map +0 -1
- package/dist/infra/orchestrator/BackgroundManager.js +0 -620
- package/dist/infra/orchestrator/BackgroundManager.js.map +0 -1
- package/dist/infra/orchestrator/BackgroundManager.test.d.ts +0 -6
- package/dist/infra/orchestrator/BackgroundManager.test.d.ts.map +0 -1
- package/dist/infra/orchestrator/BackgroundManager.test.js +0 -162
- package/dist/infra/orchestrator/BackgroundManager.test.js.map +0 -1
- package/dist/infra/orchestrator/CheckpointManager.d.ts +0 -54
- package/dist/infra/orchestrator/CheckpointManager.d.ts.map +0 -1
- package/dist/infra/orchestrator/CheckpointManager.js +0 -121
- package/dist/infra/orchestrator/CheckpointManager.js.map +0 -1
- package/dist/infra/orchestrator/CodexAgentRuntime.d.ts +0 -12
- package/dist/infra/orchestrator/CodexAgentRuntime.d.ts.map +0 -1
- package/dist/infra/orchestrator/CodexAgentRuntime.js +0 -94
- package/dist/infra/orchestrator/CodexAgentRuntime.js.map +0 -1
- package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts +0 -2
- package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts.map +0 -1
- package/dist/infra/orchestrator/CodexAgentRuntime.test.js +0 -37
- package/dist/infra/orchestrator/CodexAgentRuntime.test.js.map +0 -1
- package/dist/infra/orchestrator/LLMCluster.d.ts +0 -82
- package/dist/infra/orchestrator/LLMCluster.d.ts.map +0 -1
- package/dist/infra/orchestrator/LLMCluster.js +0 -146
- package/dist/infra/orchestrator/LLMCluster.js.map +0 -1
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts +0 -31
- package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +0 -1
- package/dist/infra/orchestrator/MultiLlmResearch.js +0 -160
- package/dist/infra/orchestrator/MultiLlmResearch.js.map +0 -1
- package/dist/infra/orchestrator/PhasePipeline.d.ts +0 -122
- package/dist/infra/orchestrator/PhasePipeline.d.ts.map +0 -1
- package/dist/infra/orchestrator/PhasePipeline.js +0 -385
- package/dist/infra/orchestrator/PhasePipeline.js.map +0 -1
- package/dist/infra/orchestrator/PhaseResultStore.d.ts +0 -39
- package/dist/infra/orchestrator/PhaseResultStore.d.ts.map +0 -1
- package/dist/infra/orchestrator/PhaseResultStore.js +0 -151
- package/dist/infra/orchestrator/PhaseResultStore.js.map +0 -1
- package/dist/infra/orchestrator/SessionStore.d.ts +0 -40
- package/dist/infra/orchestrator/SessionStore.d.ts.map +0 -1
- package/dist/infra/orchestrator/SessionStore.js +0 -116
- package/dist/infra/orchestrator/SessionStore.js.map +0 -1
- package/dist/infra/orchestrator/SmartRouter.d.ts +0 -90
- package/dist/infra/orchestrator/SmartRouter.d.ts.map +0 -1
- package/dist/infra/orchestrator/SmartRouter.js +0 -277
- package/dist/infra/orchestrator/SmartRouter.js.map +0 -1
- package/dist/infra/orchestrator/SmartRouter.test.d.ts +0 -5
- package/dist/infra/orchestrator/SmartRouter.test.d.ts.map +0 -1
- package/dist/infra/orchestrator/SmartRouter.test.js +0 -484
- package/dist/infra/orchestrator/SmartRouter.test.js.map +0 -1
- package/dist/infra/orchestrator/SwarmOrchestrator.d.ts +0 -143
- package/dist/infra/orchestrator/SwarmOrchestrator.d.ts.map +0 -1
- package/dist/infra/orchestrator/SwarmOrchestrator.js +0 -378
- package/dist/infra/orchestrator/SwarmOrchestrator.js.map +0 -1
- package/dist/infra/orchestrator/SwarmOrchestrator.test.d.ts +0 -5
- package/dist/infra/orchestrator/SwarmOrchestrator.test.d.ts.map +0 -1
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js +0 -95
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js.map +0 -1
- package/dist/infra/orchestrator/agentDiscovery.d.ts +0 -26
- package/dist/infra/orchestrator/agentDiscovery.d.ts.map +0 -1
- package/dist/infra/orchestrator/agentDiscovery.js +0 -175
- package/dist/infra/orchestrator/agentDiscovery.js.map +0 -1
- package/dist/infra/orchestrator/backgroundAgent.d.ts +0 -9
- package/dist/infra/orchestrator/backgroundAgent.d.ts.map +0 -1
- package/dist/infra/orchestrator/backgroundAgent.js +0 -10
- package/dist/infra/orchestrator/backgroundAgent.js.map +0 -1
- package/dist/infra/orchestrator/index.d.ts +0 -207
- package/dist/infra/orchestrator/index.d.ts.map +0 -1
- package/dist/infra/orchestrator/index.js +0 -362
- package/dist/infra/orchestrator/index.js.map +0 -1
- package/dist/infra/orchestrator/orchestrator.d.ts +0 -60
- package/dist/infra/orchestrator/orchestrator.d.ts.map +0 -1
- package/dist/infra/orchestrator/orchestrator.js +0 -214
- package/dist/infra/orchestrator/orchestrator.js.map +0 -1
- package/dist/infra/orchestrator/parallelResearch.d.ts +0 -27
- package/dist/infra/orchestrator/parallelResearch.d.ts.map +0 -1
- package/dist/infra/orchestrator/parallelResearch.js +0 -285
- package/dist/infra/orchestrator/parallelResearch.js.map +0 -1
- package/dist/infra/orchestrator/types.d.ts +0 -205
- package/dist/infra/orchestrator/types.d.ts.map +0 -1
- package/dist/infra/orchestrator/types.js +0 -87
- package/dist/infra/orchestrator/types.js.map +0 -1
- package/dist/infra/orchestrator/types.test.d.ts +0 -2
- package/dist/infra/orchestrator/types.test.d.ts.map +0 -1
- package/dist/infra/orchestrator/types.test.js +0 -57
- package/dist/infra/orchestrator/types.test.js.map +0 -1
- package/dist/tools/semantic/analyzeDependencyGraph.d.ts +0 -12
- package/dist/tools/semantic/analyzeDependencyGraph.d.ts.map +0 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js +0 -359
- package/dist/tools/semantic/analyzeDependencyGraph.js.map +0 -1
- package/dist/tools/semantic/astGrep.d.ts +0 -25
- package/dist/tools/semantic/astGrep.d.ts.map +0 -1
- package/dist/tools/semantic/astGrep.js +0 -324
- package/dist/tools/semantic/astGrep.js.map +0 -1
- package/dist/tools/semantic/astGrep.test.d.ts +0 -2
- package/dist/tools/semantic/astGrep.test.d.ts.map +0 -1
- package/dist/tools/semantic/astGrep.test.js +0 -74
- package/dist/tools/semantic/astGrep.test.js.map +0 -1
- package/dist/tools/semantic/findReferences.d.ts +0 -9
- package/dist/tools/semantic/findReferences.d.ts.map +0 -1
- package/dist/tools/semantic/findReferences.js +0 -200
- package/dist/tools/semantic/findReferences.js.map +0 -1
- package/dist/tools/semantic/findSymbol.d.ts +0 -8
- package/dist/tools/semantic/findSymbol.d.ts.map +0 -1
- package/dist/tools/semantic/findSymbol.js +0 -204
- package/dist/tools/semantic/findSymbol.js.map +0 -1
- package/dist/tools/semantic/index.d.ts +0 -9
- package/dist/tools/semantic/index.d.ts.map +0 -1
- package/dist/tools/semantic/index.js +0 -11
- package/dist/tools/semantic/index.js.map +0 -1
- package/dist/tools/semantic/lsp.d.ts +0 -68
- package/dist/tools/semantic/lsp.d.ts.map +0 -1
- package/dist/tools/semantic/lsp.js +0 -561
- package/dist/tools/semantic/lsp.js.map +0 -1
- package/dist/tools/spec/e2eTestGenerator.d.ts +0 -61
- package/dist/tools/spec/e2eTestGenerator.d.ts.map +0 -1
- package/dist/tools/spec/e2eTestGenerator.js +0 -255
- package/dist/tools/spec/e2eTestGenerator.js.map +0 -1
- package/dist/tools/spec/specVersioning.d.ts +0 -76
- package/dist/tools/spec/specVersioning.d.ts.map +0 -1
- package/dist/tools/spec/specVersioning.js +0 -236
- package/dist/tools/spec/specVersioning.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SwarmOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/infra/orchestrator/SwarmOrchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SwarmOrchestrator - 에이전트 자가 복제 패턴 (Swarm Pattern)
|
|
3
|
-
*
|
|
4
|
-
* SKILL.md 참조: Claude Code의 Swarm 패턴을 Core 자체 구현으로 재현
|
|
5
|
-
* - 에이전트가 "너무 복잡하다" 판단 시 하위 에이전트 동적 생성
|
|
6
|
-
* - 기존 launch()/poll() 인프라 활용
|
|
7
|
-
* - Claude Code + Cursor IDE 모두 지원 (플랫폼 독립)
|
|
8
|
-
*/
|
|
9
|
-
import { launch, poll, cancel } from './BackgroundManager.js';
|
|
10
|
-
import { CONCURRENCY } from '../lib/constants.js';
|
|
11
|
-
import { warnLog } from '../lib/utils.js';
|
|
12
|
-
import { getModelOverride } from '../lib/config/GlobalConfigManager.js';
|
|
13
|
-
// ============================================
|
|
14
|
-
// SwarmOrchestrator
|
|
15
|
-
// ============================================
|
|
16
|
-
export class SwarmOrchestrator {
|
|
17
|
-
tasks = new Map();
|
|
18
|
-
config;
|
|
19
|
-
startTime = 0;
|
|
20
|
-
constructor(config) {
|
|
21
|
-
this.config = {
|
|
22
|
-
prompt: config.prompt,
|
|
23
|
-
agentName: config.agentName || 'swarm-root',
|
|
24
|
-
model: config.model || getModelOverride('claudeBackground') || process.env.CLAUDE_BACKGROUND_MODEL,
|
|
25
|
-
maxDepth: config.maxDepth ?? 2,
|
|
26
|
-
splitThreshold: config.splitThreshold ?? 15,
|
|
27
|
-
maxConcurrentChildren: config.maxConcurrentChildren ?? 5,
|
|
28
|
-
onSplit: config.onSplit || (() => { }),
|
|
29
|
-
onComplete: config.onComplete || (() => { }),
|
|
30
|
-
projectPath: config.projectPath || process.cwd(),
|
|
31
|
-
timeout: config.timeout ?? 5 * 60 * 1000
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Swarm 실행
|
|
36
|
-
*/
|
|
37
|
-
async execute() {
|
|
38
|
-
this.startTime = Date.now();
|
|
39
|
-
// 루트 태스크 생성
|
|
40
|
-
const rootTask = this.createTask(this.config.prompt, null, 0);
|
|
41
|
-
this.tasks.set(rootTask.id, rootTask);
|
|
42
|
-
// 실행
|
|
43
|
-
await this.processTask(rootTask);
|
|
44
|
-
// 결과 수집
|
|
45
|
-
return this.collectResults(rootTask.id);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* 태스크 처리
|
|
49
|
-
*/
|
|
50
|
-
async processTask(task) {
|
|
51
|
-
// 타임아웃 체크
|
|
52
|
-
if (Date.now() - this.startTime > this.config.timeout) {
|
|
53
|
-
task.status = 'failed';
|
|
54
|
-
task.error = 'Swarm timeout exceeded';
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
task.status = 'analyzing';
|
|
58
|
-
task.startedAt = Date.now();
|
|
59
|
-
// 복잡도 분석
|
|
60
|
-
const analysis = await this.analyzeComplexity(task.prompt);
|
|
61
|
-
task.complexity = analysis.score;
|
|
62
|
-
// 분할 결정
|
|
63
|
-
if (this.shouldSplit(task, analysis)) {
|
|
64
|
-
await this.splitTask(task, analysis);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
await this.executeTask(task);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* 복잡도 분석
|
|
72
|
-
*/
|
|
73
|
-
async analyzeComplexity(prompt) {
|
|
74
|
-
const factors = [];
|
|
75
|
-
let score = 0;
|
|
76
|
-
// 프롬프트 길이
|
|
77
|
-
if (prompt.length > 500) {
|
|
78
|
-
score += 5;
|
|
79
|
-
factors.push('long-prompt');
|
|
80
|
-
}
|
|
81
|
-
if (prompt.length > 1000) {
|
|
82
|
-
score += 5;
|
|
83
|
-
factors.push('very-long-prompt');
|
|
84
|
-
}
|
|
85
|
-
// 키워드 기반 복잡도
|
|
86
|
-
const complexKeywords = [
|
|
87
|
-
{ pattern: /implement|create|build/gi, weight: 3 },
|
|
88
|
-
{ pattern: /refactor|restructure|redesign/gi, weight: 4 },
|
|
89
|
-
{ pattern: /multiple|several|all|every/gi, weight: 2 },
|
|
90
|
-
{ pattern: /and then|after that|next/gi, weight: 2 },
|
|
91
|
-
{ pattern: /test|verify|validate/gi, weight: 2 },
|
|
92
|
-
{ pattern: /security|authentication|authorization/gi, weight: 3 },
|
|
93
|
-
{ pattern: /database|migration|schema/gi, weight: 3 },
|
|
94
|
-
{ pattern: /api|endpoint|route/gi, weight: 2 },
|
|
95
|
-
{ pattern: /frontend|backend|fullstack/gi, weight: 3 },
|
|
96
|
-
{ pattern: /phase|step|stage/gi, weight: 2 }
|
|
97
|
-
];
|
|
98
|
-
for (const { pattern, weight } of complexKeywords) {
|
|
99
|
-
const matches = prompt.match(pattern);
|
|
100
|
-
if (matches) {
|
|
101
|
-
score += weight * matches.length;
|
|
102
|
-
factors.push(pattern.source.split('|')[0]);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// 파일/경로 언급
|
|
106
|
-
const fileMentions = prompt.match(/\.(ts|js|tsx|jsx|py|go|rs|java|rb|swift|kt)/gi);
|
|
107
|
-
if (fileMentions && fileMentions.length > 3) {
|
|
108
|
-
score += fileMentions.length * 2;
|
|
109
|
-
factors.push(`${fileMentions.length}-files`);
|
|
110
|
-
}
|
|
111
|
-
// 숫자 목록 (1. 2. 3. 등)
|
|
112
|
-
const numberedList = prompt.match(/^\d+\./gm);
|
|
113
|
-
if (numberedList && numberedList.length > 2) {
|
|
114
|
-
score += numberedList.length * 2;
|
|
115
|
-
factors.push(`${numberedList.length}-steps`);
|
|
116
|
-
}
|
|
117
|
-
// 분할 제안 생성
|
|
118
|
-
const suggestedSplits = this.suggestSplits(prompt);
|
|
119
|
-
return { score, factors, suggestedSplits };
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* 분할 제안 생성
|
|
123
|
-
*/
|
|
124
|
-
suggestSplits(prompt) {
|
|
125
|
-
const splits = [];
|
|
126
|
-
// 숫자 목록으로 분할
|
|
127
|
-
const numberedSections = prompt.split(/(?=\d+\.\s)/);
|
|
128
|
-
if (numberedSections.length > 2) {
|
|
129
|
-
for (const section of numberedSections) {
|
|
130
|
-
const trimmed = section.trim();
|
|
131
|
-
if (trimmed.length > 20) {
|
|
132
|
-
splits.push(trimmed);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
if (splits.length > 1)
|
|
136
|
-
return splits;
|
|
137
|
-
}
|
|
138
|
-
// "and", "then" 등으로 분할
|
|
139
|
-
const conjunctionSplit = prompt.split(/\s+(?:and then|then|after that|next,?)\s+/i);
|
|
140
|
-
if (conjunctionSplit.length > 1) {
|
|
141
|
-
return conjunctionSplit.map(s => s.trim()).filter(s => s.length > 20);
|
|
142
|
-
}
|
|
143
|
-
// 문장 단위 분할 (fallback)
|
|
144
|
-
const sentences = prompt.split(/(?<=[.!?])\s+/);
|
|
145
|
-
if (sentences.length > 3) {
|
|
146
|
-
// 2-3개 문장씩 그룹화
|
|
147
|
-
const grouped = [];
|
|
148
|
-
for (let i = 0; i < sentences.length; i += 2) {
|
|
149
|
-
const group = sentences.slice(i, i + 2).join(' ');
|
|
150
|
-
if (group.length > 30) {
|
|
151
|
-
grouped.push(group);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
if (grouped.length > 1)
|
|
155
|
-
return grouped;
|
|
156
|
-
}
|
|
157
|
-
return [];
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* 분할 여부 결정
|
|
161
|
-
*/
|
|
162
|
-
shouldSplit(task, analysis) {
|
|
163
|
-
// 최대 깊이 도달
|
|
164
|
-
if (task.depth >= this.config.maxDepth) {
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
// 복잡도 임계값 미달
|
|
168
|
-
if (analysis.score < this.config.splitThreshold) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
// 분할 가능한 항목이 없음
|
|
172
|
-
if (!analysis.suggestedSplits || analysis.suggestedSplits.length < 2) {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
return true;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* 태스크 분할
|
|
179
|
-
*/
|
|
180
|
-
async splitTask(task, analysis) {
|
|
181
|
-
task.status = 'splitting';
|
|
182
|
-
this.config.onSplit(task);
|
|
183
|
-
const splits = analysis.suggestedSplits || [];
|
|
184
|
-
const childTasks = [];
|
|
185
|
-
// 하위 태스크 생성
|
|
186
|
-
for (let i = 0; i < Math.min(splits.length, this.config.maxConcurrentChildren); i++) {
|
|
187
|
-
const childPrompt = this.createChildPrompt(splits[i], i + 1, splits.length);
|
|
188
|
-
const childTask = this.createTask(childPrompt, task.id, task.depth + 1);
|
|
189
|
-
this.tasks.set(childTask.id, childTask);
|
|
190
|
-
task.children.push(childTask.id);
|
|
191
|
-
childTasks.push(childTask);
|
|
192
|
-
}
|
|
193
|
-
// 병렬 실행
|
|
194
|
-
await Promise.all(childTasks.map(child => this.processTask(child)));
|
|
195
|
-
// 결과 병합
|
|
196
|
-
await this.mergeChildResults(task);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* 하위 프롬프트 생성
|
|
200
|
-
*/
|
|
201
|
-
createChildPrompt(content, index, total) {
|
|
202
|
-
return `[Part ${index}/${total}] ${content}`;
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* 하위 결과 병합
|
|
206
|
-
*/
|
|
207
|
-
async mergeChildResults(task) {
|
|
208
|
-
const childResults = [];
|
|
209
|
-
let allSuccess = true;
|
|
210
|
-
for (const childId of task.children) {
|
|
211
|
-
const child = this.tasks.get(childId);
|
|
212
|
-
if (child) {
|
|
213
|
-
if (child.status === 'completed' && child.result) {
|
|
214
|
-
childResults.push(`## Part ${task.children.indexOf(childId) + 1}\n${child.result.result}`);
|
|
215
|
-
}
|
|
216
|
-
else if (child.status === 'failed') {
|
|
217
|
-
allSuccess = false;
|
|
218
|
-
childResults.push(`## Part ${task.children.indexOf(childId) + 1}\n[FAILED] ${child.error || 'Unknown error'}`);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
task.status = allSuccess ? 'completed' : 'failed';
|
|
223
|
-
task.completedAt = Date.now();
|
|
224
|
-
task.result = {
|
|
225
|
-
agentName: `${this.config.agentName}-merged`,
|
|
226
|
-
sessionId: task.id,
|
|
227
|
-
result: childResults.join('\n\n'),
|
|
228
|
-
success: allSuccess,
|
|
229
|
-
duration: task.completedAt - (task.startedAt || task.createdAt)
|
|
230
|
-
};
|
|
231
|
-
this.config.onComplete(task, task.result);
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* 태스크 실행 (분할 없이) — 실패 시 자동 재시도
|
|
235
|
-
*/
|
|
236
|
-
async executeTask(task) {
|
|
237
|
-
const maxRetries = CONCURRENCY.MAX_RETRIES;
|
|
238
|
-
let attempt = 0;
|
|
239
|
-
while (attempt <= maxRetries) {
|
|
240
|
-
task.status = 'running';
|
|
241
|
-
if (attempt > 0) {
|
|
242
|
-
const delay = CONCURRENCY.RETRY_BASE_DELAY * Math.pow(2, attempt - 1);
|
|
243
|
-
warnLog(`[SwarmOrchestrator] Task ${task.id} retry ${attempt}/${maxRetries} after ${delay}ms`);
|
|
244
|
-
await this.sleep(delay);
|
|
245
|
-
}
|
|
246
|
-
const args = {
|
|
247
|
-
prompt: task.prompt,
|
|
248
|
-
agentName: `${this.config.agentName}-${task.depth}-${task.id.slice(-6)}`,
|
|
249
|
-
model: this.config.model,
|
|
250
|
-
projectPath: this.config.projectPath
|
|
251
|
-
};
|
|
252
|
-
// launch로 백그라운드 실행
|
|
253
|
-
const launchResult = launch(args);
|
|
254
|
-
task.taskId = launchResult.taskId;
|
|
255
|
-
// poll로 결과 대기 (TASK_TIMEOUT 이내)
|
|
256
|
-
const pollDeadline = Date.now() + CONCURRENCY.TASK_TIMEOUT;
|
|
257
|
-
let pollResult = await poll(launchResult.taskId);
|
|
258
|
-
while (pollResult.task?.status === 'pending' || pollResult.task?.status === 'running') {
|
|
259
|
-
if (Date.now() > pollDeadline) {
|
|
260
|
-
cancel(launchResult.taskId);
|
|
261
|
-
warnLog(`[SwarmOrchestrator] Task ${task.id} polling timed out (attempt ${attempt + 1})`);
|
|
262
|
-
break;
|
|
263
|
-
}
|
|
264
|
-
await this.sleep(500);
|
|
265
|
-
pollResult = await poll(launchResult.taskId);
|
|
266
|
-
}
|
|
267
|
-
if (pollResult.result?.success) {
|
|
268
|
-
task.result = pollResult.result;
|
|
269
|
-
task.status = 'completed';
|
|
270
|
-
break;
|
|
271
|
-
}
|
|
272
|
-
// 실패 — 재시도 가능 여부 확인
|
|
273
|
-
attempt++;
|
|
274
|
-
if (attempt > maxRetries) {
|
|
275
|
-
task.status = 'failed';
|
|
276
|
-
task.error = pollResult.result?.error || 'No result from agent (retries exhausted)';
|
|
277
|
-
warnLog(`[SwarmOrchestrator] Task ${task.id} exhausted ${maxRetries} retries`);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
task.completedAt = Date.now();
|
|
281
|
-
if (task.result) {
|
|
282
|
-
this.config.onComplete(task, task.result);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* 결과 수집
|
|
287
|
-
*/
|
|
288
|
-
collectResults(rootTaskId) {
|
|
289
|
-
const allTasks = Array.from(this.tasks.values());
|
|
290
|
-
const rootTask = this.tasks.get(rootTaskId);
|
|
291
|
-
let maxDepth = 0;
|
|
292
|
-
let splitCount = 0;
|
|
293
|
-
let successCount = 0;
|
|
294
|
-
let failureCount = 0;
|
|
295
|
-
for (const task of allTasks) {
|
|
296
|
-
maxDepth = Math.max(maxDepth, task.depth);
|
|
297
|
-
if (task.children.length > 0)
|
|
298
|
-
splitCount++;
|
|
299
|
-
if (task.status === 'completed')
|
|
300
|
-
successCount++;
|
|
301
|
-
if (task.status === 'failed')
|
|
302
|
-
failureCount++;
|
|
303
|
-
}
|
|
304
|
-
return {
|
|
305
|
-
rootTaskId,
|
|
306
|
-
tasks: allTasks,
|
|
307
|
-
totalDuration: Date.now() - this.startTime,
|
|
308
|
-
splitCount,
|
|
309
|
-
successCount,
|
|
310
|
-
failureCount,
|
|
311
|
-
maxDepthReached: maxDepth,
|
|
312
|
-
mergedResult: rootTask.result?.result || ''
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* 태스크 생성
|
|
317
|
-
*/
|
|
318
|
-
createTask(prompt, parentId, depth) {
|
|
319
|
-
return {
|
|
320
|
-
id: `swarm-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
321
|
-
parentId,
|
|
322
|
-
prompt,
|
|
323
|
-
depth,
|
|
324
|
-
status: 'pending',
|
|
325
|
-
children: [],
|
|
326
|
-
createdAt: Date.now()
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
sleep(ms) {
|
|
330
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
// ============================================
|
|
334
|
-
// 편의 함수
|
|
335
|
-
// ============================================
|
|
336
|
-
/**
|
|
337
|
-
* Swarm 패턴으로 복잡한 작업 실행
|
|
338
|
-
*
|
|
339
|
-
* @example
|
|
340
|
-
* import { swarm } from '@su-record/vibe/orchestrator';
|
|
341
|
-
*
|
|
342
|
-
* const result = await swarm({
|
|
343
|
-
* prompt: 'Implement login feature with: 1. UI form 2. Validation 3. API call 4. Error handling',
|
|
344
|
-
* maxDepth: 2,
|
|
345
|
-
* splitThreshold: 15,
|
|
346
|
-
* onSplit: (task) => console.log(`Splitting: ${task.id}`),
|
|
347
|
-
* });
|
|
348
|
-
*/
|
|
349
|
-
export async function swarm(config) {
|
|
350
|
-
const orchestrator = new SwarmOrchestrator(config);
|
|
351
|
-
const result = await orchestrator.execute();
|
|
352
|
-
const statusEmoji = result.failureCount === 0 ? '✅' : result.successCount > 0 ? '⚠️' : '❌';
|
|
353
|
-
let summary = `## Swarm Execution ${statusEmoji}\n\n`;
|
|
354
|
-
summary += `**Duration**: ${(result.totalDuration / 1000).toFixed(1)}s\n`;
|
|
355
|
-
summary += `**Tasks**: ${result.tasks.length} (${result.splitCount} splits)\n`;
|
|
356
|
-
summary += `**Max Depth**: ${result.maxDepthReached}/${config.maxDepth || 2}\n`;
|
|
357
|
-
summary += `**Success**: ${result.successCount}/${result.tasks.length}\n\n`;
|
|
358
|
-
if (result.mergedResult) {
|
|
359
|
-
summary += `### Result\n\n${result.mergedResult}`;
|
|
360
|
-
}
|
|
361
|
-
return {
|
|
362
|
-
content: [{ type: 'text', text: summary }],
|
|
363
|
-
swarmResult: result
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* 작업 복잡도 분석 (swarm 없이)
|
|
368
|
-
*
|
|
369
|
-
* @example
|
|
370
|
-
* const analysis = analyzeTaskComplexity('Implement login with validation and error handling');
|
|
371
|
-
* console.log(analysis.score); // 15
|
|
372
|
-
*/
|
|
373
|
-
export function analyzeTaskComplexity(prompt) {
|
|
374
|
-
const orchestrator = new SwarmOrchestrator({ prompt });
|
|
375
|
-
// @ts-expect-error - private method access for utility
|
|
376
|
-
return orchestrator.analyzeComplexity(prompt);
|
|
377
|
-
}
|
|
378
|
-
//# sourceMappingURL=SwarmOrchestrator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SwarmOrchestrator.js","sourceRoot":"","sources":["../../../src/infra/orchestrator/SwarmOrchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SwarmOrchestrator.test.d.ts","sourceRoot":"","sources":["../../../src/infra/orchestrator/SwarmOrchestrator.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SwarmOrchestrator 테스트
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
5
|
-
import { SwarmOrchestrator, analyzeTaskComplexity } from './SwarmOrchestrator.js';
|
|
6
|
-
describe('SwarmOrchestrator', () => {
|
|
7
|
-
describe('analyzeTaskComplexity', () => {
|
|
8
|
-
it('간단한 프롬프트는 낮은 복잡도', async () => {
|
|
9
|
-
const analysis = await analyzeTaskComplexity('Fix a typo in README');
|
|
10
|
-
expect(analysis.score).toBeLessThan(10);
|
|
11
|
-
});
|
|
12
|
-
it('복잡한 프롬프트는 높은 복잡도', async () => {
|
|
13
|
-
const complexPrompt = `
|
|
14
|
-
Implement a complete login feature:
|
|
15
|
-
1. Create the login form UI with React
|
|
16
|
-
2. Add form validation with Zod
|
|
17
|
-
3. Implement the API endpoint with authentication
|
|
18
|
-
4. Add error handling and loading states
|
|
19
|
-
5. Write unit tests for all components
|
|
20
|
-
6. Add security measures against CSRF
|
|
21
|
-
`;
|
|
22
|
-
const analysis = await analyzeTaskComplexity(complexPrompt);
|
|
23
|
-
expect(analysis.score).toBeGreaterThan(15);
|
|
24
|
-
expect(analysis.suggestedSplits?.length).toBeGreaterThan(1);
|
|
25
|
-
});
|
|
26
|
-
it('파일 언급이 많으면 복잡도 증가', async () => {
|
|
27
|
-
const prompt = 'Update login.ts, auth.ts, user.ts, session.ts, and middleware.ts';
|
|
28
|
-
const analysis = await analyzeTaskComplexity(prompt);
|
|
29
|
-
expect(analysis.factors).toContain('5-files');
|
|
30
|
-
});
|
|
31
|
-
it('숫자 목록은 분할 제안 생성', async () => {
|
|
32
|
-
const prompt = `
|
|
33
|
-
1. First do this task
|
|
34
|
-
2. Then do second task
|
|
35
|
-
3. Finally do third task
|
|
36
|
-
`;
|
|
37
|
-
const analysis = await analyzeTaskComplexity(prompt);
|
|
38
|
-
expect(analysis.suggestedSplits?.length).toBeGreaterThanOrEqual(2);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
describe('SwarmOrchestrator 인스턴스', () => {
|
|
42
|
-
it('기본 설정으로 생성', () => {
|
|
43
|
-
const orchestrator = new SwarmOrchestrator({
|
|
44
|
-
prompt: 'Test prompt'
|
|
45
|
-
});
|
|
46
|
-
expect(orchestrator).toBeDefined();
|
|
47
|
-
});
|
|
48
|
-
it('커스텀 설정으로 생성', () => {
|
|
49
|
-
const onSplit = vi.fn();
|
|
50
|
-
const onComplete = vi.fn();
|
|
51
|
-
const orchestrator = new SwarmOrchestrator({
|
|
52
|
-
prompt: 'Test prompt',
|
|
53
|
-
agentName: 'test-agent',
|
|
54
|
-
maxDepth: 3,
|
|
55
|
-
splitThreshold: 20,
|
|
56
|
-
maxConcurrentChildren: 3,
|
|
57
|
-
onSplit,
|
|
58
|
-
onComplete,
|
|
59
|
-
timeout: 60000
|
|
60
|
-
});
|
|
61
|
-
expect(orchestrator).toBeDefined();
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('분할 로직', () => {
|
|
65
|
-
it('maxDepth 도달 시 분할 안함', async () => {
|
|
66
|
-
// maxDepth: 0으로 설정하면 분할하지 않음
|
|
67
|
-
const orchestrator = new SwarmOrchestrator({
|
|
68
|
-
prompt: `
|
|
69
|
-
1. Task one
|
|
70
|
-
2. Task two
|
|
71
|
-
3. Task three
|
|
72
|
-
`,
|
|
73
|
-
maxDepth: 0
|
|
74
|
-
});
|
|
75
|
-
// shouldSplit가 false 반환 확인 (내부 로직)
|
|
76
|
-
// @ts-expect-error - private method access for testing
|
|
77
|
-
const task = orchestrator.createTask('test', null, 0);
|
|
78
|
-
// @ts-expect-error - private method access for testing
|
|
79
|
-
const shouldSplit = orchestrator.shouldSplit(task, { score: 50, factors: [], suggestedSplits: ['a', 'b'] });
|
|
80
|
-
expect(shouldSplit).toBe(false);
|
|
81
|
-
});
|
|
82
|
-
it('splitThreshold 미만이면 분할 안함', async () => {
|
|
83
|
-
const orchestrator = new SwarmOrchestrator({
|
|
84
|
-
prompt: 'Simple task',
|
|
85
|
-
splitThreshold: 100
|
|
86
|
-
});
|
|
87
|
-
// @ts-expect-error - private method access for testing
|
|
88
|
-
const task = orchestrator.createTask('test', null, 0);
|
|
89
|
-
// @ts-expect-error - private method access for testing
|
|
90
|
-
const shouldSplit = orchestrator.shouldSplit(task, { score: 50, factors: [], suggestedSplits: ['a', 'b'] });
|
|
91
|
-
expect(shouldSplit).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=SwarmOrchestrator.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SwarmOrchestrator.test.js","sourceRoot":"","sources":["../../../src/infra/orchestrator/SwarmOrchestrator.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAElF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;YACrE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,aAAa,GAAG;;;;;;;;OAQrB,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,MAAM,GAAG,kEAAkE,CAAC;YAClF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,MAAM,GAAG;;;;OAId,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpB,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC;gBACzC,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YACH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC;gBACzC,MAAM,EAAE,aAAa;gBACrB,SAAS,EAAE,YAAY;gBACvB,QAAQ,EAAE,CAAC;gBACX,cAAc,EAAE,EAAE;gBAClB,qBAAqB,EAAE,CAAC;gBACxB,OAAO;gBACP,UAAU;gBACV,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,6BAA6B;YAC7B,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC;gBACzC,MAAM,EAAE;;;;SAIP;gBACD,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;YAEH,mCAAmC;YACnC,uDAAuD;YACvD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,uDAAuD;YACvD,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5G,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC;gBACzC,MAAM,EAAE,aAAa;gBACrB,cAAc,EAAE,GAAG;aACpB,CAAC,CAAC;YAEH,uDAAuD;YACvD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,uDAAuD;YACvD,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5G,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Discovery - .codex/.claude/agents 폴더에서 에이전트 동적 탐색
|
|
3
|
-
*/
|
|
4
|
-
import { DiscoveredAgent, AgentDiscoveryArgs } from './types.js';
|
|
5
|
-
import { ToolResult } from '../types/tool.js';
|
|
6
|
-
/**
|
|
7
|
-
* 에이전트 마크다운 파일에서 메타데이터 추출
|
|
8
|
-
*/
|
|
9
|
-
export declare function parseAgentMarkdown(content: string, filePath: string): Partial<DiscoveredAgent>;
|
|
10
|
-
/**
|
|
11
|
-
* 카테고리 추출 (폴더명 기반)
|
|
12
|
-
*/
|
|
13
|
-
export declare function extractCategory(filePath: string, basePath: string): string;
|
|
14
|
-
/**
|
|
15
|
-
* 에이전트 동적 탐색
|
|
16
|
-
*/
|
|
17
|
-
export declare function discoverAgents(args: AgentDiscoveryArgs): Promise<ToolResult>;
|
|
18
|
-
/**
|
|
19
|
-
* 특정 에이전트 로드
|
|
20
|
-
*/
|
|
21
|
-
export declare function loadAgent(agentName: string, projectPath?: string): Promise<DiscoveredAgent | null>;
|
|
22
|
-
/**
|
|
23
|
-
* 카테고리별 에이전트 목록
|
|
24
|
-
*/
|
|
25
|
-
export declare function listAgentsByCategory(category: string, projectPath?: string): Promise<DiscoveredAgent[]>;
|
|
26
|
-
//# sourceMappingURL=agentDiscovery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agentDiscovery.d.ts","sourceRoot":"","sources":["../../../src/infra/orchestrator/agentDiscovery.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAM9C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA4B9F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU1E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0GlF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAYvH;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAQ5H"}
|