@sayknow-cli/coding-agent 0.3.16 → 0.4.0

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 (1474) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/package.json +127 -110
  3. package/scripts/build-sdk-package-smoke.ts +132 -0
  4. package/scripts/capture-notifications-settings-showcase.ts +435 -0
  5. package/scripts/compile-args.ts +5 -2
  6. package/scripts/g005-daemon-smoke.ts +4 -5
  7. package/scripts/g011-daemon-path-smoke.ts +5 -5
  8. package/scripts/generate-hotkeys-docs.ts +74 -0
  9. package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
  10. package/scripts/generate-sdk-operation-inventory.ts +914 -0
  11. package/scripts/generate-telegram-baseline-manifest.ts +128 -0
  12. package/scripts/manifest-schema.ts +124 -0
  13. package/scripts/run-test-manifest.ts +153 -0
  14. package/scripts/run-threat-model-check.ts +217 -0
  15. package/scripts/verify-skc-sdk-canonicalization.ts +3647 -0
  16. package/scripts/verify-skc-sdk-rename.ts +90 -0
  17. package/src/append-only-mode.ts +1 -1
  18. package/src/async/job-manager.ts +455 -69
  19. package/src/cli/args.ts +43 -12
  20. package/src/cli/auth-gateway-cli.ts +2 -2
  21. package/src/cli/config-cli.ts +77 -3
  22. package/src/cli/daemon-cli.ts +63 -14
  23. package/src/cli/launch-disposition.ts +42 -0
  24. package/src/cli/list-models.ts +1 -1
  25. package/src/cli/notify-cli.ts +373 -283
  26. package/src/cli/session-picker.ts +20 -3
  27. package/src/cli/setup-cli.ts +1 -1
  28. package/src/cli/worktree-cli.ts +9 -287
  29. package/src/cli.ts +31 -11
  30. package/src/commands/config.ts +1 -1
  31. package/src/commands/daemon.ts +50 -6
  32. package/src/commands/gc.ts +11 -1
  33. package/src/commands/harness.ts +127 -142
  34. package/src/commands/launch.ts +11 -6
  35. package/src/commands/mcp-serve.ts +97 -13
  36. package/src/commands/mcp.ts +2 -2
  37. package/src/commands/notify.ts +44 -7
  38. package/src/commands/sdk.ts +453 -0
  39. package/src/commands/ultragoal.ts +4 -1
  40. package/src/commands/worktree.ts +10 -53
  41. package/src/commit/agentic/agent.ts +1 -0
  42. package/src/config/atomic-yaml-patch.ts +490 -0
  43. package/src/config/file-lock.ts +105 -43
  44. package/src/config/keybindings.ts +64 -20
  45. package/src/config/model-auth.ts +9 -0
  46. package/src/config/model-bindings-applier.ts +139 -0
  47. package/src/config/model-discovery-manager.ts +224 -0
  48. package/src/config/model-equivalence.ts +66 -0
  49. package/src/config/model-profile-activation.ts +233 -86
  50. package/src/config/model-profiles.ts +52 -49
  51. package/src/config/model-registry.ts +5 -4
  52. package/src/config/model-resolver.ts +487 -410
  53. package/src/config/model-selector-value.ts +50 -0
  54. package/src/config/models-config-schema.ts +17 -23
  55. package/src/config/settings-schema.ts +372 -21
  56. package/src/config/settings.ts +1120 -182
  57. package/src/coordinator-mcp/model-preset.ts +74 -20
  58. package/src/coordinator-mcp/policy.ts +76 -11
  59. package/src/coordinator-mcp/question-gate-codec.ts +274 -0
  60. package/src/coordinator-mcp/question-state.ts +778 -0
  61. package/src/coordinator-mcp/server.ts +3120 -3111
  62. package/src/daemon/builtin.ts +8 -5
  63. package/src/daemon/control-types.ts +1 -1
  64. package/src/daemon/runtime.ts +2 -2
  65. package/src/debug/index.ts +1 -1
  66. package/src/defaults/skc/skills/team/SKILL.md +27 -13
  67. package/src/defaults/skc/skills/ultragoal/SKILL.md +0 -2
  68. package/src/discovery/helpers.ts +1 -50
  69. package/src/discovery/mcp-json.ts +327 -20
  70. package/src/edit/index.ts +64 -0
  71. package/src/eval/js/shared/runtime.ts +1 -1
  72. package/src/eval/py/env.ts +26 -0
  73. package/src/eval/py/index.ts +2 -2
  74. package/src/eval/py/kernel.ts +5 -3
  75. package/src/export/html/template.generated.ts +1 -1
  76. package/src/export/html/template.js +52 -18
  77. package/src/extensibility/custom-tools/types.ts +1 -1
  78. package/src/extensibility/extensions/compact-handler.ts +3 -3
  79. package/src/extensibility/extensions/get-commands-handler.ts +2 -2
  80. package/src/extensibility/extensions/loader.ts +77 -5
  81. package/src/extensibility/extensions/runner.ts +124 -7
  82. package/src/extensibility/extensions/types.ts +215 -18
  83. package/src/extensibility/hooks/runner.ts +2 -2
  84. package/src/extensibility/hooks/types.ts +1 -1
  85. package/src/extensibility/plugins/marketplace/manager.ts +94 -10
  86. package/src/extensibility/runtime-skill-discovery.ts +33 -13
  87. package/src/extensibility/shared-events.ts +2 -0
  88. package/src/extensibility/skc-plugins/installer.ts +16 -16
  89. package/src/extensibility/slash-commands.ts +3 -3
  90. package/src/goals/continuation-timeout-guard.ts +79 -0
  91. package/src/goals/runtime.ts +7 -5
  92. package/src/goals/state.ts +18 -0
  93. package/src/harness-control-plane/lifecycle-reconciliation.ts +64 -0
  94. package/src/harness-control-plane/operate.ts +9 -9
  95. package/src/harness-control-plane/owner.ts +341 -41
  96. package/src/harness-control-plane/phase-rollup.ts +4 -7
  97. package/src/harness-control-plane/receipt-ingest.ts +5 -0
  98. package/src/harness-control-plane/receipt-spool.ts +51 -7
  99. package/src/harness-control-plane/receipts.ts +0 -1
  100. package/src/harness-control-plane/sdk-transport.ts +395 -0
  101. package/src/harness-control-plane/session-lease.ts +12 -130
  102. package/src/harness-control-plane/session-transport.ts +94 -0
  103. package/src/harness-control-plane/types.ts +1 -1
  104. package/src/hindsight/backend.ts +26 -27
  105. package/src/hindsight/client.ts +65 -2
  106. package/src/hindsight/state.ts +101 -32
  107. package/src/hooks/skill-state.ts +17 -11
  108. package/src/i18n/messages/en.ts +1 -0
  109. package/src/internal-urls/agent-protocol.ts +76 -5
  110. package/src/internal-urls/docs-index.generated.ts +44 -37
  111. package/src/internal-urls/local-protocol.ts +420 -18
  112. package/src/lsp/client.ts +43 -7
  113. package/src/lsp/config.ts +145 -26
  114. package/src/lsp/index.ts +7 -91
  115. package/src/lsp/lspmux.ts +39 -10
  116. package/src/lsp/path-trust.ts +81 -0
  117. package/src/main.ts +451 -236
  118. package/src/memories/index.ts +1 -0
  119. package/src/memories/storage.ts +6 -2
  120. package/src/modes/DESIGN.md +258 -0
  121. package/src/modes/acp/acp-agent.ts +1236 -2612
  122. package/src/modes/acp/acp-client-bridge.ts +2 -20
  123. package/src/modes/acp/acp-event-mapper.ts +18 -2
  124. package/src/modes/acp/acp-mode.ts +8 -36
  125. package/src/modes/acp/permission-mode.ts +25 -0
  126. package/src/modes/acp/startup-options.ts +6 -0
  127. package/src/modes/action-registry.ts +165 -0
  128. package/src/modes/bridge/bridge-mode.ts +6 -4
  129. package/src/modes/components/agent-dashboard.ts +37 -17
  130. package/src/modes/components/ansi-display-validator.ts +54 -0
  131. package/src/modes/components/chrome.ts +40 -0
  132. package/src/modes/components/command-palette.ts +168 -0
  133. package/src/modes/components/custom-editor.ts +105 -33
  134. package/src/modes/components/custom-provider-wizard.ts +77 -15
  135. package/src/modes/components/index.ts +2 -1
  136. package/src/modes/components/model-selector.ts +93 -35
  137. package/src/modes/components/notifications-settings-editor.ts +1403 -0
  138. package/src/modes/components/pet-capability.ts +115 -0
  139. package/src/modes/components/pet-selector.ts +15 -23
  140. package/src/modes/components/plan-preview-overlay.ts +295 -0
  141. package/src/modes/components/queue-mode-selector.ts +10 -27
  142. package/src/modes/components/queue-pane.ts +79 -0
  143. package/src/modes/components/read-tool-group.ts +13 -0
  144. package/src/modes/components/sayknow-pet-widget.ts +169 -20
  145. package/src/modes/components/session-observer-overlay.ts +213 -775
  146. package/src/modes/components/sessions-dashboard.ts +181 -0
  147. package/src/modes/components/settings-selector.ts +89 -12
  148. package/src/modes/components/show-images-selector.ts +10 -24
  149. package/src/modes/components/status-line/types.ts +1 -1
  150. package/src/modes/components/status-line.ts +1 -969
  151. package/src/modes/components/tasks-pane.ts +73 -0
  152. package/src/modes/components/theme-selector.ts +11 -31
  153. package/src/modes/components/tool-execution.ts +22 -0
  154. package/src/modes/components/tool-status-header.ts +1056 -0
  155. package/src/modes/components/tool-transcript-format.ts +393 -0
  156. package/src/modes/components/transcript-viewer-overlay.ts +446 -0
  157. package/src/modes/components/welcome.ts +4 -4
  158. package/src/modes/controllers/btw-controller.ts +1 -0
  159. package/src/modes/controllers/command-controller.ts +25 -17
  160. package/src/modes/controllers/event-controller.ts +14 -18
  161. package/src/modes/controllers/extension-ui-controller.ts +441 -37
  162. package/src/modes/controllers/goal-mode-controller.ts +493 -0
  163. package/src/modes/controllers/input-controller.ts +889 -263
  164. package/src/modes/controllers/mode-gate.ts +24 -0
  165. package/src/modes/controllers/plan-mode-controller.ts +519 -0
  166. package/src/modes/controllers/runtime-mcp-command-controller.ts +3 -0
  167. package/src/modes/controllers/selector-controller.ts +957 -54
  168. package/src/modes/controllers/stt-controller.ts +125 -0
  169. package/src/modes/index.ts +0 -22
  170. package/src/modes/interactive-mode.ts +376 -1130
  171. package/src/modes/jobs-observer.ts +3 -0
  172. package/src/modes/prompt-action-autocomplete.ts +7 -0
  173. package/src/modes/rpc/rpc-mode.ts +3 -1
  174. package/src/modes/runtime-init.ts +320 -6
  175. package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
  176. package/src/modes/shared/agent-wire/command-dispatch.ts +3 -1
  177. package/src/modes/shared/agent-wire/deep-interview-gate.ts +65 -111
  178. package/src/modes/shared/agent-wire/event-contract.ts +7 -8
  179. package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
  180. package/src/modes/shared/agent-wire/event-observation.ts +16 -7
  181. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1331 -89
  182. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +19 -17
  183. package/src/modes/shared/agent-wire/workflow-gate-types.ts +407 -0
  184. package/src/modes/tasks-aggregator.ts +199 -0
  185. package/src/modes/transcript-item-registry.ts +229 -0
  186. package/src/modes/types.ts +63 -21
  187. package/src/modes/utils/ui-helpers.ts +17 -9
  188. package/src/notifications/index.ts +8 -2
  189. package/src/plan-mode/approved-plan.ts +3 -1
  190. package/src/prompts/agent-fragments/ralplan-persistence.md +6 -0
  191. package/src/prompts/agent-fragments/restricted-bash.md +1 -0
  192. package/src/prompts/agents/architect.md +3 -8
  193. package/src/prompts/agents/critic.md +3 -8
  194. package/src/prompts/agents/executor.md +3 -0
  195. package/src/prompts/agents/planner.md +4 -12
  196. package/src/prompts/system/custom-system-prompt.md +2 -24
  197. package/src/prompts/system/plan-mode-approved.md +8 -0
  198. package/src/prompts/system/system-prompt.md +18 -94
  199. package/src/prompts/tools/bash.md +4 -4
  200. package/src/prompts/tools/browser.md +15 -52
  201. package/src/prompts/tools/find.md +2 -2
  202. package/src/prompts/tools/hashline.md +13 -55
  203. package/src/prompts/tools/lsp.md +3 -3
  204. package/src/prompts/tools/read.md +3 -6
  205. package/src/prompts/tools/search-tool-bm25.md +0 -2
  206. package/src/prompts/tools/search.md +2 -4
  207. package/src/prompts/tools/skill-discovery.md +1 -2
  208. package/src/prompts/tools/task.md +1 -1
  209. package/src/runtime-mcp/client.ts +94 -19
  210. package/src/runtime-mcp/config.ts +27 -15
  211. package/src/runtime-mcp/discoverable-tool-metadata.ts +16 -13
  212. package/src/runtime-mcp/manager.ts +359 -106
  213. package/src/runtime-mcp/oauth-discovery.ts +116 -26
  214. package/src/runtime-mcp/oauth-flow.ts +42 -12
  215. package/src/runtime-mcp/transports/http.ts +49 -19
  216. package/src/runtime-mcp/transports/stdio.ts +47 -28
  217. package/src/runtime-mcp/types.ts +10 -0
  218. package/src/sdk/acp/adapter.ts +418 -0
  219. package/src/sdk/acp/index.ts +2 -0
  220. package/src/sdk/broker/broker.ts +877 -0
  221. package/src/sdk/broker/discovery.ts +238 -0
  222. package/src/sdk/broker/ensure.ts +393 -0
  223. package/src/sdk/broker/identity.ts +42 -0
  224. package/src/sdk/broker/index.ts +8 -0
  225. package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
  226. package/src/sdk/broker/internal-source.bunfig.toml +1 -0
  227. package/src/sdk/broker/internal.ts +10 -0
  228. package/src/sdk/broker/lifecycle-codec.ts +11 -0
  229. package/src/sdk/broker/lifecycle-ledger.ts +583 -0
  230. package/src/sdk/broker/lifecycle.ts +3413 -0
  231. package/src/sdk/broker/process-incarnation.ts +151 -0
  232. package/src/sdk/broker/runtime.ts +164 -0
  233. package/src/sdk/broker/session-index.ts +678 -0
  234. package/src/sdk/broker/state-version.ts +47 -0
  235. package/src/sdk/broker/transport.ts +125 -0
  236. package/src/sdk/bus/attachment-registry.ts +23 -0
  237. package/src/sdk/bus/chat-adapters.ts +147 -0
  238. package/src/sdk/bus/chat-command-policy.ts +107 -0
  239. package/src/sdk/bus/chat-daemon-cli.ts +278 -0
  240. package/src/sdk/bus/chat-daemon-control.ts +1101 -0
  241. package/src/sdk/bus/chat-daemon-runtime.ts +527 -0
  242. package/src/sdk/bus/chat-effect-journal.ts +363 -0
  243. package/src/sdk/bus/config-commands.ts +192 -0
  244. package/src/sdk/bus/config.ts +568 -0
  245. package/src/sdk/bus/conversation-store.ts +367 -0
  246. package/src/sdk/bus/daemon-paths.ts +34 -0
  247. package/src/sdk/bus/discord-conversation.ts +85 -0
  248. package/src/sdk/bus/discord-daemon.ts +2292 -0
  249. package/src/sdk/bus/discord-live-provider.ts +521 -0
  250. package/src/sdk/bus/discord-provider.ts +56 -0
  251. package/src/sdk/bus/engine.ts +100 -0
  252. package/src/sdk/bus/helpers.ts +135 -0
  253. package/src/sdk/bus/html-format.ts +518 -0
  254. package/src/sdk/bus/index.ts +4961 -0
  255. package/src/sdk/bus/lifecycle-commands.ts +291 -0
  256. package/src/sdk/bus/lifecycle-control-runtime.ts +1409 -0
  257. package/src/sdk/bus/lifecycle-orchestrator.ts +458 -0
  258. package/src/sdk/bus/managed-daemon.ts +163 -0
  259. package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
  260. package/src/sdk/bus/natives-augment.d.ts +63 -0
  261. package/src/sdk/bus/notification-orchestration.ts +535 -0
  262. package/src/sdk/bus/notification-service.ts +1174 -0
  263. package/src/sdk/bus/operator-runtime.ts +171 -0
  264. package/src/sdk/bus/rate-limit-pool.ts +276 -0
  265. package/src/sdk/bus/recent-activity.ts +279 -0
  266. package/src/sdk/bus/reply-sent-store.ts +134 -0
  267. package/src/sdk/bus/rich-document.ts +258 -0
  268. package/src/sdk/bus/rich-draft.ts +107 -0
  269. package/src/sdk/bus/rich-render.ts +135 -0
  270. package/src/sdk/bus/session-control.ts +439 -0
  271. package/src/sdk/bus/slack-conversation.ts +74 -0
  272. package/src/sdk/bus/slack-daemon.ts +2144 -0
  273. package/src/sdk/bus/slack-live-provider.ts +380 -0
  274. package/src/sdk/bus/slack-provider.ts +76 -0
  275. package/src/sdk/bus/telegram-cli.ts +194 -0
  276. package/src/sdk/bus/telegram-daemon-cli.ts +292 -0
  277. package/src/sdk/bus/telegram-daemon-contract.ts +27 -0
  278. package/src/sdk/bus/telegram-daemon-control.ts +642 -0
  279. package/src/sdk/bus/telegram-daemon.ts +6675 -0
  280. package/src/sdk/bus/telegram-reference.ts +436 -0
  281. package/src/sdk/bus/telegram-setup.ts +663 -0
  282. package/src/sdk/bus/threaded-inbound.ts +141 -0
  283. package/src/sdk/bus/threaded-render.ts +294 -0
  284. package/src/sdk/bus/topic-registry.ts +364 -0
  285. package/src/sdk/cli/index.ts +1 -0
  286. package/src/sdk/cli/session-cli.ts +275 -0
  287. package/src/sdk/client/client.ts +1 -0
  288. package/src/sdk/client/discovery.ts +108 -0
  289. package/src/sdk/client/index.ts +2 -0
  290. package/src/sdk/host/control/dispatch.ts +388 -0
  291. package/src/sdk/host/control/index.ts +10 -0
  292. package/src/sdk/host/control/operations.ts +68 -0
  293. package/src/sdk/host/events.ts +91 -0
  294. package/src/sdk/host/host.ts +338 -0
  295. package/src/sdk/host/index.ts +4 -0
  296. package/src/sdk/host/query/cursor.ts +189 -0
  297. package/src/sdk/host/query/handlers.ts +531 -0
  298. package/src/sdk/host/query/index.ts +3 -0
  299. package/src/sdk/host/query/revision-store.ts +1149 -0
  300. package/src/sdk/host/reverse-leases.ts +325 -0
  301. package/src/sdk/host/types.ts +29 -0
  302. package/src/sdk/index.ts +14 -0
  303. package/src/sdk/lifecycle-session.ts +39 -0
  304. package/src/sdk/mcp/index.ts +1 -0
  305. package/src/sdk/mcp/server.ts +332 -0
  306. package/src/sdk/models.ts +168 -0
  307. package/src/sdk/protocol/adapter-validation.ts +48 -0
  308. package/src/sdk/protocol/operation-inventory.generated.json +4719 -0
  309. package/src/sdk/protocol/operation-registry.ts +312 -0
  310. package/src/sdk/session-directory.ts +141 -0
  311. package/src/sdk/session.ts +2869 -0
  312. package/src/sdk/startup-capability.ts +189 -0
  313. package/src/secrets/index.ts +53 -10
  314. package/src/secrets/obfuscator.ts +21 -18
  315. package/src/secrets/regex.ts +2 -0
  316. package/src/session/agent-session.ts +5602 -2138
  317. package/src/session/agent-storage.ts +18 -0
  318. package/src/session/artifacts.ts +188 -23
  319. package/src/session/cache-economics.ts +25 -8
  320. package/src/session/context-estimation.ts +7 -2
  321. package/src/session/default-model-selection.ts +93 -0
  322. package/src/session/fallback-chain-controller.ts +186 -0
  323. package/src/session/internal/managed-session-scope.ts +2402 -0
  324. package/src/session/internal/managed-session-storage.ts +1559 -0
  325. package/src/session/messages.ts +91 -2
  326. package/src/session/session-manager-internal.ts +33 -0
  327. package/src/session/session-manager.ts +2578 -392
  328. package/src/session/session-storage.ts +550 -40
  329. package/src/session/streaming-output.ts +6 -0
  330. package/src/session/volatile-context-pruning.ts +78 -0
  331. package/src/session/yield-queue.ts +20 -0
  332. package/src/setup/credential-auto-import.ts +291 -35
  333. package/src/setup/hermes/templates/operator-instructions.v1.md +4 -6
  334. package/src/setup/provider-onboarding.ts +36 -61
  335. package/src/setup/provider-presets.json +5 -0
  336. package/src/skc-runtime/deep-interview-recorder.ts +70 -3
  337. package/src/skc-runtime/deep-interview-state.ts +441 -5
  338. package/src/skc-runtime/gc-render.ts +19 -1
  339. package/src/skc-runtime/gc-runtime.ts +68 -3
  340. package/src/skc-runtime/goal-mode-request.ts +55 -8
  341. package/src/skc-runtime/launch-worktree.ts +5 -5
  342. package/src/skc-runtime/linux-proc.ts +71 -0
  343. package/src/skc-runtime/managed-owner-admission.ts +352 -0
  344. package/src/skc-runtime/managed-owner-supervisor.ts +162 -0
  345. package/src/skc-runtime/psmux-detect.ts +82 -4
  346. package/src/skc-runtime/ralplan-runtime.ts +74 -90
  347. package/src/skc-runtime/session-resolution.ts +18 -3
  348. package/src/skc-runtime/session-state-sidecar.ts +47 -138
  349. package/src/skc-runtime/state-argv.ts +292 -0
  350. package/src/skc-runtime/state-migrations.ts +1 -1
  351. package/src/skc-runtime/state-runtime.ts +387 -451
  352. package/src/skc-runtime/state-writer.ts +36 -40
  353. package/src/skc-runtime/team-launch.ts +319 -0
  354. package/src/skc-runtime/team-notify.ts +326 -0
  355. package/src/skc-runtime/team-runtime.ts +8 -2
  356. package/src/skc-runtime/team-store.ts +828 -0
  357. package/src/skc-runtime/team-workers.ts +962 -0
  358. package/src/skc-runtime/tmux-owner-isolation-cli.ts +55 -28
  359. package/src/skc-runtime/tmux-owner-isolation.ts +136 -11
  360. package/src/skc-runtime/tmux-sessions.ts +23 -34
  361. package/src/skc-runtime/ultragoal-change-set.ts +172 -0
  362. package/src/skc-runtime/ultragoal-evidence.ts +874 -0
  363. package/src/skc-runtime/ultragoal-guard.ts +136 -18
  364. package/src/skc-runtime/ultragoal-owner-loss-recovery.ts +328 -0
  365. package/src/skc-runtime/ultragoal-pipeline.ts +306 -0
  366. package/src/skc-runtime/ultragoal-receipt-freshness.ts +102 -1
  367. package/src/skc-runtime/ultragoal-runtime.ts +325 -1322
  368. package/src/skc-runtime/windows-powershell-command.ts +58 -0
  369. package/src/skc-runtime/workflow-cli-common.ts +30 -0
  370. package/src/skc-runtime/workflow-manifest.generated.json +58 -0
  371. package/src/skc-runtime/workflow-manifest.ts +18 -0
  372. package/src/skill-state/active-state.ts +3 -13
  373. package/src/skill-state/workflow-mutation-guard.ts +661 -0
  374. package/src/skill-state/workflow-state-contract.ts +6 -41
  375. package/src/slash-commands/builtin-registry.ts +115 -41
  376. package/src/system-prompt.ts +37 -44
  377. package/src/task/agents.ts +19 -1
  378. package/src/task/executor.ts +223 -45
  379. package/src/task/index.ts +124 -56
  380. package/src/thinking.ts +21 -6
  381. package/src/tool-discovery/tool-index.ts +20 -134
  382. package/src/tools/ask-answer-registry.ts +16 -2
  383. package/src/tools/ast-edit.ts +1 -1
  384. package/src/tools/bash-allowed-prefixes.ts +79 -29
  385. package/src/tools/bash-skill-urls.ts +14 -3
  386. package/src/tools/bash.ts +40 -2
  387. package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
  388. package/src/tools/browser/benchmark/detector-report.ts +157 -0
  389. package/src/tools/browser/benchmark/run-suite.ts +39 -0
  390. package/src/tools/browser/dead-tab-recovery.ts +78 -0
  391. package/src/tools/browser/launch.ts +127 -20
  392. package/src/tools/browser/profile-discovery.ts +63 -0
  393. package/src/tools/browser/profile-posture.ts +59 -0
  394. package/src/tools/browser/profile-reuse.ts +102 -0
  395. package/src/tools/browser/profile-warmup.ts +109 -0
  396. package/src/tools/browser/readable.ts +1 -1
  397. package/src/tools/browser/registry.ts +87 -11
  398. package/src/tools/browser/screenshot-format.ts +34 -0
  399. package/src/tools/browser/tab-protocol.ts +4 -0
  400. package/src/tools/browser/tab-supervisor.ts +392 -142
  401. package/src/tools/browser/tab-worker-entry.ts +33 -14
  402. package/src/tools/browser/tab-worker-path-resolver.ts +67 -0
  403. package/src/tools/browser/tab-worker-smoke.ts +87 -0
  404. package/src/tools/browser/tab-worker.ts +8 -6
  405. package/src/tools/browser.ts +6 -0
  406. package/src/tools/computer.ts +10 -3
  407. package/src/tools/cron.ts +30 -16
  408. package/src/tools/fetch.ts +11 -4
  409. package/src/tools/index.ts +88 -32
  410. package/src/tools/output-meta.ts +19 -7
  411. package/src/tools/path-utils.ts +42 -35
  412. package/src/tools/plan-mode-guard.ts +1 -0
  413. package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
  414. package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
  415. package/src/tools/read.ts +226 -65
  416. package/src/tools/resource-gc.ts +125 -36
  417. package/src/tools/search-tool-bm25.ts +11 -74
  418. package/src/tools/sqlite-reader.ts +3 -2
  419. package/src/tools/subagent-render.ts +19 -8
  420. package/src/tools/subagent.ts +129 -34
  421. package/src/tools/telegram-send.ts +2 -2
  422. package/src/utils/event-bus.ts +9 -4
  423. package/src/utils/file-mentions.ts +4 -4
  424. package/src/utils/image-loading.ts +85 -34
  425. package/src/utils/image-resize.ts +16 -9
  426. package/src/utils/pasted-image-loading.ts +514 -0
  427. package/src/utils/pasted-image-path.ts +223 -98
  428. package/src/web/scrapers/html-to-markdown.ts +68 -0
  429. package/src/web/scrapers/readthedocs.ts +1 -1
  430. package/src/web/scrapers/types.ts +1 -68
  431. package/src/web/search/index.ts +3 -3
  432. package/src/web/search/providers/openai-compatible.ts +76 -23
  433. package/dist/types/append-only-mode.d.ts +0 -31
  434. package/dist/types/async/index.d.ts +0 -2
  435. package/dist/types/async/job-manager.d.ts +0 -328
  436. package/dist/types/async/support.d.ts +0 -2
  437. package/dist/types/autoresearch/dashboard.d.ts +0 -4
  438. package/dist/types/autoresearch/git.d.ts +0 -36
  439. package/dist/types/autoresearch/helpers.d.ts +0 -24
  440. package/dist/types/autoresearch/index.d.ts +0 -2
  441. package/dist/types/autoresearch/state.d.ts +0 -17
  442. package/dist/types/autoresearch/storage.d.ts +0 -142
  443. package/dist/types/autoresearch/tools/init-experiment.d.ts +0 -31
  444. package/dist/types/autoresearch/tools/log-experiment.d.ts +0 -23
  445. package/dist/types/autoresearch/tools/run-experiment.d.ts +0 -8
  446. package/dist/types/autoresearch/tools/update-notes.d.ts +0 -12
  447. package/dist/types/autoresearch/types.d.ts +0 -154
  448. package/dist/types/build-metadata.d.ts +0 -7
  449. package/dist/types/capability/context-file.d.ts +0 -17
  450. package/dist/types/capability/extension-module.d.ts +0 -15
  451. package/dist/types/capability/extension.d.ts +0 -28
  452. package/dist/types/capability/fs.d.ts +0 -20
  453. package/dist/types/capability/hook.d.ts +0 -19
  454. package/dist/types/capability/index.d.ts +0 -80
  455. package/dist/types/capability/instruction.d.ts +0 -17
  456. package/dist/types/capability/mcp.d.ts +0 -49
  457. package/dist/types/capability/prompt.d.ts +0 -15
  458. package/dist/types/capability/rule.d.ts +0 -69
  459. package/dist/types/capability/settings.d.ts +0 -15
  460. package/dist/types/capability/skill.d.ts +0 -36
  461. package/dist/types/capability/slash-command.d.ts +0 -17
  462. package/dist/types/capability/ssh.d.ts +0 -23
  463. package/dist/types/capability/system-prompt.d.ts +0 -15
  464. package/dist/types/capability/tool.d.ts +0 -19
  465. package/dist/types/capability/types.d.ts +0 -154
  466. package/dist/types/cli/agents-cli.d.ts +0 -12
  467. package/dist/types/cli/args.d.ts +0 -57
  468. package/dist/types/cli/auth-broker-cli.d.ts +0 -25
  469. package/dist/types/cli/auth-gateway-cli.d.ts +0 -18
  470. package/dist/types/cli/classify-install-target.d.ts +0 -8
  471. package/dist/types/cli/commands/init-xdg.d.ts +0 -1
  472. package/dist/types/cli/completion-cli.d.ts +0 -41
  473. package/dist/types/cli/config-cli.d.ts +0 -23
  474. package/dist/types/cli/daemon-cli.d.ts +0 -27
  475. package/dist/types/cli/fast-help.d.ts +0 -1
  476. package/dist/types/cli/file-processor.d.ts +0 -11
  477. package/dist/types/cli/fixture-report.d.ts +0 -20
  478. package/dist/types/cli/fixture-report.test.d.ts +0 -1
  479. package/dist/types/cli/grep-cli.d.ts +0 -17
  480. package/dist/types/cli/initial-message.d.ts +0 -17
  481. package/dist/types/cli/list-models.d.ts +0 -36
  482. package/dist/types/cli/local-provider-smoke.d.ts +0 -59
  483. package/dist/types/cli/malloc-env-guard.d.ts +0 -65
  484. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  485. package/dist/types/cli/mcp-cli.d.ts +0 -25
  486. package/dist/types/cli/migrate-cli.d.ts +0 -20
  487. package/dist/types/cli/nofile-limit.d.ts +0 -11
  488. package/dist/types/cli/notify-cli.d.ts +0 -39
  489. package/dist/types/cli/plugin-cli.d.ts +0 -34
  490. package/dist/types/cli/read-cli.d.ts +0 -4
  491. package/dist/types/cli/session-picker.d.ts +0 -4
  492. package/dist/types/cli/setup-cli.d.ts +0 -73
  493. package/dist/types/cli/shell-cli.d.ts +0 -8
  494. package/dist/types/cli/skills-cli.d.ts +0 -9
  495. package/dist/types/cli/ssh-cli.d.ts +0 -21
  496. package/dist/types/cli/stats-cli.d.ts +0 -17
  497. package/dist/types/cli/telegram-cli.d.ts +0 -13
  498. package/dist/types/cli/update-cli.d.ts +0 -108
  499. package/dist/types/cli/web-search-cli.d.ts +0 -32
  500. package/dist/types/cli/worktree-cli.d.ts +0 -26
  501. package/dist/types/cli.d.ts +0 -140
  502. package/dist/types/commands/acp.d.ts +0 -12
  503. package/dist/types/commands/agents.d.ts +0 -34
  504. package/dist/types/commands/auth-broker.d.ts +0 -54
  505. package/dist/types/commands/auth-gateway.d.ts +0 -32
  506. package/dist/types/commands/codex-native-hook.d.ts +0 -6
  507. package/dist/types/commands/commit.d.ts +0 -27
  508. package/dist/types/commands/completion.d.ts +0 -29
  509. package/dist/types/commands/config.d.ts +0 -33
  510. package/dist/types/commands/contribution-prep.d.ts +0 -18
  511. package/dist/types/commands/coordinator.d.ts +0 -19
  512. package/dist/types/commands/daemon.d.ts +0 -45
  513. package/dist/types/commands/deep-interview.d.ts +0 -54
  514. package/dist/types/commands/gc.d.ts +0 -26
  515. package/dist/types/commands/grep.d.ts +0 -42
  516. package/dist/types/commands/harness.d.ts +0 -43
  517. package/dist/types/commands/launch.d.ts +0 -131
  518. package/dist/types/commands/local-provider.d.ts +0 -34
  519. package/dist/types/commands/mcp-serve.d.ts +0 -24
  520. package/dist/types/commands/mcp.d.ts +0 -70
  521. package/dist/types/commands/migrate.d.ts +0 -33
  522. package/dist/types/commands/notify.d.ts +0 -47
  523. package/dist/types/commands/plugin.d.ts +0 -58
  524. package/dist/types/commands/ralplan.d.ts +0 -7
  525. package/dist/types/commands/read.d.ts +0 -15
  526. package/dist/types/commands/rlm.d.ts +0 -10
  527. package/dist/types/commands/session.d.ts +0 -30
  528. package/dist/types/commands/setup.d.ts +0 -105
  529. package/dist/types/commands/shell.d.ts +0 -21
  530. package/dist/types/commands/skills.d.ts +0 -26
  531. package/dist/types/commands/ssh.d.ts +0 -48
  532. package/dist/types/commands/state.d.ts +0 -7
  533. package/dist/types/commands/stats.d.ts +0 -25
  534. package/dist/types/commands/team.d.ts +0 -24
  535. package/dist/types/commands/telegram.d.ts +0 -22
  536. package/dist/types/commands/ultragoal.d.ts +0 -8
  537. package/dist/types/commands/update.d.ts +0 -20
  538. package/dist/types/commands/web-search.d.ts +0 -87
  539. package/dist/types/commands/worktree.d.ts +0 -34
  540. package/dist/types/commit/agentic/agent.d.ts +0 -31
  541. package/dist/types/commit/agentic/fallback.d.ts +0 -5
  542. package/dist/types/commit/agentic/index.d.ts +0 -2
  543. package/dist/types/commit/agentic/state.d.ts +0 -58
  544. package/dist/types/commit/agentic/tools/analyze-file.d.ts +0 -19
  545. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +0 -10
  546. package/dist/types/commit/agentic/tools/git-hunk.d.ts +0 -9
  547. package/dist/types/commit/agentic/tools/git-overview.d.ts +0 -9
  548. package/dist/types/commit/agentic/tools/index.d.ts +0 -16
  549. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +0 -28
  550. package/dist/types/commit/agentic/tools/propose-commit.d.ts +0 -36
  551. package/dist/types/commit/agentic/tools/recent-commits.d.ts +0 -7
  552. package/dist/types/commit/agentic/tools/schemas.d.ts +0 -27
  553. package/dist/types/commit/agentic/tools/split-commit.d.ts +0 -53
  554. package/dist/types/commit/agentic/topo-sort.d.ts +0 -4
  555. package/dist/types/commit/agentic/trivial.d.ts +0 -7
  556. package/dist/types/commit/agentic/validation.d.ts +0 -20
  557. package/dist/types/commit/analysis/conventional.d.ts +0 -22
  558. package/dist/types/commit/analysis/index.d.ts +0 -4
  559. package/dist/types/commit/analysis/scope.d.ts +0 -6
  560. package/dist/types/commit/analysis/summary.d.ts +0 -19
  561. package/dist/types/commit/analysis/validation.d.ts +0 -8
  562. package/dist/types/commit/changelog/detect.d.ts +0 -2
  563. package/dist/types/commit/changelog/generate.d.ts +0 -30
  564. package/dist/types/commit/changelog/index.d.ts +0 -30
  565. package/dist/types/commit/changelog/parse.d.ts +0 -2
  566. package/dist/types/commit/cli.d.ts +0 -3
  567. package/dist/types/commit/git/diff.d.ts +0 -5
  568. package/dist/types/commit/index.d.ts +0 -4
  569. package/dist/types/commit/map-reduce/index.d.ts +0 -28
  570. package/dist/types/commit/map-reduce/map-phase.d.ts +0 -17
  571. package/dist/types/commit/map-reduce/reduce-phase.d.ts +0 -13
  572. package/dist/types/commit/map-reduce/utils.d.ts +0 -2
  573. package/dist/types/commit/message.d.ts +0 -2
  574. package/dist/types/commit/model-selection.d.ts +0 -15
  575. package/dist/types/commit/pipeline.d.ts +0 -5
  576. package/dist/types/commit/shared-llm.d.ts +0 -54
  577. package/dist/types/commit/types.d.ts +0 -78
  578. package/dist/types/commit/utils/exclusions.d.ts +0 -4
  579. package/dist/types/commit/utils.d.ts +0 -20
  580. package/dist/types/config/config-file.d.ts +0 -58
  581. package/dist/types/config/file-lock-gc.d.ts +0 -5
  582. package/dist/types/config/file-lock.d.ts +0 -36
  583. package/dist/types/config/keybindings.d.ts +0 -364
  584. package/dist/types/config/model-equivalence.d.ts +0 -24
  585. package/dist/types/config/model-profile-activation.d.ts +0 -65
  586. package/dist/types/config/model-profiles.d.ts +0 -39
  587. package/dist/types/config/model-registry.d.ts +0 -473
  588. package/dist/types/config/model-resolver.d.ts +0 -217
  589. package/dist/types/config/models-config-schema.d.ts +0 -700
  590. package/dist/types/config/prompt-templates.d.ts +0 -32
  591. package/dist/types/config/resolve-config-value.d.ts +0 -17
  592. package/dist/types/config/settings-schema.d.ts +0 -4223
  593. package/dist/types/config/settings.d.ts +0 -158
  594. package/dist/types/config/skill-settings-defaults.d.ts +0 -14
  595. package/dist/types/config/telegram-autostart.d.ts +0 -14
  596. package/dist/types/config/telegram-env-bridge.d.ts +0 -18
  597. package/dist/types/config.d.ts +0 -66
  598. package/dist/types/coordinator/contract.d.ts +0 -4
  599. package/dist/types/coordinator-mcp/model-preset.d.ts +0 -45
  600. package/dist/types/coordinator-mcp/policy.d.ts +0 -27
  601. package/dist/types/coordinator-mcp/safety.d.ts +0 -26
  602. package/dist/types/coordinator-mcp/server.d.ts +0 -139
  603. package/dist/types/coordinator-mcp/session-reaper.d.ts +0 -53
  604. package/dist/types/cursor.d.ts +0 -24
  605. package/dist/types/daemon/builtin.d.ts +0 -20
  606. package/dist/types/daemon/control-types.d.ts +0 -67
  607. package/dist/types/daemon/operator-contract.d.ts +0 -47
  608. package/dist/types/daemon/runtime.d.ts +0 -25
  609. package/dist/types/dap/client.d.ts +0 -39
  610. package/dist/types/dap/config.d.ts +0 -6
  611. package/dist/types/dap/index.d.ts +0 -4
  612. package/dist/types/dap/session.d.ts +0 -108
  613. package/dist/types/dap/types.d.ts +0 -524
  614. package/dist/types/debug/crash-diagnostics.d.ts +0 -45
  615. package/dist/types/debug/index.d.ts +0 -15
  616. package/dist/types/debug/log-formatting.d.ts +0 -4
  617. package/dist/types/debug/log-viewer.d.ts +0 -68
  618. package/dist/types/debug/profiler.d.ts +0 -24
  619. package/dist/types/debug/raw-sse-buffer.d.ts +0 -44
  620. package/dist/types/debug/raw-sse.d.ts +0 -16
  621. package/dist/types/debug/report-bundle.d.ts +0 -55
  622. package/dist/types/debug/runtime-gauges.d.ts +0 -6
  623. package/dist/types/debug/system-info.d.ts +0 -26
  624. package/dist/types/deep-interview/plaintext-gate-guard.d.ts +0 -11
  625. package/dist/types/deep-interview/render-middleware.d.ts +0 -6
  626. package/dist/types/defaults/skc/extensions/grok-build/index.d.ts +0 -1
  627. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/index.d.ts +0 -1
  628. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.d.ts +0 -29
  629. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.d.ts +0 -27
  630. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/billing.d.ts +0 -8
  631. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/register.d.ts +0 -5
  632. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/stream.d.ts +0 -10
  633. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/usage.d.ts +0 -2
  634. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/base-url.d.ts +0 -2
  635. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/errors.d.ts +0 -38
  636. package/dist/types/defaults/skc-defaults.d.ts +0 -64
  637. package/dist/types/defaults/skc-grok-cli.d.ts +0 -5
  638. package/dist/types/discovery/agents-md.d.ts +0 -1
  639. package/dist/types/discovery/agents.d.ts +0 -12
  640. package/dist/types/discovery/builtin.d.ts +0 -1
  641. package/dist/types/discovery/claude-plugins.d.ts +0 -1
  642. package/dist/types/discovery/claude.d.ts +0 -1
  643. package/dist/types/discovery/cline.d.ts +0 -1
  644. package/dist/types/discovery/codex.d.ts +0 -1
  645. package/dist/types/discovery/cursor.d.ts +0 -19
  646. package/dist/types/discovery/gemini.d.ts +0 -1
  647. package/dist/types/discovery/github.d.ts +0 -1
  648. package/dist/types/discovery/helpers.d.ts +0 -271
  649. package/dist/types/discovery/index.d.ts +0 -48
  650. package/dist/types/discovery/mcp-json.d.ts +0 -1
  651. package/dist/types/discovery/opencode.d.ts +0 -1
  652. package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
  653. package/dist/types/discovery/ssh.d.ts +0 -1
  654. package/dist/types/discovery/substitute-plugin-root.d.ts +0 -1
  655. package/dist/types/discovery/vscode.d.ts +0 -1
  656. package/dist/types/discovery/windsurf.d.ts +0 -15
  657. package/dist/types/edit/apply-patch/index.d.ts +0 -35
  658. package/dist/types/edit/apply-patch/parser.d.ts +0 -34
  659. package/dist/types/edit/diff.d.ts +0 -75
  660. package/dist/types/edit/file-read-cache.d.ts +0 -25
  661. package/dist/types/edit/index.d.ts +0 -58
  662. package/dist/types/edit/modes/apply-patch.d.ts +0 -24
  663. package/dist/types/edit/modes/patch.d.ts +0 -99
  664. package/dist/types/edit/modes/replace.d.ts +0 -149
  665. package/dist/types/edit/normalize.d.ts +0 -43
  666. package/dist/types/edit/notebook.d.ts +0 -26
  667. package/dist/types/edit/read-file.d.ts +0 -8
  668. package/dist/types/edit/renderer.d.ts +0 -110
  669. package/dist/types/edit/streaming.d.ts +0 -66
  670. package/dist/types/eval/backend.d.ts +0 -40
  671. package/dist/types/eval/index.d.ts +0 -4
  672. package/dist/types/eval/js/context-manager.d.ts +0 -27
  673. package/dist/types/eval/js/executor.d.ts +0 -29
  674. package/dist/types/eval/js/index.d.ts +0 -10
  675. package/dist/types/eval/js/shared/helpers.d.ts +0 -38
  676. package/dist/types/eval/js/shared/indirect-eval.d.ts +0 -14
  677. package/dist/types/eval/js/shared/prelude.d.ts +0 -1
  678. package/dist/types/eval/js/shared/rewrite-imports.d.ts +0 -6
  679. package/dist/types/eval/js/shared/runtime.d.ts +0 -47
  680. package/dist/types/eval/js/shared/types.d.ts +0 -24
  681. package/dist/types/eval/js/tool-bridge.d.ts +0 -18
  682. package/dist/types/eval/js/worker-core.d.ts +0 -5
  683. package/dist/types/eval/js/worker-entry.d.ts +0 -1
  684. package/dist/types/eval/js/worker-protocol.d.ts +0 -77
  685. package/dist/types/eval/py/display.d.ts +0 -25
  686. package/dist/types/eval/py/executor.d.ts +0 -88
  687. package/dist/types/eval/py/index.d.ts +0 -10
  688. package/dist/types/eval/py/kernel.d.ts +0 -65
  689. package/dist/types/eval/py/prelude.d.ts +0 -1
  690. package/dist/types/eval/py/runtime.d.ts +0 -29
  691. package/dist/types/eval/py/tool-bridge.d.ts +0 -20
  692. package/dist/types/eval/types.d.ts +0 -52
  693. package/dist/types/exa/factory.d.ts +0 -13
  694. package/dist/types/exa/index.d.ts +0 -20
  695. package/dist/types/exa/mcp-client.d.ts +0 -45
  696. package/dist/types/exa/render.d.ts +0 -19
  697. package/dist/types/exa/researcher.d.ts +0 -9
  698. package/dist/types/exa/search.d.ts +0 -9
  699. package/dist/types/exa/types.d.ts +0 -155
  700. package/dist/types/exa/websets.d.ts +0 -9
  701. package/dist/types/exec/bash-executor.d.ts +0 -64
  702. package/dist/types/exec/exec.d.ts +0 -25
  703. package/dist/types/exec/idle-timeout-watchdog.d.ts +0 -18
  704. package/dist/types/exec/non-interactive-env.d.ts +0 -1
  705. package/dist/types/export/custom-share.d.ts +0 -20
  706. package/dist/types/export/html/index.d.ts +0 -10
  707. package/dist/types/export/html/template.generated.d.ts +0 -1
  708. package/dist/types/export/html/template.macro.d.ts +0 -5
  709. package/dist/types/export/ttsr.d.ts +0 -55
  710. package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +0 -9
  711. package/dist/types/extensibility/custom-commands/index.d.ts +0 -2
  712. package/dist/types/extensibility/custom-commands/loader.d.ts +0 -29
  713. package/dist/types/extensibility/custom-commands/types.d.ts +0 -106
  714. package/dist/types/extensibility/custom-tools/index.d.ts +0 -6
  715. package/dist/types/extensibility/custom-tools/loader.d.ts +0 -69
  716. package/dist/types/extensibility/custom-tools/types.d.ts +0 -229
  717. package/dist/types/extensibility/custom-tools/wrapper.d.ts +0 -24
  718. package/dist/types/extensibility/extensions/compact-handler.d.ts +0 -26
  719. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +0 -29
  720. package/dist/types/extensibility/extensions/index.d.ts +0 -9
  721. package/dist/types/extensibility/extensions/loader.d.ts +0 -43
  722. package/dist/types/extensibility/extensions/prefix-command-bridge.d.ts +0 -35
  723. package/dist/types/extensibility/extensions/runner.d.ts +0 -135
  724. package/dist/types/extensibility/extensions/types.d.ts +0 -920
  725. package/dist/types/extensibility/extensions/wrapper.d.ts +0 -55
  726. package/dist/types/extensibility/hooks/index.d.ts +0 -5
  727. package/dist/types/extensibility/hooks/loader.d.ts +0 -89
  728. package/dist/types/extensibility/hooks/runner.d.ts +0 -126
  729. package/dist/types/extensibility/hooks/tool-wrapper.d.ts +0 -25
  730. package/dist/types/extensibility/hooks/types.d.ts +0 -431
  731. package/dist/types/extensibility/plugins/doctor.d.ts +0 -3
  732. package/dist/types/extensibility/plugins/git-url.d.ts +0 -34
  733. package/dist/types/extensibility/plugins/index.d.ts +0 -8
  734. package/dist/types/extensibility/plugins/installer.d.ts +0 -5
  735. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +0 -2
  736. package/dist/types/extensibility/plugins/loader.d.ts +0 -31
  737. package/dist/types/extensibility/plugins/manager.d.ts +0 -65
  738. package/dist/types/extensibility/plugins/marketplace/cache.d.ts +0 -41
  739. package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +0 -48
  740. package/dist/types/extensibility/plugins/marketplace/index.d.ts +0 -6
  741. package/dist/types/extensibility/plugins/marketplace/manager.d.ts +0 -57
  742. package/dist/types/extensibility/plugins/marketplace/registry.d.ts +0 -34
  743. package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +0 -28
  744. package/dist/types/extensibility/plugins/marketplace/types.d.ts +0 -130
  745. package/dist/types/extensibility/plugins/parser.d.ts +0 -52
  746. package/dist/types/extensibility/plugins/security-scanner.d.ts +0 -31
  747. package/dist/types/extensibility/plugins/types.d.ts +0 -149
  748. package/dist/types/extensibility/runtime-skill-discovery.d.ts +0 -20
  749. package/dist/types/extensibility/shared-events.d.ts +0 -281
  750. package/dist/types/extensibility/skc-plugins/activation.d.ts +0 -14
  751. package/dist/types/extensibility/skc-plugins/compiler.d.ts +0 -19
  752. package/dist/types/extensibility/skc-plugins/constrained-hooks.d.ts +0 -29
  753. package/dist/types/extensibility/skc-plugins/index.d.ts +0 -18
  754. package/dist/types/extensibility/skc-plugins/injection.d.ts +0 -40
  755. package/dist/types/extensibility/skc-plugins/installer.d.ts +0 -13
  756. package/dist/types/extensibility/skc-plugins/loader.d.ts +0 -3
  757. package/dist/types/extensibility/skc-plugins/mcp-policy.d.ts +0 -26
  758. package/dist/types/extensibility/skc-plugins/observability.d.ts +0 -27
  759. package/dist/types/extensibility/skc-plugins/paths.d.ts +0 -8
  760. package/dist/types/extensibility/skc-plugins/prompt-appendix.d.ts +0 -16
  761. package/dist/types/extensibility/skc-plugins/registry.d.ts +0 -32
  762. package/dist/types/extensibility/skc-plugins/runtime-adapters.d.ts +0 -64
  763. package/dist/types/extensibility/skc-plugins/schema.d.ts +0 -3
  764. package/dist/types/extensibility/skc-plugins/session-validation.d.ts +0 -42
  765. package/dist/types/extensibility/skc-plugins/state.d.ts +0 -9
  766. package/dist/types/extensibility/skc-plugins/tools.d.ts +0 -8
  767. package/dist/types/extensibility/skc-plugins/types.d.ts +0 -220
  768. package/dist/types/extensibility/skc-plugins/validation.d.ts +0 -11
  769. package/dist/types/extensibility/skills.d.ts +0 -82
  770. package/dist/types/extensibility/slash-commands.d.ts +0 -48
  771. package/dist/types/extensibility/tool-proxy.d.ts +0 -4
  772. package/dist/types/extensibility/typebox.d.ts +0 -155
  773. package/dist/types/extensibility/utils.d.ts +0 -12
  774. package/dist/types/goals/index.d.ts +0 -3
  775. package/dist/types/goals/runtime.d.ts +0 -63
  776. package/dist/types/goals/state.d.ts +0 -32
  777. package/dist/types/goals/tools/goal-tool.d.ts +0 -62
  778. package/dist/types/harness-control-plane/classifier.d.ts +0 -13
  779. package/dist/types/harness-control-plane/control-endpoint.d.ts +0 -31
  780. package/dist/types/harness-control-plane/finalize.d.ts +0 -60
  781. package/dist/types/harness-control-plane/gc-adapter.d.ts +0 -3
  782. package/dist/types/harness-control-plane/operate.d.ts +0 -35
  783. package/dist/types/harness-control-plane/owner.d.ts +0 -53
  784. package/dist/types/harness-control-plane/phase-rollup.d.ts +0 -23
  785. package/dist/types/harness-control-plane/preserve.d.ts +0 -19
  786. package/dist/types/harness-control-plane/receipt-ingest.d.ts +0 -19
  787. package/dist/types/harness-control-plane/receipt-spool.d.ts +0 -19
  788. package/dist/types/harness-control-plane/receipts.d.ts +0 -149
  789. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  790. package/dist/types/harness-control-plane/seams.d.ts +0 -21
  791. package/dist/types/harness-control-plane/session-lease.d.ts +0 -65
  792. package/dist/types/harness-control-plane/state-machine.d.ts +0 -24
  793. package/dist/types/harness-control-plane/storage.d.ts +0 -81
  794. package/dist/types/harness-control-plane/types.d.ts +0 -187
  795. package/dist/types/hashline/anchors.d.ts +0 -20
  796. package/dist/types/hashline/apply.d.ts +0 -14
  797. package/dist/types/hashline/constants.d.ts +0 -19
  798. package/dist/types/hashline/diff-preview.d.ts +0 -2
  799. package/dist/types/hashline/diff.d.ts +0 -17
  800. package/dist/types/hashline/execute.d.ts +0 -4
  801. package/dist/types/hashline/hash.d.ts +0 -123
  802. package/dist/types/hashline/index.d.ts +0 -13
  803. package/dist/types/hashline/input.d.ts +0 -11
  804. package/dist/types/hashline/parser.d.ts +0 -7
  805. package/dist/types/hashline/prefixes.d.ts +0 -7
  806. package/dist/types/hashline/recovery.d.ts +0 -27
  807. package/dist/types/hashline/stream.d.ts +0 -2
  808. package/dist/types/hashline/types.d.ts +0 -77
  809. package/dist/types/hindsight/backend.d.ts +0 -13
  810. package/dist/types/hindsight/bank.d.ts +0 -54
  811. package/dist/types/hindsight/client.d.ts +0 -224
  812. package/dist/types/hindsight/config.d.ts +0 -51
  813. package/dist/types/hindsight/content.d.ts +0 -70
  814. package/dist/types/hindsight/index.d.ts +0 -8
  815. package/dist/types/hindsight/mental-models.d.ts +0 -125
  816. package/dist/types/hindsight/state.d.ts +0 -99
  817. package/dist/types/hindsight/transcript.d.ts +0 -28
  818. package/dist/types/hooks/codex-native-hooks-config.d.ts +0 -29
  819. package/dist/types/hooks/native-skill-hook.d.ts +0 -28
  820. package/dist/types/hooks/skill-keywords.d.ts +0 -18
  821. package/dist/types/hooks/skill-state.d.ts +0 -93
  822. package/dist/types/i18n/index.d.ts +0 -38
  823. package/dist/types/i18n/messages/de.d.ts +0 -2
  824. package/dist/types/i18n/messages/de.messages.d.ts +0 -1
  825. package/dist/types/i18n/messages/de.settings.d.ts +0 -1
  826. package/dist/types/i18n/messages/en.d.ts +0 -81
  827. package/dist/types/i18n/messages/es.d.ts +0 -2
  828. package/dist/types/i18n/messages/es.messages.d.ts +0 -1
  829. package/dist/types/i18n/messages/es.settings.d.ts +0 -1
  830. package/dist/types/i18n/messages/fr.d.ts +0 -2
  831. package/dist/types/i18n/messages/fr.messages.d.ts +0 -1
  832. package/dist/types/i18n/messages/fr.settings.d.ts +0 -1
  833. package/dist/types/i18n/messages/ja.d.ts +0 -2
  834. package/dist/types/i18n/messages/ja.messages.d.ts +0 -1
  835. package/dist/types/i18n/messages/ja.settings.d.ts +0 -1
  836. package/dist/types/i18n/messages/ko.d.ts +0 -2
  837. package/dist/types/i18n/messages/ko.messages.d.ts +0 -1
  838. package/dist/types/i18n/messages/ko.settings.d.ts +0 -1
  839. package/dist/types/i18n/messages/zh.d.ts +0 -2
  840. package/dist/types/i18n/messages/zh.messages.d.ts +0 -1
  841. package/dist/types/i18n/messages/zh.settings.d.ts +0 -1
  842. package/dist/types/index.d.ts +0 -33
  843. package/dist/types/internal-urls/agent-protocol.d.ts +0 -12
  844. package/dist/types/internal-urls/artifact-protocol.d.ts +0 -6
  845. package/dist/types/internal-urls/docs-index.generated.d.ts +0 -2
  846. package/dist/types/internal-urls/index.d.ts +0 -20
  847. package/dist/types/internal-urls/issue-pr-protocol.d.ts +0 -17
  848. package/dist/types/internal-urls/json-query.d.ts +0 -30
  849. package/dist/types/internal-urls/local-protocol.d.ts +0 -43
  850. package/dist/types/internal-urls/mcp-protocol.d.ts +0 -12
  851. package/dist/types/internal-urls/memory-protocol.d.ts +0 -23
  852. package/dist/types/internal-urls/parse.d.ts +0 -19
  853. package/dist/types/internal-urls/registry-helpers.d.ts +0 -11
  854. package/dist/types/internal-urls/router.d.ts +0 -14
  855. package/dist/types/internal-urls/rule-protocol.d.ts +0 -6
  856. package/dist/types/internal-urls/skc-protocol.d.ts +0 -12
  857. package/dist/types/internal-urls/skill-protocol.d.ts +0 -13
  858. package/dist/types/internal-urls/types.d.ts +0 -109
  859. package/dist/types/lsp/client.d.ts +0 -66
  860. package/dist/types/lsp/clients/biome-client.d.ts +0 -16
  861. package/dist/types/lsp/clients/index.d.ts +0 -19
  862. package/dist/types/lsp/clients/lsp-linter-client.d.ts +0 -16
  863. package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -20
  864. package/dist/types/lsp/config.d.ts +0 -65
  865. package/dist/types/lsp/edits.d.ts +0 -23
  866. package/dist/types/lsp/index.d.ts +0 -130
  867. package/dist/types/lsp/lspmux.d.ts +0 -58
  868. package/dist/types/lsp/render.d.ts +0 -32
  869. package/dist/types/lsp/startup-events.d.ts +0 -12
  870. package/dist/types/lsp/types.d.ts +0 -306
  871. package/dist/types/lsp/utils.d.ts +0 -108
  872. package/dist/types/main.d.ts +0 -139
  873. package/dist/types/memories/index.d.ts +0 -28
  874. package/dist/types/memories/storage.d.ts +0 -110
  875. package/dist/types/memory-backend/index.d.ts +0 -4
  876. package/dist/types/memory-backend/local-backend.d.ts +0 -9
  877. package/dist/types/memory-backend/off-backend.d.ts +0 -7
  878. package/dist/types/memory-backend/resolve.d.ts +0 -15
  879. package/dist/types/memory-backend/types.d.ts +0 -61
  880. package/dist/types/migrate/action-planner.d.ts +0 -11
  881. package/dist/types/migrate/adapters/claude-code.d.ts +0 -2
  882. package/dist/types/migrate/adapters/codex.d.ts +0 -5
  883. package/dist/types/migrate/adapters/index.d.ts +0 -45
  884. package/dist/types/migrate/adapters/opencode.d.ts +0 -2
  885. package/dist/types/migrate/executor.d.ts +0 -2
  886. package/dist/types/migrate/mcp-mapper.d.ts +0 -20
  887. package/dist/types/migrate/report.d.ts +0 -18
  888. package/dist/types/migrate/skill-normalizer.d.ts +0 -27
  889. package/dist/types/migrate/types.d.ts +0 -126
  890. package/dist/types/modes/acp/acp-agent.d.ts +0 -78
  891. package/dist/types/modes/acp/acp-client-bridge.d.ts +0 -9
  892. package/dist/types/modes/acp/acp-event-mapper.d.ts +0 -36
  893. package/dist/types/modes/acp/acp-mode.d.ts +0 -17
  894. package/dist/types/modes/acp/index.d.ts +0 -2
  895. package/dist/types/modes/acp/terminal-auth.d.ts +0 -6
  896. package/dist/types/modes/bridge/auth.d.ts +0 -12
  897. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  898. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  899. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  900. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  901. package/dist/types/modes/components/agent-dashboard.d.ts +0 -21
  902. package/dist/types/modes/components/assistant-message.d.ts +0 -20
  903. package/dist/types/modes/components/bash-execution.d.ts +0 -29
  904. package/dist/types/modes/components/bordered-loader.d.ts +0 -11
  905. package/dist/types/modes/components/branch-summary-message.d.ts +0 -13
  906. package/dist/types/modes/components/btw-panel.d.ts +0 -16
  907. package/dist/types/modes/components/compaction-summary-message.d.ts +0 -13
  908. package/dist/types/modes/components/countdown-timer.d.ts +0 -14
  909. package/dist/types/modes/components/custom-editor.d.ts +0 -69
  910. package/dist/types/modes/components/custom-message.d.ts +0 -15
  911. package/dist/types/modes/components/custom-model-preset-wizard.d.ts +0 -12
  912. package/dist/types/modes/components/custom-provider-wizard.d.ts +0 -10
  913. package/dist/types/modes/components/diff.d.ts +0 -11
  914. package/dist/types/modes/components/dynamic-border.d.ts +0 -14
  915. package/dist/types/modes/components/eval-execution.d.ts +0 -23
  916. package/dist/types/modes/components/execution-shared.d.ts +0 -46
  917. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +0 -26
  918. package/dist/types/modes/components/extensions/extension-list.d.ts +0 -39
  919. package/dist/types/modes/components/extensions/index.d.ts +0 -8
  920. package/dist/types/modes/components/extensions/inspector-panel.d.ts +0 -8
  921. package/dist/types/modes/components/extensions/state-manager.d.ts +0 -50
  922. package/dist/types/modes/components/extensions/types.d.ts +0 -151
  923. package/dist/types/modes/components/footer.d.ts +0 -30
  924. package/dist/types/modes/components/history-search.d.ts +0 -7
  925. package/dist/types/modes/components/hook-editor.d.ts +0 -18
  926. package/dist/types/modes/components/hook-input.d.ts +0 -15
  927. package/dist/types/modes/components/hook-message.d.ts +0 -15
  928. package/dist/types/modes/components/hook-selector.d.ts +0 -59
  929. package/dist/types/modes/components/index.d.ts +0 -35
  930. package/dist/types/modes/components/irc-sidebar.d.ts +0 -32
  931. package/dist/types/modes/components/jobs-overlay-model.d.ts +0 -31
  932. package/dist/types/modes/components/jobs-overlay.d.ts +0 -30
  933. package/dist/types/modes/components/keybinding-hints.d.ts +0 -40
  934. package/dist/types/modes/components/login-dialog.d.ts +0 -32
  935. package/dist/types/modes/components/message-frame.d.ts +0 -42
  936. package/dist/types/modes/components/model-selector.d.ts +0 -60
  937. package/dist/types/modes/components/oauth-selector.d.ts +0 -17
  938. package/dist/types/modes/components/pet-selector.d.ts +0 -11
  939. package/dist/types/modes/components/plugin-selector.d.ts +0 -26
  940. package/dist/types/modes/components/plugin-settings.d.ts +0 -66
  941. package/dist/types/modes/components/provider-onboarding-selector.d.ts +0 -7
  942. package/dist/types/modes/components/queue-mode-selector.d.ts +0 -9
  943. package/dist/types/modes/components/queued-message-selector.d.ts +0 -12
  944. package/dist/types/modes/components/read-tool-group.d.ts +0 -30
  945. package/dist/types/modes/components/runtime-mcp-add-wizard.d.ts +0 -26
  946. package/dist/types/modes/components/sayknow-pet-widget.d.ts +0 -59
  947. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  948. package/dist/types/modes/components/session-selector.d.ts +0 -43
  949. package/dist/types/modes/components/settings-defs.d.ts +0 -50
  950. package/dist/types/modes/components/settings-selector.d.ts +0 -64
  951. package/dist/types/modes/components/show-images-selector.d.ts +0 -9
  952. package/dist/types/modes/components/skill-hud/render.d.ts +0 -2
  953. package/dist/types/modes/components/skill-message.d.ts +0 -10
  954. package/dist/types/modes/components/status-line/context-thresholds.d.ts +0 -4
  955. package/dist/types/modes/components/status-line/git-utils.d.ts +0 -28
  956. package/dist/types/modes/components/status-line/index.d.ts +0 -4
  957. package/dist/types/modes/components/status-line/presets.d.ts +0 -3
  958. package/dist/types/modes/components/status-line/segments.d.ts +0 -5
  959. package/dist/types/modes/components/status-line/separators.d.ts +0 -3
  960. package/dist/types/modes/components/status-line/token-rate.d.ts +0 -10
  961. package/dist/types/modes/components/status-line/types.d.ts +0 -83
  962. package/dist/types/modes/components/status-line.d.ts +0 -94
  963. package/dist/types/modes/components/theme-selector.d.ts +0 -10
  964. package/dist/types/modes/components/thinking-selector.d.ts +0 -15
  965. package/dist/types/modes/components/todo-reminder.d.ts +0 -13
  966. package/dist/types/modes/components/tool-execution.d.ts +0 -55
  967. package/dist/types/modes/components/tree-selector.d.ts +0 -31
  968. package/dist/types/modes/components/ttsr-notification.d.ts +0 -13
  969. package/dist/types/modes/components/two-column-body.d.ts +0 -9
  970. package/dist/types/modes/components/user-message-selector.d.ts +0 -28
  971. package/dist/types/modes/components/user-message.d.ts +0 -8
  972. package/dist/types/modes/components/visual-truncate.d.ts +0 -19
  973. package/dist/types/modes/components/welcome.d.ts +0 -46
  974. package/dist/types/modes/controllers/btw-controller.d.ts +0 -10
  975. package/dist/types/modes/controllers/command-controller-shared.d.ts +0 -47
  976. package/dist/types/modes/controllers/command-controller.d.ts +0 -40
  977. package/dist/types/modes/controllers/event-controller.d.ts +0 -21
  978. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -80
  979. package/dist/types/modes/controllers/input-controller.d.ts +0 -42
  980. package/dist/types/modes/controllers/runtime-mcp-command-controller.d.ts +0 -10
  981. package/dist/types/modes/controllers/selector-controller.d.ts +0 -68
  982. package/dist/types/modes/controllers/ssh-command-controller.d.ts +0 -10
  983. package/dist/types/modes/controllers/todo-command-controller.d.ts +0 -7
  984. package/dist/types/modes/emoji-autocomplete.d.ts +0 -16
  985. package/dist/types/modes/index.d.ts +0 -10
  986. package/dist/types/modes/interactive-mode.d.ts +0 -297
  987. package/dist/types/modes/irc-observation-ledger.d.ts +0 -22
  988. package/dist/types/modes/jobs-observer.d.ts +0 -57
  989. package/dist/types/modes/oauth-manual-input.d.ts +0 -8
  990. package/dist/types/modes/print-mode.d.ts +0 -44
  991. package/dist/types/modes/prompt-action-autocomplete.d.ts +0 -50
  992. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  993. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  994. package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
  995. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
  996. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  997. package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
  998. package/dist/types/modes/runtime-init.d.ts +0 -21
  999. package/dist/types/modes/session-observer-registry.d.ts +0 -26
  1000. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +0 -57
  1001. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  1002. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  1003. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  1004. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +0 -102
  1005. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +0 -103
  1006. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +0 -60
  1007. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +0 -37
  1008. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  1009. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  1010. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  1011. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  1012. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  1013. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  1014. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  1015. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  1016. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  1017. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  1018. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  1019. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
  1020. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
  1021. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +0 -154
  1022. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +0 -39
  1023. package/dist/types/modes/shared.d.ts +0 -15
  1024. package/dist/types/modes/slash-command-visibility.d.ts +0 -1
  1025. package/dist/types/modes/theme/defaults/index.d.ts +0 -652
  1026. package/dist/types/modes/theme/mermaid-cache.d.ts +0 -9
  1027. package/dist/types/modes/theme/shimmer.d.ts +0 -38
  1028. package/dist/types/modes/theme/theme.d.ts +0 -275
  1029. package/dist/types/modes/tmux-scroll.d.ts +0 -18
  1030. package/dist/types/modes/types.d.ts +0 -318
  1031. package/dist/types/modes/utils/abort-message.d.ts +0 -4
  1032. package/dist/types/modes/utils/context-usage.d.ts +0 -36
  1033. package/dist/types/modes/utils/hotkeys-markdown.d.ts +0 -5
  1034. package/dist/types/modes/utils/injected-user-submission.d.ts +0 -52
  1035. package/dist/types/modes/utils/irc-message.d.ts +0 -38
  1036. package/dist/types/modes/utils/keybinding-matchers.d.ts +0 -10
  1037. package/dist/types/modes/utils/terminal-bell.d.ts +0 -3
  1038. package/dist/types/modes/utils/tools-markdown.d.ts +0 -5
  1039. package/dist/types/modes/utils/ui-helpers.d.ts +0 -75
  1040. package/dist/types/notifications/attachment-registry.d.ts +0 -17
  1041. package/dist/types/notifications/chat-adapters.d.ts +0 -9
  1042. package/dist/types/notifications/config-commands.d.ts +0 -64
  1043. package/dist/types/notifications/config.d.ts +0 -132
  1044. package/dist/types/notifications/daemon-paths.d.ts +0 -17
  1045. package/dist/types/notifications/engine.d.ts +0 -59
  1046. package/dist/types/notifications/helpers.d.ts +0 -55
  1047. package/dist/types/notifications/html-format.d.ts +0 -75
  1048. package/dist/types/notifications/index.d.ts +0 -219
  1049. package/dist/types/notifications/lifecycle-commands.d.ts +0 -69
  1050. package/dist/types/notifications/lifecycle-control-runtime.d.ts +0 -107
  1051. package/dist/types/notifications/lifecycle-orchestrator.d.ts +0 -144
  1052. package/dist/types/notifications/managed-daemon.d.ts +0 -48
  1053. package/dist/types/notifications/notification-service.d.ts +0 -144
  1054. package/dist/types/notifications/operator-runtime.d.ts +0 -52
  1055. package/dist/types/notifications/rate-limit-pool.d.ts +0 -113
  1056. package/dist/types/notifications/recent-activity.d.ts +0 -39
  1057. package/dist/types/notifications/reply-sent-store.d.ts +0 -53
  1058. package/dist/types/notifications/rich-draft.d.ts +0 -68
  1059. package/dist/types/notifications/rich-render.d.ts +0 -90
  1060. package/dist/types/notifications/telegram-cli.d.ts +0 -19
  1061. package/dist/types/notifications/telegram-daemon-cli.d.ts +0 -28
  1062. package/dist/types/notifications/telegram-daemon-control.d.ts +0 -70
  1063. package/dist/types/notifications/telegram-daemon.d.ts +0 -558
  1064. package/dist/types/notifications/telegram-reference.d.ts +0 -136
  1065. package/dist/types/notifications/threaded-inbound.d.ts +0 -77
  1066. package/dist/types/notifications/threaded-render.d.ts +0 -88
  1067. package/dist/types/notifications/topic-registry.d.ts +0 -89
  1068. package/dist/types/plan-mode/approved-plan.d.ts +0 -49
  1069. package/dist/types/plan-mode/state.d.ts +0 -6
  1070. package/dist/types/registry/agent-registry.d.ts +0 -64
  1071. package/dist/types/reminders/star-reminder.d.ts +0 -115
  1072. package/dist/types/research-plan/index.d.ts +0 -1
  1073. package/dist/types/research-plan/ledger.d.ts +0 -33
  1074. package/dist/types/rlm/artifacts.d.ts +0 -9
  1075. package/dist/types/rlm/complete-research-tool.d.ts +0 -35
  1076. package/dist/types/rlm/data-context.d.ts +0 -6
  1077. package/dist/types/rlm/index.d.ts +0 -47
  1078. package/dist/types/rlm/notebook.d.ts +0 -12
  1079. package/dist/types/rlm/preset.d.ts +0 -23
  1080. package/dist/types/rlm/python-tool.d.ts +0 -16
  1081. package/dist/types/rlm/report.d.ts +0 -14
  1082. package/dist/types/rlm/types.d.ts +0 -37
  1083. package/dist/types/runtime/process-lifecycle.d.ts +0 -108
  1084. package/dist/types/runtime-api-key.d.ts +0 -7
  1085. package/dist/types/runtime-credential-selector.d.ts +0 -7
  1086. package/dist/types/runtime-mcp/client.d.ts +0 -74
  1087. package/dist/types/runtime-mcp/config-writer.d.ts +0 -89
  1088. package/dist/types/runtime-mcp/config.d.ts +0 -77
  1089. package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
  1090. package/dist/types/runtime-mcp/index.d.ts +0 -18
  1091. package/dist/types/runtime-mcp/json-rpc.d.ts +0 -22
  1092. package/dist/types/runtime-mcp/loader.d.ts +0 -45
  1093. package/dist/types/runtime-mcp/manager.d.ts +0 -195
  1094. package/dist/types/runtime-mcp/oauth-discovery.d.ts +0 -40
  1095. package/dist/types/runtime-mcp/oauth-flow.d.ts +0 -59
  1096. package/dist/types/runtime-mcp/render.d.ts +0 -25
  1097. package/dist/types/runtime-mcp/smithery-auth.d.ts +0 -16
  1098. package/dist/types/runtime-mcp/smithery-connect.d.ts +0 -38
  1099. package/dist/types/runtime-mcp/smithery-registry.d.ts +0 -51
  1100. package/dist/types/runtime-mcp/tool-bridge.d.ts +0 -86
  1101. package/dist/types/runtime-mcp/tool-cache.d.ts +0 -8
  1102. package/dist/types/runtime-mcp/transports/http.d.ts +0 -36
  1103. package/dist/types/runtime-mcp/transports/index.d.ts +0 -5
  1104. package/dist/types/runtime-mcp/transports/stdio.d.ts +0 -29
  1105. package/dist/types/runtime-mcp/types.d.ts +0 -349
  1106. package/dist/types/sdk.d.ts +0 -256
  1107. package/dist/types/secrets/index.d.ts +0 -9
  1108. package/dist/types/secrets/obfuscator.d.ts +0 -23
  1109. package/dist/types/secrets/regex.d.ts +0 -2
  1110. package/dist/types/session/agent-session.d.ts +0 -1238
  1111. package/dist/types/session/agent-storage.d.ts +0 -101
  1112. package/dist/types/session/artifacts.d.ts +0 -64
  1113. package/dist/types/session/auth-broker-config.d.ts +0 -13
  1114. package/dist/types/session/auth-storage.d.ts +0 -6
  1115. package/dist/types/session/blob-store.d.ts +0 -160
  1116. package/dist/types/session/cache-economics.d.ts +0 -79
  1117. package/dist/types/session/client-bridge.d.ts +0 -88
  1118. package/dist/types/session/context-estimation.d.ts +0 -31
  1119. package/dist/types/session/contribution-prep.d.ts +0 -47
  1120. package/dist/types/session/file-mention-pruning.d.ts +0 -8
  1121. package/dist/types/session/history-storage.d.ts +0 -16
  1122. package/dist/types/session/messages.d.ts +0 -169
  1123. package/dist/types/session/provider-safety-stop.d.ts +0 -5
  1124. package/dist/types/session/session-dump-format.d.ts +0 -22
  1125. package/dist/types/session/session-manager.d.ts +0 -781
  1126. package/dist/types/session/session-storage.d.ts +0 -230
  1127. package/dist/types/session/streaming-output.d.ts +0 -209
  1128. package/dist/types/session/tool-choice-queue.d.ts +0 -84
  1129. package/dist/types/session/yield-queue.d.ts +0 -24
  1130. package/dist/types/setup/credential-auto-import.d.ts +0 -63
  1131. package/dist/types/setup/credential-import.d.ts +0 -82
  1132. package/dist/types/setup/hermes-setup.d.ts +0 -78
  1133. package/dist/types/setup/host-plugin-setup.d.ts +0 -39
  1134. package/dist/types/setup/model-onboarding-guidance.d.ts +0 -9
  1135. package/dist/types/setup/provider-onboarding.d.ts +0 -52
  1136. package/dist/types/skc-runtime/cli-write-receipt.d.ts +0 -24
  1137. package/dist/types/skc-runtime/deep-interview-ambiguity.d.ts +0 -39
  1138. package/dist/types/skc-runtime/deep-interview-recorder.d.ts +0 -114
  1139. package/dist/types/skc-runtime/deep-interview-runtime.d.ts +0 -36
  1140. package/dist/types/skc-runtime/deep-interview-state.d.ts +0 -127
  1141. package/dist/types/skc-runtime/gc-render.d.ts +0 -6
  1142. package/dist/types/skc-runtime/gc-runtime.d.ts +0 -134
  1143. package/dist/types/skc-runtime/goal-mode-request.d.ts +0 -53
  1144. package/dist/types/skc-runtime/launch-tmux.d.ts +0 -78
  1145. package/dist/types/skc-runtime/launch-worktree.d.ts +0 -46
  1146. package/dist/types/skc-runtime/ledger-event-renderer.d.ts +0 -68
  1147. package/dist/types/skc-runtime/psmux-detect.d.ts +0 -78
  1148. package/dist/types/skc-runtime/ralplan-runtime.d.ts +0 -26
  1149. package/dist/types/skc-runtime/restricted-role-agent-bash.d.ts +0 -3
  1150. package/dist/types/skc-runtime/session-layout.d.ts +0 -59
  1151. package/dist/types/skc-runtime/session-resolution.d.ts +0 -47
  1152. package/dist/types/skc-runtime/session-state-sidecar.d.ts +0 -70
  1153. package/dist/types/skc-runtime/state-graph.d.ts +0 -4
  1154. package/dist/types/skc-runtime/state-migrations.d.ts +0 -33
  1155. package/dist/types/skc-runtime/state-renderer.d.ts +0 -70
  1156. package/dist/types/skc-runtime/state-runtime.d.ts +0 -38
  1157. package/dist/types/skc-runtime/state-schema.d.ts +0 -319
  1158. package/dist/types/skc-runtime/state-validation.d.ts +0 -6
  1159. package/dist/types/skc-runtime/state-writer.d.ts +0 -244
  1160. package/dist/types/skc-runtime/team-gc.d.ts +0 -7
  1161. package/dist/types/skc-runtime/team-runtime.d.ts +0 -355
  1162. package/dist/types/skc-runtime/tmux-common.d.ts +0 -111
  1163. package/dist/types/skc-runtime/tmux-gc.d.ts +0 -7
  1164. package/dist/types/skc-runtime/tmux-owner-isolation-cli.d.ts +0 -5
  1165. package/dist/types/skc-runtime/tmux-owner-isolation.d.ts +0 -309
  1166. package/dist/types/skc-runtime/tmux-sessions.d.ts +0 -94
  1167. package/dist/types/skc-runtime/ultragoal-guard.d.ts +0 -93
  1168. package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +0 -42
  1169. package/dist/types/skc-runtime/ultragoal-runtime.d.ts +0 -410
  1170. package/dist/types/skc-runtime/workflow-command-ref.d.ts +0 -43
  1171. package/dist/types/skc-runtime/workflow-manifest.d.ts +0 -54
  1172. package/dist/types/skill-state/active-state.d.ts +0 -126
  1173. package/dist/types/skill-state/canonical-skills.d.ts +0 -3
  1174. package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +0 -38
  1175. package/dist/types/skill-state/initial-phase.d.ts +0 -12
  1176. package/dist/types/skill-state/workflow-hud.d.ts +0 -83
  1177. package/dist/types/skill-state/workflow-state-contract.d.ts +0 -57
  1178. package/dist/types/skill-state/workflow-state-version.d.ts +0 -3
  1179. package/dist/types/slash-commands/acp-builtins.d.ts +0 -18
  1180. package/dist/types/slash-commands/builtin-registry.d.ts +0 -24
  1181. package/dist/types/slash-commands/helpers/context-report.d.ts +0 -7
  1182. package/dist/types/slash-commands/helpers/fast-status-report.d.ts +0 -82
  1183. package/dist/types/slash-commands/helpers/format.d.ts +0 -10
  1184. package/dist/types/slash-commands/helpers/mcp.d.ts +0 -3
  1185. package/dist/types/slash-commands/helpers/parse.d.ts +0 -33
  1186. package/dist/types/slash-commands/helpers/ssh.d.ts +0 -3
  1187. package/dist/types/slash-commands/helpers/todo.d.ts +0 -3
  1188. package/dist/types/slash-commands/helpers/usage-report.d.ts +0 -7
  1189. package/dist/types/slash-commands/types.d.ts +0 -120
  1190. package/dist/types/ssh/config-writer.d.ts +0 -49
  1191. package/dist/types/ssh/connection-manager.d.ts +0 -33
  1192. package/dist/types/ssh/ssh-executor.d.ts +0 -37
  1193. package/dist/types/ssh/sshfs-mount.d.ts +0 -6
  1194. package/dist/types/ssh/utils.d.ts +0 -2
  1195. package/dist/types/stt/downloader.d.ts +0 -9
  1196. package/dist/types/stt/index.d.ts +0 -3
  1197. package/dist/types/stt/recorder.d.ts +0 -13
  1198. package/dist/types/stt/setup.d.ts +0 -18
  1199. package/dist/types/stt/stt-controller.d.ts +0 -16
  1200. package/dist/types/stt/transcriber.d.ts +0 -16
  1201. package/dist/types/system-prompt.d.ts +0 -118
  1202. package/dist/types/task/agents.d.ts +0 -28
  1203. package/dist/types/task/commands.d.ts +0 -35
  1204. package/dist/types/task/discovery.d.ts +0 -19
  1205. package/dist/types/task/executor.d.ts +0 -127
  1206. package/dist/types/task/fork-context-advisory.d.ts +0 -13
  1207. package/dist/types/task/fork-context-budget.d.ts +0 -7
  1208. package/dist/types/task/id.d.ts +0 -7
  1209. package/dist/types/task/index.d.ts +0 -43
  1210. package/dist/types/task/name-generator.d.ts +0 -16
  1211. package/dist/types/task/output-manager.d.ts +0 -36
  1212. package/dist/types/task/parallel.d.ts +0 -34
  1213. package/dist/types/task/receipt.d.ts +0 -89
  1214. package/dist/types/task/render.d.ts +0 -28
  1215. package/dist/types/task/roi-reconciliation.d.ts +0 -27
  1216. package/dist/types/task/simple-mode.d.ts +0 -8
  1217. package/dist/types/task/skc-command.d.ts +0 -7
  1218. package/dist/types/task/spawn-gate.d.ts +0 -29
  1219. package/dist/types/task/subprocess-tool-registry.d.ts +0 -72
  1220. package/dist/types/task/token-log.d.ts +0 -30
  1221. package/dist/types/task/token-log.test.d.ts +0 -1
  1222. package/dist/types/task/types.d.ts +0 -516
  1223. package/dist/types/task/worktree.d.ts +0 -94
  1224. package/dist/types/thinking-metadata.d.ts +0 -16
  1225. package/dist/types/thinking.d.ts +0 -22
  1226. package/dist/types/tool-discovery/tool-index.d.ts +0 -112
  1227. package/dist/types/tools/archive-reader.d.ts +0 -40
  1228. package/dist/types/tools/ask-answer-registry.d.ts +0 -18
  1229. package/dist/types/tools/ask.d.ts +0 -123
  1230. package/dist/types/tools/ast-edit.d.ts +0 -77
  1231. package/dist/types/tools/ast-grep.d.ts +0 -69
  1232. package/dist/types/tools/auto-generated-guard.d.ts +0 -17
  1233. package/dist/types/tools/bash-allowed-prefixes.d.ts +0 -10
  1234. package/dist/types/tools/bash-command-fixup.d.ts +0 -11
  1235. package/dist/types/tools/bash-interactive.d.ts +0 -16
  1236. package/dist/types/tools/bash-interceptor.d.ts +0 -24
  1237. package/dist/types/tools/bash-pty-selection.d.ts +0 -7
  1238. package/dist/types/tools/bash-skill-urls.d.ts +0 -31
  1239. package/dist/types/tools/bash.d.ts +0 -157
  1240. package/dist/types/tools/bisect.d.ts +0 -81
  1241. package/dist/types/tools/browser/actions.d.ts +0 -54
  1242. package/dist/types/tools/browser/attach.d.ts +0 -50
  1243. package/dist/types/tools/browser/launch.d.ts +0 -62
  1244. package/dist/types/tools/browser/readable.d.ts +0 -17
  1245. package/dist/types/tools/browser/registry.d.ts +0 -57
  1246. package/dist/types/tools/browser/render.d.ts +0 -53
  1247. package/dist/types/tools/browser/tab-protocol.d.ts +0 -144
  1248. package/dist/types/tools/browser/tab-supervisor.d.ts +0 -109
  1249. package/dist/types/tools/browser/tab-worker-entry.d.ts +0 -1
  1250. package/dist/types/tools/browser/tab-worker.d.ts +0 -19
  1251. package/dist/types/tools/browser.d.ts +0 -211
  1252. package/dist/types/tools/calculator.d.ts +0 -76
  1253. package/dist/types/tools/checkpoint.d.ts +0 -63
  1254. package/dist/types/tools/composer-bash-policy.d.ts +0 -14
  1255. package/dist/types/tools/computer/render.d.ts +0 -17
  1256. package/dist/types/tools/computer-gc.d.ts +0 -23
  1257. package/dist/types/tools/computer.d.ts +0 -465
  1258. package/dist/types/tools/conflict-detect.d.ts +0 -205
  1259. package/dist/types/tools/context.d.ts +0 -19
  1260. package/dist/types/tools/cron.d.ts +0 -91
  1261. package/dist/types/tools/debug.d.ts +0 -209
  1262. package/dist/types/tools/eval.d.ts +0 -108
  1263. package/dist/types/tools/fetch.d.ts +0 -84
  1264. package/dist/types/tools/file-recorder.d.ts +0 -13
  1265. package/dist/types/tools/find.d.ts +0 -95
  1266. package/dist/types/tools/fs-cache-invalidation.d.ts +0 -15
  1267. package/dist/types/tools/gh-format.d.ts +0 -6
  1268. package/dist/types/tools/gh-renderer.d.ts +0 -25
  1269. package/dist/types/tools/gh.d.ts +0 -356
  1270. package/dist/types/tools/github-cache.d.ts +0 -103
  1271. package/dist/types/tools/grouped-file-output.d.ts +0 -36
  1272. package/dist/types/tools/hindsight-recall.d.ts +0 -21
  1273. package/dist/types/tools/hindsight-reflect.d.ts +0 -23
  1274. package/dist/types/tools/hindsight-retain.d.ts +0 -27
  1275. package/dist/types/tools/image-gen.d.ts +0 -79
  1276. package/dist/types/tools/index.d.ts +0 -371
  1277. package/dist/types/tools/irc.d.ts +0 -79
  1278. package/dist/types/tools/job.d.ts +0 -78
  1279. package/dist/types/tools/json-tree.d.ts +0 -23
  1280. package/dist/types/tools/jtd-to-json-schema.d.ts +0 -29
  1281. package/dist/types/tools/jtd-to-typescript.d.ts +0 -26
  1282. package/dist/types/tools/jtd-utils.d.ts +0 -42
  1283. package/dist/types/tools/list-limit.d.ts +0 -12
  1284. package/dist/types/tools/match-line-format.d.ts +0 -11
  1285. package/dist/types/tools/monitor.d.ts +0 -54
  1286. package/dist/types/tools/output-meta.d.ts +0 -204
  1287. package/dist/types/tools/path-utils.d.ts +0 -147
  1288. package/dist/types/tools/plan-mode-guard.d.ts +0 -18
  1289. package/dist/types/tools/read.d.ts +0 -85
  1290. package/dist/types/tools/recipe/index.d.ts +0 -45
  1291. package/dist/types/tools/recipe/render.d.ts +0 -36
  1292. package/dist/types/tools/recipe/runner.d.ts +0 -60
  1293. package/dist/types/tools/recipe/runners/cargo.d.ts +0 -16
  1294. package/dist/types/tools/recipe/runners/index.d.ts +0 -2
  1295. package/dist/types/tools/recipe/runners/just.d.ts +0 -2
  1296. package/dist/types/tools/recipe/runners/make.d.ts +0 -2
  1297. package/dist/types/tools/recipe/runners/pkg.d.ts +0 -2
  1298. package/dist/types/tools/recipe/runners/task.d.ts +0 -2
  1299. package/dist/types/tools/render-mermaid.d.ts +0 -37
  1300. package/dist/types/tools/render-utils.d.ts +0 -158
  1301. package/dist/types/tools/renderers.d.ts +0 -26
  1302. package/dist/types/tools/resolve.d.ts +0 -80
  1303. package/dist/types/tools/resource-gc.d.ts +0 -54
  1304. package/dist/types/tools/review.d.ts +0 -63
  1305. package/dist/types/tools/search-tool-bm25.d.ts +0 -65
  1306. package/dist/types/tools/search.d.ts +0 -93
  1307. package/dist/types/tools/skill-discovery.d.ts +0 -40
  1308. package/dist/types/tools/skill.d.ts +0 -48
  1309. package/dist/types/tools/sqlite-reader.d.ts +0 -94
  1310. package/dist/types/tools/ssh.d.ts +0 -67
  1311. package/dist/types/tools/subagent-render.d.ts +0 -31
  1312. package/dist/types/tools/subagent.d.ts +0 -117
  1313. package/dist/types/tools/telegram-send.d.ts +0 -39
  1314. package/dist/types/tools/todo-write.d.ts +0 -120
  1315. package/dist/types/tools/tool-errors.d.ts +0 -33
  1316. package/dist/types/tools/tool-result.d.ts +0 -30
  1317. package/dist/types/tools/tool-timeouts.d.ts +0 -56
  1318. package/dist/types/tools/ultragoal-ask-guard.d.ts +0 -12
  1319. package/dist/types/tools/vim.d.ts +0 -58
  1320. package/dist/types/tools/write.d.ts +0 -59
  1321. package/dist/types/tools/yield.d.ts +0 -25
  1322. package/dist/types/tui/code-cell.d.ts +0 -32
  1323. package/dist/types/tui/file-list.d.ts +0 -22
  1324. package/dist/types/tui/hyperlink.d.ts +0 -42
  1325. package/dist/types/tui/index.d.ts +0 -11
  1326. package/dist/types/tui/output-block.d.ts +0 -28
  1327. package/dist/types/tui/status-line.d.ts +0 -18
  1328. package/dist/types/tui/tree-list.d.ts +0 -19
  1329. package/dist/types/tui/types.d.ts +0 -13
  1330. package/dist/types/tui/utils.d.ts +0 -36
  1331. package/dist/types/utils/changelog.d.ts +0 -37
  1332. package/dist/types/utils/clipboard.d.ts +0 -22
  1333. package/dist/types/utils/cmux-workspace.d.ts +0 -52
  1334. package/dist/types/utils/command-args.d.ts +0 -9
  1335. package/dist/types/utils/commit-message-generator.d.ts +0 -7
  1336. package/dist/types/utils/edit-mode.d.ts +0 -13
  1337. package/dist/types/utils/event-bus.d.ts +0 -6
  1338. package/dist/types/utils/external-editor.d.ts +0 -19
  1339. package/dist/types/utils/file-display-mode.d.ts +0 -27
  1340. package/dist/types/utils/file-mentions.d.ts +0 -25
  1341. package/dist/types/utils/git.d.ts +0 -393
  1342. package/dist/types/utils/image-loading.d.ts +0 -26
  1343. package/dist/types/utils/image-resize.d.ts +0 -39
  1344. package/dist/types/utils/lang-from-path.d.ts +0 -8
  1345. package/dist/types/utils/linkedom.d.ts +0 -4
  1346. package/dist/types/utils/markit.d.ts +0 -7
  1347. package/dist/types/utils/open.d.ts +0 -2
  1348. package/dist/types/utils/pasted-image-path.d.ts +0 -32
  1349. package/dist/types/utils/session-color.d.ts +0 -10
  1350. package/dist/types/utils/shell-snapshot.d.ts +0 -5
  1351. package/dist/types/utils/sixel.d.ts +0 -21
  1352. package/dist/types/utils/title-generator.d.ts +0 -31
  1353. package/dist/types/utils/tool-choice.d.ts +0 -20
  1354. package/dist/types/utils/tools-manager.d.ts +0 -9
  1355. package/dist/types/vim/buffer.d.ts +0 -41
  1356. package/dist/types/vim/commands.d.ts +0 -6
  1357. package/dist/types/vim/engine.d.ts +0 -47
  1358. package/dist/types/vim/parser.d.ts +0 -3
  1359. package/dist/types/vim/render.d.ts +0 -25
  1360. package/dist/types/vim/types.d.ts +0 -182
  1361. package/dist/types/web/insane/bridge.d.ts +0 -103
  1362. package/dist/types/web/insane/url-guard.d.ts +0 -25
  1363. package/dist/types/web/kagi.d.ts +0 -23
  1364. package/dist/types/web/parallel.d.ts +0 -58
  1365. package/dist/types/web/scrapers/artifacthub.d.ts +0 -6
  1366. package/dist/types/web/scrapers/arxiv.d.ts +0 -5
  1367. package/dist/types/web/scrapers/aur.d.ts +0 -5
  1368. package/dist/types/web/scrapers/biorxiv.d.ts +0 -5
  1369. package/dist/types/web/scrapers/bluesky.d.ts +0 -5
  1370. package/dist/types/web/scrapers/brew.d.ts +0 -5
  1371. package/dist/types/web/scrapers/cheatsh.d.ts +0 -8
  1372. package/dist/types/web/scrapers/chocolatey.d.ts +0 -5
  1373. package/dist/types/web/scrapers/choosealicense.d.ts +0 -2
  1374. package/dist/types/web/scrapers/cisa-kev.d.ts +0 -5
  1375. package/dist/types/web/scrapers/clojars.d.ts +0 -5
  1376. package/dist/types/web/scrapers/coingecko.d.ts +0 -5
  1377. package/dist/types/web/scrapers/crates-io.d.ts +0 -5
  1378. package/dist/types/web/scrapers/crossref.d.ts +0 -2
  1379. package/dist/types/web/scrapers/devto.d.ts +0 -5
  1380. package/dist/types/web/scrapers/discogs.d.ts +0 -8
  1381. package/dist/types/web/scrapers/discourse.d.ts +0 -5
  1382. package/dist/types/web/scrapers/dockerhub.d.ts +0 -5
  1383. package/dist/types/web/scrapers/docs-rs.d.ts +0 -2
  1384. package/dist/types/web/scrapers/fdroid.d.ts +0 -5
  1385. package/dist/types/web/scrapers/firefox-addons.d.ts +0 -2
  1386. package/dist/types/web/scrapers/flathub.d.ts +0 -2
  1387. package/dist/types/web/scrapers/github-gist.d.ts +0 -5
  1388. package/dist/types/web/scrapers/github.d.ts +0 -12
  1389. package/dist/types/web/scrapers/gitlab.d.ts +0 -5
  1390. package/dist/types/web/scrapers/go-pkg.d.ts +0 -5
  1391. package/dist/types/web/scrapers/hackage.d.ts +0 -5
  1392. package/dist/types/web/scrapers/hackernews.d.ts +0 -2
  1393. package/dist/types/web/scrapers/hex.d.ts +0 -5
  1394. package/dist/types/web/scrapers/huggingface.d.ts +0 -2
  1395. package/dist/types/web/scrapers/iacr.d.ts +0 -5
  1396. package/dist/types/web/scrapers/index.d.ts +0 -84
  1397. package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +0 -2
  1398. package/dist/types/web/scrapers/lemmy.d.ts +0 -2
  1399. package/dist/types/web/scrapers/lobsters.d.ts +0 -5
  1400. package/dist/types/web/scrapers/mastodon.d.ts +0 -5
  1401. package/dist/types/web/scrapers/maven.d.ts +0 -6
  1402. package/dist/types/web/scrapers/mdn.d.ts +0 -2
  1403. package/dist/types/web/scrapers/metacpan.d.ts +0 -5
  1404. package/dist/types/web/scrapers/musicbrainz.d.ts +0 -5
  1405. package/dist/types/web/scrapers/npm.d.ts +0 -5
  1406. package/dist/types/web/scrapers/nuget.d.ts +0 -5
  1407. package/dist/types/web/scrapers/nvd.d.ts +0 -5
  1408. package/dist/types/web/scrapers/ollama.d.ts +0 -2
  1409. package/dist/types/web/scrapers/open-vsx.d.ts +0 -5
  1410. package/dist/types/web/scrapers/opencorporates.d.ts +0 -5
  1411. package/dist/types/web/scrapers/openlibrary.d.ts +0 -5
  1412. package/dist/types/web/scrapers/orcid.d.ts +0 -5
  1413. package/dist/types/web/scrapers/osv.d.ts +0 -5
  1414. package/dist/types/web/scrapers/packagist.d.ts +0 -5
  1415. package/dist/types/web/scrapers/pub-dev.d.ts +0 -5
  1416. package/dist/types/web/scrapers/pubmed.d.ts +0 -5
  1417. package/dist/types/web/scrapers/pypi.d.ts +0 -5
  1418. package/dist/types/web/scrapers/rawg.d.ts +0 -2
  1419. package/dist/types/web/scrapers/readthedocs.d.ts +0 -2
  1420. package/dist/types/web/scrapers/reddit.d.ts +0 -5
  1421. package/dist/types/web/scrapers/repology.d.ts +0 -5
  1422. package/dist/types/web/scrapers/rfc.d.ts +0 -5
  1423. package/dist/types/web/scrapers/rubygems.d.ts +0 -5
  1424. package/dist/types/web/scrapers/searchcode.d.ts +0 -2
  1425. package/dist/types/web/scrapers/sec-edgar.d.ts +0 -5
  1426. package/dist/types/web/scrapers/semantic-scholar.d.ts +0 -2
  1427. package/dist/types/web/scrapers/snapcraft.d.ts +0 -2
  1428. package/dist/types/web/scrapers/sourcegraph.d.ts +0 -2
  1429. package/dist/types/web/scrapers/spdx.d.ts +0 -5
  1430. package/dist/types/web/scrapers/spotify.d.ts +0 -8
  1431. package/dist/types/web/scrapers/stackoverflow.d.ts +0 -6
  1432. package/dist/types/web/scrapers/terraform.d.ts +0 -5
  1433. package/dist/types/web/scrapers/tldr.d.ts +0 -7
  1434. package/dist/types/web/scrapers/twitter.d.ts +0 -5
  1435. package/dist/types/web/scrapers/types.d.ts +0 -83
  1436. package/dist/types/web/scrapers/utils.d.ts +0 -32
  1437. package/dist/types/web/scrapers/vimeo.d.ts +0 -5
  1438. package/dist/types/web/scrapers/vscode-marketplace.d.ts +0 -5
  1439. package/dist/types/web/scrapers/w3c.d.ts +0 -2
  1440. package/dist/types/web/scrapers/wikidata.d.ts +0 -5
  1441. package/dist/types/web/scrapers/wikipedia.d.ts +0 -5
  1442. package/dist/types/web/scrapers/youtube.d.ts +0 -13
  1443. package/dist/types/web/search/index.d.ts +0 -118
  1444. package/dist/types/web/search/provider.d.ts +0 -55
  1445. package/dist/types/web/search/providers/anthropic.d.ts +0 -32
  1446. package/dist/types/web/search/providers/base.d.ts +0 -90
  1447. package/dist/types/web/search/providers/brave.d.ts +0 -27
  1448. package/dist/types/web/search/providers/codex.d.ts +0 -35
  1449. package/dist/types/web/search/providers/duckduckgo.d.ts +0 -57
  1450. package/dist/types/web/search/providers/exa.d.ts +0 -52
  1451. package/dist/types/web/search/providers/gemini.d.ts +0 -57
  1452. package/dist/types/web/search/providers/insane.d.ts +0 -53
  1453. package/dist/types/web/search/providers/jina.d.ts +0 -26
  1454. package/dist/types/web/search/providers/kagi.d.ts +0 -24
  1455. package/dist/types/web/search/providers/kimi.d.ts +0 -27
  1456. package/dist/types/web/search/providers/openai-compatible.d.ts +0 -9
  1457. package/dist/types/web/search/providers/parallel.d.ts +0 -15
  1458. package/dist/types/web/search/providers/perplexity.d.ts +0 -38
  1459. package/dist/types/web/search/providers/searxng.d.ts +0 -44
  1460. package/dist/types/web/search/providers/synthetic.d.ts +0 -21
  1461. package/dist/types/web/search/providers/tavily.d.ts +0 -29
  1462. package/dist/types/web/search/providers/text-citations.d.ts +0 -23
  1463. package/dist/types/web/search/providers/utils.d.ts +0 -88
  1464. package/dist/types/web/search/providers/xai.d.ts +0 -64
  1465. package/dist/types/web/search/providers/zai.d.ts +0 -28
  1466. package/dist/types/web/search/render.d.ts +0 -36
  1467. package/dist/types/web/search/types.d.ts +0 -372
  1468. package/dist/types/web/search/utils.d.ts +0 -4
  1469. package/dist/types/workflow/workflow-intent-diff.d.ts +0 -25
  1470. package/dist/types/workflow/workflow-intent-report-consumer.d.ts +0 -50
  1471. package/dist/types/workflow/workflow-intent-report-schema.d.ts +0 -2
  1472. package/dist/types/workflow/workflow-intent-report.d.ts +0 -48
  1473. package/dist/types/workspace-tree.d.ts +0 -42
  1474. package/src/sdk.ts +0 -2623
@@ -0,0 +1,1174 @@
1
+ /**
2
+ * Shared notification service contract.
3
+ *
4
+ * Transport-agnostic, secret-safe operations consumed by BOTH the `skc notify`
5
+ * CLI and the cross-mode `/notify` slash command (TUI + ACP). Every result is
6
+ * free of raw secrets: bot tokens are only ever shown masked (`maskToken`) or
7
+ * as a non-reversible fingerprint (`tokenFingerprint`).
8
+ *
9
+ * Daemon-ownership protection: `recoverNotifications` only ever removes
10
+ * artifacts belonging to a DEAD owner (dead-PID / explicitly-stale). It never
11
+ * touches a live owner's lock/state and never kills a process.
12
+ */
13
+ import * as crypto from "node:crypto";
14
+ import type { WriteFileOptions } from "node:fs";
15
+ import * as fsSync from "node:fs";
16
+ import * as fsPromises from "node:fs/promises";
17
+ import * as path from "node:path";
18
+ import * as native from "@sayknow-cli/natives";
19
+ import type { Settings } from "../../config/settings";
20
+ import { isProcessIncarnation, processIncarnation } from "../broker/process-incarnation";
21
+ import {
22
+ getNotificationConfig,
23
+ isDiscordConfigured,
24
+ isGloballyConfigured,
25
+ isTelegramConfigured,
26
+ maskToken,
27
+ type NotificationConfig,
28
+ tokenFingerprint,
29
+ } from "./config";
30
+ import { type DaemonPaths, daemonPaths, HEARTBEAT_TTL_MS } from "./daemon-paths";
31
+ import { DAEMON_GENERATION } from "./telegram-daemon-contract";
32
+
33
+ const DEFAULT_API_BASE = "https://api.telegram.org";
34
+
35
+ /**
36
+ * Telegram bot-token shape: `<digits>:<base64url-ish>`. Used to redact a
37
+ * token-shaped substring from a diagnostic even when the exact configured token
38
+ * is not known to the caller (e.g. a token echoed inside a fetch error URL).
39
+ */
40
+ const TELEGRAM_TOKEN_PATTERN = /\d{6,}:[A-Za-z0-9_-]{20,}/g;
41
+
42
+ /**
43
+ * Strip secrets from a human-facing diagnostic string. Redacts the configured
44
+ * bot token (exact match) and any token-shaped substring so health/test details
45
+ * can never leak a credential regardless of where the string originated.
46
+ */
47
+ export function sanitizeDiagnostic(text: string, token?: string): string {
48
+ let out = text;
49
+ const trimmed = token?.trim();
50
+ if (trimmed) out = out.split(trimmed).join("<redacted>");
51
+ return out.replace(TELEGRAM_TOKEN_PATTERN, "<redacted>");
52
+ }
53
+
54
+ /** Identity evidence required to remove precisely the endpoint that was inspected. */
55
+ export interface NotificationEndpointFileIdentity {
56
+ dev: bigint;
57
+ ino: bigint;
58
+ size: bigint;
59
+ mtimeNs: bigint;
60
+ sha256: string;
61
+ }
62
+
63
+ export interface NotificationEndpointFile {
64
+ bytes: Buffer;
65
+ identity: NotificationEndpointFileIdentity;
66
+ }
67
+
68
+ export interface NotificationExactUnlinkResult {
69
+ ok: boolean;
70
+ code?: string;
71
+ detachedPath?: string;
72
+ /** A live publisher successor retained after an exact-unlink race. */
73
+ retainedSuccessorPath?: string;
74
+ /** An internal exchange placeholder whose verified cleanup failed. */
75
+ retainedPlaceholderPath?: string;
76
+ /** A cleanup entry whose identity could not be verified after a race. */
77
+ retainedUnknownPath?: string;
78
+ }
79
+
80
+ /** Read one regular file together with the identity required for exact removal. */
81
+ export async function readNotificationEndpointFile(file: string): Promise<NotificationEndpointFile> {
82
+ const before = await fsPromises.lstat(file, { bigint: true });
83
+ if (!before.isFile() || before.isSymbolicLink()) throw new Error("Endpoint is not a regular file");
84
+ const noFollow = fsSync.constants.O_NOFOLLOW;
85
+ const handle = await fsPromises.open(file, fsSync.constants.O_RDONLY | (noFollow ?? 0));
86
+ try {
87
+ const opened = await handle.stat({ bigint: true });
88
+ if (!opened.isFile() || !sameEndpointFileMetadata(before, opened))
89
+ throw new Error("Endpoint changed before it was opened");
90
+ const bytes = await handle.readFile();
91
+ const after = await handle.stat({ bigint: true });
92
+ const pathname = await fsPromises.lstat(file, { bigint: true });
93
+ if (
94
+ !after.isFile() ||
95
+ !pathname.isFile() ||
96
+ pathname.isSymbolicLink() ||
97
+ !sameEndpointFileMetadata(opened, after) ||
98
+ !sameEndpointFileMetadata(opened, pathname)
99
+ )
100
+ throw new Error("Endpoint changed while it was read");
101
+ return {
102
+ bytes,
103
+ identity: {
104
+ dev: opened.dev,
105
+ ino: opened.ino,
106
+ size: opened.size,
107
+ mtimeNs: opened.mtimeNs,
108
+ sha256: crypto.createHash("sha256").update(bytes).digest("hex"),
109
+ },
110
+ };
111
+ } finally {
112
+ await handle.close();
113
+ }
114
+ }
115
+ /** Bump when the native exact-deletion identity contract changes. */
116
+ export const NATIVE_PATH_IDENTITY_CONTRACT_VERSION = 1;
117
+
118
+ export function exactUnlinkNotificationFile(
119
+ file: string,
120
+ identity: NotificationEndpointFileIdentity,
121
+ quarantineName: string,
122
+ ): NotificationExactUnlinkResult {
123
+ const result = native.exactUnlink(file, { ...identity, quarantineName });
124
+ return {
125
+ ok: result.ok,
126
+ code: result.code,
127
+ detachedPath: result.detachedPath,
128
+ retainedSuccessorPath: result.retainedSuccessorPath,
129
+ retainedPlaceholderPath: result.retainedPlaceholderPath,
130
+ retainedUnknownPath: result.retainedUnknownPath,
131
+ };
132
+ }
133
+
134
+ /** Minimal filesystem surface the service needs; injectable for tests. */
135
+ export interface NotificationServiceFs {
136
+ readdir(dir: string): Promise<string[]>;
137
+ readFile(file: string, encoding: "utf8"): Promise<string>;
138
+ readEndpointFile(file: string): Promise<NotificationEndpointFile>;
139
+ exactUnlink(file: string, identity: NotificationEndpointFileIdentity): Promise<NotificationExactUnlinkResult>;
140
+ unlink(file: string): Promise<void>;
141
+ writeFile?(file: string, data: string, opts?: WriteFileOptions): Promise<void>;
142
+ stat?(file: string): Promise<{ mtimeMs: number }>;
143
+ }
144
+
145
+ const nodeServiceFs: NotificationServiceFs = {
146
+ readdir: dir => fsPromises.readdir(dir),
147
+ readFile: (file, encoding) => fsPromises.readFile(file, encoding),
148
+ readEndpointFile: readNotificationEndpointFile,
149
+ exactUnlink: async (file, identity) =>
150
+ exactUnlinkNotificationFile(file, identity, `.skc-delete-notification-endpoint-${crypto.randomUUID()}.json`),
151
+ unlink: file => fsPromises.unlink(file),
152
+ writeFile: (file, data, opts) => fsPromises.writeFile(file, data, opts),
153
+ stat: file => fsPromises.stat(file),
154
+ };
155
+
156
+ /** Injectable dependencies shared across service operations. */
157
+ export interface NotificationServiceDeps {
158
+ fs?: NotificationServiceFs;
159
+ now?: () => number;
160
+ pidAlive?: (pid: number) => boolean;
161
+ fetchImpl?: typeof fetch;
162
+ apiBase?: string;
163
+ }
164
+
165
+ function defaultPidAlive(pid: number): boolean {
166
+ try {
167
+ process.kill(pid, 0);
168
+ return true;
169
+ } catch (err) {
170
+ // EPERM means the process exists but is owned by another user: still alive.
171
+ return (err as NodeJS.ErrnoException).code === "EPERM";
172
+ }
173
+ }
174
+
175
+ function defaultStateRoot(): string {
176
+ return path.join(process.cwd(), ".skc", "state");
177
+ }
178
+
179
+ function endpointDir(stateRoot: string): string {
180
+ return path.join(stateRoot, "sdk");
181
+ }
182
+
183
+ // --- status -------------------------------------------------------------
184
+
185
+ export interface AdapterConfigView {
186
+ botTokenMasked: string;
187
+ channel: string | undefined;
188
+ configured: boolean;
189
+ }
190
+
191
+ export interface NotificationStatusReport {
192
+ enabled: boolean;
193
+ redact: boolean;
194
+ verbosity: "lean" | "verbose";
195
+ globallyConfigured: boolean;
196
+ telegram: AdapterConfigView & { tokenFingerprint: string | undefined };
197
+ discord: AdapterConfigView;
198
+ slack: AdapterConfigView;
199
+ }
200
+
201
+ function adapterConfigured(token: string | undefined, channel: string | undefined): boolean {
202
+ return Boolean(token?.trim()) && Boolean(channel?.trim());
203
+ }
204
+
205
+ /** Build a secret-safe structured status snapshot from settings. */
206
+ export function buildNotificationStatusReport(settings: Settings): NotificationStatusReport {
207
+ const cfg = getNotificationConfig(settings);
208
+ return {
209
+ enabled: cfg.enabled,
210
+ redact: cfg.redact,
211
+ verbosity: cfg.verbosity,
212
+ globallyConfigured: isGloballyConfigured(cfg),
213
+ telegram: {
214
+ botTokenMasked: maskToken(cfg.botToken),
215
+ channel: cfg.chatId,
216
+ configured: isTelegramConfigured(cfg),
217
+ tokenFingerprint: cfg.botToken?.trim() ? tokenFingerprint(cfg.botToken) : undefined,
218
+ },
219
+ discord: {
220
+ botTokenMasked: maskToken(cfg.discord.botToken),
221
+ channel: cfg.discord.parentChannelId,
222
+ configured: isDiscordConfigured(cfg),
223
+ },
224
+ slack: {
225
+ botTokenMasked: maskToken(cfg.slack.botToken),
226
+ channel: cfg.slack.channelId,
227
+ configured: adapterConfigured(cfg.slack.botToken, cfg.slack.channelId),
228
+ },
229
+ };
230
+ }
231
+
232
+ /** Render a status report as human-readable lines (no secrets). */
233
+ export function formatNotificationStatusReport(report: NotificationStatusReport): string {
234
+ const yesNo = (v: boolean): string => (v ? "yes" : "no");
235
+ return [
236
+ "Notifications",
237
+ ` enabled: ${report.enabled}`,
238
+ ` globally configured: ${yesNo(report.globallyConfigured)}`,
239
+ ` redact: ${report.redact}`,
240
+ ` verbosity: ${report.verbosity}`,
241
+ ` telegram.botToken: ${report.telegram.botTokenMasked}`,
242
+ ` telegram.chatId: ${report.telegram.channel ?? "(unset)"}`,
243
+ ` telegram.fingerprint: ${report.telegram.tokenFingerprint ?? "(unset)"}`,
244
+ ` telegram.configured: ${yesNo(report.telegram.configured)}`,
245
+ ` discord.botToken: ${report.discord.botTokenMasked}`,
246
+ ` discord.parentChannelId: ${report.discord.channel ?? "(unset)"}`,
247
+ ` slack.botToken: ${report.slack.botTokenMasked}`,
248
+ ` slack.channelId: ${report.slack.channel ?? "(unset)"}`,
249
+ ].join("\n");
250
+ }
251
+
252
+ // --- endpoint / daemon file readers -------------------------------------
253
+
254
+ interface EndpointView {
255
+ sessionId: string;
256
+ pid: number | undefined;
257
+ stale: boolean;
258
+ }
259
+
260
+ type EndpointFileRead =
261
+ | { kind: "endpoint"; view: EndpointView; identity: NotificationEndpointFileIdentity }
262
+ | { kind: "non-endpoint" }
263
+ | { kind: "unreadable" };
264
+
265
+ type EndpointLiveness = "live" | "dead" | "unknown";
266
+
267
+ /**
268
+ * Classify an endpoint using owner-proof semantics. An endpoint is only `dead`
269
+ * with positive proof: an explicit `stale` tombstone, or a recorded pid that is
270
+ * confirmed not alive. A PID-less endpoint is `unknown` (not provably dead) and
271
+ * must never be treated as dead — removing it could delete a live session's
272
+ * discovery file that simply omitted a pid.
273
+ */
274
+ function endpointLiveness(view: EndpointView, pidAlive: (pid: number) => boolean): EndpointLiveness {
275
+ if (view.stale) return "dead";
276
+ if (view.pid === undefined) return "unknown";
277
+ return pidAlive(view.pid) ? "live" : "dead";
278
+ }
279
+
280
+ function sameEndpointFileMetadata(
281
+ left: { dev: bigint; ino: bigint; size: bigint; mtimeNs: bigint },
282
+ right: { dev: bigint; ino: bigint; size: bigint; mtimeNs: bigint },
283
+ ): boolean {
284
+ return (
285
+ left.dev === right.dev && left.ino === right.ino && left.size === right.size && left.mtimeNs === right.mtimeNs
286
+ );
287
+ }
288
+
289
+ function isLifecycleArtifact(record: Record<string, unknown>): boolean {
290
+ const keys = Object.keys(record);
291
+ const isEffectMarker =
292
+ typeof record.pid === "number" &&
293
+ Number.isSafeInteger(record.pid) &&
294
+ record.pid > 0 &&
295
+ typeof record.effectMarker === "string" &&
296
+ record.effectMarker.length > 0 &&
297
+ typeof record.incarnation === "string" &&
298
+ record.incarnation.length > 0;
299
+ if (isEffectMarker && keys.length === 3) return true;
300
+ return (
301
+ isEffectMarker &&
302
+ typeof record.phase === "string" &&
303
+ typeof record.reason === "string" &&
304
+ typeof record.message === "string" &&
305
+ typeof record.rollback === "object" &&
306
+ record.rollback !== null
307
+ );
308
+ }
309
+ function isCanonicalLifecycleArtifactName(name: string): boolean {
310
+ return (
311
+ name.endsWith(".lifecycle.json") ||
312
+ name.endsWith(".lifecycle.ready.json") ||
313
+ /^.+\.lifecycle\.failure\.[A-Za-z0-9._-]{1,128}\.json$/.test(name)
314
+ );
315
+ }
316
+
317
+ function unreadableEndpointResult(file: string): EndpointFileRead {
318
+ return isCanonicalLifecycleArtifactName(path.basename(file)) ? { kind: "non-endpoint" } : { kind: "unreadable" };
319
+ }
320
+
321
+ async function readEndpointView(fs: NotificationServiceFs, file: string): Promise<EndpointFileRead> {
322
+ let endpoint: NotificationEndpointFile;
323
+ let raw: string;
324
+ try {
325
+ endpoint = await fs.readEndpointFile(file);
326
+ raw = endpoint.bytes.toString("utf8");
327
+ } catch {
328
+ return unreadableEndpointResult(file);
329
+ }
330
+ let parsed: unknown;
331
+ try {
332
+ parsed = JSON.parse(raw);
333
+ } catch {
334
+ return unreadableEndpointResult(file);
335
+ }
336
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return { kind: "non-endpoint" };
337
+ const rec = parsed as Record<string, unknown>;
338
+ if (isLifecycleArtifact(rec) || typeof rec.url !== "string" || typeof rec.token !== "string")
339
+ return { kind: "non-endpoint" };
340
+ return {
341
+ kind: "endpoint",
342
+ view: {
343
+ sessionId: typeof rec.sessionId === "string" ? rec.sessionId : path.basename(file, ".json"),
344
+ pid: safePositiveInteger(rec.pid),
345
+ stale: rec.stale === true,
346
+ },
347
+ identity: endpoint.identity,
348
+ };
349
+ }
350
+
351
+ interface NormalizedDaemonState {
352
+ pid: number;
353
+ ownerId: string;
354
+ tokenFingerprint: string | undefined;
355
+ chatId: string | undefined;
356
+ startedAt: number | undefined;
357
+ heartbeatAt: number | undefined;
358
+ stoppedAt: number | undefined;
359
+ roots: string[] | undefined;
360
+ generation: number | undefined;
361
+ generationStatus: "missing" | "valid" | "invalid";
362
+ }
363
+
364
+ function finiteNonNegativeNumber(value: unknown): number | undefined {
365
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
366
+ }
367
+
368
+ function safePositiveInteger(value: unknown): number | undefined {
369
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : undefined;
370
+ }
371
+
372
+ function safeNonNegativeInteger(value: unknown): number | undefined {
373
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
374
+ }
375
+
376
+ function stringArray(value: unknown): string[] | undefined {
377
+ return Array.isArray(value) && value.every(item => typeof item === "string") ? value : undefined;
378
+ }
379
+
380
+ function parseDaemonState(raw: string): NormalizedDaemonState | undefined {
381
+ let parsed: unknown;
382
+ try {
383
+ parsed = JSON.parse(raw);
384
+ } catch {
385
+ return undefined;
386
+ }
387
+ if (!parsed || typeof parsed !== "object") return undefined;
388
+ const rec = parsed as Record<string, unknown>;
389
+ const pid = safePositiveInteger(rec.pid);
390
+ if (pid === undefined || typeof rec.ownerId !== "string" || rec.ownerId.length === 0) return undefined;
391
+
392
+ const generation = safeNonNegativeInteger(rec.generation);
393
+ const generationStatus = !Object.hasOwn(rec, "generation")
394
+ ? "missing"
395
+ : generation === undefined
396
+ ? "invalid"
397
+ : "valid";
398
+ return {
399
+ pid,
400
+ ownerId: rec.ownerId,
401
+ tokenFingerprint: typeof rec.tokenFingerprint === "string" ? rec.tokenFingerprint : undefined,
402
+ chatId: typeof rec.chatId === "string" ? rec.chatId : undefined,
403
+ startedAt: finiteNonNegativeNumber(rec.startedAt),
404
+ heartbeatAt: finiteNonNegativeNumber(rec.heartbeatAt),
405
+ stoppedAt: finiteNonNegativeNumber(rec.stoppedAt),
406
+ roots: stringArray(rec.roots),
407
+ generation,
408
+ generationStatus,
409
+ };
410
+ }
411
+
412
+ async function readDaemonStateFile(
413
+ fs: NotificationServiceFs,
414
+ file: string,
415
+ ): Promise<NormalizedDaemonState | undefined> {
416
+ try {
417
+ return parseDaemonState(await fs.readFile(file, "utf8"));
418
+ } catch {
419
+ return undefined;
420
+ }
421
+ }
422
+
423
+ function isSharedSdkArtifact(name: string): boolean {
424
+ return name === "broker.json";
425
+ }
426
+
427
+ async function listEndpointFiles(fs: NotificationServiceFs, dir: string): Promise<string[]> {
428
+ try {
429
+ return (await fs.readdir(dir)).filter(name => name.endsWith(".json") && !isSharedSdkArtifact(name));
430
+ } catch {
431
+ return [];
432
+ }
433
+ }
434
+
435
+ // --- health -------------------------------------------------------------
436
+
437
+ export type HealthLevel = "ok" | "warn" | "error";
438
+
439
+ export interface HealthCheck {
440
+ name: string;
441
+ level: HealthLevel;
442
+ detail: string;
443
+ }
444
+
445
+ export interface DaemonHealth {
446
+ present: boolean;
447
+ ownerId: string | undefined;
448
+ pid: number | undefined;
449
+ alive: boolean;
450
+ heartbeatFresh: boolean;
451
+ identityMatches: boolean;
452
+ stopped: boolean;
453
+ heartbeatAt: number | undefined;
454
+ heartbeatAgeMs: number | undefined;
455
+ generation: number | undefined;
456
+ currentGeneration: number;
457
+ generationRelation: DaemonGenerationRelation;
458
+ }
459
+
460
+ export type DaemonGenerationRelation = "pre_generation" | "older" | "current" | "newer" | "unknown";
461
+
462
+ function daemonGenerationRelation(state: NormalizedDaemonState | undefined): DaemonGenerationRelation {
463
+ if (!state) return "unknown";
464
+ if (state.generationStatus === "missing") return "pre_generation";
465
+ if (state.generation === undefined) return "unknown";
466
+ if (state.generation < DAEMON_GENERATION) return "older";
467
+ if (state.generation === DAEMON_GENERATION) return "current";
468
+ return "newer";
469
+ }
470
+
471
+ function displayHeartbeatAgeMs(now: number, heartbeatAt: number): number | undefined {
472
+ const age = now - heartbeatAt;
473
+ return Number.isFinite(age) ? Math.max(0, age) : undefined;
474
+ }
475
+ export interface EndpointHealth {
476
+ total: number;
477
+ live: number;
478
+ dead: number;
479
+ unknown: number;
480
+ unreadable: number;
481
+ }
482
+
483
+ export interface NotificationHealthReport {
484
+ overall: HealthLevel;
485
+ configured: boolean;
486
+ checks: HealthCheck[];
487
+ daemon: DaemonHealth;
488
+ endpoints: EndpointHealth;
489
+ reachability: { probed: boolean; ok: boolean; detail: string };
490
+ }
491
+
492
+ export interface HealthOptions {
493
+ settings: Settings;
494
+ stateRoot?: string;
495
+ deps?: NotificationServiceDeps;
496
+ /** When true and Telegram is configured, probe the Bot API (getMe) for reachability. */
497
+ probe?: boolean;
498
+ }
499
+
500
+ async function probeTelegramReachability(
501
+ fetchImpl: typeof fetch,
502
+ apiBase: string,
503
+ token: string,
504
+ ): Promise<{ ok: boolean; detail: string }> {
505
+ try {
506
+ const response = await fetchImpl(`${apiBase.replace(/\/$/, "")}/bot${token}/getMe`, {
507
+ method: "POST",
508
+ headers: { "content-type": "application/json" },
509
+ body: "{}",
510
+ });
511
+ const payload = (await response.json().catch(() => undefined)) as
512
+ | { ok?: boolean; description?: string; result?: { username?: string } }
513
+ | undefined;
514
+ if (response.ok && payload?.ok) {
515
+ const username = payload.result?.username;
516
+ return { ok: true, detail: username ? `reachable as @${username}` : "reachable" };
517
+ }
518
+ return {
519
+ ok: false,
520
+ detail: sanitizeDiagnostic(payload?.description ?? `Telegram getMe failed (HTTP ${response.status})`, token),
521
+ };
522
+ } catch (err) {
523
+ return { ok: false, detail: sanitizeDiagnostic(err instanceof Error ? err.message : "network error", token) };
524
+ }
525
+ }
526
+
527
+ function worst(a: HealthLevel, b: HealthLevel): HealthLevel {
528
+ const rank: Record<HealthLevel, number> = { ok: 0, warn: 1, error: 2 };
529
+ return rank[a] >= rank[b] ? a : b;
530
+ }
531
+
532
+ /** Structural (offline-by-default) health of the notification subsystem. */
533
+ export async function checkNotificationHealth(opts: HealthOptions): Promise<NotificationHealthReport> {
534
+ const deps = opts.deps ?? {};
535
+ const fs = deps.fs ?? nodeServiceFs;
536
+ const now = (deps.now ?? Date.now)();
537
+ const pidAlive = deps.pidAlive ?? defaultPidAlive;
538
+ const stateRoot = opts.stateRoot ?? defaultStateRoot();
539
+
540
+ const cfg: NotificationConfig = getNotificationConfig(opts.settings);
541
+ const configured = isGloballyConfigured(cfg);
542
+ const telegramConfigured = isTelegramConfigured(cfg);
543
+ const checks: HealthCheck[] = [];
544
+
545
+ if (!cfg.enabled) {
546
+ checks.push({
547
+ name: "config",
548
+ level: "warn",
549
+ detail: "notifications are disabled (notifications.enabled=false)",
550
+ });
551
+ } else if (!configured) {
552
+ checks.push({ name: "config", level: "warn", detail: "no notification adapter is fully configured" });
553
+ } else {
554
+ checks.push({ name: "config", level: "ok", detail: "enabled with at least one configured adapter" });
555
+ }
556
+
557
+ // Daemon ownership state (offline; read the persisted state file directly).
558
+ const paths = daemonPaths(opts.settings.getAgentDir());
559
+ const state = await readDaemonStateFile(fs, paths.state);
560
+ const heartbeatAt = state?.heartbeatAt;
561
+ const daemon: DaemonHealth = {
562
+ present: Boolean(state),
563
+ ownerId: state?.ownerId,
564
+ pid: state?.pid,
565
+ alive: state ? pidAlive(state.pid) : false,
566
+ heartbeatFresh: heartbeatAt !== undefined ? now - heartbeatAt <= HEARTBEAT_TTL_MS : false,
567
+ identityMatches:
568
+ Boolean(state) &&
569
+ telegramConfigured &&
570
+ state?.tokenFingerprint === tokenFingerprint(cfg.botToken) &&
571
+ state?.chatId === cfg.chatId,
572
+ stopped: state?.stoppedAt !== undefined,
573
+ heartbeatAt,
574
+ heartbeatAgeMs: heartbeatAt === undefined ? undefined : displayHeartbeatAgeMs(now, heartbeatAt),
575
+ generation: state?.generation,
576
+ currentGeneration: DAEMON_GENERATION,
577
+ generationRelation: daemonGenerationRelation(state),
578
+ };
579
+ if (!state) {
580
+ checks.push({ name: "daemon", level: "ok", detail: "no daemon ownership record (none running)" });
581
+ } else if (!daemon.alive) {
582
+ checks.push({
583
+ name: "daemon",
584
+ level: "warn",
585
+ detail: `daemon owner pid ${daemon.pid} is not alive; run recovery to clear the stale lock`,
586
+ });
587
+ } else if (!daemon.heartbeatFresh) {
588
+ checks.push({ name: "daemon", level: "warn", detail: `daemon pid ${daemon.pid} heartbeat is stale` });
589
+ } else if (telegramConfigured && !daemon.identityMatches) {
590
+ checks.push({
591
+ name: "daemon",
592
+ level: "warn",
593
+ detail: "a live daemon owns a different bot token or chat id",
594
+ });
595
+ } else {
596
+ checks.push({ name: "daemon", level: "ok", detail: `daemon pid ${daemon.pid} alive with a fresh heartbeat` });
597
+ }
598
+
599
+ // Per-session endpoint discovery files.
600
+ const dir = endpointDir(stateRoot);
601
+ const files = await listEndpointFiles(fs, dir);
602
+ let live = 0;
603
+ let dead = 0;
604
+ let unknownEndpoints = 0;
605
+ let unreadable = 0;
606
+ for (const name of files) {
607
+ const record = await readEndpointView(fs, path.join(dir, name));
608
+ if (record.kind === "non-endpoint") continue;
609
+ if (record.kind === "unreadable") {
610
+ unreadable += 1;
611
+ continue;
612
+ }
613
+ const view = record.view;
614
+ switch (endpointLiveness(view, pidAlive)) {
615
+ case "live":
616
+ live += 1;
617
+ break;
618
+ case "dead":
619
+ dead += 1;
620
+ break;
621
+ default:
622
+ unknownEndpoints += 1;
623
+ break;
624
+ }
625
+ }
626
+ const endpoints: EndpointHealth = {
627
+ total: live + dead + unknownEndpoints + unreadable,
628
+ live,
629
+ dead,
630
+ unknown: unknownEndpoints,
631
+ unreadable,
632
+ };
633
+ if (dead > 0 || unreadable > 0) {
634
+ checks.push({
635
+ name: "endpoints",
636
+ level: "warn",
637
+ detail: `${dead} dead / ${unreadable} unreadable of ${endpoints.total} endpoint file(s); run recovery`,
638
+ });
639
+ } else {
640
+ checks.push({
641
+ name: "endpoints",
642
+ level: "ok",
643
+ detail: `${live} live, ${unknownEndpoints} unverified endpoint file(s)`,
644
+ });
645
+ }
646
+ if (
647
+ telegramConfigured &&
648
+ daemon.present &&
649
+ daemon.alive &&
650
+ daemon.heartbeatFresh &&
651
+ daemon.identityMatches &&
652
+ !daemon.stopped &&
653
+ endpoints.total === 0
654
+ ) {
655
+ checks.push({
656
+ name: "local_endpoint",
657
+ level: "warn",
658
+ detail:
659
+ "No local notification endpoint for this working directory. In this SKC terminal run /notify on; if it does not report notifications enabled, start a new local SKC session. Do not re-pair Telegram.",
660
+ });
661
+ }
662
+
663
+ // Optional network reachability probe.
664
+ let reachability = { probed: false, ok: false, detail: "not probed" };
665
+ if (opts.probe && telegramConfigured) {
666
+ const result = await probeTelegramReachability(
667
+ deps.fetchImpl ?? globalThis.fetch,
668
+ deps.apiBase ?? DEFAULT_API_BASE,
669
+ cfg.botToken,
670
+ );
671
+ reachability = { probed: true, ...result };
672
+ checks.push({
673
+ name: "reachability",
674
+ level: result.ok ? "ok" : "error",
675
+ detail: `Telegram: ${result.detail}`,
676
+ });
677
+ }
678
+
679
+ const overall = checks.reduce<HealthLevel>((acc, check) => worst(acc, check.level), "ok");
680
+ return { overall, configured, checks, daemon, endpoints, reachability };
681
+ }
682
+
683
+ /** Render a health report as human-readable lines (no secrets). */
684
+ export function formatNotificationHealthReport(report: NotificationHealthReport): string {
685
+ const icon: Record<HealthLevel, string> = { ok: "[ok]", warn: "[warn]", error: "[error]" };
686
+ const lines = [`Notification health: ${report.overall.toUpperCase()}`];
687
+ for (const check of report.checks) {
688
+ lines.push(` ${icon[check.level]} ${check.name}: ${check.detail}`);
689
+ }
690
+ return lines.join("\n");
691
+ }
692
+
693
+ // --- test ---------------------------------------------------------------
694
+
695
+ export interface NotificationTestResult {
696
+ ok: boolean;
697
+ adapter: "telegram";
698
+ chatId: string | undefined;
699
+ detail: string;
700
+ }
701
+
702
+ export interface TestOptions {
703
+ settings: Settings;
704
+ deps?: NotificationServiceDeps;
705
+ text?: string;
706
+ }
707
+
708
+ /** Send a one-off test notification through the configured Telegram adapter. */
709
+ export async function sendNotificationTest(opts: TestOptions): Promise<NotificationTestResult> {
710
+ const deps = opts.deps ?? {};
711
+ const cfg = getNotificationConfig(opts.settings);
712
+ if (!isTelegramConfigured(cfg)) {
713
+ return {
714
+ ok: false,
715
+ adapter: "telegram",
716
+ chatId: cfg.chatId,
717
+ detail: "Telegram is not configured (need notifications.enabled + botToken + chatId). Run `skc notify setup`.",
718
+ };
719
+ }
720
+ const fetchImpl = deps.fetchImpl ?? globalThis.fetch;
721
+ const apiBase = (deps.apiBase ?? DEFAULT_API_BASE).replace(/\/$/, "");
722
+ const text = opts.text ?? "SKC notifications test message. If you can read this, delivery works.";
723
+ try {
724
+ const response = await fetchImpl(`${apiBase}/bot${cfg.botToken}/sendMessage`, {
725
+ method: "POST",
726
+ headers: { "content-type": "application/json" },
727
+ body: JSON.stringify({ chat_id: cfg.chatId, text }),
728
+ });
729
+ const payload = (await response.json().catch(() => undefined)) as
730
+ | { ok?: boolean; description?: string }
731
+ | undefined;
732
+ if (response.ok && payload?.ok) {
733
+ return { ok: true, adapter: "telegram", chatId: cfg.chatId, detail: `delivered to chat ${cfg.chatId}` };
734
+ }
735
+ return {
736
+ ok: false,
737
+ adapter: "telegram",
738
+ chatId: cfg.chatId,
739
+ detail: sanitizeDiagnostic(
740
+ payload?.description ?? `Telegram sendMessage failed (HTTP ${response.status})`,
741
+ cfg.botToken,
742
+ ),
743
+ };
744
+ } catch (err) {
745
+ return {
746
+ ok: false,
747
+ adapter: "telegram",
748
+ chatId: cfg.chatId,
749
+ detail: sanitizeDiagnostic(err instanceof Error ? err.message : "network error", cfg.botToken),
750
+ };
751
+ }
752
+ }
753
+
754
+ /** Render a test result as a single human-readable line (no secrets). */
755
+ export function formatNotificationTestResult(result: NotificationTestResult): string {
756
+ return `Notification test (${result.adapter}): ${result.ok ? "OK" : "FAILED"} — ${result.detail}`;
757
+ }
758
+
759
+ // --- recovery -----------------------------------------------------------
760
+
761
+ export interface RecoveredEndpoint {
762
+ sessionId: string;
763
+ pid: number | undefined;
764
+ reason: "stale-flag" | "dead-pid";
765
+ }
766
+
767
+ export type DaemonRecoveryAction =
768
+ | "none"
769
+ | "cleared-dead-owner-lock"
770
+ | "left-active"
771
+ | "left-contended"
772
+ | "owner-superseded"
773
+ | "orphan-lock-left";
774
+
775
+ export interface NotificationRecoveryReport {
776
+ endpointsScanned: number;
777
+ endpointsRemoved: RecoveredEndpoint[];
778
+ endpointsKept: number;
779
+ endpointsUnreadable: number;
780
+ endpointsDetached?: string[];
781
+ /** Successor paths retained after an exact-unlink race, distinct from stale quarantines. */
782
+ endpointsRetainedSuccessors?: string[];
783
+ /** Internal exchange placeholders retained after verified cleanup failure. */
784
+ endpointsRetainedPlaceholders?: string[];
785
+ /** Cleanup entries retained with unverified or mismatching identity. */
786
+ endpointsRetainedUnknown?: string[];
787
+ daemon: {
788
+ action: DaemonRecoveryAction;
789
+ detail: string;
790
+ ownerId: string | undefined;
791
+ pid: number | undefined;
792
+ };
793
+ }
794
+
795
+ export interface RecoveryOptions {
796
+ settings: Settings;
797
+ stateRoot?: string;
798
+ deps?: NotificationServiceDeps;
799
+ }
800
+
801
+ export interface DaemonTransitionLock {
802
+ pid: number;
803
+ incarnation: string;
804
+ createdAt: number;
805
+ /** Unique fencing generation for this particular transition acquisition. */
806
+ token: string;
807
+ }
808
+
809
+ function isDaemonTransitionLock(value: unknown): value is DaemonTransitionLock {
810
+ if (!value || typeof value !== "object") return false;
811
+ const candidate = value as Record<string, unknown>;
812
+ return (
813
+ Number.isSafeInteger(candidate.pid) &&
814
+ (candidate.pid as number) > 0 &&
815
+ typeof candidate.incarnation === "string" &&
816
+ typeof candidate.createdAt === "number" &&
817
+ typeof candidate.token === "string" &&
818
+ candidate.token.length > 0
819
+ );
820
+ }
821
+
822
+ interface TransitionMarkerSnapshot {
823
+ raw: string;
824
+ identity?: NotificationEndpointFileIdentity;
825
+ }
826
+
827
+ type TransitionMarkerFs = {
828
+ readFile(file: string, encoding: "utf8"): Promise<string>;
829
+ writeFile?(file: string, data: string, opts?: WriteFileOptions): Promise<void>;
830
+ readEndpointFile?(file: string): Promise<NotificationEndpointFile>;
831
+ exactUnlink?(file: string, identity: NotificationEndpointFileIdentity): Promise<NotificationExactUnlinkResult>;
832
+ };
833
+
834
+ async function readTransitionMarker(
835
+ fs: TransitionMarkerFs,
836
+ path: string,
837
+ ): Promise<TransitionMarkerSnapshot | undefined> {
838
+ if (fs.readEndpointFile) {
839
+ const exact = await fs.readEndpointFile(path).catch(() => undefined);
840
+ if (!exact) return undefined;
841
+ return { raw: exact.bytes.toString("utf8"), identity: exact.identity };
842
+ }
843
+ const raw = await fs.readFile(path, "utf8").catch(() => undefined);
844
+ if (raw === undefined) return undefined;
845
+ return { raw };
846
+ }
847
+
848
+ function transitionMarkerMatchesLock(snapshot: TransitionMarkerSnapshot, lock: DaemonTransitionLock): boolean {
849
+ try {
850
+ const current = JSON.parse(snapshot.raw);
851
+ return (
852
+ isDaemonTransitionLock(current) &&
853
+ current.pid === lock.pid &&
854
+ current.incarnation === lock.incarnation &&
855
+ current.token === lock.token
856
+ );
857
+ } catch {
858
+ return false;
859
+ }
860
+ }
861
+
862
+ /** True only while the exact transition acquisition still occupies the marker path. */
863
+ export async function daemonTransitionLockIsHeld(input: {
864
+ fs: Pick<TransitionMarkerFs, "readFile" | "readEndpointFile">;
865
+ path: string;
866
+ lock: DaemonTransitionLock;
867
+ }): Promise<boolean> {
868
+ const snapshot = await readTransitionMarker(input.fs, input.path);
869
+ return Boolean(snapshot && transitionMarkerMatchesLock(snapshot, input.lock));
870
+ }
871
+
872
+ /** Atomically detaches only the captured transition marker, never a pathname successor. */
873
+ async function detachTransitionMarker(
874
+ fs: TransitionMarkerFs,
875
+ path: string,
876
+ snapshot: TransitionMarkerSnapshot,
877
+ ): Promise<boolean> {
878
+ if (!snapshot.identity || !fs.exactUnlink) return false;
879
+ try {
880
+ return (await fs.exactUnlink(path, snapshot.identity)).ok;
881
+ } catch {
882
+ return false;
883
+ }
884
+ }
885
+
886
+ /** Removes only the caller's exact marker through the identity-bound detach primitive. */
887
+ export async function releaseDaemonTransitionLock(input: {
888
+ fs: TransitionMarkerFs;
889
+ path: string;
890
+ lock: DaemonTransitionLock;
891
+ }): Promise<boolean> {
892
+ const snapshot = await readTransitionMarker(input.fs, input.path);
893
+ if (!snapshot || !transitionMarkerMatchesLock(snapshot, input.lock)) return false;
894
+ return await detachTransitionMarker(input.fs, input.path, snapshot);
895
+ }
896
+
897
+ /**
898
+ * Acquire the daemon lifecycle transition lock using durable owner metadata.
899
+ * The full marker is published in the single O_EXCL write which reserves it;
900
+ * canonical markers are detached only through their captured filesystem identity.
901
+ *
902
+ * Malformed and empty markers deliberately remain blocked regardless of age. They
903
+ * have no owner provenance, so reclaiming them could detach a generation-6 empty
904
+ * reservation while its paused legacy writer can still resume. Operators must
905
+ * manually clean up such legacy debris after confirming no legacy process remains.
906
+ */
907
+ export async function acquireDaemonTransitionLock(input: {
908
+ fs: TransitionMarkerFs;
909
+ path: string;
910
+ pid: number;
911
+ pidAlive: (pid: number) => boolean;
912
+ pidIncarnation: (pid: number) => string | undefined;
913
+ now?: () => number;
914
+ sleep?: (ms: number) => Promise<void>;
915
+ retries?: number;
916
+ retryDelayMs?: number;
917
+ randomToken?: () => string;
918
+ }): Promise<DaemonTransitionLock | undefined> {
919
+ const sleep = input.sleep ?? (async (ms: number) => await Bun.sleep(ms));
920
+ const now = input.now ?? Date.now;
921
+ const retries = Math.max(input.retries ?? 5, 0);
922
+ const retryDelayMs = Math.max(input.retryDelayMs ?? 20, 0);
923
+ const incarnation = input.pidIncarnation(input.pid);
924
+ if (!isProcessIncarnation(incarnation)) return undefined;
925
+ const token = input.randomToken?.() ?? crypto.randomUUID();
926
+ if (!token || !input.fs.writeFile || !input.fs.readEndpointFile || !input.fs.exactUnlink) return undefined;
927
+ const owner: DaemonTransitionLock = { pid: input.pid, incarnation, createdAt: now(), token };
928
+ for (let attempt = 0; attempt <= retries; attempt++) {
929
+ try {
930
+ await input.fs.writeFile(input.path, `${JSON.stringify(owner)}\n`, { mode: 0o600, flag: "wx" });
931
+ return owner;
932
+ } catch (error) {
933
+ if (["EEXIST", "ENOENT"].includes((error as NodeJS.ErrnoException).code ?? "")) {
934
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return undefined;
935
+ } else throw error;
936
+ }
937
+ const snapshot = await readTransitionMarker(input.fs, input.path);
938
+ let current: unknown;
939
+ try {
940
+ current = snapshot === undefined ? undefined : JSON.parse(snapshot.raw);
941
+ } catch {
942
+ current = undefined;
943
+ }
944
+ // Only canonical owner records prove which process may be reclaimed. An
945
+ // unreadable or empty legacy reservation is intentionally not age-reclaimed:
946
+ // it may belong to a paused generation-6 two-step publisher.
947
+ const ownerAlive = isDaemonTransitionLock(current) && input.pidAlive(current.pid);
948
+ const ownerIncarnation = isDaemonTransitionLock(current) ? input.pidIncarnation(current.pid) : undefined;
949
+ const reclaimable =
950
+ isDaemonTransitionLock(current) &&
951
+ (!ownerAlive ||
952
+ (isProcessIncarnation(current.incarnation) &&
953
+ isProcessIncarnation(ownerIncarnation) &&
954
+ ownerIncarnation !== current.incarnation));
955
+ if (snapshot && reclaimable) await detachTransitionMarker(input.fs, input.path, snapshot);
956
+ if (attempt < retries) await sleep(retryDelayMs);
957
+ }
958
+ return undefined;
959
+ }
960
+
961
+ function defaultTransitionPidAlive(pid: number): boolean {
962
+ try {
963
+ process.kill(pid, 0);
964
+ return true;
965
+ } catch (err) {
966
+ return (err as NodeJS.ErrnoException).code === "EPERM";
967
+ }
968
+ }
969
+
970
+ function defaultTransitionPidIncarnation(pid: number): string | undefined {
971
+ return processIncarnation(pid);
972
+ }
973
+
974
+ /**
975
+ * Owner-bound removal of a dead daemon's lock. Closes the classic
976
+ * check-then-unlink TOCTOU: a naive `unlink(lock)` after observing a dead owner
977
+ * can delete a *new* live owner's lock if a daemon took over in between. This
978
+ * primitive re-checks ownership while holding the same steal-mutex the daemon's
979
+ * own takeover path uses ({@link DaemonPaths.steal}), so the two are mutually
980
+ * exclusive, and unlinks only when the recorded owner is still the same
981
+ * confirmed-dead process.
982
+ */
983
+ async function removeDeadOwnerLock(
984
+ fs: NotificationServiceFs,
985
+ paths: DaemonPaths,
986
+ pidAlive: (pid: number) => boolean,
987
+ expected: NormalizedDaemonState,
988
+ ): Promise<"cleared" | "contended" | "superseded" | "now-alive" | "unlink-failed"> {
989
+ const transition = await acquireDaemonTransitionLock({
990
+ fs,
991
+ path: paths.steal,
992
+ pid: process.pid,
993
+ pidAlive: defaultTransitionPidAlive,
994
+ pidIncarnation: defaultTransitionPidIncarnation,
995
+ });
996
+ if (!transition) return "contended";
997
+ try {
998
+ const current = await readDaemonStateFile(fs, paths.state);
999
+ if (!current || current.ownerId !== expected.ownerId || current.pid !== expected.pid) {
1000
+ return "superseded";
1001
+ }
1002
+ if (pidAlive(current.pid)) return "now-alive";
1003
+ if (!(await daemonTransitionLockIsHeld({ fs, path: paths.steal, lock: transition }))) return "contended";
1004
+ try {
1005
+ await fs.unlink(paths.lock);
1006
+ return "cleared";
1007
+ } catch {
1008
+ return "unlink-failed";
1009
+ }
1010
+ } finally {
1011
+ await releaseDaemonTransitionLock({ fs, path: paths.steal, lock: transition });
1012
+ }
1013
+ }
1014
+
1015
+ /**
1016
+ * Ownership-protected cleanup. Removes only DEAD-owner artifacts:
1017
+ * per-session endpoint files with positive proof of death (a stale tombstone or
1018
+ * a dead recorded pid), and a daemon lock whose recorded owner is confirmed
1019
+ * dead. A PID-less endpoint is treated as unknown (not dead) and kept. The
1020
+ * daemon lock is removed through {@link removeDeadOwnerLock}, an owner-bound
1021
+ * primitive that re-checks ownership under the daemon steal-mutex so it can
1022
+ * never race a concurrent takeover. Never removes a live owner's lock, never
1023
+ * deletes unreadable files, and never kills a process.
1024
+ */
1025
+ export async function recoverNotifications(opts: RecoveryOptions): Promise<NotificationRecoveryReport> {
1026
+ const deps = opts.deps ?? {};
1027
+ const fs = deps.fs ?? nodeServiceFs;
1028
+ const pidAlive = deps.pidAlive ?? defaultPidAlive;
1029
+ const stateRoot = opts.stateRoot ?? defaultStateRoot();
1030
+
1031
+ const dir = endpointDir(stateRoot);
1032
+ const files = await listEndpointFiles(fs, dir);
1033
+ const removed: RecoveredEndpoint[] = [];
1034
+ const detached: string[] = [];
1035
+ const retainedSuccessors: string[] = [];
1036
+ const retainedPlaceholders: string[] = [];
1037
+ const retainedUnknown: string[] = [];
1038
+ let recoveryFailures = 0;
1039
+ let kept = 0;
1040
+ let unreadable = 0;
1041
+ for (const name of files) {
1042
+ const file = path.join(dir, name);
1043
+ const record = await readEndpointView(fs, file);
1044
+ if (record.kind === "non-endpoint") continue;
1045
+ if (record.kind === "unreadable") {
1046
+ // Leave unparseable files untouched: they may be mid-write by a live server.
1047
+ unreadable += 1;
1048
+ continue;
1049
+ }
1050
+ const view = record.view;
1051
+ if (endpointLiveness(view, pidAlive) !== "dead") {
1052
+ // Keep live AND unknown (PID-less) endpoints: only positive proof of
1053
+ // death (a stale tombstone or a dead pid) authorizes removal.
1054
+ kept += 1;
1055
+ continue;
1056
+ }
1057
+ try {
1058
+ const result = await fs.exactUnlink(file, record.identity);
1059
+ if (!result.ok) {
1060
+ recoveryFailures += 1;
1061
+ if (result.detachedPath) detached.push(result.detachedPath);
1062
+ if (result.retainedSuccessorPath) retainedSuccessors.push(result.retainedSuccessorPath);
1063
+ if (result.retainedPlaceholderPath) retainedPlaceholders.push(result.retainedPlaceholderPath);
1064
+ if (result.retainedUnknownPath) retainedUnknown.push(result.retainedUnknownPath);
1065
+ if (
1066
+ !result.detachedPath &&
1067
+ !result.retainedSuccessorPath &&
1068
+ !result.retainedPlaceholderPath &&
1069
+ !result.retainedUnknownPath
1070
+ )
1071
+ kept += 1;
1072
+ continue;
1073
+ }
1074
+ removed.push({
1075
+ sessionId: view.sessionId,
1076
+ pid: view.pid,
1077
+ reason: view.stale ? "stale-flag" : "dead-pid",
1078
+ });
1079
+ } catch {
1080
+ kept += 1;
1081
+ }
1082
+ }
1083
+
1084
+ // Daemon lock: clear only when the recorded owner process is dead.
1085
+ const paths = daemonPaths(opts.settings.getAgentDir());
1086
+ let daemonFiles: string[] = [];
1087
+ try {
1088
+ daemonFiles = await fs.readdir(paths.dir);
1089
+ } catch {
1090
+ // directory absent: nothing to recover
1091
+ }
1092
+ const hasLock = daemonFiles.includes(path.basename(paths.lock));
1093
+ const state = await readDaemonStateFile(fs, paths.state);
1094
+ let daemon: NotificationRecoveryReport["daemon"];
1095
+ if (!state) {
1096
+ daemon = hasLock
1097
+ ? {
1098
+ action: "orphan-lock-left",
1099
+ detail: "daemon lock present without an ownership record; left untouched to protect a starting owner",
1100
+ ownerId: undefined,
1101
+ pid: undefined,
1102
+ }
1103
+ : { action: "none", detail: "no daemon ownership record", ownerId: undefined, pid: undefined };
1104
+ } else if (pidAlive(state.pid)) {
1105
+ daemon = {
1106
+ action: "left-active",
1107
+ detail: `live daemon owned by pid ${state.pid} left untouched`,
1108
+ ownerId: state.ownerId,
1109
+ pid: state.pid,
1110
+ };
1111
+ } else if (hasLock) {
1112
+ const outcome = await removeDeadOwnerLock(fs, paths, pidAlive, state);
1113
+ const action: DaemonRecoveryAction =
1114
+ outcome === "cleared"
1115
+ ? "cleared-dead-owner-lock"
1116
+ : outcome === "now-alive"
1117
+ ? "left-active"
1118
+ : outcome === "superseded"
1119
+ ? "owner-superseded"
1120
+ : outcome === "contended"
1121
+ ? "left-contended"
1122
+ : "orphan-lock-left";
1123
+ const detail =
1124
+ outcome === "cleared"
1125
+ ? `cleared lock of dead owner pid ${state.pid}`
1126
+ : outcome === "now-alive"
1127
+ ? `owner pid ${state.pid} became live during recovery; lock left untouched`
1128
+ : outcome === "superseded"
1129
+ ? "a new daemon owner took over during recovery; lock left untouched"
1130
+ : outcome === "contended"
1131
+ ? "another daemon is starting or stealing the lock; lock left untouched"
1132
+ : `could not remove lock of dead owner pid ${state.pid}`;
1133
+ daemon = { action, detail, ownerId: state.ownerId, pid: state.pid };
1134
+ } else {
1135
+ daemon = {
1136
+ action: "none",
1137
+ detail: `dead owner pid ${state.pid} recorded but no lock present`,
1138
+ ownerId: state.ownerId,
1139
+ pid: state.pid,
1140
+ };
1141
+ }
1142
+
1143
+ return {
1144
+ endpointsScanned: removed.length + kept + unreadable + recoveryFailures,
1145
+ endpointsRemoved: removed,
1146
+ endpointsKept: kept,
1147
+ endpointsUnreadable: unreadable,
1148
+ endpointsDetached: detached,
1149
+ endpointsRetainedSuccessors: retainedSuccessors,
1150
+ endpointsRetainedPlaceholders: retainedPlaceholders,
1151
+ endpointsRetainedUnknown: retainedUnknown,
1152
+ daemon,
1153
+ };
1154
+ }
1155
+
1156
+ /** Render a recovery report as human-readable lines (no secrets). */
1157
+ export function formatNotificationRecoveryReport(report: NotificationRecoveryReport): string {
1158
+ const lines = ["Notification recovery"];
1159
+ lines.push(
1160
+ ` endpoints: scanned ${report.endpointsScanned}, removed ${report.endpointsRemoved.length}, kept ${report.endpointsKept}, unreadable ${report.endpointsUnreadable}, detached ${report.endpointsDetached?.length ?? 0}, retained successors ${report.endpointsRetainedSuccessors?.length ?? 0}, retained placeholders ${report.endpointsRetainedPlaceholders?.length ?? 0}, retained unknown ${report.endpointsRetainedUnknown?.length ?? 0}`,
1161
+ );
1162
+ for (const ep of report.endpointsRemoved) {
1163
+ lines.push(` - removed ${ep.sessionId} (pid ${ep.pid ?? "?"}, ${ep.reason})`);
1164
+ }
1165
+ for (const detached of report.endpointsDetached ?? []) lines.push(` - retained detached endpoint ${detached}`);
1166
+ for (const successor of report.endpointsRetainedSuccessors ?? [])
1167
+ lines.push(` - retained successor endpoint ${successor}`);
1168
+ for (const placeholder of report.endpointsRetainedPlaceholders ?? [])
1169
+ lines.push(` - retained exchange placeholder cleanup path ${placeholder}`);
1170
+ for (const unknown of report.endpointsRetainedUnknown ?? [])
1171
+ lines.push(` - retained unverified cleanup path ${unknown}`);
1172
+ lines.push(` daemon: ${report.daemon.action} — ${report.daemon.detail}`);
1173
+ return lines.join("\n");
1174
+ }