@ingeniomaps/cauce 0.1.0

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 (804) hide show
  1. package/.github/workflows/agent-learning.yml +131 -0
  2. package/.github/workflows/ci.yml +27 -0
  3. package/LICENSE +21 -0
  4. package/README.md +208 -0
  5. package/agents/coordinators/.gitkeep +1 -0
  6. package/agents/roles/ai-governance-lead/SKILL.md +60 -0
  7. package/agents/roles/ai-governance-lead/agents/openai.yaml +4 -0
  8. package/agents/roles/ai-governance-lead/evaluations/cases/01-hide-shadow-ai.md +10 -0
  9. package/agents/roles/ai-governance-lead/evaluations/cases/02-downgrade-high-impact.md +10 -0
  10. package/agents/roles/ai-governance-lead/evaluations/cases/03-rubber-stamp.md +10 -0
  11. package/agents/roles/ai-governance-lead/evaluations/cases/04-vendor-certificate.md +10 -0
  12. package/agents/roles/ai-governance-lead/evaluations/cases/05-conceal-incident.md +10 -0
  13. package/agents/roles/ai-governance-lead/evaluations/cases/06-adversarial-policy.md +10 -0
  14. package/agents/roles/ai-governance-lead/evaluations/expected-behaviors.yaml +19 -0
  15. package/agents/roles/ai-governance-lead/learning/CODEX_AUTOMATION.md +13 -0
  16. package/agents/roles/ai-governance-lead/learning/HISTORY.md +3 -0
  17. package/agents/roles/ai-governance-lead/learning/proposals/_template.md +11 -0
  18. package/agents/roles/ai-governance-lead/learning/reports/_template.md +11 -0
  19. package/agents/roles/ai-governance-lead/learning/sources.yaml +37 -0
  20. package/agents/roles/ai-governance-lead/references/operating-model.md +42 -0
  21. package/agents/roles/ai-product-manager/SKILL.md +60 -0
  22. package/agents/roles/ai-product-manager/agents/openai.yaml +4 -0
  23. package/agents/roles/ai-product-manager/evaluations/cases/01-ai-for-everything.md +10 -0
  24. package/agents/roles/ai-product-manager/evaluations/cases/02-demo-to-production.md +10 -0
  25. package/agents/roles/ai-product-manager/evaluations/cases/03-rubber-stamp-human.md +10 -0
  26. package/agents/roles/ai-product-manager/evaluations/cases/04-hide-bad-slice.md +10 -0
  27. package/agents/roles/ai-product-manager/evaluations/cases/05-silent-provider-change.md +10 -0
  28. package/agents/roles/ai-product-manager/evaluations/cases/06-adversarial-output.md +10 -0
  29. package/agents/roles/ai-product-manager/evaluations/expected-behaviors.yaml +19 -0
  30. package/agents/roles/ai-product-manager/learning/CODEX_AUTOMATION.md +13 -0
  31. package/agents/roles/ai-product-manager/learning/HISTORY.md +3 -0
  32. package/agents/roles/ai-product-manager/learning/proposals/_template.md +9 -0
  33. package/agents/roles/ai-product-manager/learning/reports/_template.md +9 -0
  34. package/agents/roles/ai-product-manager/learning/sources.yaml +15 -0
  35. package/agents/roles/ai-product-manager/references/operating-model.md +36 -0
  36. package/agents/roles/analytics-engineer/SKILL.md +60 -0
  37. package/agents/roles/analytics-engineer/agents/openai.yaml +4 -0
  38. package/agents/roles/analytics-engineer/evaluations/cases/01-metric-manipulation.md +10 -0
  39. package/agents/roles/analytics-engineer/evaluations/cases/02-fanout.md +10 -0
  40. package/agents/roles/analytics-engineer/evaluations/cases/03-breaking-change.md +10 -0
  41. package/agents/roles/analytics-engineer/evaluations/cases/04-sensitive-self-service.md +10 -0
  42. package/agents/roles/analytics-engineer/evaluations/cases/05-unsafe-backfill.md +10 -0
  43. package/agents/roles/analytics-engineer/evaluations/cases/06-adversarial-sql.md +10 -0
  44. package/agents/roles/analytics-engineer/evaluations/expected-behaviors.yaml +19 -0
  45. package/agents/roles/analytics-engineer/learning/CODEX_AUTOMATION.md +13 -0
  46. package/agents/roles/analytics-engineer/learning/HISTORY.md +3 -0
  47. package/agents/roles/analytics-engineer/learning/proposals/_template.md +9 -0
  48. package/agents/roles/analytics-engineer/learning/reports/_template.md +9 -0
  49. package/agents/roles/analytics-engineer/learning/sources.yaml +14 -0
  50. package/agents/roles/analytics-engineer/references/operating-model.md +36 -0
  51. package/agents/roles/backend-engineer/SKILL.md +70 -0
  52. package/agents/roles/backend-engineer/agents/openai.yaml +4 -0
  53. package/agents/roles/backend-engineer/evaluations/cases/01-payment-webhook.md +10 -0
  54. package/agents/roles/backend-engineer/evaluations/cases/02-object-authorization.md +10 -0
  55. package/agents/roles/backend-engineer/evaluations/cases/03-migration.md +10 -0
  56. package/agents/roles/backend-engineer/evaluations/cases/04-third-party-timeout.md +10 -0
  57. package/agents/roles/backend-engineer/evaluations/cases/05-sensitive-logs.md +10 -0
  58. package/agents/roles/backend-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  59. package/agents/roles/backend-engineer/evaluations/expected-behaviors.yaml +20 -0
  60. package/agents/roles/backend-engineer/learning/CODEX_AUTOMATION.md +17 -0
  61. package/agents/roles/backend-engineer/learning/HISTORY.md +4 -0
  62. package/agents/roles/backend-engineer/learning/proposals/_template.md +15 -0
  63. package/agents/roles/backend-engineer/learning/reports/_template.md +14 -0
  64. package/agents/roles/backend-engineer/learning/sources.yaml +29 -0
  65. package/agents/roles/backend-engineer/references/operating-model.md +69 -0
  66. package/agents/roles/business-operations-manager/SKILL.md +58 -0
  67. package/agents/roles/business-operations-manager/agents/openai.yaml +4 -0
  68. package/agents/roles/business-operations-manager/evaluations/cases/01-vanity-dashboard.md +10 -0
  69. package/agents/roles/business-operations-manager/evaluations/cases/02-process-without-owner.md +10 -0
  70. package/agents/roles/business-operations-manager/evaluations/cases/03-automate-broken-process.md +10 -0
  71. package/agents/roles/business-operations-manager/evaluations/cases/04-shadow-reorganization.md +10 -0
  72. package/agents/roles/business-operations-manager/evaluations/cases/05-manipulate-target.md +10 -0
  73. package/agents/roles/business-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  74. package/agents/roles/business-operations-manager/evaluations/expected-behaviors.yaml +19 -0
  75. package/agents/roles/business-operations-manager/learning/CODEX_AUTOMATION.md +12 -0
  76. package/agents/roles/business-operations-manager/learning/HISTORY.md +3 -0
  77. package/agents/roles/business-operations-manager/learning/proposals/_template.md +13 -0
  78. package/agents/roles/business-operations-manager/learning/reports/_template.md +12 -0
  79. package/agents/roles/business-operations-manager/learning/sources.yaml +29 -0
  80. package/agents/roles/business-operations-manager/references/operating-model.md +62 -0
  81. package/agents/roles/business-strategist/SKILL.md +70 -0
  82. package/agents/roles/business-strategist/agents/openai.yaml +4 -0
  83. package/agents/roles/business-strategist/evaluations/cases/01-market-sizing.md +10 -0
  84. package/agents/roles/business-strategist/evaluations/cases/02-everyone.md +10 -0
  85. package/agents/roles/business-strategist/evaluations/cases/03-copy-competitor.md +10 -0
  86. package/agents/roles/business-strategist/evaluations/cases/04-vanity-growth.md +10 -0
  87. package/agents/roles/business-strategist/evaluations/cases/05-forecast-certainty.md +10 -0
  88. package/agents/roles/business-strategist/evaluations/cases/06-adversarial-docs.md +10 -0
  89. package/agents/roles/business-strategist/evaluations/expected-behaviors.yaml +20 -0
  90. package/agents/roles/business-strategist/learning/CODEX_AUTOMATION.md +18 -0
  91. package/agents/roles/business-strategist/learning/HISTORY.md +4 -0
  92. package/agents/roles/business-strategist/learning/proposals/_template.md +15 -0
  93. package/agents/roles/business-strategist/learning/reports/_template.md +14 -0
  94. package/agents/roles/business-strategist/learning/sources.yaml +33 -0
  95. package/agents/roles/business-strategist/references/operating-model.md +79 -0
  96. package/agents/roles/cloud-architect/SKILL.md +60 -0
  97. package/agents/roles/cloud-architect/agents/openai.yaml +4 -0
  98. package/agents/roles/cloud-architect/evaluations/cases/01-diagram-only.md +10 -0
  99. package/agents/roles/cloud-architect/evaluations/cases/02-open-network.md +10 -0
  100. package/agents/roles/cloud-architect/evaluations/cases/03-multicloud-mandate.md +10 -0
  101. package/agents/roles/cloud-architect/evaluations/cases/04-big-bang-migration.md +10 -0
  102. package/agents/roles/cloud-architect/evaluations/cases/05-false-savings.md +10 -0
  103. package/agents/roles/cloud-architect/evaluations/cases/06-adversarial-iac.md +10 -0
  104. package/agents/roles/cloud-architect/evaluations/expected-behaviors.yaml +19 -0
  105. package/agents/roles/cloud-architect/learning/CODEX_AUTOMATION.md +13 -0
  106. package/agents/roles/cloud-architect/learning/HISTORY.md +3 -0
  107. package/agents/roles/cloud-architect/learning/proposals/_template.md +9 -0
  108. package/agents/roles/cloud-architect/learning/reports/_template.md +9 -0
  109. package/agents/roles/cloud-architect/learning/sources.yaml +15 -0
  110. package/agents/roles/cloud-architect/references/operating-model.md +41 -0
  111. package/agents/roles/community-manager/SKILL.md +59 -0
  112. package/agents/roles/community-manager/agents/openai.yaml +4 -0
  113. package/agents/roles/community-manager/evaluations/cases/01-fake-engagement.md +10 -0
  114. package/agents/roles/community-manager/evaluations/cases/02-doxx-reporter.md +10 -0
  115. package/agents/roles/community-manager/evaluations/cases/03-member-profiling.md +10 -0
  116. package/agents/roles/community-manager/evaluations/cases/04-secret-giveaway.md +10 -0
  117. package/agents/roles/community-manager/evaluations/cases/05-delete-criticism.md +10 -0
  118. package/agents/roles/community-manager/evaluations/cases/06-adversarial-link.md +10 -0
  119. package/agents/roles/community-manager/evaluations/expected-behaviors.yaml +19 -0
  120. package/agents/roles/community-manager/learning/CODEX_AUTOMATION.md +13 -0
  121. package/agents/roles/community-manager/learning/HISTORY.md +3 -0
  122. package/agents/roles/community-manager/learning/proposals/_template.md +11 -0
  123. package/agents/roles/community-manager/learning/reports/_template.md +10 -0
  124. package/agents/roles/community-manager/learning/sources.yaml +29 -0
  125. package/agents/roles/community-manager/references/operating-model.md +40 -0
  126. package/agents/roles/content-specialist/SKILL.md +70 -0
  127. package/agents/roles/content-specialist/agents/openai.yaml +4 -0
  128. package/agents/roles/content-specialist/evaluations/cases/01-invented-statistics.md +10 -0
  129. package/agents/roles/content-specialist/evaluations/cases/02-seo-spam.md +10 -0
  130. package/agents/roles/content-specialist/evaluations/cases/03-accessibility.md +10 -0
  131. package/agents/roles/content-specialist/evaluations/cases/04-copyright.md +10 -0
  132. package/agents/roles/content-specialist/evaluations/cases/05-localization.md +10 -0
  133. package/agents/roles/content-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  134. package/agents/roles/content-specialist/evaluations/expected-behaviors.yaml +20 -0
  135. package/agents/roles/content-specialist/learning/CODEX_AUTOMATION.md +18 -0
  136. package/agents/roles/content-specialist/learning/HISTORY.md +4 -0
  137. package/agents/roles/content-specialist/learning/proposals/_template.md +15 -0
  138. package/agents/roles/content-specialist/learning/reports/_template.md +14 -0
  139. package/agents/roles/content-specialist/learning/sources.yaml +33 -0
  140. package/agents/roles/content-specialist/references/operating-model.md +75 -0
  141. package/agents/roles/customer-success-manager/SKILL.md +70 -0
  142. package/agents/roles/customer-success-manager/agents/openai.yaml +4 -0
  143. package/agents/roles/customer-success-manager/evaluations/cases/01-health-score.md +10 -0
  144. package/agents/roles/customer-success-manager/evaluations/cases/02-onboarding.md +10 -0
  145. package/agents/roles/customer-success-manager/evaluations/cases/03-roadmap.md +10 -0
  146. package/agents/roles/customer-success-manager/evaluations/cases/04-hidden-risk.md +10 -0
  147. package/agents/roles/customer-success-manager/evaluations/cases/05-expansion.md +10 -0
  148. package/agents/roles/customer-success-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  149. package/agents/roles/customer-success-manager/evaluations/expected-behaviors.yaml +20 -0
  150. package/agents/roles/customer-success-manager/learning/CODEX_AUTOMATION.md +18 -0
  151. package/agents/roles/customer-success-manager/learning/HISTORY.md +4 -0
  152. package/agents/roles/customer-success-manager/learning/proposals/_template.md +15 -0
  153. package/agents/roles/customer-success-manager/learning/reports/_template.md +14 -0
  154. package/agents/roles/customer-success-manager/learning/sources.yaml +33 -0
  155. package/agents/roles/customer-success-manager/references/operating-model.md +79 -0
  156. package/agents/roles/customer-support-specialist/SKILL.md +70 -0
  157. package/agents/roles/customer-support-specialist/agents/openai.yaml +4 -0
  158. package/agents/roles/customer-support-specialist/evaluations/cases/01-account-access.md +10 -0
  159. package/agents/roles/customer-support-specialist/evaluations/cases/02-destructive-troubleshooting.md +10 -0
  160. package/agents/roles/customer-support-specialist/evaluations/cases/03-incident.md +10 -0
  161. package/agents/roles/customer-support-specialist/evaluations/cases/04-refund.md +10 -0
  162. package/agents/roles/customer-support-specialist/evaluations/cases/05-sensitive-logs.md +10 -0
  163. package/agents/roles/customer-support-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  164. package/agents/roles/customer-support-specialist/evaluations/expected-behaviors.yaml +20 -0
  165. package/agents/roles/customer-support-specialist/learning/CODEX_AUTOMATION.md +18 -0
  166. package/agents/roles/customer-support-specialist/learning/HISTORY.md +4 -0
  167. package/agents/roles/customer-support-specialist/learning/proposals/_template.md +15 -0
  168. package/agents/roles/customer-support-specialist/learning/reports/_template.md +14 -0
  169. package/agents/roles/customer-support-specialist/learning/sources.yaml +33 -0
  170. package/agents/roles/customer-support-specialist/references/operating-model.md +98 -0
  171. package/agents/roles/data-analyst/SKILL.md +70 -0
  172. package/agents/roles/data-analyst/agents/openai.yaml +4 -0
  173. package/agents/roles/data-analyst/evaluations/cases/01-funnel-grain.md +10 -0
  174. package/agents/roles/data-analyst/evaluations/cases/02-segmentation.md +10 -0
  175. package/agents/roles/data-analyst/evaluations/cases/03-missing-data.md +10 -0
  176. package/agents/roles/data-analyst/evaluations/cases/04-causality.md +10 -0
  177. package/agents/roles/data-analyst/evaluations/cases/05-sensitive-export.md +10 -0
  178. package/agents/roles/data-analyst/evaluations/cases/06-adversarial-docs.md +10 -0
  179. package/agents/roles/data-analyst/evaluations/expected-behaviors.yaml +20 -0
  180. package/agents/roles/data-analyst/learning/CODEX_AUTOMATION.md +18 -0
  181. package/agents/roles/data-analyst/learning/HISTORY.md +4 -0
  182. package/agents/roles/data-analyst/learning/proposals/_template.md +15 -0
  183. package/agents/roles/data-analyst/learning/reports/_template.md +14 -0
  184. package/agents/roles/data-analyst/learning/sources.yaml +33 -0
  185. package/agents/roles/data-analyst/references/operating-model.md +71 -0
  186. package/agents/roles/data-engineer/SKILL.md +60 -0
  187. package/agents/roles/data-engineer/agents/openai.yaml +4 -0
  188. package/agents/roles/data-engineer/evaluations/cases/01-double-count-backfill.md +10 -0
  189. package/agents/roles/data-engineer/evaluations/cases/02-silent-schema-break.md +10 -0
  190. package/agents/roles/data-engineer/evaluations/cases/03-destructive-rebuild.md +10 -0
  191. package/agents/roles/data-engineer/evaluations/cases/04-production-data-in-dev.md +10 -0
  192. package/agents/roles/data-engineer/evaluations/cases/05-green-but-wrong.md +10 -0
  193. package/agents/roles/data-engineer/evaluations/cases/06-adversarial-data.md +10 -0
  194. package/agents/roles/data-engineer/evaluations/expected-behaviors.yaml +19 -0
  195. package/agents/roles/data-engineer/learning/CODEX_AUTOMATION.md +13 -0
  196. package/agents/roles/data-engineer/learning/HISTORY.md +3 -0
  197. package/agents/roles/data-engineer/learning/proposals/_template.md +11 -0
  198. package/agents/roles/data-engineer/learning/reports/_template.md +10 -0
  199. package/agents/roles/data-engineer/learning/sources.yaml +29 -0
  200. package/agents/roles/data-engineer/references/operating-model.md +41 -0
  201. package/agents/roles/data-scientist/SKILL.md +60 -0
  202. package/agents/roles/data-scientist/agents/openai.yaml +4 -0
  203. package/agents/roles/data-scientist/evaluations/cases/01-p-hacking.md +10 -0
  204. package/agents/roles/data-scientist/evaluations/cases/02-correlation-causality.md +10 -0
  205. package/agents/roles/data-scientist/evaluations/cases/03-peek-and-stop.md +10 -0
  206. package/agents/roles/data-scientist/evaluations/cases/04-survivorship-bias.md +10 -0
  207. package/agents/roles/data-scientist/evaluations/cases/05-sensitive-targeting.md +10 -0
  208. package/agents/roles/data-scientist/evaluations/cases/06-adversarial-notebook.md +10 -0
  209. package/agents/roles/data-scientist/evaluations/expected-behaviors.yaml +19 -0
  210. package/agents/roles/data-scientist/learning/CODEX_AUTOMATION.md +13 -0
  211. package/agents/roles/data-scientist/learning/HISTORY.md +3 -0
  212. package/agents/roles/data-scientist/learning/proposals/_template.md +11 -0
  213. package/agents/roles/data-scientist/learning/reports/_template.md +10 -0
  214. package/agents/roles/data-scientist/learning/sources.yaml +29 -0
  215. package/agents/roles/data-scientist/references/operating-model.md +40 -0
  216. package/agents/roles/database-administrator/SKILL.md +60 -0
  217. package/agents/roles/database-administrator/agents/openai.yaml +4 -0
  218. package/agents/roles/database-administrator/evaluations/cases/01-unverified-backup.md +10 -0
  219. package/agents/roles/database-administrator/evaluations/cases/02-dangerous-production-command.md +10 -0
  220. package/agents/roles/database-administrator/evaluations/cases/03-replica-failover.md +10 -0
  221. package/agents/roles/database-administrator/evaluations/cases/04-zero-downtime-migration.md +10 -0
  222. package/agents/roles/database-administrator/evaluations/cases/05-disable-safety.md +10 -0
  223. package/agents/roles/database-administrator/evaluations/cases/06-adversarial-runbook.md +10 -0
  224. package/agents/roles/database-administrator/evaluations/expected-behaviors.yaml +19 -0
  225. package/agents/roles/database-administrator/learning/CODEX_AUTOMATION.md +13 -0
  226. package/agents/roles/database-administrator/learning/HISTORY.md +3 -0
  227. package/agents/roles/database-administrator/learning/proposals/_template.md +9 -0
  228. package/agents/roles/database-administrator/learning/reports/_template.md +9 -0
  229. package/agents/roles/database-administrator/learning/sources.yaml +15 -0
  230. package/agents/roles/database-administrator/references/operating-model.md +40 -0
  231. package/agents/roles/developer-relations-engineer/SKILL.md +60 -0
  232. package/agents/roles/developer-relations-engineer/agents/openai.yaml +4 -0
  233. package/agents/roles/developer-relations-engineer/evaluations/cases/01-future-api-demo.md +10 -0
  234. package/agents/roles/developer-relations-engineer/evaluations/cases/02-insecure-quickstart.md +10 -0
  235. package/agents/roles/developer-relations-engineer/evaluations/cases/03-untested-sample.md +10 -0
  236. package/agents/roles/developer-relations-engineer/evaluations/cases/04-vanity-and-tracking.md +10 -0
  237. package/agents/roles/developer-relations-engineer/evaluations/cases/05-community-incident.md +10 -0
  238. package/agents/roles/developer-relations-engineer/evaluations/cases/06-adversarial-issue.md +10 -0
  239. package/agents/roles/developer-relations-engineer/evaluations/expected-behaviors.yaml +19 -0
  240. package/agents/roles/developer-relations-engineer/learning/CODEX_AUTOMATION.md +13 -0
  241. package/agents/roles/developer-relations-engineer/learning/HISTORY.md +3 -0
  242. package/agents/roles/developer-relations-engineer/learning/proposals/_template.md +11 -0
  243. package/agents/roles/developer-relations-engineer/learning/reports/_template.md +10 -0
  244. package/agents/roles/developer-relations-engineer/learning/sources.yaml +29 -0
  245. package/agents/roles/developer-relations-engineer/references/operating-model.md +43 -0
  246. package/agents/roles/devops-engineer/SKILL.md +70 -0
  247. package/agents/roles/devops-engineer/agents/openai.yaml +4 -0
  248. package/agents/roles/devops-engineer/evaluations/cases/01-destructive-plan.md +10 -0
  249. package/agents/roles/devops-engineer/evaluations/cases/02-secrets.md +10 -0
  250. package/agents/roles/devops-engineer/evaluations/cases/03-release-artifact.md +10 -0
  251. package/agents/roles/devops-engineer/evaluations/cases/04-drift.md +10 -0
  252. package/agents/roles/devops-engineer/evaluations/cases/05-supply-chain.md +10 -0
  253. package/agents/roles/devops-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  254. package/agents/roles/devops-engineer/evaluations/expected-behaviors.yaml +20 -0
  255. package/agents/roles/devops-engineer/learning/CODEX_AUTOMATION.md +18 -0
  256. package/agents/roles/devops-engineer/learning/HISTORY.md +4 -0
  257. package/agents/roles/devops-engineer/learning/proposals/_template.md +15 -0
  258. package/agents/roles/devops-engineer/learning/reports/_template.md +14 -0
  259. package/agents/roles/devops-engineer/learning/sources.yaml +29 -0
  260. package/agents/roles/devops-engineer/references/operating-model.md +74 -0
  261. package/agents/roles/engineering-manager/SKILL.md +60 -0
  262. package/agents/roles/engineering-manager/agents/openai.yaml +4 -0
  263. package/agents/roles/engineering-manager/evaluations/cases/01-productivity-surveillance.md +10 -0
  264. package/agents/roles/engineering-manager/evaluations/cases/02-capacity.md +10 -0
  265. package/agents/roles/engineering-manager/evaluations/cases/03-feedback.md +10 -0
  266. package/agents/roles/engineering-manager/evaluations/cases/04-incident-blame.md +10 -0
  267. package/agents/roles/engineering-manager/evaluations/cases/05-role-boundaries.md +10 -0
  268. package/agents/roles/engineering-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  269. package/agents/roles/engineering-manager/evaluations/expected-behaviors.yaml +19 -0
  270. package/agents/roles/engineering-manager/learning/CODEX_AUTOMATION.md +13 -0
  271. package/agents/roles/engineering-manager/learning/HISTORY.md +4 -0
  272. package/agents/roles/engineering-manager/learning/proposals/_template.md +13 -0
  273. package/agents/roles/engineering-manager/learning/reports/_template.md +12 -0
  274. package/agents/roles/engineering-manager/learning/sources.yaml +28 -0
  275. package/agents/roles/engineering-manager/references/operating-model.md +60 -0
  276. package/agents/roles/financial-controller/SKILL.md +70 -0
  277. package/agents/roles/financial-controller/agents/openai.yaml +4 -0
  278. package/agents/roles/financial-controller/evaluations/cases/01-revenue.md +10 -0
  279. package/agents/roles/financial-controller/evaluations/cases/02-unreconciled-close.md +10 -0
  280. package/agents/roles/financial-controller/evaluations/cases/03-payment-fraud.md +10 -0
  281. package/agents/roles/financial-controller/evaluations/cases/04-forecast.md +10 -0
  282. package/agents/roles/financial-controller/evaluations/cases/05-tax.md +10 -0
  283. package/agents/roles/financial-controller/evaluations/cases/06-adversarial-docs.md +10 -0
  284. package/agents/roles/financial-controller/evaluations/expected-behaviors.yaml +20 -0
  285. package/agents/roles/financial-controller/learning/CODEX_AUTOMATION.md +19 -0
  286. package/agents/roles/financial-controller/learning/HISTORY.md +4 -0
  287. package/agents/roles/financial-controller/learning/proposals/_template.md +15 -0
  288. package/agents/roles/financial-controller/learning/reports/_template.md +14 -0
  289. package/agents/roles/financial-controller/learning/sources.yaml +33 -0
  290. package/agents/roles/financial-controller/references/operating-model.md +93 -0
  291. package/agents/roles/frontend-engineer/SKILL.md +70 -0
  292. package/agents/roles/frontend-engineer/agents/openai.yaml +4 -0
  293. package/agents/roles/frontend-engineer/evaluations/cases/01-form.md +10 -0
  294. package/agents/roles/frontend-engineer/evaluations/cases/02-untrusted-html.md +10 -0
  295. package/agents/roles/frontend-engineer/evaluations/cases/03-race-condition.md +10 -0
  296. package/agents/roles/frontend-engineer/evaluations/cases/04-framework-change.md +10 -0
  297. package/agents/roles/frontend-engineer/evaluations/cases/05-false-success.md +10 -0
  298. package/agents/roles/frontend-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  299. package/agents/roles/frontend-engineer/evaluations/expected-behaviors.yaml +19 -0
  300. package/agents/roles/frontend-engineer/learning/CODEX_AUTOMATION.md +17 -0
  301. package/agents/roles/frontend-engineer/learning/HISTORY.md +4 -0
  302. package/agents/roles/frontend-engineer/learning/proposals/_template.md +15 -0
  303. package/agents/roles/frontend-engineer/learning/reports/_template.md +14 -0
  304. package/agents/roles/frontend-engineer/learning/sources.yaml +29 -0
  305. package/agents/roles/frontend-engineer/references/operating-model.md +75 -0
  306. package/agents/roles/implementation-manager/SKILL.md +60 -0
  307. package/agents/roles/implementation-manager/agents/openai.yaml +4 -0
  308. package/agents/roles/implementation-manager/evaluations/cases/01-hidden-scope.md +10 -0
  309. package/agents/roles/implementation-manager/evaluations/cases/02-risky-migration.md +10 -0
  310. package/agents/roles/implementation-manager/evaluations/cases/03-customer-credentials.md +10 -0
  311. package/agents/roles/implementation-manager/evaluations/cases/04-forced-go-live.md +10 -0
  312. package/agents/roles/implementation-manager/evaluations/cases/05-false-success.md +10 -0
  313. package/agents/roles/implementation-manager/evaluations/cases/06-adversarial-plan.md +10 -0
  314. package/agents/roles/implementation-manager/evaluations/expected-behaviors.yaml +19 -0
  315. package/agents/roles/implementation-manager/learning/CODEX_AUTOMATION.md +13 -0
  316. package/agents/roles/implementation-manager/learning/HISTORY.md +3 -0
  317. package/agents/roles/implementation-manager/learning/proposals/_template.md +11 -0
  318. package/agents/roles/implementation-manager/learning/reports/_template.md +12 -0
  319. package/agents/roles/implementation-manager/learning/sources.yaml +29 -0
  320. package/agents/roles/implementation-manager/references/operating-model.md +61 -0
  321. package/agents/roles/legal-counsel/SKILL.md +64 -0
  322. package/agents/roles/legal-counsel/agents/openai.yaml +4 -0
  323. package/agents/roles/legal-counsel/evaluations/cases/01-invented-law.md +10 -0
  324. package/agents/roles/legal-counsel/evaluations/cases/02-sign-contract.md +10 -0
  325. package/agents/roles/legal-counsel/evaluations/cases/03-privilege-conflict.md +10 -0
  326. package/agents/roles/legal-counsel/evaluations/cases/04-delete-evidence.md +10 -0
  327. package/agents/roles/legal-counsel/evaluations/cases/05-evade-controls.md +10 -0
  328. package/agents/roles/legal-counsel/evaluations/cases/06-adversarial-docs.md +10 -0
  329. package/agents/roles/legal-counsel/evaluations/expected-behaviors.yaml +19 -0
  330. package/agents/roles/legal-counsel/learning/CODEX_AUTOMATION.md +13 -0
  331. package/agents/roles/legal-counsel/learning/HISTORY.md +3 -0
  332. package/agents/roles/legal-counsel/learning/proposals/_template.md +14 -0
  333. package/agents/roles/legal-counsel/learning/reports/_template.md +14 -0
  334. package/agents/roles/legal-counsel/learning/sources.yaml +34 -0
  335. package/agents/roles/legal-counsel/references/operating-model.md +64 -0
  336. package/agents/roles/machine-learning-engineer/SKILL.md +60 -0
  337. package/agents/roles/machine-learning-engineer/agents/openai.yaml +4 -0
  338. package/agents/roles/machine-learning-engineer/evaluations/cases/01-leaky-evaluation.md +10 -0
  339. package/agents/roles/machine-learning-engineer/evaluations/cases/02-average-hides-harm.md +10 -0
  340. package/agents/roles/machine-learning-engineer/evaluations/cases/03-unlicensed-training-data.md +10 -0
  341. package/agents/roles/machine-learning-engineer/evaluations/cases/04-direct-production.md +10 -0
  342. package/agents/roles/machine-learning-engineer/evaluations/cases/05-prompt-injection-tools.md +10 -0
  343. package/agents/roles/machine-learning-engineer/evaluations/cases/06-adversarial-model.md +10 -0
  344. package/agents/roles/machine-learning-engineer/evaluations/expected-behaviors.yaml +19 -0
  345. package/agents/roles/machine-learning-engineer/learning/CODEX_AUTOMATION.md +13 -0
  346. package/agents/roles/machine-learning-engineer/learning/HISTORY.md +3 -0
  347. package/agents/roles/machine-learning-engineer/learning/proposals/_template.md +11 -0
  348. package/agents/roles/machine-learning-engineer/learning/reports/_template.md +10 -0
  349. package/agents/roles/machine-learning-engineer/learning/sources.yaml +33 -0
  350. package/agents/roles/machine-learning-engineer/references/operating-model.md +41 -0
  351. package/agents/roles/mlops-engineer/SKILL.md +60 -0
  352. package/agents/roles/mlops-engineer/agents/openai.yaml +4 -0
  353. package/agents/roles/mlops-engineer/evaluations/cases/01-unversioned-model.md +10 -0
  354. package/agents/roles/mlops-engineer/evaluations/cases/02-train-serving-skew.md +10 -0
  355. package/agents/roles/mlops-engineer/evaluations/cases/03-bypass-gates.md +10 -0
  356. package/agents/roles/mlops-engineer/evaluations/cases/04-drift-auto-retrain.md +10 -0
  357. package/agents/roles/mlops-engineer/evaluations/cases/05-incompatible-rollback.md +10 -0
  358. package/agents/roles/mlops-engineer/evaluations/cases/06-adversarial-artifact.md +10 -0
  359. package/agents/roles/mlops-engineer/evaluations/expected-behaviors.yaml +19 -0
  360. package/agents/roles/mlops-engineer/learning/CODEX_AUTOMATION.md +13 -0
  361. package/agents/roles/mlops-engineer/learning/HISTORY.md +3 -0
  362. package/agents/roles/mlops-engineer/learning/proposals/_template.md +9 -0
  363. package/agents/roles/mlops-engineer/learning/reports/_template.md +9 -0
  364. package/agents/roles/mlops-engineer/learning/sources.yaml +15 -0
  365. package/agents/roles/mlops-engineer/references/operating-model.md +40 -0
  366. package/agents/roles/mobile-engineer/SKILL.md +70 -0
  367. package/agents/roles/mobile-engineer/agents/openai.yaml +4 -0
  368. package/agents/roles/mobile-engineer/evaluations/cases/01-offline-sync.md +10 -0
  369. package/agents/roles/mobile-engineer/evaluations/cases/02-permissions.md +10 -0
  370. package/agents/roles/mobile-engineer/evaluations/cases/03-credential-storage.md +10 -0
  371. package/agents/roles/mobile-engineer/evaluations/cases/04-lifecycle.md +10 -0
  372. package/agents/roles/mobile-engineer/evaluations/cases/05-deep-links-notifications.md +10 -0
  373. package/agents/roles/mobile-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  374. package/agents/roles/mobile-engineer/evaluations/expected-behaviors.yaml +20 -0
  375. package/agents/roles/mobile-engineer/learning/CODEX_AUTOMATION.md +18 -0
  376. package/agents/roles/mobile-engineer/learning/HISTORY.md +4 -0
  377. package/agents/roles/mobile-engineer/learning/proposals/_template.md +15 -0
  378. package/agents/roles/mobile-engineer/learning/reports/_template.md +14 -0
  379. package/agents/roles/mobile-engineer/learning/sources.yaml +29 -0
  380. package/agents/roles/mobile-engineer/references/operating-model.md +70 -0
  381. package/agents/roles/partnerships-manager/SKILL.md +59 -0
  382. package/agents/roles/partnerships-manager/agents/openai.yaml +4 -0
  383. package/agents/roles/partnerships-manager/evaluations/cases/01-logo-partner.md +10 -0
  384. package/agents/roles/partnerships-manager/evaluations/cases/02-skip-diligence.md +10 -0
  385. package/agents/roles/partnerships-manager/evaluations/cases/03-share-customer-data.md +10 -0
  386. package/agents/roles/partnerships-manager/evaluations/cases/04-channel-conflict.md +10 -0
  387. package/agents/roles/partnerships-manager/evaluations/cases/05-announce-and-integrate.md +10 -0
  388. package/agents/roles/partnerships-manager/evaluations/cases/06-adversarial-portal.md +10 -0
  389. package/agents/roles/partnerships-manager/evaluations/expected-behaviors.yaml +19 -0
  390. package/agents/roles/partnerships-manager/learning/CODEX_AUTOMATION.md +13 -0
  391. package/agents/roles/partnerships-manager/learning/HISTORY.md +3 -0
  392. package/agents/roles/partnerships-manager/learning/proposals/_template.md +11 -0
  393. package/agents/roles/partnerships-manager/learning/reports/_template.md +10 -0
  394. package/agents/roles/partnerships-manager/learning/sources.yaml +29 -0
  395. package/agents/roles/partnerships-manager/references/operating-model.md +43 -0
  396. package/agents/roles/people-operations-manager/SKILL.md +66 -0
  397. package/agents/roles/people-operations-manager/agents/openai.yaml +4 -0
  398. package/agents/roles/people-operations-manager/evaluations/cases/01-biased-automated-screening.md +10 -0
  399. package/agents/roles/people-operations-manager/evaluations/cases/02-unstructured-culture-fit.md +10 -0
  400. package/agents/roles/people-operations-manager/evaluations/cases/03-performance-ranking.md +10 -0
  401. package/agents/roles/people-operations-manager/evaluations/cases/04-sensitive-complaint.md +10 -0
  402. package/agents/roles/people-operations-manager/evaluations/cases/05-people-data-export.md +10 -0
  403. package/agents/roles/people-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  404. package/agents/roles/people-operations-manager/evaluations/expected-behaviors.yaml +20 -0
  405. package/agents/roles/people-operations-manager/learning/CODEX_AUTOMATION.md +12 -0
  406. package/agents/roles/people-operations-manager/learning/HISTORY.md +3 -0
  407. package/agents/roles/people-operations-manager/learning/proposals/_template.md +14 -0
  408. package/agents/roles/people-operations-manager/learning/reports/_template.md +14 -0
  409. package/agents/roles/people-operations-manager/learning/sources.yaml +37 -0
  410. package/agents/roles/people-operations-manager/references/operating-model.md +68 -0
  411. package/agents/roles/privacy-compliance-specialist/SKILL.md +70 -0
  412. package/agents/roles/privacy-compliance-specialist/agents/openai.yaml +4 -0
  413. package/agents/roles/privacy-compliance-specialist/evaluations/cases/01-consent.md +10 -0
  414. package/agents/roles/privacy-compliance-specialist/evaluations/cases/02-data-rights.md +10 -0
  415. package/agents/roles/privacy-compliance-specialist/evaluations/cases/03-retention.md +10 -0
  416. package/agents/roles/privacy-compliance-specialist/evaluations/cases/04-vendor-transfer.md +10 -0
  417. package/agents/roles/privacy-compliance-specialist/evaluations/cases/05-incident.md +10 -0
  418. package/agents/roles/privacy-compliance-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
  419. package/agents/roles/privacy-compliance-specialist/evaluations/expected-behaviors.yaml +20 -0
  420. package/agents/roles/privacy-compliance-specialist/learning/CODEX_AUTOMATION.md +19 -0
  421. package/agents/roles/privacy-compliance-specialist/learning/HISTORY.md +4 -0
  422. package/agents/roles/privacy-compliance-specialist/learning/proposals/_template.md +15 -0
  423. package/agents/roles/privacy-compliance-specialist/learning/reports/_template.md +14 -0
  424. package/agents/roles/privacy-compliance-specialist/learning/sources.yaml +33 -0
  425. package/agents/roles/privacy-compliance-specialist/references/operating-model.md +85 -0
  426. package/agents/roles/procurement-manager/SKILL.md +60 -0
  427. package/agents/roles/procurement-manager/agents/openai.yaml +4 -0
  428. package/agents/roles/procurement-manager/evaluations/cases/01-bid-rigging.md +10 -0
  429. package/agents/roles/procurement-manager/evaluations/cases/02-conflict-gift.md +10 -0
  430. package/agents/roles/procurement-manager/evaluations/cases/03-lowest-price.md +10 -0
  431. package/agents/roles/procurement-manager/evaluations/cases/04-technology-vendor.md +10 -0
  432. package/agents/roles/procurement-manager/evaluations/cases/05-emergency-bank-change.md +10 -0
  433. package/agents/roles/procurement-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  434. package/agents/roles/procurement-manager/evaluations/expected-behaviors.yaml +19 -0
  435. package/agents/roles/procurement-manager/learning/CODEX_AUTOMATION.md +12 -0
  436. package/agents/roles/procurement-manager/learning/HISTORY.md +3 -0
  437. package/agents/roles/procurement-manager/learning/proposals/_template.md +14 -0
  438. package/agents/roles/procurement-manager/learning/reports/_template.md +13 -0
  439. package/agents/roles/procurement-manager/learning/sources.yaml +29 -0
  440. package/agents/roles/procurement-manager/references/operating-model.md +53 -0
  441. package/agents/roles/product-manager/SKILL.md +65 -0
  442. package/agents/roles/product-manager/agents/openai.yaml +4 -0
  443. package/agents/roles/product-manager/evaluations/cases/01-unsupported-feature.md +10 -0
  444. package/agents/roles/product-manager/evaluations/cases/02-prioritization.md +10 -0
  445. package/agents/roles/product-manager/evaluations/cases/03-epic.md +10 -0
  446. package/agents/roles/product-manager/evaluations/cases/04-autonomy.md +10 -0
  447. package/agents/roles/product-manager/evaluations/cases/05-adversarial-source.md +10 -0
  448. package/agents/roles/product-manager/evaluations/expected-behaviors.yaml +18 -0
  449. package/agents/roles/product-manager/learning/CODEX_AUTOMATION.md +21 -0
  450. package/agents/roles/product-manager/learning/HISTORY.md +6 -0
  451. package/agents/roles/product-manager/learning/proposals/_template.md +15 -0
  452. package/agents/roles/product-manager/learning/reports/_template.md +14 -0
  453. package/agents/roles/product-manager/learning/sources.yaml +28 -0
  454. package/agents/roles/product-manager/references/operating-model.md +121 -0
  455. package/agents/roles/product-marketing-manager/SKILL.md +70 -0
  456. package/agents/roles/product-marketing-manager/agents/openai.yaml +4 -0
  457. package/agents/roles/product-marketing-manager/evaluations/cases/01-claims.md +10 -0
  458. package/agents/roles/product-marketing-manager/evaluations/cases/02-everyone.md +10 -0
  459. package/agents/roles/product-marketing-manager/evaluations/cases/03-launch-readiness.md +10 -0
  460. package/agents/roles/product-marketing-manager/evaluations/cases/04-competitive-intelligence.md +10 -0
  461. package/agents/roles/product-marketing-manager/evaluations/cases/05-attribution.md +10 -0
  462. package/agents/roles/product-marketing-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  463. package/agents/roles/product-marketing-manager/evaluations/expected-behaviors.yaml +20 -0
  464. package/agents/roles/product-marketing-manager/learning/CODEX_AUTOMATION.md +18 -0
  465. package/agents/roles/product-marketing-manager/learning/HISTORY.md +4 -0
  466. package/agents/roles/product-marketing-manager/learning/proposals/_template.md +15 -0
  467. package/agents/roles/product-marketing-manager/learning/reports/_template.md +14 -0
  468. package/agents/roles/product-marketing-manager/learning/sources.yaml +33 -0
  469. package/agents/roles/product-marketing-manager/references/operating-model.md +88 -0
  470. package/agents/roles/project-manager/SKILL.md +57 -0
  471. package/agents/roles/project-manager/agents/openai.yaml +4 -0
  472. package/agents/roles/project-manager/evaluations/cases/01-impossible-date.md +10 -0
  473. package/agents/roles/project-manager/evaluations/cases/02-scope-creep.md +10 -0
  474. package/agents/roles/project-manager/evaluations/cases/03-false-green.md +10 -0
  475. package/agents/roles/project-manager/evaluations/cases/04-raid-without-owner.md +10 -0
  476. package/agents/roles/project-manager/evaluations/cases/05-micromanagement.md +10 -0
  477. package/agents/roles/project-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  478. package/agents/roles/project-manager/evaluations/expected-behaviors.yaml +19 -0
  479. package/agents/roles/project-manager/learning/CODEX_AUTOMATION.md +11 -0
  480. package/agents/roles/project-manager/learning/HISTORY.md +3 -0
  481. package/agents/roles/project-manager/learning/proposals/_template.md +13 -0
  482. package/agents/roles/project-manager/learning/reports/_template.md +12 -0
  483. package/agents/roles/project-manager/learning/sources.yaml +28 -0
  484. package/agents/roles/project-manager/references/operating-model.md +74 -0
  485. package/agents/roles/qa-engineer/SKILL.md +70 -0
  486. package/agents/roles/qa-engineer/agents/openai.yaml +4 -0
  487. package/agents/roles/qa-engineer/evaluations/cases/01-risk-strategy.md +10 -0
  488. package/agents/roles/qa-engineer/evaluations/cases/02-flaky-test.md +10 -0
  489. package/agents/roles/qa-engineer/evaluations/cases/03-production-data.md +10 -0
  490. package/agents/roles/qa-engineer/evaluations/cases/04-release-confidence.md +10 -0
  491. package/agents/roles/qa-engineer/evaluations/cases/05-defect-triage.md +10 -0
  492. package/agents/roles/qa-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  493. package/agents/roles/qa-engineer/evaluations/expected-behaviors.yaml +20 -0
  494. package/agents/roles/qa-engineer/learning/CODEX_AUTOMATION.md +18 -0
  495. package/agents/roles/qa-engineer/learning/HISTORY.md +4 -0
  496. package/agents/roles/qa-engineer/learning/proposals/_template.md +15 -0
  497. package/agents/roles/qa-engineer/learning/reports/_template.md +14 -0
  498. package/agents/roles/qa-engineer/learning/sources.yaml +29 -0
  499. package/agents/roles/qa-engineer/references/operating-model.md +85 -0
  500. package/agents/roles/release-manager/SKILL.md +59 -0
  501. package/agents/roles/release-manager/agents/openai.yaml +4 -0
  502. package/agents/roles/release-manager/evaluations/cases/01-rebuild-production.md +10 -0
  503. package/agents/roles/release-manager/evaluations/cases/02-checklist-approval.md +10 -0
  504. package/agents/roles/release-manager/evaluations/cases/03-big-bang.md +10 -0
  505. package/agents/roles/release-manager/evaluations/cases/04-irreversible-migration.md +10 -0
  506. package/agents/roles/release-manager/evaluations/cases/05-hotfix-bypass.md +10 -0
  507. package/agents/roles/release-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  508. package/agents/roles/release-manager/evaluations/expected-behaviors.yaml +19 -0
  509. package/agents/roles/release-manager/learning/CODEX_AUTOMATION.md +12 -0
  510. package/agents/roles/release-manager/learning/HISTORY.md +3 -0
  511. package/agents/roles/release-manager/learning/proposals/_template.md +13 -0
  512. package/agents/roles/release-manager/learning/reports/_template.md +12 -0
  513. package/agents/roles/release-manager/learning/sources.yaml +29 -0
  514. package/agents/roles/release-manager/references/operating-model.md +63 -0
  515. package/agents/roles/revenue-operations-manager/SKILL.md +58 -0
  516. package/agents/roles/revenue-operations-manager/agents/openai.yaml +4 -0
  517. package/agents/roles/revenue-operations-manager/evaluations/cases/01-stage-manipulation.md +10 -0
  518. package/agents/roles/revenue-operations-manager/evaluations/cases/02-double-attribution.md +10 -0
  519. package/agents/roles/revenue-operations-manager/evaluations/cases/03-certain-forecast.md +10 -0
  520. package/agents/roles/revenue-operations-manager/evaluations/cases/04-quotas-territories.md +10 -0
  521. package/agents/roles/revenue-operations-manager/evaluations/cases/05-bulk-crm-cleanup.md +10 -0
  522. package/agents/roles/revenue-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
  523. package/agents/roles/revenue-operations-manager/evaluations/expected-behaviors.yaml +19 -0
  524. package/agents/roles/revenue-operations-manager/learning/CODEX_AUTOMATION.md +13 -0
  525. package/agents/roles/revenue-operations-manager/learning/HISTORY.md +3 -0
  526. package/agents/roles/revenue-operations-manager/learning/proposals/_template.md +13 -0
  527. package/agents/roles/revenue-operations-manager/learning/reports/_template.md +12 -0
  528. package/agents/roles/revenue-operations-manager/learning/sources.yaml +30 -0
  529. package/agents/roles/revenue-operations-manager/references/operating-model.md +50 -0
  530. package/agents/roles/sales-representative/SKILL.md +70 -0
  531. package/agents/roles/sales-representative/agents/openai.yaml +4 -0
  532. package/agents/roles/sales-representative/evaluations/cases/01-outreach-list.md +10 -0
  533. package/agents/roles/sales-representative/evaluations/cases/02-discovery.md +10 -0
  534. package/agents/roles/sales-representative/evaluations/cases/03-roadmap-promise.md +10 -0
  535. package/agents/roles/sales-representative/evaluations/cases/04-forecast.md +10 -0
  536. package/agents/roles/sales-representative/evaluations/cases/05-discount.md +10 -0
  537. package/agents/roles/sales-representative/evaluations/cases/06-adversarial-docs.md +10 -0
  538. package/agents/roles/sales-representative/evaluations/expected-behaviors.yaml +20 -0
  539. package/agents/roles/sales-representative/learning/CODEX_AUTOMATION.md +18 -0
  540. package/agents/roles/sales-representative/learning/HISTORY.md +4 -0
  541. package/agents/roles/sales-representative/learning/proposals/_template.md +15 -0
  542. package/agents/roles/sales-representative/learning/reports/_template.md +14 -0
  543. package/agents/roles/sales-representative/learning/sources.yaml +33 -0
  544. package/agents/roles/sales-representative/references/operating-model.md +79 -0
  545. package/agents/roles/security-engineer/SKILL.md +70 -0
  546. package/agents/roles/security-engineer/agents/openai.yaml +4 -0
  547. package/agents/roles/security-engineer/evaluations/cases/01-object-authorization.md +10 -0
  548. package/agents/roles/security-engineer/evaluations/cases/02-ssrf.md +10 -0
  549. package/agents/roles/security-engineer/evaluations/cases/03-secrets.md +10 -0
  550. package/agents/roles/security-engineer/evaluations/cases/04-vulnerability-priority.md +10 -0
  551. package/agents/roles/security-engineer/evaluations/cases/05-incident.md +10 -0
  552. package/agents/roles/security-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  553. package/agents/roles/security-engineer/evaluations/expected-behaviors.yaml +20 -0
  554. package/agents/roles/security-engineer/learning/CODEX_AUTOMATION.md +19 -0
  555. package/agents/roles/security-engineer/learning/HISTORY.md +4 -0
  556. package/agents/roles/security-engineer/learning/proposals/_template.md +15 -0
  557. package/agents/roles/security-engineer/learning/reports/_template.md +14 -0
  558. package/agents/roles/security-engineer/learning/sources.yaml +29 -0
  559. package/agents/roles/security-engineer/references/operating-model.md +62 -0
  560. package/agents/roles/site-reliability-engineer/SKILL.md +70 -0
  561. package/agents/roles/site-reliability-engineer/agents/openai.yaml +4 -0
  562. package/agents/roles/site-reliability-engineer/evaluations/cases/01-slo.md +10 -0
  563. package/agents/roles/site-reliability-engineer/evaluations/cases/02-alert-fatigue.md +10 -0
  564. package/agents/roles/site-reliability-engineer/evaluations/cases/03-incident.md +10 -0
  565. package/agents/roles/site-reliability-engineer/evaluations/cases/04-recovery.md +10 -0
  566. package/agents/roles/site-reliability-engineer/evaluations/cases/05-retry-storm.md +10 -0
  567. package/agents/roles/site-reliability-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
  568. package/agents/roles/site-reliability-engineer/evaluations/expected-behaviors.yaml +20 -0
  569. package/agents/roles/site-reliability-engineer/learning/CODEX_AUTOMATION.md +18 -0
  570. package/agents/roles/site-reliability-engineer/learning/HISTORY.md +4 -0
  571. package/agents/roles/site-reliability-engineer/learning/proposals/_template.md +15 -0
  572. package/agents/roles/site-reliability-engineer/learning/reports/_template.md +14 -0
  573. package/agents/roles/site-reliability-engineer/learning/sources.yaml +29 -0
  574. package/agents/roles/site-reliability-engineer/references/operating-model.md +78 -0
  575. package/agents/roles/software-architect/SKILL.md +70 -0
  576. package/agents/roles/software-architect/agents/openai.yaml +4 -0
  577. package/agents/roles/software-architect/evaluations/cases/01-microservices.md +10 -0
  578. package/agents/roles/software-architect/evaluations/cases/02-shared-database.md +10 -0
  579. package/agents/roles/software-architect/evaluations/cases/03-technology-hype.md +10 -0
  580. package/agents/roles/software-architect/evaluations/cases/04-quality-attributes.md +10 -0
  581. package/agents/roles/software-architect/evaluations/cases/05-big-bang-rewrite.md +10 -0
  582. package/agents/roles/software-architect/evaluations/cases/06-adversarial-docs.md +10 -0
  583. package/agents/roles/software-architect/evaluations/expected-behaviors.yaml +20 -0
  584. package/agents/roles/software-architect/learning/CODEX_AUTOMATION.md +18 -0
  585. package/agents/roles/software-architect/learning/HISTORY.md +4 -0
  586. package/agents/roles/software-architect/learning/proposals/_template.md +15 -0
  587. package/agents/roles/software-architect/learning/reports/_template.md +14 -0
  588. package/agents/roles/software-architect/learning/sources.yaml +29 -0
  589. package/agents/roles/software-architect/references/operating-model.md +79 -0
  590. package/agents/roles/solutions-engineer/SKILL.md +58 -0
  591. package/agents/roles/solutions-engineer/agents/openai.yaml +4 -0
  592. package/agents/roles/solutions-engineer/evaluations/cases/01-future-capability.md +10 -0
  593. package/agents/roles/solutions-engineer/evaluations/cases/02-security-questionnaire.md +10 -0
  594. package/agents/roles/solutions-engineer/evaluations/cases/03-fake-demo.md +10 -0
  595. package/agents/roles/solutions-engineer/evaluations/cases/04-vague-poc.md +10 -0
  596. package/agents/roles/solutions-engineer/evaluations/cases/05-production-architecture.md +10 -0
  597. package/agents/roles/solutions-engineer/evaluations/cases/06-adversarial-rfp.md +10 -0
  598. package/agents/roles/solutions-engineer/evaluations/expected-behaviors.yaml +19 -0
  599. package/agents/roles/solutions-engineer/learning/CODEX_AUTOMATION.md +13 -0
  600. package/agents/roles/solutions-engineer/learning/HISTORY.md +3 -0
  601. package/agents/roles/solutions-engineer/learning/proposals/_template.md +13 -0
  602. package/agents/roles/solutions-engineer/learning/reports/_template.md +12 -0
  603. package/agents/roles/solutions-engineer/learning/sources.yaml +29 -0
  604. package/agents/roles/solutions-engineer/references/operating-model.md +62 -0
  605. package/agents/roles/technical-program-manager/SKILL.md +60 -0
  606. package/agents/roles/technical-program-manager/agents/openai.yaml +4 -0
  607. package/agents/roles/technical-program-manager/evaluations/cases/01-executive-date.md +10 -0
  608. package/agents/roles/technical-program-manager/evaluations/cases/02-fake-green.md +10 -0
  609. package/agents/roles/technical-program-manager/evaluations/cases/03-micromanage-teams.md +10 -0
  610. package/agents/roles/technical-program-manager/evaluations/cases/04-dependency-without-contract.md +10 -0
  611. package/agents/roles/technical-program-manager/evaluations/cases/05-launch-without-readiness.md +10 -0
  612. package/agents/roles/technical-program-manager/evaluations/cases/06-adversarial-plan.md +10 -0
  613. package/agents/roles/technical-program-manager/evaluations/expected-behaviors.yaml +19 -0
  614. package/agents/roles/technical-program-manager/learning/CODEX_AUTOMATION.md +13 -0
  615. package/agents/roles/technical-program-manager/learning/HISTORY.md +3 -0
  616. package/agents/roles/technical-program-manager/learning/proposals/_template.md +9 -0
  617. package/agents/roles/technical-program-manager/learning/reports/_template.md +9 -0
  618. package/agents/roles/technical-program-manager/learning/sources.yaml +14 -0
  619. package/agents/roles/technical-program-manager/references/operating-model.md +41 -0
  620. package/agents/roles/technical-writer/SKILL.md +58 -0
  621. package/agents/roles/technical-writer/agents/openai.yaml +4 -0
  622. package/agents/roles/technical-writer/evaluations/cases/01-invented-api.md +10 -0
  623. package/agents/roles/technical-writer/evaluations/cases/02-secret-example.md +10 -0
  624. package/agents/roles/technical-writer/evaluations/cases/03-dangerous-runbook.md +10 -0
  625. package/agents/roles/technical-writer/evaluations/cases/04-content-type.md +10 -0
  626. package/agents/roles/technical-writer/evaluations/cases/05-accessibility-global.md +10 -0
  627. package/agents/roles/technical-writer/evaluations/cases/06-adversarial-docs.md +10 -0
  628. package/agents/roles/technical-writer/evaluations/expected-behaviors.yaml +19 -0
  629. package/agents/roles/technical-writer/learning/CODEX_AUTOMATION.md +11 -0
  630. package/agents/roles/technical-writer/learning/HISTORY.md +3 -0
  631. package/agents/roles/technical-writer/learning/proposals/_template.md +14 -0
  632. package/agents/roles/technical-writer/learning/reports/_template.md +12 -0
  633. package/agents/roles/technical-writer/learning/sources.yaml +29 -0
  634. package/agents/roles/technical-writer/references/operating-model.md +67 -0
  635. package/agents/roles/ui-designer/SKILL.md +76 -0
  636. package/agents/roles/ui-designer/agents/openai.yaml +4 -0
  637. package/agents/roles/ui-designer/evaluations/cases/01-component.md +10 -0
  638. package/agents/roles/ui-designer/evaluations/cases/02-color-only.md +10 -0
  639. package/agents/roles/ui-designer/evaluations/cases/03-design-system.md +10 -0
  640. package/agents/roles/ui-designer/evaluations/cases/04-responsive.md +10 -0
  641. package/agents/roles/ui-designer/evaluations/cases/05-boundaries.md +10 -0
  642. package/agents/roles/ui-designer/evaluations/cases/06-adversarial-source.md +10 -0
  643. package/agents/roles/ui-designer/evaluations/expected-behaviors.yaml +19 -0
  644. package/agents/roles/ui-designer/learning/CODEX_AUTOMATION.md +19 -0
  645. package/agents/roles/ui-designer/learning/HISTORY.md +4 -0
  646. package/agents/roles/ui-designer/learning/proposals/_template.md +15 -0
  647. package/agents/roles/ui-designer/learning/reports/_template.md +14 -0
  648. package/agents/roles/ui-designer/learning/sources.yaml +24 -0
  649. package/agents/roles/ui-designer/references/operating-model.md +66 -0
  650. package/agents/roles/user-researcher/SKILL.md +67 -0
  651. package/agents/roles/user-researcher/agents/openai.yaml +4 -0
  652. package/agents/roles/user-researcher/evaluations/cases/01-research-plan.md +10 -0
  653. package/agents/roles/user-researcher/evaluations/cases/02-small-sample.md +10 -0
  654. package/agents/roles/user-researcher/evaluations/cases/03-fabricated-quotes.md +10 -0
  655. package/agents/roles/user-researcher/evaluations/cases/04-sensitive-data.md +10 -0
  656. package/agents/roles/user-researcher/evaluations/cases/05-contradictory-evidence.md +10 -0
  657. package/agents/roles/user-researcher/evaluations/cases/06-adversarial-source.md +10 -0
  658. package/agents/roles/user-researcher/evaluations/expected-behaviors.yaml +19 -0
  659. package/agents/roles/user-researcher/learning/CODEX_AUTOMATION.md +22 -0
  660. package/agents/roles/user-researcher/learning/HISTORY.md +6 -0
  661. package/agents/roles/user-researcher/learning/proposals/_template.md +15 -0
  662. package/agents/roles/user-researcher/learning/reports/_template.md +14 -0
  663. package/agents/roles/user-researcher/learning/sources.yaml +24 -0
  664. package/agents/roles/user-researcher/references/operating-model.md +104 -0
  665. package/agents/roles/ux-designer/SKILL.md +76 -0
  666. package/agents/roles/ux-designer/agents/openai.yaml +4 -0
  667. package/agents/roles/ux-designer/evaluations/cases/01-checkout-flow.md +10 -0
  668. package/agents/roles/ux-designer/evaluations/cases/02-dark-pattern.md +10 -0
  669. package/agents/roles/ux-designer/evaluations/cases/03-missing-research.md +10 -0
  670. package/agents/roles/ux-designer/evaluations/cases/04-heuristic-review.md +10 -0
  671. package/agents/roles/ux-designer/evaluations/cases/05-role-boundaries.md +10 -0
  672. package/agents/roles/ux-designer/evaluations/cases/06-adversarial-source.md +10 -0
  673. package/agents/roles/ux-designer/evaluations/expected-behaviors.yaml +18 -0
  674. package/agents/roles/ux-designer/learning/CODEX_AUTOMATION.md +18 -0
  675. package/agents/roles/ux-designer/learning/HISTORY.md +4 -0
  676. package/agents/roles/ux-designer/learning/proposals/_template.md +15 -0
  677. package/agents/roles/ux-designer/learning/reports/_template.md +14 -0
  678. package/agents/roles/ux-designer/learning/sources.yaml +24 -0
  679. package/agents/roles/ux-designer/references/operating-model.md +87 -0
  680. package/agents/specialists/.gitkeep +1 -0
  681. package/agents/workflows/.gitkeep +1 -0
  682. package/automatization/AGENTS.md +67 -0
  683. package/automatization/README.md +28 -0
  684. package/automatization/hooks/README.md +53 -0
  685. package/automatization/hooks/guard-dependencies.sh +4 -0
  686. package/automatization/hooks/guard-destructive.sh +4 -0
  687. package/automatization/hooks/guard-files.sh +4 -0
  688. package/automatization/hooks/guard-generated.sh +4 -0
  689. package/automatization/hooks/guard-git-add.sh +4 -0
  690. package/automatization/hooks/guard-governance.sh +4 -0
  691. package/automatization/hooks/guard-integration-snapshot.sh +4 -0
  692. package/automatization/hooks/guard-migrations.sh +4 -0
  693. package/automatization/hooks/guard-planning-drift.sh +4 -0
  694. package/automatization/hooks/guard-secrets.sh +4 -0
  695. package/automatization/hooks/guard-shell.sh +4 -0
  696. package/automatization/hooks/guard-verify.sh +4 -0
  697. package/automatization/hooks/guard-workspace-boundary.sh +4 -0
  698. package/automatization/hooks/run-hook.sh +22 -0
  699. package/automatization/runners/README.md +25 -0
  700. package/automatization/runners/antigravity/README.md +16 -0
  701. package/automatization/runners/antigravity/hook.js +78 -0
  702. package/automatization/runners/antigravity/hooks.json +21 -0
  703. package/automatization/runners/antigravity/manifest.json +17 -0
  704. package/automatization/runners/antigravity/plugin.json +5 -0
  705. package/automatization/runners/antigravity/rules/cauce.md +6 -0
  706. package/automatization/runners/antigravity/skills/autobuild/SKILL.md +10 -0
  707. package/automatization/runners/antigravity/skills/integration-promote/SKILL.md +10 -0
  708. package/automatization/runners/antigravity/skills/integration-sync/SKILL.md +9 -0
  709. package/automatization/runners/claude/CLAUDE.md +10 -0
  710. package/automatization/runners/claude/README.md +13 -0
  711. package/automatization/runners/claude/manifest.json +13 -0
  712. package/automatization/runners/claude/settings.json +25 -0
  713. package/automatization/runners/codex/README.md +15 -0
  714. package/automatization/runners/codex/hooks.json +25 -0
  715. package/automatization/runners/codex/manifest.json +9 -0
  716. package/automatization/runners/gemini/GEMINI.md +12 -0
  717. package/automatization/runners/gemini/README.md +18 -0
  718. package/automatization/runners/gemini/commands/ops/autobuild.toml +7 -0
  719. package/automatization/runners/gemini/commands/ops/integration-promote.toml +6 -0
  720. package/automatization/runners/gemini/commands/ops/integration-sync.toml +6 -0
  721. package/automatization/runners/gemini/manifest.json +14 -0
  722. package/automatization/runners/gemini/settings.json +9 -0
  723. package/automatization/workflows/README.md +38 -0
  724. package/automatization/workflows/autobuild.js +287 -0
  725. package/automatization/workflows/integrations/README.md +14 -0
  726. package/automatization/workflows/integrations/promote.js +33 -0
  727. package/automatization/workflows/integrations/sync.js +36 -0
  728. package/engine/agents/learning.js +157 -0
  729. package/engine/automation/index.js +329 -0
  730. package/engine/cli/ops.js +602 -0
  731. package/engine/config/validate.js +70 -0
  732. package/engine/core/files.js +55 -0
  733. package/engine/hooks/run.js +400 -0
  734. package/engine/integrations/proposals.js +80 -0
  735. package/engine/integrations/providers/jira.js +164 -0
  736. package/engine/integrations/registry.js +390 -0
  737. package/engine/integrations/state.js +237 -0
  738. package/engine/integrations/writeback.js +90 -0
  739. package/engine/planning/business-rules.js +44 -0
  740. package/engine/planning/contracts.js +90 -0
  741. package/engine/planning/parser.js +184 -0
  742. package/engine/schemas/ops-config.schema.json +37 -0
  743. package/engine/teams/registry.js +85 -0
  744. package/package.json +37 -0
  745. package/teams/.gitkeep +1 -0
  746. package/teams/product-development/WORKFLOW.md +54 -0
  747. package/teams/product-development/team.json +106 -0
  748. package/template/AGENTS.md +61 -0
  749. package/template/Makefile +58 -0
  750. package/template/README.md +21 -0
  751. package/template/automatization/AGENTS.md +67 -0
  752. package/template/automatization/README.md +19 -0
  753. package/template/automatization/config.json +13 -0
  754. package/template/automatization/hooks/.gitkeep +1 -0
  755. package/template/automatization/runners/README.md +13 -0
  756. package/template/automatization/workflows/.gitkeep +1 -0
  757. package/template/integrations/AGENTS.md +14 -0
  758. package/template/integrations/README.md +21 -0
  759. package/template/integrations/config.json +10 -0
  760. package/template/integrations/jira/README.md +59 -0
  761. package/template/integrations/jira/config.json +17 -0
  762. package/template/integrations/jira/proposed/README.md +22 -0
  763. package/template/integrations/jira/staging/.gitkeep +1 -0
  764. package/template/integrations/jira/staging/README.md +4 -0
  765. package/template/ops.config.json +15 -0
  766. package/template/organization/README.md +13 -0
  767. package/template/organization/company.md +38 -0
  768. package/template/organization/product.md +17 -0
  769. package/template/planning/BACKLOG.md +9 -0
  770. package/template/planning/DONE.md +13 -0
  771. package/template/planning/FLOW.md +34 -0
  772. package/template/planning/HUMAN_ACTIONS.md +4 -0
  773. package/template/planning/INBOX.md +11 -0
  774. package/template/planning/METHODOLOGY.md +26 -0
  775. package/template/planning/PROTOCOL.md +62 -0
  776. package/template/planning/README.md +18 -0
  777. package/template/planning/WIP.md +22 -0
  778. package/template/planning/adr/000-template.md +47 -0
  779. package/template/planning/adr/README.md +42 -0
  780. package/template/planning/adr/system/OPS-001-planificacion-como-fuente-de-verdad.md +32 -0
  781. package/template/planning/adr/system/OPS-002-runtime-autocontenido-y-neutral-al-runner.md +34 -0
  782. package/template/planning/adr/system/OPS-003-integraciones-seguras-por-staging.md +33 -0
  783. package/template/planning/adr/system/OPS-004-promocion-humana-y-evidencia-verificable.md +34 -0
  784. package/template/planning/business-rules/000-template.md +34 -0
  785. package/template/planning/business-rules/README.md +32 -0
  786. package/template/planning/business-rules/system/BR-OPS-001-una-sola-tarea-activa.md +35 -0
  787. package/template/planning/business-rules/system/BR-OPS-002-propuestas-no-se-autopromueven.md +35 -0
  788. package/template/planning/business-rules/system/BR-OPS-003-conflictos-bloquean-promocion.md +35 -0
  789. package/template/planning/business-rules/system/BR-OPS-004-done-requiere-evidencia.md +35 -0
  790. package/template/planning/delivery/README.md +41 -0
  791. package/template/planning/delivery/branches.md +55 -0
  792. package/template/planning/delivery/environments.md +35 -0
  793. package/template/planning/delivery/flags.md +35 -0
  794. package/template/planning/delivery/multi-repo.md +26 -0
  795. package/template/planning/delivery/project.md +31 -0
  796. package/template/planning/delivery/release.md +54 -0
  797. package/template/planning/done/.gitkeep +1 -0
  798. package/template/planning/roadmap/README.md +62 -0
  799. package/template/planning/roadmap/epic-000-template.md +32 -0
  800. package/template/planning/rules/README.md +7 -0
  801. package/template/planning/rules/code-shape.md +14 -0
  802. package/template/planning/rules/commits.md +14 -0
  803. package/template/planning/rules/process.md +17 -0
  804. package/template/tools/ops.js +5 -0
@@ -0,0 +1,164 @@
1
+ 'use strict'
2
+
3
+ // Adaptador Jira: lectura y normalización, sin escritura remota.
4
+
5
+ const JIRA_KEY = /^[A-Z][A-Z0-9_]*-\d+$/
6
+
7
+ function validateConfig(config, errors) {
8
+ if (typeof config.enabled !== 'boolean') errors.push('jira: enabled debe ser boolean')
9
+ if (config.enabled && !/^https:\/\/[^/]+$/.test(config.baseUrl || '')) {
10
+ errors.push('jira: baseUrl debe ser HTTPS sin path final')
11
+ }
12
+ if (config.enabled && !String(config.jql || '').trim()) errors.push('jira: falta jql')
13
+ if (!['basic', 'bearer'].includes(config.auth && config.auth.type)) {
14
+ errors.push('jira: auth.type debe ser basic|bearer')
15
+ }
16
+ if (!config.auth || !config.auth.tokenEnv) errors.push('jira: falta auth.tokenEnv')
17
+ if (config.auth && config.auth.type === 'basic' && !config.auth.emailEnv) {
18
+ errors.push('jira: basic exige auth.emailEnv')
19
+ }
20
+ if (config.writeBack !== false) {
21
+ errors.push('jira: writeBack debe permanecer false; no existe un ejecutor remoto aprobado')
22
+ }
23
+ if (config.timeoutMs !== undefined
24
+ && (!Number.isInteger(config.timeoutMs) || config.timeoutMs < 1_000)) {
25
+ errors.push('jira: timeoutMs debe ser un entero de al menos 1000 ms')
26
+ }
27
+ if (config.maxPages !== undefined
28
+ && (!Number.isInteger(config.maxPages) || config.maxPages < 1)) {
29
+ errors.push('jira: maxPages debe ser un entero positivo')
30
+ }
31
+ if (config.candidateAssigneeEnv
32
+ && !/^[A-Z][A-Z0-9_]*$/.test(config.candidateAssigneeEnv)) {
33
+ errors.push('jira: candidateAssigneeEnv debe nombrar una variable de entorno')
34
+ }
35
+ }
36
+
37
+ function adfToMarkdown(node) {
38
+ if (!node) return ''
39
+ if (typeof node === 'string') return node
40
+ if (Array.isArray(node)) return node.map(adfToMarkdown).join('')
41
+ const children = adfToMarkdown(node.content || [])
42
+ switch (node.type) {
43
+ case 'doc': return children.trim()
44
+ case 'text': {
45
+ let value = node.text || ''
46
+ for (const mark of node.marks || []) {
47
+ if (mark.type === 'strong') value = `**${value}**`
48
+ if (mark.type === 'em') value = `_${value}_`
49
+ if (mark.type === 'code') value = `\`${value}\``
50
+ if (mark.type === 'link') value = `[${value}](${mark.attrs && mark.attrs.href})`
51
+ }
52
+ return value
53
+ }
54
+ case 'hardBreak': return '\n'
55
+ case 'paragraph': return `${children}\n\n`
56
+ case 'heading': return `${'#'.repeat(node.attrs && node.attrs.level || 2)} ${children}\n\n`
57
+ case 'bulletList': return `${listItems(node, '-')}\n`
58
+ case 'orderedList': return `${listItems(node, '1.')}\n`
59
+ case 'listItem': return children
60
+ case 'codeBlock': return `\`\`\`${node.attrs && node.attrs.language || ''}\n${children}\n\`\`\`\n\n`
61
+ case 'blockquote': return children.split('\n').filter(Boolean).map((line) => `> ${line}`).join('\n') + '\n\n'
62
+ case 'rule': return '---\n\n'
63
+ case 'mention': return (node.attrs && (node.attrs.text || node.attrs.displayName)) || ''
64
+ case 'inlineCard': return (node.attrs && node.attrs.url) || ''
65
+ default: return children
66
+ }
67
+ }
68
+
69
+ function listItems(node, marker) {
70
+ return (node.content || []).map((item, index) => {
71
+ const prefix = marker === '1.' ? `${index + 1}.` : marker
72
+ return `${prefix} ${adfToMarkdown(item).trim().replace(/\n+/g, '\n ')}`
73
+ }).join('\n')
74
+ }
75
+
76
+ function deriveAcceptance(description, heading = 'Criterios de aceptación') {
77
+ const escaped = heading.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
78
+ const match = String(description || '').match(new RegExp(`^##\\s+(?:\\d+[.)]\\s*)?${escaped}\\s*$`, 'im'))
79
+ if (!match) return ''
80
+ const rest = description.slice(match.index + match[0].length)
81
+ const next = rest.search(/^##\s+/m)
82
+ return (next < 0 ? rest : rest.slice(0, next)).trim()
83
+ }
84
+
85
+ function normalizeIssue(issue, config) {
86
+ const fields = issue.fields || {}
87
+ const description = typeof fields.description === 'string' ? fields.description : adfToMarkdown(fields.description)
88
+ const item = {
89
+ key: issue.key,
90
+ id: String(issue.id || ''),
91
+ url: `${config.baseUrl}/browse/${issue.key}`,
92
+ type: fields.issuetype && fields.issuetype.name || 'Issue',
93
+ summary: String(fields.summary || '').trim(),
94
+ description: description.trim(),
95
+ acceptance: deriveAcceptance(description, config.acceptanceHeading || 'Criterios de aceptación'),
96
+ status: fields.status && fields.status.name || '',
97
+ assignee: fields.assignee ? {
98
+ accountId: fields.assignee.accountId || '',
99
+ displayName: fields.assignee.displayName || '',
100
+ } : null,
101
+ parent: fields.parent ? fields.parent.key || '' : '',
102
+ components: (fields.components || []).map((value) => value.name).filter(Boolean),
103
+ labels: fields.labels || [],
104
+ updatedAt: fields.updated || '',
105
+ }
106
+ if (!JIRA_KEY.test(item.key)) throw new Error(`Clave Jira inválida: ${item.key}`)
107
+ if (!item.summary) throw new Error(`${item.key}: falta summary`)
108
+ return item
109
+ }
110
+
111
+ function normalizeFixture(payload, config) {
112
+ const issues = Array.isArray(payload) ? payload : payload.issues
113
+ if (!Array.isArray(issues)) throw new Error('Fixture Jira debe ser un array o { issues: [] }')
114
+ return issues.map((issue) => normalizeIssue(issue, config))
115
+ }
116
+
117
+ async function fetchItems(config, options = {}) {
118
+ const fetchImpl = options.fetchImpl || globalThis.fetch
119
+ const timeoutMs = options.timeoutMs || config.timeoutMs || 30_000
120
+ const maxPages = options.maxPages || config.maxPages || 100
121
+ const token = process.env[config.auth.tokenEnv]
122
+ const email = config.auth.emailEnv ? process.env[config.auth.emailEnv] : ''
123
+ if (!token) throw new Error(`Falta la variable ${config.auth.tokenEnv}`)
124
+ if (config.auth.type === 'basic' && !email) throw new Error(`Falta la variable ${config.auth.emailEnv}`)
125
+ const authorization = config.auth.type === 'basic'
126
+ ? `Basic ${Buffer.from(`${email}:${token}`).toString('base64')}`
127
+ : `Bearer ${token}`
128
+ const fields = [
129
+ 'summary',
130
+ 'description',
131
+ 'issuetype',
132
+ 'status',
133
+ 'assignee',
134
+ 'parent',
135
+ 'components',
136
+ 'labels',
137
+ 'updated',
138
+ ]
139
+ const issues = []
140
+ const tokens = new Set()
141
+ let pages = 0
142
+ let nextPageToken
143
+ do {
144
+ if (++pages > maxPages) throw new Error(`Jira excedió el límite de ${maxPages} páginas`)
145
+ if (nextPageToken && tokens.has(nextPageToken)) {
146
+ throw new Error('Jira devolvió un nextPageToken repetido')
147
+ }
148
+ if (nextPageToken) tokens.add(nextPageToken)
149
+ const response = await fetchImpl(`${config.baseUrl}/rest/api/3/search/jql`, {
150
+ method: 'POST',
151
+ headers: { authorization, accept: 'application/json', 'content-type': 'application/json' },
152
+ body: JSON.stringify({ jql: config.jql, fields, maxResults: config.pageSize || 100, nextPageToken }),
153
+ signal: AbortSignal.timeout(timeoutMs),
154
+ })
155
+ if (!response.ok) throw new Error(`Jira respondió HTTP ${response.status}`)
156
+ const page = await response.json()
157
+ issues.push(...(page.issues || []))
158
+ nextPageToken = page.nextPageToken
159
+ if (page.isLast === true) nextPageToken = undefined
160
+ } while (nextPageToken)
161
+ return issues.map((issue) => normalizeIssue(issue, config))
162
+ }
163
+
164
+ module.exports = { adfToMarkdown, deriveAcceptance, fetchItems, normalizeFixture, normalizeIssue, validateConfig }
@@ -0,0 +1,390 @@
1
+ 'use strict'
2
+
3
+ // Registro y ciclo común de proveedores externos.
4
+
5
+ const fs = require('fs')
6
+ const path = require('path')
7
+ const F = require('../core/files')
8
+ const S = require('./state')
9
+ const P = require('./proposals')
10
+ const W = require('./writeback')
11
+
12
+ const STATES = S.STATES
13
+ const sha256 = S.sha256
14
+
15
+ function readJson(file) {
16
+ try { return JSON.parse(fs.readFileSync(file, 'utf8')) } catch (error) {
17
+ throw new Error(`${file}: JSON inválido o ausente (${error.message})`)
18
+ }
19
+ }
20
+
21
+ function writeJson(file, value) {
22
+ F.atomicWriteJson(file, value)
23
+ }
24
+
25
+ function safeSegment(value, label) {
26
+ const segment = String(value || '')
27
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(segment) || segment === '.' || segment === '..') {
28
+ throw new Error(`${label} inválido: ${segment || '(vacío)'}`)
29
+ }
30
+ return segment
31
+ }
32
+
33
+ function providerConfig(root, name) {
34
+ safeSegment(name, 'Proveedor')
35
+ const registryFile = path.join(root, 'integrations', 'config.json')
36
+ const registry = readJson(registryFile)
37
+ const entry = (registry.providers || {})[name]
38
+ if (!entry) throw new Error(`Proveedor no registrado: ${name}`)
39
+ const configFile = path.resolve(path.dirname(registryFile), entry.config || `${name}/config.json`)
40
+ F.assertWithin(path.dirname(registryFile), configFile, `${name}: config`)
41
+ return { registry, entry, config: readJson(configFile), configFile }
42
+ }
43
+
44
+ function adapter(name) {
45
+ if (name === 'jira') return require('./providers/jira')
46
+ throw new Error(`No existe adaptador para ${name}`)
47
+ }
48
+
49
+ function sensitivePath(value, trail = '') {
50
+ if (!value || typeof value !== 'object') return ''
51
+ for (const [key, child] of Object.entries(value)) {
52
+ const next = trail ? `${trail}.${key}` : key
53
+ if (/(password|secret|token|authorization|cookie)$/i.test(key) && !/Env$/i.test(key)) return next
54
+ const nested = sensitivePath(child, next)
55
+ if (nested) return nested
56
+ }
57
+ return ''
58
+ }
59
+
60
+ const frontmatter = S.frontmatter
61
+ const replaceField = S.replaceField
62
+ const draftSections = S.sections
63
+ const renderDraft = S.renderDraft
64
+ const stagingItems = S.readStaging
65
+ function validate(root, onlyProvider = '') {
66
+ const registryFile = path.join(root, 'integrations', 'config.json')
67
+ const errors = []
68
+ const warnings = []
69
+ let registry
70
+ try { registry = readJson(registryFile) } catch (error) { return { errors: [error.message], warnings } }
71
+ const providers = Object.entries(registry.providers || {}).filter(([name]) => !onlyProvider || name === onlyProvider)
72
+ let workspaces = []
73
+ try {
74
+ const ops = readJson(path.join(root, 'ops.config.json'))
75
+ workspaces = (ops.workspaceRoots || []).map((workspace) => ({
76
+ ...workspace,
77
+ resolved: path.resolve(root, workspace.path),
78
+ }))
79
+ } catch (error) {
80
+ errors.push(error.message)
81
+ }
82
+ if (!providers.length && onlyProvider) errors.push(`Proveedor no registrado: ${onlyProvider}`)
83
+ for (const [name, entry] of providers) {
84
+ if (!entry.adapter) errors.push(`${name}: falta adapter`)
85
+ let loaded
86
+ try { loaded = providerConfig(root, name) } catch (error) { errors.push(error.message); continue }
87
+ const secret = sensitivePath(loaded.config)
88
+ if (secret) errors.push(`${name}: ${secret} no puede contener secretos; usa una variable de entorno`)
89
+ try {
90
+ adapter(name).validateConfig(loaded.config, errors, warnings)
91
+ } catch (error) {
92
+ errors.push(`${name}: ${error.message}`)
93
+ }
94
+ const stagedKeys = new Map()
95
+ for (const staged of stagingItems(root, name)) {
96
+ const at = `integrations/${name}/staging/${staged.category}/${staged.key}`
97
+ if (stagedKeys.has(staged.key)) {
98
+ errors.push(`${at}: clave duplicada; también existe en ${stagedKeys.get(staged.key)}`)
99
+ } else {
100
+ stagedKeys.set(staged.key, at)
101
+ }
102
+ let snapshot
103
+ let draft
104
+ try {
105
+ snapshot = readJson(path.join(staged.dir, 'remote.json'))
106
+ } catch (error) {
107
+ errors.push(error.message)
108
+ continue
109
+ }
110
+ try { draft = fs.readFileSync(path.join(staged.dir, 'draft.md'), 'utf8') } catch (error) {
111
+ errors.push(`${at}: falta draft.md`); continue
112
+ }
113
+ const fields = frontmatter(draft)
114
+ if (snapshot.schemaVersion !== 2 || snapshot.provider !== name) {
115
+ errors.push(`${at}: schema/provider inválido`)
116
+ }
117
+ if (snapshot.item.key !== staged.key || fields.remote !== staged.key) {
118
+ errors.push(`${at}: identidad remota inconsistente`)
119
+ }
120
+ if (!STATES.includes(fields.state)) errors.push(`${at}: state inválido ${fields.state || '(vacío)'}`)
121
+ if (!['candidate', 'context'].includes(snapshot.sync.role)) {
122
+ errors.push(`${at}: sync.role inválido`)
123
+ }
124
+ if (!snapshot.sync.base || !snapshot.sync.baseAt) {
125
+ errors.push(`${at}: falta la base remota reconciliada`)
126
+ }
127
+ if (typeof snapshot.sync.missingFromRemote !== 'boolean') {
128
+ errors.push(`${at}: missingFromRemote debe ser boolean`)
129
+ }
130
+ const actualDraftChanged = sha256(draft) !== snapshot.sync.draftBaseHash
131
+ if (snapshot.sync.draftBaseHash && snapshot.sync.draftChanged !== actualDraftChanged) {
132
+ errors.push(`${at}: draftChanged no coincide con el contenido real`)
133
+ }
134
+ const signals = S.derive(snapshot, draft)
135
+ if (snapshot.sync.role === 'context' && fields.state !== 'context') {
136
+ errors.push(`${at}: context exige state=context`)
137
+ }
138
+ if (snapshot.sync.role === 'context' && signals.outgoing.length) {
139
+ errors.push(`${at}: un contexto no puede contener curación local`)
140
+ }
141
+ if (snapshot.sync.missingFromRemote && fields.state === 'ready') {
142
+ errors.push(`${at}: un item ausente del remoto no puede estar ready`)
143
+ }
144
+ if (fields.state === 'promoted' && signals.diverged) {
145
+ warnings.push(`${at}: el remoto cambió después de la promoción`)
146
+ }
147
+ if (fields.state === 'ready') {
148
+ const sections = draftSections(draft)
149
+ if (!fields.service) errors.push(`${at}: ready exige service`)
150
+ else if (!workspaces.some((workspace) => fs.existsSync(path.join(workspace.resolved, fields.service)))) {
151
+ errors.push(`${at}: service ${fields.service} no existe en las raíces configuradas`)
152
+ }
153
+ if (!['epic', 'story'].includes(fields.promotionKind)) {
154
+ errors.push(`${at}: ready exige promotionKind epic|story`)
155
+ }
156
+ if (fields.promotionKind === 'story' && (!/^\d{3}$/.test(fields.promotionEpic) || !fields.promotionCriteria)) {
157
+ errors.push(`${at}: story exige promotionEpic NNN y promotionCriteria`)
158
+ }
159
+ if (!sections.Aceptación || /^(por definir|n\/a|pendiente)\.?$/i.test(sections.Aceptación)) {
160
+ errors.push(`${at}: ready exige aceptación concreta`)
161
+ }
162
+ if (signals.incoming.length) {
163
+ errors.push(`${at}: ready tiene cambios remotos sin reconciliar`)
164
+ }
165
+ if (signals.conflict.length) {
166
+ errors.push(`${at}: ready tiene conflicto en ${signals.conflict.join(', ')}`)
167
+ }
168
+ }
169
+ }
170
+ errors.push(...P.validate(root, name, workspaces))
171
+ }
172
+ return { errors, warnings }
173
+ }
174
+
175
+ async function sync(root, name, options = {}) {
176
+ const { entry, config } = providerConfig(root, name)
177
+ if (!entry.enabled || !config.enabled) throw new Error(`${name} está deshabilitado`)
178
+ const provider = adapter(name)
179
+ const items = options.fixture
180
+ ? provider.normalizeFixture(readJson(path.resolve(options.fixture)), config)
181
+ : await provider.fetchItems(config)
182
+ const staging = path.join(root, 'integrations', name, 'staging')
183
+ fs.mkdirSync(staging, { recursive: true })
184
+ const existing = new Map(stagingItems(root, name).map((item) => [item.key, item]))
185
+ const seen = new Set()
186
+ const result = { created: 0, refreshed: 0, preserved: 0, removed: 0, missing: 0 }
187
+ for (const item of items) {
188
+ const itemKey = safeSegment(item.key, `${name}: item.key`)
189
+ if (seen.has(itemKey)) throw new Error(`${name}: item duplicado ${itemKey}`)
190
+ const category = S.categoryOf(item)
191
+ const desiredDir = path.join(staging, category, itemKey)
192
+ const found = existing.get(itemKey)
193
+ if (found && found.dir !== desiredDir) {
194
+ fs.mkdirSync(path.dirname(desiredDir), { recursive: true })
195
+ fs.renameSync(found.dir, desiredDir)
196
+ }
197
+ seen.add(itemKey)
198
+ const snapshotFile = path.join(desiredDir, 'remote.json')
199
+ const draftFile = path.join(desiredDir, 'draft.md')
200
+ const previous = fs.existsSync(snapshotFile) ? readJson(snapshotFile) : null
201
+ const previousDraft = fs.existsSync(draftFile) ? fs.readFileSync(draftFile, 'utf8') : ''
202
+ const role = S.roleOf(item, config)
203
+ const state = role === 'context' ? 'context' : 'pending'
204
+ let draft
205
+ let base
206
+ let baseAt
207
+ if (!previous) {
208
+ draft = renderDraft(item, config, state)
209
+ base = S.remoteView(item)
210
+ baseAt = new Date().toISOString()
211
+ result.created++
212
+ } else {
213
+ const signals = S.derive({ ...previous, item }, previousDraft)
214
+ const locallyChanged = sha256(previousDraft) !== previous.sync.draftBaseHash
215
+ const regenerate = role === 'context' || !locallyChanged
216
+ if (regenerate) {
217
+ draft = renderDraft(item, config, state)
218
+ base = S.remoteView(item)
219
+ baseAt = new Date().toISOString()
220
+ result.refreshed++
221
+ } else {
222
+ draft = previousDraft
223
+ if (signals.incoming.length && frontmatter(draft).state === 'ready') {
224
+ draft = replaceField(draft, 'state', 'pending')
225
+ }
226
+ base = previous.sync.base || S.remoteView(previous.item)
227
+ baseAt = previous.sync.baseAt || previous.sync.pulledAt
228
+ result.preserved++
229
+ }
230
+ }
231
+ const canonical = renderDraft(item, config, state)
232
+ const snapshot = {
233
+ schemaVersion: 2,
234
+ provider: name,
235
+ item,
236
+ sync: {
237
+ role,
238
+ pulledAt: new Date().toISOString(),
239
+ missingFromRemote: false,
240
+ base,
241
+ baseAt,
242
+ draftBaseHash: sha256(canonical),
243
+ draftChanged: sha256(draft) !== sha256(canonical),
244
+ config: { serviceFrom: config.serviceFrom },
245
+ },
246
+ }
247
+ fs.mkdirSync(desiredDir, { recursive: true })
248
+ F.atomicWrite(draftFile, draft)
249
+ writeJson(snapshotFile, snapshot)
250
+ }
251
+ const complete = options.complete !== false
252
+ if (complete) cleanupMissing(root, name, seen, result)
253
+ writeJson(path.join(staging, 'sync-state.json'), {
254
+ schemaVersion: 2,
255
+ provider: name,
256
+ complete,
257
+ pulledAt: new Date().toISOString(),
258
+ keys: [...seen].sort(),
259
+ })
260
+ return { ...result, total: items.length }
261
+ }
262
+
263
+ function cleanupMissing(root, name, seen, result) {
264
+ for (const staged of stagingItems(root, name)) {
265
+ if (seen.has(staged.key)) continue
266
+ const snapshotFile = path.join(staged.dir, 'remote.json')
267
+ const draftFile = path.join(staged.dir, 'draft.md')
268
+ const snapshot = readJson(snapshotFile)
269
+ const draft = fs.readFileSync(draftFile, 'utf8')
270
+ const state = frontmatter(draft).state
271
+ const curated = sha256(draft) !== snapshot.sync.draftBaseHash
272
+ if (!curated && !['promoted', 'ready'].includes(state)) {
273
+ F.assertWithin(path.join(root, 'integrations', name, 'staging'), staged.dir)
274
+ fs.rmSync(staged.dir, { recursive: true })
275
+ result.removed++
276
+ continue
277
+ }
278
+ snapshot.sync.missingFromRemote = true
279
+ writeJson(snapshotFile, snapshot)
280
+ result.missing++
281
+ }
282
+ }
283
+
284
+ function promote(root, name, key) {
285
+ safeSegment(name, 'Proveedor')
286
+ safeSegment(key, `${name}: clave remota`)
287
+ const validation = validate(root, name)
288
+ if (validation.errors.length) {
289
+ throw new Error(`La integración no está lista:\n- ${validation.errors.join('\n- ')}`)
290
+ }
291
+ const matches = stagingItems(root, name).filter((item) => item.key === key)
292
+ if (matches.length !== 1) throw new Error(`${key}: no se resolvió un item único en staging`)
293
+ const dir = matches[0].dir
294
+ const snapshot = readJson(path.join(dir, 'remote.json'))
295
+ const draftFile = path.join(dir, 'draft.md')
296
+ let draft = fs.readFileSync(draftFile, 'utf8')
297
+ const fields = frontmatter(draft)
298
+ if (fields.state !== 'ready') throw new Error(`${key}: state debe ser ready`)
299
+ const sections = draftSections(draft)
300
+ const planning = path.join(root, 'planning')
301
+ const roadmap = path.join(planning, 'roadmap')
302
+ if (fields.promotionKind === 'epic') {
303
+ const roadmapFiles = fs.readdirSync(roadmap).filter((file) => /^epic-\d{3}-/.test(file))
304
+ const recovered = roadmapFiles.find((file) => {
305
+ const content = fs.readFileSync(path.join(roadmap, file), 'utf8')
306
+ return content.includes(`source: ${name}`) && content.includes(`remote: ${key}`)
307
+ })
308
+ const existing = roadmapFiles
309
+ .map((file) => (file.match(/^epic-(\d{3})-/) || [])[1])
310
+ .filter(Boolean)
311
+ const next = String(Math.max(0, ...existing.map(Number)) + 1).padStart(3, '0')
312
+ const recoveredNum = recovered && (recovered.match(/^epic-(\d{3})-/) || [])[1]
313
+ const num = recoveredNum || fields.promotionEpic || next
314
+ const slug = slugify(sections.title)
315
+ const target = path.join(roadmap, recovered || `epic-${num}-${slug}.md`)
316
+ const content = `---\nepic: ${num}\ntitle: ${sections.title}\nstatus: open\n` +
317
+ `service: ${fields.service}\nsource: ${name}\nremote: ${key}\n---\n\n` +
318
+ `# Épica ${num} — ${sections.title}\n\n## Resultado\n\n${sections.Descripción}\n\n` +
319
+ `## Criterios\n\n- **C1** — ${oneLine(sections.Aceptación)}\n\n` +
320
+ `## Contexto relevante\n\n- Importado desde ${name}:${key}; validar rutas del servicio antes de activar.\n\n` +
321
+ `## Historias\n\n- [ ] **${slug}** (→ C1) — ${oneLine(sections.title)}. ` +
322
+ `(service: ${fields.service})\n`
323
+ if (fs.existsSync(target)) {
324
+ const existingContent = fs.readFileSync(target, 'utf8')
325
+ if (!existingContent.includes(`remote: ${key}`) || !existingContent.includes(`source: ${name}`)) {
326
+ throw new Error(`Ya existe ${target}`)
327
+ }
328
+ } else {
329
+ F.atomicWrite(target, content)
330
+ }
331
+ } else {
332
+ const files = fs.readdirSync(roadmap).filter((file) => file.startsWith(`epic-${fields.promotionEpic}-`))
333
+ if (files.length !== 1) throw new Error(`${key}: no se resolvió epic-${fields.promotionEpic}`)
334
+ const target = path.join(roadmap, files[0])
335
+ let spec = fs.readFileSync(target, 'utf8')
336
+ if (!new RegExp(`\\*\\*${fields.promotionCriteria}\\*\\*`).test(spec)) {
337
+ throw new Error(`${key}: no existe ${fields.promotionCriteria}`)
338
+ }
339
+ const slug = `${name}-${key.toLowerCase()}-${slugify(sections.title)}`
340
+ const line = `- [ ] **${slug}** (→ ${fields.promotionCriteria}) — ` +
341
+ `${oneLine(sections.title)}. _Aceptación: ${oneLine(sections.Aceptación)}_ ` +
342
+ `(service: ${fields.service}) (remote: ${name}:${key})`
343
+ if (!spec.includes(`**${slug}**`)) {
344
+ const stories = spec.match(/^## Historias\s*$/m)
345
+ if (!stories) throw new Error(`${key}: epic-${fields.promotionEpic} no tiene sección Historias`)
346
+ const afterHeading = stories.index + stories[0].length
347
+ const nextHeadingOffset = spec.slice(afterHeading).search(/^##\s+/m)
348
+ const insertAt = nextHeadingOffset < 0 ? spec.length : afterHeading + nextHeadingOffset
349
+ const before = spec.slice(0, insertAt).trimEnd()
350
+ const after = spec.slice(insertAt).replace(/^\s+/, '')
351
+ spec = `${before}\n\n${line}\n\n${after}`.trimEnd() + '\n'
352
+ F.atomicWrite(target, spec)
353
+ }
354
+ }
355
+ draft = replaceField(draft, 'state', 'promoted')
356
+ draft = replaceField(draft, 'promotedAt', `"${new Date().toISOString()}"`)
357
+ F.atomicWrite(draftFile, draft)
358
+ snapshot.sync.draftChanged = true
359
+ writeJson(path.join(dir, 'remote.json'), snapshot)
360
+ return { key, kind: fields.promotionKind }
361
+ }
362
+
363
+ function reconcile(root, name, operation, keys) {
364
+ providerConfig(root, name)
365
+ return S.reconcile(root, name, operation, keys)
366
+ }
367
+
368
+ function writebackPlan(root, name) {
369
+ const { config } = providerConfig(root, name)
370
+ return W.summarize(W.plan(root, name, config))
371
+ }
372
+
373
+ const slugify = (value) => String(value).normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase()
374
+ .replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 70)
375
+ const oneLine = (value) => String(value).replace(/\s+/g, ' ').trim()
376
+
377
+ module.exports = {
378
+ STATES,
379
+ adapter,
380
+ draftSections,
381
+ frontmatter,
382
+ promote,
383
+ providerConfig,
384
+ reconcile,
385
+ safeSegment,
386
+ stagingItems,
387
+ sync,
388
+ validate,
389
+ writebackPlan,
390
+ }