tapps-agents 3.5.39__py3-none-any.whl → 3.5.41__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.
Files changed (71) hide show
  1. tapps_agents/__init__.py +2 -2
  2. tapps_agents/agents/enhancer/agent.py +2728 -2728
  3. tapps_agents/agents/implementer/agent.py +35 -13
  4. tapps_agents/agents/reviewer/agent.py +43 -10
  5. tapps_agents/agents/reviewer/scoring.py +59 -68
  6. tapps_agents/agents/reviewer/tools/__init__.py +24 -0
  7. tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -0
  8. tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -0
  9. tapps_agents/beads/__init__.py +11 -0
  10. tapps_agents/beads/hydration.py +213 -0
  11. tapps_agents/beads/specs.py +206 -0
  12. tapps_agents/cli/commands/health.py +19 -3
  13. tapps_agents/cli/commands/simple_mode.py +842 -676
  14. tapps_agents/cli/commands/task.py +227 -0
  15. tapps_agents/cli/commands/top_level.py +13 -0
  16. tapps_agents/cli/main.py +658 -651
  17. tapps_agents/cli/parsers/top_level.py +1978 -1881
  18. tapps_agents/core/config.py +1622 -1622
  19. tapps_agents/core/init_project.py +3012 -2897
  20. tapps_agents/epic/markdown_sync.py +105 -0
  21. tapps_agents/epic/orchestrator.py +1 -2
  22. tapps_agents/epic/parser.py +427 -423
  23. tapps_agents/experts/adaptive_domain_detector.py +0 -2
  24. tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +15 -15
  25. tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +19 -44
  26. tapps_agents/health/checks/outcomes.backup_20260204_064058.py +324 -0
  27. tapps_agents/health/checks/outcomes.backup_20260204_064256.py +324 -0
  28. tapps_agents/health/checks/outcomes.backup_20260204_064600.py +324 -0
  29. tapps_agents/health/checks/outcomes.py +134 -46
  30. tapps_agents/health/orchestrator.py +12 -4
  31. tapps_agents/hooks/__init__.py +33 -0
  32. tapps_agents/hooks/config.py +140 -0
  33. tapps_agents/hooks/events.py +135 -0
  34. tapps_agents/hooks/executor.py +128 -0
  35. tapps_agents/hooks/manager.py +143 -0
  36. tapps_agents/session/__init__.py +19 -0
  37. tapps_agents/session/manager.py +256 -0
  38. tapps_agents/simple_mode/code_snippet_handler.py +382 -0
  39. tapps_agents/simple_mode/intent_parser.py +29 -4
  40. tapps_agents/simple_mode/orchestrators/base.py +185 -59
  41. tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2667 -2642
  42. tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +2 -2
  43. tapps_agents/simple_mode/workflow_suggester.py +37 -3
  44. tapps_agents/workflow/agent_handlers/implementer_handler.py +18 -3
  45. tapps_agents/workflow/cursor_executor.py +2337 -2118
  46. tapps_agents/workflow/direct_execution_fallback.py +16 -3
  47. tapps_agents/workflow/message_formatter.py +2 -1
  48. tapps_agents/workflow/models.py +38 -1
  49. tapps_agents/workflow/parallel_executor.py +43 -4
  50. tapps_agents/workflow/parser.py +375 -357
  51. tapps_agents/workflow/rules_generator.py +337 -337
  52. tapps_agents/workflow/skill_invoker.py +9 -3
  53. {tapps_agents-3.5.39.dist-info → tapps_agents-3.5.41.dist-info}/METADATA +5 -1
  54. {tapps_agents-3.5.39.dist-info → tapps_agents-3.5.41.dist-info}/RECORD +58 -54
  55. tapps_agents/agents/analyst/SKILL.md +0 -85
  56. tapps_agents/agents/architect/SKILL.md +0 -80
  57. tapps_agents/agents/debugger/SKILL.md +0 -66
  58. tapps_agents/agents/designer/SKILL.md +0 -78
  59. tapps_agents/agents/documenter/SKILL.md +0 -95
  60. tapps_agents/agents/enhancer/SKILL.md +0 -189
  61. tapps_agents/agents/implementer/SKILL.md +0 -117
  62. tapps_agents/agents/improver/SKILL.md +0 -55
  63. tapps_agents/agents/ops/SKILL.md +0 -64
  64. tapps_agents/agents/orchestrator/SKILL.md +0 -238
  65. tapps_agents/agents/planner/story_template.md +0 -37
  66. tapps_agents/agents/reviewer/templates/quality-dashboard.html.j2 +0 -150
  67. tapps_agents/agents/tester/SKILL.md +0 -71
  68. {tapps_agents-3.5.39.dist-info → tapps_agents-3.5.41.dist-info}/WHEEL +0 -0
  69. {tapps_agents-3.5.39.dist-info → tapps_agents-3.5.41.dist-info}/entry_points.txt +0 -0
  70. {tapps_agents-3.5.39.dist-info → tapps_agents-3.5.41.dist-info}/licenses/LICENSE +0 -0
  71. {tapps_agents-3.5.39.dist-info → tapps_agents-3.5.41.dist-info}/top_level.txt +0 -0
@@ -96,11 +96,11 @@ class FixOrchestrator(SimpleModeOrchestrator):
96
96
 
97
97
  # Beads required: fail early if beads.required and bd unavailable
98
98
  try:
99
- from ..beads import require_beads
99
+ from tapps_agents.beads import require_beads
100
100
 
101
101
  require_beads(config, self.project_root)
102
102
  except Exception as e:
103
- from tapps_agents.core.feedback import get_feedback
103
+ from tapps_agents.cli.feedback import get_feedback
104
104
 
105
105
  get_feedback().error(str(e), context={"beads_required": True})
106
106
  return {
@@ -463,16 +463,50 @@ class WorkflowSuggester:
463
463
  if intent.type == IntentType.UNKNOWN:
464
464
  return None
465
465
 
466
- # Detect hybrid "review + fix" intent
466
+ # Detect hybrid "review + fix" intent with enhanced pattern matching
467
467
  user_input_lower = user_input.lower()
468
+
469
+ # Pattern-based detection for hybrid requests
470
+ HYBRID_PATTERNS = [
471
+ r"review.*(?:and|then).*fix",
472
+ r"check.*(?:and|then).*(?:fix|repair|correct)",
473
+ r"compare.*(?:and|then).*fix",
474
+ r"make.*match.*(?:and|then)?.*fix",
475
+ r"(?:inspect|examine|analyze).*(?:and|then).*(?:fix|repair|correct)",
476
+ ]
477
+ pattern_match = any(
478
+ re.search(pattern, user_input_lower)
479
+ for pattern in HYBRID_PATTERNS
480
+ )
481
+
482
+ # Boolean detection with expanded keywords
468
483
  has_review = (
469
484
  intent.type == IntentType.REVIEW
470
485
  or "review" in user_input_lower
471
486
  or intent.compare_to_codebase
487
+ or pattern_match # Add pattern match signal
488
+ )
489
+ has_fix = (
490
+ intent.type == IntentType.FIX
491
+ or "fix" in user_input_lower
492
+ or "repair" in user_input_lower # Expanded keyword
493
+ or "correct" in user_input_lower # Expanded keyword
472
494
  )
473
- has_fix = intent.type == IntentType.FIX or "fix" in user_input_lower
474
495
 
475
496
  if has_review and has_fix:
497
+ # Dynamic confidence scoring (0.85-1.0 range)
498
+ base_confidence = 0.85
499
+
500
+ # Boost confidence based on signal strength
501
+ if pattern_match:
502
+ base_confidence += 0.05 # Boost for pattern match
503
+ if intent.compare_to_codebase:
504
+ base_confidence += 0.05 # Boost for "compare to codebase" flag
505
+ if intent.type == IntentType.REVIEW or intent.type == IntentType.FIX:
506
+ base_confidence += 0.05 # Boost for explicit intent type match
507
+
508
+ confidence = min(base_confidence, 1.0) # Cap at 1.0
509
+
476
510
  return WorkflowSuggestion(
477
511
  workflow_command=(
478
512
  '@simple-mode *review <file> # Then: @simple-mode *fix <file> "issues from review"'
@@ -484,7 +518,7 @@ class WorkflowSuggester:
484
518
  "Quality gates after fixes",
485
519
  "Full traceability from review to fix",
486
520
  ],
487
- confidence=0.85,
521
+ confidence=confidence,
488
522
  reason="Review + fix hybrid request detected",
489
523
  )
490
524
 
@@ -202,9 +202,24 @@ class ImplementerHandler(AgentExecutionHandler):
202
202
  )
203
203
  self.state.variables["implementer_result"] = result
204
204
  self.state.variables["target_file"] = str(target_path)
205
-
205
+
206
206
  created_artifacts: list[dict[str, Any]] = []
207
-
207
+
208
+ # Add the target file as an artifact (for both new and existing files)
209
+ # This ensures workflow steps can track what was created/modified
210
+ if target_path.exists():
211
+ created_artifacts.append(
212
+ {"name": str(target_path.relative_to(self.project_root)), "path": str(target_path)}
213
+ )
214
+
215
+ # Also add "src/" artifact for workflow compatibility
216
+ # Many workflow presets expect "src/" as a generic source code artifact
217
+ # We use the parent directory of the target file as "src/"
218
+ src_dir = target_path.parent
219
+ created_artifacts.append(
220
+ {"name": "src/", "path": str(src_dir)}
221
+ )
222
+
208
223
  # Create fixed-code/ artifact if requested by preset (only for existing files)
209
224
  if file_exists and "fixed-code/" in (step.creates or []):
210
225
  fixed_dir = self.project_root / "fixed-code"
@@ -215,6 +230,6 @@ class ImplementerHandler(AgentExecutionHandler):
215
230
  created_artifacts.append(
216
231
  {"name": "fixed-code/", "path": str(fixed_dir)}
217
232
  )
218
-
233
+
219
234
  return created_artifacts
220
235