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,356 +1,356 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Memory Bridge - Ingest Clawdbot workspace files into TappsCodingAgents knowledge base.
|
|
3
|
-
|
|
4
|
-
This module bridges Clawdbot's workspace files (MEMORY.md, USER.md, daily notes)
|
|
5
|
-
into the TappsCodingAgents expert knowledge system, creating a "user preferences"
|
|
6
|
-
domain that persists learned patterns.
|
|
7
|
-
|
|
8
|
-
Features:
|
|
9
|
-
- Ingests MEMORY.md, USER.md, SOUL.md, AGENTS.md
|
|
10
|
-
- Ingests daily notes from memory/*.md
|
|
11
|
-
- Creates "user-preferences" domain with extracted patterns
|
|
12
|
-
- Updates automatically when files change
|
|
13
|
-
|
|
14
|
-
Usage:
|
|
15
|
-
from tapps_agents.integrations.memory_bridge import MemoryBridge
|
|
16
|
-
|
|
17
|
-
bridge = MemoryBridge(
|
|
18
|
-
workspace_root="/path/to/clawd",
|
|
19
|
-
project_root="/path/to/project"
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
# Sync all workspace files to knowledge base
|
|
23
|
-
await bridge.sync_all()
|
|
24
|
-
|
|
25
|
-
# Query user preferences
|
|
26
|
-
results = await bridge.query_preferences("How does the user prefer error handling?")
|
|
27
|
-
"""
|
|
28
|
-
|
|
29
|
-
from __future__ import annotations
|
|
30
|
-
|
|
31
|
-
import hashlib
|
|
32
|
-
import json
|
|
33
|
-
import logging
|
|
34
|
-
import re
|
|
35
|
-
from dataclasses import dataclass
|
|
36
|
-
from datetime import datetime
|
|
37
|
-
from pathlib import Path
|
|
38
|
-
from typing import Any
|
|
39
|
-
|
|
40
|
-
logger = logging.getLogger(__name__)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
@dataclass
|
|
44
|
-
class WorkspaceFile:
|
|
45
|
-
"""A workspace file to be ingested."""
|
|
46
|
-
path: Path
|
|
47
|
-
category: str # identity, preferences, context, daily
|
|
48
|
-
last_hash: str | None = None
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
@dataclass
|
|
52
|
-
class IngestResult:
|
|
53
|
-
"""Result of ingesting workspace files."""
|
|
54
|
-
files_processed: int
|
|
55
|
-
files_updated: int
|
|
56
|
-
patterns_extracted: int
|
|
57
|
-
knowledge_entries_created: int
|
|
58
|
-
errors: list[str]
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
class MemoryBridge:
|
|
62
|
-
"""
|
|
63
|
-
Bridge between Clawdbot workspace files and TappsCodingAgents knowledge base.
|
|
64
|
-
|
|
65
|
-
Creates a "user-preferences" domain that learns from:
|
|
66
|
-
- MEMORY.md: Long-term memories and lessons
|
|
67
|
-
- USER.md: User information and context
|
|
68
|
-
- SOUL.md: Persona and behavior guidelines
|
|
69
|
-
- AGENTS.md: Workspace conventions
|
|
70
|
-
- memory/*.md: Daily notes and context
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
# Files to track in workspace
|
|
74
|
-
WORKSPACE_FILES = {
|
|
75
|
-
"MEMORY.md": "preferences",
|
|
76
|
-
"USER.md": "identity",
|
|
77
|
-
"SOUL.md": "identity",
|
|
78
|
-
"AGENTS.md": "context",
|
|
79
|
-
"TOOLS.md": "context",
|
|
80
|
-
"IDENTITY.md": "identity",
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
# Patterns to extract from files
|
|
84
|
-
PREFERENCE_PATTERNS = [
|
|
85
|
-
r"(?:prefers?|likes?|wants?|should|always|never|don't)\s+(.+?)(?:\.|$)",
|
|
86
|
-
r"(?:important|note|remember|key):\s*(.+?)(?:\.|$)",
|
|
87
|
-
r"##\s*(?:Preferences|Rules|Guidelines|Conventions)\s*\n([\s\S]*?)(?=\n##|\Z)",
|
|
88
|
-
]
|
|
89
|
-
|
|
90
|
-
def __init__(
|
|
91
|
-
self,
|
|
92
|
-
workspace_root: Path | str | None = None,
|
|
93
|
-
project_root: Path | str | None = None,
|
|
94
|
-
):
|
|
95
|
-
"""
|
|
96
|
-
Initialize Memory Bridge.
|
|
97
|
-
|
|
98
|
-
Args:
|
|
99
|
-
workspace_root: Root of Clawdbot workspace (where MEMORY.md lives)
|
|
100
|
-
project_root: Root of project with .tapps-agents/ directory
|
|
101
|
-
"""
|
|
102
|
-
self.workspace_root = Path(workspace_root) if workspace_root else Path.cwd()
|
|
103
|
-
self.project_root = Path(project_root) if project_root else self.workspace_root
|
|
104
|
-
|
|
105
|
-
self.config_dir = self.project_root / ".tapps-agents"
|
|
106
|
-
self.knowledge_dir = self.config_dir / "knowledge" / "user-preferences"
|
|
107
|
-
self.state_file = self.config_dir / "memory_bridge_state.json"
|
|
108
|
-
|
|
109
|
-
# Ensure directories exist
|
|
110
|
-
self.knowledge_dir.mkdir(parents=True, exist_ok=True)
|
|
111
|
-
|
|
112
|
-
# Load state (tracks file hashes to detect changes)
|
|
113
|
-
self._state = self._load_state()
|
|
114
|
-
|
|
115
|
-
def _load_state(self) -> dict[str, Any]:
|
|
116
|
-
"""Load bridge state from disk."""
|
|
117
|
-
if self.state_file.exists():
|
|
118
|
-
try:
|
|
119
|
-
return json.loads(self.state_file.read_text(encoding="utf-8"))
|
|
120
|
-
except Exception as e:
|
|
121
|
-
logger.warning(f"Error loading state: {e}")
|
|
122
|
-
return {"file_hashes": {}, "last_sync": None}
|
|
123
|
-
|
|
124
|
-
def _save_state(self) -> None:
|
|
125
|
-
"""Save bridge state to disk."""
|
|
126
|
-
self._state["last_sync"] = datetime.now().isoformat()
|
|
127
|
-
self.state_file.write_text(
|
|
128
|
-
json.dumps(self._state, indent=2),
|
|
129
|
-
encoding="utf-8"
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
def _get_file_hash(self, path: Path) -> str:
|
|
133
|
-
"""Get hash of file contents."""
|
|
134
|
-
if not path.exists():
|
|
135
|
-
return ""
|
|
136
|
-
content = path.read_text(encoding="utf-8", errors="ignore")
|
|
137
|
-
return hashlib.md5(content.encode()).hexdigest()
|
|
138
|
-
|
|
139
|
-
def _file_changed(self, path: Path) -> bool:
|
|
140
|
-
"""Check if file has changed since last sync."""
|
|
141
|
-
current_hash = self._get_file_hash(path)
|
|
142
|
-
stored_hash = self._state["file_hashes"].get(str(path), "")
|
|
143
|
-
return current_hash != stored_hash
|
|
144
|
-
|
|
145
|
-
async def sync_all(self, force: bool = False) -> IngestResult:
|
|
146
|
-
"""
|
|
147
|
-
Sync all workspace files to knowledge base.
|
|
148
|
-
|
|
149
|
-
Args:
|
|
150
|
-
force: If True, re-process all files even if unchanged
|
|
151
|
-
|
|
152
|
-
Returns:
|
|
153
|
-
IngestResult with processing statistics
|
|
154
|
-
"""
|
|
155
|
-
result = IngestResult(
|
|
156
|
-
files_processed=0,
|
|
157
|
-
files_updated=0,
|
|
158
|
-
patterns_extracted=0,
|
|
159
|
-
knowledge_entries_created=0,
|
|
160
|
-
errors=[]
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
# Process static workspace files
|
|
164
|
-
for filename, category in self.WORKSPACE_FILES.items():
|
|
165
|
-
file_path = self.workspace_root / filename
|
|
166
|
-
if file_path.exists():
|
|
167
|
-
try:
|
|
168
|
-
if force or self._file_changed(file_path):
|
|
169
|
-
entries = await self._ingest_file(file_path, category)
|
|
170
|
-
result.knowledge_entries_created += entries
|
|
171
|
-
result.files_updated += 1
|
|
172
|
-
|
|
173
|
-
# Update hash
|
|
174
|
-
self._state["file_hashes"][str(file_path)] = self._get_file_hash(file_path)
|
|
175
|
-
|
|
176
|
-
result.files_processed += 1
|
|
177
|
-
except Exception as e:
|
|
178
|
-
result.errors.append(f"Error processing {filename}: {e}")
|
|
179
|
-
logger.error(f"Error processing {filename}: {e}")
|
|
180
|
-
|
|
181
|
-
# Process daily notes
|
|
182
|
-
memory_dir = self.workspace_root / "memory"
|
|
183
|
-
if memory_dir.exists():
|
|
184
|
-
for note_file in memory_dir.glob("*.md"):
|
|
185
|
-
try:
|
|
186
|
-
if force or self._file_changed(note_file):
|
|
187
|
-
entries = await self._ingest_file(note_file, "daily")
|
|
188
|
-
result.knowledge_entries_created += entries
|
|
189
|
-
result.files_updated += 1
|
|
190
|
-
|
|
191
|
-
self._state["file_hashes"][str(note_file)] = self._get_file_hash(note_file)
|
|
192
|
-
|
|
193
|
-
result.files_processed += 1
|
|
194
|
-
except Exception as e:
|
|
195
|
-
result.errors.append(f"Error processing {note_file.name}: {e}")
|
|
196
|
-
|
|
197
|
-
# Extract patterns from all ingested content
|
|
198
|
-
patterns = self._extract_patterns()
|
|
199
|
-
result.patterns_extracted = len(patterns)
|
|
200
|
-
|
|
201
|
-
# Create summary knowledge file
|
|
202
|
-
await self._create_summary(patterns)
|
|
203
|
-
|
|
204
|
-
# Save state
|
|
205
|
-
self._save_state()
|
|
206
|
-
|
|
207
|
-
return result
|
|
208
|
-
|
|
209
|
-
async def _ingest_file(self, path: Path, category: str) -> int:
|
|
210
|
-
"""
|
|
211
|
-
Ingest a single file into knowledge base.
|
|
212
|
-
|
|
213
|
-
Returns number of knowledge entries created.
|
|
214
|
-
"""
|
|
215
|
-
content = path.read_text(encoding="utf-8", errors="ignore")
|
|
216
|
-
|
|
217
|
-
# Create knowledge file for this source
|
|
218
|
-
kb_filename = f"{category}_{path.stem}.md"
|
|
219
|
-
kb_path = self.knowledge_dir / kb_filename
|
|
220
|
-
|
|
221
|
-
# Format for knowledge base
|
|
222
|
-
knowledge_content = f"""# {path.name} (auto-ingested)
|
|
223
|
-
|
|
224
|
-
**Source:** {path}
|
|
225
|
-
**Category:** {category}
|
|
226
|
-
**Last Updated:** {datetime.now().isoformat()}
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
{content}
|
|
231
|
-
"""
|
|
232
|
-
|
|
233
|
-
kb_path.write_text(knowledge_content, encoding="utf-8")
|
|
234
|
-
logger.info(f"Ingested {path.name} → {kb_filename}")
|
|
235
|
-
|
|
236
|
-
return 1
|
|
237
|
-
|
|
238
|
-
def _extract_patterns(self) -> list[str]:
|
|
239
|
-
"""Extract preference patterns from all knowledge files."""
|
|
240
|
-
patterns = []
|
|
241
|
-
|
|
242
|
-
for kb_file in self.knowledge_dir.glob("*.md"):
|
|
243
|
-
content = kb_file.read_text(encoding="utf-8", errors="ignore")
|
|
244
|
-
|
|
245
|
-
for pattern in self.PREFERENCE_PATTERNS:
|
|
246
|
-
matches = re.findall(pattern, content, re.IGNORECASE | re.MULTILINE)
|
|
247
|
-
for match in matches:
|
|
248
|
-
if isinstance(match, str) and len(match.strip()) > 10:
|
|
249
|
-
patterns.append(match.strip())
|
|
250
|
-
|
|
251
|
-
# Deduplicate
|
|
252
|
-
return list(set(patterns))
|
|
253
|
-
|
|
254
|
-
async def _create_summary(self, patterns: list[str]) -> None:
|
|
255
|
-
"""Create a summary knowledge file with extracted patterns."""
|
|
256
|
-
summary_path = self.knowledge_dir / "_summary.md"
|
|
257
|
-
|
|
258
|
-
content = f"""# User Preferences Summary
|
|
259
|
-
|
|
260
|
-
**Auto-generated:** {datetime.now().isoformat()}
|
|
261
|
-
**Patterns Extracted:** {len(patterns)}
|
|
262
|
-
|
|
263
|
-
This file summarizes preferences and patterns extracted from the Clawdbot workspace.
|
|
264
|
-
|
|
265
|
-
## Extracted Patterns
|
|
266
|
-
|
|
267
|
-
"""
|
|
268
|
-
|
|
269
|
-
for i, pattern in enumerate(patterns[:50], 1): # Limit to 50
|
|
270
|
-
content += f"{i}. {pattern}\n"
|
|
271
|
-
|
|
272
|
-
content += """
|
|
273
|
-
|
|
274
|
-
## Usage
|
|
275
|
-
|
|
276
|
-
When consulting this domain, consider:
|
|
277
|
-
- Code style preferences
|
|
278
|
-
- Communication preferences
|
|
279
|
-
- Project conventions
|
|
280
|
-
- Personal context
|
|
281
|
-
|
|
282
|
-
This knowledge is automatically updated when workspace files change.
|
|
283
|
-
"""
|
|
284
|
-
|
|
285
|
-
summary_path.write_text(content, encoding="utf-8")
|
|
286
|
-
|
|
287
|
-
async def query_preferences(self, question: str, top_k: int = 3) -> list[dict[str, Any]]:
|
|
288
|
-
"""
|
|
289
|
-
Query the user preferences knowledge base.
|
|
290
|
-
|
|
291
|
-
Args:
|
|
292
|
-
question: Question to search for
|
|
293
|
-
top_k: Number of results to return
|
|
294
|
-
|
|
295
|
-
Returns:
|
|
296
|
-
List of relevant knowledge chunks
|
|
297
|
-
"""
|
|
298
|
-
from ..experts.simple_rag import SimpleKnowledgeBase
|
|
299
|
-
|
|
300
|
-
if not self.knowledge_dir.exists():
|
|
301
|
-
return []
|
|
302
|
-
|
|
303
|
-
kb = SimpleKnowledgeBase(self.knowledge_dir)
|
|
304
|
-
chunks = kb.search(question, max_results=top_k)
|
|
305
|
-
|
|
306
|
-
return [
|
|
307
|
-
{
|
|
308
|
-
"content": chunk.content,
|
|
309
|
-
"source": chunk.source,
|
|
310
|
-
"score": getattr(chunk, "score", 0.0)
|
|
311
|
-
}
|
|
312
|
-
for chunk in chunks
|
|
313
|
-
]
|
|
314
|
-
|
|
315
|
-
def get_user_context(self) -> dict[str, Any]:
|
|
316
|
-
"""
|
|
317
|
-
Get structured user context from workspace files.
|
|
318
|
-
|
|
319
|
-
Returns:
|
|
320
|
-
Dictionary with user info, preferences, etc.
|
|
321
|
-
"""
|
|
322
|
-
context = {
|
|
323
|
-
"user": {},
|
|
324
|
-
"preferences": [],
|
|
325
|
-
"conventions": [],
|
|
326
|
-
"identity": {}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
# Parse USER.md
|
|
330
|
-
user_file = self.workspace_root / "USER.md"
|
|
331
|
-
if user_file.exists():
|
|
332
|
-
content = user_file.read_text(encoding="utf-8", errors="ignore")
|
|
333
|
-
|
|
334
|
-
# Extract key-value pairs (handles "- **Key:** Value" format)
|
|
335
|
-
for line in content.split("\n"):
|
|
336
|
-
if "**" in line and line.strip().startswith("- **"):
|
|
337
|
-
match = re.match(r"-\s*\*\*([^*]+)\*\*:?\s*(.+)", line)
|
|
338
|
-
if match:
|
|
339
|
-
key = match.group(1).rstrip(":").lower().replace(" ", "_")
|
|
340
|
-
value = match.group(2).strip()
|
|
341
|
-
context["user"][key] = value
|
|
342
|
-
|
|
343
|
-
# Parse IDENTITY.md
|
|
344
|
-
identity_file = self.workspace_root / "IDENTITY.md"
|
|
345
|
-
if identity_file.exists():
|
|
346
|
-
content = identity_file.read_text(encoding="utf-8", errors="ignore")
|
|
347
|
-
|
|
348
|
-
for line in content.split("\n"):
|
|
349
|
-
if "**" in line and line.strip().startswith("- **"):
|
|
350
|
-
match = re.match(r"-\s*\*\*([^*]+)\*\*:?\s*(.+)", line)
|
|
351
|
-
if match:
|
|
352
|
-
key = match.group(1).rstrip(":").lower().replace(" ", "_")
|
|
353
|
-
value = match.group(2).strip()
|
|
354
|
-
context["identity"][key] = value
|
|
355
|
-
|
|
356
|
-
return context
|
|
1
|
+
"""
|
|
2
|
+
Memory Bridge - Ingest Clawdbot workspace files into TappsCodingAgents knowledge base.
|
|
3
|
+
|
|
4
|
+
This module bridges Clawdbot's workspace files (MEMORY.md, USER.md, daily notes)
|
|
5
|
+
into the TappsCodingAgents expert knowledge system, creating a "user preferences"
|
|
6
|
+
domain that persists learned patterns.
|
|
7
|
+
|
|
8
|
+
Features:
|
|
9
|
+
- Ingests MEMORY.md, USER.md, SOUL.md, AGENTS.md
|
|
10
|
+
- Ingests daily notes from memory/*.md
|
|
11
|
+
- Creates "user-preferences" domain with extracted patterns
|
|
12
|
+
- Updates automatically when files change
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
from tapps_agents.integrations.memory_bridge import MemoryBridge
|
|
16
|
+
|
|
17
|
+
bridge = MemoryBridge(
|
|
18
|
+
workspace_root="/path/to/clawd",
|
|
19
|
+
project_root="/path/to/project"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Sync all workspace files to knowledge base
|
|
23
|
+
await bridge.sync_all()
|
|
24
|
+
|
|
25
|
+
# Query user preferences
|
|
26
|
+
results = await bridge.query_preferences("How does the user prefer error handling?")
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
import hashlib
|
|
32
|
+
import json
|
|
33
|
+
import logging
|
|
34
|
+
import re
|
|
35
|
+
from dataclasses import dataclass
|
|
36
|
+
from datetime import datetime
|
|
37
|
+
from pathlib import Path
|
|
38
|
+
from typing import Any
|
|
39
|
+
|
|
40
|
+
logger = logging.getLogger(__name__)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass
|
|
44
|
+
class WorkspaceFile:
|
|
45
|
+
"""A workspace file to be ingested."""
|
|
46
|
+
path: Path
|
|
47
|
+
category: str # identity, preferences, context, daily
|
|
48
|
+
last_hash: str | None = None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class IngestResult:
|
|
53
|
+
"""Result of ingesting workspace files."""
|
|
54
|
+
files_processed: int
|
|
55
|
+
files_updated: int
|
|
56
|
+
patterns_extracted: int
|
|
57
|
+
knowledge_entries_created: int
|
|
58
|
+
errors: list[str]
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class MemoryBridge:
|
|
62
|
+
"""
|
|
63
|
+
Bridge between Clawdbot workspace files and TappsCodingAgents knowledge base.
|
|
64
|
+
|
|
65
|
+
Creates a "user-preferences" domain that learns from:
|
|
66
|
+
- MEMORY.md: Long-term memories and lessons
|
|
67
|
+
- USER.md: User information and context
|
|
68
|
+
- SOUL.md: Persona and behavior guidelines
|
|
69
|
+
- AGENTS.md: Workspace conventions
|
|
70
|
+
- memory/*.md: Daily notes and context
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
# Files to track in workspace
|
|
74
|
+
WORKSPACE_FILES = {
|
|
75
|
+
"MEMORY.md": "preferences",
|
|
76
|
+
"USER.md": "identity",
|
|
77
|
+
"SOUL.md": "identity",
|
|
78
|
+
"AGENTS.md": "context",
|
|
79
|
+
"TOOLS.md": "context",
|
|
80
|
+
"IDENTITY.md": "identity",
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# Patterns to extract from files
|
|
84
|
+
PREFERENCE_PATTERNS = [
|
|
85
|
+
r"(?:prefers?|likes?|wants?|should|always|never|don't)\s+(.+?)(?:\.|$)",
|
|
86
|
+
r"(?:important|note|remember|key):\s*(.+?)(?:\.|$)",
|
|
87
|
+
r"##\s*(?:Preferences|Rules|Guidelines|Conventions)\s*\n([\s\S]*?)(?=\n##|\Z)",
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
def __init__(
|
|
91
|
+
self,
|
|
92
|
+
workspace_root: Path | str | None = None,
|
|
93
|
+
project_root: Path | str | None = None,
|
|
94
|
+
):
|
|
95
|
+
"""
|
|
96
|
+
Initialize Memory Bridge.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
workspace_root: Root of Clawdbot workspace (where MEMORY.md lives)
|
|
100
|
+
project_root: Root of project with .tapps-agents/ directory
|
|
101
|
+
"""
|
|
102
|
+
self.workspace_root = Path(workspace_root) if workspace_root else Path.cwd()
|
|
103
|
+
self.project_root = Path(project_root) if project_root else self.workspace_root
|
|
104
|
+
|
|
105
|
+
self.config_dir = self.project_root / ".tapps-agents"
|
|
106
|
+
self.knowledge_dir = self.config_dir / "knowledge" / "user-preferences"
|
|
107
|
+
self.state_file = self.config_dir / "memory_bridge_state.json"
|
|
108
|
+
|
|
109
|
+
# Ensure directories exist
|
|
110
|
+
self.knowledge_dir.mkdir(parents=True, exist_ok=True)
|
|
111
|
+
|
|
112
|
+
# Load state (tracks file hashes to detect changes)
|
|
113
|
+
self._state = self._load_state()
|
|
114
|
+
|
|
115
|
+
def _load_state(self) -> dict[str, Any]:
|
|
116
|
+
"""Load bridge state from disk."""
|
|
117
|
+
if self.state_file.exists():
|
|
118
|
+
try:
|
|
119
|
+
return json.loads(self.state_file.read_text(encoding="utf-8"))
|
|
120
|
+
except Exception as e:
|
|
121
|
+
logger.warning(f"Error loading state: {e}")
|
|
122
|
+
return {"file_hashes": {}, "last_sync": None}
|
|
123
|
+
|
|
124
|
+
def _save_state(self) -> None:
|
|
125
|
+
"""Save bridge state to disk."""
|
|
126
|
+
self._state["last_sync"] = datetime.now().isoformat()
|
|
127
|
+
self.state_file.write_text(
|
|
128
|
+
json.dumps(self._state, indent=2),
|
|
129
|
+
encoding="utf-8"
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
def _get_file_hash(self, path: Path) -> str:
|
|
133
|
+
"""Get hash of file contents."""
|
|
134
|
+
if not path.exists():
|
|
135
|
+
return ""
|
|
136
|
+
content = path.read_text(encoding="utf-8", errors="ignore")
|
|
137
|
+
return hashlib.md5(content.encode()).hexdigest()
|
|
138
|
+
|
|
139
|
+
def _file_changed(self, path: Path) -> bool:
|
|
140
|
+
"""Check if file has changed since last sync."""
|
|
141
|
+
current_hash = self._get_file_hash(path)
|
|
142
|
+
stored_hash = self._state["file_hashes"].get(str(path), "")
|
|
143
|
+
return current_hash != stored_hash
|
|
144
|
+
|
|
145
|
+
async def sync_all(self, force: bool = False) -> IngestResult:
|
|
146
|
+
"""
|
|
147
|
+
Sync all workspace files to knowledge base.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
force: If True, re-process all files even if unchanged
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
IngestResult with processing statistics
|
|
154
|
+
"""
|
|
155
|
+
result = IngestResult(
|
|
156
|
+
files_processed=0,
|
|
157
|
+
files_updated=0,
|
|
158
|
+
patterns_extracted=0,
|
|
159
|
+
knowledge_entries_created=0,
|
|
160
|
+
errors=[]
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
# Process static workspace files
|
|
164
|
+
for filename, category in self.WORKSPACE_FILES.items():
|
|
165
|
+
file_path = self.workspace_root / filename
|
|
166
|
+
if file_path.exists():
|
|
167
|
+
try:
|
|
168
|
+
if force or self._file_changed(file_path):
|
|
169
|
+
entries = await self._ingest_file(file_path, category)
|
|
170
|
+
result.knowledge_entries_created += entries
|
|
171
|
+
result.files_updated += 1
|
|
172
|
+
|
|
173
|
+
# Update hash
|
|
174
|
+
self._state["file_hashes"][str(file_path)] = self._get_file_hash(file_path)
|
|
175
|
+
|
|
176
|
+
result.files_processed += 1
|
|
177
|
+
except Exception as e:
|
|
178
|
+
result.errors.append(f"Error processing {filename}: {e}")
|
|
179
|
+
logger.error(f"Error processing {filename}: {e}")
|
|
180
|
+
|
|
181
|
+
# Process daily notes
|
|
182
|
+
memory_dir = self.workspace_root / "memory"
|
|
183
|
+
if memory_dir.exists():
|
|
184
|
+
for note_file in memory_dir.glob("*.md"):
|
|
185
|
+
try:
|
|
186
|
+
if force or self._file_changed(note_file):
|
|
187
|
+
entries = await self._ingest_file(note_file, "daily")
|
|
188
|
+
result.knowledge_entries_created += entries
|
|
189
|
+
result.files_updated += 1
|
|
190
|
+
|
|
191
|
+
self._state["file_hashes"][str(note_file)] = self._get_file_hash(note_file)
|
|
192
|
+
|
|
193
|
+
result.files_processed += 1
|
|
194
|
+
except Exception as e:
|
|
195
|
+
result.errors.append(f"Error processing {note_file.name}: {e}")
|
|
196
|
+
|
|
197
|
+
# Extract patterns from all ingested content
|
|
198
|
+
patterns = self._extract_patterns()
|
|
199
|
+
result.patterns_extracted = len(patterns)
|
|
200
|
+
|
|
201
|
+
# Create summary knowledge file
|
|
202
|
+
await self._create_summary(patterns)
|
|
203
|
+
|
|
204
|
+
# Save state
|
|
205
|
+
self._save_state()
|
|
206
|
+
|
|
207
|
+
return result
|
|
208
|
+
|
|
209
|
+
async def _ingest_file(self, path: Path, category: str) -> int:
|
|
210
|
+
"""
|
|
211
|
+
Ingest a single file into knowledge base.
|
|
212
|
+
|
|
213
|
+
Returns number of knowledge entries created.
|
|
214
|
+
"""
|
|
215
|
+
content = path.read_text(encoding="utf-8", errors="ignore")
|
|
216
|
+
|
|
217
|
+
# Create knowledge file for this source
|
|
218
|
+
kb_filename = f"{category}_{path.stem}.md"
|
|
219
|
+
kb_path = self.knowledge_dir / kb_filename
|
|
220
|
+
|
|
221
|
+
# Format for knowledge base
|
|
222
|
+
knowledge_content = f"""# {path.name} (auto-ingested)
|
|
223
|
+
|
|
224
|
+
**Source:** {path}
|
|
225
|
+
**Category:** {category}
|
|
226
|
+
**Last Updated:** {datetime.now().isoformat()}
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
{content}
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
kb_path.write_text(knowledge_content, encoding="utf-8")
|
|
234
|
+
logger.info(f"Ingested {path.name} → {kb_filename}")
|
|
235
|
+
|
|
236
|
+
return 1
|
|
237
|
+
|
|
238
|
+
def _extract_patterns(self) -> list[str]:
|
|
239
|
+
"""Extract preference patterns from all knowledge files."""
|
|
240
|
+
patterns = []
|
|
241
|
+
|
|
242
|
+
for kb_file in self.knowledge_dir.glob("*.md"):
|
|
243
|
+
content = kb_file.read_text(encoding="utf-8", errors="ignore")
|
|
244
|
+
|
|
245
|
+
for pattern in self.PREFERENCE_PATTERNS:
|
|
246
|
+
matches = re.findall(pattern, content, re.IGNORECASE | re.MULTILINE)
|
|
247
|
+
for match in matches:
|
|
248
|
+
if isinstance(match, str) and len(match.strip()) > 10:
|
|
249
|
+
patterns.append(match.strip())
|
|
250
|
+
|
|
251
|
+
# Deduplicate
|
|
252
|
+
return list(set(patterns))
|
|
253
|
+
|
|
254
|
+
async def _create_summary(self, patterns: list[str]) -> None:
|
|
255
|
+
"""Create a summary knowledge file with extracted patterns."""
|
|
256
|
+
summary_path = self.knowledge_dir / "_summary.md"
|
|
257
|
+
|
|
258
|
+
content = f"""# User Preferences Summary
|
|
259
|
+
|
|
260
|
+
**Auto-generated:** {datetime.now().isoformat()}
|
|
261
|
+
**Patterns Extracted:** {len(patterns)}
|
|
262
|
+
|
|
263
|
+
This file summarizes preferences and patterns extracted from the Clawdbot workspace.
|
|
264
|
+
|
|
265
|
+
## Extracted Patterns
|
|
266
|
+
|
|
267
|
+
"""
|
|
268
|
+
|
|
269
|
+
for i, pattern in enumerate(patterns[:50], 1): # Limit to 50
|
|
270
|
+
content += f"{i}. {pattern}\n"
|
|
271
|
+
|
|
272
|
+
content += """
|
|
273
|
+
|
|
274
|
+
## Usage
|
|
275
|
+
|
|
276
|
+
When consulting this domain, consider:
|
|
277
|
+
- Code style preferences
|
|
278
|
+
- Communication preferences
|
|
279
|
+
- Project conventions
|
|
280
|
+
- Personal context
|
|
281
|
+
|
|
282
|
+
This knowledge is automatically updated when workspace files change.
|
|
283
|
+
"""
|
|
284
|
+
|
|
285
|
+
summary_path.write_text(content, encoding="utf-8")
|
|
286
|
+
|
|
287
|
+
async def query_preferences(self, question: str, top_k: int = 3) -> list[dict[str, Any]]:
|
|
288
|
+
"""
|
|
289
|
+
Query the user preferences knowledge base.
|
|
290
|
+
|
|
291
|
+
Args:
|
|
292
|
+
question: Question to search for
|
|
293
|
+
top_k: Number of results to return
|
|
294
|
+
|
|
295
|
+
Returns:
|
|
296
|
+
List of relevant knowledge chunks
|
|
297
|
+
"""
|
|
298
|
+
from ..experts.simple_rag import SimpleKnowledgeBase
|
|
299
|
+
|
|
300
|
+
if not self.knowledge_dir.exists():
|
|
301
|
+
return []
|
|
302
|
+
|
|
303
|
+
kb = SimpleKnowledgeBase(self.knowledge_dir)
|
|
304
|
+
chunks = kb.search(question, max_results=top_k)
|
|
305
|
+
|
|
306
|
+
return [
|
|
307
|
+
{
|
|
308
|
+
"content": chunk.content,
|
|
309
|
+
"source": chunk.source,
|
|
310
|
+
"score": getattr(chunk, "score", 0.0)
|
|
311
|
+
}
|
|
312
|
+
for chunk in chunks
|
|
313
|
+
]
|
|
314
|
+
|
|
315
|
+
def get_user_context(self) -> dict[str, Any]:
|
|
316
|
+
"""
|
|
317
|
+
Get structured user context from workspace files.
|
|
318
|
+
|
|
319
|
+
Returns:
|
|
320
|
+
Dictionary with user info, preferences, etc.
|
|
321
|
+
"""
|
|
322
|
+
context = {
|
|
323
|
+
"user": {},
|
|
324
|
+
"preferences": [],
|
|
325
|
+
"conventions": [],
|
|
326
|
+
"identity": {}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
# Parse USER.md
|
|
330
|
+
user_file = self.workspace_root / "USER.md"
|
|
331
|
+
if user_file.exists():
|
|
332
|
+
content = user_file.read_text(encoding="utf-8", errors="ignore")
|
|
333
|
+
|
|
334
|
+
# Extract key-value pairs (handles "- **Key:** Value" format)
|
|
335
|
+
for line in content.split("\n"):
|
|
336
|
+
if "**" in line and line.strip().startswith("- **"):
|
|
337
|
+
match = re.match(r"-\s*\*\*([^*]+)\*\*:?\s*(.+)", line)
|
|
338
|
+
if match:
|
|
339
|
+
key = match.group(1).rstrip(":").lower().replace(" ", "_")
|
|
340
|
+
value = match.group(2).strip()
|
|
341
|
+
context["user"][key] = value
|
|
342
|
+
|
|
343
|
+
# Parse IDENTITY.md
|
|
344
|
+
identity_file = self.workspace_root / "IDENTITY.md"
|
|
345
|
+
if identity_file.exists():
|
|
346
|
+
content = identity_file.read_text(encoding="utf-8", errors="ignore")
|
|
347
|
+
|
|
348
|
+
for line in content.split("\n"):
|
|
349
|
+
if "**" in line and line.strip().startswith("- **"):
|
|
350
|
+
match = re.match(r"-\s*\*\*([^*]+)\*\*:?\s*(.+)", line)
|
|
351
|
+
if match:
|
|
352
|
+
key = match.group(1).rstrip(":").lower().replace(" ", "_")
|
|
353
|
+
value = match.group(2).strip()
|
|
354
|
+
context["identity"][key] = value
|
|
355
|
+
|
|
356
|
+
return context
|