@sayknow-cli/coding-agent 0.3.12 → 0.3.15

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 (248) hide show
  1. package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
  2. package/dist/types/autoresearch/tools/log-experiment.d.ts +2 -2
  3. package/dist/types/cli/classify-install-target.d.ts +0 -10
  4. package/dist/types/cli/daemon-cli.d.ts +2 -0
  5. package/dist/types/cli/initial-message.d.ts +1 -1
  6. package/dist/types/cli/malloc-env-guard.d.ts +65 -0
  7. package/dist/types/cli/malloc-env-guard.test.d.ts +1 -0
  8. package/dist/types/cli/notify-cli.d.ts +3 -1
  9. package/dist/types/cli/session-picker.d.ts +4 -3
  10. package/dist/types/cli/update-cli.d.ts +22 -3
  11. package/dist/types/cli.d.ts +5 -0
  12. package/dist/types/commands/daemon.d.ts +6 -2
  13. package/dist/types/commands/launch.d.ts +1 -0
  14. package/dist/types/commands/notify.d.ts +6 -0
  15. package/dist/types/commands/web-search.d.ts +1 -1
  16. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +4 -4
  17. package/dist/types/commit/agentic/tools/propose-commit.d.ts +9 -9
  18. package/dist/types/commit/agentic/tools/schemas.d.ts +9 -9
  19. package/dist/types/commit/agentic/tools/split-commit.d.ts +9 -9
  20. package/dist/types/commit/analysis/conventional.d.ts +1 -1
  21. package/dist/types/commit/analysis/summary.d.ts +1 -1
  22. package/dist/types/commit/changelog/generate.d.ts +3 -3
  23. package/dist/types/commit/changelog/index.d.ts +2 -2
  24. package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
  25. package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
  26. package/dist/types/commit/shared-llm.d.ts +9 -9
  27. package/dist/types/config/keybindings.d.ts +134 -129
  28. package/dist/types/config/model-profile-activation.d.ts +1 -0
  29. package/dist/types/config/model-registry.d.ts +35 -35
  30. package/dist/types/config/models-config-schema.d.ts +111 -111
  31. package/dist/types/config/settings-schema.d.ts +56 -16
  32. package/dist/types/config/settings.d.ts +2 -0
  33. package/dist/types/coordinator/contract.d.ts +1 -1
  34. package/dist/types/coordinator-mcp/model-preset.d.ts +45 -0
  35. package/dist/types/coordinator-mcp/policy.d.ts +3 -0
  36. package/dist/types/coordinator-mcp/server.d.ts +79 -6
  37. package/dist/types/coordinator-mcp/session-reaper.d.ts +53 -0
  38. package/dist/types/daemon/control-types.d.ts +10 -0
  39. package/dist/types/daemon/operator-contract.d.ts +47 -0
  40. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.d.ts +4 -0
  41. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/errors.d.ts +12 -12
  42. package/dist/types/discovery/helpers.d.ts +1 -1
  43. package/dist/types/discovery/substitute-plugin-root.d.ts +0 -4
  44. package/dist/types/edit/modes/patch.d.ts +2 -2
  45. package/dist/types/extensibility/extensions/types.d.ts +3 -1
  46. package/dist/types/goals/tools/goal-tool.d.ts +6 -6
  47. package/dist/types/i18n/messages/en.d.ts +8 -8
  48. package/dist/types/internal-urls/local-protocol.d.ts +13 -9
  49. package/dist/types/lsp/index.d.ts +9 -9
  50. package/dist/types/lsp/types.d.ts +9 -9
  51. package/dist/types/main.d.ts +66 -2
  52. package/dist/types/modes/acp/acp-agent.d.ts +19 -2
  53. package/dist/types/modes/acp/acp-mode.d.ts +12 -0
  54. package/dist/types/modes/components/assistant-message.d.ts +1 -1
  55. package/dist/types/modes/components/custom-editor.d.ts +2 -0
  56. package/dist/types/modes/components/hook-selector.d.ts +5 -0
  57. package/dist/types/modes/components/irc-sidebar.d.ts +32 -0
  58. package/dist/types/modes/components/pet-selector.d.ts +11 -0
  59. package/dist/types/modes/components/sayknow-pet-widget.d.ts +59 -0
  60. package/dist/types/modes/components/session-selector.d.ts +22 -9
  61. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  62. package/dist/types/modes/components/status-line/types.d.ts +1 -1
  63. package/dist/types/modes/components/status-line.d.ts +0 -10
  64. package/dist/types/modes/components/tool-execution.d.ts +1 -0
  65. package/dist/types/modes/components/user-message.d.ts +2 -1
  66. package/dist/types/modes/controllers/event-controller.d.ts +4 -0
  67. package/dist/types/modes/controllers/selector-controller.d.ts +1 -0
  68. package/dist/types/modes/interactive-mode.d.ts +24 -2
  69. package/dist/types/modes/irc-observation-ledger.d.ts +22 -0
  70. package/dist/types/modes/print-mode.d.ts +3 -4
  71. package/dist/types/modes/rpc/rpc-client.d.ts +7 -1
  72. package/dist/types/modes/rpc/rpc-mode.d.ts +2 -1
  73. package/dist/types/modes/rpc/rpc-types.d.ts +17 -1
  74. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +8 -0
  75. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +5 -0
  76. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +45 -0
  77. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +42 -2
  78. package/dist/types/modes/theme/defaults/index.d.ts +568 -568
  79. package/dist/types/modes/types.d.ts +28 -2
  80. package/dist/types/modes/utils/abort-message.d.ts +1 -1
  81. package/dist/types/modes/utils/context-usage.d.ts +4 -19
  82. package/dist/types/modes/utils/irc-message.d.ts +38 -0
  83. package/dist/types/modes/utils/ui-helpers.d.ts +13 -4
  84. package/dist/types/notifications/config.d.ts +34 -0
  85. package/dist/types/notifications/daemon-paths.d.ts +7 -0
  86. package/dist/types/notifications/index.d.ts +27 -0
  87. package/dist/types/notifications/lifecycle-control-runtime.d.ts +12 -4
  88. package/dist/types/notifications/notification-service.d.ts +144 -0
  89. package/dist/types/notifications/rate-limit-pool.d.ts +27 -9
  90. package/dist/types/notifications/telegram-daemon-control.d.ts +6 -0
  91. package/dist/types/notifications/telegram-daemon.d.ts +130 -3
  92. package/dist/types/notifications/telegram-reference.d.ts +19 -2
  93. package/dist/types/notifications/topic-registry.d.ts +24 -4
  94. package/dist/types/registry/agent-registry.d.ts +2 -0
  95. package/dist/types/rlm/index.d.ts +1 -1
  96. package/dist/types/sdk.d.ts +2 -0
  97. package/dist/types/secrets/obfuscator.d.ts +1 -1
  98. package/dist/types/session/agent-session.d.ts +40 -3
  99. package/dist/types/session/cache-economics.d.ts +79 -0
  100. package/dist/types/session/context-estimation.d.ts +31 -0
  101. package/dist/types/session/provider-safety-stop.d.ts +5 -0
  102. package/dist/types/session/session-manager.d.ts +124 -4
  103. package/dist/types/session/session-storage.d.ts +155 -13
  104. package/dist/types/setup/credential-auto-import.d.ts +2 -2
  105. package/dist/types/skc-runtime/session-state-sidecar.d.ts +34 -3
  106. package/dist/types/skc-runtime/state-schema.d.ts +19 -19
  107. package/dist/types/skc-runtime/tmux-common.d.ts +6 -0
  108. package/dist/types/skc-runtime/tmux-owner-isolation-cli.d.ts +5 -0
  109. package/dist/types/skc-runtime/tmux-owner-isolation.d.ts +309 -0
  110. package/dist/types/skc-runtime/tmux-sessions.d.ts +49 -17
  111. package/dist/types/task/agents.d.ts +2 -2
  112. package/dist/types/task/executor.d.ts +3 -0
  113. package/dist/types/task/receipt.d.ts +3 -1
  114. package/dist/types/task/types.d.ts +35 -27
  115. package/dist/types/tools/ask-answer-registry.d.ts +5 -0
  116. package/dist/types/tools/bash.d.ts +1 -1
  117. package/dist/types/tools/browser/tab-supervisor.d.ts +6 -0
  118. package/dist/types/tools/browser.d.ts +28 -28
  119. package/dist/types/tools/computer.d.ts +20 -20
  120. package/dist/types/tools/cron.d.ts +2 -2
  121. package/dist/types/tools/debug.d.ts +40 -40
  122. package/dist/types/tools/gh.d.ts +10 -10
  123. package/dist/types/tools/image-gen.d.ts +2 -2
  124. package/dist/types/tools/index.d.ts +58 -6
  125. package/dist/types/tools/monitor.d.ts +6 -6
  126. package/dist/types/tools/skill-discovery.d.ts +4 -4
  127. package/dist/types/tools/subagent.d.ts +12 -12
  128. package/dist/types/tools/telegram-send.d.ts +7 -0
  129. package/dist/types/tools/todo-write.d.ts +8 -8
  130. package/dist/types/utils/external-editor.d.ts +2 -0
  131. package/dist/types/web/insane/bridge.d.ts +9 -9
  132. package/dist/types/web/search/index.d.ts +4 -4
  133. package/package.json +8 -8
  134. package/scripts/g004-tmux-smoke.ts +196 -36
  135. package/src/cli/daemon-cli.ts +19 -29
  136. package/src/cli/malloc-env-guard.test.ts +104 -0
  137. package/src/cli/malloc-env-guard.ts +149 -0
  138. package/src/cli/notify-cli.ts +78 -14
  139. package/src/cli/session-picker.ts +23 -40
  140. package/src/cli/update-cli.ts +56 -37
  141. package/src/cli.ts +51 -10
  142. package/src/commands/daemon.ts +19 -5
  143. package/src/commands/harness.ts +515 -47
  144. package/src/commands/launch.ts +11 -3
  145. package/src/commands/notify.ts +5 -1
  146. package/src/commands/session.ts +6 -1
  147. package/src/config/keybindings.ts +5 -0
  148. package/src/config/model-profile-activation.ts +1 -1
  149. package/src/config/model-profiles.ts +14 -14
  150. package/src/config/settings-schema.ts +41 -1
  151. package/src/config/settings.ts +96 -45
  152. package/src/coordinator/contract.ts +1 -0
  153. package/src/coordinator-mcp/model-preset.ts +100 -0
  154. package/src/coordinator-mcp/policy.ts +30 -0
  155. package/src/coordinator-mcp/server.ts +2958 -430
  156. package/src/coordinator-mcp/session-reaper.ts +129 -0
  157. package/src/daemon/control-types.ts +11 -0
  158. package/src/daemon/operator-contract.ts +121 -0
  159. package/src/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.ts +57 -17
  160. package/src/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.ts +15 -2
  161. package/src/defaults/skc/extensions/grok-cli-vendor/src/provider/register.ts +5 -1
  162. package/src/extensibility/extensions/runner.ts +1 -1
  163. package/src/extensibility/extensions/types.ts +3 -1
  164. package/src/internal-urls/docs-index.generated.ts +10 -9
  165. package/src/internal-urls/local-protocol.ts +29 -10
  166. package/src/main.ts +301 -80
  167. package/src/modes/acp/acp-agent.ts +730 -100
  168. package/src/modes/acp/acp-mode.ts +29 -2
  169. package/src/modes/components/assistant-message.ts +32 -3
  170. package/src/modes/components/bash-execution.ts +43 -13
  171. package/src/modes/components/custom-editor.ts +5 -0
  172. package/src/modes/components/footer.ts +3 -3
  173. package/src/modes/components/hook-selector.ts +12 -0
  174. package/src/modes/components/irc-sidebar.ts +206 -0
  175. package/src/modes/components/pet-selector.ts +55 -0
  176. package/src/modes/components/sayknow-pet-widget.ts +360 -0
  177. package/src/modes/components/session-selector.ts +222 -221
  178. package/src/modes/components/settings-selector.ts +10 -0
  179. package/src/modes/components/status-line/segments.ts +14 -7
  180. package/src/modes/components/status-line/types.ts +1 -1
  181. package/src/modes/components/status-line.ts +4 -171
  182. package/src/modes/components/tool-execution.ts +47 -6
  183. package/src/modes/components/user-message.ts +26 -9
  184. package/src/modes/controllers/command-controller.ts +28 -2
  185. package/src/modes/controllers/event-controller.ts +159 -36
  186. package/src/modes/controllers/extension-ui-controller.ts +37 -18
  187. package/src/modes/controllers/input-controller.ts +8 -2
  188. package/src/modes/controllers/selector-controller.ts +62 -15
  189. package/src/modes/interactive-mode.ts +199 -7
  190. package/src/modes/irc-observation-ledger.ts +127 -0
  191. package/src/modes/print-mode.ts +228 -92
  192. package/src/modes/rpc/rpc-client.ts +58 -1
  193. package/src/modes/rpc/rpc-mode.ts +286 -85
  194. package/src/modes/rpc/rpc-types.ts +15 -1
  195. package/src/modes/shared/agent-wire/command-dispatch.ts +33 -1
  196. package/src/modes/shared/agent-wire/command-validation.ts +10 -0
  197. package/src/modes/shared/agent-wire/deep-interview-gate.ts +45 -2
  198. package/src/modes/shared/agent-wire/scopes.ts +1 -0
  199. package/src/modes/shared/agent-wire/unattended-session.ts +288 -1
  200. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +130 -20
  201. package/src/modes/types.ts +34 -2
  202. package/src/modes/utils/context-usage.ts +56 -92
  203. package/src/modes/utils/hotkeys-markdown.ts +1 -0
  204. package/src/modes/utils/irc-message.ts +138 -0
  205. package/src/modes/utils/ui-helpers.ts +216 -50
  206. package/src/notifications/config.ts +44 -0
  207. package/src/notifications/daemon-paths.ts +8 -0
  208. package/src/notifications/index.ts +535 -75
  209. package/src/notifications/lifecycle-control-runtime.ts +930 -77
  210. package/src/notifications/notification-service.ts +710 -0
  211. package/src/notifications/rate-limit-pool.ts +46 -12
  212. package/src/notifications/telegram-daemon-control.ts +27 -2
  213. package/src/notifications/telegram-daemon.ts +635 -94
  214. package/src/notifications/telegram-reference.ts +73 -13
  215. package/src/notifications/topic-registry.ts +86 -9
  216. package/src/prompts/system/irc-peer-roster.md +1 -0
  217. package/src/prompts/system/subagent-system-prompt.md +1 -0
  218. package/src/prompts/system/system-prompt.md +1 -0
  219. package/src/prompts/tools/irc.md +1 -1
  220. package/src/registry/agent-registry.ts +3 -0
  221. package/src/sdk.ts +52 -1
  222. package/src/secrets/obfuscator.ts +4 -2
  223. package/src/session/agent-session.ts +670 -217
  224. package/src/session/cache-economics.ts +275 -0
  225. package/src/session/context-estimation.ts +91 -0
  226. package/src/session/provider-safety-stop.ts +9 -0
  227. package/src/session/session-dump-format.ts +6 -0
  228. package/src/session/session-manager.ts +809 -39
  229. package/src/session/session-storage.ts +582 -38
  230. package/src/skc-runtime/session-state-sidecar.ts +756 -135
  231. package/src/skc-runtime/tmux-common.ts +26 -7
  232. package/src/skc-runtime/tmux-gc.ts +52 -9
  233. package/src/skc-runtime/tmux-owner-isolation-cli.ts +185 -0
  234. package/src/skc-runtime/tmux-owner-isolation.ts +2060 -0
  235. package/src/skc-runtime/tmux-sessions.ts +871 -68
  236. package/src/slash-commands/builtin-registry.ts +153 -9
  237. package/src/slash-commands/helpers/context-report.ts +26 -4
  238. package/src/task/executor.ts +12 -3
  239. package/src/task/index.ts +8 -0
  240. package/src/task/receipt.ts +7 -2
  241. package/src/task/types.ts +26 -0
  242. package/src/tools/ask-answer-registry.ts +25 -0
  243. package/src/tools/browser/tab-supervisor.ts +63 -6
  244. package/src/tools/browser.ts +8 -3
  245. package/src/tools/index.ts +81 -6
  246. package/src/tools/sqlite-reader.ts +8 -4
  247. package/src/tui/output-block.ts +18 -6
  248. package/src/utils/external-editor.ts +6 -1
@@ -32,11 +32,15 @@ export interface RateLimitItem<T = unknown> {
32
32
  /** Priority lane. */
33
33
  lane: RateLimitLane;
34
34
  /**
35
- * Optional coalesce key. Submitting another item with the same
36
- * `(sessionId, lane, coalesceKey)` replaces the queued payload with the
37
- * newer one instead of enqueuing a duplicate (used for live edits).
35
+ * Optional coalesce key. Submitting another unidentifiable item with the
36
+ * same `(sessionId, lane, coalesceKey)` replaces the queued payload with
37
+ * the newer one instead of enqueuing a duplicate (used for live edits).
38
38
  */
39
39
  coalesceKey?: string;
40
+ /** Optional stable identifier for exact queued-item removal. Identified items never coalesce. */
41
+ itemId?: string;
42
+ /** Absolute Unix timestamp in ms. The item expires when `now >= deadlineAt`. */
43
+ deadlineAt?: number;
40
44
  /** Opaque payload the caller maps to an actual Telegram send. */
41
45
  payload: T;
42
46
  }
@@ -56,6 +60,14 @@ interface QueuedItem<T> {
56
60
  seq: number;
57
61
  }
58
62
 
63
+ /** The deterministic result of draining queued work at a point in time. */
64
+ export interface RateLimitDrainResult<T = unknown> {
65
+ /** Items granted a token and ready to send. */
66
+ granted: RateLimitItem<T>[];
67
+ /** Items removed because their absolute deadline has elapsed. */
68
+ expired: RateLimitItem<T>[];
69
+ }
70
+
59
71
  /**
60
72
  * A deterministic, pull-based shared rate-limit scheduler.
61
73
  *
@@ -100,16 +112,19 @@ export class RateLimitPool<T = unknown> {
100
112
  }
101
113
 
102
114
  /**
103
- * Submit an item. If it carries a `coalesceKey` matching a queued item in
104
- * the same `(sessionId, lane)`, the queued payload is replaced (latest
105
- * wins) and FIFO position is preserved; otherwise it is appended.
115
+ * Submit an item. Unidentified items with a `coalesceKey` matching a queued
116
+ * item in the same `(sessionId, lane)` replace its payload (latest wins)
117
+ * while preserving FIFO position; identified items are always appended.
106
118
  */
107
119
  submit(item: RateLimitItem<T>): void {
108
120
  const queue = this.lanes.get(item.lane);
109
121
  if (!queue) throw new Error(`unknown rate-limit lane: ${item.lane}`);
110
- if (item.coalesceKey !== undefined) {
122
+ if (item.itemId === undefined && item.coalesceKey !== undefined) {
111
123
  const existing = queue.find(
112
- q => q.item.sessionId === item.sessionId && q.item.coalesceKey === item.coalesceKey,
124
+ q =>
125
+ q.item.itemId === undefined &&
126
+ q.item.sessionId === item.sessionId &&
127
+ q.item.coalesceKey === item.coalesceKey,
113
128
  );
114
129
  if (existing) {
115
130
  existing.item = item;
@@ -120,12 +135,21 @@ export class RateLimitPool<T = unknown> {
120
135
  }
121
136
 
122
137
  /**
123
- * Grant as many queued items as tokens allow at `nowMs`. Items are selected
124
- * by lane priority, then round-robin across sessions within a lane (so no
125
- * single session monopolises a lane), consuming one token each.
138
+ * Grant as many queued items as tokens allow at `nowMs`. This compatibility
139
+ * wrapper discards items that expired during the drain.
126
140
  */
127
141
  drain(nowMs: number = this.now()): RateLimitItem<T>[] {
142
+ return this.drainWithExpired(nowMs).granted;
143
+ }
144
+
145
+ /**
146
+ * Deterministically expire elapsed-deadline items, then grant as many live
147
+ * items as tokens allow. Expired items never consume tokens or receive a
148
+ * grant; both result lists preserve their deterministic queue ordering.
149
+ */
150
+ drainWithExpired(nowMs: number = this.now()): RateLimitDrainResult<T> {
128
151
  this.refill(nowMs);
152
+ const expired = this.removeWhere(item => item.deadlineAt !== undefined && item.deadlineAt <= nowMs);
129
153
  const granted: RateLimitItem<T>[] = [];
130
154
  while (this.tokens >= 1) {
131
155
  const next = this.takeNext();
@@ -133,7 +157,7 @@ export class RateLimitPool<T = unknown> {
133
157
  this.tokens -= 1;
134
158
  granted.push(next);
135
159
  }
136
- return granted;
160
+ return { granted, expired };
137
161
  }
138
162
 
139
163
  /** Remove queued items matching `predicate` without consuming tokens. Returns removed items in lane/FIFO order. */
@@ -155,6 +179,16 @@ export class RateLimitPool<T = unknown> {
155
179
  return removed;
156
180
  }
157
181
 
182
+ /** Remove exactly one queued item by its stable id without consuming a token. */
183
+ removeById(itemId: string): RateLimitItem<T> | undefined {
184
+ for (const lane of LANE_PRIORITY) {
185
+ const queue = this.lanes.get(lane)!;
186
+ const index = queue.findIndex(queued => queued.item.itemId === itemId);
187
+ if (index >= 0) return queue.splice(index, 1)[0]!.item;
188
+ }
189
+ return undefined;
190
+ }
191
+
158
192
  private refill(nowMs: number): void {
159
193
  if (nowMs <= this.lastRefill) return;
160
194
  const elapsedSec = (nowMs - this.lastRefill) / 1000;
@@ -16,9 +16,11 @@ import type {
16
16
  DaemonHealth,
17
17
  DaemonOperationOptions,
18
18
  DaemonOperationResult,
19
+ DaemonRecovery,
19
20
  DaemonRuntimeInfo,
20
21
  DaemonStatus,
21
22
  } from "../daemon/control-types";
23
+ import { OWNERSHIP_MISMATCH_MESSAGE, ownershipMismatchRecovery } from "../daemon/operator-contract";
22
24
  import { resolveSkcRuntimeSpawnInfo } from "../daemon/runtime";
23
25
  import { getNotificationConfig, isTelegramConfigured, tokenFingerprint } from "./config";
24
26
  import {
@@ -230,8 +232,9 @@ export class TelegramDaemonController implements BuiltInDaemonController {
230
232
  before: DaemonStatus | undefined,
231
233
  after: DaemonStatus | undefined,
232
234
  warnings: string[],
235
+ recovery?: DaemonRecovery,
233
236
  ): DaemonOperationResult {
234
- return { kind: this.kind, action, ok, before, after, message, warnings };
237
+ return { kind: this.kind, action, ok, before, after, message, warnings, recovery };
235
238
  }
236
239
 
237
240
  async reload(opts: DaemonOperationOptions = {}): Promise<DaemonOperationResult> {
@@ -271,6 +274,17 @@ export class TelegramDaemonController implements BuiltInDaemonController {
271
274
  );
272
275
  warnings.push(...spawned.warnings);
273
276
  const after = await this.status();
277
+ if (spawned.result === "blocked") {
278
+ return this.result(
279
+ action,
280
+ false,
281
+ OWNERSHIP_MISMATCH_MESSAGE,
282
+ before,
283
+ after,
284
+ warnings,
285
+ ownershipMismatchRecovery(),
286
+ );
287
+ }
274
288
  return this.result(
275
289
  action,
276
290
  spawned.result === "owner_spawned",
@@ -360,9 +374,20 @@ export class TelegramDaemonController implements BuiltInDaemonController {
360
374
  } else if (after.ownerId && after.ownerId === oldOwnerId) {
361
375
  warnings.push("owner id unchanged after reload");
362
376
  }
377
+ if (spawned.result === "blocked") {
378
+ return this.result(
379
+ action,
380
+ false,
381
+ OWNERSHIP_MISMATCH_MESSAGE,
382
+ before,
383
+ after,
384
+ warnings,
385
+ ownershipMismatchRecovery(),
386
+ );
387
+ }
363
388
  return this.result(
364
389
  action,
365
- spawned.result !== "disabled" && spawned.result !== "blocked",
390
+ spawned.result !== "disabled",
366
391
  `reloaded telegram daemon (${spawned.result})`,
367
392
  before,
368
393
  after,