@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.
- package/dist/bin/yf.js +0 -0
- package/dist/chat/doctrine_digest.d.ts.map +1 -1
- package/dist/chat/doctrine_digest.js +4 -1
- package/dist/chat/doctrine_digest.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +72 -19
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/evidence.d.ts +34 -2
- package/dist/chat/tools/evidence.d.ts.map +1 -1
- package/dist/chat/tools/evidence.js +90 -12
- package/dist/chat/tools/evidence.js.map +1 -1
- package/dist/commands/urazuke.d.ts.map +1 -1
- package/dist/commands/urazuke.js +27 -0
- package/dist/commands/urazuke.js.map +1 -1
- package/dist/core/error_catalog.d.ts +4 -0
- package/dist/core/error_catalog.d.ts.map +1 -1
- package/dist/core/error_catalog.js +16 -0
- package/dist/core/error_catalog.js.map +1 -1
- package/dist/core/loopback_post.d.ts +101 -0
- package/dist/core/loopback_post.d.ts.map +1 -0
- package/dist/core/loopback_post.js +156 -0
- package/dist/core/loopback_post.js.map +1 -0
- package/dist/docs/doctrine/urazuke.md +50 -38
- package/dist/mcp/forge_panel_server.d.ts +1 -26
- package/dist/mcp/forge_panel_server.d.ts.map +1 -1
- package/dist/mcp/forge_panel_server.js +5 -26
- package/dist/mcp/forge_panel_server.js.map +1 -1
- package/dist/mcp/forge_verbs_server.d.ts +1 -11
- package/dist/mcp/forge_verbs_server.d.ts.map +1 -1
- package/dist/mcp/forge_verbs_server.js +7 -23
- package/dist/mcp/forge_verbs_server.js.map +1 -1
- package/dist/mcp/panel_invoke.d.ts +51 -0
- package/dist/mcp/panel_invoke.d.ts.map +1 -0
- package/dist/mcp/panel_invoke.js +102 -0
- package/dist/mcp/panel_invoke.js.map +1 -0
- package/dist/nac3/internal_manifest.d.ts +2 -0
- package/dist/nac3/internal_manifest.d.ts.map +1 -1
- package/dist/nac3/internal_manifest.js +18 -3
- package/dist/nac3/internal_manifest.js.map +1 -1
- package/dist/nac3/verb_budget.d.ts +110 -0
- package/dist/nac3/verb_budget.d.ts.map +1 -0
- package/dist/nac3/verb_budget.js +142 -0
- package/dist/nac3/verb_budget.js.map +1 -0
- package/dist/relay/in_flight_turn.d.ts +52 -11
- package/dist/relay/in_flight_turn.d.ts.map +1 -1
- package/dist/relay/in_flight_turn.js +98 -30
- package/dist/relay/in_flight_turn.js.map +1 -1
- package/dist/relay/loopback_turn.d.ts +15 -42
- package/dist/relay/loopback_turn.d.ts.map +1 -1
- package/dist/relay/loopback_turn.js +27 -115
- package/dist/relay/loopback_turn.js.map +1 -1
- package/dist/urazuke/evidence.d.ts +22 -0
- package/dist/urazuke/evidence.d.ts.map +1 -1
- package/dist/urazuke/evidence.js +42 -3
- package/dist/urazuke/evidence.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/doctrine/urazuke.md +50 -38
- package/package.json +20 -18
- package/src/i18n/catalogs/ar.json +3 -0
- package/src/i18n/catalogs/de.json +3 -0
- package/src/i18n/catalogs/en.json +3 -0
- package/src/i18n/catalogs/es.json +3 -0
- package/src/i18n/catalogs/fr.json +3 -0
- package/src/i18n/catalogs/hi.json +3 -0
- package/src/i18n/catalogs/it.json +3 -0
- package/src/i18n/catalogs/ja.json +3 -0
- package/src/i18n/catalogs/pt.json +3 -0
- 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,
|
|
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
|
|
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":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,MAAM,CAAC,MAAM,eAAe,GAA0B;IACpD;QACE,KAAK,EAAE,CAAC,sBAAsB,CAAC;QAC/B,IAAI,EACF,8DAA8D;cAC5D,6DAA6D;cAC7D,+DAA+D;cAC/D,uDAAuD;cACvD,6DAA6D;cAC7D,yDAAyD;cACzD,gEAAgE;cAChE,4DAA4D;cAC5D,mCAAmC;KACxC;IACD;QACE,KAAK,EAAE,CAAC,gBAAgB,CAAC;QACzB,IAAI,EACF,gEAAgE;cAC9D,0DAA0D;cAC1D,4CAA4C;KACjD;IACD;QACE,KAAK,EAAE,CAAC,YAAY,CAAC;QACrB,IAAI,EAAE,2FAA2F;KAClG;IACD;QACE,KAAK,EAAE,CAAC,eAAe,CAAC;QACxB,IAAI,EAAE,2IAA2I;KAClJ;IACD;QACE,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,qFAAqF;KAC5F;IACD;QACE,KAAK,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACtC,IAAI,EAAE,2IAA2I;KAClJ;IACD;QACE,KAAK,EAAE,CAAC,gBAAgB,CAAC;QACzB,IAAI,EAAE,uTAAuT;KAC9T;IACD;QACE,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,iGAAiG;KACxG;IACD;QACE,KAAK,EAAE,CAAC,iBAAiB,CAAC;QAC1B,IAAI,EAAE,qFAAqF;KAC5F;IACD;QACE,KAAK,EAAE,CAAC,iBAAiB,CAAC;QAC1B,IAAI,EAAE,4GAA4G;KACnH;IACD;QACE,KAAK,EAAE,CAAC,sBAAsB,CAAC;QAC/B,IAAI,EAAE,kJAAkJ;KACzJ;IACD;QACE,KAAK,EAAE,CAAC,uBAAuB,CAAC;QAChC,IAAI,EAAE,mFAAmF;KAC1F;IACD;QACE,KAAK,EAAE,CAAC,iBAAiB,CAAC;QAC1B,IAAI,EACF,+EAA+E;cAC7E,+EAA+E;cAC/E,+EAA+E;cAC/E,yEAAyE;cACzE,2EAA2E;cAC3E,kEAAkE;KACvE;IACD;QACE,KAAK,EAAE,CAAC,cAAc,CAAC;QACvB,IAAI,EACF,8EAA8E;cAC5E,gFAAgF;cAChF,gFAAgF;cAChF,+EAA+E;cAC/E,yEAAyE;cACzE,gFAAgF;cAChF,wEAAwE;cACxE,wDAAwD;KAC7D;IACD;QACE,KAAK,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC;QAC1C;;;;;;;;;mEAS2D;QAC3D,IAAI,EACF,gEAAgE;cAC9D,mEAAmE;cACnE,oEAAoE;cACpE,mEAAmE;cACnE,uEAAuE;cACvE,iEAAiE;cACjE,sEAAsE;cACtE,qEAAqE;cACrE,yDAAyD;cACzD,iBAAiB;KACtB;IACD;QACE,KAAK,EAAE,CAAC,SAAS,CAAC;QAClB,IAAI,EACF,wEAAwE;cACtE,oEAAoE;cACpE,qEAAqE;cACrE,yEAAyE;cACzE,qEAAqE;cACrE,0EAA0E;cAC1E,
|
|
1
|
+
{"version":3,"file":"doctrine_digest.js","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,MAAM,CAAC,MAAM,eAAe,GAA0B;IACpD;QACE,KAAK,EAAE,CAAC,sBAAsB,CAAC;QAC/B,IAAI,EACF,8DAA8D;cAC5D,6DAA6D;cAC7D,+DAA+D;cAC/D,uDAAuD;cACvD,6DAA6D;cAC7D,yDAAyD;cACzD,gEAAgE;cAChE,4DAA4D;cAC5D,mCAAmC;KACxC;IACD;QACE,KAAK,EAAE,CAAC,gBAAgB,CAAC;QACzB,IAAI,EACF,gEAAgE;cAC9D,0DAA0D;cAC1D,4CAA4C;KACjD;IACD;QACE,KAAK,EAAE,CAAC,YAAY,CAAC;QACrB,IAAI,EAAE,2FAA2F;KAClG;IACD;QACE,KAAK,EAAE,CAAC,eAAe,CAAC;QACxB,IAAI,EAAE,2IAA2I;KAClJ;IACD;QACE,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,qFAAqF;KAC5F;IACD;QACE,KAAK,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACtC,IAAI,EAAE,2IAA2I;KAClJ;IACD;QACE,KAAK,EAAE,CAAC,gBAAgB,CAAC;QACzB,IAAI,EAAE,uTAAuT;KAC9T;IACD;QACE,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,IAAI,EAAE,iGAAiG;KACxG;IACD;QACE,KAAK,EAAE,CAAC,iBAAiB,CAAC;QAC1B,IAAI,EAAE,qFAAqF;KAC5F;IACD;QACE,KAAK,EAAE,CAAC,iBAAiB,CAAC;QAC1B,IAAI,EAAE,4GAA4G;KACnH;IACD;QACE,KAAK,EAAE,CAAC,sBAAsB,CAAC;QAC/B,IAAI,EAAE,kJAAkJ;KACzJ;IACD;QACE,KAAK,EAAE,CAAC,uBAAuB,CAAC;QAChC,IAAI,EAAE,mFAAmF;KAC1F;IACD;QACE,KAAK,EAAE,CAAC,iBAAiB,CAAC;QAC1B,IAAI,EACF,+EAA+E;cAC7E,+EAA+E;cAC/E,+EAA+E;cAC/E,yEAAyE;cACzE,2EAA2E;cAC3E,kEAAkE;KACvE;IACD;QACE,KAAK,EAAE,CAAC,cAAc,CAAC;QACvB,IAAI,EACF,8EAA8E;cAC5E,gFAAgF;cAChF,gFAAgF;cAChF,+EAA+E;cAC/E,yEAAyE;cACzE,gFAAgF;cAChF,wEAAwE;cACxE,wDAAwD;KAC7D;IACD;QACE,KAAK,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC;QAC1C;;;;;;;;;mEAS2D;QAC3D,IAAI,EACF,gEAAgE;cAC9D,mEAAmE;cACnE,oEAAoE;cACpE,mEAAmE;cACnE,uEAAuE;cACvE,iEAAiE;cACjE,sEAAsE;cACtE,qEAAqE;cACrE,yDAAyD;cACzD,iBAAiB;KACtB;IACD;QACE,KAAK,EAAE,CAAC,SAAS,CAAC;QAClB,IAAI,EACF,wEAAwE;cACtE,oEAAoE;cACpE,qEAAqE;cACrE,yEAAyE;cACzE,qEAAqE;cACrE,0EAA0E;cAC1E,yEAAyE;cACzE,yEAAyE;cACzE,0EAA0E;cAC1E,mCAAmC;cACnC,+CAA+C;KACpD;IACD;QACE,KAAK,EAAE,CAAC,mBAAmB,CAAC;QAC5B,IAAI,EACF,uEAAuE;cACrE,6EAA6E;cAC7E,4EAA4E;cAC5E,mEAAmE;cACnE,gCAAgC;KACrC;IACD;QACE,KAAK,EAAE,CAAC,uBAAuB,CAAC;QAChC,IAAI,EACF,yEAAyE;cACvE,4EAA4E;cAC5E,8EAA8E;cAC9E,2EAA2E;cAC3E,8EAA8E;cAC9E,qEAAqE;cACrE,uEAAuE;cACvE,6DAA6D;KAClE;IACD;QACE,KAAK,EAAE,CAAC,kBAAkB,CAAC;QAC3B,IAAI,EAAE,6XAA6X;KACpY;IACD;QACE,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,IAAI,EAAE,qeAAqe;KAC5e;IACD;QACE,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,IAAI,EAAE,iFAAiF;KACxF;IACD;QACE,KAAK,EAAE,CAAC,uBAAuB,CAAC;QAChC,IAAI,EAAE,+UAA+U;KACtV;IACD;QACE,KAAK,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;QACpD,IAAI,EAAE,wHAAwH;KAC/H;IACD;QACE,KAAK,EAAE,CAAC,cAAc,CAAC;QACvB,IAAI,EAAE,6RAA6R;KACpS;IACD;QACE,KAAK,EAAE,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,kBAAkB,CAAC;QAC3G,IAAI,EAAE,gLAAgL;KACvL;CACF,CAAC;AAEF,6DAA6D;AAC7D,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAQD;uEACuE;AACvE,MAAM,UAAU,wBAAwB,CAAC,OAA8B,EAAE;IACvE,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAa;QACtB,mEAAmE;QACnE,2DAA2D;QAC3D,mEAAmE;QACnE,EAAE;QACF,gEAAgE;QAChE,6DAA6D;QAC7D,EAAE;KACH,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -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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"}
|
package/dist/chat/server.js
CHANGED
|
@@ -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
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
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
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
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
|
|
1644
|
-
* que el turno sigue vivo -- y es lo que hace que un
|
|
1645
|
-
* siga anunciando. Va primero y fuera del try del
|
|
1646
|
-
* telefono pareado no significa que el turno este
|
|
1647
|
-
|
|
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
|
-
|
|
1660
|
-
|
|
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
|