@sayknow-cli/coding-agent 0.4.6 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/dist/types/capability/index.d.ts +10 -20
  3. package/dist/types/capability/types.d.ts +3 -0
  4. package/dist/types/cli/args.d.ts +0 -2
  5. package/dist/types/cli/read-cli.d.ts +1 -0
  6. package/dist/types/cli.d.ts +9 -1
  7. package/dist/types/commands/daemon.d.ts +2 -2
  8. package/dist/types/commands/deep-interview.d.ts +9 -0
  9. package/dist/types/commands/harness.d.ts +22 -0
  10. package/dist/types/commands/read.d.ts +6 -0
  11. package/dist/types/commands/sdk.d.ts +20 -2
  12. package/dist/types/config/keybindings.d.ts +34 -4
  13. package/dist/types/config/model-profile-contract.d.ts +40 -0
  14. package/dist/types/config/model-profiles.d.ts +2 -3
  15. package/dist/types/config/model-registry.d.ts +5 -0
  16. package/dist/types/config/provider-auth-health.d.ts +14 -0
  17. package/dist/types/config/provider-ranking.d.ts +59 -0
  18. package/dist/types/config/settings-schema.d.ts +156 -10
  19. package/dist/types/config/settings.d.ts +3 -0
  20. package/dist/types/edit/modes/patch.d.ts +13 -0
  21. package/dist/types/edit/path-mutation-lock.d.ts +15 -0
  22. package/dist/types/eval/py/executor.d.ts +1 -1
  23. package/dist/types/eval/py/runner-artifact.d.ts +8 -0
  24. package/dist/types/eval/py/tool-bridge.d.ts +1 -2
  25. package/dist/types/extensibility/extensions/types.d.ts +43 -2
  26. package/dist/types/extensibility/shared-events.d.ts +6 -0
  27. package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
  28. package/dist/types/main.d.ts +33 -2
  29. package/dist/types/memories/index.d.ts +2 -0
  30. package/dist/types/modes/acp/acp-agent.d.ts +22 -9
  31. package/dist/types/modes/components/assistant-message.d.ts +3 -1
  32. package/dist/types/modes/components/btw-panel.d.ts +1 -0
  33. package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
  34. package/dist/types/modes/components/queue-pane.d.ts +8 -0
  35. package/dist/types/modes/components/queued-message-selector.d.ts +6 -0
  36. package/dist/types/modes/components/read-tool-group.d.ts +4 -4
  37. package/dist/types/modes/components/runtime-mcp-add-wizard.d.ts +2 -1
  38. package/dist/types/modes/components/session-observer-overlay.d.ts +4 -0
  39. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  40. package/dist/types/modes/components/tool-execution.d.ts +8 -0
  41. package/dist/types/modes/components/tool-status-header.d.ts +4 -2
  42. package/dist/types/modes/components/welcome.d.ts +5 -0
  43. package/dist/types/modes/controllers/btw-controller.d.ts +5 -0
  44. package/dist/types/modes/controllers/command-controller.d.ts +2 -0
  45. package/dist/types/modes/controllers/event-controller.d.ts +3 -0
  46. package/dist/types/modes/interactive-mode.d.ts +13 -2
  47. package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
  48. package/dist/types/modes/prompt-action-autocomplete.d.ts +6 -1
  49. package/dist/types/modes/prompt-suggestion-controller.d.ts +35 -0
  50. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +2 -2
  51. package/dist/types/modes/types.d.ts +6 -0
  52. package/dist/types/modes/utils/hotkeys-markdown.d.ts +2 -1
  53. package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
  54. package/dist/types/runtime/memory-domain.d.ts +9 -0
  55. package/dist/types/runtime/memory-guard-contract.d.ts +71 -0
  56. package/dist/types/runtime/memory-guard.d.ts +39 -0
  57. package/dist/types/runtime/memory-limit.d.ts +11 -0
  58. package/dist/types/runtime-mcp/content-limits.d.ts +7 -0
  59. package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +1 -1
  60. package/dist/types/runtime-mcp/manager.d.ts +9 -1
  61. package/dist/types/runtime-mcp/oauth-flow.d.ts +0 -5
  62. package/dist/types/runtime-mcp/plugin-network-boundary.d.ts +14 -0
  63. package/dist/types/runtime-mcp/redaction.d.ts +2 -0
  64. package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
  65. package/dist/types/sdk/acp/final-text.d.ts +19 -0
  66. package/dist/types/sdk/acp/mcp.d.ts +23 -0
  67. package/dist/types/sdk/broker/broker.d.ts +2 -0
  68. package/dist/types/sdk/broker/lifecycle.d.ts +13 -0
  69. package/dist/types/sdk/bus/chat-daemon-control.d.ts +9 -1
  70. package/dist/types/sdk/bus/config-commands.d.ts +2 -2
  71. package/dist/types/sdk/bus/config.d.ts +2 -0
  72. package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
  73. package/dist/types/sdk/bus/conversation-store.d.ts +1 -0
  74. package/dist/types/sdk/bus/daemon-paths.d.ts +1 -0
  75. package/dist/types/sdk/bus/index.d.ts +52 -4
  76. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +37 -0
  77. package/dist/types/sdk/bus/lifecycle-commands.d.ts +5 -4
  78. package/dist/types/sdk/bus/notification-orchestration.d.ts +1 -0
  79. package/dist/types/sdk/bus/notification-service.d.ts +34 -0
  80. package/dist/types/sdk/bus/operator-runtime.d.ts +1 -0
  81. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +106 -0
  82. package/dist/types/sdk/bus/rate-limit-pool.d.ts +2 -0
  83. package/dist/types/sdk/bus/reconciliation-store.d.ts +65 -0
  84. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +33 -9
  85. package/dist/types/sdk/bus/telegram-daemon-control.d.ts +5 -1
  86. package/dist/types/sdk/bus/telegram-daemon.d.ts +286 -12
  87. package/dist/types/sdk/bus/telegram-reference.d.ts +2 -0
  88. package/dist/types/sdk/bus/topic-registry.d.ts +88 -2
  89. package/dist/types/sdk/client/discovery.d.ts +2 -0
  90. package/dist/types/sdk/client/liveness.d.ts +7 -0
  91. package/dist/types/sdk/host/control/operations.d.ts +3 -2
  92. package/dist/types/sdk/host/host.d.ts +3 -1
  93. package/dist/types/sdk/host/query/handlers.d.ts +14 -0
  94. package/dist/types/sdk/index.d.ts +2 -0
  95. package/dist/types/sdk/lifecycle-session.d.ts +10 -1
  96. package/dist/types/sdk/prompt-status.d.ts +88 -0
  97. package/dist/types/sdk/session-directory.d.ts +1 -1
  98. package/dist/types/sdk/session.d.ts +7 -0
  99. package/dist/types/sdk/startup-capability.d.ts +9 -0
  100. package/dist/types/sdk/transport/auth-preface.d.ts +9 -0
  101. package/dist/types/sdk/transport/index.d.ts +12 -0
  102. package/dist/types/sdk/transport/relay.d.ts +43 -0
  103. package/dist/types/sdk/transport/serve-cli.d.ts +4 -0
  104. package/dist/types/sdk/transport/socket.d.ts +7 -0
  105. package/dist/types/sdk/transport/stdio.d.ts +3 -0
  106. package/dist/types/session/agent-session.d.ts +83 -24
  107. package/dist/types/session/btw-contract.d.ts +16 -0
  108. package/dist/types/session/fallback-chain-controller.d.ts +18 -2
  109. package/dist/types/session/internal/managed-session-scope.d.ts +70 -10
  110. package/dist/types/session/internal/managed-session-storage.d.ts +34 -12
  111. package/dist/types/session/internal/native-publish-outcome.d.ts +48 -0
  112. package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
  113. package/dist/types/session/session-manager.d.ts +89 -18
  114. package/dist/types/session/session-storage.d.ts +31 -0
  115. package/dist/types/session/streaming-output.d.ts +60 -5
  116. package/dist/types/setup/credential-import.d.ts +5 -1
  117. package/dist/types/setup/provider-onboarding.d.ts +2 -0
  118. package/dist/types/skc-runtime/deep-interview-runtime.d.ts +1 -1
  119. package/dist/types/skc-runtime/deep-interview-stage.d.ts +37 -0
  120. package/dist/types/skc-runtime/gc-runtime.d.ts +1 -1
  121. package/dist/types/skc-runtime/linux-proc.d.ts +22 -14
  122. package/dist/types/skc-runtime/memory-guard-owner-claims.d.ts +47 -0
  123. package/dist/types/skc-runtime/ralplan-runtime.d.ts +112 -1
  124. package/dist/types/skc-runtime/repository-binding.d.ts +63 -0
  125. package/dist/types/skc-runtime/state-runtime.d.ts +3 -1
  126. package/dist/types/skc-runtime/state-writer.d.ts +5 -1
  127. package/dist/types/skc-runtime/team-launch.d.ts +1 -1
  128. package/dist/types/skc-runtime/team-runtime.d.ts +9 -2
  129. package/dist/types/skc-runtime/team-store.d.ts +12 -0
  130. package/dist/types/skc-runtime/team-worker-memory-guard.d.ts +92 -0
  131. package/dist/types/skc-runtime/tmux-owner-isolation.d.ts +7 -0
  132. package/dist/types/skc-runtime/ultragoal-guard.d.ts +6 -5
  133. package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +28 -0
  134. package/dist/types/skc-runtime/ultragoal-runtime.d.ts +43 -5
  135. package/dist/types/skill-state/workflow-hud.d.ts +3 -0
  136. package/dist/types/ssh/utils.d.ts +1 -0
  137. package/dist/types/task/discovery.d.ts +3 -1
  138. package/dist/types/task/executor.d.ts +6 -0
  139. package/dist/types/task/index.d.ts +3 -1
  140. package/dist/types/task/provider-retry-status.d.ts +13 -0
  141. package/dist/types/task/receipt.d.ts +2 -0
  142. package/dist/types/task/types.d.ts +133 -0
  143. package/dist/types/task/ultragoal-redteam-activation.d.ts +33 -0
  144. package/dist/types/tools/browser/launch.d.ts +7 -0
  145. package/dist/types/tools/fetch.d.ts +22 -9
  146. package/dist/types/tools/image-gen.d.ts +63 -1
  147. package/dist/types/tools/index.d.ts +7 -1
  148. package/dist/types/tools/output-meta.d.ts +21 -1
  149. package/dist/types/tools/read-internals.d.ts +12 -0
  150. package/dist/types/tools/read.d.ts +45 -1
  151. package/dist/types/tools/resource-gc.d.ts +23 -0
  152. package/dist/types/tools/skill-discovery.d.ts +7 -0
  153. package/dist/types/tools/sqlite-reader.d.ts +7 -0
  154. package/dist/types/tools/tool-result.d.ts +7 -1
  155. package/dist/types/utils/prompt-suggestion.d.ts +33 -0
  156. package/dist/types/utils/shell-snapshot.d.ts +12 -0
  157. package/dist/types/web/insane/bridge.d.ts +1 -0
  158. package/dist/types/web/insane/url-guard.d.ts +17 -0
  159. package/package.json +8 -12
  160. package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
  161. package/scripts/capture-platform-shortcut-labels-showcase.ts +342 -0
  162. package/scripts/capture-sticky-viewport-showcase.ts +292 -0
  163. package/scripts/compile-args.ts +0 -1
  164. package/scripts/dogfood-repository-binding.ts +209 -0
  165. package/scripts/generate-docs-index.ts +4 -1
  166. package/scripts/generate-sdk-operation-inventory.ts +9 -0
  167. package/scripts/run-test-manifest.ts +6 -4
  168. package/scripts/verify-skc-sdk-canonicalization.ts +122 -18
  169. package/scripts/verify-sticky-viewport-showcase.ts +611 -0
  170. package/src/capability/index.ts +58 -42
  171. package/src/capability/types.ts +3 -0
  172. package/src/cli/args.ts +16 -100
  173. package/src/cli/fast-help.ts +1 -1
  174. package/src/cli/mcp-cli.ts +4 -21
  175. package/src/cli/notify-cli.ts +6 -38
  176. package/src/cli/read-cli.ts +2 -1
  177. package/src/cli/setup-cli.ts +10 -4
  178. package/src/cli.ts +133 -11
  179. package/src/commands/daemon.ts +22 -5
  180. package/src/commands/deep-interview.ts +26 -1
  181. package/src/commands/harness.ts +35 -12
  182. package/src/commands/read.ts +11 -2
  183. package/src/commands/sdk.ts +134 -17
  184. package/src/commands/team.ts +1 -1
  185. package/src/commit/agentic/index.ts +3 -3
  186. package/src/commit/map-reduce/index.ts +2 -2
  187. package/src/config/keybindings.ts +158 -25
  188. package/src/config/model-profile-contract.ts +174 -0
  189. package/src/config/model-profiles.ts +51 -10
  190. package/src/config/model-registry.ts +24 -4
  191. package/src/config/model-resolver.ts +2 -2
  192. package/src/config/provider-auth-health.ts +42 -0
  193. package/src/config/provider-ranking.ts +119 -0
  194. package/src/config/settings-schema.ts +157 -10
  195. package/src/config/settings.ts +254 -108
  196. package/src/coordinator-mcp/model-preset.ts +21 -74
  197. package/src/defaults/skc/skills/deep-interview/SKILL.md +147 -24
  198. package/src/defaults/skc/skills/ralplan/SKILL.md +91 -34
  199. package/src/defaults/skc/skills/team/SKILL.md +1 -1
  200. package/src/defaults/skc/skills/ultragoal/SKILL.md +68 -17
  201. package/src/discovery/ssh.ts +12 -1
  202. package/src/edit/index.ts +3 -6
  203. package/src/edit/modes/patch.ts +38 -1
  204. package/src/edit/modes/replace.ts +42 -0
  205. package/src/edit/path-mutation-lock.ts +112 -0
  206. package/src/eval/js/tool-bridge.ts +1 -1
  207. package/src/eval/py/executor.ts +37 -13
  208. package/src/eval/py/kernel.ts +1 -21
  209. package/src/eval/py/prelude.py +2 -2
  210. package/src/eval/py/runner-artifact.ts +84 -0
  211. package/src/eval/py/tool-bridge.ts +34 -18
  212. package/src/extensibility/extensions/runner.ts +4 -0
  213. package/src/extensibility/extensions/types.ts +42 -4
  214. package/src/extensibility/plugins/marketplace/fetcher.ts +191 -7
  215. package/src/extensibility/shared-events.ts +5 -0
  216. package/src/extensibility/skc-plugins/runtime-adapters.ts +2 -1
  217. package/src/hooks/native-skill-hook.ts +17 -4
  218. package/src/internal-urls/docs-index.generated.ts +17 -16
  219. package/src/internal-urls/local-protocol.ts +87 -25
  220. package/src/internal-urls/local-root-gc.ts +127 -0
  221. package/src/internal-urls/mcp-protocol.ts +73 -11
  222. package/src/main.ts +120 -42
  223. package/src/memories/index.ts +10 -0
  224. package/src/modes/DESIGN.md +52 -0
  225. package/src/modes/acp/acp-agent.ts +647 -83
  226. package/src/modes/acp/acp-event-mapper.ts +106 -12
  227. package/src/modes/acp/acp-mode.ts +39 -3
  228. package/src/modes/action-registry.ts +1 -1
  229. package/src/modes/components/assistant-message.ts +123 -22
  230. package/src/modes/components/btw-panel.ts +82 -16
  231. package/src/modes/components/irc-sidebar.ts +176 -62
  232. package/src/modes/components/model-selector.ts +61 -4
  233. package/src/modes/components/notifications-settings-editor.ts +1 -1
  234. package/src/modes/components/oauth-selector.ts +42 -12
  235. package/src/modes/components/plan-preview-overlay.ts +1 -1
  236. package/src/modes/components/queue-pane.ts +55 -9
  237. package/src/modes/components/queued-message-selector.ts +53 -10
  238. package/src/modes/components/read-tool-group.ts +82 -14
  239. package/src/modes/components/runtime-mcp-add-wizard.ts +5 -0
  240. package/src/modes/components/sayknow-pet-widget.ts +27 -8
  241. package/src/modes/components/session-observer-overlay.ts +187 -32
  242. package/src/modes/components/settings-selector.ts +60 -18
  243. package/src/modes/components/tool-execution.ts +138 -27
  244. package/src/modes/components/tool-status-header.ts +26 -8
  245. package/src/modes/components/welcome.ts +50 -23
  246. package/src/modes/controllers/btw-controller.ts +119 -36
  247. package/src/modes/controllers/command-controller.ts +101 -54
  248. package/src/modes/controllers/event-controller.ts +119 -27
  249. package/src/modes/controllers/extension-ui-controller.ts +23 -12
  250. package/src/modes/controllers/input-controller.ts +100 -8
  251. package/src/modes/controllers/runtime-mcp-command-controller.ts +29 -6
  252. package/src/modes/controllers/selector-controller.ts +4 -1
  253. package/src/modes/interactive-mode.ts +201 -60
  254. package/src/modes/irc-observation-ledger.ts +71 -15
  255. package/src/modes/prompt-action-autocomplete.ts +32 -13
  256. package/src/modes/prompt-suggestion-controller.ts +96 -0
  257. package/src/modes/runtime-init.ts +20 -2
  258. package/src/modes/shared/agent-wire/command-dispatch.ts +3 -3
  259. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +2 -2
  260. package/src/modes/types.ts +6 -0
  261. package/src/modes/utils/hotkeys-markdown.ts +64 -36
  262. package/src/modes/utils/ui-helpers.ts +99 -4
  263. package/src/prompts/agent-fragments/restricted-bash.md +1 -1
  264. package/src/prompts/agents/architect.md +17 -3
  265. package/src/prompts/agents/critic.md +17 -2
  266. package/src/prompts/agents/executor.md +1 -1
  267. package/src/prompts/agents/planner.md +8 -1
  268. package/src/prompts/system/btw-user.md +3 -8
  269. package/src/prompts/system/prompt-suggestion-system.md +32 -0
  270. package/src/prompts/system/system-prompt.md +6 -3
  271. package/src/prompts/tools/cron.md +3 -1
  272. package/src/prompts/tools/read.md +4 -2
  273. package/src/prompts/tools/skill-discovery.md +1 -0
  274. package/src/runtime/memory-domain.ts +66 -0
  275. package/src/runtime/memory-guard-contract.ts +73 -0
  276. package/src/runtime/memory-guard.ts +292 -0
  277. package/src/runtime/memory-limit.ts +50 -0
  278. package/src/runtime-mcp/client.ts +41 -55
  279. package/src/runtime-mcp/content-limits.ts +71 -0
  280. package/src/runtime-mcp/discoverable-tool-metadata.ts +1 -1
  281. package/src/runtime-mcp/json-rpc.ts +28 -11
  282. package/src/runtime-mcp/manager.ts +77 -59
  283. package/src/runtime-mcp/oauth-flow.ts +0 -72
  284. package/src/runtime-mcp/plugin-network-boundary.ts +101 -0
  285. package/src/runtime-mcp/redaction.ts +30 -0
  286. package/src/runtime-mcp/smithery-auth.ts +17 -2
  287. package/src/runtime-mcp/smithery-connect.ts +11 -1
  288. package/src/runtime-mcp/transports/http.ts +63 -22
  289. package/src/sdk/acp/adapter.ts +8 -1
  290. package/src/sdk/acp/final-text.ts +40 -0
  291. package/src/sdk/acp/mcp.ts +26 -0
  292. package/src/sdk/broker/broker.ts +34 -20
  293. package/src/sdk/broker/identity.ts +22 -12
  294. package/src/sdk/broker/lifecycle.ts +293 -43
  295. package/src/sdk/broker/session-index.ts +11 -1
  296. package/src/sdk/bus/chat-daemon-cli.ts +2 -2
  297. package/src/sdk/bus/chat-daemon-control.ts +22 -5
  298. package/src/sdk/bus/config-commands.ts +2 -2
  299. package/src/sdk/bus/config.ts +10 -2
  300. package/src/sdk/bus/control-drain-lease.ts +104 -0
  301. package/src/sdk/bus/conversation-store.ts +40 -6
  302. package/src/sdk/bus/daemon-paths.ts +2 -0
  303. package/src/sdk/bus/index.ts +793 -121
  304. package/src/sdk/bus/kind-aware-reconciliation.ts +242 -0
  305. package/src/sdk/bus/lifecycle-commands.ts +63 -10
  306. package/src/sdk/bus/lifecycle-control-runtime.ts +11 -2
  307. package/src/sdk/bus/lifecycle-orchestrator.ts +32 -1
  308. package/src/sdk/bus/notification-orchestration.ts +12 -0
  309. package/src/sdk/bus/notification-service.ts +87 -25
  310. package/src/sdk/bus/operator-runtime.ts +31 -5
  311. package/src/sdk/bus/prompt-reconciliation.ts +240 -0
  312. package/src/sdk/bus/rate-limit-pool.ts +8 -0
  313. package/src/sdk/bus/recent-activity.ts +90 -26
  314. package/src/sdk/bus/reconciliation-store.ts +224 -0
  315. package/src/sdk/bus/telegram-cli.ts +6 -13
  316. package/src/sdk/bus/telegram-daemon-cli.ts +8 -3
  317. package/src/sdk/bus/telegram-daemon-contract.ts +34 -9
  318. package/src/sdk/bus/telegram-daemon-control.ts +161 -40
  319. package/src/sdk/bus/telegram-daemon.ts +3649 -593
  320. package/src/sdk/bus/telegram-reference.ts +20 -2
  321. package/src/sdk/bus/topic-registry.ts +451 -12
  322. package/src/sdk/cli/session-cli.ts +15 -2
  323. package/src/sdk/client/discovery.ts +19 -3
  324. package/src/sdk/client/liveness.ts +49 -0
  325. package/src/sdk/host/control/dispatch.ts +8 -2
  326. package/src/sdk/host/control/operations.ts +3 -2
  327. package/src/sdk/host/host.ts +27 -9
  328. package/src/sdk/host/query/handlers.ts +125 -5
  329. package/src/sdk/index.ts +12 -0
  330. package/src/sdk/lifecycle-session.ts +19 -3
  331. package/src/sdk/mcp/server.ts +46 -18
  332. package/src/sdk/prompt-status.ts +97 -0
  333. package/src/sdk/protocol/operation-inventory.generated.json +145 -0
  334. package/src/sdk/protocol/operation-registry.ts +24 -4
  335. package/src/sdk/session-directory.ts +5 -1
  336. package/src/sdk/session.ts +69 -8
  337. package/src/sdk/startup-capability.ts +15 -1
  338. package/src/sdk/transport/auth-preface.ts +82 -0
  339. package/src/sdk/transport/index.ts +18 -0
  340. package/src/sdk/transport/relay.ts +252 -0
  341. package/src/sdk/transport/serve-cli.ts +105 -0
  342. package/src/sdk/transport/socket.ts +197 -0
  343. package/src/sdk/transport/stdio.ts +17 -0
  344. package/src/session/agent-session.ts +1112 -314
  345. package/src/session/blob-store.ts +25 -7
  346. package/src/session/btw-contract.ts +59 -0
  347. package/src/session/fallback-chain-controller.ts +47 -8
  348. package/src/session/internal/managed-session-scope.ts +1426 -259
  349. package/src/session/internal/managed-session-storage.ts +414 -238
  350. package/src/session/internal/native-publish-outcome.ts +271 -0
  351. package/src/session/memory-guard-checkpoint-participant.ts +131 -0
  352. package/src/session/session-manager.ts +2079 -469
  353. package/src/session/session-storage.ts +151 -11
  354. package/src/session/streaming-output.ts +262 -43
  355. package/src/setup/credential-import.ts +28 -3
  356. package/src/setup/provider-onboarding.ts +49 -5
  357. package/src/setup/provider-presets.json +2 -1
  358. package/src/skc-runtime/deep-interview-runtime.ts +303 -36
  359. package/src/skc-runtime/deep-interview-stage.ts +1016 -0
  360. package/src/skc-runtime/deep-interview-state.ts +8 -5
  361. package/src/skc-runtime/gc-render.ts +1 -0
  362. package/src/skc-runtime/gc-runtime.ts +11 -1
  363. package/src/skc-runtime/linux-proc.ts +70 -36
  364. package/src/skc-runtime/managed-owner-supervisor.ts +83 -4
  365. package/src/skc-runtime/memory-guard-owner-claims.ts +389 -0
  366. package/src/skc-runtime/ralplan-runtime.ts +1057 -75
  367. package/src/skc-runtime/repository-binding.ts +267 -0
  368. package/src/skc-runtime/session-state-sidecar.ts +25 -9
  369. package/src/skc-runtime/state-runtime.ts +50 -12
  370. package/src/skc-runtime/state-writer.ts +68 -56
  371. package/src/skc-runtime/team-launch.ts +34 -5
  372. package/src/skc-runtime/team-runtime.ts +41 -1
  373. package/src/skc-runtime/team-store.ts +32 -0
  374. package/src/skc-runtime/team-worker-memory-guard.ts +363 -0
  375. package/src/skc-runtime/team-workers.ts +1 -0
  376. package/src/skc-runtime/tmux-common.ts +13 -2
  377. package/src/skc-runtime/tmux-owner-isolation.ts +20 -1
  378. package/src/skc-runtime/tmux-sessions.ts +45 -6
  379. package/src/skc-runtime/ultragoal-guard.ts +93 -15
  380. package/src/skc-runtime/ultragoal-receipt-freshness.ts +123 -0
  381. package/src/skc-runtime/ultragoal-runtime.ts +469 -38
  382. package/src/skc-runtime/workflow-manifest.generated.json +195 -5
  383. package/src/skc-runtime/workflow-manifest.ts +67 -3
  384. package/src/skill-state/workflow-hud.ts +25 -2
  385. package/src/skill-state/workflow-mutation-guard.ts +104 -12
  386. package/src/slash-commands/builtin-registry.ts +1 -1
  387. package/src/ssh/utils.ts +14 -0
  388. package/src/task/discovery.ts +8 -2
  389. package/src/task/executor.ts +165 -47
  390. package/src/task/index.ts +123 -15
  391. package/src/task/provider-retry-status.ts +88 -0
  392. package/src/task/receipt.ts +3 -0
  393. package/src/task/render.ts +45 -26
  394. package/src/task/skc-command.ts +2 -2
  395. package/src/task/types.ts +55 -10
  396. package/src/task/ultragoal-redteam-activation.ts +75 -0
  397. package/src/tools/ask.ts +1 -1
  398. package/src/tools/ast-edit.ts +2 -2
  399. package/src/tools/bash-allowed-prefixes.ts +45 -1
  400. package/src/tools/bash-pty-selection.ts +2 -2
  401. package/src/tools/browser/launch.ts +41 -6
  402. package/src/tools/browser/screenshot-format.ts +6 -1
  403. package/src/tools/cron.ts +1 -1
  404. package/src/tools/fetch.ts +127 -154
  405. package/src/tools/image-gen.ts +476 -23
  406. package/src/tools/index.ts +7 -1
  407. package/src/tools/output-meta.ts +176 -9
  408. package/src/tools/path-utils.ts +5 -1
  409. package/src/tools/read-internals.ts +44 -0
  410. package/src/tools/read.ts +1544 -310
  411. package/src/tools/resource-gc.ts +665 -125
  412. package/src/tools/skill-discovery.ts +39 -3
  413. package/src/tools/sqlite-reader.ts +63 -5
  414. package/src/tools/subagent-render.ts +74 -16
  415. package/src/tools/subagent.ts +2 -0
  416. package/src/tools/tool-result.ts +14 -1
  417. package/src/utils/edit-mode.ts +2 -2
  418. package/src/utils/pasted-image-path.ts +15 -6
  419. package/src/utils/prompt-suggestion.ts +265 -0
  420. package/src/utils/shell-snapshot.ts +173 -63
  421. package/src/utils/sixel.ts +3 -3
  422. package/src/web/insane/bridge.ts +5 -1
  423. package/src/web/insane/url-guard.ts +140 -27
  424. package/src/web/scrapers/docs-rs.ts +30 -5
  425. package/src/web/scrapers/types.ts +19 -49
  426. package/src/web/scrapers/utils.ts +12 -26
  427. package/src/web/search/providers/codex.ts +1 -1
  428. package/src/workflow/workflow-intent-diff.ts +4 -1
@@ -1,3 +1,4 @@
1
+ import { type RalplanIndexRow } from "./ledger-event-renderer";
1
2
  /**
2
3
  * Native implementation of `skc ralplan`.
3
4
  *
@@ -12,7 +13,7 @@
12
13
  *
13
14
  * 2. **Artifact write**: `skc ralplan --write --stage <type> --stage_n <N>
14
15
  * (--artifact <path-or-string> | --artifact-env SKC_RALPLAN_ARTIFACT)
15
- * [--run-id <id>] [--session-id <id>] [--json]` persists Planner / Architect
16
+ * [--run-id <id>] [--session-id <id>] [--lane-verdict <token>] [--json]` persists Planner / Architect
16
17
  * / Critic / revision / post-interview / ADR / final markdown under `.skc/plans/ralplan/<run-id>/`, maintains
17
18
  * an `index.jsonl` audit log, copies `final` stages to `pending-approval.md`, and advances
18
19
  * the HUD chip to reflect the latest persisted stage.
@@ -22,5 +23,115 @@ export interface RalplanCommandResult {
22
23
  stdout?: string;
23
24
  stderr?: string;
24
25
  }
26
+ /** Default consensus iterations (planner + revision openers) per run. Matches SKILL.md re-review cap. */
27
+ export declare const RALPLAN_DEFAULT_MAX_ITERATIONS = 5;
28
+ /** Inclusive upper bound for `skc.ralplan.maxIterations` settings overrides. */
29
+ export declare const RALPLAN_MAX_ITERATIONS_LIMIT = 20;
30
+ /** Operator-visible stuck signal for headless/CI orchestration (#3165). */
31
+ export declare const PLANNING_STUCK_MARKER = "PLANNING-STUCK";
32
+ /** Default architect/critic review passes per consensus iteration. */
33
+ export declare const RALPLAN_DEFAULT_MAX_REVIEW_PASSES_PER_LANE = 1;
34
+ /** Inclusive upper bound for `skc.ralplan.maxReviewPassesPerLane` settings overrides. */
35
+ export declare const RALPLAN_MAX_REVIEW_PASSES_PER_LANE_LIMIT = 10;
36
+ export type RalplanIterationCapDecision = {
37
+ allowed: true;
38
+ currentIterations: number;
39
+ projectedIterations: number;
40
+ maxIterations: number;
41
+ } | {
42
+ allowed: false;
43
+ currentIterations: number;
44
+ projectedIterations: number;
45
+ maxIterations: number;
46
+ reason: string;
47
+ };
48
+ /**
49
+ * Pure consensus-iteration budget gate (#3165).
50
+ *
51
+ * A `planner` or `revision` write opens a new iteration (same definition as
52
+ * `summarizeRalplanIndex`). Other stages never open iterations and are always
53
+ * allowed by this gate — including `final` after the cap is already reached.
54
+ *
55
+ * `iterationFloor` raises the observed opener count when on-disk evidence or a
56
+ * recovered ledger is higher than the parsed index (fail-closed vs wipe/truncate).
57
+ */
58
+ export declare function evaluateRalplanIterationCap(input: {
59
+ rows: readonly RalplanIndexRow[];
60
+ stage: string;
61
+ maxIterations?: number;
62
+ /** Minimum opener count (e.g. on-disk stage-*-{planner,revision}.md). */
63
+ iterationFloor?: number;
64
+ }): RalplanIterationCapDecision;
65
+ export type RalplanReviewLane = "architect" | "critic";
66
+ export type RalplanReviewLaneBudgetDecision = {
67
+ allowed: true;
68
+ lane?: RalplanReviewLane;
69
+ currentPasses: number;
70
+ projectedPasses: number;
71
+ maxReviewPassesPerLane: number;
72
+ finalSlot: boolean;
73
+ ledgerNote?: string;
74
+ } | {
75
+ allowed: false;
76
+ lane: RalplanReviewLane;
77
+ currentPasses: number;
78
+ projectedPasses: number;
79
+ maxReviewPassesPerLane: number;
80
+ finalSlot: false;
81
+ ledgerNote?: string;
82
+ reason: string;
83
+ };
84
+ /**
85
+ * Pure per-lane review-pass budget gate. Architect and critic passes are limited
86
+ * within the current consensus iteration; all other stages remain unconditionally
87
+ * available as escalation paths.
88
+ */
89
+ export declare function evaluateRalplanReviewLaneBudget(input: {
90
+ rows: readonly RalplanIndexRow[];
91
+ stage: string;
92
+ maxReviewPassesPerLane?: unknown;
93
+ onDiskLaneCounts?: {
94
+ architect: number;
95
+ critic: number;
96
+ };
97
+ }): RalplanReviewLaneBudgetDecision;
98
+ /**
99
+ * Count on-disk planner/revision stage artifacts for a run. Used as a floor when
100
+ * `index.jsonl` is missing, empty, truncated, or otherwise under-counts openers.
101
+ */
102
+ export declare function countRalplanOnDiskOpeners(cwd: string, sessionId: string, runId: string): Promise<number>;
103
+ /**
104
+ * Count on-disk Architect/Critic stage artifacts for a run. This is the
105
+ * fail-closed floor for a missing, truncated, or malformed `index.jsonl`.
106
+ */
107
+ export declare function countRalplanOnDiskLaneArtifacts(cwd: string, sessionId: string, runId: string): Promise<{
108
+ architect: number;
109
+ critic: number;
110
+ }>;
111
+ /**
112
+ * Load index rows for cap enforcement. Unlike HUD reads, returns structural
113
+ * signals so callers can fail closed when the ledger is empty/malformed while
114
+ * opener artifacts already exist on disk.
115
+ */
116
+ export declare function loadRalplanIndexForCap(cwd: string, sessionId: string, runId: string): Promise<{
117
+ rows: RalplanIndexRow[];
118
+ indexPresent: boolean;
119
+ parseableLines: number;
120
+ rawLineCount: number;
121
+ rawText?: string;
122
+ }>;
123
+ /**
124
+ * Resolve ralplan consensus iteration cap. Project `./.skc/settings.json` overrides
125
+ * user settings, else default 5.
126
+ */
127
+ export declare function resolveRalplanMaxIterations(cwd: string): Promise<{
128
+ maxIterations: number;
129
+ source: string;
130
+ }>;
131
+ /** Resolve the per-lane review-pass budget with project-over-user precedence. */
132
+ export declare function resolveRalplanMaxReviewPassesPerLane(cwd: string): Promise<{
133
+ maxReviewPassesPerLane: number;
134
+ source: string;
135
+ }>;
25
136
  export declare function isRalplanArtifactWriteInvocation(args: readonly string[]): boolean;
26
137
  export declare function runNativeRalplanCommand(args: string[], cwd?: string): Promise<RalplanCommandResult>;
@@ -0,0 +1,63 @@
1
+ import { type GitRepository } from "../utils/git";
2
+ export declare const REPOSITORY_BINDING_SCHEMA: "skc.repository_binding.v1";
3
+ export interface RepositoryBinding {
4
+ schema: typeof REPOSITORY_BINDING_SCHEMA;
5
+ /** Canonical realpath of the git worktree root (or resolved cwd root). */
6
+ worktreeRoot: string;
7
+ /** Git common dir realpath when available; null outside a git checkout. */
8
+ commonDir: string | null;
9
+ /** Optional repo-relative subdirectory the lane should operate under. */
10
+ relativeSubdir?: string;
11
+ /** Optional display path (may be non-canonical); never used for authority. */
12
+ displayPath?: string;
13
+ /** Optional baseline HEAD at capture time. */
14
+ head?: string;
15
+ /** Optional branch name at capture time (when not detached). */
16
+ branch?: string;
17
+ }
18
+ export type RepositoryBindingErrorCode = "not_a_repository" | "identity_mismatch" | "path_outside_root" | "invalid_binding";
19
+ export declare class RepositoryBindingError extends Error {
20
+ readonly code: RepositoryBindingErrorCode;
21
+ constructor(code: RepositoryBindingErrorCode, message: string);
22
+ }
23
+ /** Capture a durable binding from the active cwd/worktree. */
24
+ export declare function captureRepositoryBinding(cwd: string, options?: {
25
+ relativeSubdir?: string;
26
+ displayPath?: string;
27
+ }): Promise<RepositoryBinding>;
28
+ /** Parse a binding from JSON/plan payload; fail closed on malformed shapes. */
29
+ export declare function parseRepositoryBinding(value: unknown): RepositoryBinding;
30
+ /** True when two bindings refer to the same repository identity (linked worktrees ok). */
31
+ export declare function repositoryBindingsMatch(left: RepositoryBinding, right: RepositoryBinding): boolean;
32
+ /**
33
+ * Ensure `cwd` is inside the bound repository (or the same linked worktree family).
34
+ * Fails closed on sibling-repo drift.
35
+ */
36
+ export declare function assertCwdMatchesRepositoryBinding(cwd: string, binding: RepositoryBinding): Promise<RepositoryBinding>;
37
+ /** Ensure a declared target path resolves under the bound worktree root. */
38
+ export declare function assertPathUnderRepositoryBinding(binding: RepositoryBinding, targetPath: string): string;
39
+ /**
40
+ * Public identity snapshot for receipts/handoffs (no display-only fields required).
41
+ * Always includes the schema + durable roots so downstream lanes can re-verify.
42
+ */
43
+ export declare function publicRepositoryBinding(binding: RepositoryBinding): RepositoryBinding;
44
+ /**
45
+ * Resolve the authoritative binding for a delegated task before discovery/spawn.
46
+ *
47
+ * - Missing declaration → stamp from session cwd (never leave authority implicit).
48
+ * - Declared binding → parse + fail closed unless it matches the active session worktree.
49
+ * - relativeSubdir (when present) must resolve under the bound root.
50
+ */
51
+ export declare function resolveTaskRepositoryBinding(sessionCwd: string, declared: unknown | undefined): Promise<RepositoryBinding>;
52
+ /**
53
+ * Ensure an execution/isolation root (cwd or worktree) still matches the bound identity.
54
+ * Used after isolation workspace creation so linked worktrees keep the source repository.
55
+ */
56
+ export declare function assertExecutionRootMatchesRepositoryBinding(executionRoot: string, binding: RepositoryBinding): Promise<RepositoryBinding>;
57
+ /** Optional helper for tests and diagnostics. */
58
+ export declare function bindingFromGitRepository(repository: GitRepository, options?: {
59
+ relativeSubdir?: string;
60
+ displayPath?: string;
61
+ head?: string;
62
+ branch?: string;
63
+ }): RepositoryBinding;
@@ -11,6 +11,7 @@ export interface StateCommandResult {
11
11
  stdout?: string;
12
12
  stderr?: string;
13
13
  }
14
+ type StateWarningSink = (warning: string) => void;
14
15
  /**
15
16
  * Reconcile a workflow skill's mode-state + active-state/HUD from a caller-derived
16
17
  * payload. Unlike `skc state write`, this is a derived repair: callers reconcile from
@@ -34,5 +35,6 @@ export declare function reconcileWorkflowSkillState(options: {
34
35
  }): Promise<{
35
36
  stateFile: string;
36
37
  }>;
37
- export declare function readWorkflowStateJson(cwd: string, skill: CanonicalSkcWorkflowSkill, sessionId?: string): Promise<Record<string, unknown>>;
38
+ export declare function readWorkflowStateJson(cwd: string, skill: CanonicalSkcWorkflowSkill, sessionId?: string, onWarning?: StateWarningSink): Promise<Record<string, unknown>>;
38
39
  export declare function runNativeStateCommand(args: string[], cwd?: string): Promise<StateCommandResult>;
40
+ export {};
@@ -62,7 +62,6 @@ export interface GuardedStateWriterOptions extends StateWriterOptions {
62
62
  policy: StateWritePolicy;
63
63
  expectedRevision?: number;
64
64
  sourceRevision?: number;
65
- lockHeld?: boolean;
66
65
  }
67
66
  export type GuardedWriteResult = {
68
67
  path: string;
@@ -86,6 +85,11 @@ export interface StateWriterOptions {
86
85
  * `withFileLock` defaults.
87
86
  */
88
87
  lock?: FileLockOptions;
88
+ /**
89
+ * Caller already holds the workflow state lock for this target path (via
90
+ * `withWorkflowStateLock`). Skip re-acquisition to avoid self-deadlock.
91
+ */
92
+ lockHeld?: boolean;
89
93
  }
90
94
  export declare class StateWriteConflictError extends Error {
91
95
  readonly path: string;
@@ -2,7 +2,7 @@ import type { SkcTeamConfig, SkcTeamSnapshot, SkcTeamStartOptions, SkcTeamTask,
2
2
  /** Launch-specific option wiring kept separate from runtime dispatch. */
3
3
  export declare function withTeamLaunchTransport(options: SkcTeamStartOptions, mailboxDeliveryTransport: SkcTeamStartOptions["mailboxDeliveryTransport"]): SkcTeamStartOptions;
4
4
  /** @internal Exported for unit tests. */
5
- export declare function buildWorkerCommand(config: SkcTeamConfig, worker: SkcTeamWorker, platform?: NodeJS.Platform): string;
5
+ export declare function buildWorkerCommand(config: SkcTeamConfig, worker: SkcTeamWorker, platform?: NodeJS.Platform, promptOverride?: string): string;
6
6
  interface SkcTmuxBinary {
7
7
  command: string;
8
8
  isPsmux: boolean;
@@ -267,16 +267,23 @@ export interface WorkerHeartbeatFile {
267
267
  last_turn_at: string;
268
268
  turn_count: number;
269
269
  alive: boolean;
270
+ /** Linux process start time, so a recycled PID cannot impersonate this worker. */
271
+ process_start_time?: string;
270
272
  }
271
273
  export interface SkcWorkerIntegrationAttemptRequestResult {
272
274
  requested: boolean;
273
- reason: "requested" | "not_worker" | "missing_worktree" | "no_changes" | "deduped" | "git_error";
275
+ reason: "requested" | "not_worker" | "missing_worktree" | "no_changes" | "deduped" | "git_error" | "cancelled";
274
276
  worker?: string;
275
277
  team_name?: string;
276
278
  fingerprint?: string;
277
279
  head?: string | null;
278
280
  status?: SkcWorkerCheckpointClassification["kind"];
279
281
  }
282
+ /** Caller-supplied controls for a worker integration attempt. */
283
+ export interface SkcWorkerIntegrationAttemptOptions {
284
+ /** Abort the attempt between its blocking git probes. */
285
+ signal?: AbortSignal;
286
+ }
280
287
  export declare const SKC_TEAM_API_OPERATIONS: readonly ["send-message", "broadcast", "mailbox-list", "mailbox-mark-delivered", "mailbox-mark-notified", "notification-list", "notification-read", "notification-replay", "notification-mark-pane-attempt", "worker-startup-ack", "create-task", "read-task", "list-tasks", "update-task", "claim-task", "transition-task-status", "transition-task", "release-task-claim", "read-config", "read-manifest", "read-worker-status", "update-worker-status", "read-worker-heartbeat", "recover-stale-claims", "update-worker-heartbeat", "write-worker-inbox", "write-worker-identity", "append-event", "read-events", "read-traces", "await-event", "write-shutdown-request", "read-shutdown-ack", "read-monitor-snapshot", "write-monitor-snapshot", "read-task-approval", "write-task-approval"];
281
288
  export declare function resolveSkcTeamStateRoot(cwd?: string, env?: NodeJS.ProcessEnv): string;
282
289
  /** @internal */
@@ -314,7 +321,7 @@ export declare function classifyWorkerCheckpointStatus(cwd: string): SkcWorkerCh
314
321
  export declare function startSkcTeam(options: SkcTeamStartOptions): Promise<SkcTeamSnapshot>;
315
322
  export declare function readSkcTeamSnapshot(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv, options?: SkcTeamSnapshotOptions): Promise<SkcTeamSnapshot>;
316
323
  export declare function monitorSkcTeamSnapshot(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<SkcTeamSnapshot>;
317
- export declare function requestSkcWorkerIntegrationAttempt(cwd?: string, env?: NodeJS.ProcessEnv): Promise<SkcWorkerIntegrationAttemptRequestResult>;
324
+ export declare function requestSkcWorkerIntegrationAttempt(cwd?: string, env?: NodeJS.ProcessEnv, options?: SkcWorkerIntegrationAttemptOptions): Promise<SkcWorkerIntegrationAttemptRequestResult>;
318
325
  export declare function buildTeamHudSummary(snapshot: SkcTeamSnapshot, latestEvent?: SkcTeamEvent, latestMessage?: SkcTeamMailboxMessage): Promise<WorkflowHudSummary>;
319
326
  export declare function monitorSkcTeam(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<SkcTeamSnapshot>;
320
327
  export declare function listSkcTeams(cwd?: string, env?: NodeJS.ProcessEnv): Promise<SkcTeamSnapshot[]>;
@@ -107,6 +107,18 @@ export interface SkcTeamApiClaimResult {
107
107
  claim_token?: string;
108
108
  reason?: string;
109
109
  }
110
+ export type SkcTeamWorkerClaimSelection = {
111
+ kind: "none";
112
+ } | {
113
+ kind: "exact";
114
+ task: SkcTeamTask;
115
+ claim: SkcTeamTaskClaim;
116
+ } | {
117
+ kind: "ambiguous";
118
+ tasks: SkcTeamTask[];
119
+ };
120
+ export declare function selectCurrentClaimedTaskForWorker(tasks: readonly SkcTeamTask[], workerId: string): SkcTeamWorkerClaimSelection;
121
+ export declare function findSkcTeamClaimedTaskForWorker(tasks: readonly SkcTeamTask[], workerId: string): SkcTeamTask | undefined;
110
122
  type EventAppender = (event: {
111
123
  type: string;
112
124
  task_id?: string;
@@ -0,0 +1,92 @@
1
+ import { type StateWriterOptions } from "./state-writer";
2
+ export type SkcTeamWorkerMemoryGuardState = "idle" | "advisory" | "retrying" | "checkpointed" | "replaced" | "blocked";
3
+ export type SkcTeamWorkerMemoryGuardCheckpointKind = "clean" | "eligible" | "protected_only" | "conflicted" | "git_error";
4
+ export type SkcTeamWorkerMemoryGuardPidProbe = {
5
+ kind: "live";
6
+ start_time: string;
7
+ } | {
8
+ kind: "absent";
9
+ } | {
10
+ kind: "unverifiable";
11
+ reason: string;
12
+ };
13
+ export interface SkcTeamWorkerMemoryGuardCheckpoint {
14
+ kind: SkcTeamWorkerMemoryGuardCheckpointKind;
15
+ files: string[];
16
+ head?: string | null;
17
+ commit?: string | null;
18
+ recorded_at: string;
19
+ }
20
+ export interface SkcTeamWorkerMemoryGuardReplacement {
21
+ old_pane_id?: string;
22
+ new_pane_id?: string;
23
+ recorded_at: string;
24
+ }
25
+ export interface SkcTeamWorkerMemoryGuardLedger {
26
+ schema_version: 1;
27
+ worker_id: string;
28
+ platform: string;
29
+ state: SkcTeamWorkerMemoryGuardState;
30
+ automatic_action_allowed: boolean;
31
+ retry_count: number;
32
+ retry_limit: number;
33
+ current_task_id?: string;
34
+ last_incident_id?: string;
35
+ last_reason?: string;
36
+ last_pid_probe?: SkcTeamWorkerMemoryGuardPidProbe;
37
+ last_checkpoint?: SkcTeamWorkerMemoryGuardCheckpoint;
38
+ last_replacement?: SkcTeamWorkerMemoryGuardReplacement;
39
+ updated_at: string;
40
+ }
41
+ export interface SkcTeamWorkerMemoryGuardSelectionCandidate {
42
+ worker_id: string;
43
+ platform: string;
44
+ excess_bytes: number;
45
+ retry_count: number;
46
+ retry_limit: number;
47
+ blocked?: boolean;
48
+ current_task_id?: string;
49
+ }
50
+ export interface SkcTeamWorkerMemoryGuardSelection {
51
+ worker_id: string;
52
+ excess_bytes: number;
53
+ retry_count: number;
54
+ current_task_id?: string;
55
+ }
56
+ export declare function workerMemoryGuardLedgerPath(dir: string, workerId: string): string;
57
+ export declare function normalizeSkcTeamWorkerMemoryGuardPidProbe(value: unknown): SkcTeamWorkerMemoryGuardPidProbe | undefined;
58
+ export declare function isCanonicalSkcTeamWorkerMemoryGuardCheckpoint(value: unknown): value is SkcTeamWorkerMemoryGuardCheckpoint;
59
+ export declare function isCanonicalSkcTeamWorkerMemoryGuardReplacement(value: unknown): value is SkcTeamWorkerMemoryGuardReplacement;
60
+ export declare function isCanonicalSkcTeamWorkerMemoryGuardPidProbe(value: unknown): value is SkcTeamWorkerMemoryGuardPidProbe;
61
+ export declare function isCanonicalSkcTeamWorkerMemoryGuardLedger(value: unknown): value is SkcTeamWorkerMemoryGuardLedger;
62
+ export declare function createInitialSkcTeamWorkerMemoryGuardLedger(input: {
63
+ workerId: string;
64
+ platform: string;
65
+ now: string;
66
+ retryLimit?: number;
67
+ }): SkcTeamWorkerMemoryGuardLedger;
68
+ export declare function selectSkcTeamWorkerMemoryGuardCandidate(candidates: readonly SkcTeamWorkerMemoryGuardSelectionCandidate[]): SkcTeamWorkerMemoryGuardSelection | undefined;
69
+ export type TeamWorkerMemoryGuardAction = "advisory" | "replace" | "blocked";
70
+ export type TeamWorkerMemoryGuardResult = "noop" | "scheduled" | "succeeded" | "failed" | "blocked";
71
+ export interface TeamWorkerMemoryGuardLedgerEntry {
72
+ schema_version: 1;
73
+ recorded_at: string;
74
+ incident_id: string;
75
+ team_name: string;
76
+ worker_id: string;
77
+ task_id: string;
78
+ claim_token: string;
79
+ attempt: number;
80
+ platform: NodeJS.Platform;
81
+ action: TeamWorkerMemoryGuardAction;
82
+ result: TeamWorkerMemoryGuardResult;
83
+ reason: string;
84
+ }
85
+ export declare function isCanonicalTeamWorkerMemoryGuardLedgerEntry(value: unknown): value is TeamWorkerMemoryGuardLedgerEntry;
86
+ export declare function teamWorkerMemoryGuardDir(workerDirPath: string): string;
87
+ export declare function teamWorkerMemoryGuardLedgerPath(workerDirPath: string): string;
88
+ export declare function canMutateTeamWorkerMemoryGuard(platform: NodeJS.Platform): boolean;
89
+ export declare function advisoryReasonForTeamWorkerMemoryGuard(platform: NodeJS.Platform): string | undefined;
90
+ export declare function appendTeamWorkerMemoryGuardLedgerEntry(workerDirPath: string, entry: TeamWorkerMemoryGuardLedgerEntry, options?: StateWriterOptions): Promise<string>;
91
+ export declare function readTeamWorkerMemoryGuardLedger(workerDirPath: string): Promise<TeamWorkerMemoryGuardLedgerEntry[]>;
92
+ export declare function nextTeamWorkerMemoryGuardAttempt(entries: readonly TeamWorkerMemoryGuardLedgerEntry[], incidentId: string): number;
@@ -267,6 +267,13 @@ export interface LifecyclePaths {
267
267
  journalFile: string;
268
268
  }
269
269
  export declare function lifecyclePaths(stateDir: string, sessionId: string, generation: string): LifecyclePaths;
270
+ export interface MemoryGuardClaimPaths {
271
+ root: string;
272
+ databaseFile: string;
273
+ walFile: string;
274
+ shmFile: string;
275
+ }
276
+ export declare function memoryGuardClaimPaths(stateDir: string, sessionId: string): MemoryGuardClaimPaths;
270
277
  export declare function replaceOwnerGeneration(stateDir: string, sessionId: string, generation?: string, expectedBaseline?: OwnerGenerationBaseline): Promise<string>;
271
278
  export type OwnerGenerationBaseline = {
272
279
  state: "absent";
@@ -1,5 +1,5 @@
1
1
  import { type UltragoalGoal, type UltragoalLedgerEvent, type UltragoalNudgeSurface, type UltragoalPlan, type UltragoalReceiptKind } from "./ultragoal-runtime";
2
- export type UltragoalGuardState = "inactive" | "unrelated_goal" | "active_verified_complete" | "active_missing_receipt" | "active_stale_receipt" | "active_missing_final_receipt" | "active_dirty_quality_gate" | "active_review_blocked_unrecorded" | "active_review_blocked_recorded" | "unreadable_fail_closed";
2
+ export type UltragoalGuardState = "inactive" | "unrelated_goal" | "active_verified_complete" | "active_missing_receipt" | "active_stale_receipt" | "active_missing_final_receipt" | "active_dirty_quality_gate" | "active_review_blocked_unrecorded" | "active_review_blocked_recorded" | "active_missing_critic_verdict" | "unreadable_fail_closed";
3
3
  export interface UltragoalGuardDiagnostic {
4
4
  state: UltragoalGuardState;
5
5
  message: string;
@@ -25,6 +25,7 @@ export interface CurrentGoalLike {
25
25
  source: "user";
26
26
  };
27
27
  }
28
+ export declare function isKnownUltragoalObjective(currentObjective: string): boolean;
28
29
  export declare function validateCompletionReceipt(input: {
29
30
  plan: UltragoalPlan;
30
31
  ledger: readonly UltragoalLedgerEvent[];
@@ -78,10 +79,10 @@ export interface UltragoalPauseBlockDiagnostic {
78
79
  }
79
80
  /**
80
81
  * While an Ultragoal run is active, `goal({"op":"pause"})` is only allowed when the
81
- * current durable Ultragoal state is readable and the latest durable ledger event
82
- * classifies the current blocker as `human_blocked`. Resolvable blockers must be
83
- * worked, not parked. Reads fail closed so unreadable durable state or ledger data
84
- * blocks pause rather than silently allowing a give-up.
82
+ * current durable Ultragoal state is readable, the latest `blocker_classified`
83
+ * event is `human_blocked`, and a later fresh clean pause terminal critic verdict is bound to
84
+ * that exact classification. Reads fail closed so unreadable durable state or
85
+ * ledger data blocks pause rather than silently allowing a give-up.
85
86
  */
86
87
  export declare function isUltragoalPauseBlocked(cwd: string): Promise<UltragoalPauseBlockDiagnostic>;
87
88
  export declare function assertUltragoalPauseAllowed(cwd: string): Promise<void>;
@@ -1,10 +1,30 @@
1
1
  import type { UltragoalCompletionVerification, UltragoalGoal, UltragoalGoalStatus, UltragoalLedgerEvent, UltragoalPlan, UltragoalReceiptKind } from "./ultragoal-runtime";
2
+ export declare const CRITIC_VERDICT_EVENT = "critic_verdict";
3
+ export declare const CRITIC_GATE_HARD_STOP_EVENT = "critic_gate_hard_stop";
4
+ export declare const CRITIC_GATE_OVERRIDE_EVENT = "critic_gate_override";
5
+ export declare const TERMINAL_CRITIC_CEILING = 5;
6
+ export type CriticVerdict = "OKAY" | "ITERATE" | "REJECT";
2
7
  export type UltragoalReceiptFreshnessDiagnostic = {
3
8
  state: "inactive" | "unrelated_goal" | "active_verified_complete" | "active_missing_receipt" | "active_stale_receipt" | "active_missing_final_receipt" | "active_dirty_quality_gate" | "active_review_blocked_unrecorded" | "active_review_blocked_recorded" | "unreadable_fail_closed";
4
9
  message: string;
5
10
  goalId?: string;
6
11
  };
7
12
  export declare function requiredUltragoalGoals(plan: UltragoalPlan): UltragoalGoal[];
13
+ /** Hash the current required-goal set for terminal critic verdict freshness. */
14
+ export declare function computeCriticVerdictPlanGeneration(plan: UltragoalPlan): string;
15
+ export declare function isCleanPauseCriticVerdictShape(candidate: UltragoalLedgerEvent, planGeneration: string, classificationEventId: string): boolean;
16
+ export declare function isCleanPauseCriticVerdict(event: UltragoalLedgerEvent, opts: {
17
+ planGeneration: string;
18
+ classificationEventId: string;
19
+ }): boolean;
20
+ export declare function findCleanPauseCriticVerdict(plan: UltragoalPlan, ledger: readonly UltragoalLedgerEvent[], classificationEventId: string): UltragoalLedgerEvent | null;
21
+ /** Pure: count all ledger `critic_verdict` rows for an exact plan generation. */
22
+ export declare function countTerminalCriticVerdicts(ledger: readonly UltragoalLedgerEvent[], planGeneration: string): number;
23
+ /** Pure: count every non-OKAY terminal critic verdict recorded for this run. */
24
+ export declare function countNonOkayTerminalCriticVerdicts(ledger: readonly UltragoalLedgerEvent[], _legacyPlanGeneration?: string): number;
25
+ export declare function terminalCriticHardStopReached(ledger: readonly UltragoalLedgerEvent[], _legacyPlanGeneration?: string): boolean;
26
+ export declare function terminalCriticGateOverridden(ledger: readonly UltragoalLedgerEvent[]): boolean;
27
+ export declare function terminalCriticCeilingReached(ledger: readonly UltragoalLedgerEvent[], _legacyPlanGeneration?: string): boolean;
8
28
  export declare function receiptRelevantGoals(plan: UltragoalPlan, goal: UltragoalGoal, receiptKind: UltragoalReceiptKind): UltragoalGoal[];
9
29
  export declare function computeUltragoalPlanGeneration(input: {
10
30
  plan: UltragoalPlan;
@@ -19,6 +39,14 @@ export declare function computeUltragoalPlanGeneration(input: {
19
39
  basis: UltragoalCompletionVerification["basis"];
20
40
  };
21
41
  export declare function findLedgerReceiptEvent(ledger: readonly UltragoalLedgerEvent[], receipt: UltragoalCompletionVerification): UltragoalLedgerEvent | null;
42
+ /**
43
+ * A final-aggregate receipt whose recorded ledger checkpoint quality gate is
44
+ * missing a clean `criticReview` OKAY can never satisfy the completion guard,
45
+ * yet is not "stale" under {@link validateReceiptFreshBase}. Detect it so an
46
+ * identical-evidence complete replay can re-verify and re-mint with a
47
+ * corrected gate instead of no-opping into a permanently blocked run.
48
+ */
49
+ export declare function finalAggregateReceiptMissingCriticOkay(ledger: readonly UltragoalLedgerEvent[], receipt: UltragoalCompletionVerification): boolean;
22
50
  export declare function validateReceiptFreshBase(input: {
23
51
  plan: UltragoalPlan;
24
52
  ledger: readonly UltragoalLedgerEvent[];
@@ -1,5 +1,7 @@
1
1
  import type { WorkflowHudSummary } from "../skill-state/active-state";
2
- export { computeUltragoalPlanGeneration, receiptRelevantGoals } from "./ultragoal-receipt-freshness";
2
+ import { type RepositoryBinding } from "./repository-binding";
3
+ import { type CriticVerdict } from "./ultragoal-receipt-freshness";
4
+ export { CRITIC_GATE_HARD_STOP_EVENT, CRITIC_GATE_OVERRIDE_EVENT, CRITIC_VERDICT_EVENT, type CriticVerdict, computeUltragoalPlanGeneration, countTerminalCriticVerdicts, receiptRelevantGoals, TERMINAL_CRITIC_CEILING, terminalCriticCeilingReached, terminalCriticGateOverridden, } from "./ultragoal-receipt-freshness";
3
5
  export { captureUltragoalRecoverySnapshot, parseStrictTerminalTranscript, persistUltragoalRecoveryDecision, planUltragoalOwnerLossRecovery, type UltragoalOwnerLossReceipt, type UltragoalRecoveryBinding, type UltragoalRecoveryDecision, type UltragoalRecoverySnapshot, validateOwnerLossBinding, validateRawUltragoalEvidence, validateRecoveryAdmission, validateRecoveryPath, } from "./ultragoal-owner-loss-recovery";
4
6
  export type UltragoalSkcGoalMode = "aggregate" | "per-story";
5
7
  export type UltragoalGoalStatus = "pending" | "active" | "complete" | "failed" | "blocked" | "review_blocked" | "superseded";
@@ -95,6 +97,8 @@ export interface UltragoalPlan {
95
97
  skcObjective: string;
96
98
  skcObjectiveAliases?: string[];
97
99
  goals: UltragoalGoal[];
100
+ /** Authoritative repository identity for multi-repo fail-closed spawn (#2901). */
101
+ repositoryBinding?: RepositoryBinding;
98
102
  createdAt: string;
99
103
  updatedAt: string;
100
104
  [key: string]: unknown;
@@ -307,6 +311,26 @@ export { joinUltragoalPipelineOverlap, rebaselineUltragoalPipelineOverlap, start
307
311
  export declare function getUltragoalRunCompletionState(plan: UltragoalPlan, options?: {
308
312
  retryFailed?: boolean;
309
313
  }): UltragoalRunCompletionState;
314
+ /**
315
+ * Discriminated next-action for `complete-goals` handoff (#2903).
316
+ * `none` is reserved for genuine completion; `execute-goal` always carries a goal.
317
+ */
318
+ export type UltragoalCompleteNextActionKind = "none" | "execute-goal" | "retry-failed" | "resolve-blockers" | "final-aggregate-receipt";
319
+ export type UltragoalCompleteNextAction = {
320
+ kind: UltragoalCompleteNextActionKind;
321
+ goal?: UltragoalGoal;
322
+ blockedGoals?: UltragoalGoal[];
323
+ failedGoals?: UltragoalGoal[];
324
+ };
325
+ /**
326
+ * Resolve the actionable next step after scheduling / complete-goals.
327
+ * Blocked and review_blocked goals remain unschedulable; they surface as
328
+ * `resolve-blockers` instead of a contradictory `execute-goal` without goal_id.
329
+ */
330
+ export declare function resolveUltragoalCompleteNextAction(plan: UltragoalPlan, options?: {
331
+ retryFailed?: boolean;
332
+ selectedGoal?: UltragoalGoal;
333
+ }): UltragoalCompleteNextAction;
310
334
  export declare function startNextUltragoalGoal(input: {
311
335
  cwd: string;
312
336
  retryFailed?: boolean;
@@ -315,6 +339,7 @@ export declare function startNextUltragoalGoal(input: {
315
339
  plan: UltragoalPlan;
316
340
  goal?: UltragoalGoal;
317
341
  allComplete: boolean;
342
+ nextAction: UltragoalCompleteNextAction;
318
343
  }>;
319
344
  export declare function qualityGateObject(value: unknown): JsonObject | null;
320
345
  export declare function nonEmptyStringArray(value: unknown): string[] | null;
@@ -401,10 +426,10 @@ export declare function recordUltragoalReviewBlockers(input: {
401
426
  }): Promise<UltragoalPlan>;
402
427
  export type UltragoalBlockerClassification = "human_blocked" | "resolvable";
403
428
  /**
404
- * Record an audited blocker triage classification in the durable ledger. A
405
- * `human_blocked` classification is the only thing that authorizes
406
- * `goal({"op":"pause"})` while an Ultragoal run is active; `resolvable` is an
407
- * audit note and never unblocks pause.
429
+ * Record an audited blocker triage classification in the durable ledger. Pause
430
+ * requires the latest `blocker_classified` event to be `human_blocked` and a
431
+ * later clean pause terminal critic verdict bound to that classification; `resolvable`
432
+ * is an audit note and never unblocks pause.
408
433
  */
409
434
  export declare function recordUltragoalBlockerClassification(input: {
410
435
  cwd: string;
@@ -412,6 +437,19 @@ export declare function recordUltragoalBlockerClassification(input: {
412
437
  evidence: string;
413
438
  goalId?: string;
414
439
  }): Promise<UltragoalLedgerEvent>;
440
+ export declare function recordUltragoalCriticVerdict(input: {
441
+ cwd: string;
442
+ terminus: "completion" | "pause";
443
+ verdict: CriticVerdict;
444
+ evidence: string;
445
+ blockers?: string[];
446
+ goalId?: string;
447
+ classificationEventId?: string;
448
+ }): Promise<UltragoalLedgerEvent>;
449
+ export declare function recordUltragoalCriticGateOverride(input: {
450
+ cwd: string;
451
+ evidence: string;
452
+ }): Promise<UltragoalLedgerEvent>;
415
453
  type UltragoalReviewContractStrength = "strong" | "thin-derived";
416
454
  interface UltragoalReviewFinding extends JsonObject {
417
455
  severity: "blocker";
@@ -20,6 +20,9 @@ interface RalplanHudState extends WorkflowGateHudState {
20
20
  iteration?: number;
21
21
  iterationFromIndex?: number;
22
22
  stages?: string;
23
+ architectPasses?: number;
24
+ criticPasses?: number;
25
+ reviewPassBudget?: number;
23
26
  verdict?: string;
24
27
  latestSummary?: string;
25
28
  pendingApproval?: boolean;
@@ -1,2 +1,3 @@
1
1
  export declare function sanitizeHostName(name: string): string;
2
+ export declare function validateSshDestination(username: string | undefined, host: string): string | undefined;
2
3
  export declare function buildSshTarget(username: string | undefined, host: string): string;
@@ -1,3 +1,4 @@
1
+ import type { Settings } from "../config/settings";
1
2
  import type { AgentDefinition } from "./types";
2
3
  /** Result of agent discovery */
3
4
  export interface DiscoveryResult {
@@ -11,8 +12,9 @@ export declare function filterVisibleAgents(agents: readonly AgentDefinition[]):
11
12
  * Precedence (highest wins): .skc project, .skc user, SKC plugins, then bundled
12
13
  *
13
14
  * @param cwd - Current working directory for project agent discovery
15
+ * @param activeSettings - Settings used to resolve enabled providers.
14
16
  */
15
- export declare function discoverAgents(cwd: string, home?: string): Promise<DiscoveryResult>;
17
+ export declare function discoverAgents(cwd: string, home?: string, activeSettings?: Settings): Promise<DiscoveryResult>;
16
18
  /**
17
19
  * Get an agent by name from discovered agents.
18
20
  */
@@ -20,6 +20,7 @@ import type { ContextFileEntry } from "../tools";
20
20
  import type { EventBus } from "../utils/event-bus";
21
21
  import type { WorkspaceTree } from "../workspace-tree";
22
22
  import { type AgentDefinition, type AgentProgress, type ReviewFinding, type SingleResult } from "./types";
23
+ import { type ExecutorExecutionMode } from "./ultragoal-redteam-activation";
23
24
  export declare function trimForkContextSeedForModel(seed: ForkContextSeed, model: Model | undefined): ForkContextSeed;
24
25
  /** Options for subagent execution */
25
26
  export interface ExecutorOptions {
@@ -28,6 +29,11 @@ export interface ExecutorOptions {
28
29
  agent: AgentDefinition;
29
30
  task: string;
30
31
  assignment?: string;
32
+ /**
33
+ * Typed executor execution mode. When set, overrides assignment-text heuristics
34
+ * for ultragoal red-team prompt injection (#2698 / #2456).
35
+ */
36
+ executionMode?: ExecutorExecutionMode;
31
37
  context?: string;
32
38
  description?: string;
33
39
  index: number;
@@ -36,7 +36,9 @@ export declare class TaskTool implements AgentTool<TaskToolSchemaInstance, TaskT
36
36
  get description(): string;
37
37
  private constructor();
38
38
  /**
39
- * Create a TaskTool instance with async agent discovery.
39
+ * Create a TaskTool instance.
40
+ * Repository authority is captured from session cwd *before* agent discovery so
41
+ * multi-repo workspaces fail closed prior to context/discovery (#2901).
40
42
  */
41
43
  static create(session: ToolSession): Promise<TaskTool>;
42
44
  execute(_toolCallId: string, rawParams: unknown, signal?: AbortSignal, onUpdate?: AgentToolUpdateCallback<TaskToolDetails>): Promise<AgentToolResult<TaskToolDetails>>;
@@ -0,0 +1,13 @@
1
+ import type { AgentProgress, TaskToolDetails } from "./types";
2
+ export type ProviderRetryKind = NonNullable<AgentProgress["retryState"]>["kind"];
3
+ export declare function classifyProviderRetry(errorMessage: string): ProviderRetryKind;
4
+ export declare function providerNameFromModel(model: string | undefined): string | undefined;
5
+ export declare function providerRetryPhaseLabel(kind: ProviderRetryKind): string;
6
+ export declare function providerProgressAgeLabel(retryState: NonNullable<AgentProgress["retryState"]>, nowMs: number): string;
7
+ export declare function hasActiveProviderRetryInTaskDetails(details: TaskToolDetails, seen?: WeakSet<object>): boolean;
8
+ export declare function hasActiveProviderRetryInProgress(progress: AgentProgress, seen?: WeakSet<object>): boolean;
9
+ export interface ProviderDegradationGroup {
10
+ provider: string;
11
+ count: number;
12
+ }
13
+ export declare function collectProviderDegradationGroups(progress: readonly AgentProgress[]): ProviderDegradationGroup[];