tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,472 +1,472 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Document Generator - Prepares documentation generation instructions for Cursor Skills
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import ast
|
|
6
|
-
import logging
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
from typing import Any
|
|
9
|
-
|
|
10
|
-
from ...core.instructions import DocumentationInstruction
|
|
11
|
-
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class DocGenerator:
|
|
16
|
-
"""Prepares documentation generation instructions for Cursor Skills execution."""
|
|
17
|
-
|
|
18
|
-
def __init__(self):
|
|
19
|
-
"""Initialize document generator."""
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
|
-
def prepare_api_docs(
|
|
23
|
-
self, file_path: Path, output_format: str = "markdown"
|
|
24
|
-
) -> DocumentationInstruction:
|
|
25
|
-
"""
|
|
26
|
-
Prepare API documentation generation instruction for Cursor Skills.
|
|
27
|
-
|
|
28
|
-
Args:
|
|
29
|
-
file_path: Path to the source code file
|
|
30
|
-
output_format: Output format (markdown/rst/html)
|
|
31
|
-
|
|
32
|
-
Returns:
|
|
33
|
-
DocumentationInstruction object for Cursor Skills execution
|
|
34
|
-
"""
|
|
35
|
-
return DocumentationInstruction(
|
|
36
|
-
target_file=str(file_path),
|
|
37
|
-
output_dir=None,
|
|
38
|
-
docstring_format="google",
|
|
39
|
-
include_examples=True,
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
def prepare_readme(
|
|
43
|
-
self, project_root: Path, context: str | None = None
|
|
44
|
-
) -> DocumentationInstruction:
|
|
45
|
-
"""
|
|
46
|
-
Prepare README generation instruction for Cursor Skills.
|
|
47
|
-
|
|
48
|
-
Args:
|
|
49
|
-
project_root: Project root directory
|
|
50
|
-
context: Optional additional context
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
DocumentationInstruction object for Cursor Skills execution
|
|
54
|
-
"""
|
|
55
|
-
readme_path = project_root / "README.md"
|
|
56
|
-
return DocumentationInstruction(
|
|
57
|
-
target_file=str(readme_path),
|
|
58
|
-
output_dir=str(project_root),
|
|
59
|
-
docstring_format="markdown",
|
|
60
|
-
include_examples=True,
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
def prepare_docstring_update(
|
|
64
|
-
self, file_path: Path, docstring_format: str = "google"
|
|
65
|
-
) -> DocumentationInstruction:
|
|
66
|
-
"""
|
|
67
|
-
Prepare docstring update instruction for Cursor Skills.
|
|
68
|
-
|
|
69
|
-
Args:
|
|
70
|
-
file_path: Path to the source code file
|
|
71
|
-
docstring_format: Docstring format (google/numpy/sphinx)
|
|
72
|
-
|
|
73
|
-
Returns:
|
|
74
|
-
DocumentationInstruction object for Cursor Skills execution
|
|
75
|
-
"""
|
|
76
|
-
return DocumentationInstruction(
|
|
77
|
-
target_file=str(file_path),
|
|
78
|
-
output_dir=None,
|
|
79
|
-
docstring_format=docstring_format,
|
|
80
|
-
include_examples=True,
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
def _analyze_code_structure(self, code: str) -> dict[str, Any]:
|
|
84
|
-
"""Analyze code structure to extract functions, classes, etc."""
|
|
85
|
-
functions: list[dict[str, Any]] = []
|
|
86
|
-
classes: list[dict[str, Any]] = []
|
|
87
|
-
modules: list[str] = []
|
|
88
|
-
|
|
89
|
-
structure: dict[str, Any] = {
|
|
90
|
-
"file_name": "",
|
|
91
|
-
"functions": functions,
|
|
92
|
-
"classes": classes,
|
|
93
|
-
"modules": modules,
|
|
94
|
-
"has_docstrings": False,
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
try:
|
|
98
|
-
tree = ast.parse(code)
|
|
99
|
-
|
|
100
|
-
# Check for module docstring
|
|
101
|
-
if tree.body and isinstance(tree.body[0], ast.Expr):
|
|
102
|
-
if isinstance(tree.body[0].value, ast.Constant) and isinstance(
|
|
103
|
-
tree.body[0].value.value, str
|
|
104
|
-
):
|
|
105
|
-
structure["has_docstrings"] = True
|
|
106
|
-
|
|
107
|
-
for node in ast.walk(tree):
|
|
108
|
-
if isinstance(node, ast.FunctionDef):
|
|
109
|
-
args = [arg.arg for arg in node.args.args]
|
|
110
|
-
has_doc = ast.get_docstring(node) is not None
|
|
111
|
-
functions.append(
|
|
112
|
-
{
|
|
113
|
-
"name": node.name,
|
|
114
|
-
"line": node.lineno,
|
|
115
|
-
"args": args,
|
|
116
|
-
"has_docstring": has_doc,
|
|
117
|
-
}
|
|
118
|
-
)
|
|
119
|
-
elif isinstance(node, ast.ClassDef):
|
|
120
|
-
methods = [
|
|
121
|
-
n.name for n in node.body if isinstance(n, ast.FunctionDef)
|
|
122
|
-
]
|
|
123
|
-
has_doc = ast.get_docstring(node) is not None
|
|
124
|
-
classes.append(
|
|
125
|
-
{
|
|
126
|
-
"name": node.name,
|
|
127
|
-
"line": node.lineno,
|
|
128
|
-
"methods": methods,
|
|
129
|
-
"has_docstring": has_doc,
|
|
130
|
-
}
|
|
131
|
-
)
|
|
132
|
-
except SyntaxError:
|
|
133
|
-
pass
|
|
134
|
-
|
|
135
|
-
return structure
|
|
136
|
-
|
|
137
|
-
def _analyze_project_structure(self, project_root: Path) -> dict[str, Any]:
|
|
138
|
-
"""Analyze project structure."""
|
|
139
|
-
python_files: list[str] = []
|
|
140
|
-
directories: list[str] = []
|
|
141
|
-
info: dict[str, Any] = {
|
|
142
|
-
"name": project_root.name,
|
|
143
|
-
"has_readme": (project_root / "README.md").exists(),
|
|
144
|
-
"has_requirements": (project_root / "requirements.txt").exists(),
|
|
145
|
-
"has_setup": (project_root / "setup.py").exists(),
|
|
146
|
-
"python_files": python_files,
|
|
147
|
-
"directories": directories,
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
# Find Python files
|
|
151
|
-
for py_file in project_root.rglob("*.py"):
|
|
152
|
-
if "test" not in str(py_file) and "__pycache__" not in str(py_file):
|
|
153
|
-
python_files.append(str(py_file.relative_to(project_root)))
|
|
154
|
-
|
|
155
|
-
# Find directories
|
|
156
|
-
for dir_path in project_root.iterdir():
|
|
157
|
-
if dir_path.is_dir() and not dir_path.name.startswith("."):
|
|
158
|
-
directories.append(dir_path.name)
|
|
159
|
-
|
|
160
|
-
return info
|
|
161
|
-
|
|
162
|
-
def _build_api_docs_prompt(
|
|
163
|
-
self, code: str, structure: dict[str, Any], output_format: str
|
|
164
|
-
) -> str:
|
|
165
|
-
"""Build prompt for API documentation generation."""
|
|
166
|
-
prompt_parts = [
|
|
167
|
-
f"Generate {output_format.upper()} API documentation for the following Python code.",
|
|
168
|
-
"",
|
|
169
|
-
"Code structure:",
|
|
170
|
-
f"- Functions: {len(structure['functions'])}",
|
|
171
|
-
f"- Classes: {len(structure['classes'])}",
|
|
172
|
-
"",
|
|
173
|
-
"Code:",
|
|
174
|
-
"```python",
|
|
175
|
-
code[:5000], # Limit code size
|
|
176
|
-
"```",
|
|
177
|
-
"",
|
|
178
|
-
f"Generate comprehensive API documentation in {output_format} format:",
|
|
179
|
-
"- Document all public functions and classes",
|
|
180
|
-
"- Include parameter descriptions",
|
|
181
|
-
"- Include return value descriptions",
|
|
182
|
-
"- Include usage examples if relevant",
|
|
183
|
-
"- Use clear section headers",
|
|
184
|
-
"",
|
|
185
|
-
]
|
|
186
|
-
|
|
187
|
-
if output_format == "markdown":
|
|
188
|
-
prompt_parts.append(
|
|
189
|
-
"Format as Markdown with headers (##), code blocks, and lists."
|
|
190
|
-
)
|
|
191
|
-
elif output_format == "rst":
|
|
192
|
-
prompt_parts.append("Format as reStructuredText with proper directives.")
|
|
193
|
-
|
|
194
|
-
return "\n".join(prompt_parts)
|
|
195
|
-
|
|
196
|
-
def _build_readme_prompt(
|
|
197
|
-
self, project_info: dict[str, Any], context: str | None
|
|
198
|
-
) -> str:
|
|
199
|
-
"""Build prompt for README generation."""
|
|
200
|
-
prompt_parts = [
|
|
201
|
-
f"Generate a comprehensive README.md for the project: {project_info['name']}",
|
|
202
|
-
"",
|
|
203
|
-
"Project structure:",
|
|
204
|
-
f"- Python files: {len(project_info['python_files'])}",
|
|
205
|
-
f"- Directories: {', '.join(project_info['directories'][:10])}",
|
|
206
|
-
"",
|
|
207
|
-
]
|
|
208
|
-
|
|
209
|
-
if context:
|
|
210
|
-
prompt_parts.append("Additional context:")
|
|
211
|
-
prompt_parts.append(context)
|
|
212
|
-
prompt_parts.append("")
|
|
213
|
-
|
|
214
|
-
prompt_parts.extend(
|
|
215
|
-
[
|
|
216
|
-
"Generate a README.md with:",
|
|
217
|
-
"1. Project title and description",
|
|
218
|
-
"2. Installation instructions",
|
|
219
|
-
"3. Usage examples",
|
|
220
|
-
"4. API overview (if applicable)",
|
|
221
|
-
"5. Contributing guidelines",
|
|
222
|
-
"6. License information (if known)",
|
|
223
|
-
"",
|
|
224
|
-
"Use Markdown format with proper headers, code blocks, and lists.",
|
|
225
|
-
]
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
return "\n".join(prompt_parts)
|
|
229
|
-
|
|
230
|
-
def _build_docstring_prompt(
|
|
231
|
-
self, code: str, structure: dict[str, Any], docstring_format: str
|
|
232
|
-
) -> str:
|
|
233
|
-
"""Build prompt for docstring generation."""
|
|
234
|
-
functions_without_docs = [
|
|
235
|
-
f["name"] for f in structure["functions"] if not f["has_docstring"]
|
|
236
|
-
]
|
|
237
|
-
classes_without_docs = [
|
|
238
|
-
c["name"] for c in structure["classes"] if not c["has_docstring"]
|
|
239
|
-
]
|
|
240
|
-
|
|
241
|
-
prompt_parts = [
|
|
242
|
-
f"Add or update docstrings to the following Python code using {docstring_format} format.",
|
|
243
|
-
"",
|
|
244
|
-
"Functions needing docstrings:",
|
|
245
|
-
", ".join(functions_without_docs) if functions_without_docs else "None",
|
|
246
|
-
"",
|
|
247
|
-
"Classes needing docstrings:",
|
|
248
|
-
", ".join(classes_without_docs) if classes_without_docs else "None",
|
|
249
|
-
"",
|
|
250
|
-
"Code:",
|
|
251
|
-
"```python",
|
|
252
|
-
code[:5000], # Limit code size
|
|
253
|
-
"```",
|
|
254
|
-
"",
|
|
255
|
-
"Requirements:",
|
|
256
|
-
f"- Use {docstring_format} docstring format",
|
|
257
|
-
"- Include parameter descriptions with types",
|
|
258
|
-
"- Include return value descriptions",
|
|
259
|
-
"- Include brief summary",
|
|
260
|
-
"- Include examples if complex",
|
|
261
|
-
"",
|
|
262
|
-
"Return the complete updated code with docstrings:",
|
|
263
|
-
]
|
|
264
|
-
|
|
265
|
-
return "\n".join(prompt_parts)
|
|
266
|
-
|
|
267
|
-
async def generate_project_api_docs(
|
|
268
|
-
self,
|
|
269
|
-
project_root: Path,
|
|
270
|
-
output_dir: Path,
|
|
271
|
-
output_format: str = "markdown",
|
|
272
|
-
include_modules: list[str] | None = None,
|
|
273
|
-
) -> dict[str, Any]:
|
|
274
|
-
"""
|
|
275
|
-
Generate project-level API documentation for multiple modules.
|
|
276
|
-
|
|
277
|
-
Args:
|
|
278
|
-
project_root: Root directory of the project
|
|
279
|
-
output_dir: Directory to write documentation files
|
|
280
|
-
output_format: Output format (markdown/rst/html)
|
|
281
|
-
include_modules: Optional list of module paths to include (relative to project_root)
|
|
282
|
-
|
|
283
|
-
Returns:
|
|
284
|
-
Dictionary with generation results including index path and generated files
|
|
285
|
-
"""
|
|
286
|
-
output_dir.mkdir(parents=True, exist_ok=True)
|
|
287
|
-
|
|
288
|
-
# Determine which modules to document
|
|
289
|
-
if include_modules:
|
|
290
|
-
module_paths = [project_root / mod for mod in include_modules]
|
|
291
|
-
else:
|
|
292
|
-
# Default: document key agents and workflow engine modules
|
|
293
|
-
module_paths = self._find_key_modules(project_root)
|
|
294
|
-
|
|
295
|
-
generated_files: list[str] = []
|
|
296
|
-
module_docs: dict[str, str] = {}
|
|
297
|
-
|
|
298
|
-
# Generate docs for each module
|
|
299
|
-
for module_path in module_paths:
|
|
300
|
-
if not module_path.exists() or not module_path.is_file():
|
|
301
|
-
continue
|
|
302
|
-
|
|
303
|
-
# Skip test files and private modules
|
|
304
|
-
if "test" in str(module_path) or "__pycache__" in str(module_path):
|
|
305
|
-
continue
|
|
306
|
-
|
|
307
|
-
try:
|
|
308
|
-
# Generate documentation for this module
|
|
309
|
-
docs = await self.generate_api_docs(module_path, output_format)
|
|
310
|
-
|
|
311
|
-
# Determine output filename
|
|
312
|
-
rel_path = module_path.relative_to(project_root)
|
|
313
|
-
# Convert path to safe filename (e.g., tapps_agents/agents/reviewer/agent.py -> agents_reviewer_agent.md)
|
|
314
|
-
safe_name = str(rel_path).replace("/", "_").replace("\\", "_").replace(".py", "")
|
|
315
|
-
output_file = output_dir / f"{safe_name}.md"
|
|
316
|
-
|
|
317
|
-
# Write documentation
|
|
318
|
-
output_file.write_text(docs, encoding="utf-8")
|
|
319
|
-
generated_files.append(str(output_file))
|
|
320
|
-
module_docs[str(rel_path)] = str(output_file)
|
|
321
|
-
|
|
322
|
-
except Exception as e:
|
|
323
|
-
# Log error but continue with other modules
|
|
324
|
-
import logging
|
|
325
|
-
logger = logging.getLogger(__name__)
|
|
326
|
-
logger.warning(f"Failed to generate docs for {module_path}: {e}")
|
|
327
|
-
|
|
328
|
-
# Generate index page
|
|
329
|
-
index_content = self._generate_index_page(module_docs, output_format)
|
|
330
|
-
index_path = output_dir / f"index.{'md' if output_format == 'markdown' else output_format}"
|
|
331
|
-
index_path.write_text(index_content, encoding="utf-8")
|
|
332
|
-
|
|
333
|
-
return {
|
|
334
|
-
"index_file": str(index_path),
|
|
335
|
-
"generated_files": generated_files,
|
|
336
|
-
"module_count": len(generated_files),
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
def _find_key_modules(self, project_root: Path) -> list[Path]:
|
|
340
|
-
"""
|
|
341
|
-
Find key modules to document (agents + workflow engine).
|
|
342
|
-
|
|
343
|
-
Args:
|
|
344
|
-
project_root: Project root directory
|
|
345
|
-
|
|
346
|
-
Returns:
|
|
347
|
-
List of module paths to document
|
|
348
|
-
"""
|
|
349
|
-
modules: list[Path] = []
|
|
350
|
-
|
|
351
|
-
# Find agent modules
|
|
352
|
-
agents_dir = project_root / "tapps_agents" / "agents"
|
|
353
|
-
if agents_dir.exists():
|
|
354
|
-
for agent_dir in agents_dir.iterdir():
|
|
355
|
-
if agent_dir.is_dir() and not agent_dir.name.startswith("_"):
|
|
356
|
-
agent_file = agent_dir / "agent.py"
|
|
357
|
-
if agent_file.exists():
|
|
358
|
-
modules.append(agent_file)
|
|
359
|
-
|
|
360
|
-
# Find workflow engine modules
|
|
361
|
-
workflow_dir = project_root / "tapps_agents" / "workflow"
|
|
362
|
-
if workflow_dir.exists():
|
|
363
|
-
key_workflow_files = [
|
|
364
|
-
"executor.py",
|
|
365
|
-
"parser.py",
|
|
366
|
-
"state_manager.py",
|
|
367
|
-
"models.py",
|
|
368
|
-
"recommender.py",
|
|
369
|
-
]
|
|
370
|
-
for filename in key_workflow_files:
|
|
371
|
-
workflow_file = workflow_dir / filename
|
|
372
|
-
if workflow_file.exists():
|
|
373
|
-
modules.append(workflow_file)
|
|
374
|
-
|
|
375
|
-
# Find core modules
|
|
376
|
-
core_dir = project_root / "tapps_agents" / "core"
|
|
377
|
-
if core_dir.exists():
|
|
378
|
-
key_core_files = [
|
|
379
|
-
"agent_base.py",
|
|
380
|
-
"config.py",
|
|
381
|
-
"exceptions.py",
|
|
382
|
-
]
|
|
383
|
-
for filename in key_core_files:
|
|
384
|
-
core_file = core_dir / filename
|
|
385
|
-
if core_file.exists():
|
|
386
|
-
modules.append(core_file)
|
|
387
|
-
|
|
388
|
-
return modules
|
|
389
|
-
|
|
390
|
-
def _generate_index_page(
|
|
391
|
-
self, module_docs: dict[str, str], output_format: str
|
|
392
|
-
) -> str:
|
|
393
|
-
"""
|
|
394
|
-
Generate index page linking to all module documentation.
|
|
395
|
-
|
|
396
|
-
Args:
|
|
397
|
-
module_docs: Dictionary mapping module paths to documentation file paths
|
|
398
|
-
output_format: Output format (markdown/rst/html)
|
|
399
|
-
|
|
400
|
-
Returns:
|
|
401
|
-
Index page content
|
|
402
|
-
"""
|
|
403
|
-
if output_format == "markdown":
|
|
404
|
-
lines = [
|
|
405
|
-
"# API Documentation Index",
|
|
406
|
-
"",
|
|
407
|
-
"This directory contains automatically generated API documentation for the TappsCodingAgents project.",
|
|
408
|
-
"",
|
|
409
|
-
"## Modules",
|
|
410
|
-
"",
|
|
411
|
-
]
|
|
412
|
-
|
|
413
|
-
# Group by category
|
|
414
|
-
agents: list[tuple[str, str]] = []
|
|
415
|
-
workflow: list[tuple[str, str]] = []
|
|
416
|
-
core: list[tuple[str, str]] = []
|
|
417
|
-
other: list[tuple[str, str]] = []
|
|
418
|
-
|
|
419
|
-
for module_path, doc_file in module_docs.items():
|
|
420
|
-
doc_filename = Path(doc_file).name
|
|
421
|
-
if "agents" in module_path:
|
|
422
|
-
agents.append((module_path, doc_filename))
|
|
423
|
-
elif "workflow" in module_path:
|
|
424
|
-
workflow.append((module_path, doc_filename))
|
|
425
|
-
elif "core" in module_path:
|
|
426
|
-
core.append((module_path, doc_filename))
|
|
427
|
-
else:
|
|
428
|
-
other.append((module_path, doc_filename))
|
|
429
|
-
|
|
430
|
-
if agents:
|
|
431
|
-
lines.append("### Agents")
|
|
432
|
-
lines.append("")
|
|
433
|
-
for module_path, doc_filename in sorted(agents):
|
|
434
|
-
agent_name = Path(module_path).stem
|
|
435
|
-
lines.append(f"- [{agent_name}]({doc_filename}) - `{module_path}`")
|
|
436
|
-
lines.append("")
|
|
437
|
-
|
|
438
|
-
if workflow:
|
|
439
|
-
lines.append("### Workflow Engine")
|
|
440
|
-
lines.append("")
|
|
441
|
-
for module_path, doc_filename in sorted(workflow):
|
|
442
|
-
module_name = Path(module_path).stem
|
|
443
|
-
lines.append(f"- [{module_name}]({doc_filename}) - `{module_path}`")
|
|
444
|
-
lines.append("")
|
|
445
|
-
|
|
446
|
-
if core:
|
|
447
|
-
lines.append("### Core")
|
|
448
|
-
lines.append("")
|
|
449
|
-
for module_path, doc_filename in sorted(core):
|
|
450
|
-
module_name = Path(module_path).stem
|
|
451
|
-
lines.append(f"- [{module_name}]({doc_filename}) - `{module_path}`")
|
|
452
|
-
lines.append("")
|
|
453
|
-
|
|
454
|
-
if other:
|
|
455
|
-
lines.append("### Other")
|
|
456
|
-
lines.append("")
|
|
457
|
-
for module_path, doc_filename in sorted(other):
|
|
458
|
-
module_name = Path(module_path).stem
|
|
459
|
-
lines.append(f"- [{module_name}]({doc_filename}) - `{module_path}`")
|
|
460
|
-
lines.append("")
|
|
461
|
-
|
|
462
|
-
lines.append("---")
|
|
463
|
-
lines.append("")
|
|
464
|
-
lines.append("*Generated automatically by TappsCodingAgents Documenter Agent*")
|
|
465
|
-
|
|
466
|
-
return "\n".join(lines)
|
|
467
|
-
else:
|
|
468
|
-
# For other formats, return a simple text index
|
|
469
|
-
lines = ["API Documentation Index", "", "Generated modules:"]
|
|
470
|
-
for module_path, doc_file in sorted(module_docs.items()):
|
|
471
|
-
lines.append(f" - {module_path} -> {doc_file}")
|
|
472
|
-
return "\n".join(lines)
|
|
1
|
+
"""
|
|
2
|
+
Document Generator - Prepares documentation generation instructions for Cursor Skills
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import ast
|
|
6
|
+
import logging
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from ...core.instructions import DocumentationInstruction
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DocGenerator:
|
|
16
|
+
"""Prepares documentation generation instructions for Cursor Skills execution."""
|
|
17
|
+
|
|
18
|
+
def __init__(self):
|
|
19
|
+
"""Initialize document generator."""
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
def prepare_api_docs(
|
|
23
|
+
self, file_path: Path, output_format: str = "markdown"
|
|
24
|
+
) -> DocumentationInstruction:
|
|
25
|
+
"""
|
|
26
|
+
Prepare API documentation generation instruction for Cursor Skills.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
file_path: Path to the source code file
|
|
30
|
+
output_format: Output format (markdown/rst/html)
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
DocumentationInstruction object for Cursor Skills execution
|
|
34
|
+
"""
|
|
35
|
+
return DocumentationInstruction(
|
|
36
|
+
target_file=str(file_path),
|
|
37
|
+
output_dir=None,
|
|
38
|
+
docstring_format="google",
|
|
39
|
+
include_examples=True,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
def prepare_readme(
|
|
43
|
+
self, project_root: Path, context: str | None = None
|
|
44
|
+
) -> DocumentationInstruction:
|
|
45
|
+
"""
|
|
46
|
+
Prepare README generation instruction for Cursor Skills.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
project_root: Project root directory
|
|
50
|
+
context: Optional additional context
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
DocumentationInstruction object for Cursor Skills execution
|
|
54
|
+
"""
|
|
55
|
+
readme_path = project_root / "README.md"
|
|
56
|
+
return DocumentationInstruction(
|
|
57
|
+
target_file=str(readme_path),
|
|
58
|
+
output_dir=str(project_root),
|
|
59
|
+
docstring_format="markdown",
|
|
60
|
+
include_examples=True,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
def prepare_docstring_update(
|
|
64
|
+
self, file_path: Path, docstring_format: str = "google"
|
|
65
|
+
) -> DocumentationInstruction:
|
|
66
|
+
"""
|
|
67
|
+
Prepare docstring update instruction for Cursor Skills.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
file_path: Path to the source code file
|
|
71
|
+
docstring_format: Docstring format (google/numpy/sphinx)
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
DocumentationInstruction object for Cursor Skills execution
|
|
75
|
+
"""
|
|
76
|
+
return DocumentationInstruction(
|
|
77
|
+
target_file=str(file_path),
|
|
78
|
+
output_dir=None,
|
|
79
|
+
docstring_format=docstring_format,
|
|
80
|
+
include_examples=True,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
def _analyze_code_structure(self, code: str) -> dict[str, Any]:
|
|
84
|
+
"""Analyze code structure to extract functions, classes, etc."""
|
|
85
|
+
functions: list[dict[str, Any]] = []
|
|
86
|
+
classes: list[dict[str, Any]] = []
|
|
87
|
+
modules: list[str] = []
|
|
88
|
+
|
|
89
|
+
structure: dict[str, Any] = {
|
|
90
|
+
"file_name": "",
|
|
91
|
+
"functions": functions,
|
|
92
|
+
"classes": classes,
|
|
93
|
+
"modules": modules,
|
|
94
|
+
"has_docstrings": False,
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
try:
|
|
98
|
+
tree = ast.parse(code)
|
|
99
|
+
|
|
100
|
+
# Check for module docstring
|
|
101
|
+
if tree.body and isinstance(tree.body[0], ast.Expr):
|
|
102
|
+
if isinstance(tree.body[0].value, ast.Constant) and isinstance(
|
|
103
|
+
tree.body[0].value.value, str
|
|
104
|
+
):
|
|
105
|
+
structure["has_docstrings"] = True
|
|
106
|
+
|
|
107
|
+
for node in ast.walk(tree):
|
|
108
|
+
if isinstance(node, ast.FunctionDef):
|
|
109
|
+
args = [arg.arg for arg in node.args.args]
|
|
110
|
+
has_doc = ast.get_docstring(node) is not None
|
|
111
|
+
functions.append(
|
|
112
|
+
{
|
|
113
|
+
"name": node.name,
|
|
114
|
+
"line": node.lineno,
|
|
115
|
+
"args": args,
|
|
116
|
+
"has_docstring": has_doc,
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
elif isinstance(node, ast.ClassDef):
|
|
120
|
+
methods = [
|
|
121
|
+
n.name for n in node.body if isinstance(n, ast.FunctionDef)
|
|
122
|
+
]
|
|
123
|
+
has_doc = ast.get_docstring(node) is not None
|
|
124
|
+
classes.append(
|
|
125
|
+
{
|
|
126
|
+
"name": node.name,
|
|
127
|
+
"line": node.lineno,
|
|
128
|
+
"methods": methods,
|
|
129
|
+
"has_docstring": has_doc,
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
except SyntaxError:
|
|
133
|
+
pass
|
|
134
|
+
|
|
135
|
+
return structure
|
|
136
|
+
|
|
137
|
+
def _analyze_project_structure(self, project_root: Path) -> dict[str, Any]:
|
|
138
|
+
"""Analyze project structure."""
|
|
139
|
+
python_files: list[str] = []
|
|
140
|
+
directories: list[str] = []
|
|
141
|
+
info: dict[str, Any] = {
|
|
142
|
+
"name": project_root.name,
|
|
143
|
+
"has_readme": (project_root / "README.md").exists(),
|
|
144
|
+
"has_requirements": (project_root / "requirements.txt").exists(),
|
|
145
|
+
"has_setup": (project_root / "setup.py").exists(),
|
|
146
|
+
"python_files": python_files,
|
|
147
|
+
"directories": directories,
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
# Find Python files
|
|
151
|
+
for py_file in project_root.rglob("*.py"):
|
|
152
|
+
if "test" not in str(py_file) and "__pycache__" not in str(py_file):
|
|
153
|
+
python_files.append(str(py_file.relative_to(project_root)))
|
|
154
|
+
|
|
155
|
+
# Find directories
|
|
156
|
+
for dir_path in project_root.iterdir():
|
|
157
|
+
if dir_path.is_dir() and not dir_path.name.startswith("."):
|
|
158
|
+
directories.append(dir_path.name)
|
|
159
|
+
|
|
160
|
+
return info
|
|
161
|
+
|
|
162
|
+
def _build_api_docs_prompt(
|
|
163
|
+
self, code: str, structure: dict[str, Any], output_format: str
|
|
164
|
+
) -> str:
|
|
165
|
+
"""Build prompt for API documentation generation."""
|
|
166
|
+
prompt_parts = [
|
|
167
|
+
f"Generate {output_format.upper()} API documentation for the following Python code.",
|
|
168
|
+
"",
|
|
169
|
+
"Code structure:",
|
|
170
|
+
f"- Functions: {len(structure['functions'])}",
|
|
171
|
+
f"- Classes: {len(structure['classes'])}",
|
|
172
|
+
"",
|
|
173
|
+
"Code:",
|
|
174
|
+
"```python",
|
|
175
|
+
code[:5000], # Limit code size
|
|
176
|
+
"```",
|
|
177
|
+
"",
|
|
178
|
+
f"Generate comprehensive API documentation in {output_format} format:",
|
|
179
|
+
"- Document all public functions and classes",
|
|
180
|
+
"- Include parameter descriptions",
|
|
181
|
+
"- Include return value descriptions",
|
|
182
|
+
"- Include usage examples if relevant",
|
|
183
|
+
"- Use clear section headers",
|
|
184
|
+
"",
|
|
185
|
+
]
|
|
186
|
+
|
|
187
|
+
if output_format == "markdown":
|
|
188
|
+
prompt_parts.append(
|
|
189
|
+
"Format as Markdown with headers (##), code blocks, and lists."
|
|
190
|
+
)
|
|
191
|
+
elif output_format == "rst":
|
|
192
|
+
prompt_parts.append("Format as reStructuredText with proper directives.")
|
|
193
|
+
|
|
194
|
+
return "\n".join(prompt_parts)
|
|
195
|
+
|
|
196
|
+
def _build_readme_prompt(
|
|
197
|
+
self, project_info: dict[str, Any], context: str | None
|
|
198
|
+
) -> str:
|
|
199
|
+
"""Build prompt for README generation."""
|
|
200
|
+
prompt_parts = [
|
|
201
|
+
f"Generate a comprehensive README.md for the project: {project_info['name']}",
|
|
202
|
+
"",
|
|
203
|
+
"Project structure:",
|
|
204
|
+
f"- Python files: {len(project_info['python_files'])}",
|
|
205
|
+
f"- Directories: {', '.join(project_info['directories'][:10])}",
|
|
206
|
+
"",
|
|
207
|
+
]
|
|
208
|
+
|
|
209
|
+
if context:
|
|
210
|
+
prompt_parts.append("Additional context:")
|
|
211
|
+
prompt_parts.append(context)
|
|
212
|
+
prompt_parts.append("")
|
|
213
|
+
|
|
214
|
+
prompt_parts.extend(
|
|
215
|
+
[
|
|
216
|
+
"Generate a README.md with:",
|
|
217
|
+
"1. Project title and description",
|
|
218
|
+
"2. Installation instructions",
|
|
219
|
+
"3. Usage examples",
|
|
220
|
+
"4. API overview (if applicable)",
|
|
221
|
+
"5. Contributing guidelines",
|
|
222
|
+
"6. License information (if known)",
|
|
223
|
+
"",
|
|
224
|
+
"Use Markdown format with proper headers, code blocks, and lists.",
|
|
225
|
+
]
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
return "\n".join(prompt_parts)
|
|
229
|
+
|
|
230
|
+
def _build_docstring_prompt(
|
|
231
|
+
self, code: str, structure: dict[str, Any], docstring_format: str
|
|
232
|
+
) -> str:
|
|
233
|
+
"""Build prompt for docstring generation."""
|
|
234
|
+
functions_without_docs = [
|
|
235
|
+
f["name"] for f in structure["functions"] if not f["has_docstring"]
|
|
236
|
+
]
|
|
237
|
+
classes_without_docs = [
|
|
238
|
+
c["name"] for c in structure["classes"] if not c["has_docstring"]
|
|
239
|
+
]
|
|
240
|
+
|
|
241
|
+
prompt_parts = [
|
|
242
|
+
f"Add or update docstrings to the following Python code using {docstring_format} format.",
|
|
243
|
+
"",
|
|
244
|
+
"Functions needing docstrings:",
|
|
245
|
+
", ".join(functions_without_docs) if functions_without_docs else "None",
|
|
246
|
+
"",
|
|
247
|
+
"Classes needing docstrings:",
|
|
248
|
+
", ".join(classes_without_docs) if classes_without_docs else "None",
|
|
249
|
+
"",
|
|
250
|
+
"Code:",
|
|
251
|
+
"```python",
|
|
252
|
+
code[:5000], # Limit code size
|
|
253
|
+
"```",
|
|
254
|
+
"",
|
|
255
|
+
"Requirements:",
|
|
256
|
+
f"- Use {docstring_format} docstring format",
|
|
257
|
+
"- Include parameter descriptions with types",
|
|
258
|
+
"- Include return value descriptions",
|
|
259
|
+
"- Include brief summary",
|
|
260
|
+
"- Include examples if complex",
|
|
261
|
+
"",
|
|
262
|
+
"Return the complete updated code with docstrings:",
|
|
263
|
+
]
|
|
264
|
+
|
|
265
|
+
return "\n".join(prompt_parts)
|
|
266
|
+
|
|
267
|
+
async def generate_project_api_docs(
|
|
268
|
+
self,
|
|
269
|
+
project_root: Path,
|
|
270
|
+
output_dir: Path,
|
|
271
|
+
output_format: str = "markdown",
|
|
272
|
+
include_modules: list[str] | None = None,
|
|
273
|
+
) -> dict[str, Any]:
|
|
274
|
+
"""
|
|
275
|
+
Generate project-level API documentation for multiple modules.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
project_root: Root directory of the project
|
|
279
|
+
output_dir: Directory to write documentation files
|
|
280
|
+
output_format: Output format (markdown/rst/html)
|
|
281
|
+
include_modules: Optional list of module paths to include (relative to project_root)
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
Dictionary with generation results including index path and generated files
|
|
285
|
+
"""
|
|
286
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
287
|
+
|
|
288
|
+
# Determine which modules to document
|
|
289
|
+
if include_modules:
|
|
290
|
+
module_paths = [project_root / mod for mod in include_modules]
|
|
291
|
+
else:
|
|
292
|
+
# Default: document key agents and workflow engine modules
|
|
293
|
+
module_paths = self._find_key_modules(project_root)
|
|
294
|
+
|
|
295
|
+
generated_files: list[str] = []
|
|
296
|
+
module_docs: dict[str, str] = {}
|
|
297
|
+
|
|
298
|
+
# Generate docs for each module
|
|
299
|
+
for module_path in module_paths:
|
|
300
|
+
if not module_path.exists() or not module_path.is_file():
|
|
301
|
+
continue
|
|
302
|
+
|
|
303
|
+
# Skip test files and private modules
|
|
304
|
+
if "test" in str(module_path) or "__pycache__" in str(module_path):
|
|
305
|
+
continue
|
|
306
|
+
|
|
307
|
+
try:
|
|
308
|
+
# Generate documentation for this module
|
|
309
|
+
docs = await self.generate_api_docs(module_path, output_format)
|
|
310
|
+
|
|
311
|
+
# Determine output filename
|
|
312
|
+
rel_path = module_path.relative_to(project_root)
|
|
313
|
+
# Convert path to safe filename (e.g., tapps_agents/agents/reviewer/agent.py -> agents_reviewer_agent.md)
|
|
314
|
+
safe_name = str(rel_path).replace("/", "_").replace("\\", "_").replace(".py", "")
|
|
315
|
+
output_file = output_dir / f"{safe_name}.md"
|
|
316
|
+
|
|
317
|
+
# Write documentation
|
|
318
|
+
output_file.write_text(docs, encoding="utf-8")
|
|
319
|
+
generated_files.append(str(output_file))
|
|
320
|
+
module_docs[str(rel_path)] = str(output_file)
|
|
321
|
+
|
|
322
|
+
except Exception as e:
|
|
323
|
+
# Log error but continue with other modules
|
|
324
|
+
import logging
|
|
325
|
+
logger = logging.getLogger(__name__)
|
|
326
|
+
logger.warning(f"Failed to generate docs for {module_path}: {e}")
|
|
327
|
+
|
|
328
|
+
# Generate index page
|
|
329
|
+
index_content = self._generate_index_page(module_docs, output_format)
|
|
330
|
+
index_path = output_dir / f"index.{'md' if output_format == 'markdown' else output_format}"
|
|
331
|
+
index_path.write_text(index_content, encoding="utf-8")
|
|
332
|
+
|
|
333
|
+
return {
|
|
334
|
+
"index_file": str(index_path),
|
|
335
|
+
"generated_files": generated_files,
|
|
336
|
+
"module_count": len(generated_files),
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
def _find_key_modules(self, project_root: Path) -> list[Path]:
|
|
340
|
+
"""
|
|
341
|
+
Find key modules to document (agents + workflow engine).
|
|
342
|
+
|
|
343
|
+
Args:
|
|
344
|
+
project_root: Project root directory
|
|
345
|
+
|
|
346
|
+
Returns:
|
|
347
|
+
List of module paths to document
|
|
348
|
+
"""
|
|
349
|
+
modules: list[Path] = []
|
|
350
|
+
|
|
351
|
+
# Find agent modules
|
|
352
|
+
agents_dir = project_root / "tapps_agents" / "agents"
|
|
353
|
+
if agents_dir.exists():
|
|
354
|
+
for agent_dir in agents_dir.iterdir():
|
|
355
|
+
if agent_dir.is_dir() and not agent_dir.name.startswith("_"):
|
|
356
|
+
agent_file = agent_dir / "agent.py"
|
|
357
|
+
if agent_file.exists():
|
|
358
|
+
modules.append(agent_file)
|
|
359
|
+
|
|
360
|
+
# Find workflow engine modules
|
|
361
|
+
workflow_dir = project_root / "tapps_agents" / "workflow"
|
|
362
|
+
if workflow_dir.exists():
|
|
363
|
+
key_workflow_files = [
|
|
364
|
+
"executor.py",
|
|
365
|
+
"parser.py",
|
|
366
|
+
"state_manager.py",
|
|
367
|
+
"models.py",
|
|
368
|
+
"recommender.py",
|
|
369
|
+
]
|
|
370
|
+
for filename in key_workflow_files:
|
|
371
|
+
workflow_file = workflow_dir / filename
|
|
372
|
+
if workflow_file.exists():
|
|
373
|
+
modules.append(workflow_file)
|
|
374
|
+
|
|
375
|
+
# Find core modules
|
|
376
|
+
core_dir = project_root / "tapps_agents" / "core"
|
|
377
|
+
if core_dir.exists():
|
|
378
|
+
key_core_files = [
|
|
379
|
+
"agent_base.py",
|
|
380
|
+
"config.py",
|
|
381
|
+
"exceptions.py",
|
|
382
|
+
]
|
|
383
|
+
for filename in key_core_files:
|
|
384
|
+
core_file = core_dir / filename
|
|
385
|
+
if core_file.exists():
|
|
386
|
+
modules.append(core_file)
|
|
387
|
+
|
|
388
|
+
return modules
|
|
389
|
+
|
|
390
|
+
def _generate_index_page(
|
|
391
|
+
self, module_docs: dict[str, str], output_format: str
|
|
392
|
+
) -> str:
|
|
393
|
+
"""
|
|
394
|
+
Generate index page linking to all module documentation.
|
|
395
|
+
|
|
396
|
+
Args:
|
|
397
|
+
module_docs: Dictionary mapping module paths to documentation file paths
|
|
398
|
+
output_format: Output format (markdown/rst/html)
|
|
399
|
+
|
|
400
|
+
Returns:
|
|
401
|
+
Index page content
|
|
402
|
+
"""
|
|
403
|
+
if output_format == "markdown":
|
|
404
|
+
lines = [
|
|
405
|
+
"# API Documentation Index",
|
|
406
|
+
"",
|
|
407
|
+
"This directory contains automatically generated API documentation for the TappsCodingAgents project.",
|
|
408
|
+
"",
|
|
409
|
+
"## Modules",
|
|
410
|
+
"",
|
|
411
|
+
]
|
|
412
|
+
|
|
413
|
+
# Group by category
|
|
414
|
+
agents: list[tuple[str, str]] = []
|
|
415
|
+
workflow: list[tuple[str, str]] = []
|
|
416
|
+
core: list[tuple[str, str]] = []
|
|
417
|
+
other: list[tuple[str, str]] = []
|
|
418
|
+
|
|
419
|
+
for module_path, doc_file in module_docs.items():
|
|
420
|
+
doc_filename = Path(doc_file).name
|
|
421
|
+
if "agents" in module_path:
|
|
422
|
+
agents.append((module_path, doc_filename))
|
|
423
|
+
elif "workflow" in module_path:
|
|
424
|
+
workflow.append((module_path, doc_filename))
|
|
425
|
+
elif "core" in module_path:
|
|
426
|
+
core.append((module_path, doc_filename))
|
|
427
|
+
else:
|
|
428
|
+
other.append((module_path, doc_filename))
|
|
429
|
+
|
|
430
|
+
if agents:
|
|
431
|
+
lines.append("### Agents")
|
|
432
|
+
lines.append("")
|
|
433
|
+
for module_path, doc_filename in sorted(agents):
|
|
434
|
+
agent_name = Path(module_path).stem
|
|
435
|
+
lines.append(f"- [{agent_name}]({doc_filename}) - `{module_path}`")
|
|
436
|
+
lines.append("")
|
|
437
|
+
|
|
438
|
+
if workflow:
|
|
439
|
+
lines.append("### Workflow Engine")
|
|
440
|
+
lines.append("")
|
|
441
|
+
for module_path, doc_filename in sorted(workflow):
|
|
442
|
+
module_name = Path(module_path).stem
|
|
443
|
+
lines.append(f"- [{module_name}]({doc_filename}) - `{module_path}`")
|
|
444
|
+
lines.append("")
|
|
445
|
+
|
|
446
|
+
if core:
|
|
447
|
+
lines.append("### Core")
|
|
448
|
+
lines.append("")
|
|
449
|
+
for module_path, doc_filename in sorted(core):
|
|
450
|
+
module_name = Path(module_path).stem
|
|
451
|
+
lines.append(f"- [{module_name}]({doc_filename}) - `{module_path}`")
|
|
452
|
+
lines.append("")
|
|
453
|
+
|
|
454
|
+
if other:
|
|
455
|
+
lines.append("### Other")
|
|
456
|
+
lines.append("")
|
|
457
|
+
for module_path, doc_filename in sorted(other):
|
|
458
|
+
module_name = Path(module_path).stem
|
|
459
|
+
lines.append(f"- [{module_name}]({doc_filename}) - `{module_path}`")
|
|
460
|
+
lines.append("")
|
|
461
|
+
|
|
462
|
+
lines.append("---")
|
|
463
|
+
lines.append("")
|
|
464
|
+
lines.append("*Generated automatically by TappsCodingAgents Documenter Agent*")
|
|
465
|
+
|
|
466
|
+
return "\n".join(lines)
|
|
467
|
+
else:
|
|
468
|
+
# For other formats, return a simple text index
|
|
469
|
+
lines = ["API Documentation Index", "", "Generated modules:"]
|
|
470
|
+
for module_path, doc_file in sorted(module_docs.items()):
|
|
471
|
+
lines.append(f" - {module_path} -> {doc_file}")
|
|
472
|
+
return "\n".join(lines)
|