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,349 +1,349 @@
|
|
|
1
|
-
"""Deliverable checklist for tracking workflow deliverables."""
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
from typing import Any
|
|
6
|
-
|
|
7
|
-
logger = logging.getLogger(__name__)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class DeliverableChecklist:
|
|
11
|
-
"""Track all deliverables for a workflow execution."""
|
|
12
|
-
|
|
13
|
-
VALID_CATEGORIES = {
|
|
14
|
-
"core_code",
|
|
15
|
-
"related_files",
|
|
16
|
-
"documentation",
|
|
17
|
-
"tests",
|
|
18
|
-
"templates",
|
|
19
|
-
"examples",
|
|
20
|
-
}
|
|
21
|
-
VALID_STATUSES = {"pending", "complete", "failed", "skipped"}
|
|
22
|
-
|
|
23
|
-
def __init__(self, requirements: dict[str, Any] | None = None):
|
|
24
|
-
"""Initialize checklist with requirements context.
|
|
25
|
-
|
|
26
|
-
Args:
|
|
27
|
-
requirements: Optional requirements dict for context
|
|
28
|
-
"""
|
|
29
|
-
self.requirements = requirements or {}
|
|
30
|
-
self.checklist = {
|
|
31
|
-
"core_code": [],
|
|
32
|
-
"related_files": [],
|
|
33
|
-
"documentation": [],
|
|
34
|
-
"tests": [],
|
|
35
|
-
"templates": [],
|
|
36
|
-
"examples": [],
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
def add_deliverable(
|
|
40
|
-
self,
|
|
41
|
-
category: str,
|
|
42
|
-
item: str,
|
|
43
|
-
path: Path,
|
|
44
|
-
status: str = "pending",
|
|
45
|
-
metadata: dict[str, Any] | None = None,
|
|
46
|
-
) -> None:
|
|
47
|
-
"""Add a deliverable to the checklist.
|
|
48
|
-
|
|
49
|
-
Args:
|
|
50
|
-
category: One of: core_code, related_files, documentation, tests, templates, examples
|
|
51
|
-
item: Human-readable description of the deliverable
|
|
52
|
-
path: File path to the deliverable
|
|
53
|
-
status: Status of deliverable (pending, complete, failed, skipped)
|
|
54
|
-
metadata: Optional metadata (e.g., requirement_id, step_number)
|
|
55
|
-
|
|
56
|
-
Raises:
|
|
57
|
-
ValueError: If category or status is invalid
|
|
58
|
-
"""
|
|
59
|
-
if category not in self.VALID_CATEGORIES:
|
|
60
|
-
raise ValueError(
|
|
61
|
-
f"Invalid category: {category}. Must be one of: {self.VALID_CATEGORIES}"
|
|
62
|
-
)
|
|
63
|
-
if status not in self.VALID_STATUSES:
|
|
64
|
-
raise ValueError(
|
|
65
|
-
f"Invalid status: {status}. Must be one of: {self.VALID_STATUSES}"
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
# Check if file exists (if it's a file path, not a directory)
|
|
69
|
-
if path.exists() and path.is_file():
|
|
70
|
-
# File exists, validate it
|
|
71
|
-
pass
|
|
72
|
-
elif not path.exists():
|
|
73
|
-
# File doesn't exist yet - log warning but continue
|
|
74
|
-
logger.debug(f"Deliverable path doesn't exist yet: {path}")
|
|
75
|
-
|
|
76
|
-
deliverable = {
|
|
77
|
-
"item": item,
|
|
78
|
-
"path": path,
|
|
79
|
-
"status": status,
|
|
80
|
-
"metadata": metadata or {},
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
self.checklist[category].append(deliverable)
|
|
84
|
-
logger.debug(
|
|
85
|
-
f"Added deliverable: {category}/{item} ({status}) at {path}"
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
def discover_related_files(
|
|
89
|
-
self, core_files: list[Path], project_root: Path
|
|
90
|
-
) -> list[Path]:
|
|
91
|
-
"""Discover all related files that might need updates.
|
|
92
|
-
|
|
93
|
-
Args:
|
|
94
|
-
core_files: List of core files that were implemented
|
|
95
|
-
project_root: Project root directory for searching
|
|
96
|
-
|
|
97
|
-
Returns:
|
|
98
|
-
List of discovered related file paths
|
|
99
|
-
"""
|
|
100
|
-
discovered = []
|
|
101
|
-
seen = set()
|
|
102
|
-
|
|
103
|
-
for core_file in core_files:
|
|
104
|
-
# Find templates
|
|
105
|
-
templates = self._find_templates(core_file, project_root)
|
|
106
|
-
for template in templates:
|
|
107
|
-
if template not in seen:
|
|
108
|
-
discovered.append(template)
|
|
109
|
-
seen.add(template)
|
|
110
|
-
|
|
111
|
-
# Find documentation
|
|
112
|
-
docs = self._find_documentation(core_file, project_root)
|
|
113
|
-
for doc in docs:
|
|
114
|
-
if doc not in seen:
|
|
115
|
-
discovered.append(doc)
|
|
116
|
-
seen.add(doc)
|
|
117
|
-
|
|
118
|
-
# Find examples
|
|
119
|
-
examples = self._find_examples(core_file, project_root)
|
|
120
|
-
for example in examples:
|
|
121
|
-
if example not in seen:
|
|
122
|
-
discovered.append(example)
|
|
123
|
-
seen.add(example)
|
|
124
|
-
|
|
125
|
-
logger.info(f"Discovered {len(discovered)} related files for {len(core_files)} core files")
|
|
126
|
-
return discovered
|
|
127
|
-
|
|
128
|
-
def _find_templates(self, core_file: Path, project_root: Path) -> list[Path]:
|
|
129
|
-
"""Find template files related to core file.
|
|
130
|
-
|
|
131
|
-
Args:
|
|
132
|
-
core_file: Core file that was implemented
|
|
133
|
-
project_root: Project root directory
|
|
134
|
-
|
|
135
|
-
Returns:
|
|
136
|
-
List of template file paths
|
|
137
|
-
"""
|
|
138
|
-
templates = []
|
|
139
|
-
core_path_str = str(core_file)
|
|
140
|
-
|
|
141
|
-
# Pattern 1: Skill-related files -> skill templates
|
|
142
|
-
if "tapps_agents/core/skills" in core_path_str or "tapps_agents/agents" in core_path_str:
|
|
143
|
-
# Find skill templates in resources
|
|
144
|
-
skills_dir = project_root / "tapps_agents" / "resources" / "claude" / "skills"
|
|
145
|
-
if skills_dir.exists():
|
|
146
|
-
for skill_dir in skills_dir.iterdir():
|
|
147
|
-
if skill_dir.is_dir():
|
|
148
|
-
skill_template = skill_dir / "SKILL.md"
|
|
149
|
-
if skill_template.exists():
|
|
150
|
-
templates.append(skill_template)
|
|
151
|
-
|
|
152
|
-
# Pattern 2: Workflow-related files -> workflow templates
|
|
153
|
-
if "workflow" in core_path_str.lower() or "orchestrator" in core_path_str.lower():
|
|
154
|
-
templates_dir = project_root / "templates"
|
|
155
|
-
if templates_dir.exists():
|
|
156
|
-
# Search for workflow template files
|
|
157
|
-
for template_file in templates_dir.rglob("*.yaml"):
|
|
158
|
-
templates.append(template_file)
|
|
159
|
-
for template_file in templates_dir.rglob("*.yml"):
|
|
160
|
-
templates.append(template_file)
|
|
161
|
-
|
|
162
|
-
return templates
|
|
163
|
-
|
|
164
|
-
def _find_documentation(self, core_file: Path, project_root: Path) -> list[Path]:
|
|
165
|
-
"""Find documentation files that reference the feature.
|
|
166
|
-
|
|
167
|
-
Args:
|
|
168
|
-
core_file: Core file that was implemented
|
|
169
|
-
project_root: Project root directory
|
|
170
|
-
|
|
171
|
-
Returns:
|
|
172
|
-
List of documentation file paths
|
|
173
|
-
"""
|
|
174
|
-
docs = []
|
|
175
|
-
core_file_name = core_file.name
|
|
176
|
-
core_file_stem = core_file.stem
|
|
177
|
-
|
|
178
|
-
# Search docs directory
|
|
179
|
-
docs_dir = project_root / "docs"
|
|
180
|
-
if docs_dir.exists():
|
|
181
|
-
# Search for files mentioning the core file
|
|
182
|
-
for doc_file in docs_dir.rglob("*.md"):
|
|
183
|
-
try:
|
|
184
|
-
content = doc_file.read_text(encoding="utf-8")
|
|
185
|
-
# Check if doc references the core file
|
|
186
|
-
if core_file_name in content or core_file_stem in content:
|
|
187
|
-
docs.append(doc_file)
|
|
188
|
-
except Exception as e:
|
|
189
|
-
logger.debug(f"Error reading doc file {doc_file}: {e}")
|
|
190
|
-
|
|
191
|
-
# Check README files
|
|
192
|
-
for readme_path in [
|
|
193
|
-
project_root / "README.md",
|
|
194
|
-
project_root / "docs" / "README.md",
|
|
195
|
-
]:
|
|
196
|
-
if readme_path.exists():
|
|
197
|
-
try:
|
|
198
|
-
content = readme_path.read_text(encoding="utf-8")
|
|
199
|
-
if core_file_name in content or core_file_stem in content:
|
|
200
|
-
docs.append(readme_path)
|
|
201
|
-
except Exception as e:
|
|
202
|
-
logger.debug(f"Error reading README {readme_path}: {e}")
|
|
203
|
-
|
|
204
|
-
return docs
|
|
205
|
-
|
|
206
|
-
def _find_examples(self, core_file: Path, project_root: Path) -> list[Path]:
|
|
207
|
-
"""Find example files demonstrating the feature.
|
|
208
|
-
|
|
209
|
-
Args:
|
|
210
|
-
core_file: Core file that was implemented
|
|
211
|
-
project_root: Project root directory
|
|
212
|
-
|
|
213
|
-
Returns:
|
|
214
|
-
List of example file paths
|
|
215
|
-
"""
|
|
216
|
-
examples = []
|
|
217
|
-
core_file_stem = core_file.stem
|
|
218
|
-
|
|
219
|
-
# Search examples directory
|
|
220
|
-
examples_dir = project_root / "examples"
|
|
221
|
-
if examples_dir.exists():
|
|
222
|
-
for example_file in examples_dir.rglob("*"):
|
|
223
|
-
if example_file.is_file():
|
|
224
|
-
# Match by filename pattern
|
|
225
|
-
if core_file_stem in example_file.name:
|
|
226
|
-
examples.append(example_file)
|
|
227
|
-
|
|
228
|
-
# Search demo directory
|
|
229
|
-
demo_dir = project_root / "demo"
|
|
230
|
-
if demo_dir.exists():
|
|
231
|
-
for demo_file in demo_dir.rglob("*"):
|
|
232
|
-
if demo_file.is_file():
|
|
233
|
-
if core_file_stem in demo_file.name:
|
|
234
|
-
examples.append(demo_file)
|
|
235
|
-
|
|
236
|
-
return examples
|
|
237
|
-
|
|
238
|
-
def verify_completeness(self) -> dict[str, Any]:
|
|
239
|
-
"""Verify all checklist items are complete.
|
|
240
|
-
|
|
241
|
-
Returns:
|
|
242
|
-
Dictionary with:
|
|
243
|
-
- complete: bool - Whether all items are complete
|
|
244
|
-
- gaps: list[dict] - List of incomplete items with details
|
|
245
|
-
- summary: dict - Summary by category
|
|
246
|
-
"""
|
|
247
|
-
gaps = []
|
|
248
|
-
summary = {}
|
|
249
|
-
|
|
250
|
-
for category, items in self.checklist.items():
|
|
251
|
-
total = len(items)
|
|
252
|
-
complete_count = sum(1 for item in items if item["status"] == "complete")
|
|
253
|
-
pending_count = sum(1 for item in items if item["status"] == "pending")
|
|
254
|
-
failed_count = sum(1 for item in items if item["status"] == "failed")
|
|
255
|
-
|
|
256
|
-
summary[category] = {
|
|
257
|
-
"total": total,
|
|
258
|
-
"complete": complete_count,
|
|
259
|
-
"pending": pending_count,
|
|
260
|
-
"failed": failed_count,
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
# Collect incomplete items
|
|
264
|
-
for item in items:
|
|
265
|
-
if item["status"] != "complete":
|
|
266
|
-
gaps.append({
|
|
267
|
-
"category": category,
|
|
268
|
-
"item": item["item"],
|
|
269
|
-
"path": item["path"],
|
|
270
|
-
"status": item["status"],
|
|
271
|
-
"metadata": item.get("metadata", {}),
|
|
272
|
-
})
|
|
273
|
-
|
|
274
|
-
return {
|
|
275
|
-
"complete": len(gaps) == 0,
|
|
276
|
-
"gaps": gaps,
|
|
277
|
-
"summary": summary,
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
def mark_complete(
|
|
281
|
-
self, category: str, item: str | None = None, path: Path | None = None
|
|
282
|
-
) -> None:
|
|
283
|
-
"""Mark a deliverable as complete.
|
|
284
|
-
|
|
285
|
-
Args:
|
|
286
|
-
category: Category of deliverable
|
|
287
|
-
item: Item description (optional, matches any if None)
|
|
288
|
-
path: File path (optional, matches any if None)
|
|
289
|
-
"""
|
|
290
|
-
if category not in self.VALID_CATEGORIES:
|
|
291
|
-
raise ValueError(f"Invalid category: {category}")
|
|
292
|
-
|
|
293
|
-
for deliverable in self.checklist[category]:
|
|
294
|
-
match = True
|
|
295
|
-
if item and deliverable["item"] != item:
|
|
296
|
-
match = False
|
|
297
|
-
if path and deliverable["path"] != path:
|
|
298
|
-
match = False
|
|
299
|
-
|
|
300
|
-
if match:
|
|
301
|
-
deliverable["status"] = "complete"
|
|
302
|
-
logger.debug(f"Marked {category}/{deliverable['item']} as complete")
|
|
303
|
-
|
|
304
|
-
def to_dict(self) -> dict[str, Any]:
|
|
305
|
-
"""Convert checklist to dictionary for serialization.
|
|
306
|
-
|
|
307
|
-
Returns:
|
|
308
|
-
Dictionary representation of checklist
|
|
309
|
-
"""
|
|
310
|
-
return {
|
|
311
|
-
"requirements": self.requirements,
|
|
312
|
-
"checklist": {
|
|
313
|
-
category: [
|
|
314
|
-
{
|
|
315
|
-
"item": item["item"],
|
|
316
|
-
"path": str(item["path"]),
|
|
317
|
-
"status": item["status"],
|
|
318
|
-
"metadata": item.get("metadata", {}),
|
|
319
|
-
}
|
|
320
|
-
for item in items
|
|
321
|
-
]
|
|
322
|
-
for category, items in self.checklist.items()
|
|
323
|
-
},
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
@classmethod
|
|
327
|
-
def from_dict(cls, data: dict[str, Any]) -> "DeliverableChecklist":
|
|
328
|
-
"""Create checklist from dictionary (for checkpoint restoration).
|
|
329
|
-
|
|
330
|
-
Args:
|
|
331
|
-
data: Dictionary representation from to_dict()
|
|
332
|
-
|
|
333
|
-
Returns:
|
|
334
|
-
DeliverableChecklist instance
|
|
335
|
-
"""
|
|
336
|
-
checklist = cls(requirements=data.get("requirements"))
|
|
337
|
-
checklist_data = data.get("checklist", {})
|
|
338
|
-
|
|
339
|
-
for category, items in checklist_data.items():
|
|
340
|
-
for item_data in items:
|
|
341
|
-
checklist.add_deliverable(
|
|
342
|
-
category=category,
|
|
343
|
-
item=item_data["item"],
|
|
344
|
-
path=Path(item_data["path"]),
|
|
345
|
-
status=item_data["status"],
|
|
346
|
-
metadata=item_data.get("metadata", {}),
|
|
347
|
-
)
|
|
348
|
-
|
|
349
|
-
return checklist
|
|
1
|
+
"""Deliverable checklist for tracking workflow deliverables."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger(__name__)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class DeliverableChecklist:
|
|
11
|
+
"""Track all deliverables for a workflow execution."""
|
|
12
|
+
|
|
13
|
+
VALID_CATEGORIES = {
|
|
14
|
+
"core_code",
|
|
15
|
+
"related_files",
|
|
16
|
+
"documentation",
|
|
17
|
+
"tests",
|
|
18
|
+
"templates",
|
|
19
|
+
"examples",
|
|
20
|
+
}
|
|
21
|
+
VALID_STATUSES = {"pending", "complete", "failed", "skipped"}
|
|
22
|
+
|
|
23
|
+
def __init__(self, requirements: dict[str, Any] | None = None):
|
|
24
|
+
"""Initialize checklist with requirements context.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
requirements: Optional requirements dict for context
|
|
28
|
+
"""
|
|
29
|
+
self.requirements = requirements or {}
|
|
30
|
+
self.checklist = {
|
|
31
|
+
"core_code": [],
|
|
32
|
+
"related_files": [],
|
|
33
|
+
"documentation": [],
|
|
34
|
+
"tests": [],
|
|
35
|
+
"templates": [],
|
|
36
|
+
"examples": [],
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
def add_deliverable(
|
|
40
|
+
self,
|
|
41
|
+
category: str,
|
|
42
|
+
item: str,
|
|
43
|
+
path: Path,
|
|
44
|
+
status: str = "pending",
|
|
45
|
+
metadata: dict[str, Any] | None = None,
|
|
46
|
+
) -> None:
|
|
47
|
+
"""Add a deliverable to the checklist.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
category: One of: core_code, related_files, documentation, tests, templates, examples
|
|
51
|
+
item: Human-readable description of the deliverable
|
|
52
|
+
path: File path to the deliverable
|
|
53
|
+
status: Status of deliverable (pending, complete, failed, skipped)
|
|
54
|
+
metadata: Optional metadata (e.g., requirement_id, step_number)
|
|
55
|
+
|
|
56
|
+
Raises:
|
|
57
|
+
ValueError: If category or status is invalid
|
|
58
|
+
"""
|
|
59
|
+
if category not in self.VALID_CATEGORIES:
|
|
60
|
+
raise ValueError(
|
|
61
|
+
f"Invalid category: {category}. Must be one of: {self.VALID_CATEGORIES}"
|
|
62
|
+
)
|
|
63
|
+
if status not in self.VALID_STATUSES:
|
|
64
|
+
raise ValueError(
|
|
65
|
+
f"Invalid status: {status}. Must be one of: {self.VALID_STATUSES}"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# Check if file exists (if it's a file path, not a directory)
|
|
69
|
+
if path.exists() and path.is_file():
|
|
70
|
+
# File exists, validate it
|
|
71
|
+
pass
|
|
72
|
+
elif not path.exists():
|
|
73
|
+
# File doesn't exist yet - log warning but continue
|
|
74
|
+
logger.debug(f"Deliverable path doesn't exist yet: {path}")
|
|
75
|
+
|
|
76
|
+
deliverable = {
|
|
77
|
+
"item": item,
|
|
78
|
+
"path": path,
|
|
79
|
+
"status": status,
|
|
80
|
+
"metadata": metadata or {},
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
self.checklist[category].append(deliverable)
|
|
84
|
+
logger.debug(
|
|
85
|
+
f"Added deliverable: {category}/{item} ({status}) at {path}"
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
def discover_related_files(
|
|
89
|
+
self, core_files: list[Path], project_root: Path
|
|
90
|
+
) -> list[Path]:
|
|
91
|
+
"""Discover all related files that might need updates.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
core_files: List of core files that were implemented
|
|
95
|
+
project_root: Project root directory for searching
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
List of discovered related file paths
|
|
99
|
+
"""
|
|
100
|
+
discovered = []
|
|
101
|
+
seen = set()
|
|
102
|
+
|
|
103
|
+
for core_file in core_files:
|
|
104
|
+
# Find templates
|
|
105
|
+
templates = self._find_templates(core_file, project_root)
|
|
106
|
+
for template in templates:
|
|
107
|
+
if template not in seen:
|
|
108
|
+
discovered.append(template)
|
|
109
|
+
seen.add(template)
|
|
110
|
+
|
|
111
|
+
# Find documentation
|
|
112
|
+
docs = self._find_documentation(core_file, project_root)
|
|
113
|
+
for doc in docs:
|
|
114
|
+
if doc not in seen:
|
|
115
|
+
discovered.append(doc)
|
|
116
|
+
seen.add(doc)
|
|
117
|
+
|
|
118
|
+
# Find examples
|
|
119
|
+
examples = self._find_examples(core_file, project_root)
|
|
120
|
+
for example in examples:
|
|
121
|
+
if example not in seen:
|
|
122
|
+
discovered.append(example)
|
|
123
|
+
seen.add(example)
|
|
124
|
+
|
|
125
|
+
logger.info(f"Discovered {len(discovered)} related files for {len(core_files)} core files")
|
|
126
|
+
return discovered
|
|
127
|
+
|
|
128
|
+
def _find_templates(self, core_file: Path, project_root: Path) -> list[Path]:
|
|
129
|
+
"""Find template files related to core file.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
core_file: Core file that was implemented
|
|
133
|
+
project_root: Project root directory
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
List of template file paths
|
|
137
|
+
"""
|
|
138
|
+
templates = []
|
|
139
|
+
core_path_str = str(core_file)
|
|
140
|
+
|
|
141
|
+
# Pattern 1: Skill-related files -> skill templates
|
|
142
|
+
if "tapps_agents/core/skills" in core_path_str or "tapps_agents/agents" in core_path_str:
|
|
143
|
+
# Find skill templates in resources
|
|
144
|
+
skills_dir = project_root / "tapps_agents" / "resources" / "claude" / "skills"
|
|
145
|
+
if skills_dir.exists():
|
|
146
|
+
for skill_dir in skills_dir.iterdir():
|
|
147
|
+
if skill_dir.is_dir():
|
|
148
|
+
skill_template = skill_dir / "SKILL.md"
|
|
149
|
+
if skill_template.exists():
|
|
150
|
+
templates.append(skill_template)
|
|
151
|
+
|
|
152
|
+
# Pattern 2: Workflow-related files -> workflow templates
|
|
153
|
+
if "workflow" in core_path_str.lower() or "orchestrator" in core_path_str.lower():
|
|
154
|
+
templates_dir = project_root / "templates"
|
|
155
|
+
if templates_dir.exists():
|
|
156
|
+
# Search for workflow template files
|
|
157
|
+
for template_file in templates_dir.rglob("*.yaml"):
|
|
158
|
+
templates.append(template_file)
|
|
159
|
+
for template_file in templates_dir.rglob("*.yml"):
|
|
160
|
+
templates.append(template_file)
|
|
161
|
+
|
|
162
|
+
return templates
|
|
163
|
+
|
|
164
|
+
def _find_documentation(self, core_file: Path, project_root: Path) -> list[Path]:
|
|
165
|
+
"""Find documentation files that reference the feature.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
core_file: Core file that was implemented
|
|
169
|
+
project_root: Project root directory
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
List of documentation file paths
|
|
173
|
+
"""
|
|
174
|
+
docs = []
|
|
175
|
+
core_file_name = core_file.name
|
|
176
|
+
core_file_stem = core_file.stem
|
|
177
|
+
|
|
178
|
+
# Search docs directory
|
|
179
|
+
docs_dir = project_root / "docs"
|
|
180
|
+
if docs_dir.exists():
|
|
181
|
+
# Search for files mentioning the core file
|
|
182
|
+
for doc_file in docs_dir.rglob("*.md"):
|
|
183
|
+
try:
|
|
184
|
+
content = doc_file.read_text(encoding="utf-8")
|
|
185
|
+
# Check if doc references the core file
|
|
186
|
+
if core_file_name in content or core_file_stem in content:
|
|
187
|
+
docs.append(doc_file)
|
|
188
|
+
except Exception as e:
|
|
189
|
+
logger.debug(f"Error reading doc file {doc_file}: {e}")
|
|
190
|
+
|
|
191
|
+
# Check README files
|
|
192
|
+
for readme_path in [
|
|
193
|
+
project_root / "README.md",
|
|
194
|
+
project_root / "docs" / "README.md",
|
|
195
|
+
]:
|
|
196
|
+
if readme_path.exists():
|
|
197
|
+
try:
|
|
198
|
+
content = readme_path.read_text(encoding="utf-8")
|
|
199
|
+
if core_file_name in content or core_file_stem in content:
|
|
200
|
+
docs.append(readme_path)
|
|
201
|
+
except Exception as e:
|
|
202
|
+
logger.debug(f"Error reading README {readme_path}: {e}")
|
|
203
|
+
|
|
204
|
+
return docs
|
|
205
|
+
|
|
206
|
+
def _find_examples(self, core_file: Path, project_root: Path) -> list[Path]:
|
|
207
|
+
"""Find example files demonstrating the feature.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
core_file: Core file that was implemented
|
|
211
|
+
project_root: Project root directory
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
List of example file paths
|
|
215
|
+
"""
|
|
216
|
+
examples = []
|
|
217
|
+
core_file_stem = core_file.stem
|
|
218
|
+
|
|
219
|
+
# Search examples directory
|
|
220
|
+
examples_dir = project_root / "examples"
|
|
221
|
+
if examples_dir.exists():
|
|
222
|
+
for example_file in examples_dir.rglob("*"):
|
|
223
|
+
if example_file.is_file():
|
|
224
|
+
# Match by filename pattern
|
|
225
|
+
if core_file_stem in example_file.name:
|
|
226
|
+
examples.append(example_file)
|
|
227
|
+
|
|
228
|
+
# Search demo directory
|
|
229
|
+
demo_dir = project_root / "demo"
|
|
230
|
+
if demo_dir.exists():
|
|
231
|
+
for demo_file in demo_dir.rglob("*"):
|
|
232
|
+
if demo_file.is_file():
|
|
233
|
+
if core_file_stem in demo_file.name:
|
|
234
|
+
examples.append(demo_file)
|
|
235
|
+
|
|
236
|
+
return examples
|
|
237
|
+
|
|
238
|
+
def verify_completeness(self) -> dict[str, Any]:
|
|
239
|
+
"""Verify all checklist items are complete.
|
|
240
|
+
|
|
241
|
+
Returns:
|
|
242
|
+
Dictionary with:
|
|
243
|
+
- complete: bool - Whether all items are complete
|
|
244
|
+
- gaps: list[dict] - List of incomplete items with details
|
|
245
|
+
- summary: dict - Summary by category
|
|
246
|
+
"""
|
|
247
|
+
gaps = []
|
|
248
|
+
summary = {}
|
|
249
|
+
|
|
250
|
+
for category, items in self.checklist.items():
|
|
251
|
+
total = len(items)
|
|
252
|
+
complete_count = sum(1 for item in items if item["status"] == "complete")
|
|
253
|
+
pending_count = sum(1 for item in items if item["status"] == "pending")
|
|
254
|
+
failed_count = sum(1 for item in items if item["status"] == "failed")
|
|
255
|
+
|
|
256
|
+
summary[category] = {
|
|
257
|
+
"total": total,
|
|
258
|
+
"complete": complete_count,
|
|
259
|
+
"pending": pending_count,
|
|
260
|
+
"failed": failed_count,
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
# Collect incomplete items
|
|
264
|
+
for item in items:
|
|
265
|
+
if item["status"] != "complete":
|
|
266
|
+
gaps.append({
|
|
267
|
+
"category": category,
|
|
268
|
+
"item": item["item"],
|
|
269
|
+
"path": item["path"],
|
|
270
|
+
"status": item["status"],
|
|
271
|
+
"metadata": item.get("metadata", {}),
|
|
272
|
+
})
|
|
273
|
+
|
|
274
|
+
return {
|
|
275
|
+
"complete": len(gaps) == 0,
|
|
276
|
+
"gaps": gaps,
|
|
277
|
+
"summary": summary,
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
def mark_complete(
|
|
281
|
+
self, category: str, item: str | None = None, path: Path | None = None
|
|
282
|
+
) -> None:
|
|
283
|
+
"""Mark a deliverable as complete.
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
category: Category of deliverable
|
|
287
|
+
item: Item description (optional, matches any if None)
|
|
288
|
+
path: File path (optional, matches any if None)
|
|
289
|
+
"""
|
|
290
|
+
if category not in self.VALID_CATEGORIES:
|
|
291
|
+
raise ValueError(f"Invalid category: {category}")
|
|
292
|
+
|
|
293
|
+
for deliverable in self.checklist[category]:
|
|
294
|
+
match = True
|
|
295
|
+
if item and deliverable["item"] != item:
|
|
296
|
+
match = False
|
|
297
|
+
if path and deliverable["path"] != path:
|
|
298
|
+
match = False
|
|
299
|
+
|
|
300
|
+
if match:
|
|
301
|
+
deliverable["status"] = "complete"
|
|
302
|
+
logger.debug(f"Marked {category}/{deliverable['item']} as complete")
|
|
303
|
+
|
|
304
|
+
def to_dict(self) -> dict[str, Any]:
|
|
305
|
+
"""Convert checklist to dictionary for serialization.
|
|
306
|
+
|
|
307
|
+
Returns:
|
|
308
|
+
Dictionary representation of checklist
|
|
309
|
+
"""
|
|
310
|
+
return {
|
|
311
|
+
"requirements": self.requirements,
|
|
312
|
+
"checklist": {
|
|
313
|
+
category: [
|
|
314
|
+
{
|
|
315
|
+
"item": item["item"],
|
|
316
|
+
"path": str(item["path"]),
|
|
317
|
+
"status": item["status"],
|
|
318
|
+
"metadata": item.get("metadata", {}),
|
|
319
|
+
}
|
|
320
|
+
for item in items
|
|
321
|
+
]
|
|
322
|
+
for category, items in self.checklist.items()
|
|
323
|
+
},
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
@classmethod
|
|
327
|
+
def from_dict(cls, data: dict[str, Any]) -> "DeliverableChecklist":
|
|
328
|
+
"""Create checklist from dictionary (for checkpoint restoration).
|
|
329
|
+
|
|
330
|
+
Args:
|
|
331
|
+
data: Dictionary representation from to_dict()
|
|
332
|
+
|
|
333
|
+
Returns:
|
|
334
|
+
DeliverableChecklist instance
|
|
335
|
+
"""
|
|
336
|
+
checklist = cls(requirements=data.get("requirements"))
|
|
337
|
+
checklist_data = data.get("checklist", {})
|
|
338
|
+
|
|
339
|
+
for category, items in checklist_data.items():
|
|
340
|
+
for item_data in items:
|
|
341
|
+
checklist.add_deliverable(
|
|
342
|
+
category=category,
|
|
343
|
+
item=item_data["item"],
|
|
344
|
+
path=Path(item_data["path"]),
|
|
345
|
+
status=item_data["status"],
|
|
346
|
+
metadata=item_data.get("metadata", {}),
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
return checklist
|