tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__py3-none-any.whl
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.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,510 +1,510 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Intent Parser - Parse natural language input into structured intents.
|
|
3
|
-
|
|
4
|
-
Maps user commands to agent sequences using keyword matching and
|
|
5
|
-
simple NLP patterns.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
import re
|
|
9
|
-
from dataclasses import dataclass
|
|
10
|
-
from enum import Enum
|
|
11
|
-
from typing import Any
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class IntentType(Enum):
|
|
15
|
-
"""Types of user intents."""
|
|
16
|
-
|
|
17
|
-
BUILD = "build"
|
|
18
|
-
VALIDATE = "validate" # Validation workflow for comparing implementations
|
|
19
|
-
REVIEW = "review"
|
|
20
|
-
FIX = "fix"
|
|
21
|
-
TEST = "test"
|
|
22
|
-
EPIC = "epic"
|
|
23
|
-
EXPLORE = "explore"
|
|
24
|
-
REFACTOR = "refactor"
|
|
25
|
-
PLAN_ANALYSIS = "plan-analysis"
|
|
26
|
-
PR = "pr"
|
|
27
|
-
REQUIREMENTS = "requirements"
|
|
28
|
-
BROWNFIELD = "brownfield"
|
|
29
|
-
ENHANCE = "enhance" # §3.4: first-class *enhance
|
|
30
|
-
BREAKDOWN = "breakdown" # §3.4: first-class *breakdown
|
|
31
|
-
TODO = "todo" # §3.5: *todo (Beads-backed)
|
|
32
|
-
UNKNOWN = "unknown"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@dataclass
|
|
36
|
-
class Intent:
|
|
37
|
-
"""Structured intent parsed from user input."""
|
|
38
|
-
|
|
39
|
-
type: IntentType
|
|
40
|
-
confidence: float
|
|
41
|
-
parameters: dict[str, Any]
|
|
42
|
-
original_input: str
|
|
43
|
-
compare_to_codebase: bool = False # Flag for "compare to codebase" intent
|
|
44
|
-
|
|
45
|
-
def get_agent_sequence(self) -> list[str]:
|
|
46
|
-
"""Get the sequence of agents for this intent."""
|
|
47
|
-
if self.type == IntentType.BUILD:
|
|
48
|
-
return ["planner", "architect", "designer", "implementer"]
|
|
49
|
-
elif self.type == IntentType.REVIEW:
|
|
50
|
-
return ["reviewer", "improver"]
|
|
51
|
-
elif self.type == IntentType.FIX:
|
|
52
|
-
return ["debugger", "implementer", "tester"]
|
|
53
|
-
elif self.type == IntentType.TEST:
|
|
54
|
-
return ["tester"]
|
|
55
|
-
elif self.type == IntentType.EPIC:
|
|
56
|
-
return ["epic-orchestrator"]
|
|
57
|
-
elif self.type == IntentType.EXPLORE:
|
|
58
|
-
return ["analyst", "reviewer"]
|
|
59
|
-
elif self.type == IntentType.REFACTOR:
|
|
60
|
-
return ["reviewer", "architect", "implementer", "tester"]
|
|
61
|
-
elif self.type == IntentType.PLAN_ANALYSIS:
|
|
62
|
-
return ["analyst", "architect", "reviewer"]
|
|
63
|
-
elif self.type == IntentType.PR:
|
|
64
|
-
return ["reviewer", "documenter"]
|
|
65
|
-
elif self.type == IntentType.REQUIREMENTS:
|
|
66
|
-
return ["analyst", "planner", "documenter"]
|
|
67
|
-
elif self.type == IntentType.BROWNFIELD:
|
|
68
|
-
return ["brownfield-review"]
|
|
69
|
-
elif self.type == IntentType.ENHANCE:
|
|
70
|
-
return ["enhancer"]
|
|
71
|
-
elif self.type == IntentType.BREAKDOWN:
|
|
72
|
-
return ["planner"]
|
|
73
|
-
elif self.type == IntentType.TODO:
|
|
74
|
-
return ["beads"]
|
|
75
|
-
else:
|
|
76
|
-
return []
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
class IntentParser:
|
|
80
|
-
"""Parse natural language input into structured intents."""
|
|
81
|
-
|
|
82
|
-
def __init__(self):
|
|
83
|
-
"""Initialize the intent parser with keyword mappings."""
|
|
84
|
-
# Build intent keywords
|
|
85
|
-
self.build_keywords = [
|
|
86
|
-
"build",
|
|
87
|
-
"create",
|
|
88
|
-
"make",
|
|
89
|
-
"generate",
|
|
90
|
-
"add",
|
|
91
|
-
"implement",
|
|
92
|
-
"develop",
|
|
93
|
-
"write",
|
|
94
|
-
"new",
|
|
95
|
-
"feature",
|
|
96
|
-
]
|
|
97
|
-
|
|
98
|
-
# Review intent keywords
|
|
99
|
-
self.review_keywords = [
|
|
100
|
-
"review",
|
|
101
|
-
"check",
|
|
102
|
-
"analyze",
|
|
103
|
-
"inspect",
|
|
104
|
-
"examine",
|
|
105
|
-
"score",
|
|
106
|
-
"quality",
|
|
107
|
-
"audit",
|
|
108
|
-
"assess",
|
|
109
|
-
"evaluate",
|
|
110
|
-
"compare",
|
|
111
|
-
"compare to",
|
|
112
|
-
"match",
|
|
113
|
-
"align with",
|
|
114
|
-
"follow patterns",
|
|
115
|
-
]
|
|
116
|
-
|
|
117
|
-
# Fix intent keywords
|
|
118
|
-
self.fix_keywords = [
|
|
119
|
-
"fix",
|
|
120
|
-
"repair",
|
|
121
|
-
"resolve",
|
|
122
|
-
"debug",
|
|
123
|
-
"error",
|
|
124
|
-
"bug",
|
|
125
|
-
"issue",
|
|
126
|
-
"problem",
|
|
127
|
-
"broken",
|
|
128
|
-
"correct",
|
|
129
|
-
]
|
|
130
|
-
|
|
131
|
-
# Test intent keywords
|
|
132
|
-
self.test_keywords = [
|
|
133
|
-
"test",
|
|
134
|
-
"verify",
|
|
135
|
-
"validate",
|
|
136
|
-
"coverage",
|
|
137
|
-
"testing",
|
|
138
|
-
"tests",
|
|
139
|
-
"unit test",
|
|
140
|
-
"integration test",
|
|
141
|
-
]
|
|
142
|
-
|
|
143
|
-
# Epic intent keywords
|
|
144
|
-
self.epic_keywords = [
|
|
145
|
-
"epic",
|
|
146
|
-
"implement epic",
|
|
147
|
-
"execute epic",
|
|
148
|
-
"run epic",
|
|
149
|
-
"story",
|
|
150
|
-
"stories",
|
|
151
|
-
]
|
|
152
|
-
|
|
153
|
-
# Explore intent keywords
|
|
154
|
-
self.explore_keywords = [
|
|
155
|
-
"explore",
|
|
156
|
-
"understand",
|
|
157
|
-
"navigate",
|
|
158
|
-
"find",
|
|
159
|
-
"discover",
|
|
160
|
-
"overview",
|
|
161
|
-
"codebase",
|
|
162
|
-
"trace",
|
|
163
|
-
"search",
|
|
164
|
-
"locate",
|
|
165
|
-
]
|
|
166
|
-
|
|
167
|
-
# Refactor intent keywords
|
|
168
|
-
self.refactor_keywords = [
|
|
169
|
-
"refactor",
|
|
170
|
-
"modernize",
|
|
171
|
-
"update",
|
|
172
|
-
"improve code",
|
|
173
|
-
"modernize code",
|
|
174
|
-
"legacy",
|
|
175
|
-
"deprecated",
|
|
176
|
-
"upgrade code",
|
|
177
|
-
]
|
|
178
|
-
|
|
179
|
-
# Plan Analysis intent keywords
|
|
180
|
-
self.plan_analysis_keywords = [
|
|
181
|
-
"plan",
|
|
182
|
-
"planning",
|
|
183
|
-
"analyze",
|
|
184
|
-
"analysis",
|
|
185
|
-
"design",
|
|
186
|
-
"proposal",
|
|
187
|
-
"strategy",
|
|
188
|
-
"roadmap",
|
|
189
|
-
]
|
|
190
|
-
|
|
191
|
-
# PR intent keywords
|
|
192
|
-
self.pr_keywords = [
|
|
193
|
-
"pr",
|
|
194
|
-
"pull request",
|
|
195
|
-
"create pr",
|
|
196
|
-
"open pr",
|
|
197
|
-
"merge request",
|
|
198
|
-
"mr",
|
|
199
|
-
]
|
|
200
|
-
|
|
201
|
-
# Requirements intent keywords
|
|
202
|
-
self.requirements_keywords = [
|
|
203
|
-
"requirements",
|
|
204
|
-
"gather requirements",
|
|
205
|
-
"extract requirements",
|
|
206
|
-
"document requirements",
|
|
207
|
-
"analyze requirements",
|
|
208
|
-
"requirements document",
|
|
209
|
-
"requirements gathering",
|
|
210
|
-
"requirements analysis",
|
|
211
|
-
]
|
|
212
|
-
|
|
213
|
-
# Brownfield intent keywords
|
|
214
|
-
self.brownfield_keywords = [
|
|
215
|
-
"brownfield",
|
|
216
|
-
"brownfield review",
|
|
217
|
-
"review brownfield",
|
|
218
|
-
"analyze brownfield",
|
|
219
|
-
"brownfield system",
|
|
220
|
-
"review system",
|
|
221
|
-
"analyze project",
|
|
222
|
-
"create experts",
|
|
223
|
-
"auto experts",
|
|
224
|
-
"expert creation",
|
|
225
|
-
"populate rag",
|
|
226
|
-
"fill rag",
|
|
227
|
-
]
|
|
228
|
-
|
|
229
|
-
# Simple Mode intent keywords
|
|
230
|
-
self.simple_mode_keywords = [
|
|
231
|
-
"@simple-mode",
|
|
232
|
-
"simple mode",
|
|
233
|
-
"use simple mode",
|
|
234
|
-
"simple-mode",
|
|
235
|
-
"@simple_mode",
|
|
236
|
-
"simple_mode",
|
|
237
|
-
]
|
|
238
|
-
|
|
239
|
-
def detect_simple_mode_intent(self, text: str) -> bool:
|
|
240
|
-
"""
|
|
241
|
-
Detect if user wants Simple Mode.
|
|
242
|
-
|
|
243
|
-
Args:
|
|
244
|
-
text: User input text
|
|
245
|
-
|
|
246
|
-
Returns:
|
|
247
|
-
True if Simple Mode intent detected, False otherwise
|
|
248
|
-
|
|
249
|
-
Examples:
|
|
250
|
-
>>> parser = IntentParser()
|
|
251
|
-
>>> parser.detect_simple_mode_intent("@simple-mode build feature")
|
|
252
|
-
True
|
|
253
|
-
>>> parser.detect_simple_mode_intent("use simple mode to create api")
|
|
254
|
-
True
|
|
255
|
-
>>> parser.detect_simple_mode_intent("build feature")
|
|
256
|
-
False
|
|
257
|
-
"""
|
|
258
|
-
text_lower = text.lower()
|
|
259
|
-
return any(keyword in text_lower for keyword in self.simple_mode_keywords)
|
|
260
|
-
|
|
261
|
-
def parse(self, input_text: str) -> Intent:
|
|
262
|
-
"""
|
|
263
|
-
Parse natural language input into a structured intent.
|
|
264
|
-
|
|
265
|
-
Args:
|
|
266
|
-
input_text: User's natural language command
|
|
267
|
-
|
|
268
|
-
Returns:
|
|
269
|
-
Intent object with type, confidence, and parameters
|
|
270
|
-
"""
|
|
271
|
-
input_lower = input_text.lower().strip()
|
|
272
|
-
|
|
273
|
-
# Extract parameters
|
|
274
|
-
parameters = self._extract_parameters(input_text)
|
|
275
|
-
|
|
276
|
-
# Check for Simple Mode intent first
|
|
277
|
-
if self.detect_simple_mode_intent(input_text):
|
|
278
|
-
# Force Simple Mode workflow
|
|
279
|
-
parameters["force_simple_mode"] = True
|
|
280
|
-
|
|
281
|
-
# Check for explicit command patterns
|
|
282
|
-
if input_text.strip().startswith("*epic") or input_text.strip().startswith("@simple-mode *epic"):
|
|
283
|
-
# Extract epic path
|
|
284
|
-
epic_path = input_text.replace("*epic", "").replace("@simple-mode", "").strip()
|
|
285
|
-
if epic_path:
|
|
286
|
-
parameters["epic_path"] = epic_path
|
|
287
|
-
return Intent(
|
|
288
|
-
type=IntentType.EPIC,
|
|
289
|
-
confidence=1.0,
|
|
290
|
-
parameters=parameters,
|
|
291
|
-
original_input=input_text,
|
|
292
|
-
)
|
|
293
|
-
|
|
294
|
-
if input_text.strip().startswith("*explore") or input_text.strip().startswith("@simple-mode *explore"):
|
|
295
|
-
return Intent(
|
|
296
|
-
type=IntentType.EXPLORE,
|
|
297
|
-
confidence=1.0,
|
|
298
|
-
parameters=parameters,
|
|
299
|
-
original_input=input_text,
|
|
300
|
-
)
|
|
301
|
-
|
|
302
|
-
if input_text.strip().startswith("*validate") or input_text.strip().startswith("@simple-mode *validate"):
|
|
303
|
-
return Intent(
|
|
304
|
-
type=IntentType.VALIDATE,
|
|
305
|
-
confidence=1.0,
|
|
306
|
-
parameters=parameters,
|
|
307
|
-
original_input=input_text,
|
|
308
|
-
)
|
|
309
|
-
|
|
310
|
-
if input_text.strip().startswith("*refactor") or input_text.strip().startswith("@simple-mode *refactor"):
|
|
311
|
-
return Intent(
|
|
312
|
-
type=IntentType.REFACTOR,
|
|
313
|
-
confidence=1.0,
|
|
314
|
-
parameters=parameters,
|
|
315
|
-
original_input=input_text,
|
|
316
|
-
)
|
|
317
|
-
|
|
318
|
-
if input_text.strip().startswith("*plan") or input_text.strip().startswith("@simple-mode *plan") or "plan-analysis" in input_lower:
|
|
319
|
-
return Intent(
|
|
320
|
-
type=IntentType.PLAN_ANALYSIS,
|
|
321
|
-
confidence=1.0,
|
|
322
|
-
parameters=parameters,
|
|
323
|
-
original_input=input_text,
|
|
324
|
-
)
|
|
325
|
-
|
|
326
|
-
if input_text.strip().startswith("*pr") or input_text.strip().startswith("@simple-mode *pr") or "pull request" in input_lower:
|
|
327
|
-
return Intent(
|
|
328
|
-
type=IntentType.PR,
|
|
329
|
-
confidence=1.0,
|
|
330
|
-
parameters=parameters,
|
|
331
|
-
original_input=input_text,
|
|
332
|
-
)
|
|
333
|
-
|
|
334
|
-
if input_text.strip().startswith("*brownfield") or input_text.strip().startswith("*brownfield-review") or input_text.strip().startswith("@simple-mode *brownfield"):
|
|
335
|
-
return Intent(
|
|
336
|
-
type=IntentType.BROWNFIELD,
|
|
337
|
-
confidence=1.0,
|
|
338
|
-
parameters=parameters,
|
|
339
|
-
original_input=input_text,
|
|
340
|
-
)
|
|
341
|
-
|
|
342
|
-
# *enhance and *breakdown (§3.4)
|
|
343
|
-
if input_text.strip().startswith("*enhance") or input_text.strip().startswith("@simple-mode *enhance"):
|
|
344
|
-
prompt = (parameters.get("description") or re.sub(r"^(@simple-mode\s*)?\*enhance\s*", "", input_text, flags=re.I).strip() or input_text)
|
|
345
|
-
parameters["prompt"] = prompt
|
|
346
|
-
return Intent(type=IntentType.ENHANCE, confidence=1.0, parameters=parameters, original_input=input_text)
|
|
347
|
-
if input_text.strip().startswith("*breakdown") or input_text.strip().startswith("@simple-mode *breakdown"):
|
|
348
|
-
prompt = (parameters.get("description") or re.sub(r"^(@simple-mode\s*)?\*breakdown\s*", "", input_text, flags=re.I).strip() or input_text)
|
|
349
|
-
parameters["prompt"] = prompt
|
|
350
|
-
return Intent(type=IntentType.BREAKDOWN, confidence=1.0, parameters=parameters, original_input=input_text)
|
|
351
|
-
|
|
352
|
-
# *todo (§3.5) – remainder forwarded to bd
|
|
353
|
-
if input_text.strip().startswith("*todo") or input_text.strip().startswith("@simple-mode *todo"):
|
|
354
|
-
rest = re.sub(r"^(@simple-mode\s*)?\*todo\s*", "", input_text.strip(), flags=re.I).strip()
|
|
355
|
-
parameters["todo_rest"] = rest
|
|
356
|
-
return Intent(type=IntentType.TODO, confidence=1.0, parameters=parameters, original_input=input_text)
|
|
357
|
-
|
|
358
|
-
# Score each intent type
|
|
359
|
-
scores = {
|
|
360
|
-
IntentType.BUILD: self._score_intent(input_lower, self.build_keywords),
|
|
361
|
-
IntentType.REVIEW: self._score_intent(input_lower, self.review_keywords),
|
|
362
|
-
IntentType.FIX: self._score_intent(input_lower, self.fix_keywords),
|
|
363
|
-
IntentType.TEST: self._score_intent(input_lower, self.test_keywords),
|
|
364
|
-
IntentType.EPIC: self._score_intent(input_lower, self.epic_keywords),
|
|
365
|
-
IntentType.EXPLORE: self._score_intent(input_lower, self.explore_keywords),
|
|
366
|
-
IntentType.REFACTOR: self._score_intent(input_lower, self.refactor_keywords),
|
|
367
|
-
IntentType.PLAN_ANALYSIS: self._score_intent(input_lower, self.plan_analysis_keywords),
|
|
368
|
-
IntentType.PR: self._score_intent(input_lower, self.pr_keywords),
|
|
369
|
-
IntentType.REQUIREMENTS: self._score_intent(input_lower, self.requirements_keywords),
|
|
370
|
-
IntentType.BROWNFIELD: self._score_intent(input_lower, self.brownfield_keywords),
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
# Find best match
|
|
374
|
-
best_intent = max(scores.items(), key=lambda x: x[1])
|
|
375
|
-
intent_type, confidence = best_intent
|
|
376
|
-
|
|
377
|
-
# If confidence is too low, mark as unknown
|
|
378
|
-
if confidence < 0.3:
|
|
379
|
-
intent_type = IntentType.UNKNOWN
|
|
380
|
-
confidence = 0.0
|
|
381
|
-
|
|
382
|
-
# Detect "compare to codebase" intent with enhanced semantics
|
|
383
|
-
compare_to_codebase = False
|
|
384
|
-
compare_phrases = [
|
|
385
|
-
# Direct compare phrases
|
|
386
|
-
"compare to",
|
|
387
|
-
"compare with",
|
|
388
|
-
"compare against",
|
|
389
|
-
"compare this to",
|
|
390
|
-
"compare this with",
|
|
391
|
-
"compare to codebase",
|
|
392
|
-
"compare to our",
|
|
393
|
-
"compare to project",
|
|
394
|
-
# Match/align phrases
|
|
395
|
-
"match our",
|
|
396
|
-
"match the",
|
|
397
|
-
"match patterns",
|
|
398
|
-
"match codebase",
|
|
399
|
-
"align with",
|
|
400
|
-
"align to",
|
|
401
|
-
"follow patterns",
|
|
402
|
-
"follow our patterns",
|
|
403
|
-
"follow project patterns",
|
|
404
|
-
# Make match phrases (implicit compare)
|
|
405
|
-
"make match",
|
|
406
|
-
"make this match",
|
|
407
|
-
"make it match",
|
|
408
|
-
# Consistency phrases
|
|
409
|
-
"consistent with",
|
|
410
|
-
"consistency with",
|
|
411
|
-
"conform to",
|
|
412
|
-
"conform with",
|
|
413
|
-
# Standard phrases
|
|
414
|
-
"match standards",
|
|
415
|
-
"follow standards",
|
|
416
|
-
"meet standards",
|
|
417
|
-
"adhere to",
|
|
418
|
-
]
|
|
419
|
-
if any(phrase in input_lower for phrase in compare_phrases):
|
|
420
|
-
compare_to_codebase = True
|
|
421
|
-
|
|
422
|
-
return Intent(
|
|
423
|
-
type=intent_type,
|
|
424
|
-
confidence=confidence,
|
|
425
|
-
parameters=parameters,
|
|
426
|
-
original_input=input_text,
|
|
427
|
-
compare_to_codebase=compare_to_codebase,
|
|
428
|
-
)
|
|
429
|
-
|
|
430
|
-
def _score_intent(self, text: str, keywords: list[str]) -> float:
|
|
431
|
-
"""
|
|
432
|
-
Score how well text matches an intent based on keywords.
|
|
433
|
-
|
|
434
|
-
Args:
|
|
435
|
-
text: Lowercase input text
|
|
436
|
-
keywords: List of keywords for this intent
|
|
437
|
-
|
|
438
|
-
Returns:
|
|
439
|
-
Confidence score between 0.0 and 1.0
|
|
440
|
-
"""
|
|
441
|
-
matches = sum(1 for keyword in keywords if keyword in text)
|
|
442
|
-
if not matches:
|
|
443
|
-
return 0.0
|
|
444
|
-
|
|
445
|
-
# Normalize by number of keywords (max score is 1.0)
|
|
446
|
-
score = min(matches / len(keywords) * 2.0, 1.0)
|
|
447
|
-
|
|
448
|
-
# Boost score if keyword appears at start of sentence
|
|
449
|
-
for keyword in keywords:
|
|
450
|
-
if text.startswith(keyword):
|
|
451
|
-
score = min(score + 0.2, 1.0)
|
|
452
|
-
break
|
|
453
|
-
|
|
454
|
-
return score
|
|
455
|
-
|
|
456
|
-
def _extract_parameters(self, text: str) -> dict[str, Any]:
|
|
457
|
-
"""
|
|
458
|
-
Extract parameters from user input.
|
|
459
|
-
|
|
460
|
-
Args:
|
|
461
|
-
text: User input text
|
|
462
|
-
|
|
463
|
-
Returns:
|
|
464
|
-
Dictionary of extracted parameters
|
|
465
|
-
"""
|
|
466
|
-
parameters: dict[str, Any] = {}
|
|
467
|
-
|
|
468
|
-
# Extract file paths (quoted strings or common file extensions)
|
|
469
|
-
file_pattern = r'["\']?([^\s"\']+\.(py|ts|js|tsx|jsx|java|go|rs|rb|php|cs|sql|yaml|yml|json|md|txt))["\']?'
|
|
470
|
-
file_matches = re.findall(file_pattern, text, re.IGNORECASE)
|
|
471
|
-
if file_matches:
|
|
472
|
-
parameters["files"] = [match[0] for match in file_matches]
|
|
473
|
-
|
|
474
|
-
# Extract quoted descriptions
|
|
475
|
-
quoted_pattern = r'["\']([^"\']+)["\']'
|
|
476
|
-
quoted_matches = re.findall(quoted_pattern, text)
|
|
477
|
-
if quoted_matches:
|
|
478
|
-
parameters["description"] = quoted_matches[0]
|
|
479
|
-
|
|
480
|
-
# Extract Epic document paths (epic-*.md or docs/prd/epic-*.md)
|
|
481
|
-
epic_pattern = r'(?:epic-[\w-]+\.md|docs/prd/epic-[\w-]+\.md|[\w/]+epic[\w-]*\.md)'
|
|
482
|
-
epic_matches = re.findall(epic_pattern, text, re.IGNORECASE)
|
|
483
|
-
if epic_matches:
|
|
484
|
-
parameters["epic_path"] = epic_matches[0]
|
|
485
|
-
|
|
486
|
-
# Extract feature/functionality mentions
|
|
487
|
-
feature_patterns = [
|
|
488
|
-
r"(?:add|create|build|implement)\s+(?:a\s+)?([a-z\s]+?)(?:\s+for|\s+in|\s+with|$)",
|
|
489
|
-
r"feature[:\s]+([a-z\s]+?)(?:\s+for|\s+in|\s+with|$)",
|
|
490
|
-
]
|
|
491
|
-
for pattern in feature_patterns:
|
|
492
|
-
match = re.search(pattern, text.lower())
|
|
493
|
-
if match:
|
|
494
|
-
parameters["feature"] = match.group(1).strip()
|
|
495
|
-
break
|
|
496
|
-
|
|
497
|
-
return parameters
|
|
498
|
-
|
|
499
|
-
def get_agent_sequence(self, intent: Intent) -> list[str]:
|
|
500
|
-
"""
|
|
501
|
-
Get the sequence of agents for an intent.
|
|
502
|
-
|
|
503
|
-
Args:
|
|
504
|
-
intent: Parsed intent
|
|
505
|
-
|
|
506
|
-
Returns:
|
|
507
|
-
List of agent names in execution order
|
|
508
|
-
"""
|
|
509
|
-
return intent.get_agent_sequence()
|
|
510
|
-
|
|
1
|
+
"""
|
|
2
|
+
Intent Parser - Parse natural language input into structured intents.
|
|
3
|
+
|
|
4
|
+
Maps user commands to agent sequences using keyword matching and
|
|
5
|
+
simple NLP patterns.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import re
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from enum import Enum
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class IntentType(Enum):
|
|
15
|
+
"""Types of user intents."""
|
|
16
|
+
|
|
17
|
+
BUILD = "build"
|
|
18
|
+
VALIDATE = "validate" # Validation workflow for comparing implementations
|
|
19
|
+
REVIEW = "review"
|
|
20
|
+
FIX = "fix"
|
|
21
|
+
TEST = "test"
|
|
22
|
+
EPIC = "epic"
|
|
23
|
+
EXPLORE = "explore"
|
|
24
|
+
REFACTOR = "refactor"
|
|
25
|
+
PLAN_ANALYSIS = "plan-analysis"
|
|
26
|
+
PR = "pr"
|
|
27
|
+
REQUIREMENTS = "requirements"
|
|
28
|
+
BROWNFIELD = "brownfield"
|
|
29
|
+
ENHANCE = "enhance" # §3.4: first-class *enhance
|
|
30
|
+
BREAKDOWN = "breakdown" # §3.4: first-class *breakdown
|
|
31
|
+
TODO = "todo" # §3.5: *todo (Beads-backed)
|
|
32
|
+
UNKNOWN = "unknown"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass
|
|
36
|
+
class Intent:
|
|
37
|
+
"""Structured intent parsed from user input."""
|
|
38
|
+
|
|
39
|
+
type: IntentType
|
|
40
|
+
confidence: float
|
|
41
|
+
parameters: dict[str, Any]
|
|
42
|
+
original_input: str
|
|
43
|
+
compare_to_codebase: bool = False # Flag for "compare to codebase" intent
|
|
44
|
+
|
|
45
|
+
def get_agent_sequence(self) -> list[str]:
|
|
46
|
+
"""Get the sequence of agents for this intent."""
|
|
47
|
+
if self.type == IntentType.BUILD:
|
|
48
|
+
return ["planner", "architect", "designer", "implementer"]
|
|
49
|
+
elif self.type == IntentType.REVIEW:
|
|
50
|
+
return ["reviewer", "improver"]
|
|
51
|
+
elif self.type == IntentType.FIX:
|
|
52
|
+
return ["debugger", "implementer", "tester"]
|
|
53
|
+
elif self.type == IntentType.TEST:
|
|
54
|
+
return ["tester"]
|
|
55
|
+
elif self.type == IntentType.EPIC:
|
|
56
|
+
return ["epic-orchestrator"]
|
|
57
|
+
elif self.type == IntentType.EXPLORE:
|
|
58
|
+
return ["analyst", "reviewer"]
|
|
59
|
+
elif self.type == IntentType.REFACTOR:
|
|
60
|
+
return ["reviewer", "architect", "implementer", "tester"]
|
|
61
|
+
elif self.type == IntentType.PLAN_ANALYSIS:
|
|
62
|
+
return ["analyst", "architect", "reviewer"]
|
|
63
|
+
elif self.type == IntentType.PR:
|
|
64
|
+
return ["reviewer", "documenter"]
|
|
65
|
+
elif self.type == IntentType.REQUIREMENTS:
|
|
66
|
+
return ["analyst", "planner", "documenter"]
|
|
67
|
+
elif self.type == IntentType.BROWNFIELD:
|
|
68
|
+
return ["brownfield-review"]
|
|
69
|
+
elif self.type == IntentType.ENHANCE:
|
|
70
|
+
return ["enhancer"]
|
|
71
|
+
elif self.type == IntentType.BREAKDOWN:
|
|
72
|
+
return ["planner"]
|
|
73
|
+
elif self.type == IntentType.TODO:
|
|
74
|
+
return ["beads"]
|
|
75
|
+
else:
|
|
76
|
+
return []
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class IntentParser:
|
|
80
|
+
"""Parse natural language input into structured intents."""
|
|
81
|
+
|
|
82
|
+
def __init__(self):
|
|
83
|
+
"""Initialize the intent parser with keyword mappings."""
|
|
84
|
+
# Build intent keywords
|
|
85
|
+
self.build_keywords = [
|
|
86
|
+
"build",
|
|
87
|
+
"create",
|
|
88
|
+
"make",
|
|
89
|
+
"generate",
|
|
90
|
+
"add",
|
|
91
|
+
"implement",
|
|
92
|
+
"develop",
|
|
93
|
+
"write",
|
|
94
|
+
"new",
|
|
95
|
+
"feature",
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
# Review intent keywords
|
|
99
|
+
self.review_keywords = [
|
|
100
|
+
"review",
|
|
101
|
+
"check",
|
|
102
|
+
"analyze",
|
|
103
|
+
"inspect",
|
|
104
|
+
"examine",
|
|
105
|
+
"score",
|
|
106
|
+
"quality",
|
|
107
|
+
"audit",
|
|
108
|
+
"assess",
|
|
109
|
+
"evaluate",
|
|
110
|
+
"compare",
|
|
111
|
+
"compare to",
|
|
112
|
+
"match",
|
|
113
|
+
"align with",
|
|
114
|
+
"follow patterns",
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
# Fix intent keywords
|
|
118
|
+
self.fix_keywords = [
|
|
119
|
+
"fix",
|
|
120
|
+
"repair",
|
|
121
|
+
"resolve",
|
|
122
|
+
"debug",
|
|
123
|
+
"error",
|
|
124
|
+
"bug",
|
|
125
|
+
"issue",
|
|
126
|
+
"problem",
|
|
127
|
+
"broken",
|
|
128
|
+
"correct",
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
# Test intent keywords
|
|
132
|
+
self.test_keywords = [
|
|
133
|
+
"test",
|
|
134
|
+
"verify",
|
|
135
|
+
"validate",
|
|
136
|
+
"coverage",
|
|
137
|
+
"testing",
|
|
138
|
+
"tests",
|
|
139
|
+
"unit test",
|
|
140
|
+
"integration test",
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
# Epic intent keywords
|
|
144
|
+
self.epic_keywords = [
|
|
145
|
+
"epic",
|
|
146
|
+
"implement epic",
|
|
147
|
+
"execute epic",
|
|
148
|
+
"run epic",
|
|
149
|
+
"story",
|
|
150
|
+
"stories",
|
|
151
|
+
]
|
|
152
|
+
|
|
153
|
+
# Explore intent keywords
|
|
154
|
+
self.explore_keywords = [
|
|
155
|
+
"explore",
|
|
156
|
+
"understand",
|
|
157
|
+
"navigate",
|
|
158
|
+
"find",
|
|
159
|
+
"discover",
|
|
160
|
+
"overview",
|
|
161
|
+
"codebase",
|
|
162
|
+
"trace",
|
|
163
|
+
"search",
|
|
164
|
+
"locate",
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
# Refactor intent keywords
|
|
168
|
+
self.refactor_keywords = [
|
|
169
|
+
"refactor",
|
|
170
|
+
"modernize",
|
|
171
|
+
"update",
|
|
172
|
+
"improve code",
|
|
173
|
+
"modernize code",
|
|
174
|
+
"legacy",
|
|
175
|
+
"deprecated",
|
|
176
|
+
"upgrade code",
|
|
177
|
+
]
|
|
178
|
+
|
|
179
|
+
# Plan Analysis intent keywords
|
|
180
|
+
self.plan_analysis_keywords = [
|
|
181
|
+
"plan",
|
|
182
|
+
"planning",
|
|
183
|
+
"analyze",
|
|
184
|
+
"analysis",
|
|
185
|
+
"design",
|
|
186
|
+
"proposal",
|
|
187
|
+
"strategy",
|
|
188
|
+
"roadmap",
|
|
189
|
+
]
|
|
190
|
+
|
|
191
|
+
# PR intent keywords
|
|
192
|
+
self.pr_keywords = [
|
|
193
|
+
"pr",
|
|
194
|
+
"pull request",
|
|
195
|
+
"create pr",
|
|
196
|
+
"open pr",
|
|
197
|
+
"merge request",
|
|
198
|
+
"mr",
|
|
199
|
+
]
|
|
200
|
+
|
|
201
|
+
# Requirements intent keywords
|
|
202
|
+
self.requirements_keywords = [
|
|
203
|
+
"requirements",
|
|
204
|
+
"gather requirements",
|
|
205
|
+
"extract requirements",
|
|
206
|
+
"document requirements",
|
|
207
|
+
"analyze requirements",
|
|
208
|
+
"requirements document",
|
|
209
|
+
"requirements gathering",
|
|
210
|
+
"requirements analysis",
|
|
211
|
+
]
|
|
212
|
+
|
|
213
|
+
# Brownfield intent keywords
|
|
214
|
+
self.brownfield_keywords = [
|
|
215
|
+
"brownfield",
|
|
216
|
+
"brownfield review",
|
|
217
|
+
"review brownfield",
|
|
218
|
+
"analyze brownfield",
|
|
219
|
+
"brownfield system",
|
|
220
|
+
"review system",
|
|
221
|
+
"analyze project",
|
|
222
|
+
"create experts",
|
|
223
|
+
"auto experts",
|
|
224
|
+
"expert creation",
|
|
225
|
+
"populate rag",
|
|
226
|
+
"fill rag",
|
|
227
|
+
]
|
|
228
|
+
|
|
229
|
+
# Simple Mode intent keywords
|
|
230
|
+
self.simple_mode_keywords = [
|
|
231
|
+
"@simple-mode",
|
|
232
|
+
"simple mode",
|
|
233
|
+
"use simple mode",
|
|
234
|
+
"simple-mode",
|
|
235
|
+
"@simple_mode",
|
|
236
|
+
"simple_mode",
|
|
237
|
+
]
|
|
238
|
+
|
|
239
|
+
def detect_simple_mode_intent(self, text: str) -> bool:
|
|
240
|
+
"""
|
|
241
|
+
Detect if user wants Simple Mode.
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
text: User input text
|
|
245
|
+
|
|
246
|
+
Returns:
|
|
247
|
+
True if Simple Mode intent detected, False otherwise
|
|
248
|
+
|
|
249
|
+
Examples:
|
|
250
|
+
>>> parser = IntentParser()
|
|
251
|
+
>>> parser.detect_simple_mode_intent("@simple-mode build feature")
|
|
252
|
+
True
|
|
253
|
+
>>> parser.detect_simple_mode_intent("use simple mode to create api")
|
|
254
|
+
True
|
|
255
|
+
>>> parser.detect_simple_mode_intent("build feature")
|
|
256
|
+
False
|
|
257
|
+
"""
|
|
258
|
+
text_lower = text.lower()
|
|
259
|
+
return any(keyword in text_lower for keyword in self.simple_mode_keywords)
|
|
260
|
+
|
|
261
|
+
def parse(self, input_text: str) -> Intent:
|
|
262
|
+
"""
|
|
263
|
+
Parse natural language input into a structured intent.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
input_text: User's natural language command
|
|
267
|
+
|
|
268
|
+
Returns:
|
|
269
|
+
Intent object with type, confidence, and parameters
|
|
270
|
+
"""
|
|
271
|
+
input_lower = input_text.lower().strip()
|
|
272
|
+
|
|
273
|
+
# Extract parameters
|
|
274
|
+
parameters = self._extract_parameters(input_text)
|
|
275
|
+
|
|
276
|
+
# Check for Simple Mode intent first
|
|
277
|
+
if self.detect_simple_mode_intent(input_text):
|
|
278
|
+
# Force Simple Mode workflow
|
|
279
|
+
parameters["force_simple_mode"] = True
|
|
280
|
+
|
|
281
|
+
# Check for explicit command patterns
|
|
282
|
+
if input_text.strip().startswith("*epic") or input_text.strip().startswith("@simple-mode *epic"):
|
|
283
|
+
# Extract epic path
|
|
284
|
+
epic_path = input_text.replace("*epic", "").replace("@simple-mode", "").strip()
|
|
285
|
+
if epic_path:
|
|
286
|
+
parameters["epic_path"] = epic_path
|
|
287
|
+
return Intent(
|
|
288
|
+
type=IntentType.EPIC,
|
|
289
|
+
confidence=1.0,
|
|
290
|
+
parameters=parameters,
|
|
291
|
+
original_input=input_text,
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
if input_text.strip().startswith("*explore") or input_text.strip().startswith("@simple-mode *explore"):
|
|
295
|
+
return Intent(
|
|
296
|
+
type=IntentType.EXPLORE,
|
|
297
|
+
confidence=1.0,
|
|
298
|
+
parameters=parameters,
|
|
299
|
+
original_input=input_text,
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
if input_text.strip().startswith("*validate") or input_text.strip().startswith("@simple-mode *validate"):
|
|
303
|
+
return Intent(
|
|
304
|
+
type=IntentType.VALIDATE,
|
|
305
|
+
confidence=1.0,
|
|
306
|
+
parameters=parameters,
|
|
307
|
+
original_input=input_text,
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
if input_text.strip().startswith("*refactor") or input_text.strip().startswith("@simple-mode *refactor"):
|
|
311
|
+
return Intent(
|
|
312
|
+
type=IntentType.REFACTOR,
|
|
313
|
+
confidence=1.0,
|
|
314
|
+
parameters=parameters,
|
|
315
|
+
original_input=input_text,
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
if input_text.strip().startswith("*plan") or input_text.strip().startswith("@simple-mode *plan") or "plan-analysis" in input_lower:
|
|
319
|
+
return Intent(
|
|
320
|
+
type=IntentType.PLAN_ANALYSIS,
|
|
321
|
+
confidence=1.0,
|
|
322
|
+
parameters=parameters,
|
|
323
|
+
original_input=input_text,
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
if input_text.strip().startswith("*pr") or input_text.strip().startswith("@simple-mode *pr") or "pull request" in input_lower:
|
|
327
|
+
return Intent(
|
|
328
|
+
type=IntentType.PR,
|
|
329
|
+
confidence=1.0,
|
|
330
|
+
parameters=parameters,
|
|
331
|
+
original_input=input_text,
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
if input_text.strip().startswith("*brownfield") or input_text.strip().startswith("*brownfield-review") or input_text.strip().startswith("@simple-mode *brownfield"):
|
|
335
|
+
return Intent(
|
|
336
|
+
type=IntentType.BROWNFIELD,
|
|
337
|
+
confidence=1.0,
|
|
338
|
+
parameters=parameters,
|
|
339
|
+
original_input=input_text,
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
# *enhance and *breakdown (§3.4)
|
|
343
|
+
if input_text.strip().startswith("*enhance") or input_text.strip().startswith("@simple-mode *enhance"):
|
|
344
|
+
prompt = (parameters.get("description") or re.sub(r"^(@simple-mode\s*)?\*enhance\s*", "", input_text, flags=re.I).strip() or input_text)
|
|
345
|
+
parameters["prompt"] = prompt
|
|
346
|
+
return Intent(type=IntentType.ENHANCE, confidence=1.0, parameters=parameters, original_input=input_text)
|
|
347
|
+
if input_text.strip().startswith("*breakdown") or input_text.strip().startswith("@simple-mode *breakdown"):
|
|
348
|
+
prompt = (parameters.get("description") or re.sub(r"^(@simple-mode\s*)?\*breakdown\s*", "", input_text, flags=re.I).strip() or input_text)
|
|
349
|
+
parameters["prompt"] = prompt
|
|
350
|
+
return Intent(type=IntentType.BREAKDOWN, confidence=1.0, parameters=parameters, original_input=input_text)
|
|
351
|
+
|
|
352
|
+
# *todo (§3.5) – remainder forwarded to bd
|
|
353
|
+
if input_text.strip().startswith("*todo") or input_text.strip().startswith("@simple-mode *todo"):
|
|
354
|
+
rest = re.sub(r"^(@simple-mode\s*)?\*todo\s*", "", input_text.strip(), flags=re.I).strip()
|
|
355
|
+
parameters["todo_rest"] = rest
|
|
356
|
+
return Intent(type=IntentType.TODO, confidence=1.0, parameters=parameters, original_input=input_text)
|
|
357
|
+
|
|
358
|
+
# Score each intent type
|
|
359
|
+
scores = {
|
|
360
|
+
IntentType.BUILD: self._score_intent(input_lower, self.build_keywords),
|
|
361
|
+
IntentType.REVIEW: self._score_intent(input_lower, self.review_keywords),
|
|
362
|
+
IntentType.FIX: self._score_intent(input_lower, self.fix_keywords),
|
|
363
|
+
IntentType.TEST: self._score_intent(input_lower, self.test_keywords),
|
|
364
|
+
IntentType.EPIC: self._score_intent(input_lower, self.epic_keywords),
|
|
365
|
+
IntentType.EXPLORE: self._score_intent(input_lower, self.explore_keywords),
|
|
366
|
+
IntentType.REFACTOR: self._score_intent(input_lower, self.refactor_keywords),
|
|
367
|
+
IntentType.PLAN_ANALYSIS: self._score_intent(input_lower, self.plan_analysis_keywords),
|
|
368
|
+
IntentType.PR: self._score_intent(input_lower, self.pr_keywords),
|
|
369
|
+
IntentType.REQUIREMENTS: self._score_intent(input_lower, self.requirements_keywords),
|
|
370
|
+
IntentType.BROWNFIELD: self._score_intent(input_lower, self.brownfield_keywords),
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
# Find best match
|
|
374
|
+
best_intent = max(scores.items(), key=lambda x: x[1])
|
|
375
|
+
intent_type, confidence = best_intent
|
|
376
|
+
|
|
377
|
+
# If confidence is too low, mark as unknown
|
|
378
|
+
if confidence < 0.3:
|
|
379
|
+
intent_type = IntentType.UNKNOWN
|
|
380
|
+
confidence = 0.0
|
|
381
|
+
|
|
382
|
+
# Detect "compare to codebase" intent with enhanced semantics
|
|
383
|
+
compare_to_codebase = False
|
|
384
|
+
compare_phrases = [
|
|
385
|
+
# Direct compare phrases
|
|
386
|
+
"compare to",
|
|
387
|
+
"compare with",
|
|
388
|
+
"compare against",
|
|
389
|
+
"compare this to",
|
|
390
|
+
"compare this with",
|
|
391
|
+
"compare to codebase",
|
|
392
|
+
"compare to our",
|
|
393
|
+
"compare to project",
|
|
394
|
+
# Match/align phrases
|
|
395
|
+
"match our",
|
|
396
|
+
"match the",
|
|
397
|
+
"match patterns",
|
|
398
|
+
"match codebase",
|
|
399
|
+
"align with",
|
|
400
|
+
"align to",
|
|
401
|
+
"follow patterns",
|
|
402
|
+
"follow our patterns",
|
|
403
|
+
"follow project patterns",
|
|
404
|
+
# Make match phrases (implicit compare)
|
|
405
|
+
"make match",
|
|
406
|
+
"make this match",
|
|
407
|
+
"make it match",
|
|
408
|
+
# Consistency phrases
|
|
409
|
+
"consistent with",
|
|
410
|
+
"consistency with",
|
|
411
|
+
"conform to",
|
|
412
|
+
"conform with",
|
|
413
|
+
# Standard phrases
|
|
414
|
+
"match standards",
|
|
415
|
+
"follow standards",
|
|
416
|
+
"meet standards",
|
|
417
|
+
"adhere to",
|
|
418
|
+
]
|
|
419
|
+
if any(phrase in input_lower for phrase in compare_phrases):
|
|
420
|
+
compare_to_codebase = True
|
|
421
|
+
|
|
422
|
+
return Intent(
|
|
423
|
+
type=intent_type,
|
|
424
|
+
confidence=confidence,
|
|
425
|
+
parameters=parameters,
|
|
426
|
+
original_input=input_text,
|
|
427
|
+
compare_to_codebase=compare_to_codebase,
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
def _score_intent(self, text: str, keywords: list[str]) -> float:
|
|
431
|
+
"""
|
|
432
|
+
Score how well text matches an intent based on keywords.
|
|
433
|
+
|
|
434
|
+
Args:
|
|
435
|
+
text: Lowercase input text
|
|
436
|
+
keywords: List of keywords for this intent
|
|
437
|
+
|
|
438
|
+
Returns:
|
|
439
|
+
Confidence score between 0.0 and 1.0
|
|
440
|
+
"""
|
|
441
|
+
matches = sum(1 for keyword in keywords if keyword in text)
|
|
442
|
+
if not matches:
|
|
443
|
+
return 0.0
|
|
444
|
+
|
|
445
|
+
# Normalize by number of keywords (max score is 1.0)
|
|
446
|
+
score = min(matches / len(keywords) * 2.0, 1.0)
|
|
447
|
+
|
|
448
|
+
# Boost score if keyword appears at start of sentence
|
|
449
|
+
for keyword in keywords:
|
|
450
|
+
if text.startswith(keyword):
|
|
451
|
+
score = min(score + 0.2, 1.0)
|
|
452
|
+
break
|
|
453
|
+
|
|
454
|
+
return score
|
|
455
|
+
|
|
456
|
+
def _extract_parameters(self, text: str) -> dict[str, Any]:
|
|
457
|
+
"""
|
|
458
|
+
Extract parameters from user input.
|
|
459
|
+
|
|
460
|
+
Args:
|
|
461
|
+
text: User input text
|
|
462
|
+
|
|
463
|
+
Returns:
|
|
464
|
+
Dictionary of extracted parameters
|
|
465
|
+
"""
|
|
466
|
+
parameters: dict[str, Any] = {}
|
|
467
|
+
|
|
468
|
+
# Extract file paths (quoted strings or common file extensions)
|
|
469
|
+
file_pattern = r'["\']?([^\s"\']+\.(py|ts|js|tsx|jsx|java|go|rs|rb|php|cs|sql|yaml|yml|json|md|txt))["\']?'
|
|
470
|
+
file_matches = re.findall(file_pattern, text, re.IGNORECASE)
|
|
471
|
+
if file_matches:
|
|
472
|
+
parameters["files"] = [match[0] for match in file_matches]
|
|
473
|
+
|
|
474
|
+
# Extract quoted descriptions
|
|
475
|
+
quoted_pattern = r'["\']([^"\']+)["\']'
|
|
476
|
+
quoted_matches = re.findall(quoted_pattern, text)
|
|
477
|
+
if quoted_matches:
|
|
478
|
+
parameters["description"] = quoted_matches[0]
|
|
479
|
+
|
|
480
|
+
# Extract Epic document paths (epic-*.md or docs/prd/epic-*.md)
|
|
481
|
+
epic_pattern = r'(?:epic-[\w-]+\.md|docs/prd/epic-[\w-]+\.md|[\w/]+epic[\w-]*\.md)'
|
|
482
|
+
epic_matches = re.findall(epic_pattern, text, re.IGNORECASE)
|
|
483
|
+
if epic_matches:
|
|
484
|
+
parameters["epic_path"] = epic_matches[0]
|
|
485
|
+
|
|
486
|
+
# Extract feature/functionality mentions
|
|
487
|
+
feature_patterns = [
|
|
488
|
+
r"(?:add|create|build|implement)\s+(?:a\s+)?([a-z\s]+?)(?:\s+for|\s+in|\s+with|$)",
|
|
489
|
+
r"feature[:\s]+([a-z\s]+?)(?:\s+for|\s+in|\s+with|$)",
|
|
490
|
+
]
|
|
491
|
+
for pattern in feature_patterns:
|
|
492
|
+
match = re.search(pattern, text.lower())
|
|
493
|
+
if match:
|
|
494
|
+
parameters["feature"] = match.group(1).strip()
|
|
495
|
+
break
|
|
496
|
+
|
|
497
|
+
return parameters
|
|
498
|
+
|
|
499
|
+
def get_agent_sequence(self, intent: Intent) -> list[str]:
|
|
500
|
+
"""
|
|
501
|
+
Get the sequence of agents for an intent.
|
|
502
|
+
|
|
503
|
+
Args:
|
|
504
|
+
intent: Parsed intent
|
|
505
|
+
|
|
506
|
+
Returns:
|
|
507
|
+
List of agent names in execution order
|
|
508
|
+
"""
|
|
509
|
+
return intent.get_agent_sequence()
|
|
510
|
+
|