@nac3/forge-cli 1.23.1 → 1.23.3

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 (52) hide show
  1. package/dist/bin/yf.js +0 -0
  2. package/dist/chat/server.d.ts.map +1 -1
  3. package/dist/chat/server.js +36 -8
  4. package/dist/chat/server.js.map +1 -1
  5. package/dist/commands/urazuke.d.ts.map +1 -1
  6. package/dist/commands/urazuke.js +22 -16
  7. package/dist/commands/urazuke.js.map +1 -1
  8. package/dist/core/error_catalog.d.ts +27 -0
  9. package/dist/core/error_catalog.d.ts.map +1 -1
  10. package/dist/core/error_catalog.js +55 -0
  11. package/dist/core/error_catalog.js.map +1 -1
  12. package/dist/core/error_formatter.d.ts +12 -0
  13. package/dist/core/error_formatter.d.ts.map +1 -1
  14. package/dist/core/error_formatter.js +19 -0
  15. package/dist/core/error_formatter.js.map +1 -1
  16. package/dist/relay/command_consumer.d.ts +10 -0
  17. package/dist/relay/command_consumer.d.ts.map +1 -1
  18. package/dist/relay/command_consumer.js +10 -1
  19. package/dist/relay/command_consumer.js.map +1 -1
  20. package/dist/relay/loopback_turn.d.ts +82 -0
  21. package/dist/relay/loopback_turn.d.ts.map +1 -0
  22. package/dist/relay/loopback_turn.js +171 -0
  23. package/dist/relay/loopback_turn.js.map +1 -0
  24. package/dist/urazuke/heuristics.d.ts +11 -0
  25. package/dist/urazuke/heuristics.d.ts.map +1 -1
  26. package/dist/urazuke/heuristics.js +15 -3
  27. package/dist/urazuke/heuristics.js.map +1 -1
  28. package/dist/urazuke/quality.d.ts +1 -4
  29. package/dist/urazuke/quality.d.ts.map +1 -1
  30. package/dist/urazuke/quality.js +3 -42
  31. package/dist/urazuke/quality.js.map +1 -1
  32. package/dist/urazuke/quality_doc.d.ts +11 -0
  33. package/dist/urazuke/quality_doc.d.ts.map +1 -0
  34. package/dist/urazuke/quality_doc.js +137 -0
  35. package/dist/urazuke/quality_doc.js.map +1 -0
  36. package/dist/urazuke/rule_report.d.ts +29 -0
  37. package/dist/urazuke/rule_report.d.ts.map +1 -0
  38. package/dist/urazuke/rule_report.js +239 -0
  39. package/dist/urazuke/rule_report.js.map +1 -0
  40. package/dist/version.d.ts +1 -1
  41. package/dist/version.js +1 -1
  42. package/package.json +18 -20
  43. package/src/i18n/catalogs/ar.json +7 -0
  44. package/src/i18n/catalogs/de.json +7 -0
  45. package/src/i18n/catalogs/en.json +7 -0
  46. package/src/i18n/catalogs/es.json +7 -0
  47. package/src/i18n/catalogs/fr.json +7 -0
  48. package/src/i18n/catalogs/hi.json +7 -0
  49. package/src/i18n/catalogs/it.json +7 -0
  50. package/src/i18n/catalogs/ja.json +7 -0
  51. package/src/i18n/catalogs/pt.json +7 -0
  52. package/src/i18n/catalogs/zh.json +7 -0
package/dist/bin/yf.js CHANGED
File without changes
@@ -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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"}
@@ -58,6 +58,9 @@ import { getInstanceIdentity } from '../relay/instance_identity.js';
58
58
  import { isMobilePaired, relayGate } from '../core/mobile_pairing_state.js';
59
59
  import { relayPoll } from '../relay/relay_client.js';
60
60
  import { startCommandConsumer } from '../relay/command_consumer.js';
61
+ import { postChatTurn } from '../relay/loopback_turn.js';
62
+ import { forgeErrorOf } from '../core/error_catalog.js';
63
+ import { formatForgeErrorText } from '../core/error_formatter.js';
61
64
  import { getSessionStore, DEFAULT_SESSION_ID } from './session_store.js';
62
65
  import { getSessionProject, setSessionProject } from './session_projects.js';
63
66
  import { beginTurn, endTurn, interruptActiveTurn, interruptAllTurns, isTurnActive, activeTurnId, activeTurns, } from './turn_control.js';
@@ -1163,10 +1166,15 @@ function startDesktopCommandConsumer(port, coord = {}) {
1163
1166
  void pub.flush(); /* push the reply promptly, do not wait the window */
1164
1167
  };
1165
1168
  const runTurn = async (text, sessionId, projectSlug) => {
1166
- const resp = await fetch('http://127.0.0.1:' + port + '/api/chat', {
1167
- method: 'POST',
1168
- headers: { 'content-type': 'application/json' },
1169
- body: JSON.stringify({
1169
+ /* El POST va por node:http y no por fetch, y con un presupuesto de turno
1170
+ * y no de llamada corta: las cabeceras de esta respuesta recien salen
1171
+ * cuando el turno TERMINO, y el limite que fetch hereda de undici son
1172
+ * cinco minutos medidos, asi que todo turno mas largo moria con "fetch
1173
+ * failed" aunque el escritorio lo terminara bien (PND-234). El porque
1174
+ * completo, con la medicion, esta en src/relay/loopback_turn.ts. */
1175
+ const resp = await postChatTurn({
1176
+ port,
1177
+ payload: {
1170
1178
  messages: [{ role: 'user', content: text }],
1171
1179
  ...(sessionId ? { session_id: sessionId } : {}),
1172
1180
  /* Bind the turn to the project the phone composed it against
@@ -1178,13 +1186,33 @@ function startDesktopCommandConsumer(port, coord = {}) {
1178
1186
  * the unified-thread ones to the panel (the laptop sees what was
1179
1187
  * asked from the phone). */
1180
1188
  origin: 'mobile',
1181
- }),
1189
+ },
1182
1190
  });
1183
- const j = await resp.json();
1191
+ /* Un cuerpo que no es JSON no se puede reportar como "turn failed": eso
1192
+ * esconderia un 500 con una pagina de error adentro. Se dice que la
1193
+ * respuesta no se pudo leer y se deja el status, que es lo que permite
1194
+ * diagnosticarlo. */
1195
+ let j;
1196
+ try {
1197
+ j = JSON.parse(resp.body);
1198
+ }
1199
+ catch {
1200
+ throw new Error('respuesta no interpretable del servidor de chat (HTTP '
1201
+ + resp.status + ')');
1202
+ }
1184
1203
  if (!j || j.ok === false)
1185
1204
  throw new Error(j?.error || 'turn failed');
1186
1205
  return String(j.message?.text ?? '');
1187
1206
  };
1207
+ /* Como se le cuenta al telefono un turno que fallo. El consumidor no
1208
+ * importa el catalogo de i18n a proposito (no toca el disco, para poder
1209
+ * probarse sin red ni servidor), asi que el renderizado se inyecta desde
1210
+ * aca, que ya lo tiene cargado. Devolver null significa "no tengo nada
1211
+ * mejor": el consumidor cae a su texto de siempre. */
1212
+ const describeError = (e) => {
1213
+ const forge = forgeErrorOf(e);
1214
+ return forge ? formatForgeErrorText(forge) : null;
1215
+ };
1188
1216
  const onControl = async (action, args) => {
1189
1217
  /* Control commands from the phone (tasks #33, #29) go through the
1190
1218
  * same loopback the chat turns use -- no extra coupling. */
@@ -1313,7 +1341,7 @@ function startDesktopCommandConsumer(port, coord = {}) {
1313
1341
  * slug names a peer's project (board.activeProject races between instances),
1314
1342
  * so no instance ran it and the phone hung on "working". */
1315
1343
  accept: (c) => !c.control && (!!c.targetInstance || ownsChatCommand(c.projectSlug)),
1316
- pollCommands, runTurn, reply,
1344
+ pollCommands, runTurn, reply, describeError,
1317
1345
  ackImmediate: true, /* confirm receipt before the turn runs */
1318
1346
  onError: () => { },
1319
1347
  });
@@ -1321,7 +1349,7 @@ function startDesktopCommandConsumer(port, coord = {}) {
1321
1349
  enabled: relayEnabled, intervalMs: 1200,
1322
1350
  instanceId: selfInstanceId,
1323
1351
  accept: (c) => !!c.control,
1324
- pollCommands, runTurn, onControl, reply,
1352
+ pollCommands, runTurn, onControl, reply, describeError,
1325
1353
  onError: () => { },
1326
1354
  });
1327
1355
  /* Item 2 (cross-machine): advertise this instance's presence so the phone