tapps-agents 3.6.0__py3-none-any.whl → 3.6.1__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/service_discovery.py +534 -534
- 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/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 -227
- tapps_agents/cli/commands/tester.py +191 -191
- 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/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/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.backup_20260204_064058.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +324 -0
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +324 -0
- 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/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/resources/__init__.py +5 -0
- tapps_agents/resources/claude/__init__.py +1 -0
- tapps_agents/resources/claude/commands/README.md +156 -0
- tapps_agents/resources/claude/commands/__init__.py +1 -0
- tapps_agents/resources/claude/commands/build-fix.md +22 -0
- tapps_agents/resources/claude/commands/build.md +77 -0
- tapps_agents/resources/claude/commands/debug.md +53 -0
- tapps_agents/resources/claude/commands/design.md +68 -0
- tapps_agents/resources/claude/commands/docs.md +53 -0
- tapps_agents/resources/claude/commands/e2e.md +22 -0
- tapps_agents/resources/claude/commands/fix.md +54 -0
- tapps_agents/resources/claude/commands/implement.md +53 -0
- tapps_agents/resources/claude/commands/improve.md +53 -0
- tapps_agents/resources/claude/commands/library-docs.md +64 -0
- tapps_agents/resources/claude/commands/lint.md +52 -0
- tapps_agents/resources/claude/commands/plan.md +65 -0
- tapps_agents/resources/claude/commands/refactor-clean.md +21 -0
- tapps_agents/resources/claude/commands/refactor.md +55 -0
- tapps_agents/resources/claude/commands/review.md +67 -0
- tapps_agents/resources/claude/commands/score.md +60 -0
- tapps_agents/resources/claude/commands/security-review.md +22 -0
- tapps_agents/resources/claude/commands/security-scan.md +54 -0
- tapps_agents/resources/claude/commands/tdd.md +24 -0
- tapps_agents/resources/claude/commands/test-coverage.md +21 -0
- tapps_agents/resources/claude/commands/test.md +54 -0
- tapps_agents/resources/claude/commands/update-codemaps.md +20 -0
- tapps_agents/resources/claude/commands/update-docs.md +21 -0
- tapps_agents/resources/claude/skills/__init__.py +1 -0
- tapps_agents/resources/claude/skills/analyst/SKILL.md +272 -0
- tapps_agents/resources/claude/skills/analyst/__init__.py +1 -0
- tapps_agents/resources/claude/skills/architect/SKILL.md +282 -0
- tapps_agents/resources/claude/skills/architect/__init__.py +1 -0
- tapps_agents/resources/claude/skills/backend-patterns/SKILL.md +30 -0
- tapps_agents/resources/claude/skills/backend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/coding-standards/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/coding-standards/__init__.py +1 -0
- tapps_agents/resources/claude/skills/debugger/SKILL.md +203 -0
- tapps_agents/resources/claude/skills/debugger/__init__.py +1 -0
- tapps_agents/resources/claude/skills/designer/SKILL.md +243 -0
- tapps_agents/resources/claude/skills/designer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/documenter/SKILL.md +252 -0
- tapps_agents/resources/claude/skills/documenter/__init__.py +1 -0
- tapps_agents/resources/claude/skills/enhancer/SKILL.md +307 -0
- tapps_agents/resources/claude/skills/enhancer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/evaluator/SKILL.md +204 -0
- tapps_agents/resources/claude/skills/evaluator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/frontend-patterns/SKILL.md +29 -0
- tapps_agents/resources/claude/skills/frontend-patterns/__init__.py +1 -0
- tapps_agents/resources/claude/skills/implementer/SKILL.md +188 -0
- tapps_agents/resources/claude/skills/implementer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/improver/SKILL.md +218 -0
- tapps_agents/resources/claude/skills/improver/__init__.py +1 -0
- tapps_agents/resources/claude/skills/ops/SKILL.md +281 -0
- tapps_agents/resources/claude/skills/ops/__init__.py +1 -0
- tapps_agents/resources/claude/skills/orchestrator/SKILL.md +390 -0
- tapps_agents/resources/claude/skills/orchestrator/__init__.py +1 -0
- tapps_agents/resources/claude/skills/planner/SKILL.md +254 -0
- tapps_agents/resources/claude/skills/planner/__init__.py +1 -0
- tapps_agents/resources/claude/skills/reviewer/SKILL.md +434 -0
- tapps_agents/resources/claude/skills/reviewer/__init__.py +1 -0
- tapps_agents/resources/claude/skills/security-review/SKILL.md +31 -0
- tapps_agents/resources/claude/skills/security-review/__init__.py +1 -0
- tapps_agents/resources/claude/skills/simple-mode/SKILL.md +695 -0
- tapps_agents/resources/claude/skills/simple-mode/__init__.py +1 -0
- tapps_agents/resources/claude/skills/tester/SKILL.md +219 -0
- tapps_agents/resources/claude/skills/tester/__init__.py +1 -0
- tapps_agents/resources/cursor/.cursorignore +35 -0
- tapps_agents/resources/cursor/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/__init__.py +1 -0
- tapps_agents/resources/cursor/commands/build-fix.md +11 -0
- tapps_agents/resources/cursor/commands/build.md +11 -0
- tapps_agents/resources/cursor/commands/e2e.md +11 -0
- tapps_agents/resources/cursor/commands/fix.md +11 -0
- tapps_agents/resources/cursor/commands/refactor-clean.md +11 -0
- tapps_agents/resources/cursor/commands/review.md +11 -0
- tapps_agents/resources/cursor/commands/security-review.md +11 -0
- tapps_agents/resources/cursor/commands/tdd.md +11 -0
- tapps_agents/resources/cursor/commands/test-coverage.md +11 -0
- tapps_agents/resources/cursor/commands/test.md +11 -0
- tapps_agents/resources/cursor/commands/update-codemaps.md +10 -0
- tapps_agents/resources/cursor/commands/update-docs.md +11 -0
- tapps_agents/resources/cursor/rules/__init__.py +1 -0
- tapps_agents/resources/cursor/rules/agent-capabilities.mdc +687 -0
- tapps_agents/resources/cursor/rules/coding-style.mdc +31 -0
- tapps_agents/resources/cursor/rules/command-reference.mdc +2081 -0
- tapps_agents/resources/cursor/rules/cursor-mode-usage.mdc +125 -0
- tapps_agents/resources/cursor/rules/git-workflow.mdc +29 -0
- tapps_agents/resources/cursor/rules/performance.mdc +29 -0
- tapps_agents/resources/cursor/rules/project-context.mdc +163 -0
- tapps_agents/resources/cursor/rules/project-profiling.mdc +197 -0
- tapps_agents/resources/cursor/rules/quick-reference.mdc +630 -0
- tapps_agents/resources/cursor/rules/security.mdc +32 -0
- tapps_agents/resources/cursor/rules/simple-mode.mdc +500 -0
- tapps_agents/resources/cursor/rules/testing.mdc +31 -0
- tapps_agents/resources/cursor/rules/when-to-use.mdc +156 -0
- tapps_agents/resources/cursor/rules/workflow-presets.mdc +179 -0
- tapps_agents/resources/customizations/__init__.py +1 -0
- tapps_agents/resources/customizations/example-custom.yaml +83 -0
- tapps_agents/resources/hooks/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/README.md +5 -0
- tapps_agents/resources/hooks/templates/__init__.py +1 -0
- tapps_agents/resources/hooks/templates/add-project-context.yaml +8 -0
- tapps_agents/resources/hooks/templates/auto-format-js.yaml +10 -0
- tapps_agents/resources/hooks/templates/auto-format-python.yaml +10 -0
- tapps_agents/resources/hooks/templates/git-commit-check.yaml +7 -0
- tapps_agents/resources/hooks/templates/notify-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/quality-gate.yaml +8 -0
- tapps_agents/resources/hooks/templates/security-scan-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/session-end-log.yaml +7 -0
- tapps_agents/resources/hooks/templates/show-beads-ready.yaml +8 -0
- tapps_agents/resources/hooks/templates/test-on-edit.yaml +10 -0
- tapps_agents/resources/hooks/templates/update-docs-on-complete.yaml +8 -0
- tapps_agents/resources/hooks/templates/user-prompt-log.yaml +7 -0
- tapps_agents/resources/scripts/__init__.py +1 -0
- tapps_agents/resources/scripts/set_bd_path.ps1 +51 -0
- tapps_agents/resources/workflows/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/__init__.py +1 -0
- tapps_agents/resources/workflows/presets/brownfield-analysis.yaml +235 -0
- tapps_agents/resources/workflows/presets/fix.yaml +78 -0
- tapps_agents/resources/workflows/presets/full-sdlc.yaml +122 -0
- tapps_agents/resources/workflows/presets/quality.yaml +82 -0
- tapps_agents/resources/workflows/presets/rapid-dev.yaml +84 -0
- 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/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- 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/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_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/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 -148
- 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.6.0.dist-info → tapps_agents-3.6.1.dist-info}/METADATA +672 -672
- tapps_agents-3.6.1.dist-info/RECORD +883 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/licenses/LICENSE +22 -22
- tapps_agents-3.6.0.dist-info/RECORD +0 -758
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/WHEEL +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.6.0.dist-info → tapps_agents-3.6.1.dist-info}/top_level.txt +0 -0
|
@@ -1,441 +1,441 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Interactive Expert Setup Wizard
|
|
3
|
-
|
|
4
|
-
Helps developers initialize, add, remove, and configure experts with RAG support.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import sys
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
10
|
-
|
|
11
|
-
import yaml
|
|
12
|
-
|
|
13
|
-
from .domain_config import DomainConfigParser
|
|
14
|
-
from .domain_utils import sanitize_domain_for_path
|
|
15
|
-
from .expert_config import load_expert_configs
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class NonInteractiveInputRequired(RuntimeError):
|
|
19
|
-
"""Raised when required user input is missing in non-interactive mode."""
|
|
20
|
-
|
|
21
|
-
def __init__(self, question: str):
|
|
22
|
-
super().__init__(question)
|
|
23
|
-
self.question = question
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class ExpertSetupWizard:
|
|
27
|
-
"""Interactive wizard for setting up experts."""
|
|
28
|
-
|
|
29
|
-
def __init__(
|
|
30
|
-
self,
|
|
31
|
-
project_root: Path | None = None,
|
|
32
|
-
*,
|
|
33
|
-
assume_yes: bool = False,
|
|
34
|
-
non_interactive: bool = False,
|
|
35
|
-
):
|
|
36
|
-
self.project_root = project_root or Path.cwd()
|
|
37
|
-
self.config_dir = self.project_root / ".tapps-agents"
|
|
38
|
-
self.experts_file = self.config_dir / "experts.yaml"
|
|
39
|
-
self.domains_file = self.config_dir / "domains.md"
|
|
40
|
-
self.knowledge_base_dir = self.config_dir / "knowledge"
|
|
41
|
-
self.assume_yes = assume_yes
|
|
42
|
-
self.non_interactive = non_interactive
|
|
43
|
-
|
|
44
|
-
def _prompt(
|
|
45
|
-
self,
|
|
46
|
-
question: str,
|
|
47
|
-
default: str | None = None,
|
|
48
|
-
choices: list[str] | None = None,
|
|
49
|
-
) -> str:
|
|
50
|
-
"""Prompt user for input."""
|
|
51
|
-
if self.non_interactive:
|
|
52
|
-
if default is not None:
|
|
53
|
-
return default
|
|
54
|
-
raise NonInteractiveInputRequired(question)
|
|
55
|
-
if self.assume_yes and default is not None:
|
|
56
|
-
return default
|
|
57
|
-
|
|
58
|
-
prompt_text = question
|
|
59
|
-
if default:
|
|
60
|
-
prompt_text += f" [{default}]"
|
|
61
|
-
if choices:
|
|
62
|
-
prompt_text += f" ({'/'.join(choices)})"
|
|
63
|
-
prompt_text += ": "
|
|
64
|
-
|
|
65
|
-
while True:
|
|
66
|
-
try:
|
|
67
|
-
response = input(prompt_text).strip()
|
|
68
|
-
if not response and default:
|
|
69
|
-
return default
|
|
70
|
-
if not response:
|
|
71
|
-
print("Please provide a value.")
|
|
72
|
-
continue
|
|
73
|
-
if choices and response not in choices:
|
|
74
|
-
print(f"Please choose one of: {', '.join(choices)}")
|
|
75
|
-
continue
|
|
76
|
-
return response
|
|
77
|
-
except (EOFError, KeyboardInterrupt):
|
|
78
|
-
if self.non_interactive:
|
|
79
|
-
raise NonInteractiveInputRequired(question) from None
|
|
80
|
-
print("\nCancelled.")
|
|
81
|
-
sys.exit(0)
|
|
82
|
-
|
|
83
|
-
def _prompt_yes_no(self, question: str, default: bool = True) -> bool:
|
|
84
|
-
"""Prompt for yes/no answer."""
|
|
85
|
-
if self.non_interactive:
|
|
86
|
-
return True if self.assume_yes else default
|
|
87
|
-
if self.assume_yes:
|
|
88
|
-
return True
|
|
89
|
-
|
|
90
|
-
default_str = "Y/n" if default else "y/N"
|
|
91
|
-
response = self._prompt(
|
|
92
|
-
f"{question} ({default_str})",
|
|
93
|
-
default="y" if default else "n",
|
|
94
|
-
choices=["y", "n", "yes", "no"],
|
|
95
|
-
)
|
|
96
|
-
return response.lower() in ["y", "yes"]
|
|
97
|
-
|
|
98
|
-
def _ensure_config_dir(self):
|
|
99
|
-
"""Ensure .tapps-agents directory exists."""
|
|
100
|
-
self.config_dir.mkdir(parents=True, exist_ok=True)
|
|
101
|
-
self.knowledge_base_dir.mkdir(parents=True, exist_ok=True)
|
|
102
|
-
|
|
103
|
-
def _load_existing_experts(self) -> list[dict[str, Any]]:
|
|
104
|
-
"""Load existing experts from config file."""
|
|
105
|
-
if not self.experts_file.exists():
|
|
106
|
-
return []
|
|
107
|
-
try:
|
|
108
|
-
configs = load_expert_configs(self.experts_file)
|
|
109
|
-
return [config.model_dump() for config in configs]
|
|
110
|
-
except Exception as e:
|
|
111
|
-
print(f"Warning: Could not load existing experts: {e}")
|
|
112
|
-
return []
|
|
113
|
-
|
|
114
|
-
def _save_experts(self, experts: list[dict[str, Any]]):
|
|
115
|
-
"""Save experts to YAML file."""
|
|
116
|
-
self._ensure_config_dir()
|
|
117
|
-
|
|
118
|
-
# Write YAML with comments
|
|
119
|
-
with open(self.experts_file, "w", encoding="utf-8") as f:
|
|
120
|
-
f.write("# TappsCodingAgents Industry Experts Configuration\n")
|
|
121
|
-
f.write("# .tapps-agents/experts.yaml\n\n")
|
|
122
|
-
yaml.dump(
|
|
123
|
-
{"experts": experts},
|
|
124
|
-
f,
|
|
125
|
-
default_flow_style=False,
|
|
126
|
-
sort_keys=False,
|
|
127
|
-
allow_unicode=True,
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
print(f"\nExperts saved to: {self.experts_file}")
|
|
131
|
-
|
|
132
|
-
def _get_domains(self) -> list[str]:
|
|
133
|
-
"""Get list of domains from domains.md."""
|
|
134
|
-
if not self.domains_file.exists():
|
|
135
|
-
return []
|
|
136
|
-
try:
|
|
137
|
-
domain_config = DomainConfigParser.parse(self.domains_file)
|
|
138
|
-
return [domain.name for domain in domain_config.domains]
|
|
139
|
-
except (OSError, yaml.YAMLError, KeyError) as e:
|
|
140
|
-
# File read errors, YAML parsing errors, or missing keys
|
|
141
|
-
import logging
|
|
142
|
-
|
|
143
|
-
logger = logging.getLogger(__name__)
|
|
144
|
-
logger.debug(f"Failed to load expert configs: {e}")
|
|
145
|
-
return []
|
|
146
|
-
|
|
147
|
-
def _setup_rag_knowledge_base(self, domain: str, expert_name: str):
|
|
148
|
-
"""Help set up RAG knowledge base for an expert."""
|
|
149
|
-
sanitized_domain = sanitize_domain_for_path(domain)
|
|
150
|
-
domain_kb_dir = self.knowledge_base_dir / sanitized_domain
|
|
151
|
-
|
|
152
|
-
print(f"\nSetting up knowledge base for {expert_name}...")
|
|
153
|
-
|
|
154
|
-
if not self._prompt_yes_no(
|
|
155
|
-
f"Enable RAG (knowledge base) for {expert_name}?", default=True
|
|
156
|
-
):
|
|
157
|
-
return False
|
|
158
|
-
|
|
159
|
-
domain_kb_dir.mkdir(parents=True, exist_ok=True)
|
|
160
|
-
|
|
161
|
-
# Check if knowledge files already exist
|
|
162
|
-
existing_files = list(domain_kb_dir.glob("*.md"))
|
|
163
|
-
if existing_files:
|
|
164
|
-
print(f"\nFound {len(existing_files)} existing knowledge file(s):")
|
|
165
|
-
for f in existing_files:
|
|
166
|
-
print(f" - {f.name}")
|
|
167
|
-
if not self._prompt_yes_no("Add more knowledge files?", default=False):
|
|
168
|
-
return True
|
|
169
|
-
|
|
170
|
-
# Offer to create a template knowledge file
|
|
171
|
-
if self._prompt_yes_no("Create a template knowledge file?", default=True):
|
|
172
|
-
template_file = domain_kb_dir / f"{sanitized_domain}-knowledge.md"
|
|
173
|
-
template_content = f"""# {expert_name} Knowledge Base
|
|
174
|
-
|
|
175
|
-
## Domain: {domain}
|
|
176
|
-
|
|
177
|
-
Add your domain-specific knowledge here. This file will be used for RAG (Retrieval-Augmented Generation).
|
|
178
|
-
|
|
179
|
-
### Key Concepts
|
|
180
|
-
|
|
181
|
-
### Best Practices
|
|
182
|
-
|
|
183
|
-
### Common Patterns
|
|
184
|
-
|
|
185
|
-
### References
|
|
186
|
-
|
|
187
|
-
"""
|
|
188
|
-
template_file.write_text(template_content, encoding="utf-8")
|
|
189
|
-
print(f"Created template: {template_file}")
|
|
190
|
-
print("\nTip: Edit this file to add your domain knowledge.")
|
|
191
|
-
|
|
192
|
-
return True
|
|
193
|
-
|
|
194
|
-
def add_expert(self):
|
|
195
|
-
"""Interactive wizard to add a new expert."""
|
|
196
|
-
print("\n" + "=" * 60)
|
|
197
|
-
print("Add New Expert")
|
|
198
|
-
print("=" * 60)
|
|
199
|
-
|
|
200
|
-
# Get expert details
|
|
201
|
-
expert_name = self._prompt("Expert name (e.g., 'Home Automation Expert')")
|
|
202
|
-
|
|
203
|
-
# Generate expert_id from name
|
|
204
|
-
expert_id_suggestion = f"expert-{expert_name.lower().replace(' ', '-').replace('&', '').replace(',', '')}"
|
|
205
|
-
expert_id = self._prompt("Expert ID", default=expert_id_suggestion)
|
|
206
|
-
|
|
207
|
-
# Get domain
|
|
208
|
-
domains = self._get_domains()
|
|
209
|
-
if domains:
|
|
210
|
-
print("\nAvailable domains:")
|
|
211
|
-
for i, domain in enumerate(domains, 1):
|
|
212
|
-
print(f" {i}. {domain}")
|
|
213
|
-
|
|
214
|
-
use_existing = self._prompt_yes_no("\nUse existing domain?", default=True)
|
|
215
|
-
if use_existing:
|
|
216
|
-
domain_choice = self._prompt(
|
|
217
|
-
"Domain number or name",
|
|
218
|
-
choices=domains + [str(i) for i in range(1, len(domains) + 1)],
|
|
219
|
-
)
|
|
220
|
-
if domain_choice.isdigit():
|
|
221
|
-
primary_domain = domains[int(domain_choice) - 1]
|
|
222
|
-
else:
|
|
223
|
-
primary_domain = domain_choice
|
|
224
|
-
else:
|
|
225
|
-
primary_domain = self._prompt("Primary domain name")
|
|
226
|
-
else:
|
|
227
|
-
from ..core.unicode_safe import safe_print
|
|
228
|
-
safe_print("\n[WARN] No domains found in domains.md")
|
|
229
|
-
if self._prompt_yes_no("Create domain entry later?", default=True):
|
|
230
|
-
primary_domain = self._prompt(
|
|
231
|
-
"Primary domain name (will need to match domains.md)"
|
|
232
|
-
)
|
|
233
|
-
else:
|
|
234
|
-
print("Please create .tapps-agents/domains.md first.")
|
|
235
|
-
return
|
|
236
|
-
|
|
237
|
-
# RAG setup
|
|
238
|
-
rag_enabled = self._setup_rag_knowledge_base(primary_domain, expert_name)
|
|
239
|
-
|
|
240
|
-
# Create expert config
|
|
241
|
-
expert_config = {
|
|
242
|
-
"expert_id": expert_id,
|
|
243
|
-
"expert_name": expert_name,
|
|
244
|
-
"primary_domain": primary_domain,
|
|
245
|
-
"rag_enabled": rag_enabled,
|
|
246
|
-
"fine_tuned": False,
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
# Load existing experts
|
|
250
|
-
experts = self._load_existing_experts()
|
|
251
|
-
|
|
252
|
-
# Check for duplicates
|
|
253
|
-
if any(e.get("expert_id") == expert_id for e in experts):
|
|
254
|
-
if not self._prompt_yes_no(
|
|
255
|
-
f"Expert '{expert_id}' already exists. Replace?", default=False
|
|
256
|
-
):
|
|
257
|
-
print("Cancelled.")
|
|
258
|
-
return
|
|
259
|
-
experts = [e for e in experts if e.get("expert_id") != expert_id]
|
|
260
|
-
|
|
261
|
-
# Add new expert
|
|
262
|
-
experts.append(expert_config)
|
|
263
|
-
|
|
264
|
-
# Save
|
|
265
|
-
self._save_experts(experts)
|
|
266
|
-
|
|
267
|
-
print(f"\nExpert '{expert_name}' added successfully!")
|
|
268
|
-
print(f" Expert ID: {expert_id}")
|
|
269
|
-
print(f" Domain: {primary_domain}")
|
|
270
|
-
print(f" RAG Enabled: {rag_enabled}")
|
|
271
|
-
|
|
272
|
-
def remove_expert(self):
|
|
273
|
-
"""Interactive wizard to remove an expert."""
|
|
274
|
-
print("\n" + "=" * 60)
|
|
275
|
-
print("Remove Expert")
|
|
276
|
-
print("=" * 60)
|
|
277
|
-
|
|
278
|
-
experts = self._load_existing_experts()
|
|
279
|
-
|
|
280
|
-
if not experts:
|
|
281
|
-
print("No experts found.")
|
|
282
|
-
return
|
|
283
|
-
|
|
284
|
-
print("\nCurrent experts:")
|
|
285
|
-
for i, expert in enumerate(experts, 1):
|
|
286
|
-
print(f" {i}. {expert.get('expert_name')} ({expert.get('expert_id')})")
|
|
287
|
-
|
|
288
|
-
choice = self._prompt("\nExpert number to remove")
|
|
289
|
-
|
|
290
|
-
try:
|
|
291
|
-
idx = int(choice) - 1
|
|
292
|
-
if 0 <= idx < len(experts):
|
|
293
|
-
expert = experts[idx]
|
|
294
|
-
if self._prompt_yes_no(
|
|
295
|
-
f"Remove '{expert.get('expert_name')}'?", default=False
|
|
296
|
-
):
|
|
297
|
-
experts.pop(idx)
|
|
298
|
-
self._save_experts(experts)
|
|
299
|
-
print(f"Expert '{expert.get('expert_name')}' removed.")
|
|
300
|
-
else:
|
|
301
|
-
print("Cancelled.")
|
|
302
|
-
else:
|
|
303
|
-
print("Invalid selection.")
|
|
304
|
-
except ValueError:
|
|
305
|
-
print("Invalid selection.")
|
|
306
|
-
|
|
307
|
-
def list_experts(self):
|
|
308
|
-
"""List all configured experts."""
|
|
309
|
-
print("\n" + "=" * 60)
|
|
310
|
-
print("Current Experts")
|
|
311
|
-
print("=" * 60)
|
|
312
|
-
|
|
313
|
-
experts = self._load_existing_experts()
|
|
314
|
-
|
|
315
|
-
if not experts:
|
|
316
|
-
print("No experts configured.")
|
|
317
|
-
print("\nRun 'setup-experts add' to add your first expert.")
|
|
318
|
-
return
|
|
319
|
-
|
|
320
|
-
for i, expert in enumerate(experts, 1):
|
|
321
|
-
print(f"\n{i}. {expert.get('expert_name')}")
|
|
322
|
-
print(f" ID: {expert.get('expert_id')}")
|
|
323
|
-
print(f" Domain: {expert.get('primary_domain')}")
|
|
324
|
-
print(f" RAG: {'Yes' if expert.get('rag_enabled') else 'No'}")
|
|
325
|
-
|
|
326
|
-
# Check knowledge base
|
|
327
|
-
domain = expert.get("primary_domain")
|
|
328
|
-
if expert.get("rag_enabled") and domain:
|
|
329
|
-
sanitized_domain = sanitize_domain_for_path(domain)
|
|
330
|
-
kb_dir = self.knowledge_base_dir / sanitized_domain
|
|
331
|
-
kb_files = list(kb_dir.glob("*.md")) if kb_dir.exists() else []
|
|
332
|
-
print(f" Knowledge Files: {len(kb_files)}")
|
|
333
|
-
|
|
334
|
-
def init_project(self):
|
|
335
|
-
"""Initialize a new project with expert setup."""
|
|
336
|
-
print("\n" + "=" * 60)
|
|
337
|
-
print("Initialize TappsCodingAgents Project")
|
|
338
|
-
print("=" * 60)
|
|
339
|
-
|
|
340
|
-
print("\nThis wizard will help you set up experts for your project.")
|
|
341
|
-
|
|
342
|
-
if not self._prompt_yes_no("Continue?", default=True):
|
|
343
|
-
return
|
|
344
|
-
|
|
345
|
-
self._ensure_config_dir()
|
|
346
|
-
|
|
347
|
-
# Initialize Cursor Rules and workflow presets
|
|
348
|
-
from ..core.init_project import init_project as init_project_setup
|
|
349
|
-
|
|
350
|
-
if self._prompt_yes_no(
|
|
351
|
-
"\nInitialize Cursor Rules and workflow presets?", default=True
|
|
352
|
-
):
|
|
353
|
-
print("\nSetting up Cursor Rules and workflow presets...")
|
|
354
|
-
init_results = init_project_setup(
|
|
355
|
-
project_root=self.project_root,
|
|
356
|
-
include_cursor_rules=True,
|
|
357
|
-
include_workflow_presets=True,
|
|
358
|
-
)
|
|
359
|
-
|
|
360
|
-
if init_results["cursor_rules"]:
|
|
361
|
-
print(" Created Cursor Rules: .cursor/rules/workflow-presets.mdc")
|
|
362
|
-
if init_results["workflow_presets"]:
|
|
363
|
-
print(
|
|
364
|
-
f" Created {len(init_results['files_created'])} workflow preset(s)"
|
|
365
|
-
)
|
|
366
|
-
|
|
367
|
-
# Check for domains.md
|
|
368
|
-
if not self.domains_file.exists():
|
|
369
|
-
print("\nWarning: No domains.md found.")
|
|
370
|
-
if self._prompt_yes_no("Create domains.md template?", default=True):
|
|
371
|
-
self._create_domains_template()
|
|
372
|
-
|
|
373
|
-
# In non-interactive mode, skip adding experts to avoid prompting for required fields.
|
|
374
|
-
if self.non_interactive:
|
|
375
|
-
print("\nNon-interactive mode: skipping expert creation.")
|
|
376
|
-
print("Next: run 'python -m tapps_agents.cli setup-experts add' to add experts.")
|
|
377
|
-
return
|
|
378
|
-
|
|
379
|
-
# Add first expert
|
|
380
|
-
if self._prompt_yes_no("\nAdd your first expert?", default=True):
|
|
381
|
-
self.add_expert()
|
|
382
|
-
|
|
383
|
-
# Offer to add more
|
|
384
|
-
while self._prompt_yes_no("\nAdd another expert?", default=False):
|
|
385
|
-
self.add_expert()
|
|
386
|
-
|
|
387
|
-
print("\n" + "=" * 60)
|
|
388
|
-
print("Project initialization complete!")
|
|
389
|
-
print("=" * 60)
|
|
390
|
-
self.list_experts()
|
|
391
|
-
|
|
392
|
-
print("\nQuick Commands Available:")
|
|
393
|
-
print(" python -m tapps_agents.cli workflow list")
|
|
394
|
-
print(" python -m tapps_agents.cli workflow rapid")
|
|
395
|
-
print(" python -m tapps_agents.cli workflow full")
|
|
396
|
-
|
|
397
|
-
def _create_domains_template(self):
|
|
398
|
-
"""Create a template domains.md file."""
|
|
399
|
-
template = """# Project Domains
|
|
400
|
-
|
|
401
|
-
This file defines the business domains for your project and their primary experts.
|
|
402
|
-
|
|
403
|
-
## Project: Your Project Name
|
|
404
|
-
|
|
405
|
-
Brief description of your project.
|
|
406
|
-
|
|
407
|
-
### Domain 1: [Domain Name]
|
|
408
|
-
|
|
409
|
-
- **Primary Expert**: expert-[domain-name]
|
|
410
|
-
- **Description**: [Domain description]
|
|
411
|
-
- **Key Areas**: [Key areas covered by this domain]
|
|
412
|
-
|
|
413
|
-
"""
|
|
414
|
-
self.domains_file.write_text(template, encoding="utf-8")
|
|
415
|
-
print(f"Created template: {self.domains_file}")
|
|
416
|
-
print("Tip: Edit this file to define your project's domains.")
|
|
417
|
-
|
|
418
|
-
def run_wizard(self):
|
|
419
|
-
"""Run the main wizard menu."""
|
|
420
|
-
print("\n" + "=" * 60)
|
|
421
|
-
print("Expert Setup Wizard")
|
|
422
|
-
print("=" * 60)
|
|
423
|
-
print("\nWhat would you like to do?")
|
|
424
|
-
print(" 1. Initialize project (first-time setup)")
|
|
425
|
-
print(" 2. Add expert")
|
|
426
|
-
print(" 3. Remove expert")
|
|
427
|
-
print(" 4. List experts")
|
|
428
|
-
print(" 5. Exit")
|
|
429
|
-
|
|
430
|
-
choice = self._prompt("\nChoice", choices=["1", "2", "3", "4", "5"])
|
|
431
|
-
|
|
432
|
-
if choice == "1":
|
|
433
|
-
self.init_project()
|
|
434
|
-
elif choice == "2":
|
|
435
|
-
self.add_expert()
|
|
436
|
-
elif choice == "3":
|
|
437
|
-
self.remove_expert()
|
|
438
|
-
elif choice == "4":
|
|
439
|
-
self.list_experts()
|
|
440
|
-
else:
|
|
441
|
-
print("Goodbye!")
|
|
1
|
+
"""
|
|
2
|
+
Interactive Expert Setup Wizard
|
|
3
|
+
|
|
4
|
+
Helps developers initialize, add, remove, and configure experts with RAG support.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
import yaml
|
|
12
|
+
|
|
13
|
+
from .domain_config import DomainConfigParser
|
|
14
|
+
from .domain_utils import sanitize_domain_for_path
|
|
15
|
+
from .expert_config import load_expert_configs
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class NonInteractiveInputRequired(RuntimeError):
|
|
19
|
+
"""Raised when required user input is missing in non-interactive mode."""
|
|
20
|
+
|
|
21
|
+
def __init__(self, question: str):
|
|
22
|
+
super().__init__(question)
|
|
23
|
+
self.question = question
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ExpertSetupWizard:
|
|
27
|
+
"""Interactive wizard for setting up experts."""
|
|
28
|
+
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
project_root: Path | None = None,
|
|
32
|
+
*,
|
|
33
|
+
assume_yes: bool = False,
|
|
34
|
+
non_interactive: bool = False,
|
|
35
|
+
):
|
|
36
|
+
self.project_root = project_root or Path.cwd()
|
|
37
|
+
self.config_dir = self.project_root / ".tapps-agents"
|
|
38
|
+
self.experts_file = self.config_dir / "experts.yaml"
|
|
39
|
+
self.domains_file = self.config_dir / "domains.md"
|
|
40
|
+
self.knowledge_base_dir = self.config_dir / "knowledge"
|
|
41
|
+
self.assume_yes = assume_yes
|
|
42
|
+
self.non_interactive = non_interactive
|
|
43
|
+
|
|
44
|
+
def _prompt(
|
|
45
|
+
self,
|
|
46
|
+
question: str,
|
|
47
|
+
default: str | None = None,
|
|
48
|
+
choices: list[str] | None = None,
|
|
49
|
+
) -> str:
|
|
50
|
+
"""Prompt user for input."""
|
|
51
|
+
if self.non_interactive:
|
|
52
|
+
if default is not None:
|
|
53
|
+
return default
|
|
54
|
+
raise NonInteractiveInputRequired(question)
|
|
55
|
+
if self.assume_yes and default is not None:
|
|
56
|
+
return default
|
|
57
|
+
|
|
58
|
+
prompt_text = question
|
|
59
|
+
if default:
|
|
60
|
+
prompt_text += f" [{default}]"
|
|
61
|
+
if choices:
|
|
62
|
+
prompt_text += f" ({'/'.join(choices)})"
|
|
63
|
+
prompt_text += ": "
|
|
64
|
+
|
|
65
|
+
while True:
|
|
66
|
+
try:
|
|
67
|
+
response = input(prompt_text).strip()
|
|
68
|
+
if not response and default:
|
|
69
|
+
return default
|
|
70
|
+
if not response:
|
|
71
|
+
print("Please provide a value.")
|
|
72
|
+
continue
|
|
73
|
+
if choices and response not in choices:
|
|
74
|
+
print(f"Please choose one of: {', '.join(choices)}")
|
|
75
|
+
continue
|
|
76
|
+
return response
|
|
77
|
+
except (EOFError, KeyboardInterrupt):
|
|
78
|
+
if self.non_interactive:
|
|
79
|
+
raise NonInteractiveInputRequired(question) from None
|
|
80
|
+
print("\nCancelled.")
|
|
81
|
+
sys.exit(0)
|
|
82
|
+
|
|
83
|
+
def _prompt_yes_no(self, question: str, default: bool = True) -> bool:
|
|
84
|
+
"""Prompt for yes/no answer."""
|
|
85
|
+
if self.non_interactive:
|
|
86
|
+
return True if self.assume_yes else default
|
|
87
|
+
if self.assume_yes:
|
|
88
|
+
return True
|
|
89
|
+
|
|
90
|
+
default_str = "Y/n" if default else "y/N"
|
|
91
|
+
response = self._prompt(
|
|
92
|
+
f"{question} ({default_str})",
|
|
93
|
+
default="y" if default else "n",
|
|
94
|
+
choices=["y", "n", "yes", "no"],
|
|
95
|
+
)
|
|
96
|
+
return response.lower() in ["y", "yes"]
|
|
97
|
+
|
|
98
|
+
def _ensure_config_dir(self):
|
|
99
|
+
"""Ensure .tapps-agents directory exists."""
|
|
100
|
+
self.config_dir.mkdir(parents=True, exist_ok=True)
|
|
101
|
+
self.knowledge_base_dir.mkdir(parents=True, exist_ok=True)
|
|
102
|
+
|
|
103
|
+
def _load_existing_experts(self) -> list[dict[str, Any]]:
|
|
104
|
+
"""Load existing experts from config file."""
|
|
105
|
+
if not self.experts_file.exists():
|
|
106
|
+
return []
|
|
107
|
+
try:
|
|
108
|
+
configs = load_expert_configs(self.experts_file)
|
|
109
|
+
return [config.model_dump() for config in configs]
|
|
110
|
+
except Exception as e:
|
|
111
|
+
print(f"Warning: Could not load existing experts: {e}")
|
|
112
|
+
return []
|
|
113
|
+
|
|
114
|
+
def _save_experts(self, experts: list[dict[str, Any]]):
|
|
115
|
+
"""Save experts to YAML file."""
|
|
116
|
+
self._ensure_config_dir()
|
|
117
|
+
|
|
118
|
+
# Write YAML with comments
|
|
119
|
+
with open(self.experts_file, "w", encoding="utf-8") as f:
|
|
120
|
+
f.write("# TappsCodingAgents Industry Experts Configuration\n")
|
|
121
|
+
f.write("# .tapps-agents/experts.yaml\n\n")
|
|
122
|
+
yaml.dump(
|
|
123
|
+
{"experts": experts},
|
|
124
|
+
f,
|
|
125
|
+
default_flow_style=False,
|
|
126
|
+
sort_keys=False,
|
|
127
|
+
allow_unicode=True,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
print(f"\nExperts saved to: {self.experts_file}")
|
|
131
|
+
|
|
132
|
+
def _get_domains(self) -> list[str]:
|
|
133
|
+
"""Get list of domains from domains.md."""
|
|
134
|
+
if not self.domains_file.exists():
|
|
135
|
+
return []
|
|
136
|
+
try:
|
|
137
|
+
domain_config = DomainConfigParser.parse(self.domains_file)
|
|
138
|
+
return [domain.name for domain in domain_config.domains]
|
|
139
|
+
except (OSError, yaml.YAMLError, KeyError) as e:
|
|
140
|
+
# File read errors, YAML parsing errors, or missing keys
|
|
141
|
+
import logging
|
|
142
|
+
|
|
143
|
+
logger = logging.getLogger(__name__)
|
|
144
|
+
logger.debug(f"Failed to load expert configs: {e}")
|
|
145
|
+
return []
|
|
146
|
+
|
|
147
|
+
def _setup_rag_knowledge_base(self, domain: str, expert_name: str):
|
|
148
|
+
"""Help set up RAG knowledge base for an expert."""
|
|
149
|
+
sanitized_domain = sanitize_domain_for_path(domain)
|
|
150
|
+
domain_kb_dir = self.knowledge_base_dir / sanitized_domain
|
|
151
|
+
|
|
152
|
+
print(f"\nSetting up knowledge base for {expert_name}...")
|
|
153
|
+
|
|
154
|
+
if not self._prompt_yes_no(
|
|
155
|
+
f"Enable RAG (knowledge base) for {expert_name}?", default=True
|
|
156
|
+
):
|
|
157
|
+
return False
|
|
158
|
+
|
|
159
|
+
domain_kb_dir.mkdir(parents=True, exist_ok=True)
|
|
160
|
+
|
|
161
|
+
# Check if knowledge files already exist
|
|
162
|
+
existing_files = list(domain_kb_dir.glob("*.md"))
|
|
163
|
+
if existing_files:
|
|
164
|
+
print(f"\nFound {len(existing_files)} existing knowledge file(s):")
|
|
165
|
+
for f in existing_files:
|
|
166
|
+
print(f" - {f.name}")
|
|
167
|
+
if not self._prompt_yes_no("Add more knowledge files?", default=False):
|
|
168
|
+
return True
|
|
169
|
+
|
|
170
|
+
# Offer to create a template knowledge file
|
|
171
|
+
if self._prompt_yes_no("Create a template knowledge file?", default=True):
|
|
172
|
+
template_file = domain_kb_dir / f"{sanitized_domain}-knowledge.md"
|
|
173
|
+
template_content = f"""# {expert_name} Knowledge Base
|
|
174
|
+
|
|
175
|
+
## Domain: {domain}
|
|
176
|
+
|
|
177
|
+
Add your domain-specific knowledge here. This file will be used for RAG (Retrieval-Augmented Generation).
|
|
178
|
+
|
|
179
|
+
### Key Concepts
|
|
180
|
+
|
|
181
|
+
### Best Practices
|
|
182
|
+
|
|
183
|
+
### Common Patterns
|
|
184
|
+
|
|
185
|
+
### References
|
|
186
|
+
|
|
187
|
+
"""
|
|
188
|
+
template_file.write_text(template_content, encoding="utf-8")
|
|
189
|
+
print(f"Created template: {template_file}")
|
|
190
|
+
print("\nTip: Edit this file to add your domain knowledge.")
|
|
191
|
+
|
|
192
|
+
return True
|
|
193
|
+
|
|
194
|
+
def add_expert(self):
|
|
195
|
+
"""Interactive wizard to add a new expert."""
|
|
196
|
+
print("\n" + "=" * 60)
|
|
197
|
+
print("Add New Expert")
|
|
198
|
+
print("=" * 60)
|
|
199
|
+
|
|
200
|
+
# Get expert details
|
|
201
|
+
expert_name = self._prompt("Expert name (e.g., 'Home Automation Expert')")
|
|
202
|
+
|
|
203
|
+
# Generate expert_id from name
|
|
204
|
+
expert_id_suggestion = f"expert-{expert_name.lower().replace(' ', '-').replace('&', '').replace(',', '')}"
|
|
205
|
+
expert_id = self._prompt("Expert ID", default=expert_id_suggestion)
|
|
206
|
+
|
|
207
|
+
# Get domain
|
|
208
|
+
domains = self._get_domains()
|
|
209
|
+
if domains:
|
|
210
|
+
print("\nAvailable domains:")
|
|
211
|
+
for i, domain in enumerate(domains, 1):
|
|
212
|
+
print(f" {i}. {domain}")
|
|
213
|
+
|
|
214
|
+
use_existing = self._prompt_yes_no("\nUse existing domain?", default=True)
|
|
215
|
+
if use_existing:
|
|
216
|
+
domain_choice = self._prompt(
|
|
217
|
+
"Domain number or name",
|
|
218
|
+
choices=domains + [str(i) for i in range(1, len(domains) + 1)],
|
|
219
|
+
)
|
|
220
|
+
if domain_choice.isdigit():
|
|
221
|
+
primary_domain = domains[int(domain_choice) - 1]
|
|
222
|
+
else:
|
|
223
|
+
primary_domain = domain_choice
|
|
224
|
+
else:
|
|
225
|
+
primary_domain = self._prompt("Primary domain name")
|
|
226
|
+
else:
|
|
227
|
+
from ..core.unicode_safe import safe_print
|
|
228
|
+
safe_print("\n[WARN] No domains found in domains.md")
|
|
229
|
+
if self._prompt_yes_no("Create domain entry later?", default=True):
|
|
230
|
+
primary_domain = self._prompt(
|
|
231
|
+
"Primary domain name (will need to match domains.md)"
|
|
232
|
+
)
|
|
233
|
+
else:
|
|
234
|
+
print("Please create .tapps-agents/domains.md first.")
|
|
235
|
+
return
|
|
236
|
+
|
|
237
|
+
# RAG setup
|
|
238
|
+
rag_enabled = self._setup_rag_knowledge_base(primary_domain, expert_name)
|
|
239
|
+
|
|
240
|
+
# Create expert config
|
|
241
|
+
expert_config = {
|
|
242
|
+
"expert_id": expert_id,
|
|
243
|
+
"expert_name": expert_name,
|
|
244
|
+
"primary_domain": primary_domain,
|
|
245
|
+
"rag_enabled": rag_enabled,
|
|
246
|
+
"fine_tuned": False,
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
# Load existing experts
|
|
250
|
+
experts = self._load_existing_experts()
|
|
251
|
+
|
|
252
|
+
# Check for duplicates
|
|
253
|
+
if any(e.get("expert_id") == expert_id for e in experts):
|
|
254
|
+
if not self._prompt_yes_no(
|
|
255
|
+
f"Expert '{expert_id}' already exists. Replace?", default=False
|
|
256
|
+
):
|
|
257
|
+
print("Cancelled.")
|
|
258
|
+
return
|
|
259
|
+
experts = [e for e in experts if e.get("expert_id") != expert_id]
|
|
260
|
+
|
|
261
|
+
# Add new expert
|
|
262
|
+
experts.append(expert_config)
|
|
263
|
+
|
|
264
|
+
# Save
|
|
265
|
+
self._save_experts(experts)
|
|
266
|
+
|
|
267
|
+
print(f"\nExpert '{expert_name}' added successfully!")
|
|
268
|
+
print(f" Expert ID: {expert_id}")
|
|
269
|
+
print(f" Domain: {primary_domain}")
|
|
270
|
+
print(f" RAG Enabled: {rag_enabled}")
|
|
271
|
+
|
|
272
|
+
def remove_expert(self):
|
|
273
|
+
"""Interactive wizard to remove an expert."""
|
|
274
|
+
print("\n" + "=" * 60)
|
|
275
|
+
print("Remove Expert")
|
|
276
|
+
print("=" * 60)
|
|
277
|
+
|
|
278
|
+
experts = self._load_existing_experts()
|
|
279
|
+
|
|
280
|
+
if not experts:
|
|
281
|
+
print("No experts found.")
|
|
282
|
+
return
|
|
283
|
+
|
|
284
|
+
print("\nCurrent experts:")
|
|
285
|
+
for i, expert in enumerate(experts, 1):
|
|
286
|
+
print(f" {i}. {expert.get('expert_name')} ({expert.get('expert_id')})")
|
|
287
|
+
|
|
288
|
+
choice = self._prompt("\nExpert number to remove")
|
|
289
|
+
|
|
290
|
+
try:
|
|
291
|
+
idx = int(choice) - 1
|
|
292
|
+
if 0 <= idx < len(experts):
|
|
293
|
+
expert = experts[idx]
|
|
294
|
+
if self._prompt_yes_no(
|
|
295
|
+
f"Remove '{expert.get('expert_name')}'?", default=False
|
|
296
|
+
):
|
|
297
|
+
experts.pop(idx)
|
|
298
|
+
self._save_experts(experts)
|
|
299
|
+
print(f"Expert '{expert.get('expert_name')}' removed.")
|
|
300
|
+
else:
|
|
301
|
+
print("Cancelled.")
|
|
302
|
+
else:
|
|
303
|
+
print("Invalid selection.")
|
|
304
|
+
except ValueError:
|
|
305
|
+
print("Invalid selection.")
|
|
306
|
+
|
|
307
|
+
def list_experts(self):
|
|
308
|
+
"""List all configured experts."""
|
|
309
|
+
print("\n" + "=" * 60)
|
|
310
|
+
print("Current Experts")
|
|
311
|
+
print("=" * 60)
|
|
312
|
+
|
|
313
|
+
experts = self._load_existing_experts()
|
|
314
|
+
|
|
315
|
+
if not experts:
|
|
316
|
+
print("No experts configured.")
|
|
317
|
+
print("\nRun 'setup-experts add' to add your first expert.")
|
|
318
|
+
return
|
|
319
|
+
|
|
320
|
+
for i, expert in enumerate(experts, 1):
|
|
321
|
+
print(f"\n{i}. {expert.get('expert_name')}")
|
|
322
|
+
print(f" ID: {expert.get('expert_id')}")
|
|
323
|
+
print(f" Domain: {expert.get('primary_domain')}")
|
|
324
|
+
print(f" RAG: {'Yes' if expert.get('rag_enabled') else 'No'}")
|
|
325
|
+
|
|
326
|
+
# Check knowledge base
|
|
327
|
+
domain = expert.get("primary_domain")
|
|
328
|
+
if expert.get("rag_enabled") and domain:
|
|
329
|
+
sanitized_domain = sanitize_domain_for_path(domain)
|
|
330
|
+
kb_dir = self.knowledge_base_dir / sanitized_domain
|
|
331
|
+
kb_files = list(kb_dir.glob("*.md")) if kb_dir.exists() else []
|
|
332
|
+
print(f" Knowledge Files: {len(kb_files)}")
|
|
333
|
+
|
|
334
|
+
def init_project(self):
|
|
335
|
+
"""Initialize a new project with expert setup."""
|
|
336
|
+
print("\n" + "=" * 60)
|
|
337
|
+
print("Initialize TappsCodingAgents Project")
|
|
338
|
+
print("=" * 60)
|
|
339
|
+
|
|
340
|
+
print("\nThis wizard will help you set up experts for your project.")
|
|
341
|
+
|
|
342
|
+
if not self._prompt_yes_no("Continue?", default=True):
|
|
343
|
+
return
|
|
344
|
+
|
|
345
|
+
self._ensure_config_dir()
|
|
346
|
+
|
|
347
|
+
# Initialize Cursor Rules and workflow presets
|
|
348
|
+
from ..core.init_project import init_project as init_project_setup
|
|
349
|
+
|
|
350
|
+
if self._prompt_yes_no(
|
|
351
|
+
"\nInitialize Cursor Rules and workflow presets?", default=True
|
|
352
|
+
):
|
|
353
|
+
print("\nSetting up Cursor Rules and workflow presets...")
|
|
354
|
+
init_results = init_project_setup(
|
|
355
|
+
project_root=self.project_root,
|
|
356
|
+
include_cursor_rules=True,
|
|
357
|
+
include_workflow_presets=True,
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
if init_results["cursor_rules"]:
|
|
361
|
+
print(" Created Cursor Rules: .cursor/rules/workflow-presets.mdc")
|
|
362
|
+
if init_results["workflow_presets"]:
|
|
363
|
+
print(
|
|
364
|
+
f" Created {len(init_results['files_created'])} workflow preset(s)"
|
|
365
|
+
)
|
|
366
|
+
|
|
367
|
+
# Check for domains.md
|
|
368
|
+
if not self.domains_file.exists():
|
|
369
|
+
print("\nWarning: No domains.md found.")
|
|
370
|
+
if self._prompt_yes_no("Create domains.md template?", default=True):
|
|
371
|
+
self._create_domains_template()
|
|
372
|
+
|
|
373
|
+
# In non-interactive mode, skip adding experts to avoid prompting for required fields.
|
|
374
|
+
if self.non_interactive:
|
|
375
|
+
print("\nNon-interactive mode: skipping expert creation.")
|
|
376
|
+
print("Next: run 'python -m tapps_agents.cli setup-experts add' to add experts.")
|
|
377
|
+
return
|
|
378
|
+
|
|
379
|
+
# Add first expert
|
|
380
|
+
if self._prompt_yes_no("\nAdd your first expert?", default=True):
|
|
381
|
+
self.add_expert()
|
|
382
|
+
|
|
383
|
+
# Offer to add more
|
|
384
|
+
while self._prompt_yes_no("\nAdd another expert?", default=False):
|
|
385
|
+
self.add_expert()
|
|
386
|
+
|
|
387
|
+
print("\n" + "=" * 60)
|
|
388
|
+
print("Project initialization complete!")
|
|
389
|
+
print("=" * 60)
|
|
390
|
+
self.list_experts()
|
|
391
|
+
|
|
392
|
+
print("\nQuick Commands Available:")
|
|
393
|
+
print(" python -m tapps_agents.cli workflow list")
|
|
394
|
+
print(" python -m tapps_agents.cli workflow rapid")
|
|
395
|
+
print(" python -m tapps_agents.cli workflow full")
|
|
396
|
+
|
|
397
|
+
def _create_domains_template(self):
|
|
398
|
+
"""Create a template domains.md file."""
|
|
399
|
+
template = """# Project Domains
|
|
400
|
+
|
|
401
|
+
This file defines the business domains for your project and their primary experts.
|
|
402
|
+
|
|
403
|
+
## Project: Your Project Name
|
|
404
|
+
|
|
405
|
+
Brief description of your project.
|
|
406
|
+
|
|
407
|
+
### Domain 1: [Domain Name]
|
|
408
|
+
|
|
409
|
+
- **Primary Expert**: expert-[domain-name]
|
|
410
|
+
- **Description**: [Domain description]
|
|
411
|
+
- **Key Areas**: [Key areas covered by this domain]
|
|
412
|
+
|
|
413
|
+
"""
|
|
414
|
+
self.domains_file.write_text(template, encoding="utf-8")
|
|
415
|
+
print(f"Created template: {self.domains_file}")
|
|
416
|
+
print("Tip: Edit this file to define your project's domains.")
|
|
417
|
+
|
|
418
|
+
def run_wizard(self):
|
|
419
|
+
"""Run the main wizard menu."""
|
|
420
|
+
print("\n" + "=" * 60)
|
|
421
|
+
print("Expert Setup Wizard")
|
|
422
|
+
print("=" * 60)
|
|
423
|
+
print("\nWhat would you like to do?")
|
|
424
|
+
print(" 1. Initialize project (first-time setup)")
|
|
425
|
+
print(" 2. Add expert")
|
|
426
|
+
print(" 3. Remove expert")
|
|
427
|
+
print(" 4. List experts")
|
|
428
|
+
print(" 5. Exit")
|
|
429
|
+
|
|
430
|
+
choice = self._prompt("\nChoice", choices=["1", "2", "3", "4", "5"])
|
|
431
|
+
|
|
432
|
+
if choice == "1":
|
|
433
|
+
self.init_project()
|
|
434
|
+
elif choice == "2":
|
|
435
|
+
self.add_expert()
|
|
436
|
+
elif choice == "3":
|
|
437
|
+
self.remove_expert()
|
|
438
|
+
elif choice == "4":
|
|
439
|
+
self.list_experts()
|
|
440
|
+
else:
|
|
441
|
+
print("Goodbye!")
|