tech-hub-skills 1.2.0 → 1.5.2

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/{LICENSE → .claude/LICENSE} +21 -21
  2. package/.claude/README.md +291 -0
  3. package/.claude/bin/cli.js +266 -0
  4. package/{bin → .claude/bin}/copilot.js +182 -182
  5. package/{bin → .claude/bin}/postinstall.js +42 -42
  6. package/{tech_hub_skills/skills → .claude/commands}/README.md +336 -336
  7. package/{tech_hub_skills/skills → .claude/commands}/ai-engineer.md +104 -104
  8. package/{tech_hub_skills/skills → .claude/commands}/aws.md +143 -143
  9. package/{tech_hub_skills/skills → .claude/commands}/azure.md +149 -149
  10. package/{tech_hub_skills/skills → .claude/commands}/backend-developer.md +108 -108
  11. package/{tech_hub_skills/skills → .claude/commands}/code-review.md +399 -399
  12. package/{tech_hub_skills/skills → .claude/commands}/compliance-automation.md +747 -747
  13. package/{tech_hub_skills/skills → .claude/commands}/compliance-officer.md +108 -108
  14. package/{tech_hub_skills/skills → .claude/commands}/data-engineer.md +113 -113
  15. package/{tech_hub_skills/skills → .claude/commands}/data-governance.md +102 -102
  16. package/{tech_hub_skills/skills → .claude/commands}/data-scientist.md +123 -123
  17. package/{tech_hub_skills/skills → .claude/commands}/database-admin.md +109 -109
  18. package/{tech_hub_skills/skills → .claude/commands}/devops.md +160 -160
  19. package/{tech_hub_skills/skills → .claude/commands}/docker.md +160 -160
  20. package/{tech_hub_skills/skills → .claude/commands}/enterprise-dashboard.md +613 -613
  21. package/{tech_hub_skills/skills → .claude/commands}/finops.md +184 -184
  22. package/{tech_hub_skills/skills → .claude/commands}/frontend-developer.md +108 -108
  23. package/{tech_hub_skills/skills → .claude/commands}/gcp.md +143 -143
  24. package/{tech_hub_skills/skills → .claude/commands}/ml-engineer.md +115 -115
  25. package/{tech_hub_skills/skills → .claude/commands}/mlops.md +187 -187
  26. package/{tech_hub_skills/skills → .claude/commands}/network-engineer.md +109 -109
  27. package/{tech_hub_skills/skills → .claude/commands}/optimization-advisor.md +329 -329
  28. package/{tech_hub_skills/skills → .claude/commands}/orchestrator.md +623 -623
  29. package/{tech_hub_skills/skills → .claude/commands}/platform-engineer.md +102 -102
  30. package/{tech_hub_skills/skills → .claude/commands}/process-automation.md +226 -226
  31. package/{tech_hub_skills/skills → .claude/commands}/process-changelog.md +184 -184
  32. package/{tech_hub_skills/skills → .claude/commands}/process-documentation.md +484 -484
  33. package/{tech_hub_skills/skills → .claude/commands}/process-kanban.md +324 -324
  34. package/{tech_hub_skills/skills → .claude/commands}/process-versioning.md +214 -214
  35. package/{tech_hub_skills/skills → .claude/commands}/product-designer.md +104 -104
  36. package/{tech_hub_skills/skills → .claude/commands}/project-starter.md +443 -443
  37. package/{tech_hub_skills/skills → .claude/commands}/qa-engineer.md +109 -109
  38. package/{tech_hub_skills/skills → .claude/commands}/security-architect.md +135 -135
  39. package/{tech_hub_skills/skills → .claude/commands}/sre.md +109 -109
  40. package/{tech_hub_skills/skills → .claude/commands}/system-design.md +126 -126
  41. package/{tech_hub_skills/skills → .claude/commands}/technical-writer.md +101 -101
  42. package/.claude/package.json +46 -0
  43. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/01-prompt-engineering/README.md +252 -252
  44. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_ab_tester.py +356 -0
  45. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/prompt_template_manager.py +274 -0
  46. package/.claude/roles/ai-engineer/skills/01-prompt-engineering/token_cost_estimator.py +324 -0
  47. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/02-rag-pipeline/README.md +448 -448
  48. package/.claude/roles/ai-engineer/skills/02-rag-pipeline/document_chunker.py +336 -0
  49. package/.claude/roles/ai-engineer/skills/02-rag-pipeline/rag_pipeline.sql +213 -0
  50. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/03-agent-orchestration/README.md +599 -599
  51. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/04-llm-guardrails/README.md +735 -735
  52. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/05-vector-embeddings/README.md +711 -711
  53. package/{tech_hub_skills → .claude}/roles/ai-engineer/skills/06-llm-evaluation/README.md +777 -777
  54. package/{tech_hub_skills → .claude}/roles/azure/skills/01-infrastructure-fundamentals/README.md +264 -264
  55. package/{tech_hub_skills → .claude}/roles/azure/skills/02-data-factory/README.md +264 -264
  56. package/{tech_hub_skills → .claude}/roles/azure/skills/03-synapse-analytics/README.md +264 -264
  57. package/{tech_hub_skills → .claude}/roles/azure/skills/04-databricks/README.md +264 -264
  58. package/{tech_hub_skills → .claude}/roles/azure/skills/05-functions/README.md +264 -264
  59. package/{tech_hub_skills → .claude}/roles/azure/skills/06-kubernetes-service/README.md +264 -264
  60. package/{tech_hub_skills → .claude}/roles/azure/skills/07-openai-service/README.md +264 -264
  61. package/{tech_hub_skills → .claude}/roles/azure/skills/08-machine-learning/README.md +264 -264
  62. package/{tech_hub_skills → .claude}/roles/azure/skills/09-storage-adls/README.md +264 -264
  63. package/{tech_hub_skills → .claude}/roles/azure/skills/10-networking/README.md +264 -264
  64. package/{tech_hub_skills → .claude}/roles/azure/skills/11-sql-cosmos/README.md +264 -264
  65. package/{tech_hub_skills → .claude}/roles/azure/skills/12-event-hubs/README.md +264 -264
  66. package/{tech_hub_skills → .claude}/roles/code-review/skills/01-automated-code-review/README.md +394 -394
  67. package/{tech_hub_skills → .claude}/roles/code-review/skills/02-pr-review-workflow/README.md +427 -427
  68. package/{tech_hub_skills → .claude}/roles/code-review/skills/03-code-quality-gates/README.md +518 -518
  69. package/{tech_hub_skills → .claude}/roles/code-review/skills/04-reviewer-assignment/README.md +504 -504
  70. package/{tech_hub_skills → .claude}/roles/code-review/skills/05-review-analytics/README.md +540 -540
  71. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/01-lakehouse-architecture/README.md +550 -550
  72. package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/bronze_ingestion.py +337 -0
  73. package/.claude/roles/data-engineer/skills/01-lakehouse-architecture/medallion_queries.sql +300 -0
  74. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/02-etl-pipeline/README.md +580 -580
  75. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/03-data-quality/README.md +579 -579
  76. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/04-streaming-pipelines/README.md +608 -608
  77. package/{tech_hub_skills → .claude}/roles/data-engineer/skills/05-performance-optimization/README.md +547 -547
  78. package/{tech_hub_skills → .claude}/roles/data-governance/skills/01-data-catalog/README.md +112 -112
  79. package/{tech_hub_skills → .claude}/roles/data-governance/skills/02-data-lineage/README.md +129 -129
  80. package/{tech_hub_skills → .claude}/roles/data-governance/skills/03-data-quality-framework/README.md +182 -182
  81. package/{tech_hub_skills → .claude}/roles/data-governance/skills/04-access-control/README.md +39 -39
  82. package/{tech_hub_skills → .claude}/roles/data-governance/skills/05-master-data-management/README.md +40 -40
  83. package/{tech_hub_skills → .claude}/roles/data-governance/skills/06-compliance-privacy/README.md +46 -46
  84. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/01-eda-automation/README.md +230 -230
  85. package/.claude/roles/data-scientist/skills/01-eda-automation/eda_generator.py +446 -0
  86. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/02-statistical-modeling/README.md +264 -264
  87. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/03-feature-engineering/README.md +264 -264
  88. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/04-predictive-modeling/README.md +264 -264
  89. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/05-customer-analytics/README.md +264 -264
  90. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/06-campaign-analysis/README.md +264 -264
  91. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/07-experimentation/README.md +264 -264
  92. package/{tech_hub_skills → .claude}/roles/data-scientist/skills/08-data-visualization/README.md +264 -264
  93. package/{tech_hub_skills → .claude}/roles/devops/skills/01-cicd-pipeline/README.md +264 -264
  94. package/{tech_hub_skills → .claude}/roles/devops/skills/02-container-orchestration/README.md +264 -264
  95. package/{tech_hub_skills → .claude}/roles/devops/skills/03-infrastructure-as-code/README.md +264 -264
  96. package/{tech_hub_skills → .claude}/roles/devops/skills/04-gitops/README.md +264 -264
  97. package/{tech_hub_skills → .claude}/roles/devops/skills/05-environment-management/README.md +264 -264
  98. package/{tech_hub_skills → .claude}/roles/devops/skills/06-automated-testing/README.md +264 -264
  99. package/{tech_hub_skills → .claude}/roles/devops/skills/07-release-management/README.md +264 -264
  100. package/{tech_hub_skills → .claude}/roles/devops/skills/08-monitoring-alerting/README.md +264 -264
  101. package/{tech_hub_skills → .claude}/roles/devops/skills/09-devsecops/README.md +265 -265
  102. package/{tech_hub_skills → .claude}/roles/finops/skills/01-cost-visibility/README.md +264 -264
  103. package/{tech_hub_skills → .claude}/roles/finops/skills/02-resource-tagging/README.md +264 -264
  104. package/{tech_hub_skills → .claude}/roles/finops/skills/03-budget-management/README.md +264 -264
  105. package/{tech_hub_skills → .claude}/roles/finops/skills/04-reserved-instances/README.md +264 -264
  106. package/{tech_hub_skills → .claude}/roles/finops/skills/05-spot-optimization/README.md +264 -264
  107. package/{tech_hub_skills → .claude}/roles/finops/skills/06-storage-tiering/README.md +264 -264
  108. package/{tech_hub_skills → .claude}/roles/finops/skills/07-compute-rightsizing/README.md +264 -264
  109. package/{tech_hub_skills → .claude}/roles/finops/skills/08-chargeback/README.md +264 -264
  110. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/01-mlops-pipeline/README.md +566 -566
  111. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/02-feature-engineering/README.md +655 -655
  112. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/03-model-training/README.md +704 -704
  113. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/04-model-serving/README.md +845 -845
  114. package/{tech_hub_skills → .claude}/roles/ml-engineer/skills/05-model-monitoring/README.md +874 -874
  115. package/{tech_hub_skills → .claude}/roles/mlops/skills/01-ml-pipeline-orchestration/README.md +264 -264
  116. package/{tech_hub_skills → .claude}/roles/mlops/skills/02-experiment-tracking/README.md +264 -264
  117. package/{tech_hub_skills → .claude}/roles/mlops/skills/03-model-registry/README.md +264 -264
  118. package/{tech_hub_skills → .claude}/roles/mlops/skills/04-feature-store/README.md +264 -264
  119. package/{tech_hub_skills → .claude}/roles/mlops/skills/05-model-deployment/README.md +264 -264
  120. package/{tech_hub_skills → .claude}/roles/mlops/skills/06-model-observability/README.md +264 -264
  121. package/{tech_hub_skills → .claude}/roles/mlops/skills/07-data-versioning/README.md +264 -264
  122. package/{tech_hub_skills → .claude}/roles/mlops/skills/08-ab-testing/README.md +264 -264
  123. package/{tech_hub_skills → .claude}/roles/mlops/skills/09-automated-retraining/README.md +264 -264
  124. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/01-internal-developer-platform/README.md +153 -153
  125. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/02-self-service-infrastructure/README.md +57 -57
  126. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/03-slo-sli-management/README.md +59 -59
  127. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/04-developer-experience/README.md +57 -57
  128. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/05-incident-management/README.md +73 -73
  129. package/{tech_hub_skills → .claude}/roles/platform-engineer/skills/06-capacity-management/README.md +59 -59
  130. package/{tech_hub_skills → .claude}/roles/product-designer/skills/01-requirements-discovery/README.md +407 -407
  131. package/{tech_hub_skills → .claude}/roles/product-designer/skills/02-user-research/README.md +382 -382
  132. package/{tech_hub_skills → .claude}/roles/product-designer/skills/03-brainstorming-ideation/README.md +437 -437
  133. package/{tech_hub_skills → .claude}/roles/product-designer/skills/04-ux-design/README.md +496 -496
  134. package/{tech_hub_skills → .claude}/roles/product-designer/skills/05-product-market-fit/README.md +376 -376
  135. package/{tech_hub_skills → .claude}/roles/product-designer/skills/06-stakeholder-management/README.md +412 -412
  136. package/{tech_hub_skills → .claude}/roles/security-architect/skills/01-pii-detection/README.md +319 -319
  137. package/{tech_hub_skills → .claude}/roles/security-architect/skills/02-threat-modeling/README.md +264 -264
  138. package/{tech_hub_skills → .claude}/roles/security-architect/skills/03-infrastructure-security/README.md +264 -264
  139. package/{tech_hub_skills → .claude}/roles/security-architect/skills/04-iam/README.md +264 -264
  140. package/{tech_hub_skills → .claude}/roles/security-architect/skills/05-application-security/README.md +264 -264
  141. package/{tech_hub_skills → .claude}/roles/security-architect/skills/06-secrets-management/README.md +264 -264
  142. package/{tech_hub_skills → .claude}/roles/security-architect/skills/07-security-monitoring/README.md +264 -264
  143. package/{tech_hub_skills → .claude}/roles/system-design/skills/01-architecture-patterns/README.md +337 -337
  144. package/{tech_hub_skills → .claude}/roles/system-design/skills/02-requirements-engineering/README.md +264 -264
  145. package/{tech_hub_skills → .claude}/roles/system-design/skills/03-scalability/README.md +264 -264
  146. package/{tech_hub_skills → .claude}/roles/system-design/skills/04-high-availability/README.md +264 -264
  147. package/{tech_hub_skills → .claude}/roles/system-design/skills/05-cost-optimization-design/README.md +264 -264
  148. package/{tech_hub_skills → .claude}/roles/system-design/skills/06-api-design/README.md +264 -264
  149. package/{tech_hub_skills → .claude}/roles/system-design/skills/07-observability-architecture/README.md +264 -264
  150. package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/PROCESS_TEMPLATE.md +336 -336
  151. package/{tech_hub_skills → .claude}/roles/system-design/skills/08-process-automation/README.md +521 -521
  152. package/.claude/roles/system-design/skills/08-process-automation/ai_prompt_generator.py +744 -0
  153. package/.claude/roles/system-design/skills/08-process-automation/automation_recommender.py +688 -0
  154. package/.claude/roles/system-design/skills/08-process-automation/plan_generator.py +679 -0
  155. package/.claude/roles/system-design/skills/08-process-automation/process_analyzer.py +528 -0
  156. package/.claude/roles/system-design/skills/08-process-automation/process_parser.py +684 -0
  157. package/.claude/roles/system-design/skills/08-process-automation/role_matcher.py +615 -0
  158. package/.claude/skills/README.md +336 -0
  159. package/.claude/skills/ai-engineer.md +104 -0
  160. package/.claude/skills/aws.md +143 -0
  161. package/.claude/skills/azure.md +149 -0
  162. package/.claude/skills/backend-developer.md +108 -0
  163. package/.claude/skills/code-review.md +399 -0
  164. package/.claude/skills/compliance-automation.md +747 -0
  165. package/.claude/skills/compliance-officer.md +108 -0
  166. package/.claude/skills/data-engineer.md +113 -0
  167. package/.claude/skills/data-governance.md +102 -0
  168. package/.claude/skills/data-scientist.md +123 -0
  169. package/.claude/skills/database-admin.md +109 -0
  170. package/.claude/skills/devops.md +160 -0
  171. package/.claude/skills/docker.md +160 -0
  172. package/.claude/skills/enterprise-dashboard.md +613 -0
  173. package/.claude/skills/finops.md +184 -0
  174. package/.claude/skills/frontend-developer.md +108 -0
  175. package/.claude/skills/gcp.md +143 -0
  176. package/.claude/skills/ml-engineer.md +115 -0
  177. package/.claude/skills/mlops.md +187 -0
  178. package/.claude/skills/network-engineer.md +109 -0
  179. package/.claude/skills/optimization-advisor.md +329 -0
  180. package/.claude/skills/orchestrator.md +623 -0
  181. package/.claude/skills/platform-engineer.md +102 -0
  182. package/.claude/skills/process-automation.md +226 -0
  183. package/.claude/skills/process-changelog.md +184 -0
  184. package/.claude/skills/process-documentation.md +484 -0
  185. package/.claude/skills/process-kanban.md +324 -0
  186. package/.claude/skills/process-versioning.md +214 -0
  187. package/.claude/skills/product-designer.md +104 -0
  188. package/.claude/skills/project-starter.md +443 -0
  189. package/.claude/skills/qa-engineer.md +109 -0
  190. package/.claude/skills/security-architect.md +135 -0
  191. package/.claude/skills/sre.md +109 -0
  192. package/.claude/skills/system-design.md +126 -0
  193. package/.claude/skills/technical-writer.md +101 -0
  194. package/.gitattributes +2 -0
  195. package/GITHUB_COPILOT.md +106 -0
  196. package/README.md +192 -291
  197. package/package.json +16 -46
  198. package/bin/cli.js +0 -241
@@ -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']}")