tech-hub-skills 1.2.0 → 1.5.1

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 (198) hide show
  1. package/.claude/README.md +291 -0
  2. package/.claude/bin/cli.js +266 -0
  3. package/.claude/package.json +46 -0
  4. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_ab_tester.py +356 -0
  5. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_template_manager.py +274 -0
  6. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/token_cost_estimator.py +324 -0
  7. package/.claude/roles/ai-engineer/skills/02-rag-pipeline/document_chunker.py +336 -0
  8. package/.claude/roles/ai-engineer/skills/02-rag-pipeline/rag_pipeline.sql +213 -0
  9. package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/bronze_ingestion.py +337 -0
  10. package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/medallion_queries.sql +300 -0
  11. package/.claude/roles/data-scientist/skills/01-eda-automation/eda_generator.py +446 -0
  12. package/.claude/roles/system-design/skills/08-process-automation/ai_prompt_generator.py +744 -0
  13. package/.claude/roles/system-design/skills/08-process-automation/automation_recommender.py +688 -0
  14. package/.claude/roles/system-design/skills/08-process-automation/plan_generator.py +679 -0
  15. package/.claude/roles/system-design/skills/08-process-automation/process_analyzer.py +528 -0
  16. package/.claude/roles/system-design/skills/08-process-automation/process_parser.py +684 -0
  17. package/.claude/roles/system-design/skills/08-process-automation/role_matcher.py +615 -0
  18. package/.claude/skills/README.md +336 -0
  19. package/.claude/skills/ai-engineer.md +104 -0
  20. package/.claude/skills/aws.md +143 -0
  21. package/.claude/skills/azure.md +149 -0
  22. package/.claude/skills/backend-developer.md +108 -0
  23. package/.claude/skills/code-review.md +399 -0
  24. package/.claude/skills/compliance-automation.md +747 -0
  25. package/.claude/skills/compliance-officer.md +108 -0
  26. package/.claude/skills/data-engineer.md +113 -0
  27. package/.claude/skills/data-governance.md +102 -0
  28. package/.claude/skills/data-scientist.md +123 -0
  29. package/.claude/skills/database-admin.md +109 -0
  30. package/.claude/skills/devops.md +160 -0
  31. package/.claude/skills/docker.md +160 -0
  32. package/.claude/skills/enterprise-dashboard.md +613 -0
  33. package/.claude/skills/finops.md +184 -0
  34. package/.claude/skills/frontend-developer.md +108 -0
  35. package/.claude/skills/gcp.md +143 -0
  36. package/.claude/skills/ml-engineer.md +115 -0
  37. package/.claude/skills/mlops.md +187 -0
  38. package/.claude/skills/network-engineer.md +109 -0
  39. package/.claude/skills/optimization-advisor.md +329 -0
  40. package/.claude/skills/orchestrator.md +623 -0
  41. package/.claude/skills/platform-engineer.md +102 -0
  42. package/.claude/skills/process-automation.md +226 -0
  43. package/.claude/skills/process-changelog.md +184 -0
  44. package/.claude/skills/process-documentation.md +484 -0
  45. package/.claude/skills/process-kanban.md +324 -0
  46. package/.claude/skills/process-versioning.md +214 -0
  47. package/.claude/skills/product-designer.md +104 -0
  48. package/.claude/skills/project-starter.md +443 -0
  49. package/.claude/skills/qa-engineer.md +109 -0
  50. package/.claude/skills/security-architect.md +135 -0
  51. package/.claude/skills/sre.md +109 -0
  52. package/.claude/skills/system-design.md +126 -0
  53. package/.claude/skills/technical-writer.md +101 -0
  54. package/.gitattributes +2 -0
  55. package/GITHUB_COPILOT.md +106 -0
  56. package/README.md +117 -224
  57. package/package.json +4 -42
  58. package/bin/cli.js +0 -241
  59. /package/{LICENSE → .claude/LICENSE} +0 -0
  60. /package/{bin → .claude/bin}/copilot.js +0 -0
  61. /package/{bin → .claude/bin}/postinstall.js +0 -0
  62. /package/{tech_hub_skills/skills → .claude/commands}/README.md +0 -0
  63. /package/{tech_hub_skills/skills → .claude/commands}/ai-engineer.md +0 -0
  64. /package/{tech_hub_skills/skills → .claude/commands}/aws.md +0 -0
  65. /package/{tech_hub_skills/skills → .claude/commands}/azure.md +0 -0
  66. /package/{tech_hub_skills/skills → .claude/commands}/backend-developer.md +0 -0
  67. /package/{tech_hub_skills/skills → .claude/commands}/code-review.md +0 -0
  68. /package/{tech_hub_skills/skills → .claude/commands}/compliance-automation.md +0 -0
  69. /package/{tech_hub_skills/skills → .claude/commands}/compliance-officer.md +0 -0
  70. /package/{tech_hub_skills/skills → .claude/commands}/data-engineer.md +0 -0
  71. /package/{tech_hub_skills/skills → .claude/commands}/data-governance.md +0 -0
  72. /package/{tech_hub_skills/skills → .claude/commands}/data-scientist.md +0 -0
  73. /package/{tech_hub_skills/skills → .claude/commands}/database-admin.md +0 -0
  74. /package/{tech_hub_skills/skills → .claude/commands}/devops.md +0 -0
  75. /package/{tech_hub_skills/skills → .claude/commands}/docker.md +0 -0
  76. /package/{tech_hub_skills/skills → .claude/commands}/enterprise-dashboard.md +0 -0
  77. /package/{tech_hub_skills/skills → .claude/commands}/finops.md +0 -0
  78. /package/{tech_hub_skills/skills → .claude/commands}/frontend-developer.md +0 -0
  79. /package/{tech_hub_skills/skills → .claude/commands}/gcp.md +0 -0
  80. /package/{tech_hub_skills/skills → .claude/commands}/ml-engineer.md +0 -0
  81. /package/{tech_hub_skills/skills → .claude/commands}/mlops.md +0 -0
  82. /package/{tech_hub_skills/skills → .claude/commands}/network-engineer.md +0 -0
  83. /package/{tech_hub_skills/skills → .claude/commands}/optimization-advisor.md +0 -0
  84. /package/{tech_hub_skills/skills → .claude/commands}/orchestrator.md +0 -0
  85. /package/{tech_hub_skills/skills → .claude/commands}/platform-engineer.md +0 -0
  86. /package/{tech_hub_skills/skills → .claude/commands}/process-automation.md +0 -0
  87. /package/{tech_hub_skills/skills → .claude/commands}/process-changelog.md +0 -0
  88. /package/{tech_hub_skills/skills → .claude/commands}/process-documentation.md +0 -0
  89. /package/{tech_hub_skills/skills → .claude/commands}/process-kanban.md +0 -0
  90. /package/{tech_hub_skills/skills → .claude/commands}/process-versioning.md +0 -0
  91. /package/{tech_hub_skills/skills → .claude/commands}/product-designer.md +0 -0
  92. /package/{tech_hub_skills/skills → .claude/commands}/project-starter.md +0 -0
  93. /package/{tech_hub_skills/skills → .claude/commands}/qa-engineer.md +0 -0
  94. /package/{tech_hub_skills/skills → .claude/commands}/security-architect.md +0 -0
  95. /package/{tech_hub_skills/skills → .claude/commands}/sre.md +0 -0
  96. /package/{tech_hub_skills/skills → .claude/commands}/system-design.md +0 -0
  97. /package/{tech_hub_skills/skills → .claude/commands}/technical-writer.md +0 -0
  98. /package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/01-prompt-engineering/README.md +0 -0
  99. /package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/02-rag-pipeline/README.md +0 -0
  100. /package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/03-agent-orchestration/README.md +0 -0
  101. /package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/04-llm-guardrails/README.md +0 -0
  102. /package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/05-vector-embeddings/README.md +0 -0
  103. /package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/06-llm-evaluation/README.md +0 -0
  104. /package/{tech_hub_skills → .claude}/roles/azure/skills/01-infrastructure-fundamentals/README.md +0 -0
  105. /package/{tech_hub_skills → .claude}/roles/azure/skills/02-data-factory/README.md +0 -0
  106. /package/{tech_hub_skills → .claude}/roles/azure/skills/03-synapse-analytics/README.md +0 -0
  107. /package/{tech_hub_skills → .claude}/roles/azure/skills/04-databricks/README.md +0 -0
  108. /package/{tech_hub_skills → .claude}/roles/azure/skills/05-functions/README.md +0 -0
  109. /package/{tech_hub_skills → .claude}/roles/azure/skills/06-kubernetes-service/README.md +0 -0
  110. /package/{tech_hub_skills → .claude}/roles/azure/skills/07-openai-service/README.md +0 -0
  111. /package/{tech_hub_skills → .claude}/roles/azure/skills/08-machine-learning/README.md +0 -0
  112. /package/{tech_hub_skills → .claude}/roles/azure/skills/09-storage-adls/README.md +0 -0
  113. /package/{tech_hub_skills → .claude}/roles/azure/skills/10-networking/README.md +0 -0
  114. /package/{tech_hub_skills → .claude}/roles/azure/skills/11-sql-cosmos/README.md +0 -0
  115. /package/{tech_hub_skills → .claude}/roles/azure/skills/12-event-hubs/README.md +0 -0
  116. /package/{tech_hub_skills → .claude}/roles/code-review/skills/01-automated-code-review/README.md +0 -0
  117. /package/{tech_hub_skills → .claude}/roles/code-review/skills/02-pr-review-workflow/README.md +0 -0
  118. /package/{tech_hub_skills → .claude}/roles/code-review/skills/03-code-quality-gates/README.md +0 -0
  119. /package/{tech_hub_skills → .claude}/roles/code-review/skills/04-reviewer-assignment/README.md +0 -0
  120. /package/{tech_hub_skills → .claude}/roles/code-review/skills/05-review-analytics/README.md +0 -0
  121. /package/{tech_hub_skills → .claude}/roles/data-engineer/skills/01-lakehouse-architecture/README.md +0 -0
  122. /package/{tech_hub_skills → .claude}/roles/data-engineer/skills/02-etl-pipeline/README.md +0 -0
  123. /package/{tech_hub_skills → .claude}/roles/data-engineer/skills/03-data-quality/README.md +0 -0
  124. /package/{tech_hub_skills → .claude}/roles/data-engineer/skills/04-streaming-pipelines/README.md +0 -0
  125. /package/{tech_hub_skills → .claude}/roles/data-engineer/skills/05-performance-optimization/README.md +0 -0
  126. /package/{tech_hub_skills → .claude}/roles/data-governance/skills/01-data-catalog/README.md +0 -0
  127. /package/{tech_hub_skills → .claude}/roles/data-governance/skills/02-data-lineage/README.md +0 -0
  128. /package/{tech_hub_skills → .claude}/roles/data-governance/skills/03-data-quality-framework/README.md +0 -0
  129. /package/{tech_hub_skills → .claude}/roles/data-governance/skills/04-access-control/README.md +0 -0
  130. /package/{tech_hub_skills → .claude}/roles/data-governance/skills/05-master-data-management/README.md +0 -0
  131. /package/{tech_hub_skills → .claude}/roles/data-governance/skills/06-compliance-privacy/README.md +0 -0
  132. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/01-eda-automation/README.md +0 -0
  133. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/02-statistical-modeling/README.md +0 -0
  134. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/03-feature-engineering/README.md +0 -0
  135. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/04-predictive-modeling/README.md +0 -0
  136. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/05-customer-analytics/README.md +0 -0
  137. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/06-campaign-analysis/README.md +0 -0
  138. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/07-experimentation/README.md +0 -0
  139. /package/{tech_hub_skills → .claude}/roles/data-scientist/skills/08-data-visualization/README.md +0 -0
  140. /package/{tech_hub_skills → .claude}/roles/devops/skills/01-cicd-pipeline/README.md +0 -0
  141. /package/{tech_hub_skills → .claude}/roles/devops/skills/02-container-orchestration/README.md +0 -0
  142. /package/{tech_hub_skills → .claude}/roles/devops/skills/03-infrastructure-as-code/README.md +0 -0
  143. /package/{tech_hub_skills → .claude}/roles/devops/skills/04-gitops/README.md +0 -0
  144. /package/{tech_hub_skills → .claude}/roles/devops/skills/05-environment-management/README.md +0 -0
  145. /package/{tech_hub_skills → .claude}/roles/devops/skills/06-automated-testing/README.md +0 -0
  146. /package/{tech_hub_skills → .claude}/roles/devops/skills/07-release-management/README.md +0 -0
  147. /package/{tech_hub_skills → .claude}/roles/devops/skills/08-monitoring-alerting/README.md +0 -0
  148. /package/{tech_hub_skills → .claude}/roles/devops/skills/09-devsecops/README.md +0 -0
  149. /package/{tech_hub_skills → .claude}/roles/finops/skills/01-cost-visibility/README.md +0 -0
  150. /package/{tech_hub_skills → .claude}/roles/finops/skills/02-resource-tagging/README.md +0 -0
  151. /package/{tech_hub_skills → .claude}/roles/finops/skills/03-budget-management/README.md +0 -0
  152. /package/{tech_hub_skills → .claude}/roles/finops/skills/04-reserved-instances/README.md +0 -0
  153. /package/{tech_hub_skills → .claude}/roles/finops/skills/05-spot-optimization/README.md +0 -0
  154. /package/{tech_hub_skills → .claude}/roles/finops/skills/06-storage-tiering/README.md +0 -0
  155. /package/{tech_hub_skills → .claude}/roles/finops/skills/07-compute-rightsizing/README.md +0 -0
  156. /package/{tech_hub_skills → .claude}/roles/finops/skills/08-chargeback/README.md +0 -0
  157. /package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/01-mlops-pipeline/README.md +0 -0
  158. /package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/02-feature-engineering/README.md +0 -0
  159. /package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/03-model-training/README.md +0 -0
  160. /package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/04-model-serving/README.md +0 -0
  161. /package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/05-model-monitoring/README.md +0 -0
  162. /package/{tech_hub_skills → .claude}/roles/mlops/skills/01-ml-pipeline-orchestration/README.md +0 -0
  163. /package/{tech_hub_skills → .claude}/roles/mlops/skills/02-experiment-tracking/README.md +0 -0
  164. /package/{tech_hub_skills → .claude}/roles/mlops/skills/03-model-registry/README.md +0 -0
  165. /package/{tech_hub_skills → .claude}/roles/mlops/skills/04-feature-store/README.md +0 -0
  166. /package/{tech_hub_skills → .claude}/roles/mlops/skills/05-model-deployment/README.md +0 -0
  167. /package/{tech_hub_skills → .claude}/roles/mlops/skills/06-model-observability/README.md +0 -0
  168. /package/{tech_hub_skills → .claude}/roles/mlops/skills/07-data-versioning/README.md +0 -0
  169. /package/{tech_hub_skills → .claude}/roles/mlops/skills/08-ab-testing/README.md +0 -0
  170. /package/{tech_hub_skills → .claude}/roles/mlops/skills/09-automated-retraining/README.md +0 -0
  171. /package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/01-internal-developer-platform/README.md +0 -0
  172. /package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/02-self-service-infrastructure/README.md +0 -0
  173. /package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/03-slo-sli-management/README.md +0 -0
  174. /package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/04-developer-experience/README.md +0 -0
  175. /package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/05-incident-management/README.md +0 -0
  176. /package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/06-capacity-management/README.md +0 -0
  177. /package/{tech_hub_skills → .claude}/roles/product-designer/skills/01-requirements-discovery/README.md +0 -0
  178. /package/{tech_hub_skills → .claude}/roles/product-designer/skills/02-user-research/README.md +0 -0
  179. /package/{tech_hub_skills → .claude}/roles/product-designer/skills/03-brainstorming-ideation/README.md +0 -0
  180. /package/{tech_hub_skills → .claude}/roles/product-designer/skills/04-ux-design/README.md +0 -0
  181. /package/{tech_hub_skills → .claude}/roles/product-designer/skills/05-product-market-fit/README.md +0 -0
  182. /package/{tech_hub_skills → .claude}/roles/product-designer/skills/06-stakeholder-management/README.md +0 -0
  183. /package/{tech_hub_skills → .claude}/roles/security-architect/skills/01-pii-detection/README.md +0 -0
  184. /package/{tech_hub_skills → .claude}/roles/security-architect/skills/02-threat-modeling/README.md +0 -0
  185. /package/{tech_hub_skills → .claude}/roles/security-architect/skills/03-infrastructure-security/README.md +0 -0
  186. /package/{tech_hub_skills → .claude}/roles/security-architect/skills/04-iam/README.md +0 -0
  187. /package/{tech_hub_skills → .claude}/roles/security-architect/skills/05-application-security/README.md +0 -0
  188. /package/{tech_hub_skills → .claude}/roles/security-architect/skills/06-secrets-management/README.md +0 -0
  189. /package/{tech_hub_skills → .claude}/roles/security-architect/skills/07-security-monitoring/README.md +0 -0
  190. /package/{tech_hub_skills → .claude}/roles/system-design/skills/01-architecture-patterns/README.md +0 -0
  191. /package/{tech_hub_skills → .claude}/roles/system-design/skills/02-requirements-engineering/README.md +0 -0
  192. /package/{tech_hub_skills → .claude}/roles/system-design/skills/03-scalability/README.md +0 -0
  193. /package/{tech_hub_skills → .claude}/roles/system-design/skills/04-high-availability/README.md +0 -0
  194. /package/{tech_hub_skills → .claude}/roles/system-design/skills/05-cost-optimization-design/README.md +0 -0
  195. /package/{tech_hub_skills → .claude}/roles/system-design/skills/06-api-design/README.md +0 -0
  196. /package/{tech_hub_skills → .claude}/roles/system-design/skills/07-observability-architecture/README.md +0 -0
  197. /package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/PROCESS_TEMPLATE.md +0 -0
  198. /package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/README.md +0 -0
@@ -0,0 +1,615 @@
1
+ """
2
+ Role Matcher - Maps processes to the most suitable roles and skills.
3
+
4
+ Part of the Tech Hub Skills Library (sd-08: Process Automation).
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import List, Dict, Optional, Set, Tuple
9
+ from enum import Enum
10
+
11
+ from process_analyzer import ProcessAnalysis, AutomationType
12
+
13
+
14
+ @dataclass
15
+ class Skill:
16
+ """Represents a Tech Hub skill."""
17
+ id: str
18
+ name: str
19
+ role: str
20
+ complexity: str
21
+ description: str
22
+ keywords: List[str] = field(default_factory=list)
23
+
24
+
25
+ @dataclass
26
+ class RoleAssignment:
27
+ """Assignment of a role to a process automation task."""
28
+ role: str
29
+ role_name: str
30
+ affinity_score: float # 0-100
31
+ skills_required: List[str]
32
+ responsibilities: List[str]
33
+ effort_percentage: float
34
+ is_primary: bool = False
35
+
36
+
37
+ @dataclass
38
+ class TeamComposition:
39
+ """Complete team composition for automation implementation."""
40
+ assignments: List[RoleAssignment]
41
+ skill_gaps: List[Dict]
42
+ cross_functional_dependencies: List[Dict]
43
+ recommended_team_size: int
44
+
45
+ def to_dict(self) -> Dict:
46
+ """Convert to dictionary."""
47
+ return {
48
+ "assignments": [
49
+ {
50
+ "role": a.role,
51
+ "role_name": a.role_name,
52
+ "affinity_score": a.affinity_score,
53
+ "skills": a.skills_required,
54
+ "effort_pct": a.effort_percentage,
55
+ "is_primary": a.is_primary
56
+ }
57
+ for a in self.assignments
58
+ ],
59
+ "skill_gaps": self.skill_gaps,
60
+ "dependencies": self.cross_functional_dependencies,
61
+ "team_size": self.recommended_team_size
62
+ }
63
+
64
+ def get_primary_role(self) -> Optional[RoleAssignment]:
65
+ """Get the primary role assignment."""
66
+ for assignment in self.assignments:
67
+ if assignment.is_primary:
68
+ return assignment
69
+ return self.assignments[0] if self.assignments else None
70
+
71
+
72
+ class RoleMatcher:
73
+ """
74
+ Maps processes to suitable roles and skills for implementation.
75
+
76
+ Uses the Tech Hub skills library to identify the best team composition
77
+ for implementing automation initiatives.
78
+ """
79
+
80
+ # Complete Tech Hub role definitions
81
+ ROLES = {
82
+ "ai-engineer": {
83
+ "name": "AI Engineer",
84
+ "focus": ["LLMs", "RAG", "Agents", "Prompt Engineering", "NLP"],
85
+ "automation_types": [AutomationType.AI_POWERED],
86
+ "skills": [
87
+ Skill("ai-01", "Prompt Engineering & Optimization", "ai-engineer", "basic",
88
+ "Design and optimize prompts", ["prompt", "llm", "gpt", "template"]),
89
+ Skill("ai-02", "RAG Pipeline Builder", "ai-engineer", "medium",
90
+ "Build retrieval augmented generation", ["rag", "vector", "embedding", "search"]),
91
+ Skill("ai-03", "LLM Agent Orchestration", "ai-engineer", "advanced",
92
+ "Multi-agent systems", ["agent", "tool", "function", "reasoning"]),
93
+ Skill("ai-04", "LLM Guardrails & Safety", "ai-engineer", "medium",
94
+ "Safety and content moderation", ["safety", "guardrail", "moderation"]),
95
+ Skill("ai-05", "Vector Embeddings & Search", "ai-engineer", "medium",
96
+ "Semantic search systems", ["embedding", "vector", "similarity"]),
97
+ Skill("ai-06", "LLM Evaluation & Benchmarking", "ai-engineer", "advanced",
98
+ "Evaluate LLM performance", ["evaluation", "benchmark", "metrics"]),
99
+ Skill("ai-07", "Production LLM API Integration", "ai-engineer", "medium",
100
+ "LLM API integration", ["api", "openai", "azure", "integration"]),
101
+ Skill("ai-08", "Marketing AI Automation", "ai-engineer", "expert",
102
+ "Marketing automation with AI", ["marketing", "content", "email", "seo"]),
103
+ ]
104
+ },
105
+ "data-engineer": {
106
+ "name": "Data Engineer",
107
+ "focus": ["Pipelines", "ETL", "Lakehouse", "Streaming", "Data Quality"],
108
+ "automation_types": [AutomationType.DATA_PIPELINE, AutomationType.WORKFLOW],
109
+ "skills": [
110
+ Skill("de-01", "Lakehouse Architecture", "data-engineer", "medium",
111
+ "Bronze-Silver-Gold architecture", ["lakehouse", "medallion", "delta"]),
112
+ Skill("de-02", "ETL/ELT Pipeline Orchestration", "data-engineer", "medium",
113
+ "Data pipeline orchestration", ["etl", "elt", "pipeline", "airflow"]),
114
+ Skill("de-03", "Data Quality & Validation", "data-engineer", "medium",
115
+ "Data quality checks", ["quality", "validation", "testing"]),
116
+ Skill("de-04", "Real-Time Streaming Pipelines", "data-engineer", "advanced",
117
+ "Streaming data processing", ["streaming", "kafka", "real-time"]),
118
+ Skill("de-05", "Performance Optimization", "data-engineer", "advanced",
119
+ "Query and pipeline optimization", ["performance", "optimization", "tuning"]),
120
+ Skill("de-06", "Cloud Data Infrastructure", "data-engineer", "medium",
121
+ "Azure data infrastructure", ["azure", "cloud", "infrastructure"]),
122
+ Skill("de-07", "Database Management & Migration", "data-engineer", "medium",
123
+ "Database operations", ["database", "sql", "migration"]),
124
+ Skill("de-08", "Marketing Data Ingestion", "data-engineer", "medium",
125
+ "Marketing data sources", ["marketing", "salesforce", "crm"]),
126
+ Skill("de-09", "Monitoring & Observability", "data-engineer", "medium",
127
+ "Pipeline monitoring", ["monitoring", "observability", "alerts"]),
128
+ ]
129
+ },
130
+ "ml-engineer": {
131
+ "name": "ML Engineer",
132
+ "focus": ["MLOps", "Model Training", "Model Serving", "Feature Stores"],
133
+ "automation_types": [AutomationType.ML_BASED],
134
+ "skills": [
135
+ Skill("ml-01", "MLOps Pipeline Automation", "ml-engineer", "medium",
136
+ "ML pipeline automation", ["mlops", "pipeline", "automation"]),
137
+ Skill("ml-02", "Feature Engineering & Store", "ml-engineer", "medium",
138
+ "Feature store management", ["feature", "feast", "store"]),
139
+ Skill("ml-03", "Model Training & Tuning", "ml-engineer", "medium",
140
+ "Model training", ["training", "hyperparameter", "tuning"]),
141
+ Skill("ml-04", "Model Serving & APIs", "ml-engineer", "medium",
142
+ "Model deployment", ["serving", "inference", "api", "endpoint"]),
143
+ Skill("ml-05", "Model Monitoring & Drift", "ml-engineer", "advanced",
144
+ "Model monitoring", ["monitoring", "drift", "performance"]),
145
+ Skill("ml-06", "Distributed Training", "ml-engineer", "expert",
146
+ "Distributed ML", ["distributed", "gpu", "scaling"]),
147
+ Skill("ml-07", "Model Versioning & Registry", "ml-engineer", "medium",
148
+ "Model registry", ["versioning", "registry", "mlflow"]),
149
+ Skill("ml-08", "Model Compression", "ml-engineer", "advanced",
150
+ "Model optimization", ["compression", "quantization", "pruning"]),
151
+ Skill("ml-09", "Continuous Retraining", "ml-engineer", "expert",
152
+ "Automated retraining", ["retraining", "continuous", "automation"]),
153
+ ]
154
+ },
155
+ "data-scientist": {
156
+ "name": "Data Scientist",
157
+ "focus": ["Analytics", "Statistics", "Modeling", "Experimentation"],
158
+ "automation_types": [AutomationType.ML_BASED],
159
+ "skills": [
160
+ Skill("ds-01", "Automated EDA", "data-scientist", "basic",
161
+ "Exploratory data analysis", ["eda", "analysis", "profiling"]),
162
+ Skill("ds-02", "Statistical Modeling", "data-scientist", "medium",
163
+ "Statistical analysis", ["statistics", "hypothesis", "testing"]),
164
+ Skill("ds-03", "Feature Engineering", "data-scientist", "medium",
165
+ "Feature creation", ["feature", "engineering", "transformation"]),
166
+ Skill("ds-04", "Predictive Modeling", "data-scientist", "medium",
167
+ "Prediction models", ["prediction", "forecasting", "classification"]),
168
+ Skill("ds-05", "Customer Analytics", "data-scientist", "advanced",
169
+ "Customer analysis", ["customer", "segmentation", "churn"]),
170
+ Skill("ds-06", "Campaign Analysis", "data-scientist", "medium",
171
+ "Marketing analysis", ["campaign", "attribution", "roi"]),
172
+ Skill("ds-07", "Experimentation & Causal", "data-scientist", "expert",
173
+ "A/B testing and causal", ["experiment", "ab-test", "causal"]),
174
+ Skill("ds-08", "Data Visualization", "data-scientist", "medium",
175
+ "Visualization", ["visualization", "dashboard", "reporting"]),
176
+ ]
177
+ },
178
+ "security-architect": {
179
+ "name": "Security Architect",
180
+ "focus": ["Security", "Compliance", "IAM", "Threat Modeling"],
181
+ "automation_types": [AutomationType.SECURITY],
182
+ "skills": [
183
+ Skill("sa-01", "PII Detection & Privacy", "security-architect", "medium",
184
+ "PII and privacy", ["pii", "privacy", "gdpr", "anonymization"]),
185
+ Skill("sa-02", "Threat Modeling", "security-architect", "medium",
186
+ "Threat analysis", ["threat", "risk", "stride"]),
187
+ Skill("sa-03", "Infrastructure Security", "security-architect", "medium",
188
+ "IaC security", ["infrastructure", "iac", "hardening"]),
189
+ Skill("sa-04", "Identity & Access Management", "security-architect", "medium",
190
+ "IAM", ["iam", "identity", "access", "rbac"]),
191
+ Skill("sa-05", "Application Security", "security-architect", "medium",
192
+ "AppSec", ["sast", "dast", "appsec", "vulnerability"]),
193
+ Skill("sa-06", "Secrets & Key Management", "security-architect", "basic",
194
+ "Secrets management", ["secrets", "keys", "vault"]),
195
+ Skill("sa-07", "Security Monitoring", "security-architect", "advanced",
196
+ "Security monitoring", ["siem", "sentinel", "incident"]),
197
+ ]
198
+ },
199
+ "system-design": {
200
+ "name": "System Designer",
201
+ "focus": ["Architecture", "Patterns", "Scalability", "Design"],
202
+ "automation_types": [],
203
+ "skills": [
204
+ Skill("sd-01", "Architecture Pattern Selection", "system-design", "medium",
205
+ "Architecture patterns", ["architecture", "pattern", "microservices"]),
206
+ Skill("sd-02", "Requirements Engineering", "system-design", "basic",
207
+ "Requirements", ["requirements", "user-story", "specification"]),
208
+ Skill("sd-03", "Scalability & Performance", "system-design", "advanced",
209
+ "Scalability design", ["scalability", "performance", "capacity"]),
210
+ Skill("sd-04", "High Availability & DR", "system-design", "advanced",
211
+ "HA/DR", ["availability", "disaster-recovery", "failover"]),
212
+ Skill("sd-05", "Cost Optimization Design", "system-design", "medium",
213
+ "Cost optimization", ["cost", "optimization", "finops"]),
214
+ Skill("sd-06", "API Design & Integration", "system-design", "medium",
215
+ "API design", ["api", "rest", "graphql", "integration"]),
216
+ Skill("sd-07", "Observability Architecture", "system-design", "medium",
217
+ "Observability", ["observability", "monitoring", "tracing"]),
218
+ Skill("sd-08", "Process Automation Analysis", "system-design", "medium",
219
+ "Process automation", ["automation", "process", "workflow", "optimization"]),
220
+ ]
221
+ },
222
+ "devops": {
223
+ "name": "DevOps Engineer",
224
+ "focus": ["CI/CD", "Infrastructure", "Kubernetes", "Automation"],
225
+ "automation_types": [AutomationType.INFRASTRUCTURE, AutomationType.RPA],
226
+ "skills": [
227
+ Skill("do-01", "CI/CD Pipeline Design", "devops", "medium",
228
+ "CI/CD pipelines", ["cicd", "pipeline", "github-actions"]),
229
+ Skill("do-02", "Container Orchestration", "devops", "medium",
230
+ "Kubernetes", ["kubernetes", "k8s", "container", "helm"]),
231
+ Skill("do-03", "Infrastructure as Code", "devops", "medium",
232
+ "IaC", ["terraform", "bicep", "iac", "infrastructure"]),
233
+ Skill("do-04", "GitOps & Version Control", "devops", "basic",
234
+ "GitOps", ["git", "gitops", "flux", "argocd"]),
235
+ Skill("do-05", "Environment Management", "devops", "medium",
236
+ "Environments", ["environment", "staging", "production"]),
237
+ Skill("do-06", "Automated Testing", "devops", "medium",
238
+ "Testing automation", ["testing", "pytest", "integration"]),
239
+ Skill("do-07", "Release Management", "devops", "medium",
240
+ "Release management", ["release", "deployment", "rollback"]),
241
+ Skill("do-08", "Monitoring & Alerting", "devops", "medium",
242
+ "Monitoring", ["monitoring", "prometheus", "grafana", "alerting"]),
243
+ Skill("do-09", "DevSecOps", "devops", "advanced",
244
+ "Security in DevOps", ["devsecops", "security", "scanning"]),
245
+ ]
246
+ },
247
+ "finops": {
248
+ "name": "FinOps Practitioner",
249
+ "focus": ["Cost Management", "Optimization", "Budgets"],
250
+ "automation_types": [],
251
+ "skills": [
252
+ Skill("fo-01", "Cost Visibility & Reporting", "finops", "basic",
253
+ "Cost visibility", ["cost", "reporting", "dashboard"]),
254
+ Skill("fo-02", "Resource Tagging Strategy", "finops", "basic",
255
+ "Tagging", ["tagging", "governance", "policy"]),
256
+ Skill("fo-03", "Budget Management & Alerts", "finops", "basic",
257
+ "Budgets", ["budget", "alert", "threshold"]),
258
+ Skill("fo-04", "Reserved Instance Planning", "finops", "medium",
259
+ "RIs", ["reserved", "commitment", "savings"]),
260
+ Skill("fo-05", "Spot Instance Optimization", "finops", "medium",
261
+ "Spot", ["spot", "preemptible", "interruptible"]),
262
+ Skill("fo-06", "Storage Tiering", "finops", "medium",
263
+ "Storage optimization", ["storage", "tiering", "lifecycle"]),
264
+ Skill("fo-07", "Compute Right-sizing", "finops", "medium",
265
+ "Right-sizing", ["rightsizing", "optimization", "advisor"]),
266
+ Skill("fo-08", "Chargeback & Showback", "finops", "advanced",
267
+ "Cost allocation", ["chargeback", "showback", "allocation"]),
268
+ ]
269
+ },
270
+ }
271
+
272
+ def __init__(self):
273
+ """Initialize role matcher."""
274
+ self._build_keyword_index()
275
+
276
+ def _build_keyword_index(self):
277
+ """Build keyword to skill index for fast matching."""
278
+ self.keyword_index: Dict[str, List[Tuple[str, Skill]]] = {}
279
+
280
+ for role_id, role_data in self.ROLES.items():
281
+ for skill in role_data.get("skills", []):
282
+ for keyword in skill.keywords:
283
+ if keyword not in self.keyword_index:
284
+ self.keyword_index[keyword] = []
285
+ self.keyword_index[keyword].append((role_id, skill))
286
+
287
+ def match_roles(
288
+ self,
289
+ analysis: ProcessAnalysis,
290
+ strategy: Optional[object] = None
291
+ ) -> TeamComposition:
292
+ """
293
+ Match process to optimal team composition.
294
+
295
+ Args:
296
+ analysis: Process analysis
297
+ strategy: Optional automation strategy
298
+
299
+ Returns:
300
+ TeamComposition with role assignments
301
+ """
302
+ # Calculate affinity scores for each role
303
+ role_scores = self._calculate_role_affinities(analysis)
304
+
305
+ # Create role assignments
306
+ assignments = []
307
+ total_effort = 0
308
+
309
+ # Sort roles by affinity
310
+ sorted_roles = sorted(
311
+ role_scores.items(),
312
+ key=lambda x: x[1]["score"],
313
+ reverse=True
314
+ )
315
+
316
+ # Assign primary role (highest affinity)
317
+ primary_assigned = False
318
+
319
+ for role_id, score_data in sorted_roles:
320
+ if score_data["score"] < 20:
321
+ continue
322
+
323
+ # Determine effort based on affinity
324
+ if not primary_assigned:
325
+ effort = 40 # Primary role gets 40%
326
+ is_primary = True
327
+ primary_assigned = True
328
+ else:
329
+ effort = max(10, min(30, score_data["score"] / 3))
330
+ is_primary = False
331
+
332
+ total_effort += effort
333
+
334
+ assignments.append(RoleAssignment(
335
+ role=role_id,
336
+ role_name=self.ROLES[role_id]["name"],
337
+ affinity_score=score_data["score"],
338
+ skills_required=score_data["skills"],
339
+ responsibilities=score_data["responsibilities"],
340
+ effort_percentage=effort,
341
+ is_primary=is_primary
342
+ ))
343
+
344
+ # Normalize effort to 100%
345
+ if total_effort > 0:
346
+ for assignment in assignments:
347
+ assignment.effort_percentage = round(
348
+ (assignment.effort_percentage / total_effort) * 100, 1
349
+ )
350
+
351
+ # Identify skill gaps
352
+ skill_gaps = self._identify_skill_gaps(analysis, assignments)
353
+
354
+ # Map cross-functional dependencies
355
+ dependencies = self._map_dependencies(assignments)
356
+
357
+ # Calculate team size
358
+ team_size = self._calculate_team_size(analysis, assignments)
359
+
360
+ return TeamComposition(
361
+ assignments=assignments,
362
+ skill_gaps=skill_gaps,
363
+ cross_functional_dependencies=dependencies,
364
+ recommended_team_size=team_size
365
+ )
366
+
367
+ def _calculate_role_affinities(
368
+ self,
369
+ analysis: ProcessAnalysis
370
+ ) -> Dict[str, Dict]:
371
+ """Calculate affinity scores for each role."""
372
+ scores = {}
373
+
374
+ for role_id, role_data in self.ROLES.items():
375
+ score = 0
376
+ matched_skills = []
377
+ responsibilities = []
378
+
379
+ # Check automation type match
380
+ role_auto_types = role_data.get("automation_types", [])
381
+ for auto_type in analysis.automation_types:
382
+ if auto_type in role_auto_types:
383
+ score += 25
384
+ responsibilities.append(f"Implement {auto_type.value} automation")
385
+
386
+ # Check keyword matches in process
387
+ process_text = f"{analysis.name} {analysis.description}".lower()
388
+ for step in analysis.steps:
389
+ process_text += f" {step.name} {step.description}".lower()
390
+
391
+ for skill in role_data.get("skills", []):
392
+ for keyword in skill.keywords:
393
+ if keyword in process_text:
394
+ score += 10
395
+ if skill.id not in matched_skills:
396
+ matched_skills.append(skill.id)
397
+ break
398
+
399
+ # Check data source relevance
400
+ if role_id == "data-engineer" and analysis.data_sources_involved:
401
+ score += 20
402
+ responsibilities.append("Build data integration pipelines")
403
+
404
+ # Check compliance relevance
405
+ if role_id == "security-architect" and analysis.compliance_requirements:
406
+ score += 30
407
+ responsibilities.append("Ensure compliance requirements are met")
408
+
409
+ # System design always involved for complex processes
410
+ if role_id == "system-design":
411
+ if analysis.complexity.value in ["complex", "enterprise"]:
412
+ score += 25
413
+ responsibilities.append("Design overall architecture")
414
+ else:
415
+ score += 10
416
+ responsibilities.append("Review architecture decisions")
417
+
418
+ # DevOps always needed for deployment
419
+ if role_id == "devops":
420
+ score += 15
421
+ responsibilities.append("Set up CI/CD and deployment")
422
+
423
+ # FinOps for cost tracking
424
+ if role_id == "finops":
425
+ score += 10
426
+ responsibilities.append("Track and optimize costs")
427
+
428
+ scores[role_id] = {
429
+ "score": min(100, score),
430
+ "skills": matched_skills[:5], # Top 5 skills
431
+ "responsibilities": responsibilities
432
+ }
433
+
434
+ return scores
435
+
436
+ def _identify_skill_gaps(
437
+ self,
438
+ analysis: ProcessAnalysis,
439
+ assignments: List[RoleAssignment]
440
+ ) -> List[Dict]:
441
+ """Identify potential skill gaps."""
442
+ gaps = []
443
+
444
+ # Get all matched skills
445
+ matched_skills = set()
446
+ for assignment in assignments:
447
+ matched_skills.update(assignment.skills_required)
448
+
449
+ # Check for common gaps based on automation types
450
+ if AutomationType.AI_POWERED in analysis.automation_types:
451
+ ai_skills = {"ai-01", "ai-04", "ai-07"}
452
+ missing = ai_skills - matched_skills
453
+ if missing:
454
+ gaps.append({
455
+ "area": "AI/LLM",
456
+ "missing_skills": list(missing),
457
+ "recommendation": "Ensure AI Engineer covers prompt engineering and safety"
458
+ })
459
+
460
+ if AutomationType.ML_BASED in analysis.automation_types:
461
+ ml_skills = {"ml-01", "ml-04", "ml-05"}
462
+ missing = ml_skills - matched_skills
463
+ if missing:
464
+ gaps.append({
465
+ "area": "MLOps",
466
+ "missing_skills": list(missing),
467
+ "recommendation": "Include ML Engineer for model lifecycle management"
468
+ })
469
+
470
+ if analysis.compliance_requirements:
471
+ sec_skills = {"sa-01", "sa-02"}
472
+ missing = sec_skills - matched_skills
473
+ if missing:
474
+ gaps.append({
475
+ "area": "Security/Compliance",
476
+ "missing_skills": list(missing),
477
+ "recommendation": "Engage Security Architect for compliance validation"
478
+ })
479
+
480
+ return gaps
481
+
482
+ def _map_dependencies(
483
+ self,
484
+ assignments: List[RoleAssignment]
485
+ ) -> List[Dict]:
486
+ """Map cross-functional dependencies."""
487
+ dependencies = []
488
+
489
+ role_ids = [a.role for a in assignments]
490
+
491
+ # Common dependency patterns
492
+ if "data-engineer" in role_ids and "ml-engineer" in role_ids:
493
+ dependencies.append({
494
+ "from": "data-engineer",
495
+ "to": "ml-engineer",
496
+ "type": "data",
497
+ "description": "Feature pipelines and training data"
498
+ })
499
+
500
+ if "data-engineer" in role_ids and "ai-engineer" in role_ids:
501
+ dependencies.append({
502
+ "from": "data-engineer",
503
+ "to": "ai-engineer",
504
+ "type": "data",
505
+ "description": "Document processing and embeddings"
506
+ })
507
+
508
+ if "ml-engineer" in role_ids and "devops" in role_ids:
509
+ dependencies.append({
510
+ "from": "ml-engineer",
511
+ "to": "devops",
512
+ "type": "deployment",
513
+ "description": "Model serving infrastructure"
514
+ })
515
+
516
+ if "security-architect" in role_ids:
517
+ dependencies.append({
518
+ "from": "security-architect",
519
+ "to": "all",
520
+ "type": "review",
521
+ "description": "Security review gates"
522
+ })
523
+
524
+ if "system-design" in role_ids:
525
+ dependencies.append({
526
+ "from": "system-design",
527
+ "to": "all",
528
+ "type": "architecture",
529
+ "description": "Architecture guidance and ADRs"
530
+ })
531
+
532
+ return dependencies
533
+
534
+ def _calculate_team_size(
535
+ self,
536
+ analysis: ProcessAnalysis,
537
+ assignments: List[RoleAssignment]
538
+ ) -> int:
539
+ """Calculate recommended team size."""
540
+ base_size = len([a for a in assignments if a.affinity_score >= 30])
541
+
542
+ # Adjust for complexity
543
+ complexity_adjustment = {
544
+ "simple": 0,
545
+ "moderate": 1,
546
+ "complex": 2,
547
+ "enterprise": 3
548
+ }
549
+ base_size += complexity_adjustment.get(analysis.complexity.value, 0)
550
+
551
+ return max(2, min(8, base_size))
552
+
553
+ def get_skill_details(self, skill_id: str) -> Optional[Skill]:
554
+ """Get details for a specific skill."""
555
+ for role_data in self.ROLES.values():
556
+ for skill in role_data.get("skills", []):
557
+ if skill.id == skill_id:
558
+ return skill
559
+ return None
560
+
561
+ def get_role_skills(self, role_id: str) -> List[Skill]:
562
+ """Get all skills for a role."""
563
+ if role_id in self.ROLES:
564
+ return self.ROLES[role_id].get("skills", [])
565
+ return []
566
+
567
+
568
+ # Example usage
569
+ if __name__ == "__main__":
570
+ from process_analyzer import ProcessAnalyzer
571
+
572
+ analyzer = ProcessAnalyzer()
573
+ analysis = analyzer.analyze_process(
574
+ name="Automated Customer Insights Report",
575
+ description="Generate weekly insights from customer data using ML",
576
+ steps=[
577
+ {"name": "Extract CRM data", "time_minutes": 20, "data_sources": ["Salesforce"]},
578
+ {"name": "Extract usage data", "time_minutes": 15, "data_sources": ["Product DB"]},
579
+ {"name": "Run segmentation model", "time_minutes": 30, "requires_expertise": True},
580
+ {"name": "Generate insights with LLM", "time_minutes": 20, "requires_expertise": True},
581
+ {"name": "Create visualizations", "time_minutes": 25},
582
+ {"name": "Distribute report", "time_minutes": 10}
583
+ ],
584
+ frequency="weekly",
585
+ stakeholders=["Product", "Marketing", "Sales"],
586
+ compliance_requirements=["GDPR"]
587
+ )
588
+
589
+ matcher = RoleMatcher()
590
+ team = matcher.match_roles(analysis)
591
+
592
+ print("=" * 60)
593
+ print("TEAM COMPOSITION RECOMMENDATION")
594
+ print("=" * 60)
595
+ print(f"\nRecommended Team Size: {team.recommended_team_size}")
596
+
597
+ print("\nRole Assignments:")
598
+ for assignment in team.assignments:
599
+ primary = " (PRIMARY)" if assignment.is_primary else ""
600
+ print(f"\n {assignment.role_name}{primary}")
601
+ print(f" Affinity Score: {assignment.affinity_score}%")
602
+ print(f" Effort: {assignment.effort_percentage}%")
603
+ print(f" Skills: {', '.join(assignment.skills_required)}")
604
+ print(f" Responsibilities:")
605
+ for resp in assignment.responsibilities:
606
+ print(f" - {resp}")
607
+
608
+ if team.skill_gaps:
609
+ print("\nSkill Gaps Identified:")
610
+ for gap in team.skill_gaps:
611
+ print(f" - {gap['area']}: {gap['recommendation']}")
612
+
613
+ print("\nCross-Functional Dependencies:")
614
+ for dep in team.cross_functional_dependencies:
615
+ print(f" - {dep['from']} → {dep['to']}: {dep['description']}")