@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
@@ -1,4 +1,7 @@
1
+ import { type MutateConfigFile } from "./gateway-restart.js";
2
+ import type { IdleGateReader } from "./idle-gate.js";
1
3
  import { type AutoUpdateCheckNowResult, type AutoUpdateConfig, type AutoUpdateSnapshot } from "./types.js";
4
+ import { type InstallResultsTelemetry } from "./install-results.js";
2
5
  import { type VersionSource } from "./version-source.js";
3
6
  import { type EventName } from "../../utils/event-catalog.js";
4
7
  import type { EventOptions, LogLevel } from "../../utils/logger.js";
@@ -14,6 +17,31 @@ interface LoggerLike {
14
17
  error(...args: unknown[]): void;
15
18
  event<N extends EventName>(name: N, level: LogLevel, opts: EventOptions<N>): void;
16
19
  }
20
+ /**
21
+ * How long a requested restart may take to load its target before the
22
+ * awaiting-restart state is treated as failed (the 3.0.171 latch fix). A 10.x
23
+ * restart-to-apply measured about 71 s on Box A, with starts up to 93 s; 30 min
24
+ * leaves room for the gateway's own deferral (forced after 300 s) and a slow
25
+ * offline install.
26
+ */
27
+ export declare const RESTART_LOAD_TIMEOUT_MS: number;
28
+ /**
29
+ * Restarts requested for one target that may fail to load before the box
30
+ * stops trying that version and waits for a newer one. Bounds the loop of a
31
+ * version that can never install (a blocked scan, a yanked version, a wrapper
32
+ * without the marker step): without it an idle box would restart about every
33
+ * 80 min forever.
34
+ */
35
+ export declare const MAX_APPLY_ATTEMPTS = 3;
36
+ /**
37
+ * How often a 10.x box that is `pending-idle` re-reads its apply gate (the
38
+ * spread time and the idle gate) between registry polls. The idle gate has no
39
+ * change notification, so the change is caught by this re-read; when the gate
40
+ * opens, an ordinary check runs at once instead of up to one poll interval
41
+ * (60 min by default) later. The re-read itself is local: no registry call,
42
+ * no `onTickComplete`.
43
+ */
44
+ export declare const PENDING_IDLE_RECHECK_MS: number;
17
45
  /** Construction-time options for {@link AutoUpdateCoordinator}. */
18
46
  export interface AutoUpdateCoordinatorOptions {
19
47
  enabled: boolean;
@@ -42,6 +70,44 @@ export interface AutoUpdateCoordinatorOptions {
42
70
  * be added without changing the auto-update internals.
43
71
  */
44
72
  onTickComplete?: () => Promise<void>;
73
+ /**
74
+ * The version the gateway actually loaded (the plugin version at
75
+ * registration). "Applied" is decided only from this, never from the
76
+ * persisted `lastAppliedVersion` alone. Defaults to `currentVersion`.
77
+ */
78
+ loadedVersion?: string;
79
+ /**
80
+ * OpenClaw host >= 2026.8.1 (R1 `getOpenClawHost().modern`). Switches the
81
+ * apply path to restart-to-apply: no in-process install; wait for the spread
82
+ * offset and an idle moment, write the install marker, and restart through
83
+ * `mutateConfigFile`.
84
+ */
85
+ modernHost?: boolean;
86
+ /** Modern host: `api.runtime.config.mutateConfigFile`. */
87
+ mutateConfigFile?: MutateConfigFile;
88
+ /** Modern host: live config read (R1 `readLiveHostConfig`). */
89
+ readLiveConfig?: () => unknown;
90
+ /** Modern host: user-activity gate. Without one the box counts as idle (the gateway still defers the restart past running replies). */
91
+ idleGate?: IdleGateReader;
92
+ /** Modern host: stable box identity for the spread offset (the user MID, else a stable instance id). */
93
+ mid?: string;
94
+ /** Clock, for tests. Defaults to `Date.now`. */
95
+ now?: () => number;
96
+ /** `[0, 1)` source for the jitter, for tests. Defaults to `Math.random`. */
97
+ rand?: () => number;
98
+ /** Modern host: `<OPENCLAW_STATE_DIR>/senpi-state/runtime-update.json` (see `update-marker.ts`). */
99
+ updateMarkerPath?: string;
100
+ /**
101
+ * Modern host: `<OPENCLAW_STATE_DIR>/senpi-state/runtime-update-results.json`, the wrapper's
102
+ * install outcomes (see `install-results.ts`). Read once per {@link AutoUpdateCoordinator.start},
103
+ * whether or not auto-update is enabled.
104
+ */
105
+ installResultsPath?: string;
106
+ /**
107
+ * The emit path the install-results report waits for and flushes (the plugin's OTel SDK).
108
+ * Omitted (tests), events are emitted at once.
109
+ */
110
+ installResultsTelemetry?: InstallResultsTelemetry;
45
111
  }
46
112
  /**
47
113
  * Central lifecycle manager for the plugin auto-update feature.
@@ -65,6 +131,8 @@ export declare class AutoUpdateCoordinator {
65
131
  private readonly versionSource;
66
132
  private readonly runUpdateCommand;
67
133
  private timer;
134
+ /** 10.x `pending-idle` gate re-read; see {@link PENDING_IDLE_RECHECK_MS}. */
135
+ private idleRecheckTimer;
68
136
  private running;
69
137
  private stopped;
70
138
  private runToken;
@@ -74,9 +142,64 @@ export declare class AutoUpdateCoordinator {
74
142
  /** Spec the last resolve used. Seeded in the constructor, so the snapshot
75
143
  * reports a line before the first tick. */
76
144
  private updateSpec;
145
+ /** Why the modern path is still waiting; reset every tick. See {@link AutoUpdateSnapshot.pendingBlockers}. */
146
+ private pendingBlockers;
147
+ private readonly now;
148
+ private readonly rand;
149
+ private readonly loadedVersion;
150
+ /**
151
+ * 10.x: `<version>|<sorted blockers>` of the last `auto_update.deferred`, so the event fires on
152
+ * entering `pending-idle` and on a change only. Cleared when a tick ends outside `pending-idle` or fails.
153
+ * In memory: a new gateway process reports a wait that is still on once.
154
+ */
155
+ private lastDeferredKey;
156
+ /** The install-results report the last {@link start} began; see {@link whenInstallResultsReported}. */
157
+ private installResultsReport;
77
158
  constructor(options: AutoUpdateCoordinatorOptions);
78
159
  /** Run preflight checks, load persisted state, and schedule the first version poll. */
79
160
  start(): Promise<void>;
161
+ /**
162
+ * Startup half of the latch fix: compare what this process loaded with what
163
+ * a previous process asked for.
164
+ *
165
+ * When the loaded version reaches the requested restart's target, the update
166
+ * took effect: the pending restart and pending update are cleared, a stale
167
+ * install marker is removed, and on a 10.x host `auto_update.applied` fires
168
+ * (nothing was installed before this boot there). On 5.x `applied` already
169
+ * fired when the restart was requested, so it is not counted twice.
170
+ *
171
+ * A target the loaded version has not reached is left for the tick, which
172
+ * expires it once the request is older than {@link RESTART_LOAD_TIMEOUT_MS}.
173
+ *
174
+ * @returns `updated:<v>` when a requested update is now loaded, else `undefined`.
175
+ */
176
+ private reconcileLoadedVersion;
177
+ /**
178
+ * Resolves when the install-results report begun by the last {@link start} has finished.
179
+ * `start` does not wait for it: the report waits for the OTel SDK first.
180
+ */
181
+ whenInstallResultsReported(): Promise<void>;
182
+ /**
183
+ * 10.x: start reporting the wrapper's install outcomes in the background. `liveState` is the
184
+ * running coordinator's state (the ids are saved with it); `null` when auto-update is
185
+ * disabled, which loads only the ids and patches only them.
186
+ */
187
+ private startInstallResultsReport;
188
+ /**
189
+ * One `auto_update.install_result` per entry not reported before (`install-results.ts`), then
190
+ * the file is deleted. Runs from {@link start}, which only the gateway's plugin service calls,
191
+ * so a CLI process never consumes the file. Never throws: telemetry must not break the
192
+ * coordinator.
193
+ */
194
+ private reportInstallResults;
195
+ private emitInstallResult;
196
+ /**
197
+ * 10.x: the box waits (`pending-idle:<v>`). `auto_update.deferred` on entering the wait and when
198
+ * the target or the sorted blocker set changes; an unchanged re-check or poll is silent.
199
+ */
200
+ private noteDeferred;
201
+ /** Remove the install marker; a failure is logged, never thrown (the wrapper deletes it too). */
202
+ private clearMarkerQuietly;
80
203
  /** Cancel the next scheduled poll and prevent in-flight ticks from rescheduling. */
81
204
  stop(): Promise<void>;
82
205
  /** Return the latest point-in-time snapshot for health/state gateway RPCs. */
@@ -99,6 +222,21 @@ export declare class AutoUpdateCoordinator {
99
222
  private scheduleNext;
100
223
  /** Single poll cycle: run the check, persist state, and schedule the next cycle. */
101
224
  private tick;
225
+ /** Re-read the apply gate of a `pending-idle` box after {@link PENDING_IDLE_RECHECK_MS}. */
226
+ private scheduleIdleRecheck;
227
+ private clearIdleRecheck;
228
+ /**
229
+ * Run a check now when the gate that held the pending update has opened,
230
+ * else re-read it again later. A check already in flight re-arms this
231
+ * itself when it ends `pending-idle`.
232
+ */
233
+ private recheckPendingIdle;
234
+ /**
235
+ * The 10.x apply gate: wait for `eligibleAt` (blocker `spread`), then for an
236
+ * idle box, unless {@link mustForce} applies and every blocker is one the
237
+ * forced restart may override.
238
+ */
239
+ private applyGate;
102
240
  /**
103
241
  * Emit a catalogued `auto_update.*` event, guarded so neither a throwing sink nor a bad
104
242
  * attribute shape can disturb the tick — telemetry must never break auto-update itself.
@@ -112,6 +250,69 @@ export declare class AutoUpdateCoordinator {
112
250
  private resolveUpdateSpec;
113
251
  /** Core update logic: fetch latest version, classify, and take action. */
114
252
  private runTick;
253
+ /**
254
+ * Whether the restart requested for the persisted target may still land:
255
+ * its request time (the pending restart's, else the last restart trigger,
256
+ * else the last install) is under {@link RESTART_LOAD_TIMEOUT_MS} old. With
257
+ * no time on record the persisted version is not trusted at all.
258
+ */
259
+ private restartStillPending;
260
+ /**
261
+ * The 5.x latch, as before R2: once this flow installed `latest` (an
262
+ * install or restart time is on record), the box waits for a restart and
263
+ * never runs the in-process install and config-bump restart for that
264
+ * version again, however long it waits. 5.x has no idle gate, so a retry
265
+ * would restart the gateway over an order call or an open approval. A
266
+ * restart trigger that threw is latched too (the warning asks for a manual
267
+ * restart). A persisted applied version with no time at all is still not
268
+ * trusted. 10.x expires its wait after 30 min instead: its retries are
269
+ * idle-gated.
270
+ */
271
+ private awaitingManualRestart;
272
+ /**
273
+ * {@link MAX_APPLY_ATTEMPTS} restarts for `latest` did not load it. Stop
274
+ * trying this version: no install and no restart until a newer one ships
275
+ * (or a restart loads it some other way). Reported, not thrown, so the poll
276
+ * keeps its normal cadence.
277
+ */
278
+ private handleParkedUpdate;
279
+ /**
280
+ * The requested update did not load. Drop the awaiting-restart state and the
281
+ * marker, report `auto_update.apply_failed`, and fail this tick (so the
282
+ * backoff applies). The next tick starts over: a new install and restart on
283
+ * 5.x, a new idle-gated restart request on 10.x. The pending update keeps
284
+ * its eligibility time, so the box does not wait out its spread again.
285
+ *
286
+ * @throws Always.
287
+ */
288
+ private expireUnloadedUpdate;
289
+ /**
290
+ * The OpenClaw 10.x apply path (restart-to-apply). Nothing is installed in
291
+ * this process: 10.10 refuses `plugins update` while the gateway runs.
292
+ *
293
+ * 1. Record the pending update once per episode (`firstSeenAt`,
294
+ * `eligibleAt` = first seen + spread offset + jitter).
295
+ * 2. Before `eligibleAt`, wait (`pending-idle:<v>`, blocker `spread`). After
296
+ * it, continue only when the idle gate says idle, or when
297
+ * {@link mustForce} (24 h past eligibility, inside 03:00–05:00 UTC).
298
+ * 3. Build the exact `<name>@<version>` spec, check restart capability,
299
+ * write the marker, and request the restart through `mutateConfigFile`.
300
+ * 4. A failure at any step clears the marker, reports
301
+ * `auto_update.restart_failed` and fails the tick (backoff; `checkNow`
302
+ * answers `failed`). Waiting for the spread or an idle box is not a failure.
303
+ */
304
+ private runRestartToApply;
305
+ /** The idle gate's answer; a throwing gate counts as busy. */
306
+ private readIdle;
307
+ /**
308
+ * Clear the marker, report `auto_update.restart_failed` for the 10.x path
309
+ * (snapshot degraded), and fail the tick: no restart was requested, so the
310
+ * tick must not count as a success. The throw makes `tick()` back off and
311
+ * `checkNow()` answer `failed`.
312
+ *
313
+ * @throws Always, with `reason`.
314
+ */
315
+ private reportModernRestartFailure;
115
316
  /**
116
317
  * `currentVersion` is a compile-time constant frozen for the life of the
117
318
  * process, so it cannot reflect an install that already happened this
@@ -124,6 +325,8 @@ export declare class AutoUpdateCoordinator {
124
325
  * so this branch stops being reached on its own.
125
326
  */
126
327
  private handleAlreadyAppliedAwaitingRestart;
328
+ /** OpenClaw 10.x refuses `plugins update` while the gateway runs, so a manual instruction says so. */
329
+ private manualUpdateSuffix;
127
330
  private isAllowedByPolicy;
128
331
  private handleMajorAvailable;
129
332
  private logUpdateAvailable;
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/coordinator.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EAErB,KAAK,kBAAkB,EAExB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAyC,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEpE;;;;;GAKG;AACH,UAAU,UAAU;IAClB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACnF;AAwBD,mEAAmE;AACnE,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,qBAAqB;IAepB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAdpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAC1E,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,gBAAgB,CAAgB;IACxC;+CAC2C;IAC3C,OAAO,CAAC,UAAU,CAAS;gBAEE,OAAO,EAAE,4BAA4B;IAelE,uFAAuF;IACjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B,oFAAoF;IAC9E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,8EAA8E;IAC9E,WAAW,IAAI,kBAAkB;IAIjC;;;;;;;;;;;;OAYG;IACG,QAAQ,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAyCnD,8EAA8E;IAC9E,OAAO,CAAC,YAAY;IAmBpB,oFAAoF;YACtE,IAAI;IA6DlB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAQjB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAQzB,0EAA0E;YAC5D,OAAO;IA4ErB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mCAAmC;IAkB3C,OAAO,CAAC,iBAAiB;YAMX,oBAAoB;YAyBpB,kBAAkB;IA0BhC;;;;;;;;;;;;;;;;;OAiBG;YACW,oBAAoB;IAkHlC,+EAA+E;IAC/E,OAAO,CAAC,aAAa;YA8BP,YAAY;CAO3B"}
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/coordinator.ts"],"names":[],"mappings":"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"}