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,531 +1,531 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Documenter Agent - Generates documentation
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
from typing import Any
|
|
7
|
-
|
|
8
|
-
from ...context7.agent_integration import Context7AgentHelper, get_context7_helper
|
|
9
|
-
from ...core.agent_base import BaseAgent
|
|
10
|
-
from ...core.config import ProjectConfig, load_config
|
|
11
|
-
from .doc_generator import DocGenerator
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class DocumenterAgent(BaseAgent):
|
|
15
|
-
"""
|
|
16
|
-
Documenter Agent - Documentation generation.
|
|
17
|
-
|
|
18
|
-
Permissions: Read, Write, Grep, Glob
|
|
19
|
-
|
|
20
|
-
⚠️ CRITICAL ACCURACY REQUIREMENT:
|
|
21
|
-
- NEVER make up, invent, or fabricate information - Only report verified facts
|
|
22
|
-
- ALWAYS verify claims by checking actual results, not just test pass/fail
|
|
23
|
-
- Verify API calls succeed - inspect response data, status codes, error messages
|
|
24
|
-
- Distinguish between code paths executing and actual functionality working
|
|
25
|
-
- Admit uncertainty explicitly when you cannot verify
|
|
26
|
-
"""
|
|
27
|
-
|
|
28
|
-
def __init__(self, config: ProjectConfig | None = None):
|
|
29
|
-
super().__init__(
|
|
30
|
-
agent_id="documenter", agent_name="Documenter Agent", config=config
|
|
31
|
-
)
|
|
32
|
-
# Use config if provided, otherwise load defaults
|
|
33
|
-
if config is None:
|
|
34
|
-
config = load_config()
|
|
35
|
-
self.config = config
|
|
36
|
-
|
|
37
|
-
# Initialize doc generator
|
|
38
|
-
self.doc_generator = DocGenerator()
|
|
39
|
-
|
|
40
|
-
# Get documenter config
|
|
41
|
-
documenter_config = (
|
|
42
|
-
config.agents.documenter if config and config.agents else None
|
|
43
|
-
)
|
|
44
|
-
self.docs_dir = (
|
|
45
|
-
Path(documenter_config.docs_dir)
|
|
46
|
-
if documenter_config and documenter_config.docs_dir
|
|
47
|
-
else Path("docs")
|
|
48
|
-
)
|
|
49
|
-
self.include_examples = (
|
|
50
|
-
documenter_config.include_examples if documenter_config else True
|
|
51
|
-
)
|
|
52
|
-
self.docstring_format = (
|
|
53
|
-
documenter_config.docstring_format if documenter_config else "google"
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
# Initialize Context7 helper (Enhancement: Universal Context7 integration)
|
|
57
|
-
self.context7: Context7AgentHelper | None = None
|
|
58
|
-
if config:
|
|
59
|
-
self.context7 = get_context7_helper(self, config)
|
|
60
|
-
|
|
61
|
-
# Ensure docs directory exists
|
|
62
|
-
self.docs_dir.mkdir(parents=True, exist_ok=True)
|
|
63
|
-
|
|
64
|
-
def get_commands(self) -> list[dict[str, str]]:
|
|
65
|
-
"""Return list of available commands."""
|
|
66
|
-
commands = super().get_commands()
|
|
67
|
-
commands.extend(
|
|
68
|
-
[
|
|
69
|
-
{
|
|
70
|
-
"command": "*document",
|
|
71
|
-
"description": "Generate documentation for a file",
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
"command": "*document-api",
|
|
75
|
-
"description": "Document API endpoints (alias for generate-docs)",
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"command": "*generate-docs",
|
|
79
|
-
"description": "Generate API documentation",
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"command": "*update-readme",
|
|
83
|
-
"description": "Generate or update README.md",
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"command": "*update-docstrings",
|
|
87
|
-
"description": "Update docstrings in code",
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"command": "*generate-project-docs",
|
|
91
|
-
"description": "Generate project-level API documentation for all agents and workflow engine",
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"command": "*update-project-docs-for-new-agent",
|
|
95
|
-
"description": "Update all project documentation files for a newly created agent",
|
|
96
|
-
},
|
|
97
|
-
]
|
|
98
|
-
)
|
|
99
|
-
return commands
|
|
100
|
-
|
|
101
|
-
async def run(self, command: str, **kwargs) -> dict[str, Any]:
|
|
102
|
-
"""Execute a command."""
|
|
103
|
-
if command == "document":
|
|
104
|
-
return await self.document_command(**kwargs)
|
|
105
|
-
elif command == "document-api":
|
|
106
|
-
# Backward-compatible alias used by docs and CLI help.
|
|
107
|
-
return await self.generate_docs_command(**kwargs)
|
|
108
|
-
elif command == "generate-docs":
|
|
109
|
-
return await self.generate_docs_command(**kwargs)
|
|
110
|
-
elif command == "update-readme":
|
|
111
|
-
return await self.update_readme_command(**kwargs)
|
|
112
|
-
elif command == "update-docstrings":
|
|
113
|
-
return await self.update_docstrings_command(**kwargs)
|
|
114
|
-
elif command == "generate-project-docs":
|
|
115
|
-
return await self.generate_project_docs_command(**kwargs)
|
|
116
|
-
elif command == "update-project-docs-for-new-agent":
|
|
117
|
-
return await self.update_project_docs_for_new_agent_command(**kwargs)
|
|
118
|
-
elif command == "help":
|
|
119
|
-
return self._help()
|
|
120
|
-
else:
|
|
121
|
-
return {"error": f"Unknown command: {command}"}
|
|
122
|
-
|
|
123
|
-
async def document_command(
|
|
124
|
-
self,
|
|
125
|
-
file: str,
|
|
126
|
-
output_format: str = "markdown",
|
|
127
|
-
output_file: str | None = None,
|
|
128
|
-
) -> dict[str, Any]:
|
|
129
|
-
"""
|
|
130
|
-
Generate documentation for a file.
|
|
131
|
-
|
|
132
|
-
Args:
|
|
133
|
-
file: Source code file path
|
|
134
|
-
output_format: Output format (markdown/rst/html)
|
|
135
|
-
output_file: Optional output file path
|
|
136
|
-
"""
|
|
137
|
-
file_path = Path(file)
|
|
138
|
-
if not file_path.exists():
|
|
139
|
-
return {"error": f"File not found: {file_path}"}
|
|
140
|
-
|
|
141
|
-
self._validate_path(file_path)
|
|
142
|
-
|
|
143
|
-
# Prepare API docs instruction
|
|
144
|
-
instruction = self.doc_generator.prepare_api_docs(file_path, output_format)
|
|
145
|
-
|
|
146
|
-
# Determine output file
|
|
147
|
-
if output_file:
|
|
148
|
-
output_path = Path(output_file)
|
|
149
|
-
else:
|
|
150
|
-
# Auto-generate output path
|
|
151
|
-
output_path = (
|
|
152
|
-
self.docs_dir
|
|
153
|
-
/ f"{file_path.stem}_api.{'md' if output_format == 'markdown' else output_format}"
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
return {
|
|
157
|
-
"type": "document",
|
|
158
|
-
"instruction": instruction.to_dict(),
|
|
159
|
-
"skill_command": instruction.to_skill_command(),
|
|
160
|
-
"file": str(file_path),
|
|
161
|
-
"output_file": str(output_path),
|
|
162
|
-
"format": output_format,
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
async def generate_docs_command(
|
|
166
|
-
self, file: str | None = None, output_format: str = "markdown"
|
|
167
|
-
) -> dict[str, Any]:
|
|
168
|
-
"""
|
|
169
|
-
Generate API documentation.
|
|
170
|
-
|
|
171
|
-
Args:
|
|
172
|
-
file: Optional source file (defaults to all Python files)
|
|
173
|
-
output_format: Output format
|
|
174
|
-
"""
|
|
175
|
-
if file:
|
|
176
|
-
file_path = Path(file)
|
|
177
|
-
if not file_path.exists():
|
|
178
|
-
return {"error": f"File not found: {file_path}"}
|
|
179
|
-
|
|
180
|
-
self._validate_path(file_path)
|
|
181
|
-
instruction = self.doc_generator.prepare_api_docs(file_path, output_format)
|
|
182
|
-
|
|
183
|
-
return {
|
|
184
|
-
"type": "api_docs",
|
|
185
|
-
"instruction": instruction.to_dict(),
|
|
186
|
-
"skill_command": instruction.to_skill_command(),
|
|
187
|
-
"file": str(file_path),
|
|
188
|
-
"format": output_format,
|
|
189
|
-
}
|
|
190
|
-
else:
|
|
191
|
-
return {"error": "File path required"}
|
|
192
|
-
|
|
193
|
-
async def update_readme_command(
|
|
194
|
-
self, project_root: str | None = None, context: str | None = None
|
|
195
|
-
) -> dict[str, Any]:
|
|
196
|
-
"""
|
|
197
|
-
Generate or update README.md.
|
|
198
|
-
|
|
199
|
-
Args:
|
|
200
|
-
project_root: Project root directory (default: current directory)
|
|
201
|
-
context: Optional additional context
|
|
202
|
-
"""
|
|
203
|
-
if project_root:
|
|
204
|
-
root_path = Path(project_root)
|
|
205
|
-
else:
|
|
206
|
-
root_path = Path.cwd()
|
|
207
|
-
|
|
208
|
-
if not root_path.exists():
|
|
209
|
-
return {"error": f"Directory not found: {root_path}"}
|
|
210
|
-
|
|
211
|
-
# Prepare README instruction
|
|
212
|
-
instruction = self.doc_generator.prepare_readme(root_path, context)
|
|
213
|
-
|
|
214
|
-
readme_path = root_path / "README.md"
|
|
215
|
-
|
|
216
|
-
return {
|
|
217
|
-
"type": "readme",
|
|
218
|
-
"instruction": instruction.to_dict(),
|
|
219
|
-
"skill_command": instruction.to_skill_command(),
|
|
220
|
-
"project_root": str(root_path),
|
|
221
|
-
"readme_file": str(readme_path),
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
async def update_docstrings_command(
|
|
225
|
-
self,
|
|
226
|
-
file: str,
|
|
227
|
-
docstring_format: str | None = None,
|
|
228
|
-
write_file: bool = False,
|
|
229
|
-
) -> dict[str, Any]:
|
|
230
|
-
"""
|
|
231
|
-
Update or add docstrings to code.
|
|
232
|
-
|
|
233
|
-
Args:
|
|
234
|
-
file: Source code file path
|
|
235
|
-
docstring_format: Docstring format (default: config value)
|
|
236
|
-
write_file: Whether to write updated code back to file
|
|
237
|
-
"""
|
|
238
|
-
file_path = Path(file)
|
|
239
|
-
if not file_path.exists():
|
|
240
|
-
return {"error": f"File not found: {file_path}"}
|
|
241
|
-
|
|
242
|
-
self._validate_path(file_path)
|
|
243
|
-
|
|
244
|
-
format_to_use = docstring_format or self.docstring_format
|
|
245
|
-
|
|
246
|
-
# Prepare docstring update instruction
|
|
247
|
-
instruction = self.doc_generator.prepare_docstring_update(
|
|
248
|
-
file_path, format_to_use
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
return {
|
|
252
|
-
"type": "docstrings",
|
|
253
|
-
"instruction": instruction.to_dict(),
|
|
254
|
-
"skill_command": instruction.to_skill_command(),
|
|
255
|
-
"file": str(file_path),
|
|
256
|
-
"format": format_to_use,
|
|
257
|
-
"written": write_file,
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
async def generate_project_docs_command(
|
|
261
|
-
self,
|
|
262
|
-
project_root: str | None = None,
|
|
263
|
-
output_dir: str | None = None,
|
|
264
|
-
output_format: str = "markdown",
|
|
265
|
-
include_modules: list[str] | None = None,
|
|
266
|
-
) -> dict[str, Any]:
|
|
267
|
-
"""
|
|
268
|
-
Generate project-level API documentation.
|
|
269
|
-
|
|
270
|
-
Args:
|
|
271
|
-
project_root: Project root directory (default: current directory)
|
|
272
|
-
output_dir: Output directory for docs (default: docs/api/)
|
|
273
|
-
output_format: Output format (markdown/rst/html)
|
|
274
|
-
include_modules: Optional list of module paths to include (relative to project_root)
|
|
275
|
-
|
|
276
|
-
Returns:
|
|
277
|
-
Dictionary with generation results
|
|
278
|
-
"""
|
|
279
|
-
if project_root:
|
|
280
|
-
root_path = Path(project_root)
|
|
281
|
-
else:
|
|
282
|
-
root_path = Path.cwd()
|
|
283
|
-
|
|
284
|
-
if not root_path.exists():
|
|
285
|
-
return {"error": f"Directory not found: {root_path}"}
|
|
286
|
-
|
|
287
|
-
# Determine output directory
|
|
288
|
-
if output_dir:
|
|
289
|
-
output_path = Path(output_dir)
|
|
290
|
-
# Validate output path is within project or allowed location
|
|
291
|
-
self._validate_path(output_path)
|
|
292
|
-
else:
|
|
293
|
-
# Default to docs/api/ under project root
|
|
294
|
-
output_path = root_path / "docs" / "api"
|
|
295
|
-
|
|
296
|
-
# Ensure output directory exists
|
|
297
|
-
output_path.mkdir(parents=True, exist_ok=True)
|
|
298
|
-
|
|
299
|
-
# Prepare project documentation instruction
|
|
300
|
-
# For project docs, we'll create a single instruction for the project root
|
|
301
|
-
instruction = self.doc_generator.prepare_api_docs(
|
|
302
|
-
root_path / "README.md" if (root_path / "README.md").exists() else root_path / "__init__.py",
|
|
303
|
-
output_format
|
|
304
|
-
)
|
|
305
|
-
instruction.output_dir = str(output_path)
|
|
306
|
-
|
|
307
|
-
return {
|
|
308
|
-
"type": "project_docs",
|
|
309
|
-
"instruction": instruction.to_dict(),
|
|
310
|
-
"skill_command": instruction.to_skill_command(),
|
|
311
|
-
"project_root": str(root_path),
|
|
312
|
-
"output_dir": str(output_path),
|
|
313
|
-
"format": output_format,
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
async def update_project_docs_for_new_agent_command(
|
|
317
|
-
self,
|
|
318
|
-
agent_name: str,
|
|
319
|
-
agent_info: dict[str, Any] | None = None,
|
|
320
|
-
) -> dict[str, Any]:
|
|
321
|
-
"""
|
|
322
|
-
Update all project documentation files for a newly created agent.
|
|
323
|
-
|
|
324
|
-
This method updates:
|
|
325
|
-
- README.md (agent count, agent list)
|
|
326
|
-
- docs/API.md (agent subcommands, API docs)
|
|
327
|
-
- docs/ARCHITECTURE.md (agent list)
|
|
328
|
-
- .cursor/rules/agent-capabilities.mdc (agent section)
|
|
329
|
-
|
|
330
|
-
Args:
|
|
331
|
-
agent_name: Name of the new agent (e.g., "evaluator")
|
|
332
|
-
agent_info: Optional dictionary with agent metadata
|
|
333
|
-
|
|
334
|
-
Returns:
|
|
335
|
-
Dictionary with update results for each file
|
|
336
|
-
"""
|
|
337
|
-
agent_info = agent_info or {}
|
|
338
|
-
results = {
|
|
339
|
-
"agent_name": agent_name,
|
|
340
|
-
"readme_updated": False,
|
|
341
|
-
"api_updated": False,
|
|
342
|
-
"architecture_updated": False,
|
|
343
|
-
"capabilities_updated": False,
|
|
344
|
-
"errors": [],
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
try:
|
|
348
|
-
# Get project root from activated state or use current directory
|
|
349
|
-
# BaseAgent stores project_root after activate() is called
|
|
350
|
-
project_root = getattr(self, 'project_root', None) or Path.cwd()
|
|
351
|
-
|
|
352
|
-
# Update README.md
|
|
353
|
-
readme_path = project_root / "README.md"
|
|
354
|
-
if readme_path.exists():
|
|
355
|
-
try:
|
|
356
|
-
readme_content = readme_path.read_text(encoding="utf-8")
|
|
357
|
-
|
|
358
|
-
# Update agent count (find pattern like "Workflow Agents (13)" or "13 (fixed)")
|
|
359
|
-
import re
|
|
360
|
-
# Pattern 1: "Workflow Agents (13)"
|
|
361
|
-
pattern1 = r"Workflow Agents\s*\((\d+)\)"
|
|
362
|
-
match1 = re.search(pattern1, readme_content)
|
|
363
|
-
if match1:
|
|
364
|
-
current_count = int(match1.group(1))
|
|
365
|
-
new_count = current_count + 1
|
|
366
|
-
readme_content = re.sub(
|
|
367
|
-
pattern1,
|
|
368
|
-
f"Workflow Agents ({new_count})",
|
|
369
|
-
readme_content
|
|
370
|
-
)
|
|
371
|
-
|
|
372
|
-
# Pattern 2: "13 (fixed)" in table
|
|
373
|
-
pattern2 = r"(\d+)\s*\(fixed\)"
|
|
374
|
-
match2 = re.search(pattern2, readme_content)
|
|
375
|
-
if match2:
|
|
376
|
-
current_count = int(match2.group(1))
|
|
377
|
-
new_count = current_count + 1
|
|
378
|
-
readme_content = re.sub(
|
|
379
|
-
pattern2,
|
|
380
|
-
f"{new_count} (fixed)",
|
|
381
|
-
readme_content,
|
|
382
|
-
count=1
|
|
383
|
-
)
|
|
384
|
-
|
|
385
|
-
# Add agent to agent list if not present
|
|
386
|
-
agent_title = agent_name.title()
|
|
387
|
-
if f"- **Evaluation**: {agent_name}" not in readme_content and \
|
|
388
|
-
f"- evaluator" not in readme_content.lower():
|
|
389
|
-
# Find the last agent in the list and add after it
|
|
390
|
-
# Look for pattern like "- **Enhancement**: enhancer"
|
|
391
|
-
last_agent_pattern = r"(- \*\*[^\*]+\*\*: [^\n]+)"
|
|
392
|
-
matches = list(re.finditer(last_agent_pattern, readme_content))
|
|
393
|
-
if matches:
|
|
394
|
-
last_match = matches[-1]
|
|
395
|
-
insert_pos = last_match.end()
|
|
396
|
-
new_line = f"\n- **Evaluation**: {agent_name} ✅ (Framework Effectiveness Analysis & Continuous Improvement)"
|
|
397
|
-
readme_content = readme_content[:insert_pos] + new_line + readme_content[insert_pos:]
|
|
398
|
-
|
|
399
|
-
readme_path.write_text(readme_content, encoding="utf-8")
|
|
400
|
-
results["readme_updated"] = True
|
|
401
|
-
except Exception as e:
|
|
402
|
-
results["errors"].append(f"README.md update failed: {e}")
|
|
403
|
-
|
|
404
|
-
# Update API.md
|
|
405
|
-
api_path = project_root / "docs" / "API.md"
|
|
406
|
-
if api_path.exists():
|
|
407
|
-
try:
|
|
408
|
-
api_content = api_path.read_text(encoding="utf-8")
|
|
409
|
-
|
|
410
|
-
# Add agent to subcommands list
|
|
411
|
-
if f"`{agent_name}`" not in api_content:
|
|
412
|
-
# Find the agent subcommands line
|
|
413
|
-
subcommands_pattern = r"(\*\*Agent subcommands\*\*: `[^`]+`)"
|
|
414
|
-
match = re.search(subcommands_pattern, api_content)
|
|
415
|
-
if match:
|
|
416
|
-
subcommands_text = match.group(1)
|
|
417
|
-
# Add agent name before the closing backtick
|
|
418
|
-
new_subcommands = subcommands_text[:-1] + f", `{agent_name}`" + subcommands_text[-1]
|
|
419
|
-
api_content = api_content.replace(subcommands_text, new_subcommands)
|
|
420
|
-
|
|
421
|
-
api_path.write_text(api_content, encoding="utf-8")
|
|
422
|
-
results["api_updated"] = True
|
|
423
|
-
except Exception as e:
|
|
424
|
-
results["errors"].append(f"API.md update failed: {e}")
|
|
425
|
-
|
|
426
|
-
# Update ARCHITECTURE.md
|
|
427
|
-
arch_path = project_root / "docs" / "ARCHITECTURE.md"
|
|
428
|
-
if arch_path.exists():
|
|
429
|
-
try:
|
|
430
|
-
arch_content = arch_path.read_text(encoding="utf-8")
|
|
431
|
-
|
|
432
|
-
# Update agent count
|
|
433
|
-
arch_pattern = r"fixed set of (\d+) SDLC-oriented agents"
|
|
434
|
-
arch_match = re.search(arch_pattern, arch_content)
|
|
435
|
-
if arch_match:
|
|
436
|
-
current_count = int(arch_match.group(1))
|
|
437
|
-
new_count = current_count + 1
|
|
438
|
-
arch_content = re.sub(
|
|
439
|
-
arch_pattern,
|
|
440
|
-
f"fixed set of {new_count} SDLC-oriented agents",
|
|
441
|
-
arch_content
|
|
442
|
-
)
|
|
443
|
-
|
|
444
|
-
# Add agent to agent list
|
|
445
|
-
if f"- {agent_name}" not in arch_content:
|
|
446
|
-
# Find the agents list section
|
|
447
|
-
agents_list_pattern = r"(Agents:\s*\n\s*- [^\n]+\n(?:\s+- [^\n]+\n)*)"
|
|
448
|
-
agents_match = re.search(agents_list_pattern, arch_content)
|
|
449
|
-
if agents_match:
|
|
450
|
-
agents_list = agents_match.group(1)
|
|
451
|
-
# Add new agent at the end
|
|
452
|
-
new_agent_line = f"- {agent_name}\n"
|
|
453
|
-
arch_content = arch_content.replace(agents_list, agents_list + new_agent_line)
|
|
454
|
-
|
|
455
|
-
arch_path.write_text(arch_content, encoding="utf-8")
|
|
456
|
-
results["architecture_updated"] = True
|
|
457
|
-
except Exception as e:
|
|
458
|
-
results["errors"].append(f"ARCHITECTURE.md update failed: {e}")
|
|
459
|
-
|
|
460
|
-
# Update agent-capabilities.mdc
|
|
461
|
-
capabilities_path = project_root / ".cursor" / "rules" / "agent-capabilities.mdc"
|
|
462
|
-
if capabilities_path.exists():
|
|
463
|
-
try:
|
|
464
|
-
capabilities_content = capabilities_path.read_text(encoding="utf-8")
|
|
465
|
-
|
|
466
|
-
# Update agent count
|
|
467
|
-
cap_pattern = r"(\d+) specialized workflow agents"
|
|
468
|
-
cap_match = re.search(cap_pattern, capabilities_content)
|
|
469
|
-
if cap_match:
|
|
470
|
-
current_count = int(cap_match.group(1))
|
|
471
|
-
new_count = current_count + 1
|
|
472
|
-
capabilities_content = re.sub(
|
|
473
|
-
cap_pattern,
|
|
474
|
-
f"{new_count} specialized workflow agents",
|
|
475
|
-
capabilities_content
|
|
476
|
-
)
|
|
477
|
-
|
|
478
|
-
# Add agent to agent list if not present
|
|
479
|
-
if f"- **Evaluation**: {agent_name}" not in capabilities_content:
|
|
480
|
-
# Find the last agent in the list
|
|
481
|
-
last_agent_pattern = r"(- \*\*[^\*]+\*\*: [^\n]+)"
|
|
482
|
-
matches = list(re.finditer(last_agent_pattern, capabilities_content))
|
|
483
|
-
if matches:
|
|
484
|
-
last_match = matches[-1]
|
|
485
|
-
insert_pos = last_match.end()
|
|
486
|
-
new_line = f"\n- **Evaluation**: {agent_name}"
|
|
487
|
-
capabilities_content = capabilities_content[:insert_pos] + new_line + capabilities_content[insert_pos:]
|
|
488
|
-
|
|
489
|
-
capabilities_path.write_text(capabilities_content, encoding="utf-8")
|
|
490
|
-
results["capabilities_updated"] = True
|
|
491
|
-
except Exception as e:
|
|
492
|
-
results["errors"].append(f"agent-capabilities.mdc update failed: {e}")
|
|
493
|
-
|
|
494
|
-
except Exception as e:
|
|
495
|
-
results["errors"].append(f"Documentation update failed: {e}")
|
|
496
|
-
|
|
497
|
-
results["success"] = len(results["errors"]) == 0
|
|
498
|
-
return results
|
|
499
|
-
|
|
500
|
-
def _help(self) -> dict[str, Any]:
|
|
501
|
-
"""
|
|
502
|
-
Return help information for Documenter Agent.
|
|
503
|
-
|
|
504
|
-
Returns standardized help format with commands and usage examples.
|
|
505
|
-
|
|
506
|
-
Returns:
|
|
507
|
-
dict: Help information with standardized format:
|
|
508
|
-
- type (str): Always "help"
|
|
509
|
-
- content (str): Formatted help text containing:
|
|
510
|
-
- Available commands (from format_help())
|
|
511
|
-
- Usage examples for document, generate-docs, update-readme,
|
|
512
|
-
update-docstrings, and generate-project-docs commands
|
|
513
|
-
|
|
514
|
-
Note:
|
|
515
|
-
This method is synchronous as it performs no I/O operations.
|
|
516
|
-
Called via agent.run("help") which handles async context.
|
|
517
|
-
Uses BaseAgent.format_help() which caches command list for performance.
|
|
518
|
-
"""
|
|
519
|
-
# Optimize string building by using list and join
|
|
520
|
-
examples = [
|
|
521
|
-
" *document code.py --output-format markdown",
|
|
522
|
-
" *generate-docs utils.py",
|
|
523
|
-
" *update-readme",
|
|
524
|
-
" *update-docstrings code.py --write-file",
|
|
525
|
-
" *generate-project-docs --output-dir docs/api",
|
|
526
|
-
]
|
|
527
|
-
help_text = "\n".join([self.format_help(), "\nExamples:", *examples])
|
|
528
|
-
return {"type": "help", "content": help_text}
|
|
529
|
-
|
|
530
|
-
async def close(self):
|
|
531
|
-
"""Close agent and clean up resources."""
|
|
1
|
+
"""
|
|
2
|
+
Documenter Agent - Generates documentation
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from ...context7.agent_integration import Context7AgentHelper, get_context7_helper
|
|
9
|
+
from ...core.agent_base import BaseAgent
|
|
10
|
+
from ...core.config import ProjectConfig, load_config
|
|
11
|
+
from .doc_generator import DocGenerator
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DocumenterAgent(BaseAgent):
|
|
15
|
+
"""
|
|
16
|
+
Documenter Agent - Documentation generation.
|
|
17
|
+
|
|
18
|
+
Permissions: Read, Write, Grep, Glob
|
|
19
|
+
|
|
20
|
+
⚠️ CRITICAL ACCURACY REQUIREMENT:
|
|
21
|
+
- NEVER make up, invent, or fabricate information - Only report verified facts
|
|
22
|
+
- ALWAYS verify claims by checking actual results, not just test pass/fail
|
|
23
|
+
- Verify API calls succeed - inspect response data, status codes, error messages
|
|
24
|
+
- Distinguish between code paths executing and actual functionality working
|
|
25
|
+
- Admit uncertainty explicitly when you cannot verify
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(self, config: ProjectConfig | None = None):
|
|
29
|
+
super().__init__(
|
|
30
|
+
agent_id="documenter", agent_name="Documenter Agent", config=config
|
|
31
|
+
)
|
|
32
|
+
# Use config if provided, otherwise load defaults
|
|
33
|
+
if config is None:
|
|
34
|
+
config = load_config()
|
|
35
|
+
self.config = config
|
|
36
|
+
|
|
37
|
+
# Initialize doc generator
|
|
38
|
+
self.doc_generator = DocGenerator()
|
|
39
|
+
|
|
40
|
+
# Get documenter config
|
|
41
|
+
documenter_config = (
|
|
42
|
+
config.agents.documenter if config and config.agents else None
|
|
43
|
+
)
|
|
44
|
+
self.docs_dir = (
|
|
45
|
+
Path(documenter_config.docs_dir)
|
|
46
|
+
if documenter_config and documenter_config.docs_dir
|
|
47
|
+
else Path("docs")
|
|
48
|
+
)
|
|
49
|
+
self.include_examples = (
|
|
50
|
+
documenter_config.include_examples if documenter_config else True
|
|
51
|
+
)
|
|
52
|
+
self.docstring_format = (
|
|
53
|
+
documenter_config.docstring_format if documenter_config else "google"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Initialize Context7 helper (Enhancement: Universal Context7 integration)
|
|
57
|
+
self.context7: Context7AgentHelper | None = None
|
|
58
|
+
if config:
|
|
59
|
+
self.context7 = get_context7_helper(self, config)
|
|
60
|
+
|
|
61
|
+
# Ensure docs directory exists
|
|
62
|
+
self.docs_dir.mkdir(parents=True, exist_ok=True)
|
|
63
|
+
|
|
64
|
+
def get_commands(self) -> list[dict[str, str]]:
|
|
65
|
+
"""Return list of available commands."""
|
|
66
|
+
commands = super().get_commands()
|
|
67
|
+
commands.extend(
|
|
68
|
+
[
|
|
69
|
+
{
|
|
70
|
+
"command": "*document",
|
|
71
|
+
"description": "Generate documentation for a file",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"command": "*document-api",
|
|
75
|
+
"description": "Document API endpoints (alias for generate-docs)",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"command": "*generate-docs",
|
|
79
|
+
"description": "Generate API documentation",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"command": "*update-readme",
|
|
83
|
+
"description": "Generate or update README.md",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"command": "*update-docstrings",
|
|
87
|
+
"description": "Update docstrings in code",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"command": "*generate-project-docs",
|
|
91
|
+
"description": "Generate project-level API documentation for all agents and workflow engine",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"command": "*update-project-docs-for-new-agent",
|
|
95
|
+
"description": "Update all project documentation files for a newly created agent",
|
|
96
|
+
},
|
|
97
|
+
]
|
|
98
|
+
)
|
|
99
|
+
return commands
|
|
100
|
+
|
|
101
|
+
async def run(self, command: str, **kwargs) -> dict[str, Any]:
|
|
102
|
+
"""Execute a command."""
|
|
103
|
+
if command == "document":
|
|
104
|
+
return await self.document_command(**kwargs)
|
|
105
|
+
elif command == "document-api":
|
|
106
|
+
# Backward-compatible alias used by docs and CLI help.
|
|
107
|
+
return await self.generate_docs_command(**kwargs)
|
|
108
|
+
elif command == "generate-docs":
|
|
109
|
+
return await self.generate_docs_command(**kwargs)
|
|
110
|
+
elif command == "update-readme":
|
|
111
|
+
return await self.update_readme_command(**kwargs)
|
|
112
|
+
elif command == "update-docstrings":
|
|
113
|
+
return await self.update_docstrings_command(**kwargs)
|
|
114
|
+
elif command == "generate-project-docs":
|
|
115
|
+
return await self.generate_project_docs_command(**kwargs)
|
|
116
|
+
elif command == "update-project-docs-for-new-agent":
|
|
117
|
+
return await self.update_project_docs_for_new_agent_command(**kwargs)
|
|
118
|
+
elif command == "help":
|
|
119
|
+
return self._help()
|
|
120
|
+
else:
|
|
121
|
+
return {"error": f"Unknown command: {command}"}
|
|
122
|
+
|
|
123
|
+
async def document_command(
|
|
124
|
+
self,
|
|
125
|
+
file: str,
|
|
126
|
+
output_format: str = "markdown",
|
|
127
|
+
output_file: str | None = None,
|
|
128
|
+
) -> dict[str, Any]:
|
|
129
|
+
"""
|
|
130
|
+
Generate documentation for a file.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
file: Source code file path
|
|
134
|
+
output_format: Output format (markdown/rst/html)
|
|
135
|
+
output_file: Optional output file path
|
|
136
|
+
"""
|
|
137
|
+
file_path = Path(file)
|
|
138
|
+
if not file_path.exists():
|
|
139
|
+
return {"error": f"File not found: {file_path}"}
|
|
140
|
+
|
|
141
|
+
self._validate_path(file_path)
|
|
142
|
+
|
|
143
|
+
# Prepare API docs instruction
|
|
144
|
+
instruction = self.doc_generator.prepare_api_docs(file_path, output_format)
|
|
145
|
+
|
|
146
|
+
# Determine output file
|
|
147
|
+
if output_file:
|
|
148
|
+
output_path = Path(output_file)
|
|
149
|
+
else:
|
|
150
|
+
# Auto-generate output path
|
|
151
|
+
output_path = (
|
|
152
|
+
self.docs_dir
|
|
153
|
+
/ f"{file_path.stem}_api.{'md' if output_format == 'markdown' else output_format}"
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
"type": "document",
|
|
158
|
+
"instruction": instruction.to_dict(),
|
|
159
|
+
"skill_command": instruction.to_skill_command(),
|
|
160
|
+
"file": str(file_path),
|
|
161
|
+
"output_file": str(output_path),
|
|
162
|
+
"format": output_format,
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async def generate_docs_command(
|
|
166
|
+
self, file: str | None = None, output_format: str = "markdown"
|
|
167
|
+
) -> dict[str, Any]:
|
|
168
|
+
"""
|
|
169
|
+
Generate API documentation.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
file: Optional source file (defaults to all Python files)
|
|
173
|
+
output_format: Output format
|
|
174
|
+
"""
|
|
175
|
+
if file:
|
|
176
|
+
file_path = Path(file)
|
|
177
|
+
if not file_path.exists():
|
|
178
|
+
return {"error": f"File not found: {file_path}"}
|
|
179
|
+
|
|
180
|
+
self._validate_path(file_path)
|
|
181
|
+
instruction = self.doc_generator.prepare_api_docs(file_path, output_format)
|
|
182
|
+
|
|
183
|
+
return {
|
|
184
|
+
"type": "api_docs",
|
|
185
|
+
"instruction": instruction.to_dict(),
|
|
186
|
+
"skill_command": instruction.to_skill_command(),
|
|
187
|
+
"file": str(file_path),
|
|
188
|
+
"format": output_format,
|
|
189
|
+
}
|
|
190
|
+
else:
|
|
191
|
+
return {"error": "File path required"}
|
|
192
|
+
|
|
193
|
+
async def update_readme_command(
|
|
194
|
+
self, project_root: str | None = None, context: str | None = None
|
|
195
|
+
) -> dict[str, Any]:
|
|
196
|
+
"""
|
|
197
|
+
Generate or update README.md.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
project_root: Project root directory (default: current directory)
|
|
201
|
+
context: Optional additional context
|
|
202
|
+
"""
|
|
203
|
+
if project_root:
|
|
204
|
+
root_path = Path(project_root)
|
|
205
|
+
else:
|
|
206
|
+
root_path = Path.cwd()
|
|
207
|
+
|
|
208
|
+
if not root_path.exists():
|
|
209
|
+
return {"error": f"Directory not found: {root_path}"}
|
|
210
|
+
|
|
211
|
+
# Prepare README instruction
|
|
212
|
+
instruction = self.doc_generator.prepare_readme(root_path, context)
|
|
213
|
+
|
|
214
|
+
readme_path = root_path / "README.md"
|
|
215
|
+
|
|
216
|
+
return {
|
|
217
|
+
"type": "readme",
|
|
218
|
+
"instruction": instruction.to_dict(),
|
|
219
|
+
"skill_command": instruction.to_skill_command(),
|
|
220
|
+
"project_root": str(root_path),
|
|
221
|
+
"readme_file": str(readme_path),
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
async def update_docstrings_command(
|
|
225
|
+
self,
|
|
226
|
+
file: str,
|
|
227
|
+
docstring_format: str | None = None,
|
|
228
|
+
write_file: bool = False,
|
|
229
|
+
) -> dict[str, Any]:
|
|
230
|
+
"""
|
|
231
|
+
Update or add docstrings to code.
|
|
232
|
+
|
|
233
|
+
Args:
|
|
234
|
+
file: Source code file path
|
|
235
|
+
docstring_format: Docstring format (default: config value)
|
|
236
|
+
write_file: Whether to write updated code back to file
|
|
237
|
+
"""
|
|
238
|
+
file_path = Path(file)
|
|
239
|
+
if not file_path.exists():
|
|
240
|
+
return {"error": f"File not found: {file_path}"}
|
|
241
|
+
|
|
242
|
+
self._validate_path(file_path)
|
|
243
|
+
|
|
244
|
+
format_to_use = docstring_format or self.docstring_format
|
|
245
|
+
|
|
246
|
+
# Prepare docstring update instruction
|
|
247
|
+
instruction = self.doc_generator.prepare_docstring_update(
|
|
248
|
+
file_path, format_to_use
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
return {
|
|
252
|
+
"type": "docstrings",
|
|
253
|
+
"instruction": instruction.to_dict(),
|
|
254
|
+
"skill_command": instruction.to_skill_command(),
|
|
255
|
+
"file": str(file_path),
|
|
256
|
+
"format": format_to_use,
|
|
257
|
+
"written": write_file,
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
async def generate_project_docs_command(
|
|
261
|
+
self,
|
|
262
|
+
project_root: str | None = None,
|
|
263
|
+
output_dir: str | None = None,
|
|
264
|
+
output_format: str = "markdown",
|
|
265
|
+
include_modules: list[str] | None = None,
|
|
266
|
+
) -> dict[str, Any]:
|
|
267
|
+
"""
|
|
268
|
+
Generate project-level API documentation.
|
|
269
|
+
|
|
270
|
+
Args:
|
|
271
|
+
project_root: Project root directory (default: current directory)
|
|
272
|
+
output_dir: Output directory for docs (default: docs/api/)
|
|
273
|
+
output_format: Output format (markdown/rst/html)
|
|
274
|
+
include_modules: Optional list of module paths to include (relative to project_root)
|
|
275
|
+
|
|
276
|
+
Returns:
|
|
277
|
+
Dictionary with generation results
|
|
278
|
+
"""
|
|
279
|
+
if project_root:
|
|
280
|
+
root_path = Path(project_root)
|
|
281
|
+
else:
|
|
282
|
+
root_path = Path.cwd()
|
|
283
|
+
|
|
284
|
+
if not root_path.exists():
|
|
285
|
+
return {"error": f"Directory not found: {root_path}"}
|
|
286
|
+
|
|
287
|
+
# Determine output directory
|
|
288
|
+
if output_dir:
|
|
289
|
+
output_path = Path(output_dir)
|
|
290
|
+
# Validate output path is within project or allowed location
|
|
291
|
+
self._validate_path(output_path)
|
|
292
|
+
else:
|
|
293
|
+
# Default to docs/api/ under project root
|
|
294
|
+
output_path = root_path / "docs" / "api"
|
|
295
|
+
|
|
296
|
+
# Ensure output directory exists
|
|
297
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
298
|
+
|
|
299
|
+
# Prepare project documentation instruction
|
|
300
|
+
# For project docs, we'll create a single instruction for the project root
|
|
301
|
+
instruction = self.doc_generator.prepare_api_docs(
|
|
302
|
+
root_path / "README.md" if (root_path / "README.md").exists() else root_path / "__init__.py",
|
|
303
|
+
output_format
|
|
304
|
+
)
|
|
305
|
+
instruction.output_dir = str(output_path)
|
|
306
|
+
|
|
307
|
+
return {
|
|
308
|
+
"type": "project_docs",
|
|
309
|
+
"instruction": instruction.to_dict(),
|
|
310
|
+
"skill_command": instruction.to_skill_command(),
|
|
311
|
+
"project_root": str(root_path),
|
|
312
|
+
"output_dir": str(output_path),
|
|
313
|
+
"format": output_format,
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
async def update_project_docs_for_new_agent_command(
|
|
317
|
+
self,
|
|
318
|
+
agent_name: str,
|
|
319
|
+
agent_info: dict[str, Any] | None = None,
|
|
320
|
+
) -> dict[str, Any]:
|
|
321
|
+
"""
|
|
322
|
+
Update all project documentation files for a newly created agent.
|
|
323
|
+
|
|
324
|
+
This method updates:
|
|
325
|
+
- README.md (agent count, agent list)
|
|
326
|
+
- docs/API.md (agent subcommands, API docs)
|
|
327
|
+
- docs/ARCHITECTURE.md (agent list)
|
|
328
|
+
- .cursor/rules/agent-capabilities.mdc (agent section)
|
|
329
|
+
|
|
330
|
+
Args:
|
|
331
|
+
agent_name: Name of the new agent (e.g., "evaluator")
|
|
332
|
+
agent_info: Optional dictionary with agent metadata
|
|
333
|
+
|
|
334
|
+
Returns:
|
|
335
|
+
Dictionary with update results for each file
|
|
336
|
+
"""
|
|
337
|
+
agent_info = agent_info or {}
|
|
338
|
+
results = {
|
|
339
|
+
"agent_name": agent_name,
|
|
340
|
+
"readme_updated": False,
|
|
341
|
+
"api_updated": False,
|
|
342
|
+
"architecture_updated": False,
|
|
343
|
+
"capabilities_updated": False,
|
|
344
|
+
"errors": [],
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
try:
|
|
348
|
+
# Get project root from activated state or use current directory
|
|
349
|
+
# BaseAgent stores project_root after activate() is called
|
|
350
|
+
project_root = getattr(self, 'project_root', None) or Path.cwd()
|
|
351
|
+
|
|
352
|
+
# Update README.md
|
|
353
|
+
readme_path = project_root / "README.md"
|
|
354
|
+
if readme_path.exists():
|
|
355
|
+
try:
|
|
356
|
+
readme_content = readme_path.read_text(encoding="utf-8")
|
|
357
|
+
|
|
358
|
+
# Update agent count (find pattern like "Workflow Agents (13)" or "13 (fixed)")
|
|
359
|
+
import re
|
|
360
|
+
# Pattern 1: "Workflow Agents (13)"
|
|
361
|
+
pattern1 = r"Workflow Agents\s*\((\d+)\)"
|
|
362
|
+
match1 = re.search(pattern1, readme_content)
|
|
363
|
+
if match1:
|
|
364
|
+
current_count = int(match1.group(1))
|
|
365
|
+
new_count = current_count + 1
|
|
366
|
+
readme_content = re.sub(
|
|
367
|
+
pattern1,
|
|
368
|
+
f"Workflow Agents ({new_count})",
|
|
369
|
+
readme_content
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
# Pattern 2: "13 (fixed)" in table
|
|
373
|
+
pattern2 = r"(\d+)\s*\(fixed\)"
|
|
374
|
+
match2 = re.search(pattern2, readme_content)
|
|
375
|
+
if match2:
|
|
376
|
+
current_count = int(match2.group(1))
|
|
377
|
+
new_count = current_count + 1
|
|
378
|
+
readme_content = re.sub(
|
|
379
|
+
pattern2,
|
|
380
|
+
f"{new_count} (fixed)",
|
|
381
|
+
readme_content,
|
|
382
|
+
count=1
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
# Add agent to agent list if not present
|
|
386
|
+
agent_title = agent_name.title()
|
|
387
|
+
if f"- **Evaluation**: {agent_name}" not in readme_content and \
|
|
388
|
+
f"- evaluator" not in readme_content.lower():
|
|
389
|
+
# Find the last agent in the list and add after it
|
|
390
|
+
# Look for pattern like "- **Enhancement**: enhancer"
|
|
391
|
+
last_agent_pattern = r"(- \*\*[^\*]+\*\*: [^\n]+)"
|
|
392
|
+
matches = list(re.finditer(last_agent_pattern, readme_content))
|
|
393
|
+
if matches:
|
|
394
|
+
last_match = matches[-1]
|
|
395
|
+
insert_pos = last_match.end()
|
|
396
|
+
new_line = f"\n- **Evaluation**: {agent_name} ✅ (Framework Effectiveness Analysis & Continuous Improvement)"
|
|
397
|
+
readme_content = readme_content[:insert_pos] + new_line + readme_content[insert_pos:]
|
|
398
|
+
|
|
399
|
+
readme_path.write_text(readme_content, encoding="utf-8")
|
|
400
|
+
results["readme_updated"] = True
|
|
401
|
+
except Exception as e:
|
|
402
|
+
results["errors"].append(f"README.md update failed: {e}")
|
|
403
|
+
|
|
404
|
+
# Update API.md
|
|
405
|
+
api_path = project_root / "docs" / "API.md"
|
|
406
|
+
if api_path.exists():
|
|
407
|
+
try:
|
|
408
|
+
api_content = api_path.read_text(encoding="utf-8")
|
|
409
|
+
|
|
410
|
+
# Add agent to subcommands list
|
|
411
|
+
if f"`{agent_name}`" not in api_content:
|
|
412
|
+
# Find the agent subcommands line
|
|
413
|
+
subcommands_pattern = r"(\*\*Agent subcommands\*\*: `[^`]+`)"
|
|
414
|
+
match = re.search(subcommands_pattern, api_content)
|
|
415
|
+
if match:
|
|
416
|
+
subcommands_text = match.group(1)
|
|
417
|
+
# Add agent name before the closing backtick
|
|
418
|
+
new_subcommands = subcommands_text[:-1] + f", `{agent_name}`" + subcommands_text[-1]
|
|
419
|
+
api_content = api_content.replace(subcommands_text, new_subcommands)
|
|
420
|
+
|
|
421
|
+
api_path.write_text(api_content, encoding="utf-8")
|
|
422
|
+
results["api_updated"] = True
|
|
423
|
+
except Exception as e:
|
|
424
|
+
results["errors"].append(f"API.md update failed: {e}")
|
|
425
|
+
|
|
426
|
+
# Update ARCHITECTURE.md
|
|
427
|
+
arch_path = project_root / "docs" / "ARCHITECTURE.md"
|
|
428
|
+
if arch_path.exists():
|
|
429
|
+
try:
|
|
430
|
+
arch_content = arch_path.read_text(encoding="utf-8")
|
|
431
|
+
|
|
432
|
+
# Update agent count
|
|
433
|
+
arch_pattern = r"fixed set of (\d+) SDLC-oriented agents"
|
|
434
|
+
arch_match = re.search(arch_pattern, arch_content)
|
|
435
|
+
if arch_match:
|
|
436
|
+
current_count = int(arch_match.group(1))
|
|
437
|
+
new_count = current_count + 1
|
|
438
|
+
arch_content = re.sub(
|
|
439
|
+
arch_pattern,
|
|
440
|
+
f"fixed set of {new_count} SDLC-oriented agents",
|
|
441
|
+
arch_content
|
|
442
|
+
)
|
|
443
|
+
|
|
444
|
+
# Add agent to agent list
|
|
445
|
+
if f"- {agent_name}" not in arch_content:
|
|
446
|
+
# Find the agents list section
|
|
447
|
+
agents_list_pattern = r"(Agents:\s*\n\s*- [^\n]+\n(?:\s+- [^\n]+\n)*)"
|
|
448
|
+
agents_match = re.search(agents_list_pattern, arch_content)
|
|
449
|
+
if agents_match:
|
|
450
|
+
agents_list = agents_match.group(1)
|
|
451
|
+
# Add new agent at the end
|
|
452
|
+
new_agent_line = f"- {agent_name}\n"
|
|
453
|
+
arch_content = arch_content.replace(agents_list, agents_list + new_agent_line)
|
|
454
|
+
|
|
455
|
+
arch_path.write_text(arch_content, encoding="utf-8")
|
|
456
|
+
results["architecture_updated"] = True
|
|
457
|
+
except Exception as e:
|
|
458
|
+
results["errors"].append(f"ARCHITECTURE.md update failed: {e}")
|
|
459
|
+
|
|
460
|
+
# Update agent-capabilities.mdc
|
|
461
|
+
capabilities_path = project_root / ".cursor" / "rules" / "agent-capabilities.mdc"
|
|
462
|
+
if capabilities_path.exists():
|
|
463
|
+
try:
|
|
464
|
+
capabilities_content = capabilities_path.read_text(encoding="utf-8")
|
|
465
|
+
|
|
466
|
+
# Update agent count
|
|
467
|
+
cap_pattern = r"(\d+) specialized workflow agents"
|
|
468
|
+
cap_match = re.search(cap_pattern, capabilities_content)
|
|
469
|
+
if cap_match:
|
|
470
|
+
current_count = int(cap_match.group(1))
|
|
471
|
+
new_count = current_count + 1
|
|
472
|
+
capabilities_content = re.sub(
|
|
473
|
+
cap_pattern,
|
|
474
|
+
f"{new_count} specialized workflow agents",
|
|
475
|
+
capabilities_content
|
|
476
|
+
)
|
|
477
|
+
|
|
478
|
+
# Add agent to agent list if not present
|
|
479
|
+
if f"- **Evaluation**: {agent_name}" not in capabilities_content:
|
|
480
|
+
# Find the last agent in the list
|
|
481
|
+
last_agent_pattern = r"(- \*\*[^\*]+\*\*: [^\n]+)"
|
|
482
|
+
matches = list(re.finditer(last_agent_pattern, capabilities_content))
|
|
483
|
+
if matches:
|
|
484
|
+
last_match = matches[-1]
|
|
485
|
+
insert_pos = last_match.end()
|
|
486
|
+
new_line = f"\n- **Evaluation**: {agent_name}"
|
|
487
|
+
capabilities_content = capabilities_content[:insert_pos] + new_line + capabilities_content[insert_pos:]
|
|
488
|
+
|
|
489
|
+
capabilities_path.write_text(capabilities_content, encoding="utf-8")
|
|
490
|
+
results["capabilities_updated"] = True
|
|
491
|
+
except Exception as e:
|
|
492
|
+
results["errors"].append(f"agent-capabilities.mdc update failed: {e}")
|
|
493
|
+
|
|
494
|
+
except Exception as e:
|
|
495
|
+
results["errors"].append(f"Documentation update failed: {e}")
|
|
496
|
+
|
|
497
|
+
results["success"] = len(results["errors"]) == 0
|
|
498
|
+
return results
|
|
499
|
+
|
|
500
|
+
def _help(self) -> dict[str, Any]:
|
|
501
|
+
"""
|
|
502
|
+
Return help information for Documenter Agent.
|
|
503
|
+
|
|
504
|
+
Returns standardized help format with commands and usage examples.
|
|
505
|
+
|
|
506
|
+
Returns:
|
|
507
|
+
dict: Help information with standardized format:
|
|
508
|
+
- type (str): Always "help"
|
|
509
|
+
- content (str): Formatted help text containing:
|
|
510
|
+
- Available commands (from format_help())
|
|
511
|
+
- Usage examples for document, generate-docs, update-readme,
|
|
512
|
+
update-docstrings, and generate-project-docs commands
|
|
513
|
+
|
|
514
|
+
Note:
|
|
515
|
+
This method is synchronous as it performs no I/O operations.
|
|
516
|
+
Called via agent.run("help") which handles async context.
|
|
517
|
+
Uses BaseAgent.format_help() which caches command list for performance.
|
|
518
|
+
"""
|
|
519
|
+
# Optimize string building by using list and join
|
|
520
|
+
examples = [
|
|
521
|
+
" *document code.py --output-format markdown",
|
|
522
|
+
" *generate-docs utils.py",
|
|
523
|
+
" *update-readme",
|
|
524
|
+
" *update-docstrings code.py --write-file",
|
|
525
|
+
" *generate-project-docs --output-dir docs/api",
|
|
526
|
+
]
|
|
527
|
+
help_text = "\n".join([self.format_help(), "\nExamples:", *examples])
|
|
528
|
+
return {"type": "help", "content": help_text}
|
|
529
|
+
|
|
530
|
+
async def close(self):
|
|
531
|
+
"""Close agent and clean up resources."""
|