oficina-opencode 3.0.5 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/README.md +240 -208
  2. package/commands/oficina.md +7 -6
  3. package/dashboard/.dom-check.html +1257 -0
  4. package/dashboard/README-DASHBOARD.md +64 -0
  5. package/dashboard/assets/factory.css +1543 -0
  6. package/dashboard/assets/tokens.css +208 -0
  7. package/dashboard/build-kanban-data.mjs +279 -0
  8. package/dashboard/dashboard.css +753 -0
  9. package/dashboard/dashboard.html +121 -0
  10. package/dashboard/dashboard.js +610 -0
  11. package/dashboard/data/snapshot.json +883 -0
  12. package/dashboard/debate.html +134 -0
  13. package/dashboard/factory/build-snapshot.mjs +89 -0
  14. package/dashboard/factory/factory-app.js +1185 -0
  15. package/dashboard/factory/factory-core.js +541 -0
  16. package/dashboard/factory/snapshot.js +850 -0
  17. package/dashboard/factory.html +350 -0
  18. package/dashboard/kanban-data.json +671 -0
  19. package/dashboard/kanban-source.js +643 -0
  20. package/dashboard/kanban.check.mjs +454 -0
  21. package/dashboard/kanban.html +1257 -0
  22. package/dashboard/leadership.html +1008 -0
  23. package/dashboard/lib/debate-app.js +1149 -0
  24. package/dashboard/lib/debate-core.js +698 -0
  25. package/dashboard/lib/debate-data.js +163 -0
  26. package/dashboard/lib/debate-demo.js +110 -0
  27. package/dashboard/lib/debate.css +1155 -0
  28. package/dashboard/lib/leadership-model.js +946 -0
  29. package/dashboard/probe.mjs +35 -0
  30. package/dashboard/scripts/serve.mjs +122 -0
  31. package/dashboard/scripts/snapshot-data.mjs +93 -0
  32. package/dashboard/scripts/snapshot.mjs +28 -0
  33. package/dashboard/server.mjs +242 -0
  34. package/dashboard/shot.mjs +54 -0
  35. package/dashboard/shots/desktop-gates.png +0 -0
  36. package/dashboard/shots/desktop-light.png +0 -0
  37. package/dashboard/shots/desktop-real.png +0 -0
  38. package/dashboard/shots/mobile.png +0 -0
  39. package/dashboard/test/factory-core.test.mjs +244 -0
  40. package/dashboard/tests/debate-core.test.mjs +336 -0
  41. package/dashboard/tests/leadership-model.test.mjs +404 -0
  42. package/dist/cli.js +148 -26
  43. package/dist/cli.js.map +1 -1
  44. package/dist/core/bus.js +3 -3
  45. package/dist/core/bus.js.map +1 -1
  46. package/dist/core/catalog.d.ts +9 -1
  47. package/dist/core/catalog.d.ts.map +1 -1
  48. package/dist/core/catalog.js +77 -2
  49. package/dist/core/catalog.js.map +1 -1
  50. package/dist/core/dashboard.d.ts +33 -0
  51. package/dist/core/dashboard.d.ts.map +1 -0
  52. package/dist/core/dashboard.js +115 -0
  53. package/dist/core/dashboard.js.map +1 -0
  54. package/dist/core/dispatch.d.ts +1 -1
  55. package/dist/core/dispatch.d.ts.map +1 -1
  56. package/dist/core/dispatch.js +84 -12
  57. package/dist/core/dispatch.js.map +1 -1
  58. package/dist/core/docsync.d.ts +0 -9
  59. package/dist/core/docsync.d.ts.map +1 -1
  60. package/dist/core/docsync.js +12 -15
  61. package/dist/core/docsync.js.map +1 -1
  62. package/dist/core/environment.d.ts +28 -0
  63. package/dist/core/environment.d.ts.map +1 -0
  64. package/dist/core/environment.js +80 -0
  65. package/dist/core/environment.js.map +1 -0
  66. package/dist/core/factory.d.ts +16 -0
  67. package/dist/core/factory.d.ts.map +1 -1
  68. package/dist/core/factory.js +143 -0
  69. package/dist/core/factory.js.map +1 -1
  70. package/dist/core/fsx.d.ts +20 -2
  71. package/dist/core/fsx.d.ts.map +1 -1
  72. package/dist/core/fsx.js +10 -6
  73. package/dist/core/fsx.js.map +1 -1
  74. package/dist/core/gates.d.ts +23 -1
  75. package/dist/core/gates.d.ts.map +1 -1
  76. package/dist/core/gates.js +83 -8
  77. package/dist/core/gates.js.map +1 -1
  78. package/dist/core/leases.d.ts.map +1 -1
  79. package/dist/core/leases.js +4 -1
  80. package/dist/core/leases.js.map +1 -1
  81. package/dist/core/mesa.d.ts +1 -6
  82. package/dist/core/mesa.d.ts.map +1 -1
  83. package/dist/core/mesa.js +1 -6
  84. package/dist/core/mesa.js.map +1 -1
  85. package/dist/core/office.d.ts +3 -29
  86. package/dist/core/office.d.ts.map +1 -1
  87. package/dist/core/office.js +77 -90
  88. package/dist/core/office.js.map +1 -1
  89. package/dist/core/paths.d.ts.map +1 -1
  90. package/dist/core/paths.js +6 -1
  91. package/dist/core/paths.js.map +1 -1
  92. package/dist/core/retry.d.ts +2 -8
  93. package/dist/core/retry.d.ts.map +1 -1
  94. package/dist/core/retry.js +3 -34
  95. package/dist/core/retry.js.map +1 -1
  96. package/dist/core/roster.js +3 -3
  97. package/dist/core/roster.js.map +1 -1
  98. package/dist/core/sandbox.d.ts +38 -1
  99. package/dist/core/sandbox.d.ts.map +1 -1
  100. package/dist/core/sandbox.js +119 -15
  101. package/dist/core/sandbox.js.map +1 -1
  102. package/dist/core/state.d.ts +2 -2
  103. package/dist/core/state.d.ts.map +1 -1
  104. package/dist/core/state.js +5 -33
  105. package/dist/core/state.js.map +1 -1
  106. package/dist/core/stores.d.ts +3 -13
  107. package/dist/core/stores.d.ts.map +1 -1
  108. package/dist/core/stores.js +8 -32
  109. package/dist/core/stores.js.map +1 -1
  110. package/dist/core/systemPrompt.d.ts.map +1 -1
  111. package/dist/core/systemPrompt.js +4 -1
  112. package/dist/core/systemPrompt.js.map +1 -1
  113. package/dist/core/tripwire.d.ts +22 -8
  114. package/dist/core/tripwire.d.ts.map +1 -1
  115. package/dist/core/tripwire.js +71 -26
  116. package/dist/core/tripwire.js.map +1 -1
  117. package/dist/core/types.d.ts +6 -14
  118. package/dist/core/types.d.ts.map +1 -1
  119. package/dist/core/types.js +11 -3
  120. package/dist/core/types.js.map +1 -1
  121. package/dist/hooks/scopeGuard.d.ts +15 -1
  122. package/dist/hooks/scopeGuard.d.ts.map +1 -1
  123. package/dist/hooks/scopeGuard.js +88 -73
  124. package/dist/hooks/scopeGuard.js.map +1 -1
  125. package/dist/tools/index.d.ts +9 -1
  126. package/dist/tools/index.d.ts.map +1 -1
  127. package/dist/tools/index.js +29 -81
  128. package/dist/tools/index.js.bak +972 -0
  129. package/dist/tools/index.js.map +1 -1
  130. package/dist/v1.d.ts.map +1 -1
  131. package/dist/v1.js +30 -36
  132. package/dist/v1.js.map +1 -1
  133. package/dist/v2.d.ts +5 -0
  134. package/dist/v2.d.ts.map +1 -1
  135. package/dist/v2.js +79 -46
  136. package/dist/v2.js.bak +517 -0
  137. package/dist/v2.js.map +1 -1
  138. package/docs/GARANTIAS.md +2 -2
  139. package/docs/PRUEBA-E2E.md +4 -4
  140. package/docs/QUE-ES.md +4 -5
  141. package/docs/SEGURIDAD-REPO.md +83 -0
  142. package/docs/assets/banner.svg +42 -0
  143. package/docs/catalog-facts.json +3 -3
  144. package/docs/superpowers/specs/2026-10-29-factory-skill-creator-and-remove-budget.md +182 -0
  145. package/package.json +14 -6
@@ -29,7 +29,6 @@ import fs from "node:fs/promises";
29
29
  import path from "node:path";
30
30
  import { scanCatalog } from "./catalog.js";
31
31
  import { buildTools } from "../tools/index.js";
32
- import { DEFAULT_LIMITS } from "./types.js";
33
32
  export const FACTS_BEGIN = "<!-- BEGIN GENERATED: facts -->";
34
33
  export const FACTS_END = "<!-- END GENERATED: facts -->";
35
34
  /**
@@ -65,11 +64,15 @@ export async function computeFacts(options) {
65
64
  const { projectRoot } = options;
66
65
  let packageName = "oficina-opencode";
67
66
  let version = "0.0.0";
67
+ let nodeVersion = "22";
68
68
  try {
69
69
  const raw = await fs.readFile(path.join(projectRoot, "package.json"), "utf8");
70
70
  const pkg = JSON.parse(raw);
71
71
  packageName = pkg.name ?? packageName;
72
72
  version = pkg.version ?? version;
73
+ if (pkg.engines?.node) {
74
+ nodeVersion = pkg.engines.node.replace(/^>=?/, "");
75
+ }
73
76
  }
74
77
  catch {
75
78
  // El paquete puede no estar armado todavia.
@@ -84,13 +87,14 @@ export async function computeFacts(options) {
84
87
  try {
85
88
  const agents = await scanCatalog({ root: agencyRoot });
86
89
  const divisions = [...new Set(agents.map((a) => a.division))].sort();
90
+ const sourceCommit = await readGitCommit(agencyRoot);
87
91
  catalog = {
88
92
  agents: agents.length,
89
93
  divisions: divisions.length,
90
94
  divisionList: divisions,
91
- source: agencyRoot,
95
+ source: "agency-agents",
92
96
  generatedAt: new Date().toISOString(),
93
- sourceCommit: await readGitCommit(agencyRoot),
97
+ sourceCommit,
94
98
  };
95
99
  }
96
100
  catch {
@@ -104,15 +108,7 @@ export async function computeFacts(options) {
104
108
  toolNames,
105
109
  hooks: 7,
106
110
  pluginApi: await readPluginApiVersion(projectRoot),
107
- runtime: { node: ">=20" },
108
- limits: {
109
- maxCards: DEFAULT_LIMITS.maxCards,
110
- maxAgentCalls: DEFAULT_LIMITS.maxAgentCalls,
111
- maxSpawnsTotal: DEFAULT_LIMITS.maxSpawnsTotal,
112
- maxConcurrentAgents: DEFAULT_LIMITS.maxConcurrentAgents,
113
- leaseTtlSec: DEFAULT_LIMITS.leaseTtlSec,
114
- minCatalogCoverage: DEFAULT_LIMITS.minCatalogCoverage,
115
- },
111
+ runtime: { node: `>=${nodeVersion}` },
116
112
  catalog,
117
113
  };
118
114
  }
@@ -129,13 +125,14 @@ export function renderFactsBlock(facts) {
129
125
  if (facts.catalog) {
130
126
  rows.push(`| **Catálogo** | ${facts.catalog.agents} agentes resolubles en ${facts.catalog.divisions} divisiones |`);
131
127
  rows.push(`| **Divisiones** | ${facts.catalog.divisionList.join(", ")} |`);
128
+ // Source provenance in comment for traceability
129
+ if (facts.catalog.sourceCommit) {
130
+ rows.push(`<!-- Catalog source: ${facts.catalog.source} @ ${facts.catalog.sourceCommit} -->`);
131
+ }
132
132
  }
133
133
  else {
134
134
  rows.push(`| **Catálogo** | (no se pudo escanear en esta máquina) |`);
135
135
  }
136
- rows.push(`| **Límites** | ${facts.limits.maxCards} cards · ${facts.limits.maxAgentCalls} llamadas · ` +
137
- `${facts.limits.maxSpawnsTotal} spawns · ${facts.limits.maxConcurrentAgents} agentes |`);
138
- rows.push(`| **Cobertura mínima** | ${(facts.limits.minCatalogCoverage * 100).toFixed(0)}% |`);
139
136
  return rows.join("\n");
140
137
  }
141
138
  /** Ubica el bloque generado en un texto. */
@@ -1 +1 @@
1
- {"version":3,"file":"docsync.js","sourceRoot":"","sources":["../../src/core/docsync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docsync.js","sourceRoot":"","sources":["../../src/core/docsync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Hoja de entorno: el contexto que un agente necesita para no tropezar con
3
+ * su propio runtime.
4
+ *
5
+ * ## Por qué existe
6
+ *
7
+ * En la corrida de 2026-02, los agentes despachados quemaron turnos en
8
+ * errores evitables:
9
+ *
10
+ * 1. `SyntaxError: Imports and exports aren't available` — usaron el tool
11
+ * `execute` (Code Mode) como si fuera Node normal: `import`, `export`,
12
+ * `require`. Ese runtime es un sandbox: solo hay `tools.*`, `fetch` y
13
+ * `search`.
14
+ * 2. `El token '&&' no es un separador válido` — sintaxis bash en PowerShell
15
+ * (Windows): `&&`, `||`, `mkdir -p`, `ls /c/Users/...`. PowerShell viejo
16
+ * no parsea `&&`, y `/c/...` se interpreta como carpeta `C:\c\`.
17
+ *
18
+ * La causa raíz no es incompetencia del modelo: es que el prompt de despacho
19
+ * no le dice **dónde está parado**. Esta hoja se inyecta en el prompt de cada
20
+ * agente (y en su archivo materializado) para que la primera vez ya sepa:
21
+ *
22
+ * - Qué shell corre (PowerShell en Windows) y qué sintaxis NO usar.
23
+ * - Qué reglas tiene el sandbox de Code Mode.
24
+ * - Qué hacer cuando un comando falla por sintaxis: traducir, no repetir.
25
+ */
26
+ /** Reglas de entorno, renderizadas como texto para el prompt del agente. */
27
+ export declare function renderEnvironmentSheet(): string;
28
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/core/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,4EAA4E;AAC5E,wBAAgB,sBAAsB,IAAI,MAAM,CAoD/C"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Hoja de entorno: el contexto que un agente necesita para no tropezar con
3
+ * su propio runtime.
4
+ *
5
+ * ## Por qué existe
6
+ *
7
+ * En la corrida de 2026-02, los agentes despachados quemaron turnos en
8
+ * errores evitables:
9
+ *
10
+ * 1. `SyntaxError: Imports and exports aren't available` — usaron el tool
11
+ * `execute` (Code Mode) como si fuera Node normal: `import`, `export`,
12
+ * `require`. Ese runtime es un sandbox: solo hay `tools.*`, `fetch` y
13
+ * `search`.
14
+ * 2. `El token '&&' no es un separador válido` — sintaxis bash en PowerShell
15
+ * (Windows): `&&`, `||`, `mkdir -p`, `ls /c/Users/...`. PowerShell viejo
16
+ * no parsea `&&`, y `/c/...` se interpreta como carpeta `C:\c\`.
17
+ *
18
+ * La causa raíz no es incompetencia del modelo: es que el prompt de despacho
19
+ * no le dice **dónde está parado**. Esta hoja se inyecta en el prompt de cada
20
+ * agente (y en su archivo materializado) para que la primera vez ya sepa:
21
+ *
22
+ * - Qué shell corre (PowerShell en Windows) y qué sintaxis NO usar.
23
+ * - Qué reglas tiene el sandbox de Code Mode.
24
+ * - Qué hacer cuando un comando falla por sintaxis: traducir, no repetir.
25
+ */
26
+ /** Reglas de entorno, renderizadas como texto para el prompt del agente. */
27
+ export function renderEnvironmentSheet() {
28
+ return [
29
+ "# Tu entorno de ejecución (leelo antes de ejecutar NADA)",
30
+ "",
31
+ "Estas reglas no son sugerencias: si las violás, el comando falla y quemás",
32
+ "un turno en un error que era gratis evitar.",
33
+ "",
34
+ "## Shell: PowerShell en Windows",
35
+ "",
36
+ "- Tus comandos de shell corren en **PowerShell**, no en bash.",
37
+ "",
38
+ "**NO uses (falla o hace algo distinto a lo que creés):**",
39
+ "",
40
+ "- `cmd1 && cmd2` y `cmd1 || cmd2` — PowerShell clásico no tiene estos",
41
+ " separadores. Usá comandos separados, o `if ($LASTEXITCODE ...)`.",
42
+ "- `mkdir -p x/y` — `-p` no existe. `mkdir x/y` ya crea los padres.",
43
+ "- `ls /c/Users/...` — el path `/c/...` se interpreta como carpeta `C:\\c\\`.",
44
+ " En Windows las rutas son `C:\\Users\\...` (o `/` adelante está bien,",
45
+ " pero `C:` siempre primero).",
46
+ "- `grep`, `sed`, `awk`, `head`, `tail`, `wc` — no vienen con el sistema.",
47
+ " Usá `Select-String`, `Get-Content`, `Measure-Object`.",
48
+ "- `2>&1` pegado a un comando nativo puede romper el stream. Si lo",
49
+ " necesitás, separalo del stderr real.",
50
+ "",
51
+ "**Preferí los tools dedicados antes que shell:** `read`, `glob`, `grep`,",
52
+ "`edit`, `write` hacen lo mismo con menos errores. Shell solo para lo que",
53
+ "un tool no puede: compilar, correr tests, instalar deps.",
54
+ "",
55
+ "## Code Mode (`execute`): es un sandbox, no Node",
56
+ "",
57
+ "- **NO hay `import`, `export` ni `require`.** `SyntaxError` garantizado.",
58
+ "- Solo tenés: `fetch` (HTTP), `search` (catálogo) y `tools.<namespace>.",
59
+ " <tool>({...})` con paths y firmas **exactas** del catálogo. No inventés",
60
+ " nombres de tools ni los normalices: `tools.oficina_dispatch({...})` se",
61
+ " escribe así, con corchetes si el path lo pide.",
62
+ "- No hay `setTimeout`/`sleep`. No los llames.",
63
+ "- Si el catálogo no lista un tool, ese tool no existe en el sandbox.",
64
+ "",
65
+ "## Cuando un comando falle por sintaxis",
66
+ "",
67
+ "**NO reintentés lo mismo.** Un retry idéntico produce el error idéntico.",
68
+ "El protocolo es:",
69
+ "",
70
+ "1. Leé el error: ¿es de sintaxis de shell o del sandbox?",
71
+ "2. Traducí: bash → PowerShell nativo; Node → `tools.*`.",
72
+ "3. Reintentá **una** vez con la sintaxis correcta.",
73
+ "4. Si vuelve a fallar, anotalo en tu handoff y cambiá de vía",
74
+ " (otro tool, otro comando, o HELP por el bus).",
75
+ "",
76
+ "Un error de sintaxis no es una card terminada a medias: es un turno",
77
+ "perdido. Traducí antes de repetir.",
78
+ ].join("\n");
79
+ }
80
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/core/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,0DAA0D;QAC1D,EAAE;QACF,2EAA2E;QAC3E,6CAA6C;QAC7C,EAAE;QACF,iCAAiC;QACjC,EAAE;QACF,+DAA+D;QAC/D,EAAE;QACF,0DAA0D;QAC1D,EAAE;QACF,uEAAuE;QACvE,oEAAoE;QACpE,oEAAoE;QACpE,8EAA8E;QAC9E,wEAAwE;QACxE,+BAA+B;QAC/B,0EAA0E;QAC1E,yDAAyD;QACzD,mEAAmE;QACnE,wCAAwC;QACxC,EAAE;QACF,0EAA0E;QAC1E,0EAA0E;QAC1E,0DAA0D;QAC1D,EAAE;QACF,kDAAkD;QAClD,EAAE;QACF,0EAA0E;QAC1E,yEAAyE;QACzE,2EAA2E;QAC3E,0EAA0E;QAC1E,kDAAkD;QAClD,+CAA+C;QAC/C,sEAAsE;QACtE,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,0EAA0E;QAC1E,kBAAkB;QAClB,EAAE;QACF,0DAA0D;QAC1D,yDAAyD;QACzD,oDAAoD;QACpD,8DAA8D;QAC9D,kDAAkD;QAClD,EAAE;QACF,qEAAqE;QACrE,oCAAoC;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
@@ -71,4 +71,20 @@ export declare class CandidateRegistry {
71
71
  promotable(threshold?: number): AgentCandidate[];
72
72
  all(): AgentCandidate[];
73
73
  }
74
+ /**
75
+ * Genera el slug para el archivo de agente.
76
+ * Ej: "implementador-jwt-auth" -> "implementador-jwt-auth"
77
+ * (el prefijo "oficina-" lo añade agentNameFor al registrar en OpenCode)
78
+ */
79
+ export declare function agentSlugFromRole(role: string): string;
80
+ /**
81
+ * Crea un archivo de agente persistente en `.opencode/agents/<slug>.md`.
82
+ *
83
+ * Este archivo es directamente usable por OpenCode como subagent (`@oficina-<slug>`)
84
+ * y es descubierto por el catálogo dinámico para matching futuro.
85
+ */
86
+ export declare function createPersistentAgent(projectRoot: string, input: FactoryInput): Promise<{
87
+ slug: string;
88
+ filePath: string;
89
+ }>;
74
90
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAe,aAAa,EAAE,MAAM,YAAY,CAAA;AAInE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACrD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,wBAAwB,iBAAiB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,67BA0DnC,CAAA;AAWD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CA6CtD;AAwHD,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAE/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAUtC,0DAA0D;IAC1D,UAAU,CAAC,SAAS,SAAI,GAAG,cAAc,EAAE;IAM3C,GAAG,IAAI,cAAc,EAAE;CAGxB"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAe,aAAa,EAAE,MAAM,YAAY,CAAA;AAMnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACrD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,wBAAwB,iBAAiB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,67BA0DnC,CAAA;AAWD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CA6CtD;AAwHD,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAE/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAUtC,0DAA0D;IAC1D,UAAU,CAAC,SAAS,SAAI,GAAG,cAAc,EAAE;IAM3C,GAAG,IAAI,cAAc,EAAE;CAGxB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AA6HD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB7C"}
@@ -22,6 +22,8 @@
22
22
  */
23
23
  import { capabilityTokens } from "./catalog.js";
24
24
  import { shortId } from "./fsx.js";
25
+ import { ensureDir, writeAtomic } from "./fsx.js";
26
+ import path from "node:path";
25
27
  export const FACTORY_DISPLAY_FALLBACK = "Especialista";
26
28
  /**
27
29
  * Template de un agente fabricado.
@@ -240,4 +242,145 @@ export class CandidateRegistry {
240
242
  return [...this.candidates.values()].sort((a, b) => b.uses - a.uses);
241
243
  }
242
244
  }
245
+ /**
246
+ * Genera el slug para el archivo de agente.
247
+ * Ej: "implementador-jwt-auth" -> "implementador-jwt-auth"
248
+ * (el prefijo "oficina-" lo añade agentNameFor al registrar en OpenCode)
249
+ */
250
+ export function agentSlugFromRole(role) {
251
+ return role.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
252
+ }
253
+ /**
254
+ * Genera el frontmatter YAML para el archivo de agente.
255
+ */
256
+ function generateAgentFrontmatter(displayName, description, vibe, capabilities) {
257
+ const capsYaml = capabilities.length > 0
258
+ ? "\n " + capabilities.map(c => `- ${c}`).join("\n ")
259
+ : "";
260
+ return [
261
+ "---",
262
+ `name: ${displayName}`,
263
+ `description: ${description}`,
264
+ `vibe: ${vibe}`,
265
+ `mode: subagent`,
266
+ `permission:`,
267
+ ` edit: allow`,
268
+ ` shell: allow`,
269
+ ` task: allow`,
270
+ `capabilities:${capsYaml}`,
271
+ "---",
272
+ ""
273
+ ].join("\n");
274
+ }
275
+ /**
276
+ * Genera el cuerpo del agente usando la plantilla de 10 secciones de Agency-Agents.
277
+ */
278
+ function generateAgentBody(displayName, role, capabilities, mission, failureModes, objective) {
279
+ const capabilitiesList = capabilities.join(", ") || role;
280
+ const primaryDomain = capabilities[0] || role;
281
+ const keyTechnologies = capabilities.slice(0, 5).join(", ");
282
+ const capabilityTokensStr = capabilities.join(" ");
283
+ const missionTitle = `### ${titleize(role)}`;
284
+ const missionDesc = `- Ejecutá la card asignada con foco en: ${capabilitiesList}\n- Dejá el resultado en el formato que el briefing pide: handoff y evidencia\n- Pedí ayuda en el bus en cuanto detectes que la tarea se sale de tu dominio`;
285
+ const failureModesList = failureModes.map(f => `- ${f}`).join("\n");
286
+ const objectiveSection = objective
287
+ ? `**Objetivo de la corrida:** ${objective}\n\n**Misión de tu card:** ${mission}\n`
288
+ : `**Misión de tu card:** ${mission}\n`;
289
+ const sections = [
290
+ `# ${displayName} Agent Personality`,
291
+ "",
292
+ `You are **${displayName}**, a specialist in ${capabilitiesList} focused on ${mission.toLowerCase()}.`,
293
+ "",
294
+ "## Your Identity & Memory",
295
+ "",
296
+ `- **Role**: Specialist in ${primaryDomain} with deep expertise in ${keyTechnologies}.`,
297
+ `- **Personality**: Direct, pragmatic, and detail-oriented. You prefer the simplest robust solution and state explicitly when a rule or pattern does not apply.`,
298
+ `- **Memory**: You maintain state through durable disk artifacts and communication logs. You never rely on hidden session memory.`,
299
+ `- **Experience**: Seasoned implementer with strong instincts for edge cases, error handling, and security boundaries.`,
300
+ "",
301
+ "## Your Core Mission",
302
+ "",
303
+ missionTitle,
304
+ missionDesc,
305
+ "",
306
+ "## Critical Rules You Must Follow",
307
+ "",
308
+ "1. **Scope is a hard boundary, not a suggestion.** Touch only authorized files. The engine blocks unauthorized paths.",
309
+ "2. **No evidence, no work.** A claim without real command output (`evidence.md`) is only a hypothesis.",
310
+ "3. **Never review or approve your own work.** An independent reviewer audits your code.",
311
+ "4. **Ask before guessing.** If required context is missing, request it via the office bus (`oficina_bus`).",
312
+ "5. **Acknowledge gaps explicitly.** A handoff that hides omissions is worse than one that names them.",
313
+ "",
314
+ "## Your Technical Deliverables",
315
+ "",
316
+ "- Clean, tested code strictly within the assigned scope.",
317
+ "- `handoff.md`: Clear technical summary of what was implemented, decisions made, and remaining work.",
318
+ "- `evidence.md`: Verbatim terminal output showing exit codes from tests, builds, and verification commands.",
319
+ "",
320
+ "## Your Workflow Process",
321
+ "",
322
+ "### Step 1: Understand the Terrain",
323
+ "Inspect existing codebase, read your briefing, and check dependencies and constraints before modifying any file.",
324
+ "",
325
+ "### Step 2: Decide the Approach",
326
+ "Plan the minimal changes required to satisfy acceptance criteria. Ensure backward compatibility and strict type safety.",
327
+ "",
328
+ "### Step 3: Execute Within Scope",
329
+ "Implement code incrementally. Run tests and type checks after every logical change.",
330
+ "",
331
+ "### Step 4: Verify and Hand Off",
332
+ "Execute technical gates (build, lint, test, security scan). Generate `evidence.md` and `handoff.md`, then submit with `oficina_submit`.",
333
+ "",
334
+ "## Your Communication Style",
335
+ "",
336
+ "- **Direct and concise:** State facts, decisions, and blockers without conversational filler.",
337
+ "- **Structured triage:** When receiving help requests, evaluate scope, capacity, and context before accepting or declining.",
338
+ "- **Zero ambiguity:** Always cite exact file paths and error messages.",
339
+ "",
340
+ "## Learning & Memory",
341
+ "",
342
+ "Remember and build rigor in:",
343
+ ...failureModesList.split("\n"),
344
+ "",
345
+ "## Your Success Metrics",
346
+ "",
347
+ "You are successful when:",
348
+ "1. All assigned card acceptance criteria are satisfied with verifiable evidence.",
349
+ "2. The project compiles, typechecks, and passes all tests with exit code 0.",
350
+ "3. No out-of-scope files or secrets are touched.",
351
+ "",
352
+ "## Advanced Capabilities",
353
+ "",
354
+ capabilityTokensStr,
355
+ "",
356
+ "## Context of This Run",
357
+ "",
358
+ objectiveSection,
359
+ ];
360
+ return sections.join("\n");
361
+ }
362
+ /**
363
+ * Crea un archivo de agente persistente en `.opencode/agents/<slug>.md`.
364
+ *
365
+ * Este archivo es directamente usable por OpenCode como subagent (`@oficina-<slug>`)
366
+ * y es descubierto por el catálogo dinámico para matching futuro.
367
+ */
368
+ export async function createPersistentAgent(projectRoot, input) {
369
+ const displayName = input.displayName ?? titleize(input.role);
370
+ const capabilities = input.capabilities.length > 0
371
+ ? input.capabilities
372
+ : [...capabilityTokens(input.role)];
373
+ const mission = input.mission ?? `Resolver el trabajo que se te asigne en esta corrida.`;
374
+ const failureModes = input.failureModes ?? defaultFailureModes(input.role);
375
+ const slug = agentSlugFromRole(input.role);
376
+ const agentsDir = path.join(projectRoot, ".opencode", "agents");
377
+ await ensureDir(agentsDir);
378
+ const filePath = path.join(agentsDir, `${slug}.md`);
379
+ const description = `${displayName} — ${capabilities.slice(0, 5).join(", ") || "especialista de la oficina"}`;
380
+ const vibe = `Rol fabricado para esta corrida: ${capabilities.slice(0, 3).join(", ")}.`;
381
+ const frontmatter = generateAgentFrontmatter(displayName, description, vibe, capabilities);
382
+ const body = generateAgentBody(displayName, input.role, capabilities, mission, failureModes, input.objective);
383
+ await writeAtomic(filePath, `${frontmatter}${body}\n`);
384
+ return { slug, filePath };
385
+ }
243
386
  //# sourceMappingURL=factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"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"}
@@ -12,12 +12,30 @@ export declare function writeAtomic(filePath: string, contents: string): Promise
12
12
  /** Escribe JSON de forma atómica, con newline final. */
13
13
  export declare function writeJsonAtomic(filePath: string, value: unknown): Promise<void>;
14
14
  /**
15
- * Lee JSON. Devuelve `undefined` si el archivo no existe o está corrupto.
15
+ * Lee JSON. Devuelve un resultado que distingue:
16
+ * - { ok: true, value: T } si el archivo existe y es JSON válido
17
+ * - { ok: false, kind: "not-found" } si el archivo no existe
18
+ * - { ok: false, kind: "corrupt", error: Error } si el archivo existe pero es JSON inválido
19
+ * - { ok: false, kind: "error", error: Error } para otros errores de I/O
16
20
  *
17
21
  * Un archivo corrupto no debe tumbar la corrida: se loguea y se sigue con lo
18
22
  * que hubiera. Perder un artefacto es malo; perder la oficina entera es peor.
19
23
  */
20
- export declare function readJson<T>(filePath: string): Promise<T | undefined>;
24
+ export declare function readJson<T>(filePath: string): Promise<{
25
+ ok: true;
26
+ value: T;
27
+ } | {
28
+ ok: false;
29
+ kind: "not-found";
30
+ } | {
31
+ ok: false;
32
+ kind: "corrupt";
33
+ error: Error;
34
+ } | {
35
+ ok: false;
36
+ kind: "error";
37
+ error: Error;
38
+ }>;
21
39
  /** Lee texto. Devuelve `undefined` si no existe. */
22
40
  export declare function readText(filePath: string): Promise<string | undefined>;
23
41
  /** Existe sin lanzar. */
@@ -1 +1 @@
1
- {"version":3,"file":"fsx.d.ts","sourceRoot":"","sources":["../../src/core/fsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,yDAAyD;AACzD,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnF;AAED,wDAAwD;AACxD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAoB1E;AAED,oDAAoD;AACpD,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO5E;AAED,yBAAyB;AACzB,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,uDAAuD;AACvD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,mEAAmE;AACnE,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOlE;AAED,yEAAyE;AACzE,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQjE;AAED,oCAAoC;AACpC,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED,qCAAqC;AACrC,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,4CAA4C;AAC5C,wBAAgB,MAAM,CAAC,KAAK,GAAE,MAAM,MAAiB,GAAG,MAAM,CAE7D"}
1
+ {"version":3,"file":"fsx.d.ts","sourceRoot":"","sources":["../../src/core/fsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,yDAAyD;AACzD,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnF;AAED,wDAAwD;AACxD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CACxD;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAC7C,CAoBA;AAED,oDAAoD;AACpD,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO5E;AAED,yBAAyB;AACzB,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,uDAAuD;AACvD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,mEAAmE;AACnE,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOlE;AAED,yEAAyE;AACzE,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQjE;AAED,oCAAoC;AACpC,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED,qCAAqC;AACrC,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,4CAA4C;AAC5C,wBAAgB,MAAM,CAAC,KAAK,GAAE,MAAM,MAAiB,GAAG,MAAM,CAE7D"}
package/dist/core/fsx.js CHANGED
@@ -29,7 +29,11 @@ export async function writeJsonAtomic(filePath, value) {
29
29
  await writeAtomic(filePath, `${JSON.stringify(value, null, 2)}\n`);
30
30
  }
31
31
  /**
32
- * Lee JSON. Devuelve `undefined` si el archivo no existe o está corrupto.
32
+ * Lee JSON. Devuelve un resultado que distingue:
33
+ * - { ok: true, value: T } si el archivo existe y es JSON válido
34
+ * - { ok: false, kind: "not-found" } si el archivo no existe
35
+ * - { ok: false, kind: "corrupt", error: Error } si el archivo existe pero es JSON inválido
36
+ * - { ok: false, kind: "error", error: Error } para otros errores de I/O
33
37
  *
34
38
  * Un archivo corrupto no debe tumbar la corrida: se loguea y se sigue con lo
35
39
  * que hubiera. Perder un artefacto es malo; perder la oficina entera es peor.
@@ -37,12 +41,12 @@ export async function writeJsonAtomic(filePath, value) {
37
41
  export async function readJson(filePath) {
38
42
  try {
39
43
  const raw = await fs.readFile(filePath, "utf8");
40
- return JSON.parse(raw);
44
+ return { ok: true, value: JSON.parse(raw) };
41
45
  }
42
46
  catch (err) {
43
47
  const code = err.code;
44
48
  if (code === "ENOENT")
45
- return undefined;
49
+ return { ok: false, kind: "not-found" };
46
50
  if (err instanceof SyntaxError) {
47
51
  // Un archivo vacio casi siempre es una escritura en curso (otro
48
52
  // proceso lo esta creando), no corrupcion. Ponerlo en cuarentena
@@ -50,12 +54,12 @@ export async function readJson(filePath) {
50
54
  // Un archivo con contenido que no parsea SI es corrupcion.
51
55
  const raw = await fs.readFile(filePath, "utf8").catch(() => "");
52
56
  if (raw.trim().length === 0)
53
- return undefined;
57
+ return { ok: false, kind: "not-found" };
54
58
  const quarantine = `${filePath}.corrupt-${Date.now()}`;
55
59
  await fs.rename(filePath, quarantine).catch(() => { });
56
- return undefined;
60
+ return { ok: false, kind: "corrupt", error: new Error(`JSON corrupto en ${filePath}: ${String(err)}`) };
57
61
  }
58
- throw err;
62
+ return { ok: false, kind: "error", error: err };
59
63
  }
60
64
  }
61
65
  /** Lee texto. Devuelve `undefined` si no existe. */
@@ -1 +1 @@
1
- {"version":3,"file":"fsx.js","sourceRoot":"","sources":["../../src/core/fsx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fsx.js","sourceRoot":"","sources":["../../src/core/fsx.ts"],"names":[],"mappings":"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"}
@@ -91,12 +91,34 @@ export declare function runSecurityGate(projectRoot: string, scope: string[], _r
91
91
  * build, typecheck, lint, test y seguridad esten en verde.
92
92
  */
93
93
  export declare function consolidate(cardId: string, technical: GatePhaseResult[], security: GatePhaseResult[], requirements?: GatePhaseResult[]): GateResult;
94
+ /** Motivo canónico de un gate de tests verde pero vacío. */
95
+ export declare const EMPTY_TEST_GATE_REASON = "Gate verde vac\u00EDo: la fase test sali\u00F3 con exit 0 pero no ejecut\u00F3 ning\u00FAn test (no hay conteo legible en la salida).";
96
+ /**
97
+ * Degrada una fase de test `pass` a `not_run` si no corrió ningún test.
98
+ *
99
+ * Por qué `not_run` y no `fail`: no falló nada, pero tampoco se probó nada.
100
+ * Decir PASS sería mentir y decir FAIL inventaría un rojo. `not_run` es la
101
+ * única etiqueta honesta, y `consolidate` la propaga como veredicto no verde.
102
+ *
103
+ * Se conserva el `exitCode` real (0) y la `output` real: la evidencia de lo
104
+ * que pasó no se reescribe, solo se corrige la clasificación.
105
+ */
106
+ export declare function guardEmptyTestPhase(result: GatePhaseResult): GatePhaseResult;
107
+ /**
108
+ * Corre una fase de tests aplicando el guard anti-gate-verde-vacío.
109
+ *
110
+ * Único punto de entrada para ejecutar tests en los gates técnicos: la
111
+ * oficina (`Office.runGates`) hereda el guard sin duplicar lógica.
112
+ */
113
+ export declare function runTestPhase(command: string, args: string[], cwd: string, runner?: CommandRunner): Promise<GatePhaseResult>;
94
114
  /**
95
115
  * ¿La fase de tests corrió y pasó con al menos un test?
96
116
  *
97
117
  * Un gate que pasa con cero tests es un gate verde vacío. Los runners
98
118
  * imprimen el conteo en formatos distintos ("# tests 5", "5 passed",
99
- * "Tests: 5"), así que se buscan ambos órdenes.
119
+ * "Tests: 5"), así que se buscan ambos órdenes. Para `go test` se reconoce
120
+ * el formato por ecosistema (líneas `ok <paquete>`), porque no hay conteo
121
+ * numérico: ver `goTestsActuallyRan`.
100
122
  */
101
123
  export declare function testsActuallyRan(technical: GatePhaseResult[]): boolean;
102
124
  /** Renderiza el gate como markdown para el artefacto. */
@@ -1 +1 @@
1
- {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../src/core/gates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../src/core/gates.ts"],"names":[],"mappings":"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"}