@nac3/forge-cli 1.23.3 → 1.23.5

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 (69) hide show
  1. package/dist/bin/yf.js +0 -0
  2. package/dist/chat/doctrine_digest.d.ts.map +1 -1
  3. package/dist/chat/doctrine_digest.js +4 -1
  4. package/dist/chat/doctrine_digest.js.map +1 -1
  5. package/dist/chat/server.d.ts.map +1 -1
  6. package/dist/chat/server.js +72 -19
  7. package/dist/chat/server.js.map +1 -1
  8. package/dist/chat/tools/evidence.d.ts +34 -2
  9. package/dist/chat/tools/evidence.d.ts.map +1 -1
  10. package/dist/chat/tools/evidence.js +90 -12
  11. package/dist/chat/tools/evidence.js.map +1 -1
  12. package/dist/commands/urazuke.d.ts.map +1 -1
  13. package/dist/commands/urazuke.js +27 -0
  14. package/dist/commands/urazuke.js.map +1 -1
  15. package/dist/core/error_catalog.d.ts +4 -0
  16. package/dist/core/error_catalog.d.ts.map +1 -1
  17. package/dist/core/error_catalog.js +16 -0
  18. package/dist/core/error_catalog.js.map +1 -1
  19. package/dist/core/loopback_post.d.ts +101 -0
  20. package/dist/core/loopback_post.d.ts.map +1 -0
  21. package/dist/core/loopback_post.js +156 -0
  22. package/dist/core/loopback_post.js.map +1 -0
  23. package/dist/docs/doctrine/urazuke.md +50 -38
  24. package/dist/mcp/forge_panel_server.d.ts +1 -26
  25. package/dist/mcp/forge_panel_server.d.ts.map +1 -1
  26. package/dist/mcp/forge_panel_server.js +5 -26
  27. package/dist/mcp/forge_panel_server.js.map +1 -1
  28. package/dist/mcp/forge_verbs_server.d.ts +1 -11
  29. package/dist/mcp/forge_verbs_server.d.ts.map +1 -1
  30. package/dist/mcp/forge_verbs_server.js +7 -23
  31. package/dist/mcp/forge_verbs_server.js.map +1 -1
  32. package/dist/mcp/panel_invoke.d.ts +51 -0
  33. package/dist/mcp/panel_invoke.d.ts.map +1 -0
  34. package/dist/mcp/panel_invoke.js +102 -0
  35. package/dist/mcp/panel_invoke.js.map +1 -0
  36. package/dist/nac3/internal_manifest.d.ts +2 -0
  37. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  38. package/dist/nac3/internal_manifest.js +18 -3
  39. package/dist/nac3/internal_manifest.js.map +1 -1
  40. package/dist/nac3/verb_budget.d.ts +110 -0
  41. package/dist/nac3/verb_budget.d.ts.map +1 -0
  42. package/dist/nac3/verb_budget.js +142 -0
  43. package/dist/nac3/verb_budget.js.map +1 -0
  44. package/dist/relay/in_flight_turn.d.ts +52 -11
  45. package/dist/relay/in_flight_turn.d.ts.map +1 -1
  46. package/dist/relay/in_flight_turn.js +98 -30
  47. package/dist/relay/in_flight_turn.js.map +1 -1
  48. package/dist/relay/loopback_turn.d.ts +15 -42
  49. package/dist/relay/loopback_turn.d.ts.map +1 -1
  50. package/dist/relay/loopback_turn.js +27 -115
  51. package/dist/relay/loopback_turn.js.map +1 -1
  52. package/dist/urazuke/evidence.d.ts +22 -0
  53. package/dist/urazuke/evidence.d.ts.map +1 -1
  54. package/dist/urazuke/evidence.js +42 -3
  55. package/dist/urazuke/evidence.js.map +1 -1
  56. package/dist/version.d.ts +1 -1
  57. package/dist/version.js +1 -1
  58. package/docs/doctrine/urazuke.md +50 -38
  59. package/package.json +20 -18
  60. package/src/i18n/catalogs/ar.json +3 -0
  61. package/src/i18n/catalogs/de.json +3 -0
  62. package/src/i18n/catalogs/en.json +3 -0
  63. package/src/i18n/catalogs/es.json +3 -0
  64. package/src/i18n/catalogs/fr.json +3 -0
  65. package/src/i18n/catalogs/hi.json +3 -0
  66. package/src/i18n/catalogs/it.json +3 -0
  67. package/src/i18n/catalogs/ja.json +3 -0
  68. package/src/i18n/catalogs/pt.json +3 -0
  69. package/src/i18n/catalogs/zh.json +3 -0
package/dist/bin/yf.js CHANGED
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"doctrine_digest.d.ts","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,eAAe,EAAE,mBAAmB,EAwKhD,CAAC;AAEF,6DAA6D;AAC7D,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,MAAM,WAAW,qBAAqB;IACpC;4EACwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;uEACuE;AACvE,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,qBAA0B,GAAG,MAAM,EAAE,CAiBnF"}
1
+ {"version":3,"file":"doctrine_digest.d.ts","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,eAAe,EAAE,mBAAmB,EA2KhD,CAAC;AAEF,6DAA6D;AAC7D,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,MAAM,WAAW,qBAAqB;IACpC;4EACwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;uEACuE;AACvE,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,qBAA0B,GAAG,MAAM,EAAE,CAiBnF"}
@@ -126,7 +126,10 @@ export const DOCTRINE_DIGEST = [
126
126
  + 'the paths it names, ask the owner for THEIR inputs, never invent them. '
127
127
  + 'A task closes only when Forge evaluates the step GREEN; a red step '
128
128
  + 'refuses pending.close; force_reason belongs to the OWNER, never to you. '
129
- + 'Evidence = receipts Forge records, not your summary. No deadlines. '
129
+ + 'Evidence = receipts Forge records, not your summary; a run over 10 min '
130
+ + 'comes back as a HANDLE and its receipt lands anyway (evidence.list) -- '
131
+ + 'as does the work behind a call that dies waiting, so LOOK FOR THE TRACE '
132
+ + 'before redoing it. No deadlines. '
130
133
  + 'yujin.urazuke.status / .step. Full: discover.',
131
134
  },
132
135
  {
@@ -1 +1 @@
1
- {"version":3,"file":"doctrine_digest.js","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctrine_digest.js","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"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"}
@@ -1599,11 +1599,25 @@ async function handleForgeTaskDelete(req, res, ctx) {
1599
1599
  * is thinking (Pablo 2026-09-02). Replaces the per-tool activity stream, which
1600
1600
  * was the bulk of the relay's Cloudflare appends and only calmed anxiety. The
1601
1601
  * pizarron (board) still refreshes -- THAT is the signal that adds value. */
1602
- let _relayHeartbeat = null;
1603
- function stopRelayHeartbeat() {
1604
- if (_relayHeartbeat) {
1605
- clearInterval(_relayHeartbeat);
1606
- _relayHeartbeat = null;
1602
+ /* UN latido POR TURNO, no uno por proceso (PND-237). Era un solo timer de
1603
+ * modulo y `startRelayHeartbeat()` arrancaba con un `stop()`, asi que con
1604
+ * turnos solapados -- que es lo normal en un panel -- el arranque de B mataba
1605
+ * el latido de A, y el cierre de A mataba el de B. Un turno sin latido deja de
1606
+ * dar senal de vida, y como la senal es lo unico que lo sostiene en el
1607
+ * registro, el anuncio quedaba a merced de cual timer sobrevivio. */
1608
+ const _relayHeartbeats = new Map();
1609
+ /** Para el latido de `id`; sin `id`, TODOS (apagado del servidor). */
1610
+ function stopRelayHeartbeat(id) {
1611
+ if (!id) {
1612
+ for (const t of _relayHeartbeats.values())
1613
+ clearInterval(t);
1614
+ _relayHeartbeats.clear();
1615
+ return;
1616
+ }
1617
+ const t = _relayHeartbeats.get(id);
1618
+ if (t) {
1619
+ clearInterval(t);
1620
+ _relayHeartbeats.delete(id);
1607
1621
  }
1608
1622
  }
1609
1623
  /**
@@ -1636,19 +1650,28 @@ function turnoVivoSinAnunciar() {
1636
1650
  return null;
1637
1651
  }
1638
1652
  }
1639
- function startRelayHeartbeat() {
1640
- stopRelayHeartbeat();
1641
- _relayHeartbeat = setInterval(() => {
1653
+ /**
1654
+ * Arranca el latido DE ESTE turno. El id no es decorativo: es lo que ata la
1655
+ * senal de vida a quien la produce (PND-237). Sin turno identificado no hay
1656
+ * latido -- un pulso anonimo es justo el que mantenia vivo el anuncio de un
1657
+ * turno ajeno.
1658
+ */
1659
+ function startRelayHeartbeat(turnId) {
1660
+ if (!turnId)
1661
+ return;
1662
+ stopRelayHeartbeat(turnId);
1663
+ const t = setInterval(() => {
1642
1664
  /* SENAL DE VIDA del turno, antes que cualquier otra cosa. Este timer corre
1643
- * SOLO entre turn_start y turn_complete, asi que su pulso ES la prueba de
1644
- * que el turno sigue vivo -- y es lo que hace que un turno de tres horas se
1645
- * siga anunciando. Va primero y fuera del try del publisher: que no haya
1646
- * telefono pareado no significa que el turno este muerto. */
1647
- touchInFlightTurn();
1665
+ * SOLO entre el turn_start y el turn_complete DE ESTE turno, asi que su
1666
+ * pulso ES la prueba de que el turno sigue vivo -- y es lo que hace que un
1667
+ * turno de tres horas se siga anunciando. Va primero y fuera del try del
1668
+ * publisher: que no haya telefono pareado no significa que el turno este
1669
+ * muerto. */
1670
+ touchInFlightTurn(turnId);
1648
1671
  try {
1649
1672
  const pub = getRelayPublisher();
1650
1673
  if (!pub) {
1651
- stopRelayHeartbeat();
1674
+ stopRelayHeartbeat(turnId);
1652
1675
  return;
1653
1676
  }
1654
1677
  pub.activity('remote running...', { kind: 'heartbeat' });
@@ -1656,8 +1679,9 @@ function startRelayHeartbeat() {
1656
1679
  }
1657
1680
  catch { /* best-effort */ }
1658
1681
  }, PULSO_DE_PROGRESO_MS);
1659
- if (typeof _relayHeartbeat.unref === 'function')
1660
- _relayHeartbeat.unref();
1682
+ _relayHeartbeats.set(turnId, t);
1683
+ if (typeof t.unref === 'function')
1684
+ t.unref();
1661
1685
  }
1662
1686
  function relayForward(event, data) {
1663
1687
  const pub = getRelayPublisher();
@@ -1665,19 +1689,24 @@ function relayForward(event, data) {
1665
1689
  return;
1666
1690
  try {
1667
1691
  const d = (data && typeof data === 'object') ? data : {};
1692
+ /* El id del turno viaja en el evento (PND-237): el latido y el registro de
1693
+ * turnos vivos son POR TURNO, asi que hay que saber de cual se habla. Un
1694
+ * evento sin id no toca ningun timer -- antes que matar el latido de otro
1695
+ * turno, preferimos dejar que este venza por silencio. */
1696
+ const tid = typeof d.turn_id === 'string' ? d.turn_id : '';
1668
1697
  /* tool_round_start: intentionally NO relay activity anymore -- the granular
1669
1698
  * per-tool feed was the append-heavy part; the phone now gets a heartbeat. */
1670
1699
  if (event === 'turn_start') {
1671
1700
  pub.status('working', { tier: d.tier, provider: d.provider, model: d.model });
1672
1701
  pub.activity('remote running...', { kind: 'heartbeat' }); /* first line now; then every 60s */
1673
- startRelayHeartbeat();
1702
+ startRelayHeartbeat(tid);
1674
1703
  /* El turno en vuelo viaja DENTRO del latido (in_flight_turn.ts): hay que
1675
1704
  * publicarlo ya, sin esperar el tick, o el telefono no sabe que hay algo
1676
1705
  * corriendo hasta la proxima evaluacion. */
1677
1706
  forcePresenceBeat();
1678
1707
  }
1679
1708
  else if (event === 'turn_complete') {
1680
- stopRelayHeartbeat();
1709
+ stopRelayHeartbeat(tid);
1681
1710
  pub.status('round_done');
1682
1711
  /* Simetrico: el latido tiene que dejar de anunciar el turno, o el
1683
1712
  * telefono sigue mostrando la burbuja "pensando" hasta el proximo. */
@@ -1687,7 +1716,7 @@ function relayForward(event, data) {
1687
1716
  publishBoardSnapshot();
1688
1717
  }
1689
1718
  else if (event === 'error') {
1690
- stopRelayHeartbeat();
1719
+ stopRelayHeartbeat(tid);
1691
1720
  pub.status('error', { message: d.message ?? d.error ?? '' });
1692
1721
  }
1693
1722
  }
@@ -6147,6 +6176,11 @@ async function handleChat(req, res, ctx) {
6147
6176
  * del turno en vuelo -- y lo que se declara dentro del try no se ve desde
6148
6177
  * ahi. Mismo motivo por el que turnId vive en este nivel. */
6149
6178
  let turnEcho = null;
6179
+ /* El id del turno para el LATIDO, en este nivel por el mismo motivo que
6180
+ * turnEcho: el finally tiene que poder apagarlo y `_xTurnId` se declara
6181
+ * dentro del try. Y no alcanza con turnEcho: ese se saltea los turnos de
6182
+ * origen mobile, pero el latido se arranca para TODOS (PND-237). */
6183
+ let latidoTurnId = null;
6150
6184
  /* alpha.59e -- SSE streaming mode. Client opts in via
6151
6185
  * body.stream=true. We keep the response open + emit events
6152
6186
  * during the tool loop instead of bundling everything in a
@@ -6322,6 +6356,7 @@ async function handleChat(req, res, ctx) {
6322
6356
  * the END remoteTurn (same id) fills the reply. Old phones ignore
6323
6357
  * the extra fields and keep their current end-of-turn behavior. */
6324
6358
  const _xTurnId = (body.origin === 'mobile' ? 'mb-' : body.origin === 'bridge' ? 'br-' : 'dt-') + Date.now().toString(36);
6359
+ latidoTurnId = _xTurnId;
6325
6360
  /* Queda registrado como ESTADO para que el latido de presencia lo
6326
6361
  * repita: ver el comentario largo en RelayPublisher.presence().
6327
6362
  *
@@ -6488,6 +6523,11 @@ async function handleChat(req, res, ctx) {
6488
6523
  /* PND-132 -- so the relay activity feed shows what is being processed
6489
6524
  * (a per-turn heartbeat), not just tool rounds. */
6490
6525
  user_text: lastUserText.slice(0, 80),
6526
+ /* PND-237 -- QUIEN arranca. El latido del relay y el registro de turnos
6527
+ * vivos son por turno; sin el id, relayForward no sabe a cual atar el
6528
+ * pulso y el panel vuelve a tener un unico timer que los turnos
6529
+ * solapados se pisan entre si. */
6530
+ turn_id: _xTurnId,
6491
6531
  });
6492
6532
  }
6493
6533
  /* alpha.59e -- loop detection counter. We track (verb_id +
@@ -7474,6 +7514,10 @@ async function handleChat(req, res, ctx) {
7474
7514
  const responsePayload = {
7475
7515
  ok: true,
7476
7516
  message: { role: 'assistant', text: reply.text },
7517
+ /* PND-237 -- QUIEN termina. Simetrico al turn_start: relayForward para el
7518
+ * latido DE ESTE turno y no el del turno de al lado, que es lo que pasaba
7519
+ * con un unico timer de modulo. */
7520
+ turn_id: _xTurnId,
7477
7521
  /* Interrupt (task #27): tell the panel the turn was stopped
7478
7522
  * mid-flight so it can render the partial answer with a
7479
7523
  * "(interrumpido)" marker instead of treating it as complete. */
@@ -7632,6 +7676,15 @@ async function handleChat(req, res, ctx) {
7632
7676
  * de un turno que ya arranco despues. */
7633
7677
  if (turnEcho)
7634
7678
  clearInFlightTurn(turnEcho.id);
7679
+ /* Y el LATIDO de este turno, por el mismo motivo y en el mismo lugar
7680
+ * (PND-237). Va aca y no en cada rama de error -- son cinco emisores de
7681
+ * `error` y la quinta se iba a olvidar -- porque el finally es el unico
7682
+ * punto por el que pasan TODAS las salidas. Un latido que sobrevive a su
7683
+ * turno sigue dando senal de vida por el, y entonces el tope de silencio
7684
+ * nunca lo saca del registro: es la mitad que convierte un turno colgado
7685
+ * en un turno que se anuncia para siempre. */
7686
+ if (latidoTurnId)
7687
+ stopRelayHeartbeat(latidoTurnId);
7635
7688
  /* Interrupt (task #27): always clear this turn from the active
7636
7689
  * registry, no matter how the turn exits. endTurn is a no-op if a
7637
7690
  * newer turn has already replaced us, so it never clobbers a