@melaya/runner 1.1.24 → 1.1.26

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.
@@ -719,12 +719,20 @@ def _build_agent():
719
719
  max_iters=(int(os.environ.get("MEL_ASSISTANT_MAX_ITERS_PHONE", "300") or "300") if phone_enabled
720
720
  else (int(os.environ.get("MEL_ASSISTANT_MAX_ITERS_BROWSER", "300") or "300") if browser_enabled
721
721
  else (40 if connector_services else 8))),
722
- # Driving a device IS the long-horizon shape: read the screen, do one
723
- # thing, read again. Without this the codex latency cap silently cut the
724
- # 300 above to 3 — one click and a look and every codex browser turn
725
- # ended mid-task claiming an "iteration limit". Connector and plain
726
- # chat turns keep the cap: they are not act-and-observe.
727
- long_horizon=bool(phone_enabled or browser_enabled),
722
+ # EVERY assistant turn is long-horizon, not only device-driving ones.
723
+ #
724
+ # The codex cap is a latency default written for pipeline phases. An
725
+ # assistant turn is interactive - a human is waiting - and its shape is
726
+ # always read, do one thing, read again. A connector turn alone needs
727
+ # search_tools + activate_tool + the call + a synthesis round: already
728
+ # four, so a cap of three truncates before the model can answer.
729
+ #
730
+ # This was briefly gated on (phone or browser). That passed testing only
731
+ # because the tester's runner advertises browser capability, and
732
+ # _browser_capable() is CAPABILITY presence rather than turn usage - so
733
+ # it was true for all of their turns. A user whose runner is not
734
+ # browser-capable would still have been clamped to 3 on ordinary chat.
735
+ long_horizon=True,
728
736
  reliability=True,
729
737
  bounded_memory=True,
730
738
  )
@@ -143,10 +143,16 @@ export function loadPinnedPublicKeysFromEnv() {
143
143
  // Verifier
144
144
  // ---------------------------------------------------------------------
145
145
  export const DEFAULT_CLOCK_TOLERANCE_SECONDS = 30;
146
- /** Sanity ceiling: matches the server's MAX_TTL_SECONDS. A "valid"
147
- * token claiming a longer life than the issuer can mint is forged or
148
- * corrupt, so it is rejected regardless of signature. */
149
- const MAX_LIFETIME_SECONDS = 900;
146
+ /** Sanity ceiling: MUST match the server's MAX_TTL_SECONDS
147
+ * (server/src/services/browser/browserGrant.ts). A "valid" token claiming a
148
+ * longer life than the issuer can mint is forged or corrupt, so it is
149
+ * rejected regardless of signature.
150
+ *
151
+ * Raised 900s -> 4h alongside the server. Because this half ships in the
152
+ * runner, a server deployed ahead of a runner republish would mint grants
153
+ * this rejects with claims_invalid — publish the runner before, or at the
154
+ * same time as, the server change. */
155
+ const MAX_LIFETIME_SECONDS = 4 * 60 * 60;
150
156
  function b64urlJson(part, what) {
151
157
  let buf;
152
158
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@melaya/runner",
3
- "version": "1.1.24",
3
+ "version": "1.1.26",
4
4
  "description": "Run Melaya AI pipelines locally with your own LM Studio or Ollama models",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,