oficina-opencode 0.0.0-stage → 2.0.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 (117) hide show
  1. package/DESIGN.md +145 -0
  2. package/LICENSE +21 -0
  3. package/README.md +670 -2
  4. package/agents/oficina-architect.md +72 -0
  5. package/agents/oficina-commander.md +108 -0
  6. package/agents/oficina-critico.md +148 -0
  7. package/agents/oficina-director.md +160 -0
  8. package/agents/oficina-guardian.md +128 -0
  9. package/agents/oficina-integrator.md +98 -0
  10. package/agents/oficina-verificador.md +88 -0
  11. package/commands/oficina.md +36 -0
  12. package/dist/cli.d.ts +12 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +394 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/core/briefing.d.ts +115 -0
  17. package/dist/core/briefing.d.ts.map +1 -0
  18. package/dist/core/briefing.js +410 -0
  19. package/dist/core/briefing.js.map +1 -0
  20. package/dist/core/bus.d.ts +132 -0
  21. package/dist/core/bus.d.ts.map +1 -0
  22. package/dist/core/bus.js +250 -0
  23. package/dist/core/bus.js.map +1 -0
  24. package/dist/core/catalog.d.ts +303 -0
  25. package/dist/core/catalog.d.ts.map +1 -0
  26. package/dist/core/catalog.js +816 -0
  27. package/dist/core/catalog.js.map +1 -0
  28. package/dist/core/dispatch.d.ts +110 -0
  29. package/dist/core/dispatch.d.ts.map +1 -0
  30. package/dist/core/dispatch.js +301 -0
  31. package/dist/core/dispatch.js.map +1 -0
  32. package/dist/core/factory.d.ts +74 -0
  33. package/dist/core/factory.d.ts.map +1 -0
  34. package/dist/core/factory.js +243 -0
  35. package/dist/core/factory.js.map +1 -0
  36. package/dist/core/fsx.d.ts +39 -0
  37. package/dist/core/fsx.d.ts.map +1 -0
  38. package/dist/core/fsx.js +113 -0
  39. package/dist/core/fsx.js.map +1 -0
  40. package/dist/core/gates.d.ts +97 -0
  41. package/dist/core/gates.d.ts.map +1 -0
  42. package/dist/core/gates.js +467 -0
  43. package/dist/core/gates.js.map +1 -0
  44. package/dist/core/leases.d.ts +46 -0
  45. package/dist/core/leases.d.ts.map +1 -0
  46. package/dist/core/leases.js +94 -0
  47. package/dist/core/leases.js.map +1 -0
  48. package/dist/core/log.d.ts +30 -0
  49. package/dist/core/log.d.ts.map +1 -0
  50. package/dist/core/log.js +43 -0
  51. package/dist/core/log.js.map +1 -0
  52. package/dist/core/mesa.d.ts +82 -0
  53. package/dist/core/mesa.d.ts.map +1 -0
  54. package/dist/core/mesa.js +178 -0
  55. package/dist/core/mesa.js.map +1 -0
  56. package/dist/core/office.d.ts +208 -0
  57. package/dist/core/office.d.ts.map +1 -0
  58. package/dist/core/office.js +618 -0
  59. package/dist/core/office.js.map +1 -0
  60. package/dist/core/paths.d.ts +67 -0
  61. package/dist/core/paths.d.ts.map +1 -0
  62. package/dist/core/paths.js +136 -0
  63. package/dist/core/paths.js.map +1 -0
  64. package/dist/core/retry.d.ts +41 -0
  65. package/dist/core/retry.d.ts.map +1 -0
  66. package/dist/core/retry.js +86 -0
  67. package/dist/core/retry.js.map +1 -0
  68. package/dist/core/roster.d.ts +47 -0
  69. package/dist/core/roster.d.ts.map +1 -0
  70. package/dist/core/roster.js +146 -0
  71. package/dist/core/roster.js.map +1 -0
  72. package/dist/core/router.d.ts +67 -0
  73. package/dist/core/router.d.ts.map +1 -0
  74. package/dist/core/router.js +186 -0
  75. package/dist/core/router.js.map +1 -0
  76. package/dist/core/state.d.ts +89 -0
  77. package/dist/core/state.d.ts.map +1 -0
  78. package/dist/core/state.js +303 -0
  79. package/dist/core/state.js.map +1 -0
  80. package/dist/core/types.d.ts +333 -0
  81. package/dist/core/types.d.ts.map +1 -0
  82. package/dist/core/types.js +27 -0
  83. package/dist/core/types.js.map +1 -0
  84. package/dist/hooks/compacting.d.ts +18 -0
  85. package/dist/hooks/compacting.d.ts.map +1 -0
  86. package/dist/hooks/compacting.js +72 -0
  87. package/dist/hooks/compacting.js.map +1 -0
  88. package/dist/hooks/scopeGuard.d.ts +39 -0
  89. package/dist/hooks/scopeGuard.d.ts.map +1 -0
  90. package/dist/hooks/scopeGuard.js +114 -0
  91. package/dist/hooks/scopeGuard.js.map +1 -0
  92. package/dist/hooks/sessionIdle.d.ts +35 -0
  93. package/dist/hooks/sessionIdle.d.ts.map +1 -0
  94. package/dist/hooks/sessionIdle.js +110 -0
  95. package/dist/hooks/sessionIdle.js.map +1 -0
  96. package/dist/hooks/systemTransform.d.ts +18 -0
  97. package/dist/hooks/systemTransform.d.ts.map +1 -0
  98. package/dist/hooks/systemTransform.js +63 -0
  99. package/dist/hooks/systemTransform.js.map +1 -0
  100. package/dist/index.d.ts +36 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +103 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/tools/index.d.ts +22 -0
  105. package/dist/tools/index.d.ts.map +1 -0
  106. package/dist/tools/index.js +854 -0
  107. package/dist/tools/index.js.map +1 -0
  108. package/docs/ARCHITECTURE.md +258 -0
  109. package/docs/QUE-ES.md +337 -0
  110. package/examples/opencode.json +7 -0
  111. package/package.json +81 -4
  112. package/skills/oficina/README.md +120 -0
  113. package/skills/oficina/SKILL.md +251 -0
  114. package/skills/oficina/reference/mesh.md +345 -0
  115. package/skills/oficina/reference/protocol.md +342 -0
  116. package/skills/oficina/reference/roles.md +171 -0
  117. package/skills/oficina/reference/templates.md +278 -0
@@ -0,0 +1,618 @@
1
+ /**
2
+ * Office: la fachada que amarra los módulos.
3
+ *
4
+ * Es el único objeto que las tools y los hooks tocan. Encapsula paths, bus,
5
+ * roster, leases, state, catálogo y límites. Si algo necesita tocar dos
6
+ * módulos a la vez, pasa por acá.
7
+ */
8
+ import path from "node:path";
9
+ import { DEFAULT_LIMITS } from "./types.js";
10
+ import { Bus, CHANNELS } from "./bus.js";
11
+ import { RosterStore } from "./roster.js";
12
+ import { LeaseStore } from "./leases.js";
13
+ import { createRun, transitionCard, assertInvariants, selectNextCard, migrateState } from "./state.js";
14
+ import { createFicha, CandidateRegistry } from "./factory.js";
15
+ import { scanCatalog, resolveRole, rankCandidates } from "./catalog.js";
16
+ import { buildBriefing as buildBriefingContext, renderBriefing, } from "./briefing.js";
17
+ import { routeCard, routeHelp, ownerStreak } from "./router.js";
18
+ import { decideRetry, recordRejection, recordApproval, consumeAgentCall } from "./retry.js";
19
+ import { detectTooling, runTechnicalGates, runSecurityGate, consolidate } from "./gates.js";
20
+ import { ensureDir, exists, nowIso, readJson, shortId, writeJsonAtomic, writeAtomic } from "./fsx.js";
21
+ import { cardDir, resolvePaths } from "./paths.js";
22
+ import { logger } from "./log.js";
23
+ const log = logger("oficina");
24
+ export class Office {
25
+ options;
26
+ paths;
27
+ limits;
28
+ bus;
29
+ rosterStore;
30
+ leases;
31
+ candidates = new CandidateRegistry();
32
+ catalogCache = null;
33
+ toolingCache = null;
34
+ constructor(options) {
35
+ this.options = options;
36
+ this.limits = options.limits ?? DEFAULT_LIMITS;
37
+ // `resolvePaths` es async; se resuelve en `init()`.
38
+ this.paths = {
39
+ projectRoot: path.resolve(options.cwd),
40
+ officeDir: path.join(path.resolve(options.cwd), ".oficina"),
41
+ busDir: path.join(path.resolve(options.cwd), ".oficina", "bus"),
42
+ inboxDir: path.join(path.resolve(options.cwd), ".oficina", "inbox"),
43
+ leasesDir: path.join(path.resolve(options.cwd), ".oficina", "leases"),
44
+ artifactsDir: path.join(path.resolve(options.cwd), ".oficina", "artifacts"),
45
+ fichasDir: path.join(path.resolve(options.cwd), ".oficina", "fichas"),
46
+ rosterPath: path.join(path.resolve(options.cwd), ".oficina", "roster.json"),
47
+ statePath: path.join(path.resolve(options.cwd), ".oficina", "state.json"),
48
+ contextPath: path.join(path.resolve(options.cwd), ".oficina", "context.md"),
49
+ boardPath: path.join(path.resolve(options.cwd), ".oficina", "board.md"),
50
+ configPath: path.join(path.resolve(options.cwd), ".oficina", "config.json"),
51
+ fallback: false,
52
+ };
53
+ this.bus = new Bus(this.paths, { ttlSec: this.limits.msgTtlSec, clock: options.clock });
54
+ this.rosterStore = new RosterStore(this.paths.rosterPath, options.clock);
55
+ this.leases = new LeaseStore(this.paths.leasesDir, this.limits, options.clock);
56
+ }
57
+ /** Resuelve paths reales y crea la estructura. */
58
+ async init() {
59
+ const resolved = await resolvePaths(this.options.cwd);
60
+ Object.assign(this.paths, resolved);
61
+ this.bus = new Bus(this.paths, {
62
+ ttlSec: this.limits.msgTtlSec,
63
+ clock: this.options.clock,
64
+ });
65
+ this.rosterStore = new RosterStore(this.paths.rosterPath, this.options.clock);
66
+ this.leases = new LeaseStore(this.paths.leasesDir, this.limits, this.options.clock);
67
+ await ensureDir(this.paths.officeDir);
68
+ await ensureDir(this.paths.busDir);
69
+ await ensureDir(this.paths.inboxDir);
70
+ await ensureDir(this.paths.leasesDir);
71
+ await ensureDir(this.paths.artifactsDir);
72
+ await ensureDir(this.paths.fichasDir);
73
+ }
74
+ // ───────────────────────────────────────────────────────────────────────────
75
+ // State
76
+ // ───────────────────────────────────────────────────────────────────────────
77
+ /** Carga o crea el estado de la corrida. Migra v1 → v2 si hace falta. */
78
+ async loadState(objective) {
79
+ const existing = await readJson(this.paths.statePath);
80
+ if (existing) {
81
+ const migrated = migrateState(existing, this.limits);
82
+ if (migrated) {
83
+ // Si venía de v1, se persiste en v2 para no migrar cada vez.
84
+ if (migrated.version !== 2 || existing.version !== 2) {
85
+ await this.saveState(migrated);
86
+ }
87
+ return migrated;
88
+ }
89
+ }
90
+ const state = createRun(objective ?? "", shortId("run"), this.limits);
91
+ await this.saveState(state);
92
+ return state;
93
+ }
94
+ async saveState(state) {
95
+ await writeJsonAtomic(this.paths.statePath, state);
96
+ }
97
+ async loadRoster(runId) {
98
+ return this.rosterStore.load(runId);
99
+ }
100
+ async saveRoster(roster) {
101
+ await this.rosterStore.save(roster);
102
+ }
103
+ // ───────────────────────────────────────────────────────────────────────────
104
+ // Catálogo y fichas
105
+ // ───────────────────────────────────────────────────────────────────────────
106
+ /** Catálogo de agency-agents (cacheado). */
107
+ async catalog() {
108
+ if (this.catalogCache)
109
+ return this.catalogCache;
110
+ if (this.options.catalog) {
111
+ this.catalogCache = this.options.catalog;
112
+ return this.catalogCache;
113
+ }
114
+ const root = this.options.agencyRoot ?? this.defaultAgencyRoot();
115
+ if (!root) {
116
+ this.catalogCache = [];
117
+ return this.catalogCache;
118
+ }
119
+ try {
120
+ this.catalogCache = await scanCatalog({ root });
121
+ }
122
+ catch (err) {
123
+ log.warn("no se pudo escanear el catálogo", { root, error: String(err) });
124
+ this.catalogCache = [];
125
+ }
126
+ return this.catalogCache;
127
+ }
128
+ defaultAgencyRoot() {
129
+ const candidates = [
130
+ path.join(this.paths.projectRoot, "agency-agents"),
131
+ path.join(process.env.HOME ?? process.env.USERPROFILE ?? "", "agency-agents"),
132
+ ];
133
+ return candidates.find((c) => exists(c));
134
+ }
135
+ /**
136
+ * Resuelve un rol a una ficha.
137
+ *
138
+ * Catálogo primero; si la cobertura es baja, factory. El resultado queda
139
+ * registrado en el roster como agente desplegado.
140
+ */
141
+ async resolveFicha(input) {
142
+ const catalog = await this.catalog();
143
+ const { match, needsFactory, panel } = resolveRole(catalog, input.capabilities, this.limits.minCatalogCoverage);
144
+ const alternatives = rankCandidates(catalog, input.capabilities, 5).filter((m) => m.agent.slug !== match?.agent.slug);
145
+ if (match && !needsFactory) {
146
+ const ficha = {
147
+ id: shortId("e"),
148
+ role: match.agent.slug,
149
+ displayName: match.agent.displayName,
150
+ source: {
151
+ kind: "agency-agents",
152
+ division: match.agent.division,
153
+ path: match.agent.path,
154
+ sourcePrompt: match.agent.sourcePrompt,
155
+ vibe: match.agent.vibe,
156
+ missions: match.agent.missions,
157
+ deliverables: match.agent.deliverables,
158
+ rules: match.agent.rules,
159
+ },
160
+ // Las capabilities vienen del cuerpo del agente, no del nombre: son
161
+ // su especialidad real (Core Mission + Advanced + Deliverables).
162
+ capabilities: match.agent.capabilities.slice(0, 24),
163
+ tools: ["read", "glob", "grep", "edit", "write", "bash"],
164
+ scope: {
165
+ mayTouch: input.scope?.mayTouch ?? ["**"],
166
+ forbidden: input.scope?.forbidden ?? ["**/*.env", "**/*.env.*"],
167
+ },
168
+ canDelegate: input.canDelegate ?? false,
169
+ delegateBudget: input.delegateBudget ?? 0,
170
+ peers: input.peers ?? [],
171
+ mustNot: [
172
+ "no editar archivos fuera de may_touch",
173
+ "no tocar archivos de forbidden",
174
+ "no aprobar tu propio trabajo",
175
+ ],
176
+ onFinish: "idle-join",
177
+ escalateTo: "integrator",
178
+ };
179
+ return { ficha, source: "agency-agents", coverage: match.coverage, match, alternatives, panel };
180
+ }
181
+ const ficha = createFicha({
182
+ role: input.role,
183
+ displayName: input.role,
184
+ capabilities: input.capabilities,
185
+ scope: input.scope,
186
+ canDelegate: input.canDelegate,
187
+ delegateBudget: input.delegateBudget,
188
+ peers: input.peers,
189
+ objective: input.objective,
190
+ mission: input.mission,
191
+ });
192
+ this.candidates.record(ficha.role, nowIso(this.options.clock));
193
+ return { ficha, source: "factory", coverage: match?.coverage ?? 0, match, alternatives, panel };
194
+ }
195
+ /**
196
+ * Arranca un subagente.
197
+ *
198
+ * Usa `session.prompt` con una parte `subtask`: es la vía que OpenCode
199
+ * provee para crear un subagente real, con su prompt de sistema y su
200
+ * contexto propio.
201
+ *
202
+ * El `agent` que se pasa es `"general"`, y el specialty viaja completo en el
203
+ * prompt. La razón es práctica: OpenCode arma la lista de agentes al
204
+ * arrancar la sesión, así que un `.opencode/agents/oficina-<slug>.md`
205
+ * recién creado puede no estar registrable todavía. Con el prompt embebido
206
+ * el agente funciona siempre.
207
+ */
208
+ async spawnAgent(sessionID, agentName, prompt, description) {
209
+ const client = this.options.client;
210
+ if (!client)
211
+ return false;
212
+ try {
213
+ await client.session.prompt({
214
+ path: { id: sessionID },
215
+ body: {
216
+ parts: [
217
+ {
218
+ type: "subtask",
219
+ prompt,
220
+ description: description || `Oficina: ${agentName}`,
221
+ agent: "general",
222
+ },
223
+ ],
224
+ },
225
+ });
226
+ return true;
227
+ }
228
+ catch (err) {
229
+ log.warn("no se pudo arrancar el subagente", { agent: agentName, error: String(err) });
230
+ return false;
231
+ }
232
+ }
233
+ /**
234
+ * Construye el briefing de un agente para una card.
235
+ *
236
+ * El briefing es el contrato de información: qué sabe, qué no, qué tiene
237
+ * que entregar y a quién escalar. Se valida antes de usarlo — si le falta
238
+ * una sección requerida, el agente no arranca.
239
+ *
240
+ * El contexto sale del ledger de la corrida (`.oficina/context.md`), que
241
+ * es lo que evita que un agente repita lo que ya se decidió.
242
+ */
243
+ buildBriefing(ficha, card, roster, state) {
244
+ const peers = roster
245
+ ? Object.values(roster.agents).filter((a) => a.id !== ficha.id && a.state !== "retired")
246
+ : [];
247
+ const context = state?.context;
248
+ return buildBriefingContext({
249
+ ficha,
250
+ card,
251
+ objective: state?.objective || card.title,
252
+ knownDecisions: context?.decisions,
253
+ knownConstraints: context?.constraints,
254
+ builtPieces: context?.pieces,
255
+ knownTraps: context?.traps,
256
+ openQuestions: context?.open,
257
+ peers,
258
+ coordinatorId: ficha.escalateTo,
259
+ });
260
+ }
261
+ /**
262
+ * Despliega un agente: lo registra en el roster y escribe su briefing.
263
+ *
264
+ * El briefing se materializa en 4 archivos: `ficha.md`, `misiones.md`,
265
+ * `protocolo.md` y `bus.md`. El agente **no arranca sin `misiones.md`**.
266
+ */
267
+ async deploy(ficha, card, roster, state) {
268
+ const currentRoster = roster ?? (await this.loadRoster(ficha.id));
269
+ const entry = await this.rosterStore.upsert(currentRoster, ficha, "deployed");
270
+ await this.saveRoster(currentRoster);
271
+ const dir = path.join(this.paths.fichasDir, ficha.id);
272
+ await ensureDir(dir);
273
+ const target = card ?? PLACEHOLDER_CARD(ficha.id);
274
+ const briefing = this.buildBriefing(ficha, target, currentRoster, state);
275
+ for (const artifact of briefing.artifacts) {
276
+ await writeAtomic(path.join(dir, artifact.filename), artifact.content);
277
+ }
278
+ await writeAtomic(path.join(dir, "briefing.md"), renderBriefing(briefing));
279
+ entry.fichaPath = path.join(dir, "ficha.md");
280
+ await this.saveRoster(currentRoster);
281
+ return entry;
282
+ }
283
+ // ───────────────────────────────────────────────────────────────────────────
284
+ // Cards
285
+ // ───────────────────────────────────────────────────────────────────────────
286
+ /** Valida y persiste un plan propuesto por el modelo. */
287
+ async savePlan(state, cards) {
288
+ const assigned = [];
289
+ for (const [index, raw] of cards.entries()) {
290
+ const id = raw.id ?? `T-${String(index).padStart(2, "0")}`;
291
+ const card = {
292
+ id,
293
+ title: raw.title,
294
+ type: raw.type,
295
+ state: "todo",
296
+ owner: null,
297
+ reviewer: null,
298
+ requiredCapabilities: raw.requiredCapabilities ?? [],
299
+ scope: {
300
+ mayTouch: raw.scope?.mayTouch ?? ["**"],
301
+ forbidden: raw.scope?.forbidden ?? ["**/*.env", "**/*.env.*"],
302
+ },
303
+ acceptance: raw.acceptance,
304
+ gate: raw.gate,
305
+ dependsOn: raw.dependsOn ?? [],
306
+ attempts: 0,
307
+ rejections: 0,
308
+ artifacts: path.join(".oficina", "artifacts", id),
309
+ result: null,
310
+ helpRequests: [],
311
+ helpHops: 0,
312
+ };
313
+ state.cards[id] = card;
314
+ state.order.push(id);
315
+ assigned.push(card);
316
+ }
317
+ // Routing determinista de owner y reviewer.
318
+ const roster = await this.loadRoster(state.runId);
319
+ const catalog = await this.catalog();
320
+ for (const card of assigned) {
321
+ const streak = ownerStreak(state.cards, state.order, "", card.type);
322
+ const route = routeCard(card, roster, catalog, { ownerStreak: streak });
323
+ card.owner = route.owner?.id ?? null;
324
+ card.reviewer = route.reviewer?.id ?? null;
325
+ if (route.reason) {
326
+ state.decisions.push({
327
+ at: nowIso(this.options.clock),
328
+ cardId: card.id,
329
+ decision: "approved",
330
+ reason: `routing: ${route.reason}`,
331
+ actor: "integrator",
332
+ });
333
+ }
334
+ }
335
+ state.budget.cardsUsed = assigned.length;
336
+ state.status = "running";
337
+ await this.saveState(state);
338
+ await this.saveRoster(roster);
339
+ return state;
340
+ }
341
+ /** Elige y reclama la próxima card para un agente dado. */
342
+ async claimNext(state, agentId, sessionId) {
343
+ const next = selectNextCard(state);
344
+ if (!next.card)
345
+ return { card: null, reason: next.reason };
346
+ const card = next.card;
347
+ const lease = await this.leases.acquire(card.id, agentId);
348
+ if (!lease)
349
+ return { card: null, reason: `la card ${card.id} ya está tomada por otro agente` };
350
+ const roster = await this.loadRoster(state.runId);
351
+ this.rosterStore.assign(roster, agentId, card.id);
352
+ await this.saveRoster(roster);
353
+ transitionCard(state, card.id, "in_progress", { owner: agentId });
354
+ consumeAgentCall(state);
355
+ if (sessionId)
356
+ this.bindSession(state, sessionId, agentId, card.id);
357
+ await this.saveState(state);
358
+ await this.bus.send(CHANNELS.flow, {
359
+ from: agentId,
360
+ to: ["integrator"],
361
+ kind: "CLAIM",
362
+ subject: card.id,
363
+ body: { card: card.id, title: card.title },
364
+ idempotencyKey: `claim:${card.id}:${agentId}:${card.attempts}`,
365
+ });
366
+ return { card, reason: next.reason };
367
+ }
368
+ /** Asocia una sesión con un agente y una card. Lo usa el guard de scope. */
369
+ bindSession(state, sessionId, agentId, cardId) {
370
+ const existing = state.sessions[sessionId];
371
+ state.sessions[sessionId] = {
372
+ agentId,
373
+ cardId,
374
+ updatedAt: nowIso(this.options.clock),
375
+ autoResumes: existing?.autoResumes ?? 0,
376
+ };
377
+ }
378
+ /** Card en curso de una sesión. */
379
+ sessionCard(state, sessionId) {
380
+ const binding = state.sessions[sessionId];
381
+ if (!binding?.cardId)
382
+ return undefined;
383
+ return state.cards[binding.cardId];
384
+ }
385
+ /** Reclama una card específica (claim proactivo del pool idle). */
386
+ async claimCard(state, agentId, cardId, sessionId) {
387
+ const card = state.cards[cardId];
388
+ if (!card)
389
+ return { ok: false, reason: `no existe la card ${cardId}` };
390
+ // El lease se verifica PRIMERO: un doble claim es el diagnóstico más
391
+ // específico y el más común.
392
+ const lease = await this.leases.acquire(cardId, agentId);
393
+ if (!lease)
394
+ return { ok: false, reason: `la card ${cardId} ya está tomada por otro agente` };
395
+ // Una card se puede reclamar si está pendiente de trabajo. El `rework`
396
+ // cuenta: es trabajo pendiente, y es el más urgente de todos.
397
+ if (card.state !== "todo" && card.state !== "rework" && card.state !== "in_progress") {
398
+ await this.leases.release(cardId, agentId);
399
+ return {
400
+ ok: false,
401
+ reason: `la card ${cardId} está en estado ${card.state}, no se puede reclamar`,
402
+ };
403
+ }
404
+ const roster = await this.loadRoster(state.runId);
405
+ this.rosterStore.assign(roster, agentId, cardId);
406
+ await this.saveRoster(roster);
407
+ if (card.state !== "in_progress") {
408
+ transitionCard(state, cardId, "in_progress", { owner: agentId });
409
+ }
410
+ else {
411
+ card.owner = agentId;
412
+ }
413
+ consumeAgentCall(state);
414
+ if (sessionId)
415
+ this.bindSession(state, sessionId, agentId, cardId);
416
+ await this.saveState(state);
417
+ return { ok: true, reason: `card ${cardId} reclamada` };
418
+ }
419
+ /** Envía el trabajo de una card a review. */
420
+ async submitWork(state, cardId, agentId, payload) {
421
+ const card = state.cards[cardId];
422
+ if (!card)
423
+ return { ok: false, reason: `no existe la card ${cardId}` };
424
+ if (card.owner !== agentId) {
425
+ return { ok: false, reason: `la card ${cardId} no la tiene ${agentId} (owner: ${card.owner})` };
426
+ }
427
+ const dir = cardDir(this.paths, cardId);
428
+ await ensureDir(dir);
429
+ await writeAtomic(path.join(dir, "handoff.md"), payload.handoff);
430
+ if (payload.evidence) {
431
+ await writeAtomic(path.join(dir, "evidence.md"), payload.evidence);
432
+ }
433
+ else {
434
+ const hasEvidence = await readJson(path.join(dir, "evidence.md"));
435
+ if (!hasEvidence) {
436
+ // Sin evidencia no hay hecho. Pero no bloqueamos el handoff: el
437
+ // reviewer va a marcarlo.
438
+ await writeAtomic(path.join(dir, "evidence.md"), `# Evidencia — ${cardId}\n\n(pendiente: el owner no adjuntó evidencia)\n`);
439
+ }
440
+ }
441
+ transitionCard(state, cardId, "review");
442
+ await this.saveState(state);
443
+ const roster = await this.loadRoster(state.runId);
444
+ await this.saveRoster(roster);
445
+ return { ok: true, reason: `card ${cardId} entregada a revisión` };
446
+ }
447
+ /** Registra el veredicto del reviewer. */
448
+ async submitReview(state, cardId, reviewerId, verdict, payload) {
449
+ const card = state.cards[cardId];
450
+ if (!card)
451
+ return { ok: false, reason: `no existe la card ${cardId}`, action: "none" };
452
+ if (card.owner === reviewerId) {
453
+ return {
454
+ ok: false,
455
+ reason: "el revisor no puede ser el owner de la card",
456
+ action: "none",
457
+ };
458
+ }
459
+ const dir = cardDir(this.paths, cardId);
460
+ await ensureDir(dir);
461
+ await writeAtomic(path.join(dir, "review.md"), payload.review);
462
+ if (verdict === "approved") {
463
+ recordApproval(card, payload.reason ?? "sin observaciones");
464
+ await this.saveState(state);
465
+ return { ok: true, reason: "review APROBADO — falta el gate", action: "run_gates" };
466
+ }
467
+ recordRejection(card, payload.reason ?? "sin motivo declarado");
468
+ const decision = decideRetry(card, this.limits);
469
+ transitionCard(state, cardId, "rework", { result: card.result });
470
+ state.decisions.push({
471
+ at: nowIso(this.options.clock),
472
+ cardId,
473
+ decision: decision.action === "escalate" ? "escalated" : decision.action === "replan" ? "replan" : "rework",
474
+ reason: decision.reason,
475
+ actor: reviewerId,
476
+ });
477
+ await this.saveState(state);
478
+ return { ok: true, reason: decision.instruction || decision.reason, action: decision.action };
479
+ }
480
+ /** Corre los gates de una card. */
481
+ async runGates(state, cardId) {
482
+ const card = state.cards[cardId];
483
+ if (!card)
484
+ throw new Error(`no existe la card ${cardId}`);
485
+ if (!this.toolingCache) {
486
+ this.toolingCache = await detectTooling(this.paths.projectRoot);
487
+ }
488
+ const scope = card.scope.mayTouch.filter((s) => !s.includes("*"));
489
+ const runner = this.options.runner;
490
+ const technical = await runTechnicalGates(this.paths.projectRoot, this.toolingCache, runner, scope);
491
+ const security = await runSecurityGate(this.paths.projectRoot, scope, runner);
492
+ const result = consolidate(cardId, technical, security);
493
+ const dir = cardDir(this.paths, cardId);
494
+ await ensureDir(dir);
495
+ const { renderGate } = await import("./gates.js");
496
+ await writeAtomic(path.join(dir, "gates.md"), renderGate(result));
497
+ return result;
498
+ }
499
+ /** Cierra una card si los gates pasaron. Aplica los invariantes. */
500
+ async closeCard(state, cardId, gates) {
501
+ const card = state.cards[cardId];
502
+ if (!card)
503
+ return { ok: false, reason: `no existe la card ${cardId}` };
504
+ try {
505
+ assertInvariants({
506
+ card,
507
+ state,
508
+ limits: this.limits,
509
+ gatesPassed: gates.passed,
510
+ });
511
+ }
512
+ catch (err) {
513
+ return { ok: false, reason: String(err.message) };
514
+ }
515
+ if (!gates.passed) {
516
+ return {
517
+ ok: false,
518
+ reason: `gate no aprobado (técnico: ${gates.technicalOutcome}, seguridad: ${gates.securityOutcome})`,
519
+ };
520
+ }
521
+ transitionCard(state, cardId, "done");
522
+ await this.saveState(state);
523
+ const roster = await this.loadRoster(state.runId);
524
+ this.rosterStore.release(roster, card.owner ?? "");
525
+ await this.saveRoster(roster);
526
+ await this.leases.release(cardId, card.owner ?? "");
527
+ return { ok: true, reason: `card ${cardId} cerrada` };
528
+ }
529
+ // ───────────────────────────────────────────────────────────────────────────
530
+ // Ayuda
531
+ // ───────────────────────────────────────────────────────────────────────────
532
+ /** Enruta un pedido de ayuda a los peers disponibles. */
533
+ async routeHelpRequest(state, requesterId, cardId) {
534
+ const roster = await this.loadRoster(state.runId);
535
+ const requester = roster.agents[requesterId];
536
+ const route = routeHelp(requesterId, roster, requester?.capabilities ?? []);
537
+ const card = state.cards[cardId];
538
+ if (card) {
539
+ card.helpRequests.push(requesterId);
540
+ card.helpHops += 1;
541
+ assertInvariants({ card, state, limits: this.limits });
542
+ await this.saveState(state);
543
+ }
544
+ return route;
545
+ }
546
+ /** Snapshot del estado para el prompt. */
547
+ async snapshot() {
548
+ const state = await this.loadState();
549
+ const roster = await this.loadRoster(state.runId);
550
+ return {
551
+ state,
552
+ roster,
553
+ idle: this.rosterStore.idlePool(roster),
554
+ working: this.rosterStore.workingAgents(roster),
555
+ dead: this.rosterStore.deadAgents(roster, this.limits.heartbeatSec * 3),
556
+ };
557
+ }
558
+ }
559
+ /** Card vacía para un agente recién desplegado, antes de que le asignen una. */
560
+ function PLACEHOLDER_CARD(agentId) {
561
+ return {
562
+ id: "sin-card",
563
+ title: "Sin card asignada",
564
+ type: "exploration",
565
+ state: "todo",
566
+ owner: agentId,
567
+ reviewer: null,
568
+ requiredCapabilities: [],
569
+ scope: { mayTouch: ["**"], forbidden: ["**/*.env"] },
570
+ acceptance: ["Esperar la asignación de una card"],
571
+ gate: "sin gate hasta que se le asigne una card",
572
+ dependsOn: [],
573
+ attempts: 0,
574
+ rejections: 0,
575
+ artifacts: "",
576
+ result: null,
577
+ helpRequests: [],
578
+ helpHops: 0,
579
+ };
580
+ }
581
+ /** Renderiza una ficha como markdown. */
582
+ export function renderFicha(ficha) {
583
+ return [
584
+ `# ${ficha.displayName}`,
585
+ "",
586
+ `**id:** \`${ficha.id}\` `,
587
+ `**rol:** \`${ficha.role}\` `,
588
+ `**origen:** ${ficha.source.kind}${ficha.source.division ? ` (${ficha.source.division})` : ""}`,
589
+ "",
590
+ "## Capacidades",
591
+ "",
592
+ ...ficha.capabilities.map((c) => `- ${c}`),
593
+ "",
594
+ "## Scope",
595
+ "",
596
+ `- **may_touch:** ${ficha.scope.mayTouch.join(", ")}`,
597
+ `- **forbidden:** ${ficha.scope.forbidden.join(", ")}`,
598
+ "",
599
+ "## Delegación",
600
+ "",
601
+ `- **can_delegate:** ${ficha.canDelegate}`,
602
+ `- **delegate_budget:** ${ficha.delegateBudget}`,
603
+ `- **peers:** ${ficha.peers.join(", ") || "(ninguno)"}`,
604
+ `- **escalate_to:** ${ficha.escalateTo}`,
605
+ "",
606
+ "## Límites duros",
607
+ "",
608
+ ...ficha.mustNot.map((m) => `- ${m}`),
609
+ "",
610
+ "## Prompt de origen",
611
+ "",
612
+ "```markdown",
613
+ ficha.source.sourcePrompt ?? "(sin prompt de origen)",
614
+ "```",
615
+ "",
616
+ ].join("\n");
617
+ }
618
+ //# sourceMappingURL=office.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"office.js","sourceRoot":"","sources":["../../src/core/office.ts"],"names":[],"mappings":"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"}