@sayknow-cli/coding-agent 0.3.11 → 0.3.13

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 (1161) hide show
  1. package/CHANGELOG.md +0 -21
  2. package/package.json +116 -117
  3. package/scripts/build-binary.ts +2 -43
  4. package/scripts/compile-args.ts +106 -0
  5. package/scripts/g004-tmux-smoke.ts +196 -36
  6. package/scripts/generate-docs-index.ts +3 -0
  7. package/src/build-metadata.ts +104 -0
  8. package/src/capability/mcp.ts +3 -1
  9. package/src/cli/daemon-cli.ts +19 -29
  10. package/src/cli/malloc-env-guard.test.ts +104 -0
  11. package/src/cli/malloc-env-guard.ts +149 -0
  12. package/src/cli/mcp-cli.ts +108 -26
  13. package/src/cli/notify-cli.ts +78 -14
  14. package/src/cli/session-picker.ts +23 -40
  15. package/src/cli/update-cli.ts +56 -37
  16. package/src/cli.ts +71 -10
  17. package/src/commands/daemon.ts +19 -5
  18. package/src/commands/harness.ts +515 -47
  19. package/src/commands/launch.ts +11 -3
  20. package/src/commands/mcp.ts +8 -8
  21. package/src/commands/notify.ts +5 -1
  22. package/src/commands/session.ts +6 -1
  23. package/src/commands/stats.ts +6 -2
  24. package/src/config/keybindings.ts +7 -2
  25. package/src/config/mcp-schema.json +21 -17
  26. package/src/config/model-profile-activation.ts +1 -1
  27. package/src/config/model-profiles.ts +23 -23
  28. package/src/config/settings-schema.ts +41 -1
  29. package/src/coordinator-mcp/model-preset.ts +100 -0
  30. package/src/coordinator-mcp/server.ts +2735 -435
  31. package/src/daemon/control-types.ts +11 -0
  32. package/src/daemon/operator-contract.ts +121 -0
  33. package/src/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.ts +57 -17
  34. package/src/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.ts +15 -2
  35. package/src/defaults/skc/extensions/grok-cli-vendor/src/provider/register.ts +5 -1
  36. package/src/discovery/builtin.ts +14 -0
  37. package/src/discovery/mcp-json.ts +14 -0
  38. package/src/eval/js/executor.ts +7 -1
  39. package/src/internal-urls/docs-index.generated.ts +10 -9
  40. package/src/internal-urls/local-protocol.ts +29 -10
  41. package/src/internal-urls/skc-protocol.ts +14 -1
  42. package/src/main.ts +298 -75
  43. package/src/modes/acp/acp-agent.ts +800 -114
  44. package/src/modes/acp/acp-client-bridge.ts +27 -5
  45. package/src/modes/acp/acp-event-mapper.ts +39 -1
  46. package/src/modes/acp/acp-mode.ts +29 -2
  47. package/src/modes/components/assistant-message.ts +33 -4
  48. package/src/modes/components/bash-execution.ts +43 -13
  49. package/src/modes/components/custom-editor.ts +5 -0
  50. package/src/modes/components/hook-selector.ts +16 -0
  51. package/src/modes/components/irc-sidebar.ts +206 -0
  52. package/src/modes/components/model-selector.ts +17 -6
  53. package/src/modes/components/pet-selector.ts +55 -0
  54. package/src/modes/components/sayknow-pet-widget.ts +360 -0
  55. package/src/modes/components/session-selector.ts +223 -222
  56. package/src/modes/components/settings-selector.ts +10 -0
  57. package/src/modes/components/status-line/presets.ts +5 -19
  58. package/src/modes/components/status-line/segments.ts +14 -0
  59. package/src/modes/components/status-line/types.ts +6 -0
  60. package/src/modes/components/status-line.ts +13 -6
  61. package/src/modes/components/tool-execution.ts +48 -7
  62. package/src/modes/components/user-message.ts +26 -9
  63. package/src/modes/components/welcome.ts +4 -1
  64. package/src/modes/controllers/command-controller.ts +29 -3
  65. package/src/modes/controllers/event-controller.ts +168 -45
  66. package/src/modes/controllers/extension-ui-controller.ts +36 -17
  67. package/src/modes/controllers/input-controller.ts +16 -4
  68. package/src/modes/controllers/selector-controller.ts +69 -18
  69. package/src/modes/interactive-mode.ts +194 -10
  70. package/src/modes/irc-observation-ledger.ts +127 -0
  71. package/src/modes/rpc/rpc-client.ts +30 -6
  72. package/src/modes/shared/agent-wire/deep-interview-gate.ts +45 -2
  73. package/src/modes/shared/agent-wire/unattended-session.ts +288 -1
  74. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +130 -20
  75. package/src/modes/types.ts +34 -2
  76. package/src/modes/utils/hotkeys-markdown.ts +1 -0
  77. package/src/modes/utils/irc-message.ts +138 -0
  78. package/src/modes/utils/ui-helpers.ts +368 -80
  79. package/src/notifications/config.ts +44 -0
  80. package/src/notifications/daemon-paths.ts +8 -0
  81. package/src/notifications/index.ts +535 -75
  82. package/src/notifications/lifecycle-control-runtime.ts +930 -77
  83. package/src/notifications/notification-service.ts +710 -0
  84. package/src/notifications/rate-limit-pool.ts +46 -12
  85. package/src/notifications/telegram-daemon-control.ts +27 -2
  86. package/src/notifications/telegram-daemon.ts +663 -96
  87. package/src/notifications/telegram-reference.ts +73 -13
  88. package/src/notifications/topic-registry.ts +86 -9
  89. package/src/prompts/system/irc-peer-roster.md +1 -0
  90. package/src/prompts/system/subagent-system-prompt.md +1 -0
  91. package/src/prompts/system/system-prompt.md +1 -0
  92. package/src/prompts/tools/irc.md +1 -1
  93. package/src/prompts/tools/skill.md +2 -2
  94. package/src/registry/agent-registry.ts +3 -0
  95. package/src/runtime-mcp/config-writer.ts +4 -3
  96. package/src/runtime-mcp/config.ts +1 -0
  97. package/src/runtime-mcp/types.ts +4 -3
  98. package/src/sdk.ts +52 -1
  99. package/src/secrets/obfuscator.ts +4 -2
  100. package/src/session/agent-session.ts +513 -148
  101. package/src/session/cache-economics.ts +275 -0
  102. package/src/session/provider-safety-stop.ts +9 -0
  103. package/src/session/session-dump-format.ts +6 -0
  104. package/src/session/session-manager.ts +877 -79
  105. package/src/session/session-storage.ts +582 -38
  106. package/src/skc-runtime/session-state-sidecar.ts +756 -135
  107. package/src/skc-runtime/state-runtime.ts +105 -12
  108. package/src/skc-runtime/tmux-common.ts +26 -7
  109. package/src/skc-runtime/tmux-gc.ts +52 -9
  110. package/src/skc-runtime/tmux-owner-isolation-cli.ts +185 -0
  111. package/src/skc-runtime/tmux-owner-isolation.ts +2060 -0
  112. package/src/skc-runtime/tmux-sessions.ts +871 -68
  113. package/src/skc-runtime/workflow-manifest.generated.json +4 -28
  114. package/src/skc-runtime/workflow-manifest.ts +1 -7
  115. package/src/slash-commands/builtin-registry.ts +152 -13
  116. package/src/task/executor.ts +12 -3
  117. package/src/task/index.ts +8 -0
  118. package/src/task/receipt.ts +7 -2
  119. package/src/task/types.ts +26 -0
  120. package/src/tools/ask-answer-registry.ts +25 -0
  121. package/src/tools/bash-interactive.ts +9 -4
  122. package/src/tools/browser/readable.ts +2 -2
  123. package/src/tools/browser/tab-supervisor.ts +63 -6
  124. package/src/tools/browser.ts +8 -3
  125. package/src/tools/fetch.ts +5 -5
  126. package/src/tools/index.ts +81 -6
  127. package/src/tools/skill.ts +14 -11
  128. package/src/tools/sqlite-reader.ts +8 -4
  129. package/src/tui/output-block.ts +18 -6
  130. package/src/utils/external-editor.ts +6 -1
  131. package/src/utils/linkedom.ts +14 -0
  132. package/src/utils/pasted-image-path.ts +23 -9
  133. package/src/web/scrapers/arxiv.ts +2 -2
  134. package/src/web/scrapers/go-pkg.ts +2 -2
  135. package/src/web/scrapers/iacr.ts +2 -2
  136. package/src/web/scrapers/readthedocs.ts +2 -2
  137. package/src/web/scrapers/twitter.ts +3 -2
  138. package/src/web/scrapers/wikipedia.ts +2 -2
  139. package/dist/types/append-only-mode.d.ts +0 -31
  140. package/dist/types/async/index.d.ts +0 -2
  141. package/dist/types/async/job-manager.d.ts +0 -328
  142. package/dist/types/async/support.d.ts +0 -2
  143. package/dist/types/autoresearch/dashboard.d.ts +0 -4
  144. package/dist/types/autoresearch/git.d.ts +0 -36
  145. package/dist/types/autoresearch/helpers.d.ts +0 -24
  146. package/dist/types/autoresearch/index.d.ts +0 -2
  147. package/dist/types/autoresearch/state.d.ts +0 -17
  148. package/dist/types/autoresearch/storage.d.ts +0 -142
  149. package/dist/types/autoresearch/tools/init-experiment.d.ts +0 -31
  150. package/dist/types/autoresearch/tools/log-experiment.d.ts +0 -23
  151. package/dist/types/autoresearch/tools/run-experiment.d.ts +0 -8
  152. package/dist/types/autoresearch/tools/update-notes.d.ts +0 -12
  153. package/dist/types/autoresearch/types.d.ts +0 -154
  154. package/dist/types/capability/context-file.d.ts +0 -17
  155. package/dist/types/capability/extension-module.d.ts +0 -15
  156. package/dist/types/capability/extension.d.ts +0 -28
  157. package/dist/types/capability/fs.d.ts +0 -20
  158. package/dist/types/capability/hook.d.ts +0 -19
  159. package/dist/types/capability/index.d.ts +0 -80
  160. package/dist/types/capability/instruction.d.ts +0 -17
  161. package/dist/types/capability/mcp.d.ts +0 -47
  162. package/dist/types/capability/prompt.d.ts +0 -15
  163. package/dist/types/capability/rule.d.ts +0 -69
  164. package/dist/types/capability/settings.d.ts +0 -15
  165. package/dist/types/capability/skill.d.ts +0 -36
  166. package/dist/types/capability/slash-command.d.ts +0 -17
  167. package/dist/types/capability/ssh.d.ts +0 -23
  168. package/dist/types/capability/system-prompt.d.ts +0 -15
  169. package/dist/types/capability/tool.d.ts +0 -19
  170. package/dist/types/capability/types.d.ts +0 -154
  171. package/dist/types/cli/agents-cli.d.ts +0 -12
  172. package/dist/types/cli/args.d.ts +0 -57
  173. package/dist/types/cli/auth-broker-cli.d.ts +0 -25
  174. package/dist/types/cli/auth-gateway-cli.d.ts +0 -18
  175. package/dist/types/cli/classify-install-target.d.ts +0 -18
  176. package/dist/types/cli/commands/init-xdg.d.ts +0 -1
  177. package/dist/types/cli/completion-cli.d.ts +0 -41
  178. package/dist/types/cli/config-cli.d.ts +0 -23
  179. package/dist/types/cli/daemon-cli.d.ts +0 -25
  180. package/dist/types/cli/fast-help.d.ts +0 -1
  181. package/dist/types/cli/file-processor.d.ts +0 -11
  182. package/dist/types/cli/fixture-report.d.ts +0 -20
  183. package/dist/types/cli/fixture-report.test.d.ts +0 -1
  184. package/dist/types/cli/grep-cli.d.ts +0 -17
  185. package/dist/types/cli/initial-message.d.ts +0 -17
  186. package/dist/types/cli/list-models.d.ts +0 -36
  187. package/dist/types/cli/local-provider-smoke.d.ts +0 -59
  188. package/dist/types/cli/mcp-cli.d.ts +0 -25
  189. package/dist/types/cli/migrate-cli.d.ts +0 -20
  190. package/dist/types/cli/nofile-limit.d.ts +0 -11
  191. package/dist/types/cli/notify-cli.d.ts +0 -37
  192. package/dist/types/cli/plugin-cli.d.ts +0 -34
  193. package/dist/types/cli/read-cli.d.ts +0 -4
  194. package/dist/types/cli/session-picker.d.ts +0 -3
  195. package/dist/types/cli/setup-cli.d.ts +0 -73
  196. package/dist/types/cli/shell-cli.d.ts +0 -8
  197. package/dist/types/cli/skills-cli.d.ts +0 -9
  198. package/dist/types/cli/ssh-cli.d.ts +0 -21
  199. package/dist/types/cli/stats-cli.d.ts +0 -17
  200. package/dist/types/cli/telegram-cli.d.ts +0 -13
  201. package/dist/types/cli/update-cli.d.ts +0 -89
  202. package/dist/types/cli/web-search-cli.d.ts +0 -32
  203. package/dist/types/cli/worktree-cli.d.ts +0 -26
  204. package/dist/types/cli.d.ts +0 -135
  205. package/dist/types/commands/acp.d.ts +0 -12
  206. package/dist/types/commands/agents.d.ts +0 -34
  207. package/dist/types/commands/auth-broker.d.ts +0 -54
  208. package/dist/types/commands/auth-gateway.d.ts +0 -32
  209. package/dist/types/commands/codex-native-hook.d.ts +0 -6
  210. package/dist/types/commands/commit.d.ts +0 -27
  211. package/dist/types/commands/completion.d.ts +0 -29
  212. package/dist/types/commands/config.d.ts +0 -33
  213. package/dist/types/commands/contribution-prep.d.ts +0 -18
  214. package/dist/types/commands/coordinator.d.ts +0 -19
  215. package/dist/types/commands/daemon.d.ts +0 -41
  216. package/dist/types/commands/deep-interview.d.ts +0 -54
  217. package/dist/types/commands/gc.d.ts +0 -26
  218. package/dist/types/commands/grep.d.ts +0 -42
  219. package/dist/types/commands/harness.d.ts +0 -43
  220. package/dist/types/commands/launch.d.ts +0 -130
  221. package/dist/types/commands/local-provider.d.ts +0 -34
  222. package/dist/types/commands/mcp-serve.d.ts +0 -24
  223. package/dist/types/commands/mcp.d.ts +0 -70
  224. package/dist/types/commands/migrate.d.ts +0 -33
  225. package/dist/types/commands/notify.d.ts +0 -41
  226. package/dist/types/commands/plugin.d.ts +0 -58
  227. package/dist/types/commands/ralplan.d.ts +0 -7
  228. package/dist/types/commands/read.d.ts +0 -15
  229. package/dist/types/commands/rlm.d.ts +0 -10
  230. package/dist/types/commands/session.d.ts +0 -30
  231. package/dist/types/commands/setup.d.ts +0 -105
  232. package/dist/types/commands/shell.d.ts +0 -21
  233. package/dist/types/commands/skills.d.ts +0 -26
  234. package/dist/types/commands/ssh.d.ts +0 -48
  235. package/dist/types/commands/state.d.ts +0 -7
  236. package/dist/types/commands/stats.d.ts +0 -25
  237. package/dist/types/commands/team.d.ts +0 -24
  238. package/dist/types/commands/telegram.d.ts +0 -22
  239. package/dist/types/commands/ultragoal.d.ts +0 -8
  240. package/dist/types/commands/update.d.ts +0 -20
  241. package/dist/types/commands/web-search.d.ts +0 -87
  242. package/dist/types/commands/worktree.d.ts +0 -34
  243. package/dist/types/commit/agentic/agent.d.ts +0 -31
  244. package/dist/types/commit/agentic/fallback.d.ts +0 -5
  245. package/dist/types/commit/agentic/index.d.ts +0 -2
  246. package/dist/types/commit/agentic/state.d.ts +0 -58
  247. package/dist/types/commit/agentic/tools/analyze-file.d.ts +0 -19
  248. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +0 -10
  249. package/dist/types/commit/agentic/tools/git-hunk.d.ts +0 -9
  250. package/dist/types/commit/agentic/tools/git-overview.d.ts +0 -9
  251. package/dist/types/commit/agentic/tools/index.d.ts +0 -16
  252. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +0 -28
  253. package/dist/types/commit/agentic/tools/propose-commit.d.ts +0 -36
  254. package/dist/types/commit/agentic/tools/recent-commits.d.ts +0 -7
  255. package/dist/types/commit/agentic/tools/schemas.d.ts +0 -27
  256. package/dist/types/commit/agentic/tools/split-commit.d.ts +0 -53
  257. package/dist/types/commit/agentic/topo-sort.d.ts +0 -4
  258. package/dist/types/commit/agentic/trivial.d.ts +0 -7
  259. package/dist/types/commit/agentic/validation.d.ts +0 -20
  260. package/dist/types/commit/analysis/conventional.d.ts +0 -22
  261. package/dist/types/commit/analysis/index.d.ts +0 -4
  262. package/dist/types/commit/analysis/scope.d.ts +0 -6
  263. package/dist/types/commit/analysis/summary.d.ts +0 -19
  264. package/dist/types/commit/analysis/validation.d.ts +0 -8
  265. package/dist/types/commit/changelog/detect.d.ts +0 -2
  266. package/dist/types/commit/changelog/generate.d.ts +0 -30
  267. package/dist/types/commit/changelog/index.d.ts +0 -30
  268. package/dist/types/commit/changelog/parse.d.ts +0 -2
  269. package/dist/types/commit/cli.d.ts +0 -3
  270. package/dist/types/commit/git/diff.d.ts +0 -5
  271. package/dist/types/commit/index.d.ts +0 -4
  272. package/dist/types/commit/map-reduce/index.d.ts +0 -28
  273. package/dist/types/commit/map-reduce/map-phase.d.ts +0 -17
  274. package/dist/types/commit/map-reduce/reduce-phase.d.ts +0 -13
  275. package/dist/types/commit/map-reduce/utils.d.ts +0 -2
  276. package/dist/types/commit/message.d.ts +0 -2
  277. package/dist/types/commit/model-selection.d.ts +0 -15
  278. package/dist/types/commit/pipeline.d.ts +0 -5
  279. package/dist/types/commit/shared-llm.d.ts +0 -54
  280. package/dist/types/commit/types.d.ts +0 -78
  281. package/dist/types/commit/utils/exclusions.d.ts +0 -4
  282. package/dist/types/commit/utils.d.ts +0 -20
  283. package/dist/types/config/config-file.d.ts +0 -58
  284. package/dist/types/config/file-lock-gc.d.ts +0 -5
  285. package/dist/types/config/file-lock.d.ts +0 -36
  286. package/dist/types/config/keybindings.d.ts +0 -359
  287. package/dist/types/config/model-equivalence.d.ts +0 -24
  288. package/dist/types/config/model-profile-activation.d.ts +0 -64
  289. package/dist/types/config/model-profiles.d.ts +0 -39
  290. package/dist/types/config/model-registry.d.ts +0 -473
  291. package/dist/types/config/model-resolver.d.ts +0 -217
  292. package/dist/types/config/models-config-schema.d.ts +0 -700
  293. package/dist/types/config/prompt-templates.d.ts +0 -32
  294. package/dist/types/config/resolve-config-value.d.ts +0 -17
  295. package/dist/types/config/settings-schema.d.ts +0 -4183
  296. package/dist/types/config/settings.d.ts +0 -156
  297. package/dist/types/config/skill-settings-defaults.d.ts +0 -14
  298. package/dist/types/config/telegram-autostart.d.ts +0 -14
  299. package/dist/types/config/telegram-env-bridge.d.ts +0 -18
  300. package/dist/types/config.d.ts +0 -66
  301. package/dist/types/coordinator/contract.d.ts +0 -4
  302. package/dist/types/coordinator-mcp/policy.d.ts +0 -24
  303. package/dist/types/coordinator-mcp/safety.d.ts +0 -26
  304. package/dist/types/coordinator-mcp/server.d.ts +0 -66
  305. package/dist/types/cursor.d.ts +0 -24
  306. package/dist/types/daemon/builtin.d.ts +0 -20
  307. package/dist/types/daemon/control-types.d.ts +0 -57
  308. package/dist/types/daemon/runtime.d.ts +0 -25
  309. package/dist/types/dap/client.d.ts +0 -39
  310. package/dist/types/dap/config.d.ts +0 -6
  311. package/dist/types/dap/index.d.ts +0 -4
  312. package/dist/types/dap/session.d.ts +0 -108
  313. package/dist/types/dap/types.d.ts +0 -524
  314. package/dist/types/debug/crash-diagnostics.d.ts +0 -45
  315. package/dist/types/debug/index.d.ts +0 -15
  316. package/dist/types/debug/log-formatting.d.ts +0 -4
  317. package/dist/types/debug/log-viewer.d.ts +0 -68
  318. package/dist/types/debug/profiler.d.ts +0 -24
  319. package/dist/types/debug/raw-sse-buffer.d.ts +0 -44
  320. package/dist/types/debug/raw-sse.d.ts +0 -16
  321. package/dist/types/debug/report-bundle.d.ts +0 -55
  322. package/dist/types/debug/runtime-gauges.d.ts +0 -6
  323. package/dist/types/debug/system-info.d.ts +0 -26
  324. package/dist/types/deep-interview/plaintext-gate-guard.d.ts +0 -11
  325. package/dist/types/deep-interview/render-middleware.d.ts +0 -6
  326. package/dist/types/defaults/skc/extensions/grok-build/index.d.ts +0 -1
  327. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/index.d.ts +0 -1
  328. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.d.ts +0 -25
  329. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.d.ts +0 -27
  330. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/billing.d.ts +0 -8
  331. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/register.d.ts +0 -5
  332. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/stream.d.ts +0 -10
  333. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/usage.d.ts +0 -2
  334. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/base-url.d.ts +0 -2
  335. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/errors.d.ts +0 -38
  336. package/dist/types/defaults/skc-defaults.d.ts +0 -64
  337. package/dist/types/defaults/skc-grok-cli.d.ts +0 -5
  338. package/dist/types/discovery/agents-md.d.ts +0 -1
  339. package/dist/types/discovery/agents.d.ts +0 -12
  340. package/dist/types/discovery/builtin.d.ts +0 -1
  341. package/dist/types/discovery/claude-plugins.d.ts +0 -1
  342. package/dist/types/discovery/claude.d.ts +0 -1
  343. package/dist/types/discovery/cline.d.ts +0 -1
  344. package/dist/types/discovery/codex.d.ts +0 -1
  345. package/dist/types/discovery/cursor.d.ts +0 -19
  346. package/dist/types/discovery/gemini.d.ts +0 -1
  347. package/dist/types/discovery/github.d.ts +0 -1
  348. package/dist/types/discovery/helpers.d.ts +0 -271
  349. package/dist/types/discovery/index.d.ts +0 -48
  350. package/dist/types/discovery/mcp-json.d.ts +0 -1
  351. package/dist/types/discovery/opencode.d.ts +0 -1
  352. package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
  353. package/dist/types/discovery/ssh.d.ts +0 -1
  354. package/dist/types/discovery/substitute-plugin-root.d.ts +0 -5
  355. package/dist/types/discovery/vscode.d.ts +0 -1
  356. package/dist/types/discovery/windsurf.d.ts +0 -15
  357. package/dist/types/edit/apply-patch/index.d.ts +0 -35
  358. package/dist/types/edit/apply-patch/parser.d.ts +0 -34
  359. package/dist/types/edit/diff.d.ts +0 -75
  360. package/dist/types/edit/file-read-cache.d.ts +0 -25
  361. package/dist/types/edit/index.d.ts +0 -58
  362. package/dist/types/edit/modes/apply-patch.d.ts +0 -24
  363. package/dist/types/edit/modes/patch.d.ts +0 -99
  364. package/dist/types/edit/modes/replace.d.ts +0 -149
  365. package/dist/types/edit/normalize.d.ts +0 -43
  366. package/dist/types/edit/notebook.d.ts +0 -26
  367. package/dist/types/edit/read-file.d.ts +0 -8
  368. package/dist/types/edit/renderer.d.ts +0 -110
  369. package/dist/types/edit/streaming.d.ts +0 -66
  370. package/dist/types/eval/backend.d.ts +0 -40
  371. package/dist/types/eval/index.d.ts +0 -4
  372. package/dist/types/eval/js/context-manager.d.ts +0 -27
  373. package/dist/types/eval/js/executor.d.ts +0 -29
  374. package/dist/types/eval/js/index.d.ts +0 -10
  375. package/dist/types/eval/js/shared/helpers.d.ts +0 -38
  376. package/dist/types/eval/js/shared/indirect-eval.d.ts +0 -14
  377. package/dist/types/eval/js/shared/prelude.d.ts +0 -1
  378. package/dist/types/eval/js/shared/rewrite-imports.d.ts +0 -6
  379. package/dist/types/eval/js/shared/runtime.d.ts +0 -47
  380. package/dist/types/eval/js/shared/types.d.ts +0 -24
  381. package/dist/types/eval/js/tool-bridge.d.ts +0 -18
  382. package/dist/types/eval/js/worker-core.d.ts +0 -5
  383. package/dist/types/eval/js/worker-entry.d.ts +0 -1
  384. package/dist/types/eval/js/worker-protocol.d.ts +0 -77
  385. package/dist/types/eval/py/display.d.ts +0 -25
  386. package/dist/types/eval/py/executor.d.ts +0 -88
  387. package/dist/types/eval/py/index.d.ts +0 -10
  388. package/dist/types/eval/py/kernel.d.ts +0 -65
  389. package/dist/types/eval/py/prelude.d.ts +0 -1
  390. package/dist/types/eval/py/runtime.d.ts +0 -29
  391. package/dist/types/eval/py/tool-bridge.d.ts +0 -20
  392. package/dist/types/eval/types.d.ts +0 -52
  393. package/dist/types/exa/factory.d.ts +0 -13
  394. package/dist/types/exa/index.d.ts +0 -20
  395. package/dist/types/exa/mcp-client.d.ts +0 -45
  396. package/dist/types/exa/render.d.ts +0 -19
  397. package/dist/types/exa/researcher.d.ts +0 -9
  398. package/dist/types/exa/search.d.ts +0 -9
  399. package/dist/types/exa/types.d.ts +0 -155
  400. package/dist/types/exa/websets.d.ts +0 -9
  401. package/dist/types/exec/bash-executor.d.ts +0 -64
  402. package/dist/types/exec/exec.d.ts +0 -25
  403. package/dist/types/exec/idle-timeout-watchdog.d.ts +0 -18
  404. package/dist/types/exec/non-interactive-env.d.ts +0 -1
  405. package/dist/types/export/custom-share.d.ts +0 -20
  406. package/dist/types/export/html/index.d.ts +0 -10
  407. package/dist/types/export/html/template.generated.d.ts +0 -1
  408. package/dist/types/export/html/template.macro.d.ts +0 -5
  409. package/dist/types/export/ttsr.d.ts +0 -55
  410. package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +0 -9
  411. package/dist/types/extensibility/custom-commands/index.d.ts +0 -2
  412. package/dist/types/extensibility/custom-commands/loader.d.ts +0 -29
  413. package/dist/types/extensibility/custom-commands/types.d.ts +0 -106
  414. package/dist/types/extensibility/custom-tools/index.d.ts +0 -6
  415. package/dist/types/extensibility/custom-tools/loader.d.ts +0 -69
  416. package/dist/types/extensibility/custom-tools/types.d.ts +0 -229
  417. package/dist/types/extensibility/custom-tools/wrapper.d.ts +0 -24
  418. package/dist/types/extensibility/extensions/compact-handler.d.ts +0 -26
  419. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +0 -29
  420. package/dist/types/extensibility/extensions/index.d.ts +0 -9
  421. package/dist/types/extensibility/extensions/loader.d.ts +0 -43
  422. package/dist/types/extensibility/extensions/prefix-command-bridge.d.ts +0 -35
  423. package/dist/types/extensibility/extensions/runner.d.ts +0 -135
  424. package/dist/types/extensibility/extensions/types.d.ts +0 -918
  425. package/dist/types/extensibility/extensions/wrapper.d.ts +0 -55
  426. package/dist/types/extensibility/hooks/index.d.ts +0 -5
  427. package/dist/types/extensibility/hooks/loader.d.ts +0 -89
  428. package/dist/types/extensibility/hooks/runner.d.ts +0 -126
  429. package/dist/types/extensibility/hooks/tool-wrapper.d.ts +0 -25
  430. package/dist/types/extensibility/hooks/types.d.ts +0 -431
  431. package/dist/types/extensibility/plugins/doctor.d.ts +0 -3
  432. package/dist/types/extensibility/plugins/git-url.d.ts +0 -34
  433. package/dist/types/extensibility/plugins/index.d.ts +0 -8
  434. package/dist/types/extensibility/plugins/installer.d.ts +0 -5
  435. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +0 -2
  436. package/dist/types/extensibility/plugins/loader.d.ts +0 -31
  437. package/dist/types/extensibility/plugins/manager.d.ts +0 -65
  438. package/dist/types/extensibility/plugins/marketplace/cache.d.ts +0 -41
  439. package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +0 -48
  440. package/dist/types/extensibility/plugins/marketplace/index.d.ts +0 -6
  441. package/dist/types/extensibility/plugins/marketplace/manager.d.ts +0 -57
  442. package/dist/types/extensibility/plugins/marketplace/registry.d.ts +0 -34
  443. package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +0 -28
  444. package/dist/types/extensibility/plugins/marketplace/types.d.ts +0 -130
  445. package/dist/types/extensibility/plugins/parser.d.ts +0 -52
  446. package/dist/types/extensibility/plugins/security-scanner.d.ts +0 -31
  447. package/dist/types/extensibility/plugins/types.d.ts +0 -149
  448. package/dist/types/extensibility/runtime-skill-discovery.d.ts +0 -20
  449. package/dist/types/extensibility/shared-events.d.ts +0 -281
  450. package/dist/types/extensibility/skc-plugins/activation.d.ts +0 -14
  451. package/dist/types/extensibility/skc-plugins/compiler.d.ts +0 -19
  452. package/dist/types/extensibility/skc-plugins/constrained-hooks.d.ts +0 -29
  453. package/dist/types/extensibility/skc-plugins/index.d.ts +0 -18
  454. package/dist/types/extensibility/skc-plugins/injection.d.ts +0 -40
  455. package/dist/types/extensibility/skc-plugins/installer.d.ts +0 -13
  456. package/dist/types/extensibility/skc-plugins/loader.d.ts +0 -3
  457. package/dist/types/extensibility/skc-plugins/mcp-policy.d.ts +0 -26
  458. package/dist/types/extensibility/skc-plugins/observability.d.ts +0 -27
  459. package/dist/types/extensibility/skc-plugins/paths.d.ts +0 -8
  460. package/dist/types/extensibility/skc-plugins/prompt-appendix.d.ts +0 -16
  461. package/dist/types/extensibility/skc-plugins/registry.d.ts +0 -32
  462. package/dist/types/extensibility/skc-plugins/runtime-adapters.d.ts +0 -64
  463. package/dist/types/extensibility/skc-plugins/schema.d.ts +0 -3
  464. package/dist/types/extensibility/skc-plugins/session-validation.d.ts +0 -42
  465. package/dist/types/extensibility/skc-plugins/state.d.ts +0 -9
  466. package/dist/types/extensibility/skc-plugins/tools.d.ts +0 -8
  467. package/dist/types/extensibility/skc-plugins/types.d.ts +0 -220
  468. package/dist/types/extensibility/skc-plugins/validation.d.ts +0 -11
  469. package/dist/types/extensibility/skills.d.ts +0 -82
  470. package/dist/types/extensibility/slash-commands.d.ts +0 -48
  471. package/dist/types/extensibility/tool-proxy.d.ts +0 -4
  472. package/dist/types/extensibility/typebox.d.ts +0 -155
  473. package/dist/types/extensibility/utils.d.ts +0 -12
  474. package/dist/types/goals/index.d.ts +0 -3
  475. package/dist/types/goals/runtime.d.ts +0 -63
  476. package/dist/types/goals/state.d.ts +0 -32
  477. package/dist/types/goals/tools/goal-tool.d.ts +0 -62
  478. package/dist/types/harness-control-plane/classifier.d.ts +0 -13
  479. package/dist/types/harness-control-plane/control-endpoint.d.ts +0 -31
  480. package/dist/types/harness-control-plane/finalize.d.ts +0 -60
  481. package/dist/types/harness-control-plane/gc-adapter.d.ts +0 -3
  482. package/dist/types/harness-control-plane/operate.d.ts +0 -35
  483. package/dist/types/harness-control-plane/owner.d.ts +0 -53
  484. package/dist/types/harness-control-plane/phase-rollup.d.ts +0 -23
  485. package/dist/types/harness-control-plane/preserve.d.ts +0 -19
  486. package/dist/types/harness-control-plane/receipt-ingest.d.ts +0 -19
  487. package/dist/types/harness-control-plane/receipt-spool.d.ts +0 -19
  488. package/dist/types/harness-control-plane/receipts.d.ts +0 -149
  489. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  490. package/dist/types/harness-control-plane/seams.d.ts +0 -21
  491. package/dist/types/harness-control-plane/session-lease.d.ts +0 -65
  492. package/dist/types/harness-control-plane/state-machine.d.ts +0 -24
  493. package/dist/types/harness-control-plane/storage.d.ts +0 -81
  494. package/dist/types/harness-control-plane/types.d.ts +0 -187
  495. package/dist/types/hashline/anchors.d.ts +0 -20
  496. package/dist/types/hashline/apply.d.ts +0 -14
  497. package/dist/types/hashline/constants.d.ts +0 -19
  498. package/dist/types/hashline/diff-preview.d.ts +0 -2
  499. package/dist/types/hashline/diff.d.ts +0 -17
  500. package/dist/types/hashline/execute.d.ts +0 -4
  501. package/dist/types/hashline/hash.d.ts +0 -123
  502. package/dist/types/hashline/index.d.ts +0 -13
  503. package/dist/types/hashline/input.d.ts +0 -11
  504. package/dist/types/hashline/parser.d.ts +0 -7
  505. package/dist/types/hashline/prefixes.d.ts +0 -7
  506. package/dist/types/hashline/recovery.d.ts +0 -27
  507. package/dist/types/hashline/stream.d.ts +0 -2
  508. package/dist/types/hashline/types.d.ts +0 -77
  509. package/dist/types/hindsight/backend.d.ts +0 -13
  510. package/dist/types/hindsight/bank.d.ts +0 -54
  511. package/dist/types/hindsight/client.d.ts +0 -224
  512. package/dist/types/hindsight/config.d.ts +0 -51
  513. package/dist/types/hindsight/content.d.ts +0 -70
  514. package/dist/types/hindsight/index.d.ts +0 -8
  515. package/dist/types/hindsight/mental-models.d.ts +0 -125
  516. package/dist/types/hindsight/state.d.ts +0 -99
  517. package/dist/types/hindsight/transcript.d.ts +0 -28
  518. package/dist/types/hooks/codex-native-hooks-config.d.ts +0 -29
  519. package/dist/types/hooks/native-skill-hook.d.ts +0 -28
  520. package/dist/types/hooks/skill-keywords.d.ts +0 -18
  521. package/dist/types/hooks/skill-state.d.ts +0 -93
  522. package/dist/types/i18n/index.d.ts +0 -38
  523. package/dist/types/i18n/messages/de.d.ts +0 -2
  524. package/dist/types/i18n/messages/de.messages.d.ts +0 -1
  525. package/dist/types/i18n/messages/de.settings.d.ts +0 -1
  526. package/dist/types/i18n/messages/en.d.ts +0 -81
  527. package/dist/types/i18n/messages/es.d.ts +0 -2
  528. package/dist/types/i18n/messages/es.messages.d.ts +0 -1
  529. package/dist/types/i18n/messages/es.settings.d.ts +0 -1
  530. package/dist/types/i18n/messages/fr.d.ts +0 -2
  531. package/dist/types/i18n/messages/fr.messages.d.ts +0 -1
  532. package/dist/types/i18n/messages/fr.settings.d.ts +0 -1
  533. package/dist/types/i18n/messages/ja.d.ts +0 -2
  534. package/dist/types/i18n/messages/ja.messages.d.ts +0 -1
  535. package/dist/types/i18n/messages/ja.settings.d.ts +0 -1
  536. package/dist/types/i18n/messages/ko.d.ts +0 -2
  537. package/dist/types/i18n/messages/ko.messages.d.ts +0 -1
  538. package/dist/types/i18n/messages/ko.settings.d.ts +0 -1
  539. package/dist/types/i18n/messages/zh.d.ts +0 -2
  540. package/dist/types/i18n/messages/zh.messages.d.ts +0 -1
  541. package/dist/types/i18n/messages/zh.settings.d.ts +0 -1
  542. package/dist/types/index.d.ts +0 -33
  543. package/dist/types/internal-urls/agent-protocol.d.ts +0 -12
  544. package/dist/types/internal-urls/artifact-protocol.d.ts +0 -6
  545. package/dist/types/internal-urls/docs-index.generated.d.ts +0 -2
  546. package/dist/types/internal-urls/index.d.ts +0 -20
  547. package/dist/types/internal-urls/issue-pr-protocol.d.ts +0 -17
  548. package/dist/types/internal-urls/json-query.d.ts +0 -30
  549. package/dist/types/internal-urls/local-protocol.d.ts +0 -39
  550. package/dist/types/internal-urls/mcp-protocol.d.ts +0 -12
  551. package/dist/types/internal-urls/memory-protocol.d.ts +0 -23
  552. package/dist/types/internal-urls/parse.d.ts +0 -19
  553. package/dist/types/internal-urls/registry-helpers.d.ts +0 -11
  554. package/dist/types/internal-urls/router.d.ts +0 -14
  555. package/dist/types/internal-urls/rule-protocol.d.ts +0 -6
  556. package/dist/types/internal-urls/skc-protocol.d.ts +0 -12
  557. package/dist/types/internal-urls/skill-protocol.d.ts +0 -13
  558. package/dist/types/internal-urls/types.d.ts +0 -109
  559. package/dist/types/lsp/client.d.ts +0 -66
  560. package/dist/types/lsp/clients/biome-client.d.ts +0 -16
  561. package/dist/types/lsp/clients/index.d.ts +0 -19
  562. package/dist/types/lsp/clients/lsp-linter-client.d.ts +0 -16
  563. package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -20
  564. package/dist/types/lsp/config.d.ts +0 -65
  565. package/dist/types/lsp/edits.d.ts +0 -23
  566. package/dist/types/lsp/index.d.ts +0 -130
  567. package/dist/types/lsp/lspmux.d.ts +0 -58
  568. package/dist/types/lsp/render.d.ts +0 -32
  569. package/dist/types/lsp/startup-events.d.ts +0 -12
  570. package/dist/types/lsp/types.d.ts +0 -306
  571. package/dist/types/lsp/utils.d.ts +0 -108
  572. package/dist/types/main.d.ts +0 -75
  573. package/dist/types/memories/index.d.ts +0 -28
  574. package/dist/types/memories/storage.d.ts +0 -110
  575. package/dist/types/memory-backend/index.d.ts +0 -4
  576. package/dist/types/memory-backend/local-backend.d.ts +0 -9
  577. package/dist/types/memory-backend/off-backend.d.ts +0 -7
  578. package/dist/types/memory-backend/resolve.d.ts +0 -15
  579. package/dist/types/memory-backend/types.d.ts +0 -61
  580. package/dist/types/migrate/action-planner.d.ts +0 -11
  581. package/dist/types/migrate/adapters/claude-code.d.ts +0 -2
  582. package/dist/types/migrate/adapters/codex.d.ts +0 -5
  583. package/dist/types/migrate/adapters/index.d.ts +0 -45
  584. package/dist/types/migrate/adapters/opencode.d.ts +0 -2
  585. package/dist/types/migrate/executor.d.ts +0 -2
  586. package/dist/types/migrate/mcp-mapper.d.ts +0 -20
  587. package/dist/types/migrate/report.d.ts +0 -18
  588. package/dist/types/migrate/skill-normalizer.d.ts +0 -27
  589. package/dist/types/migrate/types.d.ts +0 -126
  590. package/dist/types/modes/acp/acp-agent.d.ts +0 -61
  591. package/dist/types/modes/acp/acp-client-bridge.d.ts +0 -9
  592. package/dist/types/modes/acp/acp-event-mapper.d.ts +0 -34
  593. package/dist/types/modes/acp/acp-mode.d.ts +0 -5
  594. package/dist/types/modes/acp/index.d.ts +0 -2
  595. package/dist/types/modes/acp/terminal-auth.d.ts +0 -6
  596. package/dist/types/modes/bridge/auth.d.ts +0 -12
  597. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  598. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  599. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  600. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  601. package/dist/types/modes/components/agent-dashboard.d.ts +0 -21
  602. package/dist/types/modes/components/assistant-message.d.ts +0 -20
  603. package/dist/types/modes/components/bash-execution.d.ts +0 -29
  604. package/dist/types/modes/components/bordered-loader.d.ts +0 -11
  605. package/dist/types/modes/components/branch-summary-message.d.ts +0 -13
  606. package/dist/types/modes/components/btw-panel.d.ts +0 -16
  607. package/dist/types/modes/components/compaction-summary-message.d.ts +0 -13
  608. package/dist/types/modes/components/countdown-timer.d.ts +0 -14
  609. package/dist/types/modes/components/custom-editor.d.ts +0 -67
  610. package/dist/types/modes/components/custom-message.d.ts +0 -15
  611. package/dist/types/modes/components/custom-model-preset-wizard.d.ts +0 -12
  612. package/dist/types/modes/components/custom-provider-wizard.d.ts +0 -10
  613. package/dist/types/modes/components/diff.d.ts +0 -11
  614. package/dist/types/modes/components/dynamic-border.d.ts +0 -14
  615. package/dist/types/modes/components/eval-execution.d.ts +0 -23
  616. package/dist/types/modes/components/execution-shared.d.ts +0 -46
  617. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +0 -26
  618. package/dist/types/modes/components/extensions/extension-list.d.ts +0 -39
  619. package/dist/types/modes/components/extensions/index.d.ts +0 -8
  620. package/dist/types/modes/components/extensions/inspector-panel.d.ts +0 -8
  621. package/dist/types/modes/components/extensions/state-manager.d.ts +0 -50
  622. package/dist/types/modes/components/extensions/types.d.ts +0 -151
  623. package/dist/types/modes/components/footer.d.ts +0 -30
  624. package/dist/types/modes/components/history-search.d.ts +0 -7
  625. package/dist/types/modes/components/hook-editor.d.ts +0 -18
  626. package/dist/types/modes/components/hook-input.d.ts +0 -15
  627. package/dist/types/modes/components/hook-message.d.ts +0 -15
  628. package/dist/types/modes/components/hook-selector.d.ts +0 -53
  629. package/dist/types/modes/components/index.d.ts +0 -35
  630. package/dist/types/modes/components/jobs-overlay-model.d.ts +0 -31
  631. package/dist/types/modes/components/jobs-overlay.d.ts +0 -30
  632. package/dist/types/modes/components/keybinding-hints.d.ts +0 -40
  633. package/dist/types/modes/components/login-dialog.d.ts +0 -32
  634. package/dist/types/modes/components/message-frame.d.ts +0 -42
  635. package/dist/types/modes/components/model-selector.d.ts +0 -60
  636. package/dist/types/modes/components/oauth-selector.d.ts +0 -17
  637. package/dist/types/modes/components/plugin-selector.d.ts +0 -26
  638. package/dist/types/modes/components/plugin-settings.d.ts +0 -66
  639. package/dist/types/modes/components/provider-onboarding-selector.d.ts +0 -7
  640. package/dist/types/modes/components/queue-mode-selector.d.ts +0 -9
  641. package/dist/types/modes/components/queued-message-selector.d.ts +0 -12
  642. package/dist/types/modes/components/read-tool-group.d.ts +0 -30
  643. package/dist/types/modes/components/runtime-mcp-add-wizard.d.ts +0 -26
  644. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  645. package/dist/types/modes/components/session-selector.d.ts +0 -30
  646. package/dist/types/modes/components/settings-defs.d.ts +0 -50
  647. package/dist/types/modes/components/settings-selector.d.ts +0 -62
  648. package/dist/types/modes/components/show-images-selector.d.ts +0 -9
  649. package/dist/types/modes/components/skill-hud/render.d.ts +0 -2
  650. package/dist/types/modes/components/skill-message.d.ts +0 -10
  651. package/dist/types/modes/components/status-line/context-thresholds.d.ts +0 -4
  652. package/dist/types/modes/components/status-line/git-utils.d.ts +0 -28
  653. package/dist/types/modes/components/status-line/index.d.ts +0 -4
  654. package/dist/types/modes/components/status-line/presets.d.ts +0 -3
  655. package/dist/types/modes/components/status-line/segments.d.ts +0 -5
  656. package/dist/types/modes/components/status-line/separators.d.ts +0 -3
  657. package/dist/types/modes/components/status-line/token-rate.d.ts +0 -10
  658. package/dist/types/modes/components/status-line/types.d.ts +0 -77
  659. package/dist/types/modes/components/status-line.d.ts +0 -103
  660. package/dist/types/modes/components/theme-selector.d.ts +0 -10
  661. package/dist/types/modes/components/thinking-selector.d.ts +0 -15
  662. package/dist/types/modes/components/todo-reminder.d.ts +0 -13
  663. package/dist/types/modes/components/tool-execution.d.ts +0 -54
  664. package/dist/types/modes/components/tree-selector.d.ts +0 -31
  665. package/dist/types/modes/components/ttsr-notification.d.ts +0 -13
  666. package/dist/types/modes/components/two-column-body.d.ts +0 -9
  667. package/dist/types/modes/components/user-message-selector.d.ts +0 -28
  668. package/dist/types/modes/components/user-message.d.ts +0 -7
  669. package/dist/types/modes/components/visual-truncate.d.ts +0 -19
  670. package/dist/types/modes/components/welcome.d.ts +0 -45
  671. package/dist/types/modes/controllers/btw-controller.d.ts +0 -10
  672. package/dist/types/modes/controllers/command-controller-shared.d.ts +0 -47
  673. package/dist/types/modes/controllers/command-controller.d.ts +0 -40
  674. package/dist/types/modes/controllers/event-controller.d.ts +0 -17
  675. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -80
  676. package/dist/types/modes/controllers/input-controller.d.ts +0 -42
  677. package/dist/types/modes/controllers/runtime-mcp-command-controller.d.ts +0 -10
  678. package/dist/types/modes/controllers/selector-controller.d.ts +0 -67
  679. package/dist/types/modes/controllers/ssh-command-controller.d.ts +0 -10
  680. package/dist/types/modes/controllers/todo-command-controller.d.ts +0 -7
  681. package/dist/types/modes/emoji-autocomplete.d.ts +0 -16
  682. package/dist/types/modes/index.d.ts +0 -10
  683. package/dist/types/modes/interactive-mode.d.ts +0 -275
  684. package/dist/types/modes/jobs-observer.d.ts +0 -57
  685. package/dist/types/modes/oauth-manual-input.d.ts +0 -8
  686. package/dist/types/modes/print-mode.d.ts +0 -45
  687. package/dist/types/modes/prompt-action-autocomplete.d.ts +0 -50
  688. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  689. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  690. package/dist/types/modes/rpc/rpc-client.d.ts +0 -288
  691. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -85
  692. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  693. package/dist/types/modes/rpc/rpc-types.d.ts +0 -794
  694. package/dist/types/modes/runtime-init.d.ts +0 -21
  695. package/dist/types/modes/session-observer-registry.d.ts +0 -26
  696. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +0 -57
  697. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  698. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  699. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  700. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +0 -94
  701. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +0 -103
  702. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +0 -60
  703. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +0 -37
  704. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  705. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  706. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  707. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  708. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  709. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  710. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  711. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  712. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  713. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  714. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  715. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -161
  716. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -82
  717. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +0 -114
  718. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +0 -39
  719. package/dist/types/modes/shared.d.ts +0 -15
  720. package/dist/types/modes/slash-command-visibility.d.ts +0 -1
  721. package/dist/types/modes/theme/defaults/index.d.ts +0 -652
  722. package/dist/types/modes/theme/mermaid-cache.d.ts +0 -9
  723. package/dist/types/modes/theme/shimmer.d.ts +0 -38
  724. package/dist/types/modes/theme/theme.d.ts +0 -275
  725. package/dist/types/modes/tmux-scroll.d.ts +0 -18
  726. package/dist/types/modes/types.d.ts +0 -292
  727. package/dist/types/modes/utils/abort-message.d.ts +0 -4
  728. package/dist/types/modes/utils/context-usage.d.ts +0 -51
  729. package/dist/types/modes/utils/hotkeys-markdown.d.ts +0 -5
  730. package/dist/types/modes/utils/injected-user-submission.d.ts +0 -52
  731. package/dist/types/modes/utils/keybinding-matchers.d.ts +0 -10
  732. package/dist/types/modes/utils/terminal-bell.d.ts +0 -3
  733. package/dist/types/modes/utils/tools-markdown.d.ts +0 -5
  734. package/dist/types/modes/utils/ui-helpers.d.ts +0 -54
  735. package/dist/types/notifications/attachment-registry.d.ts +0 -17
  736. package/dist/types/notifications/chat-adapters.d.ts +0 -9
  737. package/dist/types/notifications/config-commands.d.ts +0 -64
  738. package/dist/types/notifications/config.d.ts +0 -98
  739. package/dist/types/notifications/daemon-paths.d.ts +0 -10
  740. package/dist/types/notifications/engine.d.ts +0 -59
  741. package/dist/types/notifications/helpers.d.ts +0 -55
  742. package/dist/types/notifications/html-format.d.ts +0 -75
  743. package/dist/types/notifications/index.d.ts +0 -192
  744. package/dist/types/notifications/lifecycle-commands.d.ts +0 -69
  745. package/dist/types/notifications/lifecycle-control-runtime.d.ts +0 -99
  746. package/dist/types/notifications/lifecycle-orchestrator.d.ts +0 -144
  747. package/dist/types/notifications/managed-daemon.d.ts +0 -48
  748. package/dist/types/notifications/operator-runtime.d.ts +0 -52
  749. package/dist/types/notifications/rate-limit-pool.d.ts +0 -95
  750. package/dist/types/notifications/recent-activity.d.ts +0 -39
  751. package/dist/types/notifications/reply-sent-store.d.ts +0 -53
  752. package/dist/types/notifications/rich-draft.d.ts +0 -68
  753. package/dist/types/notifications/rich-render.d.ts +0 -90
  754. package/dist/types/notifications/telegram-cli.d.ts +0 -19
  755. package/dist/types/notifications/telegram-daemon-cli.d.ts +0 -28
  756. package/dist/types/notifications/telegram-daemon-control.d.ts +0 -64
  757. package/dist/types/notifications/telegram-daemon.d.ts +0 -429
  758. package/dist/types/notifications/telegram-reference.d.ts +0 -119
  759. package/dist/types/notifications/threaded-inbound.d.ts +0 -77
  760. package/dist/types/notifications/threaded-render.d.ts +0 -88
  761. package/dist/types/notifications/topic-registry.d.ts +0 -69
  762. package/dist/types/plan-mode/approved-plan.d.ts +0 -49
  763. package/dist/types/plan-mode/state.d.ts +0 -6
  764. package/dist/types/registry/agent-registry.d.ts +0 -62
  765. package/dist/types/reminders/star-reminder.d.ts +0 -115
  766. package/dist/types/research-plan/index.d.ts +0 -1
  767. package/dist/types/research-plan/ledger.d.ts +0 -33
  768. package/dist/types/rlm/artifacts.d.ts +0 -9
  769. package/dist/types/rlm/complete-research-tool.d.ts +0 -35
  770. package/dist/types/rlm/data-context.d.ts +0 -6
  771. package/dist/types/rlm/index.d.ts +0 -47
  772. package/dist/types/rlm/notebook.d.ts +0 -12
  773. package/dist/types/rlm/preset.d.ts +0 -23
  774. package/dist/types/rlm/python-tool.d.ts +0 -16
  775. package/dist/types/rlm/report.d.ts +0 -14
  776. package/dist/types/rlm/types.d.ts +0 -37
  777. package/dist/types/runtime/process-lifecycle.d.ts +0 -108
  778. package/dist/types/runtime-api-key.d.ts +0 -7
  779. package/dist/types/runtime-credential-selector.d.ts +0 -7
  780. package/dist/types/runtime-mcp/client.d.ts +0 -74
  781. package/dist/types/runtime-mcp/config-writer.d.ts +0 -88
  782. package/dist/types/runtime-mcp/config.d.ts +0 -77
  783. package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
  784. package/dist/types/runtime-mcp/index.d.ts +0 -18
  785. package/dist/types/runtime-mcp/json-rpc.d.ts +0 -22
  786. package/dist/types/runtime-mcp/loader.d.ts +0 -45
  787. package/dist/types/runtime-mcp/manager.d.ts +0 -195
  788. package/dist/types/runtime-mcp/oauth-discovery.d.ts +0 -40
  789. package/dist/types/runtime-mcp/oauth-flow.d.ts +0 -59
  790. package/dist/types/runtime-mcp/render.d.ts +0 -25
  791. package/dist/types/runtime-mcp/smithery-auth.d.ts +0 -16
  792. package/dist/types/runtime-mcp/smithery-connect.d.ts +0 -38
  793. package/dist/types/runtime-mcp/smithery-registry.d.ts +0 -51
  794. package/dist/types/runtime-mcp/tool-bridge.d.ts +0 -86
  795. package/dist/types/runtime-mcp/tool-cache.d.ts +0 -8
  796. package/dist/types/runtime-mcp/transports/http.d.ts +0 -36
  797. package/dist/types/runtime-mcp/transports/index.d.ts +0 -5
  798. package/dist/types/runtime-mcp/transports/stdio.d.ts +0 -29
  799. package/dist/types/runtime-mcp/types.d.ts +0 -348
  800. package/dist/types/sdk.d.ts +0 -254
  801. package/dist/types/secrets/index.d.ts +0 -9
  802. package/dist/types/secrets/obfuscator.d.ts +0 -23
  803. package/dist/types/secrets/regex.d.ts +0 -2
  804. package/dist/types/session/agent-session.d.ts +0 -1185
  805. package/dist/types/session/agent-storage.d.ts +0 -101
  806. package/dist/types/session/artifacts.d.ts +0 -64
  807. package/dist/types/session/auth-broker-config.d.ts +0 -13
  808. package/dist/types/session/auth-storage.d.ts +0 -6
  809. package/dist/types/session/blob-store.d.ts +0 -160
  810. package/dist/types/session/client-bridge.d.ts +0 -88
  811. package/dist/types/session/contribution-prep.d.ts +0 -47
  812. package/dist/types/session/file-mention-pruning.d.ts +0 -8
  813. package/dist/types/session/history-storage.d.ts +0 -16
  814. package/dist/types/session/messages.d.ts +0 -169
  815. package/dist/types/session/session-dump-format.d.ts +0 -22
  816. package/dist/types/session/session-manager.d.ts +0 -660
  817. package/dist/types/session/session-storage.d.ts +0 -88
  818. package/dist/types/session/streaming-output.d.ts +0 -209
  819. package/dist/types/session/tool-choice-queue.d.ts +0 -84
  820. package/dist/types/session/yield-queue.d.ts +0 -24
  821. package/dist/types/setup/credential-auto-import.d.ts +0 -63
  822. package/dist/types/setup/credential-import.d.ts +0 -82
  823. package/dist/types/setup/hermes-setup.d.ts +0 -78
  824. package/dist/types/setup/host-plugin-setup.d.ts +0 -39
  825. package/dist/types/setup/model-onboarding-guidance.d.ts +0 -9
  826. package/dist/types/setup/provider-onboarding.d.ts +0 -52
  827. package/dist/types/skc-runtime/cli-write-receipt.d.ts +0 -24
  828. package/dist/types/skc-runtime/deep-interview-ambiguity.d.ts +0 -39
  829. package/dist/types/skc-runtime/deep-interview-recorder.d.ts +0 -114
  830. package/dist/types/skc-runtime/deep-interview-runtime.d.ts +0 -36
  831. package/dist/types/skc-runtime/deep-interview-state.d.ts +0 -127
  832. package/dist/types/skc-runtime/gc-render.d.ts +0 -6
  833. package/dist/types/skc-runtime/gc-runtime.d.ts +0 -134
  834. package/dist/types/skc-runtime/goal-mode-request.d.ts +0 -53
  835. package/dist/types/skc-runtime/launch-tmux.d.ts +0 -78
  836. package/dist/types/skc-runtime/launch-worktree.d.ts +0 -46
  837. package/dist/types/skc-runtime/ledger-event-renderer.d.ts +0 -68
  838. package/dist/types/skc-runtime/psmux-detect.d.ts +0 -78
  839. package/dist/types/skc-runtime/ralplan-runtime.d.ts +0 -26
  840. package/dist/types/skc-runtime/restricted-role-agent-bash.d.ts +0 -3
  841. package/dist/types/skc-runtime/session-layout.d.ts +0 -59
  842. package/dist/types/skc-runtime/session-resolution.d.ts +0 -47
  843. package/dist/types/skc-runtime/session-state-sidecar.d.ts +0 -39
  844. package/dist/types/skc-runtime/state-graph.d.ts +0 -4
  845. package/dist/types/skc-runtime/state-migrations.d.ts +0 -33
  846. package/dist/types/skc-runtime/state-renderer.d.ts +0 -70
  847. package/dist/types/skc-runtime/state-runtime.d.ts +0 -38
  848. package/dist/types/skc-runtime/state-schema.d.ts +0 -319
  849. package/dist/types/skc-runtime/state-validation.d.ts +0 -6
  850. package/dist/types/skc-runtime/state-writer.d.ts +0 -244
  851. package/dist/types/skc-runtime/team-gc.d.ts +0 -7
  852. package/dist/types/skc-runtime/team-runtime.d.ts +0 -355
  853. package/dist/types/skc-runtime/tmux-common.d.ts +0 -105
  854. package/dist/types/skc-runtime/tmux-gc.d.ts +0 -7
  855. package/dist/types/skc-runtime/tmux-sessions.d.ts +0 -62
  856. package/dist/types/skc-runtime/ultragoal-guard.d.ts +0 -93
  857. package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +0 -42
  858. package/dist/types/skc-runtime/ultragoal-runtime.d.ts +0 -410
  859. package/dist/types/skc-runtime/workflow-command-ref.d.ts +0 -43
  860. package/dist/types/skc-runtime/workflow-manifest.d.ts +0 -54
  861. package/dist/types/skill-state/active-state.d.ts +0 -126
  862. package/dist/types/skill-state/canonical-skills.d.ts +0 -3
  863. package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +0 -38
  864. package/dist/types/skill-state/initial-phase.d.ts +0 -12
  865. package/dist/types/skill-state/workflow-hud.d.ts +0 -83
  866. package/dist/types/skill-state/workflow-state-contract.d.ts +0 -57
  867. package/dist/types/skill-state/workflow-state-version.d.ts +0 -3
  868. package/dist/types/slash-commands/acp-builtins.d.ts +0 -18
  869. package/dist/types/slash-commands/builtin-registry.d.ts +0 -24
  870. package/dist/types/slash-commands/helpers/context-report.d.ts +0 -7
  871. package/dist/types/slash-commands/helpers/fast-status-report.d.ts +0 -82
  872. package/dist/types/slash-commands/helpers/format.d.ts +0 -10
  873. package/dist/types/slash-commands/helpers/mcp.d.ts +0 -3
  874. package/dist/types/slash-commands/helpers/parse.d.ts +0 -33
  875. package/dist/types/slash-commands/helpers/ssh.d.ts +0 -3
  876. package/dist/types/slash-commands/helpers/todo.d.ts +0 -3
  877. package/dist/types/slash-commands/helpers/usage-report.d.ts +0 -7
  878. package/dist/types/slash-commands/types.d.ts +0 -120
  879. package/dist/types/ssh/config-writer.d.ts +0 -49
  880. package/dist/types/ssh/connection-manager.d.ts +0 -33
  881. package/dist/types/ssh/ssh-executor.d.ts +0 -37
  882. package/dist/types/ssh/sshfs-mount.d.ts +0 -6
  883. package/dist/types/ssh/utils.d.ts +0 -2
  884. package/dist/types/stt/downloader.d.ts +0 -9
  885. package/dist/types/stt/index.d.ts +0 -3
  886. package/dist/types/stt/recorder.d.ts +0 -13
  887. package/dist/types/stt/setup.d.ts +0 -18
  888. package/dist/types/stt/stt-controller.d.ts +0 -16
  889. package/dist/types/stt/transcriber.d.ts +0 -16
  890. package/dist/types/system-prompt.d.ts +0 -118
  891. package/dist/types/task/agents.d.ts +0 -28
  892. package/dist/types/task/commands.d.ts +0 -35
  893. package/dist/types/task/discovery.d.ts +0 -19
  894. package/dist/types/task/executor.d.ts +0 -124
  895. package/dist/types/task/fork-context-advisory.d.ts +0 -13
  896. package/dist/types/task/fork-context-budget.d.ts +0 -7
  897. package/dist/types/task/id.d.ts +0 -7
  898. package/dist/types/task/index.d.ts +0 -43
  899. package/dist/types/task/name-generator.d.ts +0 -16
  900. package/dist/types/task/output-manager.d.ts +0 -36
  901. package/dist/types/task/parallel.d.ts +0 -34
  902. package/dist/types/task/receipt.d.ts +0 -87
  903. package/dist/types/task/render.d.ts +0 -28
  904. package/dist/types/task/roi-reconciliation.d.ts +0 -27
  905. package/dist/types/task/simple-mode.d.ts +0 -8
  906. package/dist/types/task/skc-command.d.ts +0 -7
  907. package/dist/types/task/spawn-gate.d.ts +0 -29
  908. package/dist/types/task/subprocess-tool-registry.d.ts +0 -72
  909. package/dist/types/task/token-log.d.ts +0 -30
  910. package/dist/types/task/token-log.test.d.ts +0 -1
  911. package/dist/types/task/types.d.ts +0 -508
  912. package/dist/types/task/worktree.d.ts +0 -94
  913. package/dist/types/thinking-metadata.d.ts +0 -16
  914. package/dist/types/thinking.d.ts +0 -22
  915. package/dist/types/tool-discovery/tool-index.d.ts +0 -112
  916. package/dist/types/tools/archive-reader.d.ts +0 -40
  917. package/dist/types/tools/ask-answer-registry.d.ts +0 -13
  918. package/dist/types/tools/ask.d.ts +0 -123
  919. package/dist/types/tools/ast-edit.d.ts +0 -77
  920. package/dist/types/tools/ast-grep.d.ts +0 -69
  921. package/dist/types/tools/auto-generated-guard.d.ts +0 -17
  922. package/dist/types/tools/bash-allowed-prefixes.d.ts +0 -10
  923. package/dist/types/tools/bash-command-fixup.d.ts +0 -11
  924. package/dist/types/tools/bash-interactive.d.ts +0 -16
  925. package/dist/types/tools/bash-interceptor.d.ts +0 -24
  926. package/dist/types/tools/bash-pty-selection.d.ts +0 -7
  927. package/dist/types/tools/bash-skill-urls.d.ts +0 -31
  928. package/dist/types/tools/bash.d.ts +0 -157
  929. package/dist/types/tools/bisect.d.ts +0 -81
  930. package/dist/types/tools/browser/actions.d.ts +0 -54
  931. package/dist/types/tools/browser/attach.d.ts +0 -50
  932. package/dist/types/tools/browser/launch.d.ts +0 -62
  933. package/dist/types/tools/browser/readable.d.ts +0 -17
  934. package/dist/types/tools/browser/registry.d.ts +0 -57
  935. package/dist/types/tools/browser/render.d.ts +0 -53
  936. package/dist/types/tools/browser/tab-protocol.d.ts +0 -144
  937. package/dist/types/tools/browser/tab-supervisor.d.ts +0 -103
  938. package/dist/types/tools/browser/tab-worker-entry.d.ts +0 -1
  939. package/dist/types/tools/browser/tab-worker.d.ts +0 -19
  940. package/dist/types/tools/browser.d.ts +0 -211
  941. package/dist/types/tools/calculator.d.ts +0 -76
  942. package/dist/types/tools/checkpoint.d.ts +0 -63
  943. package/dist/types/tools/composer-bash-policy.d.ts +0 -14
  944. package/dist/types/tools/computer/render.d.ts +0 -17
  945. package/dist/types/tools/computer-gc.d.ts +0 -23
  946. package/dist/types/tools/computer.d.ts +0 -465
  947. package/dist/types/tools/conflict-detect.d.ts +0 -205
  948. package/dist/types/tools/context.d.ts +0 -19
  949. package/dist/types/tools/cron.d.ts +0 -91
  950. package/dist/types/tools/debug.d.ts +0 -209
  951. package/dist/types/tools/eval.d.ts +0 -108
  952. package/dist/types/tools/fetch.d.ts +0 -84
  953. package/dist/types/tools/file-recorder.d.ts +0 -13
  954. package/dist/types/tools/find.d.ts +0 -95
  955. package/dist/types/tools/fs-cache-invalidation.d.ts +0 -15
  956. package/dist/types/tools/gh-format.d.ts +0 -6
  957. package/dist/types/tools/gh-renderer.d.ts +0 -25
  958. package/dist/types/tools/gh.d.ts +0 -356
  959. package/dist/types/tools/github-cache.d.ts +0 -103
  960. package/dist/types/tools/grouped-file-output.d.ts +0 -36
  961. package/dist/types/tools/hindsight-recall.d.ts +0 -21
  962. package/dist/types/tools/hindsight-reflect.d.ts +0 -23
  963. package/dist/types/tools/hindsight-retain.d.ts +0 -27
  964. package/dist/types/tools/image-gen.d.ts +0 -79
  965. package/dist/types/tools/index.d.ts +0 -319
  966. package/dist/types/tools/irc.d.ts +0 -79
  967. package/dist/types/tools/job.d.ts +0 -78
  968. package/dist/types/tools/json-tree.d.ts +0 -23
  969. package/dist/types/tools/jtd-to-json-schema.d.ts +0 -29
  970. package/dist/types/tools/jtd-to-typescript.d.ts +0 -26
  971. package/dist/types/tools/jtd-utils.d.ts +0 -42
  972. package/dist/types/tools/list-limit.d.ts +0 -12
  973. package/dist/types/tools/match-line-format.d.ts +0 -11
  974. package/dist/types/tools/monitor.d.ts +0 -54
  975. package/dist/types/tools/output-meta.d.ts +0 -204
  976. package/dist/types/tools/path-utils.d.ts +0 -147
  977. package/dist/types/tools/plan-mode-guard.d.ts +0 -18
  978. package/dist/types/tools/read.d.ts +0 -85
  979. package/dist/types/tools/recipe/index.d.ts +0 -45
  980. package/dist/types/tools/recipe/render.d.ts +0 -36
  981. package/dist/types/tools/recipe/runner.d.ts +0 -60
  982. package/dist/types/tools/recipe/runners/cargo.d.ts +0 -16
  983. package/dist/types/tools/recipe/runners/index.d.ts +0 -2
  984. package/dist/types/tools/recipe/runners/just.d.ts +0 -2
  985. package/dist/types/tools/recipe/runners/make.d.ts +0 -2
  986. package/dist/types/tools/recipe/runners/pkg.d.ts +0 -2
  987. package/dist/types/tools/recipe/runners/task.d.ts +0 -2
  988. package/dist/types/tools/render-mermaid.d.ts +0 -37
  989. package/dist/types/tools/render-utils.d.ts +0 -158
  990. package/dist/types/tools/renderers.d.ts +0 -26
  991. package/dist/types/tools/resolve.d.ts +0 -80
  992. package/dist/types/tools/resource-gc.d.ts +0 -54
  993. package/dist/types/tools/review.d.ts +0 -63
  994. package/dist/types/tools/search-tool-bm25.d.ts +0 -65
  995. package/dist/types/tools/search.d.ts +0 -93
  996. package/dist/types/tools/skill-discovery.d.ts +0 -40
  997. package/dist/types/tools/skill.d.ts +0 -47
  998. package/dist/types/tools/sqlite-reader.d.ts +0 -94
  999. package/dist/types/tools/ssh.d.ts +0 -67
  1000. package/dist/types/tools/subagent-render.d.ts +0 -31
  1001. package/dist/types/tools/subagent.d.ts +0 -117
  1002. package/dist/types/tools/telegram-send.d.ts +0 -32
  1003. package/dist/types/tools/todo-write.d.ts +0 -120
  1004. package/dist/types/tools/tool-errors.d.ts +0 -33
  1005. package/dist/types/tools/tool-result.d.ts +0 -30
  1006. package/dist/types/tools/tool-timeouts.d.ts +0 -56
  1007. package/dist/types/tools/ultragoal-ask-guard.d.ts +0 -12
  1008. package/dist/types/tools/vim.d.ts +0 -58
  1009. package/dist/types/tools/write.d.ts +0 -59
  1010. package/dist/types/tools/yield.d.ts +0 -25
  1011. package/dist/types/tui/code-cell.d.ts +0 -32
  1012. package/dist/types/tui/file-list.d.ts +0 -22
  1013. package/dist/types/tui/hyperlink.d.ts +0 -42
  1014. package/dist/types/tui/index.d.ts +0 -11
  1015. package/dist/types/tui/output-block.d.ts +0 -28
  1016. package/dist/types/tui/status-line.d.ts +0 -18
  1017. package/dist/types/tui/tree-list.d.ts +0 -19
  1018. package/dist/types/tui/types.d.ts +0 -13
  1019. package/dist/types/tui/utils.d.ts +0 -36
  1020. package/dist/types/utils/changelog.d.ts +0 -37
  1021. package/dist/types/utils/clipboard.d.ts +0 -22
  1022. package/dist/types/utils/cmux-workspace.d.ts +0 -52
  1023. package/dist/types/utils/command-args.d.ts +0 -9
  1024. package/dist/types/utils/commit-message-generator.d.ts +0 -7
  1025. package/dist/types/utils/edit-mode.d.ts +0 -13
  1026. package/dist/types/utils/event-bus.d.ts +0 -6
  1027. package/dist/types/utils/external-editor.d.ts +0 -17
  1028. package/dist/types/utils/file-display-mode.d.ts +0 -27
  1029. package/dist/types/utils/file-mentions.d.ts +0 -25
  1030. package/dist/types/utils/git.d.ts +0 -393
  1031. package/dist/types/utils/image-loading.d.ts +0 -26
  1032. package/dist/types/utils/image-resize.d.ts +0 -39
  1033. package/dist/types/utils/lang-from-path.d.ts +0 -8
  1034. package/dist/types/utils/markit.d.ts +0 -7
  1035. package/dist/types/utils/open.d.ts +0 -2
  1036. package/dist/types/utils/pasted-image-path.d.ts +0 -30
  1037. package/dist/types/utils/session-color.d.ts +0 -10
  1038. package/dist/types/utils/shell-snapshot.d.ts +0 -5
  1039. package/dist/types/utils/sixel.d.ts +0 -21
  1040. package/dist/types/utils/title-generator.d.ts +0 -31
  1041. package/dist/types/utils/tool-choice.d.ts +0 -20
  1042. package/dist/types/utils/tools-manager.d.ts +0 -9
  1043. package/dist/types/vim/buffer.d.ts +0 -41
  1044. package/dist/types/vim/commands.d.ts +0 -6
  1045. package/dist/types/vim/engine.d.ts +0 -47
  1046. package/dist/types/vim/parser.d.ts +0 -3
  1047. package/dist/types/vim/render.d.ts +0 -25
  1048. package/dist/types/vim/types.d.ts +0 -182
  1049. package/dist/types/web/insane/bridge.d.ts +0 -103
  1050. package/dist/types/web/insane/url-guard.d.ts +0 -25
  1051. package/dist/types/web/kagi.d.ts +0 -23
  1052. package/dist/types/web/parallel.d.ts +0 -58
  1053. package/dist/types/web/scrapers/artifacthub.d.ts +0 -6
  1054. package/dist/types/web/scrapers/arxiv.d.ts +0 -5
  1055. package/dist/types/web/scrapers/aur.d.ts +0 -5
  1056. package/dist/types/web/scrapers/biorxiv.d.ts +0 -5
  1057. package/dist/types/web/scrapers/bluesky.d.ts +0 -5
  1058. package/dist/types/web/scrapers/brew.d.ts +0 -5
  1059. package/dist/types/web/scrapers/cheatsh.d.ts +0 -8
  1060. package/dist/types/web/scrapers/chocolatey.d.ts +0 -5
  1061. package/dist/types/web/scrapers/choosealicense.d.ts +0 -2
  1062. package/dist/types/web/scrapers/cisa-kev.d.ts +0 -5
  1063. package/dist/types/web/scrapers/clojars.d.ts +0 -5
  1064. package/dist/types/web/scrapers/coingecko.d.ts +0 -5
  1065. package/dist/types/web/scrapers/crates-io.d.ts +0 -5
  1066. package/dist/types/web/scrapers/crossref.d.ts +0 -2
  1067. package/dist/types/web/scrapers/devto.d.ts +0 -5
  1068. package/dist/types/web/scrapers/discogs.d.ts +0 -8
  1069. package/dist/types/web/scrapers/discourse.d.ts +0 -5
  1070. package/dist/types/web/scrapers/dockerhub.d.ts +0 -5
  1071. package/dist/types/web/scrapers/docs-rs.d.ts +0 -2
  1072. package/dist/types/web/scrapers/fdroid.d.ts +0 -5
  1073. package/dist/types/web/scrapers/firefox-addons.d.ts +0 -2
  1074. package/dist/types/web/scrapers/flathub.d.ts +0 -2
  1075. package/dist/types/web/scrapers/github-gist.d.ts +0 -5
  1076. package/dist/types/web/scrapers/github.d.ts +0 -12
  1077. package/dist/types/web/scrapers/gitlab.d.ts +0 -5
  1078. package/dist/types/web/scrapers/go-pkg.d.ts +0 -5
  1079. package/dist/types/web/scrapers/hackage.d.ts +0 -5
  1080. package/dist/types/web/scrapers/hackernews.d.ts +0 -2
  1081. package/dist/types/web/scrapers/hex.d.ts +0 -5
  1082. package/dist/types/web/scrapers/huggingface.d.ts +0 -2
  1083. package/dist/types/web/scrapers/iacr.d.ts +0 -5
  1084. package/dist/types/web/scrapers/index.d.ts +0 -84
  1085. package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +0 -2
  1086. package/dist/types/web/scrapers/lemmy.d.ts +0 -2
  1087. package/dist/types/web/scrapers/lobsters.d.ts +0 -5
  1088. package/dist/types/web/scrapers/mastodon.d.ts +0 -5
  1089. package/dist/types/web/scrapers/maven.d.ts +0 -6
  1090. package/dist/types/web/scrapers/mdn.d.ts +0 -2
  1091. package/dist/types/web/scrapers/metacpan.d.ts +0 -5
  1092. package/dist/types/web/scrapers/musicbrainz.d.ts +0 -5
  1093. package/dist/types/web/scrapers/npm.d.ts +0 -5
  1094. package/dist/types/web/scrapers/nuget.d.ts +0 -5
  1095. package/dist/types/web/scrapers/nvd.d.ts +0 -5
  1096. package/dist/types/web/scrapers/ollama.d.ts +0 -2
  1097. package/dist/types/web/scrapers/open-vsx.d.ts +0 -5
  1098. package/dist/types/web/scrapers/opencorporates.d.ts +0 -5
  1099. package/dist/types/web/scrapers/openlibrary.d.ts +0 -5
  1100. package/dist/types/web/scrapers/orcid.d.ts +0 -5
  1101. package/dist/types/web/scrapers/osv.d.ts +0 -5
  1102. package/dist/types/web/scrapers/packagist.d.ts +0 -5
  1103. package/dist/types/web/scrapers/pub-dev.d.ts +0 -5
  1104. package/dist/types/web/scrapers/pubmed.d.ts +0 -5
  1105. package/dist/types/web/scrapers/pypi.d.ts +0 -5
  1106. package/dist/types/web/scrapers/rawg.d.ts +0 -2
  1107. package/dist/types/web/scrapers/readthedocs.d.ts +0 -2
  1108. package/dist/types/web/scrapers/reddit.d.ts +0 -5
  1109. package/dist/types/web/scrapers/repology.d.ts +0 -5
  1110. package/dist/types/web/scrapers/rfc.d.ts +0 -5
  1111. package/dist/types/web/scrapers/rubygems.d.ts +0 -5
  1112. package/dist/types/web/scrapers/searchcode.d.ts +0 -2
  1113. package/dist/types/web/scrapers/sec-edgar.d.ts +0 -5
  1114. package/dist/types/web/scrapers/semantic-scholar.d.ts +0 -2
  1115. package/dist/types/web/scrapers/snapcraft.d.ts +0 -2
  1116. package/dist/types/web/scrapers/sourcegraph.d.ts +0 -2
  1117. package/dist/types/web/scrapers/spdx.d.ts +0 -5
  1118. package/dist/types/web/scrapers/spotify.d.ts +0 -8
  1119. package/dist/types/web/scrapers/stackoverflow.d.ts +0 -6
  1120. package/dist/types/web/scrapers/terraform.d.ts +0 -5
  1121. package/dist/types/web/scrapers/tldr.d.ts +0 -7
  1122. package/dist/types/web/scrapers/twitter.d.ts +0 -5
  1123. package/dist/types/web/scrapers/types.d.ts +0 -83
  1124. package/dist/types/web/scrapers/utils.d.ts +0 -32
  1125. package/dist/types/web/scrapers/vimeo.d.ts +0 -5
  1126. package/dist/types/web/scrapers/vscode-marketplace.d.ts +0 -5
  1127. package/dist/types/web/scrapers/w3c.d.ts +0 -2
  1128. package/dist/types/web/scrapers/wikidata.d.ts +0 -5
  1129. package/dist/types/web/scrapers/wikipedia.d.ts +0 -5
  1130. package/dist/types/web/scrapers/youtube.d.ts +0 -13
  1131. package/dist/types/web/search/index.d.ts +0 -118
  1132. package/dist/types/web/search/provider.d.ts +0 -55
  1133. package/dist/types/web/search/providers/anthropic.d.ts +0 -32
  1134. package/dist/types/web/search/providers/base.d.ts +0 -90
  1135. package/dist/types/web/search/providers/brave.d.ts +0 -27
  1136. package/dist/types/web/search/providers/codex.d.ts +0 -35
  1137. package/dist/types/web/search/providers/duckduckgo.d.ts +0 -57
  1138. package/dist/types/web/search/providers/exa.d.ts +0 -52
  1139. package/dist/types/web/search/providers/gemini.d.ts +0 -57
  1140. package/dist/types/web/search/providers/insane.d.ts +0 -53
  1141. package/dist/types/web/search/providers/jina.d.ts +0 -26
  1142. package/dist/types/web/search/providers/kagi.d.ts +0 -24
  1143. package/dist/types/web/search/providers/kimi.d.ts +0 -27
  1144. package/dist/types/web/search/providers/openai-compatible.d.ts +0 -9
  1145. package/dist/types/web/search/providers/parallel.d.ts +0 -15
  1146. package/dist/types/web/search/providers/perplexity.d.ts +0 -38
  1147. package/dist/types/web/search/providers/searxng.d.ts +0 -44
  1148. package/dist/types/web/search/providers/synthetic.d.ts +0 -21
  1149. package/dist/types/web/search/providers/tavily.d.ts +0 -29
  1150. package/dist/types/web/search/providers/text-citations.d.ts +0 -23
  1151. package/dist/types/web/search/providers/utils.d.ts +0 -88
  1152. package/dist/types/web/search/providers/xai.d.ts +0 -64
  1153. package/dist/types/web/search/providers/zai.d.ts +0 -28
  1154. package/dist/types/web/search/render.d.ts +0 -36
  1155. package/dist/types/web/search/types.d.ts +0 -372
  1156. package/dist/types/web/search/utils.d.ts +0 -4
  1157. package/dist/types/workflow/workflow-intent-diff.d.ts +0 -25
  1158. package/dist/types/workflow/workflow-intent-report-consumer.d.ts +0 -50
  1159. package/dist/types/workflow/workflow-intent-report-schema.d.ts +0 -2
  1160. package/dist/types/workflow/workflow-intent-report.d.ts +0 -48
  1161. package/dist/types/workspace-tree.d.ts +0 -42
@@ -1,7 +1,9 @@
1
+ import * as crypto from "node:crypto";
1
2
  import * as fs from "node:fs";
3
+
2
4
  import * as os from "node:os";
3
5
  import * as path from "node:path";
4
- import type { AgentMessage } from "@sayknow-cli/agent-core";
6
+ import { type AgentMessage, canContinuePersistedHistory } from "@sayknow-cli/agent-core";
5
7
  import type {
6
8
  ImageContent,
7
9
  Message,
@@ -45,8 +47,6 @@ import {
45
47
  MemoryBlobStore,
46
48
  parseBlobRef,
47
49
  ResidentBlobMissingError,
48
- resolveImageData,
49
- resolveImageDataUrl,
50
50
  resolveResidentImageDataSync,
51
51
  resolveResidentImageDataUrlSync,
52
52
  resolveTextBlobSync,
@@ -63,7 +63,15 @@ import {
63
63
  sanitizeRehydratedOpenAIResponsesAssistantMessage,
64
64
  stripInternalDetailsFields,
65
65
  } from "./messages";
66
- import type { SessionStorage, SessionStorageWriter } from "./session-storage";
66
+ import type {
67
+ SessionStorage,
68
+ SessionStorageSnapshot,
69
+ SessionStorageStat,
70
+ SessionStorageWriter,
71
+ SessionStorageWriterCloseState,
72
+ VerifiedSessionDeleteResult,
73
+ VerifiedSessionDeleteTarget,
74
+ } from "./session-storage";
67
75
  import { FileSessionStorage, MemorySessionStorage } from "./session-storage";
68
76
 
69
77
  export const CURRENT_SESSION_VERSION = 3;
@@ -147,6 +155,53 @@ export interface SessionMessageEntry extends SessionEntryBase {
147
155
  evictedContent?: EvictedContentMarker;
148
156
  }
149
157
 
158
+ const sessionMessageEntryIds = new WeakMap<object, string>();
159
+ const sessionMessageViewportAnchorIds = new WeakMap<object, string>();
160
+ const sessionMessageObservationIds = new WeakMap<object, string>();
161
+
162
+ export function associateSessionMessageEntryId(message: AgentMessage, entryId: string): void {
163
+ sessionMessageEntryIds.set(message, entryId);
164
+ }
165
+
166
+ export function getSessionMessageEntryId(message: AgentMessage): string | undefined {
167
+ return sessionMessageEntryIds.get(message);
168
+ }
169
+
170
+ export function associateSessionMessageObservationId(message: AgentMessage, observationId: string): string {
171
+ const existing = sessionMessageObservationIds.get(message);
172
+ if (existing) return existing;
173
+ sessionMessageObservationIds.set(message, observationId);
174
+ return observationId;
175
+ }
176
+
177
+ export function getSessionMessageObservationId(message: AgentMessage): string | undefined {
178
+ return sessionMessageObservationIds.get(message);
179
+ }
180
+
181
+ export function associateSessionMessageViewportAnchorId(message: AgentMessage, anchorId: string): void {
182
+ sessionMessageViewportAnchorIds.set(message, anchorId);
183
+ }
184
+
185
+ export function getSessionMessageViewportAnchorId(message: AgentMessage): string | undefined {
186
+ return sessionMessageViewportAnchorIds.get(message);
187
+ }
188
+
189
+ export function transferSessionMessageIdentity(source: AgentMessage[], target: AgentMessage[]): void {
190
+ if (source.length !== target.length) {
191
+ throw new Error(
192
+ `Cannot transfer session message identity across ${source.length} source and ${target.length} target messages`,
193
+ );
194
+ }
195
+ for (let index = 0; index < source.length; index++) {
196
+ const entryId = getSessionMessageEntryId(source[index]);
197
+ if (entryId) associateSessionMessageEntryId(target[index], entryId);
198
+ const observationId = getSessionMessageObservationId(source[index]);
199
+ if (observationId) associateSessionMessageObservationId(target[index], observationId);
200
+ const anchorId = getSessionMessageViewportAnchorId(source[index]);
201
+ if (anchorId) associateSessionMessageViewportAnchorId(target[index], anchorId);
202
+ }
203
+ }
204
+
150
205
  export interface ThinkingLevelChangeEntry extends SessionEntryBase {
151
206
  type: "thinking_level_change";
152
207
  thinkingLevel?: string | null;
@@ -334,6 +389,48 @@ export interface SessionContext {
334
389
  modeData?: Record<string, unknown>;
335
390
  }
336
391
 
392
+ /** Immutable fingerprint captured during read-only resume inspection. */
393
+ export interface ResumeSessionIdentity {
394
+ canonicalPath: string;
395
+ sessionId: string;
396
+ dev: bigint;
397
+ ino: bigint;
398
+ size: number;
399
+ mtimeMs: number;
400
+ mtimeNs: bigint;
401
+ sha256: string;
402
+ }
403
+
404
+ export interface ResumeTailResumable {
405
+ kind: "resumable";
406
+ identity: ResumeSessionIdentity;
407
+ }
408
+
409
+ export interface ResumeTailTerminal {
410
+ kind: "terminal";
411
+ identity: ResumeSessionIdentity;
412
+ }
413
+
414
+ export interface ResumeTailError {
415
+ kind: "error";
416
+ reason: "missing" | "malformed" | "unstable" | "read-failed";
417
+ }
418
+
419
+ export type ResumeTailInspection = ResumeTailResumable | ResumeTailTerminal | ResumeTailError;
420
+
421
+ export interface StrictSessionOpenSuccess {
422
+ kind: "opened";
423
+ manager: SessionManager;
424
+ }
425
+
426
+ export interface StrictSessionOpenFailure {
427
+ kind: "error";
428
+ reason: ResumeTailError["reason"] | "identity-mismatch";
429
+ }
430
+
431
+ /** Result of opening an inspected session without create-or-rewrite fallback. */
432
+ export type StrictSessionOpenResult = StrictSessionOpenSuccess | StrictSessionOpenFailure;
433
+
337
434
  export interface SessionInfo {
338
435
  path: string;
339
436
  id: string;
@@ -350,6 +447,56 @@ export interface SessionInfo {
350
447
  firstMessage: string;
351
448
  allMessagesText: string;
352
449
  }
450
+ // =============================================================================
451
+ // Strict ACP authorization inventory (fail-closed, never partial authority)
452
+ // =============================================================================
453
+
454
+ /** Kind of failure surfaced by strict scoped inventory. Any failure grants zero authority. */
455
+ export type StrictInventoryFailureKind =
456
+ | "root"
457
+ | "scan"
458
+ | "lstat"
459
+ | "read"
460
+ | "parse"
461
+ | "stat"
462
+ | "header"
463
+ | "cwd"
464
+ | "containment"
465
+ | "identity";
466
+
467
+ /** Sanitized strict-inventory failure. Never carries raw file content. */
468
+ export interface StrictInventoryFailure {
469
+ kind: StrictInventoryFailureKind;
470
+ message: string;
471
+ path?: string;
472
+ }
473
+
474
+ /** One exact-identity candidate suitable for ACP authorization binding. */
475
+ export interface StrictInventoryCandidate {
476
+ /** Canonical absolute transcript path. */
477
+ path: string;
478
+ /** Session id parsed from the header. */
479
+ id: string;
480
+ /** Canonical cwd parsed from the header. */
481
+ cwd: string;
482
+ /** Descriptor-bound transcript identity (dev, ino, ...). */
483
+ identity: SessionStorageStat;
484
+ }
485
+
486
+ /**
487
+ * Strict inventory result. `complete` carries the full validated candidate set;
488
+ * `failure` carries every sanitized failure and grants zero page/cursor/authority.
489
+ * A failure result is never reduced to a partial candidate set.
490
+ */
491
+ export type StrictInventoryResult =
492
+ | { kind: "complete"; candidates: StrictInventoryCandidate[] }
493
+ | { kind: "failure"; failures: StrictInventoryFailure[] };
494
+
495
+ /** Certainty-aware close outcome for strict ACP disposal. */
496
+ export type SessionManagerCloseOutcome =
497
+ | { kind: "closed" }
498
+ | { kind: "close_failed_retryable"; error: Error }
499
+ | { kind: "close_unknown"; error: Error };
353
500
 
354
501
  export type ReadonlySessionManager = Pick<
355
502
  SessionManager,
@@ -519,6 +666,17 @@ function getDefaultSessionDirName(cwd: string): { encodedDirName: string; resolv
519
666
  return { encodedDirName, resolvedCwd };
520
667
  }
521
668
 
669
+ /** Default and legacy directory candidates for maintenance-free resume discovery. */
670
+ function getReadOnlyDefaultSessionDirs(cwd: string, sessionsRoot: string = getSessionsDir()): string[] {
671
+ const { encodedDirName, resolvedCwd } = getDefaultSessionDirName(cwd);
672
+ const canonicalCwd = resolveEquivalentPath(resolvedCwd);
673
+ return [
674
+ path.join(sessionsRoot, encodedDirName),
675
+ path.join(sessionsRoot, encodeLegacyAbsoluteSessionDirName(canonicalCwd)),
676
+ path.join(sessionsRoot, encodeLegacyAbsoluteSessionDirName(resolvedCwd)),
677
+ ].filter((dir, index, dirs) => dirs.indexOf(dir) === index);
678
+ }
679
+
522
680
  /**
523
681
  * Migrate old `--<home-encoded>-*--` session dirs to the new `-*` format.
524
682
  * Runs once per sessions root on first access, best-effort.
@@ -604,6 +762,7 @@ export function buildSessionContext(
604
762
  entries: SessionEntry[],
605
763
  leafId?: string | null,
606
764
  byId?: Map<string, SessionEntry>,
765
+ sessionIdentityNamespace = "legacy-session",
607
766
  ): SessionContext {
608
767
  // Build uuid index if not available
609
768
  if (!byId) {
@@ -749,18 +908,29 @@ export function buildSessionContext(
749
908
 
750
909
  const appendMessage = (entry: SessionEntry) => {
751
910
  if (entry.type === "message") {
911
+ associateSessionMessageEntryId(entry.message, entry.id);
752
912
  messages.push(entry.message);
753
913
  } else if (entry.type === "custom_message") {
754
- messages.push(
755
- createCustomMessage(
756
- entry.customType,
757
- entry.content,
758
- entry.display,
759
- entry.details,
760
- entry.timestamp,
761
- entry.attribution,
762
- ),
914
+ const message = createCustomMessage(
915
+ entry.customType,
916
+ entry.content,
917
+ entry.display,
918
+ entry.details,
919
+ entry.timestamp,
920
+ entry.attribution,
763
921
  );
922
+ associateSessionMessageEntryId(message, entry.id);
923
+ const persistedObservationId =
924
+ entry.details && typeof entry.details === "object" && !Array.isArray(entry.details)
925
+ ? (entry.details as Record<string, unknown>).observationId
926
+ : undefined;
927
+ associateSessionMessageObservationId(
928
+ message,
929
+ typeof persistedObservationId === "string"
930
+ ? persistedObservationId
931
+ : `session:${sessionIdentityNamespace}:entry:${entry.id}`,
932
+ );
933
+ messages.push(message);
764
934
  } else if (entry.type === "branch_summary" && entry.summary) {
765
935
  messages.push(createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp));
766
936
  }
@@ -838,9 +1008,11 @@ export function buildSessionContext(
838
1008
  }
839
1009
 
840
1010
  function cloneSessionContext(context: SessionContext): SessionContext {
1011
+ const messages = cloneJsonSemantic(context.messages);
1012
+ transferSessionMessageIdentity(context.messages, messages);
841
1013
  return {
842
1014
  ...context,
843
- messages: cloneJsonSemantic(context.messages),
1015
+ messages,
844
1016
  models: { ...context.models },
845
1017
  injectedTtsrRules: [...context.injectedTtsrRules],
846
1018
  injectedTtsrRuleRecords: context.injectedTtsrRuleRecords?.map(record => ({ ...record })),
@@ -972,48 +1144,253 @@ export async function loadEntriesFromFile(
972
1144
  return entries;
973
1145
  }
974
1146
 
1147
+ function sameResumeIdentity(left: ResumeSessionIdentity, right: ResumeSessionIdentity): boolean {
1148
+ return (
1149
+ left.canonicalPath === right.canonicalPath &&
1150
+ left.sessionId === right.sessionId &&
1151
+ left.dev === right.dev &&
1152
+ left.ino === right.ino &&
1153
+ left.size === right.size &&
1154
+ left.mtimeMs === right.mtimeMs &&
1155
+ left.mtimeNs === right.mtimeNs &&
1156
+ left.sha256 === right.sha256
1157
+ );
1158
+ }
1159
+
1160
+ function sameResumeStat(left: SessionStorageStat, right: SessionStorageStat): boolean {
1161
+ return (
1162
+ left.isFile &&
1163
+ right.isFile &&
1164
+ left.dev === right.dev &&
1165
+ left.ino === right.ino &&
1166
+ left.size === right.size &&
1167
+ left.mtimeMs === right.mtimeMs &&
1168
+ left.mtimeNs === right.mtimeNs
1169
+ );
1170
+ }
1171
+
1172
+ interface ResumeInspectionSnapshot {
1173
+ identity: ResumeSessionIdentity;
1174
+ entries: FileEntry[];
1175
+ context: SessionContext;
1176
+ migrationApplied: boolean;
1177
+ }
1178
+
1179
+ function resumeReadFailure(error: unknown, storage: SessionStorage, path: string): ResumeTailError {
1180
+ let missing = isEnoent(error);
1181
+ if (!missing) {
1182
+ try {
1183
+ missing = !storage.existsSync(path);
1184
+ } catch {
1185
+ // Preserve the primary read/stat failure when existence cannot be checked.
1186
+ }
1187
+ }
1188
+ return { kind: "error", reason: missing ? "missing" : "read-failed" };
1189
+ }
1190
+
1191
+ function hasStrictSessionSchema(entries: FileEntry[]): boolean {
1192
+ for (const entry of entries) {
1193
+ const value = entry as unknown as Record<string, unknown>;
1194
+ if (typeof value.type !== "string") return false;
1195
+ if (value.type === "session") {
1196
+ if (typeof value.id !== "string" || typeof value.cwd !== "string" || typeof value.timestamp !== "string")
1197
+ return false;
1198
+ continue;
1199
+ }
1200
+ if (
1201
+ typeof value.id !== "string" ||
1202
+ (value.parentId !== null && typeof value.parentId !== "string") ||
1203
+ typeof value.timestamp !== "string"
1204
+ ) {
1205
+ return false;
1206
+ }
1207
+ switch (value.type) {
1208
+ case "message": {
1209
+ if (typeof value.message !== "object" || value.message === null) return false;
1210
+ const message = value.message as Record<string, unknown>;
1211
+ if (typeof message.role !== "string") return false;
1212
+ break;
1213
+ }
1214
+ case "model_change":
1215
+ if (
1216
+ typeof value.model !== "string" &&
1217
+ !(typeof value.provider === "string" && typeof value.modelId === "string")
1218
+ )
1219
+ return false;
1220
+ break;
1221
+ case "compaction":
1222
+ if (
1223
+ typeof value.summary !== "string" ||
1224
+ typeof value.firstKeptEntryId !== "string" ||
1225
+ typeof value.tokensBefore !== "number"
1226
+ )
1227
+ return false;
1228
+ break;
1229
+ case "branch_summary":
1230
+ if (typeof value.fromId !== "string" || typeof value.summary !== "string") return false;
1231
+ break;
1232
+ case "custom":
1233
+ if (typeof value.customType !== "string") return false;
1234
+ break;
1235
+ case "custom_message":
1236
+ if (
1237
+ typeof value.customType !== "string" ||
1238
+ (typeof value.content !== "string" && !Array.isArray(value.content)) ||
1239
+ typeof value.display !== "boolean"
1240
+ )
1241
+ return false;
1242
+ break;
1243
+ case "label":
1244
+ if (typeof value.targetId !== "string" || (value.label !== undefined && typeof value.label !== "string"))
1245
+ return false;
1246
+ break;
1247
+ case "ttsr_injection":
1248
+ if (!Array.isArray(value.injectedRules) || !value.injectedRules.every(rule => typeof rule === "string"))
1249
+ return false;
1250
+ break;
1251
+ case "mcp_tool_selection":
1252
+ if (
1253
+ !Array.isArray(value.selectedToolNames) ||
1254
+ !value.selectedToolNames.every(name => typeof name === "string")
1255
+ )
1256
+ return false;
1257
+ break;
1258
+ case "session_init":
1259
+ if (
1260
+ typeof value.systemPrompt !== "string" ||
1261
+ typeof value.task !== "string" ||
1262
+ !Array.isArray(value.tools) ||
1263
+ !value.tools.every(tool => typeof tool === "string")
1264
+ )
1265
+ return false;
1266
+ break;
1267
+ case "mode_change":
1268
+ if (typeof value.mode !== "string") return false;
1269
+ break;
1270
+ case "thinking_level_change":
1271
+ if (
1272
+ value.thinkingLevel !== undefined &&
1273
+ value.thinkingLevel !== null &&
1274
+ typeof value.thinkingLevel !== "string"
1275
+ )
1276
+ return false;
1277
+ break;
1278
+ case "service_tier_change":
1279
+ if (value.serviceTier !== null && typeof value.serviceTier !== "string") return false;
1280
+ break;
1281
+ default:
1282
+ return false;
1283
+ }
1284
+ }
1285
+ return true;
1286
+ }
1287
+
1288
+ function inspectResumeSessionFile(
1289
+ filePath: string,
1290
+ storage: SessionStorage,
1291
+ ): ResumeInspectionSnapshot | ResumeTailError {
1292
+ const canonicalPath = resolveEquivalentPath(path.resolve(filePath));
1293
+ let before: SessionStorageStat;
1294
+ try {
1295
+ before = storage.statSync(canonicalPath);
1296
+ } catch (error) {
1297
+ return resumeReadFailure(error, storage, canonicalPath);
1298
+ }
1299
+ if (!before.isFile || !storage.readSnapshotSync) {
1300
+ return { kind: "error", reason: "read-failed" };
1301
+ }
1302
+
1303
+ let bytes: Uint8Array;
1304
+ let snapshot: SessionStorageStat;
1305
+ let after: SessionStorageStat;
1306
+ try {
1307
+ const readSnapshot = storage.readSnapshotSync(canonicalPath);
1308
+ bytes = readSnapshot.bytes;
1309
+ snapshot = readSnapshot.stat;
1310
+ after = storage.statSync(canonicalPath);
1311
+ } catch (error) {
1312
+ return resumeReadFailure(error, storage, canonicalPath);
1313
+ }
1314
+ if (!sameResumeStat(before, snapshot) || !sameResumeStat(snapshot, after)) {
1315
+ return { kind: "error", reason: "unstable" };
1316
+ }
1317
+
1318
+ try {
1319
+ const content = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
1320
+ for (const line of content.split(/\r?\n/)) {
1321
+ if (line.length === 0) continue;
1322
+ JSON.parse(line);
1323
+ }
1324
+ const entries = parseSessionEntries(content);
1325
+ const header = entries[0] as SessionHeader | undefined;
1326
+ if (header?.type !== "session" || typeof header.id !== "string") {
1327
+ return { kind: "error", reason: "malformed" };
1328
+ }
1329
+ const migrationApplied = migrateToCurrentVersion(entries);
1330
+ if (!hasStrictSessionSchema(entries)) return { kind: "error", reason: "malformed" };
1331
+ const context = buildSessionContext(
1332
+ entries.filter((entry): entry is SessionEntry => entry.type !== "session"),
1333
+ undefined,
1334
+ undefined,
1335
+ header.id,
1336
+ );
1337
+ const identity: ResumeSessionIdentity = {
1338
+ canonicalPath,
1339
+ sessionId: header.id,
1340
+ dev: snapshot.dev,
1341
+ ino: snapshot.ino,
1342
+ size: snapshot.size,
1343
+ mtimeMs: snapshot.mtimeMs,
1344
+ mtimeNs: snapshot.mtimeNs,
1345
+ sha256: crypto.createHash("sha256").update(bytes).digest("hex"),
1346
+ };
1347
+ return { identity, entries, context, migrationApplied };
1348
+ } catch {
1349
+ return { kind: "error", reason: "malformed" };
1350
+ }
1351
+ }
1352
+
975
1353
  /**
976
- * Resolve blob references in loaded entries, restoring both session image blocks and persisted
977
- * provider image URLs back to the inline data expected by downstream transports. Mutates entries in place.
1354
+ * Convert legacy persisted blob references in loaded entries into resident sentinels.
1355
+ * Images then materialize lazily at provider/display/export chokepoints instead of
1356
+ * pinning every historical base64 string for the lifetime of a resumed session.
978
1357
  */
979
1358
  function hasImageUrl(value: unknown): value is { image_url: string | { url?: string } } {
980
1359
  return typeof value === "object" && value !== null && "image_url" in value;
981
1360
  }
982
1361
 
983
- async function resolvePersistedBlobRefs(value: unknown, blobStore: BlobStore, key?: string): Promise<void> {
1362
+ function residentizePersistedBlobRefs(value: unknown, key?: string): void {
984
1363
  if (Array.isArray(value)) {
985
- await Promise.all(value.map(item => resolvePersistedBlobRefs(item, blobStore, key)));
1364
+ for (const item of value) residentizePersistedBlobRefs(item, key);
986
1365
  return;
987
1366
  }
988
1367
 
989
1368
  if (typeof value !== "object" || value === null) return;
990
1369
 
991
1370
  if (isImageBlock(value) && isBlobRef(value.data)) {
992
- value.data = await resolveImageData(blobStore, value.data);
1371
+ value.data = residentBlobSentinel("imageData", value.data) as unknown as string;
993
1372
  }
994
1373
 
995
1374
  if (hasImageUrl(value)) {
996
1375
  if (typeof value.image_url === "string" && isBlobRef(value.image_url)) {
997
- value.image_url = await resolveImageDataUrl(blobStore, value.image_url);
1376
+ value.image_url = residentBlobSentinel("imageUrl", value.image_url) as unknown as string;
998
1377
  } else if (
999
1378
  typeof value.image_url === "object" &&
1000
1379
  value.image_url !== null &&
1001
1380
  typeof value.image_url.url === "string" &&
1002
1381
  isBlobRef(value.image_url.url)
1003
1382
  ) {
1004
- value.image_url.url = await resolveImageDataUrl(blobStore, value.image_url.url);
1383
+ value.image_url.url = residentBlobSentinel("imageUrl", value.image_url.url) as unknown as string;
1005
1384
  }
1006
1385
  }
1007
1386
 
1008
- await Promise.all(
1009
- Object.entries(value).map(async ([childKey, item]) => {
1010
- if (childKey === "data" && typeof item === "string" && isBlobRef(item) && key !== TEXT_CONTENT_KEY) {
1011
- (value as Record<string, unknown>)[childKey] = await resolveImageDataUrl(blobStore, item);
1012
- return;
1013
- }
1014
- await resolvePersistedBlobRefs(item, blobStore, childKey);
1015
- }),
1016
- );
1387
+ for (const [childKey, item] of Object.entries(value)) {
1388
+ if (childKey === "data" && typeof item === "string" && isBlobRef(item) && key !== TEXT_CONTENT_KEY) {
1389
+ (value as Record<string, unknown>)[childKey] = residentBlobSentinel("imageUrl", item);
1390
+ continue;
1391
+ }
1392
+ residentizePersistedBlobRefs(item, childKey);
1393
+ }
1017
1394
  }
1018
1395
 
1019
1396
  /**
@@ -1035,28 +1412,13 @@ async function runWithConcurrency(tasks: Array<() => Promise<void>>, limit: numb
1035
1412
  await Promise.all(Array.from({ length: workerCount }, () => worker()));
1036
1413
  }
1037
1414
 
1038
- async function resolveBlobRefsInEntries(entries: FileEntry[], blobStore: BlobStore): Promise<void> {
1415
+ async function resolveBlobRefsInEntries(entries: FileEntry[], _blobStore: BlobStore): Promise<void> {
1039
1416
  const tasks: Array<() => Promise<void>> = [];
1040
1417
 
1041
1418
  for (const entry of entries) {
1042
1419
  if (entry.type === "session") continue;
1043
-
1044
- let contentArray: unknown[] | undefined;
1045
- if (entry.type === "message" && "content" in entry.message && Array.isArray(entry.message.content)) {
1046
- contentArray = entry.message.content;
1047
- } else if (entry.type === "custom_message" && Array.isArray(entry.content)) {
1048
- contentArray = entry.content;
1049
- }
1050
-
1051
1420
  tasks.push(async () => {
1052
- if (contentArray) {
1053
- for (const block of contentArray) {
1054
- if (isImageBlock(block) && isBlobRef(block.data)) {
1055
- block.data = await resolveImageData(blobStore, block.data);
1056
- }
1057
- }
1058
- }
1059
- await resolvePersistedBlobRefs(entry, blobStore);
1421
+ residentizePersistedBlobRefs(entry);
1060
1422
  });
1061
1423
  }
1062
1424
 
@@ -1314,6 +1676,33 @@ function containsResidentSentinel(value: unknown, seen = new WeakSet<object>()):
1314
1676
  return false;
1315
1677
  }
1316
1678
 
1679
+ function containsResidentImageSentinel(value: unknown, seen = new WeakSet<object>()): boolean {
1680
+ if (value === null || value === undefined || typeof value !== "object") return false;
1681
+ if (isResidentBlobSentinel(value)) return value.kind === "imageUrl" || value.kind === "imageData";
1682
+ if (seen.has(value)) return false;
1683
+ seen.add(value);
1684
+ if (Array.isArray(value)) return value.some(item => containsResidentImageSentinel(item, seen));
1685
+ for (const child of Object.values(value)) {
1686
+ if (containsResidentImageSentinel(child, seen)) return true;
1687
+ }
1688
+ return false;
1689
+ }
1690
+
1691
+ function collectResidentImageRefs(value: unknown, refs: Set<string>, seen = new WeakSet<object>()): void {
1692
+ if (value === null || value === undefined || typeof value !== "object") return;
1693
+ if (isResidentBlobSentinel(value)) {
1694
+ if (value.kind === "imageUrl" || value.kind === "imageData") refs.add(value.ref);
1695
+ return;
1696
+ }
1697
+ if (seen.has(value)) return;
1698
+ seen.add(value);
1699
+ if (Array.isArray(value)) {
1700
+ for (const item of value) collectResidentImageRefs(item, refs, seen);
1701
+ return;
1702
+ }
1703
+ for (const child of Object.values(value)) collectResidentImageRefs(child, refs, seen);
1704
+ }
1705
+
1317
1706
  /**
1318
1707
  * Recursively truncate large strings in an object for session persistence.
1319
1708
  * - Truncates any oversized string fields (key-agnostic)
@@ -1596,11 +1985,13 @@ function cloneJsonSemantic<T>(value: T): T {
1596
1985
  }
1597
1986
 
1598
1987
  function cloneAgentMessage<T extends AgentMessage>(message: T): T {
1599
- return {
1988
+ const cloned = {
1600
1989
  ...message,
1601
1990
  ...("content" in message ? { content: cloneJsonSemantic(message.content) } : {}),
1602
1991
  ...("providerPayload" in message ? { providerPayload: cloneJsonSemantic(message.providerPayload) } : {}),
1603
- };
1992
+ } as T;
1993
+ transferSessionMessageIdentity([message], [cloned]);
1994
+ return cloned;
1604
1995
  }
1605
1996
 
1606
1997
  function cloneSessionEntry(entry: SessionEntry): SessionEntry {
@@ -2187,6 +2578,7 @@ class NdjsonFileWriter {
2187
2578
  #error: Error | undefined;
2188
2579
  #pendingWrites: Promise<void> = Promise.resolve();
2189
2580
  #onError: ((err: Error) => void) | undefined;
2581
+ #closeDrained = false;
2190
2582
 
2191
2583
  constructor(storage: SessionStorage, path: string, options?: { flags?: "a" | "w"; onError?: (err: Error) => void }) {
2192
2584
  this.#onError = options?.onError;
@@ -2280,35 +2672,61 @@ class NdjsonFileWriter {
2280
2672
  }
2281
2673
  }
2282
2674
 
2283
- /** Close the writer, flushing all data. */
2675
+ /** Close the writer, flushing all data. Retryable across certified pre-dispatch failures. */
2284
2676
  async close(): Promise<void> {
2285
- if (this.#closed || this.#closing) return;
2286
- this.#closing = true;
2677
+ // Terminal (confirmed closed or quarantined close_unknown): no further attempts.
2678
+ if (this.#closed) return;
2679
+ // Re-entry guard: once a fresh attempt has started draining, block concurrent
2680
+ // close() calls. A retry after a certified pre-dispatch failure has #closing
2681
+ // reset and #closeDrained set, so it re-enters to actually re-dispatch the
2682
+ // underlying OS close — the wrapper must NOT mark itself closed on a retryable
2683
+ // failure, and must allow a genuine later retry.
2684
+ if (this.#closing) return;
2287
2685
 
2288
- let closeError: Error | undefined;
2289
- try {
2290
- await this.flush();
2291
- } catch (err) {
2292
- closeError = toError(err);
2293
- }
2686
+ this.#closing = true;
2294
2687
 
2295
- try {
2296
- await this.#pendingWrites;
2297
- } catch (err) {
2298
- if (!closeError) closeError = toError(err);
2688
+ let drainError: Error | undefined;
2689
+ // Only drain once: a retry after a pre-dispatch failure has already flushed
2690
+ // pending writes, and the underlying writer rejects further flushes while in
2691
+ // the retryable state. Re-draining would mask the close retry with that error.
2692
+ if (!this.#closeDrained) {
2693
+ try {
2694
+ await this.flush();
2695
+ } catch (err) {
2696
+ drainError = toError(err);
2697
+ }
2698
+ try {
2699
+ await this.#pendingWrites;
2700
+ } catch (err) {
2701
+ if (!drainError) drainError = toError(err);
2702
+ }
2703
+ this.#closeDrained = true;
2299
2704
  }
2300
2705
 
2301
2706
  try {
2302
2707
  await this.#writer.close();
2303
2708
  } catch (err) {
2304
- const endErr = this.#recordError(err);
2305
- if (!closeError) closeError = endErr;
2709
+ if (this.#writer.getCloseState() === "close_failed_retryable") {
2710
+ // Certified pre-dispatch failure: the numeric fd is still owned and a
2711
+ // later retry is safe. Do NOT mark the wrapper closed, do NOT poison
2712
+ // #error (the retry must still be able to flush/close), and reset
2713
+ // #closing so the retry can actually re-dispatch. Surface the failure —
2714
+ // a partial close is never reported as success.
2715
+ this.#closing = false;
2716
+ throw toError(err);
2717
+ }
2718
+ // close_unknown (quarantined) or other dispatched failure: terminal. Record
2719
+ // the error and mark the wrapper closed so no retry/finalizer touches the
2720
+ // uncertain fd again.
2721
+ this.#closed = true;
2722
+ throw this.#recordError(err);
2306
2723
  }
2307
2724
 
2725
+ // Confirmed closed (underlying close succeeded).
2308
2726
  this.#closed = true;
2309
2727
 
2310
- if (!closeError && this.#error) closeError = this.#error;
2311
- if (closeError) throw closeError;
2728
+ if (drainError) throw drainError;
2729
+ if (this.#error) throw this.#error;
2312
2730
  }
2313
2731
 
2314
2732
  /** Check if there's a stored error. */
@@ -2316,16 +2734,49 @@ class NdjsonFileWriter {
2316
2734
  return this.#error;
2317
2735
  }
2318
2736
 
2319
- /** True while the writer accepts new writes (not closing or closed). */
2737
+ /**
2738
+ * True only while the writer accepts new writes. A retryable close failure
2739
+ * leaves the wrapper non-terminal but the underlying fd rejects writes, so
2740
+ * callers route appends around it rather than through it.
2741
+ */
2320
2742
  isOpen(): boolean {
2321
- return !this.#closed && !this.#closing;
2743
+ if (this.#closed || this.#closing) return false;
2744
+ return this.#writer.getCloseState() === "open";
2322
2745
  }
2323
2746
 
2747
+ /**
2748
+ * Truthful synchronous close used by the atomic-rewrite path: dispatches the
2749
+ * underlying close synchronously and throws on failure so a close failure is
2750
+ * observable BEFORE the rename step. No fire-and-forget: the old suppression
2751
+ * (`close().catch(() => {})`) let a rename proceed on an unclosed file.
2752
+ */
2324
2753
  closeSync(): void {
2325
2754
  if (this.#closed) return;
2755
+ if (this.#closing) return;
2756
+ // The sync path's writeSync bypasses the async queue, so #pendingWrites is
2757
+ // not applicable; the caller has already issued every writeSync before this.
2758
+ try {
2759
+ this.#writer.closeSync();
2760
+ } catch (err) {
2761
+ if (this.#writer.getCloseState() === "close_failed_retryable") {
2762
+ // Retryable: keep the wrapper open for the cleanup retry in the caller's
2763
+ // catch block; surface the failure so the rename is skipped.
2764
+ throw toError(err);
2765
+ }
2766
+ this.#closed = true;
2767
+ throw this.#recordError(err);
2768
+ }
2326
2769
  this.#closed = true;
2327
- this.#closing = true;
2328
- this.#writer.close().catch(() => {});
2770
+ }
2771
+
2772
+ /** Certainty-aware close state of the underlying storage writer. */
2773
+ getCloseState(): SessionStorageWriterCloseState {
2774
+ return this.#writer.getCloseState();
2775
+ }
2776
+
2777
+ /** Stored error for a non-success underlying close state. */
2778
+ getCloseError(): Error | undefined {
2779
+ return this.#writer.getCloseError();
2329
2780
  }
2330
2781
  }
2331
2782
 
@@ -2912,6 +3363,26 @@ export class SessionManager {
2912
3363
  await this.setSessionFile(sessionFile);
2913
3364
  }
2914
3365
 
3366
+ async #hydrateExistingSession(sessionFile: string, entries: FileEntry[], migrationApplied: boolean): Promise<void> {
3367
+ const header = entries[0] as SessionHeader;
3368
+ this.#sessionFile = path.resolve(sessionFile);
3369
+ this.#sessionId = header.id;
3370
+ this.#sessionName = header.title;
3371
+ this.#titleSource = header.titleSource;
3372
+ this.#needsFullRewriteOnNextPersist = migrationApplied;
3373
+ await resolveBlobRefsInEntries(entries, this.#blobStore);
3374
+ this.#fileEntries = entries;
3375
+ this.#resetResidentTextBlobStore();
3376
+ this.#fileEntries = this.#fileEntries.map(entry =>
3377
+ prepareEntryForResidentSync(entry, this.#residentBlobStores()),
3378
+ );
3379
+ this.sanitizeLoadedOpenAIResponsesReplayMetadata();
3380
+ this.#buildIndex();
3381
+ this.#bumpAllRevisions();
3382
+ this.#flushed = true;
3383
+ this.#ensuredOnDisk = true;
3384
+ }
3385
+
2915
3386
  /** Initialize with a new session (used by factory methods) */
2916
3387
  #initNewSession(): void {
2917
3388
  this.#newSessionSync();
@@ -3437,7 +3908,15 @@ export class SessionManager {
3437
3908
  writer.closeSync();
3438
3909
  this.#replaceSessionFileSync(tempPath, this.#sessionFile);
3439
3910
  } catch (err) {
3440
- writer.closeSync();
3911
+ // closeSync is now truthful and may throw; wrap the best-effort cleanup so
3912
+ // the original error (write/close failure) is the one surfaced, not the
3913
+ // cleanup failure. The rename above was already skipped because closeSync
3914
+ // threw before it.
3915
+ try {
3916
+ writer.closeSync();
3917
+ } catch {
3918
+ // Best-effort cleanup of the temp writer's descriptor.
3919
+ }
3441
3920
  void this.storage.unlink(tempPath).catch(() => {});
3442
3921
  throw toError(err);
3443
3922
  }
@@ -3535,6 +4014,73 @@ export class SessionManager {
3535
4014
  this.#disposeResidentTextBlobStore();
3536
4015
  if (this.#persistError) throw this.#persistError;
3537
4016
  }
4017
+ /** Flush while open, then strictly close; retryable close skips the invalid second flush. */
4018
+ async flushAndCloseStrict(): Promise<SessionManagerCloseOutcome> {
4019
+ if (this.#persistWriter?.getCloseState() !== "close_failed_retryable") {
4020
+ await this.flush();
4021
+ }
4022
+ return this.closeStrict();
4023
+ }
4024
+
4025
+ /**
4026
+ * Strictly flush and close the persist writer, returning the certainty-aware close
4027
+ * outcome without manufacturing success. The existing {@link close} path is
4028
+ * preserved for best-effort callers; this seam lets strict ACP disposal prove
4029
+ * writer closure before any destructive operation.
4030
+ */
4031
+ async closeStrict(): Promise<SessionManagerCloseOutcome> {
4032
+ let outcome: SessionManagerCloseOutcome = { kind: "closed" };
4033
+ await this.#queuePersistTask(async () => {
4034
+ const writer = this.#persistWriter;
4035
+ if (!writer) {
4036
+ this.#flushed = true;
4037
+ return;
4038
+ }
4039
+ try {
4040
+ await writer.close();
4041
+ } catch {
4042
+ // Outcome is captured from the underlying writer's close state below.
4043
+ }
4044
+ outcome = this.#closeOutcomeFromWriter(writer);
4045
+ if (outcome.kind === "closed") {
4046
+ this.#flushed = true;
4047
+ // Confirmed closed: release writer ownership.
4048
+ this.#persistWriter = undefined;
4049
+ this.#persistWriterPath = undefined;
4050
+ } else if (outcome.kind === "close_unknown") {
4051
+ // Quarantined (terminal): release ownership so no retry/finalizer
4052
+ // touches the uncertain fd again.
4053
+ this.#persistWriter = undefined;
4054
+ this.#persistWriterPath = undefined;
4055
+ }
4056
+ // close_failed_retryable: RETAIN the writer so a later closeStrict() call
4057
+ // can actually re-dispatch the OS close (ownership stays proven). The
4058
+ // wrapper must not manufacture success or surrender a retryable fd.
4059
+ });
4060
+ // Only tear down the resident blob store on a terminal outcome; a retryable
4061
+ // close leaves the session live for a genuine retry.
4062
+ if (!this.#persistWriter) {
4063
+ this.#disposeResidentTextBlobStore();
4064
+ }
4065
+ return outcome;
4066
+ }
4067
+
4068
+ #closeOutcomeFromWriter(writer: NdjsonFileWriter): SessionManagerCloseOutcome {
4069
+ const state = writer.getCloseState();
4070
+ const error = writer.getCloseError();
4071
+ switch (state) {
4072
+ case "closed":
4073
+ return { kind: "closed" };
4074
+ case "close_failed_retryable":
4075
+ return { kind: "close_failed_retryable", error: error ?? new Error("Writer close failed before dispatch") };
4076
+ case "close_unknown":
4077
+ return { kind: "close_unknown", error: error ?? new Error("Writer close outcome is unknown") };
4078
+ default:
4079
+ // "open" should not occur after close() returned, but treat defensively as
4080
+ // a non-quiescent terminal state rather than confirmed closed.
4081
+ return { kind: "close_unknown", error: error ?? new Error("Writer close did not dispatch") };
4082
+ }
4083
+ }
3538
4084
 
3539
4085
  getCwd(): string {
3540
4086
  return this.cwd;
@@ -3865,7 +4411,10 @@ export class SessionManager {
3865
4411
  timestamp: new Date().toISOString(),
3866
4412
  message,
3867
4413
  };
4414
+ associateSessionMessageEntryId(message, entry.id);
3868
4415
  this.#appendEntry(entry);
4416
+ const residentEntry = this.#byId.get(entry.id);
4417
+ if (residentEntry?.type === "message") transferSessionMessageIdentity([message], [residentEntry.message]);
3869
4418
  return entry.id;
3870
4419
  }
3871
4420
 
@@ -4058,7 +4607,15 @@ export class SessionManager {
4058
4607
  display: boolean,
4059
4608
  details?: T,
4060
4609
  attribution: MessageAttribution = "agent",
4610
+ observationId?: string,
4061
4611
  ): string {
4612
+ const entryId = generateId(this.#byId);
4613
+ const stableObservationId =
4614
+ observationId ?? (customType.startsWith("irc:") ? `session:${this.#sessionId}:entry:${entryId}` : undefined);
4615
+ const persistedDetails =
4616
+ stableObservationId && details && typeof details === "object" && !Array.isArray(details)
4617
+ ? ({ ...details, observationId: stableObservationId } as T)
4618
+ : details;
4062
4619
  const entry: CustomMessageEntry<T> = {
4063
4620
  type: "custom_message",
4064
4621
  customType,
@@ -4067,9 +4624,9 @@ export class SessionManager {
4067
4624
  // Drop AgentSession-internal transient fields (allowlist in
4068
4625
  // `INTERNAL_DETAILS_FIELDS`) before disk persistence. Single
4069
4626
  // chokepoint covers every CustomMessage write path.
4070
- details: stripInternalDetailsFields(details),
4627
+ details: stripInternalDetailsFields(persistedDetails),
4071
4628
  attribution,
4072
- id: generateId(this.#byId),
4629
+ id: entryId,
4073
4630
  parentId: this.#leafId,
4074
4631
  timestamp: new Date().toISOString(),
4075
4632
  };
@@ -4148,6 +4705,22 @@ export class SessionManager {
4148
4705
  return entry ? materializeResidentEntryForReadSync(entry, this.#residentBlobStores(), new Map()) : undefined;
4149
4706
  }
4150
4707
 
4708
+ getResidentImageBytes(): number {
4709
+ const refs = new Set<string>();
4710
+ for (const entry of this.#fileEntries) collectResidentImageRefs(entry, refs);
4711
+ let bytes = 0;
4712
+ for (const ref of refs) {
4713
+ const hash = parseBlobRef(ref);
4714
+ if (!hash) continue;
4715
+ try {
4716
+ bytes += fs.statSync(path.join(this.#residentImageBlobStore.dir, hash)).size;
4717
+ } catch (err) {
4718
+ if (!isEnoent(err)) throw err;
4719
+ }
4720
+ }
4721
+ return bytes;
4722
+ }
4723
+
4151
4724
  /**
4152
4725
  * Get the most recent model role from the current session path.
4153
4726
  * Returns undefined if no model change has been recorded.
@@ -4471,7 +5044,12 @@ export class SessionManager {
4471
5044
  return cloneSessionContext(cached);
4472
5045
  }
4473
5046
  this.#pathOnlyContextBuildCount++;
4474
- const context = buildSessionContext(this.#getActivePathEntriesForProviderContext(), this.#leafId);
5047
+ const context = buildSessionContext(
5048
+ this.#getActivePathEntriesForProviderContext(),
5049
+ this.#leafId,
5050
+ undefined,
5051
+ this.#sessionId,
5052
+ );
4475
5053
  this.#sessionContextCache = new WeakRef(context);
4476
5054
  this.#sessionContextEntryRevision = this.#entryRevision;
4477
5055
  this.#sessionContextLeafRevision = this.#leafRevision;
@@ -4521,6 +5099,9 @@ export class SessionManager {
4521
5099
  this.#residentBlobStoresForColdRehydrate(),
4522
5100
  );
4523
5101
  if (rehydrated !== materialized) this.#coldSpillReadCount += this.#countColdSpillPayloads(entry);
5102
+ if (entry.type === "message" && rehydrated.type === "message") {
5103
+ transferSessionMessageIdentity([entry.message], [rehydrated.message]);
5104
+ }
4524
5105
  return rehydrated;
4525
5106
  }
4526
5107
 
@@ -4571,11 +5152,14 @@ export class SessionManager {
4571
5152
  }
4572
5153
  this.#materializedEntriesCachePopulateCount++;
4573
5154
  const resolvedTextBlobCache = new Map<string, string>();
4574
- const materializedEntries = this.#fileEntries
4575
- .filter((e): e is SessionEntry => e.type !== "session")
4576
- .map(entry => materializeResidentEntryForReadSync(entry, this.#residentBlobStores(), resolvedTextBlobCache));
4577
- this.#materializedEntriesCache = materializedEntries;
4578
- this.#materializedEntriesRevision = this.#entryRevision;
5155
+ const sourceEntries = this.#fileEntries.filter((e): e is SessionEntry => e.type !== "session");
5156
+ const materializedEntries = sourceEntries.map(entry =>
5157
+ materializeResidentEntryForReadSync(entry, this.#residentBlobStores(), resolvedTextBlobCache),
5158
+ );
5159
+ if (!sourceEntries.some(entry => containsResidentImageSentinel(entry))) {
5160
+ this.#materializedEntriesCache = materializedEntries;
5161
+ this.#materializedEntriesRevision = this.#entryRevision;
5162
+ }
4579
5163
  return materializedEntries;
4580
5164
  }
4581
5165
 
@@ -4909,6 +5493,71 @@ export class SessionManager {
4909
5493
  return manager;
4910
5494
  }
4911
5495
 
5496
+ /**
5497
+ * List sessions for the resume picker without recovery or other maintenance writes.
5498
+ */
5499
+ static async listForResumePickerReadOnly(
5500
+ cwd: string,
5501
+ sessionDir?: string,
5502
+ storage: SessionStorage = new FileSessionStorage(),
5503
+ ): Promise<SessionInfo[]> {
5504
+ const dirs = sessionDir ? [sessionDir] : getReadOnlyDefaultSessionDirs(cwd);
5505
+ try {
5506
+ const files = new Set<string>();
5507
+ for (const dir of dirs) {
5508
+ for (const filePath of storage.listFilesSync(dir, "*.jsonl")) files.add(filePath);
5509
+ }
5510
+ return await collectSessionsFromFiles([...files], storage);
5511
+ } catch {
5512
+ return [];
5513
+ }
5514
+ }
5515
+
5516
+ /** Inspect a selected session without acquiring write-capable ownership. */
5517
+ static async inspectSessionTailReadOnly(
5518
+ filePath: string,
5519
+ storage: SessionStorage = new FileSessionStorage(),
5520
+ ): Promise<ResumeTailInspection> {
5521
+ const inspected = inspectResumeSessionFile(filePath, storage);
5522
+ if ("kind" in inspected) return inspected;
5523
+ return canContinuePersistedHistory(inspected.context.messages)
5524
+ ? { kind: "resumable", identity: inspected.identity }
5525
+ : { kind: "terminal", identity: inspected.identity };
5526
+ }
5527
+
5528
+ /**
5529
+ * Main startup code MUST retain the consented inspection identity and branch on
5530
+ * the returned discriminant; an error result never creates, rewrites, or adopts
5531
+ * the selected path. Breadcrumb ownership begins only after `kind: "opened"`.
5532
+ */
5533
+ static async openExistingStrict(
5534
+ identity: ResumeSessionIdentity,
5535
+ sessionDir?: string,
5536
+ storage: SessionStorage = new FileSessionStorage(),
5537
+ ): Promise<StrictSessionOpenResult> {
5538
+ const inspected = inspectResumeSessionFile(identity.canonicalPath, storage);
5539
+ if ("kind" in inspected) return inspected;
5540
+ if (!sameResumeIdentity(identity, inspected.identity)) {
5541
+ return { kind: "error", reason: "identity-mismatch" };
5542
+ }
5543
+ const entries = structuredClone(inspected.entries) as FileEntry[];
5544
+ const header = entries[0] as SessionHeader;
5545
+ const dir = sessionDir ?? path.resolve(identity.canonicalPath, "..");
5546
+ const manager = new SessionManager(header.cwd || getProjectDir(), dir, true, storage);
5547
+ await manager.#hydrateExistingSession(identity.canonicalPath, entries, inspected.migrationApplied);
5548
+ const ownershipInspection = inspectResumeSessionFile(identity.canonicalPath, storage);
5549
+ if ("kind" in ownershipInspection) {
5550
+ await manager.close();
5551
+ return ownershipInspection;
5552
+ }
5553
+ if (!sameResumeIdentity(identity, ownershipInspection.identity)) {
5554
+ await manager.close();
5555
+ return { kind: "error", reason: "identity-mismatch" };
5556
+ }
5557
+ writeTerminalBreadcrumb(manager.cwd, identity.canonicalPath);
5558
+ return { kind: "opened", manager };
5559
+ }
5560
+
4912
5561
  /**
4913
5562
  * Continue the most recent session, or create new if none.
4914
5563
  * @param cwd Working directory
@@ -4986,4 +5635,153 @@ export class SessionManager {
4986
5635
  return [];
4987
5636
  }
4988
5637
  }
5638
+ /**
5639
+ * Strict raw scoped inventory for ACP authorization. Enumerates the scoped
5640
+ * session directory without suppressing any root/scan/lstat/read/parse/stat/
5641
+ * header/cwd/containment/identity failure. A failure result carries every
5642
+ * sanitized failure and grants zero authority — it is never reduced to a
5643
+ * partial candidate set. Display/global {@link list} behavior is unaffected.
5644
+ */
5645
+ static inventorySessionsStrict(
5646
+ cwd: string,
5647
+ options?: { sessionDir?: string; storage?: SessionStorage },
5648
+ ): StrictInventoryResult {
5649
+ const storage = options?.storage ?? new FileSessionStorage();
5650
+ const dir = options?.sessionDir ?? SessionManager.getDefaultSessionDir(cwd, undefined, storage);
5651
+ if (!storage.listFilesStrictSync) {
5652
+ return {
5653
+ kind: "failure",
5654
+ failures: [{ kind: "scan", message: "Strict scoped session scan is unavailable", path: dir }],
5655
+ };
5656
+ }
5657
+ const strictScan = storage.listFilesStrictSync.bind(storage);
5658
+
5659
+ let files: string[];
5660
+ try {
5661
+ files = strictScan(dir, "*.jsonl");
5662
+ } catch (err) {
5663
+ const code = (err as NodeJS.ErrnoException)?.code;
5664
+ // Only a confirmed ENOENT proves the scoped root is genuinely absent,
5665
+ // which is a complete (zero-candidate) inventory. Any other root/scan
5666
+ // error (EACCES/EIO/EPERM/ENOTDIR/...) is fail-closed: it must never
5667
+ // reduce to authoritative absence and grants zero authority. The
5668
+ // forgiving existsSync preflight is intentionally absent — fs.existsSync
5669
+ // collapses EACCES/EIO/EPERM onto a false return and would let a
5670
+ // permission-denied root masquerade as a confirmed-empty directory.
5671
+ if (code === "ENOENT") {
5672
+ return { kind: "complete", candidates: [] };
5673
+ }
5674
+ void err;
5675
+ const failureKind: StrictInventoryFailureKind =
5676
+ code === "EACCES" || code === "EPERM" || code === "ENOTDIR" ? "root" : "scan";
5677
+ return {
5678
+ kind: "failure",
5679
+ failures: [
5680
+ {
5681
+ kind: failureKind,
5682
+ message:
5683
+ failureKind === "root"
5684
+ ? "Scoped session root could not be inspected"
5685
+ : "Scoped session directory scan failed",
5686
+ path: dir,
5687
+ },
5688
+ ],
5689
+ };
5690
+ }
5691
+
5692
+ const failures: StrictInventoryFailure[] = [];
5693
+ const candidates: StrictInventoryCandidate[] = [];
5694
+ for (const file of files) {
5695
+ const candidate = inventoryReadCandidate(storage, file, cwd, dir);
5696
+ if ("failures" in candidate) {
5697
+ failures.push(...candidate.failures);
5698
+ continue;
5699
+ }
5700
+ candidates.push(candidate.candidate);
5701
+ }
5702
+ if (failures.length > 0) {
5703
+ return { kind: "failure", failures };
5704
+ }
5705
+ return { kind: "complete", candidates };
5706
+ }
5707
+
5708
+ /**
5709
+ * Propagate the storage-layer verified hard delete bound to exact identity evidence.
5710
+ * Never performs ID lookup or first-match selection; the caller supplies the exact
5711
+ * authorization target captured from a complete strict inventory.
5712
+ */
5713
+ async deleteSessionVerified(target: VerifiedSessionDeleteTarget): Promise<VerifiedSessionDeleteResult> {
5714
+ if (!this.storage.deleteSessionVerified) {
5715
+ throw new Error("Storage backend does not support verified session deletion");
5716
+ }
5717
+ return this.storage.deleteSessionVerified(target);
5718
+ }
5719
+ }
5720
+ const strictInventoryDecoder = new TextDecoder("utf-8", { fatal: false });
5721
+
5722
+ /** Strictly read + validate one scoped session candidate. Never suppresses a failure. */
5723
+ function inventoryReadCandidate(
5724
+ storage: SessionStorage,
5725
+ file: string,
5726
+ expectedCwd: string,
5727
+ sessionDir: string,
5728
+ ): { candidate: StrictInventoryCandidate } | { failures: StrictInventoryFailure[] } {
5729
+ const failures: StrictInventoryFailure[] = [];
5730
+ const resolvedFile = path.resolve(file);
5731
+ if (!pathIsWithin(path.resolve(sessionDir), resolvedFile)) {
5732
+ return {
5733
+ failures: [{ kind: "containment", message: "Candidate is outside the scoped session directory", path: file }],
5734
+ };
5735
+ }
5736
+ if (!storage.readSnapshotSync) {
5737
+ return { failures: [{ kind: "read", message: "Storage backend cannot read exact bytes", path: file }] };
5738
+ }
5739
+ let snapshot: SessionStorageSnapshot;
5740
+ try {
5741
+ snapshot = storage.readSnapshotSync(file);
5742
+ } catch (err) {
5743
+ const code = (err as NodeJS.ErrnoException)?.code;
5744
+ if (code === "ELOOP" || code === "SYMLINK") {
5745
+ failures.push({ kind: "lstat", message: "Candidate is a symlink", path: file });
5746
+ } else {
5747
+ failures.push({ kind: "read", message: "Candidate could not be read", path: file });
5748
+ }
5749
+ return { failures };
5750
+ }
5751
+ if (!snapshot.stat.isFile) {
5752
+ failures.push({ kind: "lstat", message: "Candidate is not a regular file", path: file });
5753
+ return { failures };
5754
+ }
5755
+ const newline = snapshot.bytes.indexOf(0x0a);
5756
+ const headerBytes = newline === -1 ? snapshot.bytes : snapshot.bytes.subarray(0, newline);
5757
+ let header: Record<string, unknown> | undefined;
5758
+ try {
5759
+ const text = strictInventoryDecoder.decode(headerBytes).trim();
5760
+ const value: unknown = text ? JSON.parse(text) : undefined;
5761
+ header = typeof value === "object" && value !== null ? (value as Record<string, unknown>) : undefined;
5762
+ } catch {
5763
+ header = undefined;
5764
+ }
5765
+ if (!header) {
5766
+ failures.push({ kind: "parse", message: "Candidate header is not valid JSON", path: file });
5767
+ return { failures };
5768
+ }
5769
+ if (header.type !== "session") {
5770
+ failures.push({ kind: "header", message: "Candidate header is not a session header", path: file });
5771
+ return { failures };
5772
+ }
5773
+ if (typeof header.id !== "string" || header.id.length === 0) {
5774
+ failures.push({ kind: "identity", message: "Candidate header is missing a session id", path: file });
5775
+ return { failures };
5776
+ }
5777
+ if (typeof header.cwd !== "string") {
5778
+ failures.push({ kind: "cwd", message: "Candidate header is missing a cwd", path: file });
5779
+ return { failures };
5780
+ }
5781
+ const canonicalHeaderCwd = resolveEquivalentPath(header.cwd);
5782
+ if (canonicalHeaderCwd !== resolveEquivalentPath(expectedCwd)) {
5783
+ failures.push({ kind: "cwd", message: "Candidate cwd does not match the scoped workspace", path: file });
5784
+ return { failures };
5785
+ }
5786
+ return { candidate: { path: resolvedFile, id: header.id, cwd: header.cwd, identity: snapshot.stat } };
4989
5787
  }