@senpi/runtime 3.0.173 → 3.0.181

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 (293) hide show
  1. package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
  2. package/dist/actions/close-position/close-position.action.js +48 -3
  3. package/dist/actions/close-position/close-position.action.js.map +1 -1
  4. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts +8 -0
  5. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
  6. package/dist/actions/llm-decision/openclaw-llm-decision.js +56 -1
  7. package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
  8. package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
  9. package/dist/actions/open-position/open-position.action.js +42 -6
  10. package/dist/actions/open-position/open-position.action.js.map +1 -1
  11. package/dist/actions/open-position/resolve-margin.d.ts +1 -1
  12. package/dist/actions/open-position/resolve-margin.d.ts.map +1 -1
  13. package/dist/actions/open-position/resolve-margin.js +7 -0
  14. package/dist/actions/open-position/resolve-margin.js.map +1 -1
  15. package/dist/approvals/approval-store.d.ts +37 -7
  16. package/dist/approvals/approval-store.d.ts.map +1 -1
  17. package/dist/approvals/approval-store.js +127 -23
  18. package/dist/approvals/approval-store.js.map +1 -1
  19. package/dist/approvals/manifest.d.ts.map +1 -1
  20. package/dist/approvals/manifest.js +0 -5
  21. package/dist/approvals/manifest.js.map +1 -1
  22. package/dist/approvals/telemetry.d.ts +27 -3
  23. package/dist/approvals/telemetry.d.ts.map +1 -1
  24. package/dist/approvals/telemetry.js +8 -4
  25. package/dist/approvals/telemetry.js.map +1 -1
  26. package/dist/approvals/tool-approval-gate.d.ts +79 -0
  27. package/dist/approvals/tool-approval-gate.d.ts.map +1 -1
  28. package/dist/approvals/tool-approval-gate.js +184 -21
  29. package/dist/approvals/tool-approval-gate.js.map +1 -1
  30. package/dist/approvals/tool-approvals-manifest.json +0 -2
  31. package/dist/approvals/turn-context.d.ts +271 -0
  32. package/dist/approvals/turn-context.d.ts.map +1 -0
  33. package/dist/approvals/turn-context.js +551 -0
  34. package/dist/approvals/turn-context.js.map +1 -0
  35. package/dist/cli/guide-commands.d.ts.map +1 -1
  36. package/dist/cli/guide-commands.js +43 -8
  37. package/dist/cli/guide-commands.js.map +1 -1
  38. package/dist/cli/senpi-commands.d.ts.map +1 -1
  39. package/dist/cli/senpi-commands.js +91 -12
  40. package/dist/cli/senpi-commands.js.map +1 -1
  41. package/dist/constants/dsl/index.d.ts +2 -0
  42. package/dist/constants/dsl/index.d.ts.map +1 -1
  43. package/dist/constants/dsl/index.js +2 -0
  44. package/dist/constants/dsl/index.js.map +1 -1
  45. package/dist/constants/order-types.d.ts.map +1 -1
  46. package/dist/constants/order-types.js +4 -1
  47. package/dist/constants/order-types.js.map +1 -1
  48. package/dist/deploy/job.d.ts +32 -0
  49. package/dist/deploy/job.d.ts.map +1 -1
  50. package/dist/deploy/job.js +72 -7
  51. package/dist/deploy/job.js.map +1 -1
  52. package/dist/deploy/messages.d.ts +15 -1
  53. package/dist/deploy/messages.d.ts.map +1 -1
  54. package/dist/deploy/messages.js +78 -0
  55. package/dist/deploy/messages.js.map +1 -1
  56. package/dist/deploy/orchestrator.d.ts +11 -1
  57. package/dist/deploy/orchestrator.d.ts.map +1 -1
  58. package/dist/deploy/orchestrator.js +111 -15
  59. package/dist/deploy/orchestrator.js.map +1 -1
  60. package/dist/deploy/register.d.ts +18 -0
  61. package/dist/deploy/register.d.ts.map +1 -1
  62. package/dist/deploy/register.js +93 -2
  63. package/dist/deploy/register.js.map +1 -1
  64. package/dist/dsl/engine/exchange-stop.d.ts +21 -1
  65. package/dist/dsl/engine/exchange-stop.d.ts.map +1 -1
  66. package/dist/dsl/engine/exchange-stop.js +27 -1
  67. package/dist/dsl/engine/exchange-stop.js.map +1 -1
  68. package/dist/dsl/engine/floors.d.ts +2 -1
  69. package/dist/dsl/engine/floors.d.ts.map +1 -1
  70. package/dist/dsl/engine/floors.js +2 -1
  71. package/dist/dsl/engine/floors.js.map +1 -1
  72. package/dist/dsl/engine/index.d.ts +1 -1
  73. package/dist/dsl/engine/index.d.ts.map +1 -1
  74. package/dist/dsl/engine/index.js +1 -1
  75. package/dist/dsl/engine/index.js.map +1 -1
  76. package/dist/dsl/engine/tick.d.ts.map +1 -1
  77. package/dist/dsl/engine/tick.js +4 -3
  78. package/dist/dsl/engine/tick.js.map +1 -1
  79. package/dist/dsl/events/handlers.d.ts +7 -3
  80. package/dist/dsl/events/handlers.d.ts.map +1 -1
  81. package/dist/dsl/events/handlers.js +10 -4
  82. package/dist/dsl/events/handlers.js.map +1 -1
  83. package/dist/dsl/events/initial-state.d.ts.map +1 -1
  84. package/dist/dsl/events/initial-state.js +2 -0
  85. package/dist/dsl/events/initial-state.js.map +1 -1
  86. package/dist/dsl/monitor/exchange-sync.d.ts +1 -0
  87. package/dist/dsl/monitor/exchange-sync.d.ts.map +1 -1
  88. package/dist/dsl/monitor/exchange-sync.js +7 -14
  89. package/dist/dsl/monitor/exchange-sync.js.map +1 -1
  90. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
  91. package/dist/dsl/monitor/process-one-position.js +108 -17
  92. package/dist/dsl/monitor/process-one-position.js.map +1 -1
  93. package/dist/dsl/notifications/formatter.d.ts +2 -1
  94. package/dist/dsl/notifications/formatter.d.ts.map +1 -1
  95. package/dist/dsl/notifications/formatter.js +18 -1
  96. package/dist/dsl/notifications/formatter.js.map +1 -1
  97. package/dist/health/types.d.ts +6 -1
  98. package/dist/health/types.d.ts.map +1 -1
  99. package/dist/health/types.js.map +1 -1
  100. package/dist/host/openclaw-host.d.ts +138 -0
  101. package/dist/host/openclaw-host.d.ts.map +1 -0
  102. package/dist/host/openclaw-host.js +177 -0
  103. package/dist/host/openclaw-host.js.map +1 -0
  104. package/dist/index.d.ts +46 -2
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +318 -38
  107. package/dist/index.js.map +1 -1
  108. package/dist/leverage/max-leverage-cache.d.ts +25 -0
  109. package/dist/leverage/max-leverage-cache.d.ts.map +1 -1
  110. package/dist/leverage/max-leverage-cache.js +77 -0
  111. package/dist/leverage/max-leverage-cache.js.map +1 -1
  112. package/dist/runtime/auto-update/coordinator.d.ts +203 -0
  113. package/dist/runtime/auto-update/coordinator.d.ts.map +1 -1
  114. package/dist/runtime/auto-update/coordinator.js +621 -12
  115. package/dist/runtime/auto-update/coordinator.js.map +1 -1
  116. package/dist/runtime/auto-update/gateway-restart.d.ts +60 -1
  117. package/dist/runtime/auto-update/gateway-restart.d.ts.map +1 -1
  118. package/dist/runtime/auto-update/gateway-restart.js +95 -21
  119. package/dist/runtime/auto-update/gateway-restart.js.map +1 -1
  120. package/dist/runtime/auto-update/idle-gate.d.ts +139 -0
  121. package/dist/runtime/auto-update/idle-gate.d.ts.map +1 -0
  122. package/dist/runtime/auto-update/idle-gate.js +217 -0
  123. package/dist/runtime/auto-update/idle-gate.js.map +1 -0
  124. package/dist/runtime/auto-update/install-results.d.ts +130 -0
  125. package/dist/runtime/auto-update/install-results.d.ts.map +1 -0
  126. package/dist/runtime/auto-update/install-results.js +264 -0
  127. package/dist/runtime/auto-update/install-results.js.map +1 -0
  128. package/dist/runtime/auto-update/money-call-tracker.d.ts +36 -0
  129. package/dist/runtime/auto-update/money-call-tracker.d.ts.map +1 -0
  130. package/dist/runtime/auto-update/money-call-tracker.js +129 -0
  131. package/dist/runtime/auto-update/money-call-tracker.js.map +1 -0
  132. package/dist/runtime/auto-update/register-idle-gate.d.ts +70 -0
  133. package/dist/runtime/auto-update/register-idle-gate.d.ts.map +1 -0
  134. package/dist/runtime/auto-update/register-idle-gate.js +123 -0
  135. package/dist/runtime/auto-update/register-idle-gate.js.map +1 -0
  136. package/dist/runtime/auto-update/run-update-command.d.ts +13 -0
  137. package/dist/runtime/auto-update/run-update-command.d.ts.map +1 -1
  138. package/dist/runtime/auto-update/run-update-command.js +18 -0
  139. package/dist/runtime/auto-update/run-update-command.js.map +1 -1
  140. package/dist/runtime/auto-update/state-store.d.ts +14 -1
  141. package/dist/runtime/auto-update/state-store.d.ts.map +1 -1
  142. package/dist/runtime/auto-update/state-store.js +37 -3
  143. package/dist/runtime/auto-update/state-store.js.map +1 -1
  144. package/dist/runtime/auto-update/types.d.ts +51 -0
  145. package/dist/runtime/auto-update/types.d.ts.map +1 -1
  146. package/dist/runtime/auto-update/types.js.map +1 -1
  147. package/dist/runtime/auto-update/update-marker.d.ts +95 -0
  148. package/dist/runtime/auto-update/update-marker.d.ts.map +1 -0
  149. package/dist/runtime/auto-update/update-marker.js +185 -0
  150. package/dist/runtime/auto-update/update-marker.js.map +1 -0
  151. package/dist/runtime/auto-update/update-schedule.d.ts +57 -0
  152. package/dist/runtime/auto-update/update-schedule.d.ts.map +1 -0
  153. package/dist/runtime/auto-update/update-schedule.js +75 -0
  154. package/dist/runtime/auto-update/update-schedule.js.map +1 -0
  155. package/dist/runtime/create-scanner-module.d.ts +1 -1
  156. package/dist/runtime/create-scanner-module.d.ts.map +1 -1
  157. package/dist/runtime/create-scanner-module.js +2 -1
  158. package/dist/runtime/create-scanner-module.js.map +1 -1
  159. package/dist/runtime/decision-errors.d.ts +7 -0
  160. package/dist/runtime/decision-errors.d.ts.map +1 -1
  161. package/dist/runtime/decision-errors.js +15 -0
  162. package/dist/runtime/decision-errors.js.map +1 -1
  163. package/dist/runtime/lifecycle-events.d.ts +1 -1
  164. package/dist/runtime/lifecycle-events.d.ts.map +1 -1
  165. package/dist/runtime/lifecycle-events.js +10 -1
  166. package/dist/runtime/lifecycle-events.js.map +1 -1
  167. package/dist/runtime/runtime-descriptor.d.ts +11 -2
  168. package/dist/runtime/runtime-descriptor.d.ts.map +1 -1
  169. package/dist/runtime/runtime-descriptor.js +11 -2
  170. package/dist/runtime/runtime-descriptor.js.map +1 -1
  171. package/dist/runtime/runtime.d.ts.map +1 -1
  172. package/dist/runtime/runtime.js +4 -3
  173. package/dist/runtime/runtime.js.map +1 -1
  174. package/dist/runtime/strategy-lifecycle.js +1 -1
  175. package/dist/runtime/strategy-lifecycle.js.map +1 -1
  176. package/dist/runtime/supervisor/long-running-supervisor.js +1 -1
  177. package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
  178. package/dist/runtime-api/intake/acceptance-record.d.ts +17 -3
  179. package/dist/runtime-api/intake/acceptance-record.d.ts.map +1 -1
  180. package/dist/runtime-api/intake/acceptance-record.js +57 -32
  181. package/dist/runtime-api/intake/acceptance-record.js.map +1 -1
  182. package/dist/runtime-api/intake/intake-events.d.ts +6 -5
  183. package/dist/runtime-api/intake/intake-events.d.ts.map +1 -1
  184. package/dist/runtime-api/intake/intake-events.js +9 -3
  185. package/dist/runtime-api/intake/intake-events.js.map +1 -1
  186. package/dist/runtime-api/intake/process-signal-post.d.ts +1 -1
  187. package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
  188. package/dist/runtime-api/intake/process-signal-post.js +34 -31
  189. package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
  190. package/dist/runtime-api/intake/scaffold-error-router.d.ts +8 -0
  191. package/dist/runtime-api/intake/scaffold-error-router.d.ts.map +1 -1
  192. package/dist/runtime-api/intake/scaffold-error-router.js +9 -0
  193. package/dist/runtime-api/intake/scaffold-error-router.js.map +1 -1
  194. package/dist/runtime-api/intake/types.d.ts +9 -0
  195. package/dist/runtime-api/intake/types.d.ts.map +1 -1
  196. package/dist/runtime-api/intake/types.js +5 -1
  197. package/dist/runtime-api/intake/types.js.map +1 -1
  198. package/dist/runtime-api/routes/signals.d.ts.map +1 -1
  199. package/dist/runtime-api/routes/signals.js +25 -1
  200. package/dist/runtime-api/routes/signals.js.map +1 -1
  201. package/dist/runtime-api/routes/signals.schema.d.ts +2 -0
  202. package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
  203. package/dist/runtime-api/routes/signals.schema.js +4 -0
  204. package/dist/runtime-api/routes/signals.schema.js.map +1 -1
  205. package/dist/scanners/engine/data-providers.d.ts +6 -0
  206. package/dist/scanners/engine/data-providers.d.ts.map +1 -1
  207. package/dist/scanners/engine/data-providers.js.map +1 -1
  208. package/dist/scanners/engine/engine.d.ts +9 -0
  209. package/dist/scanners/engine/engine.d.ts.map +1 -1
  210. package/dist/scanners/engine/engine.js +29 -6
  211. package/dist/scanners/engine/engine.js.map +1 -1
  212. package/dist/scanners/external/scaffold/ctx.py +55 -1
  213. package/dist/scanners/external/scaffold/delivery.py +92 -28
  214. package/dist/scanners/external/scaffold/preflight.py +1 -1
  215. package/dist/scanners/external/scaffold/scaffold.py +75 -2
  216. package/dist/scanners/runtime-module.d.ts +2 -0
  217. package/dist/scanners/runtime-module.d.ts.map +1 -1
  218. package/dist/scanners/runtime-module.js +14 -0
  219. package/dist/scanners/runtime-module.js.map +1 -1
  220. package/dist/senpi/client.d.ts +36 -1
  221. package/dist/senpi/client.d.ts.map +1 -1
  222. package/dist/senpi/client.js +100 -8
  223. package/dist/senpi/client.js.map +1 -1
  224. package/dist/senpi/types.d.ts +54 -2
  225. package/dist/senpi/types.d.ts.map +1 -1
  226. package/dist/telemetry/metrics.d.ts +15 -1
  227. package/dist/telemetry/metrics.d.ts.map +1 -1
  228. package/dist/telemetry/metrics.js +25 -1
  229. package/dist/telemetry/metrics.js.map +1 -1
  230. package/dist/telemetry/otel-sdk.d.ts +12 -0
  231. package/dist/telemetry/otel-sdk.d.ts.map +1 -1
  232. package/dist/telemetry/otel-sdk.js +47 -1
  233. package/dist/telemetry/otel-sdk.js.map +1 -1
  234. package/dist/telemetry/spans/span-hooks.d.ts +18 -1
  235. package/dist/telemetry/spans/span-hooks.d.ts.map +1 -1
  236. package/dist/telemetry/spans/span-hooks.js +306 -96
  237. package/dist/telemetry/spans/span-hooks.js.map +1 -1
  238. package/dist/telemetry/tool-plane.d.ts +2 -0
  239. package/dist/telemetry/tool-plane.d.ts.map +1 -1
  240. package/dist/telemetry/tool-plane.js +1 -0
  241. package/dist/telemetry/tool-plane.js.map +1 -1
  242. package/dist/tool-surface/crib-cache.d.ts +21 -0
  243. package/dist/tool-surface/crib-cache.d.ts.map +1 -0
  244. package/dist/tool-surface/crib-cache.js +54 -0
  245. package/dist/tool-surface/crib-cache.js.map +1 -0
  246. package/dist/tool-surface/crib-hook.d.ts +78 -0
  247. package/dist/tool-surface/crib-hook.d.ts.map +1 -0
  248. package/dist/tool-surface/crib-hook.js +217 -0
  249. package/dist/tool-surface/crib-hook.js.map +1 -0
  250. package/dist/tool-surface/crib-sheet.d.ts +56 -0
  251. package/dist/tool-surface/crib-sheet.d.ts.map +1 -0
  252. package/dist/tool-surface/crib-sheet.js +129 -0
  253. package/dist/tool-surface/crib-sheet.js.map +1 -0
  254. package/dist/tool-surface/mcp-tool-source.d.ts +64 -0
  255. package/dist/tool-surface/mcp-tool-source.d.ts.map +1 -0
  256. package/dist/tool-surface/mcp-tool-source.js +189 -0
  257. package/dist/tool-surface/mcp-tool-source.js.map +1 -0
  258. package/dist/types/dsl/index.d.ts +4 -0
  259. package/dist/types/dsl/index.d.ts.map +1 -1
  260. package/dist/utils/event-catalog.d.ts +141 -10
  261. package/dist/utils/event-catalog.d.ts.map +1 -1
  262. package/dist/utils/event-catalog.js +23 -1
  263. package/dist/utils/event-catalog.js.map +1 -1
  264. package/dist/utils/perp-coin.d.ts.map +1 -1
  265. package/dist/utils/perp-coin.js +2 -1
  266. package/dist/utils/perp-coin.js.map +1 -1
  267. package/dist/utils/resolve-order-type.d.ts.map +1 -1
  268. package/dist/utils/resolve-order-type.js +5 -1
  269. package/dist/utils/resolve-order-type.js.map +1 -1
  270. package/dist/validate/codes.d.ts +2 -0
  271. package/dist/validate/codes.d.ts.map +1 -1
  272. package/dist/validate/codes.js +6 -0
  273. package/dist/validate/codes.js.map +1 -1
  274. package/dist/validate/index.d.ts +1 -1
  275. package/dist/validate/index.d.ts.map +1 -1
  276. package/dist/validate/index.js +1 -1
  277. package/dist/validate/index.js.map +1 -1
  278. package/dist/validate/recipe-checks.d.ts +7 -0
  279. package/dist/validate/recipe-checks.d.ts.map +1 -1
  280. package/dist/validate/recipe-checks.js +18 -0
  281. package/dist/validate/recipe-checks.js.map +1 -1
  282. package/dist/validate/recipe.d.ts.map +1 -1
  283. package/dist/validate/recipe.js +2 -1
  284. package/dist/validate/recipe.js.map +1 -1
  285. package/dist/widgets/tool.d.ts +9 -0
  286. package/dist/widgets/tool.d.ts.map +1 -1
  287. package/dist/widgets/tool.js +1 -0
  288. package/dist/widgets/tool.js.map +1 -1
  289. package/examples/strategies/README.md +2 -1
  290. package/examples/strategies/iguana/README.md +3 -3
  291. package/examples/strategies/raptor/README.md +3 -3
  292. package/openclaw.plugin.json +11 -1
  293. package/package.json +5 -2
@@ -0,0 +1,36 @@
1
+ /** An unended money call is dropped after 15 min (approval timeout plus the MCP call deadline, with headroom). */
2
+ export declare const MONEY_CALL_STALE_MS: number;
3
+ /** Open money calls, keyed by tool call id (or run + name when the host gives no id). */
4
+ export declare class MoneyCallTracker {
5
+ private readonly staleMs;
6
+ private readonly open;
7
+ private seq;
8
+ /**
9
+ * @param staleMs - Age at which an unended call is dropped.
10
+ */
11
+ constructor(staleMs?: number);
12
+ /** Records a call under `key`. A key already open gets a numbered twin, so neither is lost. */
13
+ begin(key: string, now: number): void;
14
+ /** Ends the oldest open call under `key` (or its numbered twins). Unknown keys are ignored. */
15
+ end(key: string): void;
16
+ /** Ends every open call whose key starts with `prefix` (a dispatcher's inner calls). */
17
+ endPrefix(prefix: string): void;
18
+ /** Calls still open at `now`; stale ones are dropped first. */
19
+ count(now: number): number;
20
+ }
21
+ /**
22
+ * Feeds `tracker` from `before_tool_call` / `after_tool_call` for the tools
23
+ * `isMoneyTool` accepts (bare names; the runtime passes `isMoneyCallTool`,
24
+ * the approval manifest's trade tools plus `ORDER_CALL_TOOLS`).
25
+ */
26
+ export declare function registerMoneyCallHooks(params: {
27
+ api: {
28
+ on(hookName: string, handler: (...args: unknown[]) => unknown, opts?: {
29
+ priority?: number;
30
+ }): void;
31
+ };
32
+ tracker: MoneyCallTracker;
33
+ isMoneyTool: (bare: string) => boolean;
34
+ now?: () => number;
35
+ }): void;
36
+ //# sourceMappingURL=money-call-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money-call-tracker.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/money-call-tracker.ts"],"names":[],"mappings":"AAuBA,kHAAkH;AAClH,eAAO,MAAM,mBAAmB,QAAc,CAAC;AAE/C,yFAAyF;AACzF,qBAAa,gBAAgB;IAOf,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,GAAG,CAAK;IAEhB;;OAEG;gBAC0B,OAAO,SAAsB;IAE1D,+FAA+F;IAC/F,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKrC,+FAA+F;IAC/F,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAUtB,wFAAwF;IACxF,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B,+DAA+D;IAC/D,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM3B;AA2BD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,GAAG,EAAE;QAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5G,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,IAAI,CA8BP"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Money calls in flight on every route, for the self-update idle gate (R2).
3
+ *
4
+ * `senpiOrderCallsInFlight` (`senpi/client.ts`) counts only the runtime's own
5
+ * in-process MCP calls. The agent's `senpi__*` calls go through the gateway's
6
+ * MCP client, directly or through the 10.x dispatcher, and that counter never
7
+ * sees them. Every one of those calls passes `before_tool_call` and
8
+ * `after_tool_call`, so the hooks are where they are counted: a call starts at
9
+ * `before_tool_call` (approval wait included) and ends at its
10
+ * `after_tool_call`, or at its 10.x dispatcher's `after_tool_call` when the
11
+ * inner one never fires (the same case `span-hooks.ts` closes inner spans
12
+ * for: the dispatcher awaited the inner call, so it is over). An entry with
13
+ * no end is dropped after {@link MONEY_CALL_STALE_MS}, so a lost hook cannot
14
+ * pin the box busy.
15
+ *
16
+ * Handlers return nothing and never throw: this is an observer, not a gate.
17
+ */
18
+ import { matchSenpiTool } from "../../approvals/tool-approval-gate.js";
19
+ import { sanitizeToolCallIdPart } from "../../telemetry/spans/span-hooks.js";
20
+ /** The 10.x tool-search dispatchers that run an inner tool (`dispatch_action` on 10.10, `tool_call` on 10.4). */
21
+ const DISPATCHER_TOOLS = new Set(["dispatch_action", "tool_call"]);
22
+ /** An unended money call is dropped after 15 min (approval timeout plus the MCP call deadline, with headroom). */
23
+ export const MONEY_CALL_STALE_MS = 15 * 60_000;
24
+ /** Open money calls, keyed by tool call id (or run + name when the host gives no id). */
25
+ export class MoneyCallTracker {
26
+ staleMs;
27
+ open = new Map();
28
+ seq = 0;
29
+ /**
30
+ * @param staleMs - Age at which an unended call is dropped.
31
+ */
32
+ constructor(staleMs = MONEY_CALL_STALE_MS) {
33
+ this.staleMs = staleMs;
34
+ }
35
+ /** Records a call under `key`. A key already open gets a numbered twin, so neither is lost. */
36
+ begin(key, now) {
37
+ const k = this.open.has(key) ? `${key}#${++this.seq}` : key;
38
+ this.open.set(k, now);
39
+ }
40
+ /** Ends the oldest open call under `key` (or its numbered twins). Unknown keys are ignored. */
41
+ end(key) {
42
+ if (this.open.delete(key))
43
+ return;
44
+ for (const k of this.open.keys()) {
45
+ if (k.startsWith(`${key}#`)) {
46
+ this.open.delete(k);
47
+ return;
48
+ }
49
+ }
50
+ }
51
+ /** Ends every open call whose key starts with `prefix` (a dispatcher's inner calls). */
52
+ endPrefix(prefix) {
53
+ for (const k of [...this.open.keys()]) {
54
+ if (k.startsWith(prefix))
55
+ this.open.delete(k);
56
+ }
57
+ }
58
+ /** Calls still open at `now`; stale ones are dropped first. */
59
+ count(now) {
60
+ for (const [k, startedAt] of this.open) {
61
+ if (now - startedAt >= this.staleMs)
62
+ this.open.delete(k);
63
+ }
64
+ return this.open.size;
65
+ }
66
+ }
67
+ function rec(value) {
68
+ return value && typeof value === "object" ? value : undefined;
69
+ }
70
+ function nonEmpty(value) {
71
+ return typeof value === "string" && value.length > 0 ? value : undefined;
72
+ }
73
+ /**
74
+ * The bare Senpi tool a hook event names, when it is a money tool; else `null`.
75
+ */
76
+ function moneyToolOf(event, isMoneyTool) {
77
+ const bare = matchSenpiTool(rec(event)?.toolName ?? rec(event)?.name);
78
+ return bare && isMoneyTool(bare) ? bare : null;
79
+ }
80
+ /** Tool call id, else `<session>:<run>:<tool>`. */
81
+ function callKey(event, ctx, bare) {
82
+ const e = rec(event);
83
+ const c = rec(ctx);
84
+ const id = nonEmpty(e?.toolCallId) ?? nonEmpty(c?.toolCallId);
85
+ if (id)
86
+ return `id:${id}`;
87
+ return `run:${nonEmpty(c?.sessionKey) ?? ""}:${nonEmpty(e?.runId) ?? nonEmpty(c?.runId) ?? ""}:${bare}`;
88
+ }
89
+ /**
90
+ * Feeds `tracker` from `before_tool_call` / `after_tool_call` for the tools
91
+ * `isMoneyTool` accepts (bare names; the runtime passes `isMoneyCallTool`,
92
+ * the approval manifest's trade tools plus `ORDER_CALL_TOOLS`).
93
+ */
94
+ export function registerMoneyCallHooks(params) {
95
+ const { api, tracker, isMoneyTool } = params;
96
+ const now = params.now ?? Date.now;
97
+ api.on("before_tool_call", (event, ctx) => {
98
+ try {
99
+ const bare = moneyToolOf(event, isMoneyTool);
100
+ if (bare)
101
+ tracker.begin(callKey(event, ctx, bare), now());
102
+ }
103
+ catch {
104
+ // Never disturb a tool call.
105
+ }
106
+ return undefined;
107
+ });
108
+ api.on("after_tool_call", (event, ctx) => {
109
+ try {
110
+ const e = rec(event);
111
+ const name = nonEmpty(e?.toolName) ?? nonEmpty(e?.name);
112
+ const outerId = nonEmpty(e?.toolCallId) ?? nonEmpty(rec(ctx)?.toolCallId);
113
+ // The inner call a 10.x dispatcher runs is `tool_call:<sanitized outer id>:…`
114
+ // (10.10 `tool-search-runtime.ts:406-410`); a late inner after_tool_call is then a no-op.
115
+ if (name && DISPATCHER_TOOLS.has(name) && outerId) {
116
+ tracker.endPrefix(`id:tool_call:${sanitizeToolCallIdPart(outerId)}:`);
117
+ return undefined;
118
+ }
119
+ const bare = moneyToolOf(event, isMoneyTool);
120
+ if (bare)
121
+ tracker.end(callKey(event, ctx, bare));
122
+ }
123
+ catch {
124
+ // Never disturb a tool call.
125
+ }
126
+ return undefined;
127
+ });
128
+ }
129
+ //# sourceMappingURL=money-call-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money-call-tracker.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/money-call-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Feeds the self-update {@link UpdateIdleGate} from OpenClaw hooks and agent
3
+ * events (R2). Kept apart from `idle-gate.ts` so the gate itself stays pure
4
+ * and host-neutral.
5
+ *
6
+ * Sources, as on OpenClaw 2026.10.10-beta.3:
7
+ * - `before_prompt_build` hook context (`PluginHookAgentContext`: `runId`,
8
+ * `sessionKey`, `trigger`, `inputProvenance`) classifies a run; lifecycle
9
+ * `start` events carry no trigger (`src/plugins/hook-agent-context.types.ts`);
10
+ * - `api.runtime.events.onAgentEvent` lifecycle `start` / `end` / `error`
11
+ * (`src/infra/agent-events.ts`) and the `agent_end` hook end a run;
12
+ * - `message_received` (fired for webchat `chat.send` through
13
+ * dispatch-from-config) marks a user message;
14
+ * - `subagent_spawned` (ctx `requesterSessionKey`, `childSessionKey`) and
15
+ * `subagent_ended` (event `targetSessionKey`) track a user run's subagents.
16
+ *
17
+ * Every handler swallows its own errors: an idle-gate bug must never disturb
18
+ * a turn. A missed event errs toward idle only through the gate's own 2 h
19
+ * stale drop; the 15 min recent-message rule still covers an unclassified run.
20
+ */
21
+ import type { UpdateIdleGate } from "./idle-gate.js";
22
+ /** The slice of the plugin API the registration needs. */
23
+ export interface IdleGateHookApi {
24
+ on(hookName: string, handler: (...args: unknown[]) => unknown, opts?: {
25
+ priority?: number;
26
+ }): void;
27
+ /** `full` for the live gateway registry; 10.x also registers in non-full modes (`discovery`, `tool-discovery`, …). */
28
+ registrationMode?: unknown;
29
+ runtime?: {
30
+ events?: {
31
+ onAgentEvent?: (listener: (event: unknown) => void) => unknown;
32
+ };
33
+ };
34
+ }
35
+ interface LoggerLike {
36
+ warn(message: string): void;
37
+ }
38
+ /**
39
+ * Registers the hooks and the agent-event listener that feed `gate`.
40
+ *
41
+ * @returns Whether the lifecycle listener was attached (`false` on a host
42
+ * without `runtime.events.onAgentEvent`, where runs start at
43
+ * classification and end at `agent_end`, and `false` for a non-full
44
+ * registration: 10.10 re-registers plugins in `tool-discovery` mode inside
45
+ * the gateway process (`tools.catalog`), and that throwaway registration
46
+ * must not replace the live gate's process-wide listener).
47
+ */
48
+ export declare function registerIdleGateHooks(params: {
49
+ api: IdleGateHookApi;
50
+ gate: UpdateIdleGate;
51
+ logger?: LoggerLike;
52
+ now?: () => number;
53
+ }): boolean;
54
+ /**
55
+ * The box identity the update spread hashes. Stable across restarts and the
56
+ * same for every process on the box:
57
+ * 1. the `sub` claim of the Senpi auth token (the user);
58
+ * 2. its `senpi_user_id` claim;
59
+ * 3. `RAILWAY_SERVICE_ID` (the box's Railway service);
60
+ * 4. the hostname.
61
+ * The telemetry `PROCESS_INSTANCE_ID` is not used: it is random per process,
62
+ * so the box would draw a new slot on every restart.
63
+ */
64
+ export declare function resolveUpdateMid(params: {
65
+ token?: string;
66
+ env: NodeJS.ProcessEnv;
67
+ hostname: () => string;
68
+ }): string;
69
+ export {};
70
+ //# sourceMappingURL=register-idle-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-idle-gate.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/register-idle-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnG,sHAAsH;IACtH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC;SAChE,CAAC;KACH,CAAC;CACH;AAED,UAAU,UAAU;IAClB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AASD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,OAAO,CAyEV;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB,GAAG,MAAM,CAYT"}
@@ -0,0 +1,123 @@
1
+ /** The lifecycle listener's unsubscribe handle from the last registration in this process. */
2
+ let previousUnsubscribe;
3
+ function rec(value) {
4
+ return value && typeof value === "object" ? value : undefined;
5
+ }
6
+ /**
7
+ * Registers the hooks and the agent-event listener that feed `gate`.
8
+ *
9
+ * @returns Whether the lifecycle listener was attached (`false` on a host
10
+ * without `runtime.events.onAgentEvent`, where runs start at
11
+ * classification and end at `agent_end`, and `false` for a non-full
12
+ * registration: 10.10 re-registers plugins in `tool-discovery` mode inside
13
+ * the gateway process (`tools.catalog`), and that throwaway registration
14
+ * must not replace the live gate's process-wide listener).
15
+ */
16
+ export function registerIdleGateHooks(params) {
17
+ const { api, gate, logger } = params;
18
+ const now = params.now ?? Date.now;
19
+ const guard = (name, fn) => {
20
+ try {
21
+ fn();
22
+ }
23
+ catch (error) {
24
+ logger?.warn(`[senpi-auto-update] idle gate ${name} handler failed | err=${error instanceof Error ? error.message : String(error)}`);
25
+ }
26
+ };
27
+ api.on("before_prompt_build", (_event, ctx) => {
28
+ guard("before_prompt_build", () => {
29
+ const c = rec(ctx);
30
+ if (!c)
31
+ return;
32
+ gate.onRunClassified(c.runId, { trigger: c.trigger, inputProvenanceKind: rec(c.inputProvenance)?.kind, sessionKey: c.sessionKey }, now());
33
+ });
34
+ return undefined;
35
+ });
36
+ api.on("agent_end", (_event, ctx) => {
37
+ guard("agent_end", () => gate.onRunEnd(rec(ctx)?.runId, now()));
38
+ });
39
+ api.on("message_received", () => {
40
+ guard("message_received", () => gate.onUserMessage(now()));
41
+ });
42
+ api.on("subagent_spawned", (event, ctx) => {
43
+ guard("subagent_spawned", () => {
44
+ const e = rec(event);
45
+ const c = rec(ctx);
46
+ gate.onSubagentSpawned({
47
+ childSessionKey: c?.childSessionKey ?? e?.childSessionKey,
48
+ requesterSessionKey: c?.requesterSessionKey ?? rec(e?.requester)?.sessionKey,
49
+ }, now());
50
+ });
51
+ });
52
+ api.on("subagent_ended", (event, ctx) => {
53
+ guard("subagent_ended", () => gate.onSubagentEnded(rec(event)?.targetSessionKey ?? rec(ctx)?.childSessionKey, now()));
54
+ });
55
+ const onAgentEvent = api.runtime?.events?.onAgentEvent;
56
+ if (typeof onAgentEvent !== "function")
57
+ return false;
58
+ if (api.registrationMode !== undefined && api.registrationMode !== "full")
59
+ return false;
60
+ // A second registration in the same process replaces the first listener.
61
+ if (typeof previousUnsubscribe === "function") {
62
+ try {
63
+ previousUnsubscribe();
64
+ }
65
+ catch {
66
+ // ignore
67
+ }
68
+ }
69
+ previousUnsubscribe = onAgentEvent((event) => {
70
+ guard("lifecycle", () => {
71
+ const e = rec(event);
72
+ if (!e || e.stream !== "lifecycle")
73
+ return;
74
+ const phase = rec(e.data)?.phase;
75
+ if (phase === "start")
76
+ gate.onRunStart(e.runId, e.sessionKey, now());
77
+ else if (phase === "end" || phase === "error")
78
+ gate.onRunEnd(e.runId, now());
79
+ });
80
+ });
81
+ return true;
82
+ }
83
+ /**
84
+ * The box identity the update spread hashes. Stable across restarts and the
85
+ * same for every process on the box:
86
+ * 1. the `sub` claim of the Senpi auth token (the user);
87
+ * 2. its `senpi_user_id` claim;
88
+ * 3. `RAILWAY_SERVICE_ID` (the box's Railway service);
89
+ * 4. the hostname.
90
+ * The telemetry `PROCESS_INSTANCE_ID` is not used: it is random per process,
91
+ * so the box would draw a new slot on every restart.
92
+ */
93
+ export function resolveUpdateMid(params) {
94
+ const claims = decodeJwtClaims(params.token);
95
+ for (const value of [claims?.sub, claims?.senpi_user_id]) {
96
+ if ((typeof value === "string" && value.length > 0) || typeof value === "number")
97
+ return String(value);
98
+ }
99
+ const service = params.env.RAILWAY_SERVICE_ID;
100
+ if (typeof service === "string" && service.length > 0)
101
+ return service;
102
+ try {
103
+ return params.hostname();
104
+ }
105
+ catch {
106
+ return "";
107
+ }
108
+ }
109
+ /** The payload of a JWT, unverified; `undefined` for anything that is not one. */
110
+ function decodeJwtClaims(token) {
111
+ if (typeof token !== "string")
112
+ return undefined;
113
+ const payload = token.split(".")[1];
114
+ if (!payload)
115
+ return undefined;
116
+ try {
117
+ return rec(JSON.parse(Buffer.from(payload, "base64url").toString("utf8")));
118
+ }
119
+ catch {
120
+ return undefined;
121
+ }
122
+ }
123
+ //# sourceMappingURL=register-idle-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-idle-gate.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/register-idle-gate.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,15 @@
1
+ /**
2
+ * Installs `packageName` through `openclaw plugins update`. OpenClaw 5.x only.
3
+ *
4
+ * On an OpenClaw 10.x host it refuses before running anything: 10.10 refuses
5
+ * `plugins update` while the gateway runs ("Plugin updates require the Gateway
6
+ * to be stopped", `openclaw-worktrees/v2026.10.10-beta.3/src/cli/plugins-update-command.ts`)
7
+ * and its consent prompt needs a TTY, so the call could only fail. The 10.x
8
+ * path is restart-to-apply: the coordinator writes the install marker and the
9
+ * senpi-agent wrapper installs with the gateway down. The coordinator does not
10
+ * call this on a modern host; the guard keeps any other caller honest.
11
+ *
12
+ * @throws When the spec is unsafe, on a 10.x host, or when the command fails.
13
+ */
1
14
  export declare function runOpenClawPluginsUpdate(packageName: string): Promise<void>;
2
15
  //# sourceMappingURL=run-update-command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-update-command.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"AA4BA,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
1
+ {"version":3,"file":"run-update-command.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -9,6 +9,7 @@
9
9
  * consistent with the version-source poll ensures the install and the version
10
10
  * check follow the same npm package and the same release line.
11
11
  */
12
+ import { getOpenClawHost } from "../../host/openclaw-host.js";
12
13
  import { runCommand } from "./command-runner.js";
13
14
  /**
14
15
  * Conservative npm spec pattern: `<name>` or `<name>@<selector>`.
@@ -23,7 +24,24 @@ import { runCommand } from "./command-runner.js";
23
24
  * here is also a spec `openclaw plugins update` can resolve.
24
25
  */
25
26
  const SAFE_NPM_NAME = /^(?:@[A-Za-z0-9._-]+\/)?[A-Za-z0-9._-]+(?:@[A-Za-z0-9][A-Za-z0-9._-]*)?$/;
27
+ /**
28
+ * Installs `packageName` through `openclaw plugins update`. OpenClaw 5.x only.
29
+ *
30
+ * On an OpenClaw 10.x host it refuses before running anything: 10.10 refuses
31
+ * `plugins update` while the gateway runs ("Plugin updates require the Gateway
32
+ * to be stopped", `openclaw-worktrees/v2026.10.10-beta.3/src/cli/plugins-update-command.ts`)
33
+ * and its consent prompt needs a TTY, so the call could only fail. The 10.x
34
+ * path is restart-to-apply: the coordinator writes the install marker and the
35
+ * senpi-agent wrapper installs with the gateway down. The coordinator does not
36
+ * call this on a modern host; the guard keeps any other caller honest.
37
+ *
38
+ * @throws When the spec is unsafe, on a 10.x host, or when the command fails.
39
+ */
26
40
  export async function runOpenClawPluginsUpdate(packageName) {
41
+ if (getOpenClawHost()?.modern) {
42
+ throw new Error("runOpenClawPluginsUpdate: OpenClaw 10.x refuses plugins update while the gateway runs; " +
43
+ "the runtime applies updates by restart-to-apply (install marker + gateway restart)");
44
+ }
27
45
  if (!SAFE_NPM_NAME.test(packageName)) {
28
46
  throw new Error(`runOpenClawPluginsUpdate: unsafe package name ${JSON.stringify(packageName)}`);
29
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-update-command.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB;IAEnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,iDAAiD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,qEAAqE;IACrE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,IAAI,EACJ,CAAC,KAAK,EAAE,kCAAkC,WAAW,GAAG,CAAC,EACzD,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM,IAAI,4CAA4C,MAAM,CAAC,IAAI,EAAE,CAC3E,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run-update-command.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB;IAEnB,IAAI,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,yFAAyF;YACvF,oFAAoF,CACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,iDAAiD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,qEAAqE;IACrE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,IAAI,EACJ,CAAC,KAAK,EAAE,kCAAkC,WAAW,GAAG,CAAC,EACzD,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM,IAAI,4CAA4C,MAAM,CAAC,IAAI,EAAE,CAC3E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -22,7 +22,20 @@ export declare class AutoUpdateStateStore {
22
22
  * be read or parsed (e.g. corruption, permission error).
23
23
  */
24
24
  load(currentVersion: string, effectiveMode: AutoUpdateMode): Promise<AutoUpdateState>;
25
- /** Atomically write the state to disk, creating the directory if needed. */
25
+ /**
26
+ * Set some fields of the persisted state and leave every other field as it is on disk. For a
27
+ * coordinator that never loaded the full state (auto-update disabled), so it rewrites only
28
+ * what it owns. Not for use while a running coordinator also saves: it reads, then writes.
29
+ * A missing or unparsable file is replaced by an object holding only `fields`; a throw means
30
+ * nothing was written.
31
+ */
32
+ patch(fields: Partial<AutoUpdateState>): Promise<void>;
33
+ /**
34
+ * Atomically write the state to disk (temp file, then rename), creating the
35
+ * directory if needed. A process killed mid-write (a gateway restart lands
36
+ * right after a save) leaves the previous file, not a truncated one that
37
+ * would load as defaults and lose the restart retry cap.
38
+ */
26
39
  save(state: AutoUpdateState): Promise<void>;
27
40
  }
28
41
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,UAAU,UAAU;IAClB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAJ1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,UAAU,YAAA;IAKtC;;;;;;;OAOG;IACG,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAmB3F,4EAA4E;IACtE,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAIlD"}
1
+ {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,UAAU,UAAU;IAClB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAJ1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,UAAU,YAAA;IAKtC;;;;;;;OAOG;IACG,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAmB3F;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5D;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAWlD"}
@@ -1,4 +1,4 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
1
+ import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
3
  import { AUTO_UPDATE_STATE_FILE, createDefaultAutoUpdateState, } from "./types.js";
4
4
  /**
@@ -42,10 +42,44 @@ export class AutoUpdateStateStore {
42
42
  return createDefaultAutoUpdateState(currentVersion, effectiveMode);
43
43
  }
44
44
  }
45
- /** Atomically write the state to disk, creating the directory if needed. */
45
+ /**
46
+ * Set some fields of the persisted state and leave every other field as it is on disk. For a
47
+ * coordinator that never loaded the full state (auto-update disabled), so it rewrites only
48
+ * what it owns. Not for use while a running coordinator also saves: it reads, then writes.
49
+ * A missing or unparsable file is replaced by an object holding only `fields`; a throw means
50
+ * nothing was written.
51
+ */
52
+ async patch(fields) {
53
+ let current = {};
54
+ try {
55
+ const parsed = JSON.parse(await readFile(this.filePath, "utf8"));
56
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
57
+ current = parsed;
58
+ }
59
+ catch (err) {
60
+ const isNotFound = err instanceof Error && "code" in err && err.code === "ENOENT";
61
+ if (!isNotFound && !(err instanceof SyntaxError))
62
+ throw err;
63
+ }
64
+ await this.save({ ...current, ...fields });
65
+ }
66
+ /**
67
+ * Atomically write the state to disk (temp file, then rename), creating the
68
+ * directory if needed. A process killed mid-write (a gateway restart lands
69
+ * right after a save) leaves the previous file, not a truncated one that
70
+ * would load as defaults and lose the restart retry cap.
71
+ */
46
72
  async save(state) {
47
73
  await mkdir(dirname(this.filePath), { recursive: true });
48
- await writeFile(this.filePath, JSON.stringify(state, null, 2), "utf8");
74
+ const tmp = `${this.filePath}.${process.pid}.${Date.now()}.tmp`;
75
+ try {
76
+ await writeFile(tmp, JSON.stringify(state, null, 2), "utf8");
77
+ await rename(tmp, this.filePath);
78
+ }
79
+ catch (err) {
80
+ await rm(tmp, { force: true }).catch(() => undefined);
81
+ throw err;
82
+ }
49
83
  }
50
84
  }
51
85
  //# sourceMappingURL=state-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAG7B,MAAM,YAAY,CAAC;AAOpB;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IAIZ;IACA;IAJF,QAAQ,CAAS;IAElC,YACmB,QAAgB,EAChB,MAAmB;QADnB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAa;QAEpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CAAC,cAAsB,EAAE,aAA6B;QAC9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;YAC3D,OAAO;gBACL,GAAG,4BAA4B,CAAC,cAAc,EAAE,aAAa,CAAC;gBAC9D,GAAG,MAAM;gBACT,sBAAsB,EAAE,cAAc;gBACtC,aAAa;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,CAAC;YAC7G,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,wEAAwE,IAAI,CAAC,QAAQ,QAAQ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrK,CAAC;YACD,OAAO,4BAA4B,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,IAAI,CAAC,KAAsB;QAC/B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;CACF"}
1
+ {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,51 @@ export interface AutoUpdateState {
49
49
  restartCapabilityMode?: string;
50
50
  lastRestartTriggerAt?: string;
51
51
  lastRestartTriggerMode?: string;
52
+ /**
53
+ * OpenClaw 10.x only: the update this box is waiting to apply. `firstSeenAt` and `eligibleAt`
54
+ * are set once per pending episode (the spread offset plus jitter is drawn once), so the box
55
+ * does not lose its place when a newer version ships during the wait.
56
+ */
57
+ pendingUpdate?: AutoUpdatePendingUpdate;
58
+ /**
59
+ * The restart requested for an update, on both hosts. Its `requestedAt` is what the latch fix
60
+ * measures: a restart that has not loaded `toVersion` within 30 min is treated as failed.
61
+ * Cleared at the boot whose loaded version reaches `toVersion`.
62
+ */
63
+ pendingRestart?: AutoUpdatePendingRestart;
64
+ /**
65
+ * Restarts for `version` that expired without loading it. At
66
+ * `MAX_APPLY_ATTEMPTS` the coordinator stops trying that version until a
67
+ * newer one ships. Cleared when the loaded version reaches it.
68
+ */
69
+ applyFailures?: {
70
+ version: string;
71
+ count: number;
72
+ };
73
+ /**
74
+ * OpenClaw 10.x: ids of the wrapper install results already reported as
75
+ * `auto_update.install_result` (the last 50, oldest first), so a results
76
+ * file whose delete failed is not reported twice (`install-results.ts`).
77
+ */
78
+ reportedInstallResultIds?: string[];
79
+ }
80
+ /** See {@link AutoUpdateState.pendingUpdate}. */
81
+ export interface AutoUpdatePendingUpdate {
82
+ version: string;
83
+ /** ISO time a version newer than the loaded one was first seen in this episode. */
84
+ firstSeenAt: string;
85
+ /** ISO time the box may first apply: `firstSeenAt + spreadOffsetMs(mid) + jitter`. */
86
+ eligibleAt: string;
87
+ }
88
+ /** See {@link AutoUpdateState.pendingRestart}. */
89
+ export interface AutoUpdatePendingRestart {
90
+ /** Loaded version when the restart was requested. */
91
+ fromVersion: string;
92
+ toVersion: string;
93
+ /** ISO time of the restart request. */
94
+ requestedAt: string;
95
+ /** `restart-to-apply` on 10.x; the gateway reload mode (`hybrid`, `restart`) on 5.x. */
96
+ mode: string;
52
97
  }
53
98
  /**
54
99
  * Result of the preflight environment check performed before the first poll.
@@ -91,6 +136,12 @@ export interface AutoUpdateSnapshot {
91
136
  restartCapabilityReasons: string[];
92
137
  lastRestartTriggerAt: string | null;
93
138
  lastRestartTriggerMode: string | null;
139
+ /**
140
+ * OpenClaw 10.x only: why the pending update has not been applied yet, while `lastAction` is
141
+ * `pending-idle:<v>`. `spread` while the box waits for its offset; otherwise the idle gate's
142
+ * blockers (`user-run`, `user-queued`, `approval`, `order`, `recent-message`). Empty otherwise.
143
+ */
144
+ pendingBlockers: string[];
94
145
  }
95
146
  /**
96
147
  * Why a forced {@link AutoUpdateCoordinator.checkNow} call did or did not run a cycle.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"AAyHA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D,SAAS,MAAM,CAAC,KAAc,EAAE,QAAiB;IAC/C,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,QAAgB;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,GAAG,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;IACvE,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;QAClC,IAAI;QACJ,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QAC7E,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QAC9E,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;QACxC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;QACxC,2BAA2B;QAC3B,UAAU,EAAE,KAAK;QACjB,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QACjF,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7E,kBAAkB,EAAE,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;KACpG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,cAAsB,EACtB,aAA6B;IAE7B,OAAO;QACL,sBAAsB,EAAE,cAAc;QACtC,qBAAqB,EAAE,cAAc;QACrC,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE,CAAC;QACtB,aAAa;QACb,iBAAiB,EAAE,SAAS;QAC5B,wBAAwB,EAAE,EAAE;KAC7B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"AA2KA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D,SAAS,MAAM,CAAC,KAAc,EAAE,QAAiB;IAC/C,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,QAAgB;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,GAAG,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;IACvE,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;QAClC,IAAI;QACJ,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QAC7E,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QAC9E,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;QACxC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;QACxC,2BAA2B;QAC3B,UAAU,EAAE,KAAK;QACjB,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QACjF,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7E,kBAAkB,EAAE,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;KACpG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,cAAsB,EACtB,aAA6B;IAE7B,OAAO;QACL,sBAAsB,EAAE,cAAc;QACtC,qBAAqB,EAAE,cAAc;QACrC,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE,CAAC;QACtB,aAAa;QACb,iBAAiB,EAAE,SAAS;QAC5B,wBAAwB,EAAE,EAAE;KAC7B,CAAC;AACJ,CAAC"}