@gajae-code/coding-agent 0.10.2 → 0.11.1

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 (476) hide show
  1. package/CHANGELOG.md +58 -2
  2. package/dist/types/append-only-mode.d.ts +1 -1
  3. package/dist/types/async/job-manager.d.ts +46 -7
  4. package/dist/types/cli/args.d.ts +4 -5
  5. package/dist/types/cli/daemon-cli.d.ts +12 -1
  6. package/dist/types/cli/notify-cli.d.ts +21 -1
  7. package/dist/types/cli.d.ts +3 -0
  8. package/dist/types/commands/daemon.d.ts +39 -0
  9. package/dist/types/commands/launch.d.ts +3 -0
  10. package/dist/types/commands/notify.d.ts +28 -1
  11. package/dist/types/commands/sdk.d.ts +33 -0
  12. package/dist/types/config/atomic-yaml-patch.d.ts +85 -0
  13. package/dist/types/config/model-profile-activation.d.ts +35 -15
  14. package/dist/types/config/model-profiles.d.ts +11 -5
  15. package/dist/types/config/model-registry.d.ts +3 -3
  16. package/dist/types/config/model-resolver.d.ts +39 -6
  17. package/dist/types/config/model-selector-value.d.ts +17 -0
  18. package/dist/types/config/models-config-schema.d.ts +10 -6
  19. package/dist/types/config/settings-schema.d.ts +133 -6
  20. package/dist/types/config/settings.d.ts +63 -35
  21. package/dist/types/coordinator-mcp/model-preset.d.ts +7 -6
  22. package/dist/types/coordinator-mcp/server.d.ts +6 -49
  23. package/dist/types/daemon/builtin.d.ts +6 -5
  24. package/dist/types/daemon/control-types.d.ts +1 -1
  25. package/dist/types/discovery/mcp-json.d.ts +12 -1
  26. package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
  27. package/dist/types/extensibility/extensions/compact-handler.d.ts +4 -2
  28. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +2 -2
  29. package/dist/types/extensibility/extensions/loader.d.ts +10 -1
  30. package/dist/types/extensibility/extensions/runner.d.ts +3 -3
  31. package/dist/types/extensibility/extensions/types.d.ts +141 -16
  32. package/dist/types/extensibility/hooks/types.d.ts +1 -1
  33. package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -2
  34. package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -0
  35. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +3 -0
  36. package/dist/types/gjc-runtime/team-runtime.d.ts +3 -4
  37. package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +13 -0
  38. package/dist/types/gjc-runtime/tmux-sessions.d.ts +4 -1
  39. package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +11 -0
  40. package/dist/types/gjc-runtime/windows-powershell-command.d.ts +9 -0
  41. package/dist/types/harness-control-plane/operate.d.ts +5 -5
  42. package/dist/types/harness-control-plane/owner.d.ts +18 -4
  43. package/dist/types/harness-control-plane/receipts.d.ts +0 -1
  44. package/dist/types/harness-control-plane/sdk-transport.d.ts +43 -0
  45. package/dist/types/harness-control-plane/session-transport.d.ts +48 -0
  46. package/dist/types/harness-control-plane/types.d.ts +3 -4
  47. package/dist/types/lsp/index.d.ts +1 -1
  48. package/dist/types/main.d.ts +32 -38
  49. package/dist/types/modes/acp/acp-agent.d.ts +224 -53
  50. package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -0
  51. package/dist/types/modes/acp/acp-mode.d.ts +6 -15
  52. package/dist/types/modes/acp/permission-mode.d.ts +4 -0
  53. package/dist/types/modes/acp/startup-options.d.ts +6 -0
  54. package/dist/types/modes/components/agent-dashboard.d.ts +3 -0
  55. package/dist/types/modes/components/model-selector.d.ts +1 -0
  56. package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
  57. package/dist/types/modes/components/settings-selector.d.ts +6 -4
  58. package/dist/types/modes/components/welcome.d.ts +1 -1
  59. package/dist/types/modes/controllers/command-controller.d.ts +2 -2
  60. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -0
  61. package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
  62. package/dist/types/modes/index.d.ts +0 -4
  63. package/dist/types/modes/interactive-mode.d.ts +5 -2
  64. package/dist/types/modes/runtime-init.d.ts +2 -2
  65. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
  66. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
  67. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
  68. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
  69. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
  70. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +170 -30
  71. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
  72. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
  73. package/dist/types/modes/types.d.ts +7 -2
  74. package/dist/types/runtime-mcp/client.d.ts +2 -0
  75. package/dist/types/runtime-mcp/config.d.ts +5 -1
  76. package/dist/types/runtime-mcp/manager.d.ts +8 -1
  77. package/dist/types/runtime-mcp/types.d.ts +4 -0
  78. package/dist/types/sdk/acp/adapter.d.ts +67 -0
  79. package/dist/types/sdk/acp/index.d.ts +2 -0
  80. package/dist/types/sdk/broker/broker.d.ts +53 -0
  81. package/dist/types/sdk/broker/discovery.d.ts +30 -0
  82. package/dist/types/sdk/broker/ensure.d.ts +42 -0
  83. package/dist/types/sdk/broker/identity.d.ts +3 -0
  84. package/dist/types/sdk/broker/index.d.ts +8 -0
  85. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
  86. package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
  87. package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
  88. package/dist/types/sdk/broker/runtime.d.ts +33 -0
  89. package/dist/types/sdk/broker/session-index.d.ts +57 -0
  90. package/dist/types/sdk/broker/state-version.d.ts +8 -0
  91. package/dist/types/sdk/broker/transport.d.ts +9 -0
  92. package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
  93. package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
  94. package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
  95. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
  96. package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
  97. package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
  98. package/dist/types/sdk/bus/config.d.ts +274 -0
  99. package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
  100. package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
  101. package/dist/types/sdk/bus/discord-daemon.d.ts +50 -0
  102. package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
  103. package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
  104. package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
  105. package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
  106. package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
  107. package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
  108. package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
  109. package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
  110. package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
  111. package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
  112. package/dist/types/sdk/bus/session-control.d.ts +83 -0
  113. package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
  114. package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
  115. package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
  116. package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
  117. package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
  118. package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
  119. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
  120. package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
  121. package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +78 -17
  122. package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
  123. package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
  124. package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
  125. package/dist/types/sdk/cli/index.d.ts +1 -0
  126. package/dist/types/sdk/cli/session-cli.d.ts +19 -0
  127. package/dist/types/sdk/client/client.d.ts +1 -0
  128. package/dist/types/sdk/client/discovery.d.ts +27 -0
  129. package/dist/types/sdk/client/index.d.ts +2 -0
  130. package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
  131. package/dist/types/sdk/host/control/index.d.ts +2 -0
  132. package/dist/types/sdk/host/control/operations.d.ts +65 -0
  133. package/dist/types/sdk/host/events.d.ts +35 -0
  134. package/dist/types/sdk/host/host.d.ts +35 -0
  135. package/dist/types/sdk/host/index.d.ts +4 -0
  136. package/dist/types/sdk/host/query/cursor.d.ts +62 -0
  137. package/dist/types/sdk/host/query/handlers.d.ts +70 -0
  138. package/dist/types/sdk/host/query/index.d.ts +3 -0
  139. package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
  140. package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
  141. package/dist/types/sdk/host/types.d.ts +32 -0
  142. package/dist/types/sdk/index.d.ts +6 -0
  143. package/dist/types/sdk/lifecycle-session.d.ts +14 -0
  144. package/dist/types/sdk/mcp/index.d.ts +1 -0
  145. package/dist/types/sdk/mcp/server.d.ts +37 -0
  146. package/dist/types/sdk/models.d.ts +44 -0
  147. package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
  148. package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
  149. package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
  150. package/dist/types/sdk/startup-capability.d.ts +50 -0
  151. package/dist/types/session/agent-session.d.ts +114 -21
  152. package/dist/types/session/default-model-selection.d.ts +25 -0
  153. package/dist/types/session/fallback-chain-controller.d.ts +52 -0
  154. package/dist/types/session/session-manager.d.ts +58 -1
  155. package/dist/types/setup/credential-auto-import.d.ts +36 -6
  156. package/dist/types/tools/ask-answer-registry.d.ts +1 -1
  157. package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
  158. package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
  159. package/dist/types/tools/browser/launch.d.ts +22 -0
  160. package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
  161. package/dist/types/tools/browser/profile-posture.d.ts +37 -0
  162. package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
  163. package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
  164. package/dist/types/tools/browser/registry.d.ts +19 -0
  165. package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
  166. package/dist/types/tools/index.d.ts +8 -8
  167. package/dist/types/tools/subagent-render.d.ts +1 -0
  168. package/dist/types/tools/subagent.d.ts +6 -1
  169. package/package.json +34 -13
  170. package/scripts/build-sdk-package-smoke.ts +99 -0
  171. package/scripts/capture-notifications-settings-showcase.ts +435 -0
  172. package/scripts/compile-args.ts +4 -2
  173. package/scripts/g005-daemon-smoke.ts +4 -5
  174. package/scripts/g011-daemon-path-smoke.ts +5 -5
  175. package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
  176. package/scripts/generate-sdk-operation-inventory.ts +867 -0
  177. package/scripts/generate-telegram-baseline-manifest.ts +128 -0
  178. package/scripts/manifest-schema.ts +124 -0
  179. package/scripts/run-test-manifest.ts +153 -0
  180. package/scripts/run-threat-model-check.ts +157 -0
  181. package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
  182. package/scripts/verify-gjc-sdk-rename.ts +90 -0
  183. package/src/append-only-mode.ts +1 -1
  184. package/src/async/job-manager.ts +406 -63
  185. package/src/cli/args.ts +43 -12
  186. package/src/cli/auth-gateway-cli.ts +2 -2
  187. package/src/cli/config-cli.ts +2 -1
  188. package/src/cli/daemon-cli.ts +63 -14
  189. package/src/cli/list-models.ts +1 -1
  190. package/src/cli/notify-cli.ts +288 -286
  191. package/src/cli.ts +21 -2
  192. package/src/commands/daemon.ts +50 -6
  193. package/src/commands/harness.ts +93 -36
  194. package/src/commands/launch.ts +5 -2
  195. package/src/commands/mcp-serve.ts +19 -12
  196. package/src/commands/notify.ts +36 -3
  197. package/src/commands/sdk.ts +426 -0
  198. package/src/commit/agentic/agent.ts +1 -0
  199. package/src/config/atomic-yaml-patch.ts +423 -0
  200. package/src/config/model-profile-activation.ts +240 -89
  201. package/src/config/model-profiles.ts +18 -15
  202. package/src/config/model-registry.ts +51 -26
  203. package/src/config/model-resolver.ts +138 -51
  204. package/src/config/model-selector-value.ts +50 -0
  205. package/src/config/models-config-schema.ts +14 -21
  206. package/src/config/settings-schema.ts +128 -10
  207. package/src/config/settings.ts +1120 -158
  208. package/src/coordinator-mcp/model-preset.ts +74 -20
  209. package/src/coordinator-mcp/server.ts +1597 -3052
  210. package/src/daemon/builtin.ts +8 -5
  211. package/src/daemon/control-types.ts +1 -1
  212. package/src/defaults/gjc/skills/team/SKILL.md +4 -4
  213. package/src/discovery/mcp-json.ts +327 -20
  214. package/src/extensibility/custom-tools/types.ts +1 -1
  215. package/src/extensibility/extensions/compact-handler.ts +3 -3
  216. package/src/extensibility/extensions/get-commands-handler.ts +2 -2
  217. package/src/extensibility/extensions/loader.ts +69 -5
  218. package/src/extensibility/extensions/runner.ts +112 -4
  219. package/src/extensibility/extensions/types.ts +176 -17
  220. package/src/extensibility/hooks/types.ts +1 -1
  221. package/src/gjc-runtime/launch-tmux.ts +170 -86
  222. package/src/gjc-runtime/psmux-detect.ts +82 -4
  223. package/src/gjc-runtime/session-state-sidecar.ts +41 -31
  224. package/src/gjc-runtime/team-runtime.ts +54 -35
  225. package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
  226. package/src/gjc-runtime/tmux-owner-isolation.ts +1 -1
  227. package/src/gjc-runtime/tmux-sessions.ts +19 -13
  228. package/src/gjc-runtime/ultragoal-guard.ts +108 -14
  229. package/src/gjc-runtime/ultragoal-receipt-freshness.ts +102 -1
  230. package/src/gjc-runtime/ultragoal-runtime.ts +227 -11
  231. package/src/gjc-runtime/windows-powershell-command.ts +58 -0
  232. package/src/harness-control-plane/operate.ts +9 -9
  233. package/src/harness-control-plane/owner.ts +283 -39
  234. package/src/harness-control-plane/receipts.ts +0 -1
  235. package/src/harness-control-plane/sdk-transport.ts +395 -0
  236. package/src/harness-control-plane/session-transport.ts +94 -0
  237. package/src/harness-control-plane/types.ts +1 -1
  238. package/src/internal-urls/docs-index.generated.ts +34 -35
  239. package/src/lsp/client.ts +42 -6
  240. package/src/lsp/index.ts +2 -2
  241. package/src/main.ts +299 -204
  242. package/src/modes/DESIGN.md +258 -0
  243. package/src/modes/acp/acp-agent.ts +1228 -2612
  244. package/src/modes/acp/acp-client-bridge.ts +2 -20
  245. package/src/modes/acp/acp-event-mapper.ts +18 -2
  246. package/src/modes/acp/acp-mode.ts +8 -36
  247. package/src/modes/acp/permission-mode.ts +25 -0
  248. package/src/modes/acp/startup-options.ts +6 -0
  249. package/src/modes/components/agent-dashboard.ts +37 -17
  250. package/src/modes/components/model-selector.ts +93 -35
  251. package/src/modes/components/notifications-settings-editor.ts +1379 -0
  252. package/src/modes/components/settings-selector.ts +60 -11
  253. package/src/modes/components/welcome.ts +4 -4
  254. package/src/modes/controllers/command-controller.ts +10 -17
  255. package/src/modes/controllers/event-controller.ts +11 -16
  256. package/src/modes/controllers/extension-ui-controller.ts +396 -28
  257. package/src/modes/controllers/selector-controller.ts +674 -36
  258. package/src/modes/index.ts +0 -22
  259. package/src/modes/interactive-mode.ts +87 -36
  260. package/src/modes/runtime-init.ts +298 -6
  261. package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
  262. package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
  263. package/src/modes/shared/agent-wire/event-contract.ts +7 -8
  264. package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
  265. package/src/modes/shared/agent-wire/event-observation.ts +16 -7
  266. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1258 -87
  267. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
  268. package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
  269. package/src/modes/types.ts +7 -2
  270. package/src/runtime-mcp/client.ts +94 -19
  271. package/src/runtime-mcp/config.ts +27 -15
  272. package/src/runtime-mcp/manager.ts +343 -105
  273. package/src/runtime-mcp/oauth-flow.ts +42 -12
  274. package/src/runtime-mcp/transports/http.ts +49 -19
  275. package/src/runtime-mcp/transports/stdio.ts +47 -28
  276. package/src/runtime-mcp/types.ts +10 -0
  277. package/src/sdk/acp/adapter.ts +418 -0
  278. package/src/sdk/acp/index.ts +2 -0
  279. package/src/sdk/broker/broker.ts +642 -0
  280. package/src/sdk/broker/discovery.ts +113 -0
  281. package/src/sdk/broker/ensure.ts +307 -0
  282. package/src/sdk/broker/identity.ts +42 -0
  283. package/src/sdk/broker/index.ts +8 -0
  284. package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
  285. package/src/sdk/broker/internal-source.bunfig.toml +1 -0
  286. package/src/sdk/broker/lifecycle-ledger.ts +286 -0
  287. package/src/sdk/broker/lifecycle.ts +2157 -0
  288. package/src/sdk/broker/process-incarnation.ts +159 -0
  289. package/src/sdk/broker/runtime.ts +164 -0
  290. package/src/sdk/broker/session-index.ts +318 -0
  291. package/src/sdk/broker/state-version.ts +23 -0
  292. package/src/sdk/broker/transport.ts +125 -0
  293. package/src/sdk/bus/chat-command-policy.ts +107 -0
  294. package/src/sdk/bus/chat-daemon-cli.ts +214 -0
  295. package/src/sdk/bus/chat-daemon-control.ts +713 -0
  296. package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
  297. package/src/sdk/bus/chat-effect-journal.ts +355 -0
  298. package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
  299. package/src/sdk/bus/config.ts +433 -0
  300. package/src/sdk/bus/conversation-store.ts +391 -0
  301. package/src/sdk/bus/discord-conversation.ts +85 -0
  302. package/src/sdk/bus/discord-daemon.ts +2292 -0
  303. package/src/sdk/bus/discord-live-provider.ts +521 -0
  304. package/src/sdk/bus/discord-provider.ts +56 -0
  305. package/src/{notifications → sdk/bus}/html-format.ts +2 -2
  306. package/src/sdk/bus/index.ts +3979 -0
  307. package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
  308. package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
  309. package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
  310. package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
  311. package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
  312. package/src/sdk/bus/natives-augment.d.ts +38 -0
  313. package/src/sdk/bus/notification-orchestration.ts +535 -0
  314. package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
  315. package/src/sdk/bus/session-control.ts +333 -0
  316. package/src/sdk/bus/slack-conversation.ts +74 -0
  317. package/src/sdk/bus/slack-daemon.ts +2144 -0
  318. package/src/sdk/bus/slack-live-provider.ts +380 -0
  319. package/src/sdk/bus/slack-provider.ts +76 -0
  320. package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
  321. package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
  322. package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
  323. package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
  324. package/src/{notifications → sdk/bus}/telegram-daemon.ts +603 -63
  325. package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
  326. package/src/sdk/bus/telegram-setup.ts +663 -0
  327. package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
  328. package/src/sdk/cli/index.ts +1 -0
  329. package/src/sdk/cli/session-cli.ts +275 -0
  330. package/src/sdk/client/client.ts +1 -0
  331. package/src/sdk/client/discovery.ts +108 -0
  332. package/src/sdk/client/index.ts +2 -0
  333. package/src/sdk/host/control/dispatch.ts +367 -0
  334. package/src/sdk/host/control/index.ts +10 -0
  335. package/src/sdk/host/control/operations.ts +63 -0
  336. package/src/sdk/host/events.ts +91 -0
  337. package/src/sdk/host/host.ts +296 -0
  338. package/src/sdk/host/index.ts +4 -0
  339. package/src/sdk/host/query/cursor.ts +189 -0
  340. package/src/sdk/host/query/handlers.ts +533 -0
  341. package/src/sdk/host/query/index.ts +3 -0
  342. package/src/sdk/host/query/revision-store.ts +1126 -0
  343. package/src/sdk/host/reverse-leases.ts +325 -0
  344. package/src/sdk/host/types.ts +29 -0
  345. package/src/sdk/index.ts +13 -0
  346. package/src/sdk/lifecycle-session.ts +39 -0
  347. package/src/sdk/mcp/index.ts +1 -0
  348. package/src/sdk/mcp/server.ts +332 -0
  349. package/src/sdk/models.ts +168 -0
  350. package/src/sdk/protocol/adapter-validation.ts +48 -0
  351. package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
  352. package/src/sdk/protocol/operation-registry.ts +312 -0
  353. package/src/{sdk.ts → sdk/session.ts} +339 -212
  354. package/src/sdk/startup-capability.ts +189 -0
  355. package/src/session/agent-session.ts +2650 -944
  356. package/src/session/default-model-selection.ts +93 -0
  357. package/src/session/fallback-chain-controller.ts +136 -0
  358. package/src/session/session-manager.ts +438 -11
  359. package/src/session/session-storage.ts +8 -1
  360. package/src/setup/credential-auto-import.ts +290 -35
  361. package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
  362. package/src/slash-commands/builtin-registry.ts +2 -1
  363. package/src/task/executor.ts +62 -13
  364. package/src/task/index.ts +26 -16
  365. package/src/tools/ask-answer-registry.ts +1 -1
  366. package/src/tools/ask.ts +13 -8
  367. package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
  368. package/src/tools/browser/benchmark/detector-report.ts +157 -0
  369. package/src/tools/browser/benchmark/run-suite.ts +39 -0
  370. package/src/tools/browser/launch.ts +124 -19
  371. package/src/tools/browser/profile-discovery.ts +63 -0
  372. package/src/tools/browser/profile-posture.ts +59 -0
  373. package/src/tools/browser/profile-reuse.ts +102 -0
  374. package/src/tools/browser/profile-warmup.ts +109 -0
  375. package/src/tools/browser/registry.ts +87 -11
  376. package/src/tools/browser/tab-protocol.ts +1 -0
  377. package/src/tools/browser/tab-supervisor.ts +1 -0
  378. package/src/tools/browser/tab-worker.ts +1 -1
  379. package/src/tools/browser.ts +6 -0
  380. package/src/tools/index.ts +8 -8
  381. package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
  382. package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
  383. package/src/tools/subagent-render.ts +19 -8
  384. package/src/tools/subagent.ts +84 -32
  385. package/src/tools/telegram-send.ts +2 -2
  386. package/vendor/insane-search/MANIFEST.json +2 -1
  387. package/vendor/insane-search/engine/bias_check.py +4 -1
  388. package/vendor/insane-search/engine/phase0.py +26 -1
  389. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  390. package/dist/types/modes/bridge/auth.d.ts +0 -12
  391. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  392. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  393. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  394. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  395. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  396. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  397. package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
  398. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
  399. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  400. package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
  401. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  402. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  403. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  404. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  405. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  406. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  407. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  408. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  409. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  410. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  411. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  412. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  413. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  414. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  415. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
  416. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
  417. package/dist/types/notifications/config.d.ts +0 -132
  418. package/src/harness-control-plane/rpc-adapter.ts +0 -290
  419. package/src/modes/bridge/auth.ts +0 -41
  420. package/src/modes/bridge/bridge-client-bridge.ts +0 -47
  421. package/src/modes/bridge/bridge-mode.ts +0 -675
  422. package/src/modes/bridge/bridge-ui-context.ts +0 -200
  423. package/src/modes/bridge/event-stream.ts +0 -70
  424. package/src/modes/rpc/host-tools.ts +0 -1
  425. package/src/modes/rpc/host-uris.ts +0 -1
  426. package/src/modes/rpc/rpc-client.ts +0 -1166
  427. package/src/modes/rpc/rpc-mode.ts +0 -1029
  428. package/src/modes/rpc/rpc-socket-security.ts +0 -115
  429. package/src/modes/rpc/rpc-types.ts +0 -637
  430. package/src/modes/shared/agent-wire/command-contract.ts +0 -18
  431. package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
  432. package/src/modes/shared/agent-wire/command-validation.ts +0 -181
  433. package/src/modes/shared/agent-wire/handshake.ts +0 -157
  434. package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
  435. package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
  436. package/src/modes/shared/agent-wire/protocol.ts +0 -46
  437. package/src/modes/shared/agent-wire/responses.ts +0 -17
  438. package/src/modes/shared/agent-wire/scopes.ts +0 -94
  439. package/src/modes/shared/agent-wire/session-registry.ts +0 -109
  440. package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
  441. package/src/modes/shared/agent-wire/ui-result.ts +0 -48
  442. package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
  443. package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
  444. package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
  445. package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
  446. package/src/notifications/config.ts +0 -219
  447. package/src/notifications/index.ts +0 -1835
  448. package/src/notifications/telegram-daemon-cli.ts +0 -243
  449. package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
  450. /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
  451. /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
  452. /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
  453. /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
  454. /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
  455. /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
  456. /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
  457. /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
  458. /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
  459. /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
  460. /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
  461. /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
  462. /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
  463. /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
  464. /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
  465. /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
  466. /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
  467. /package/src/{notifications → sdk/bus}/engine.ts +0 -0
  468. /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
  469. /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
  470. /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
  471. /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
  472. /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
  473. /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
  474. /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
  475. /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
  476. /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
@@ -2,13 +2,18 @@ import { ThinkingLevel } from "@gajae-code/agent-core";
2
2
  import type { Api, Model } from "@gajae-code/ai";
3
3
  import type { AgentSession } from "../session/agent-session";
4
4
  import { type GjcModelAssignmentTargetId, type ModelRegistry } from "./model-registry";
5
+ import { type ModelSelectorValue } from "./model-selector-value";
5
6
  import type { Settings } from "./settings";
6
- type ModelProfileActivationSession = Pick<AgentSession, "model" | "thinkingLevel" | "sessionId"> & {
7
+ type ModelProfileActivationSession = Pick<AgentSession, "model" | "thinkingLevel" | "sessionId" | "getConfiguredModelChain" | "setConfiguredModelChain"> & {
7
8
  setModelTemporary?: AgentSession["setModelTemporary"];
8
9
  setActiveModelProfile?: (name: string | undefined) => void;
9
10
  getActiveModelProfile?: () => string | undefined;
10
11
  getSessionDefaultModelSelector?: () => string | undefined;
11
12
  recordResumeDefaultModel?: (selector: string) => void;
13
+ seedDefaultFallbackResolution?: (activeIndex: number, skips: Array<{
14
+ selector: string;
15
+ reason: string;
16
+ }>) => void;
12
17
  };
13
18
  export interface PrepareModelProfileActivationOptions {
14
19
  session: ModelProfileActivationSession;
@@ -25,15 +30,25 @@ export interface PreparedModelProfileActivation {
25
30
  session: ModelProfileActivationSession & {
26
31
  setModelTemporary: AgentSession["setModelTemporary"];
27
32
  };
28
- settings: Pick<Settings, "clearOverride" | "get" | "getGlobal" | "override" | "set" | "flush">;
33
+ settings: Pick<Settings, "clearOverride" | "get" | "getGlobal" | "override" | "set" | "unset" | "flush">;
29
34
  previousModel: Model<Api> | undefined;
30
35
  previousThinkingLevel: ThinkingLevel | undefined;
31
- previousAgentModelOverrides: Record<string, string>;
32
- previousModelRoles: Record<string, string>;
36
+ previousAgentModelOverrides: Record<string, ModelSelectorValue>;
37
+ previousModelRoles: Record<string, ModelSelectorValue>;
38
+ previousDefaultChain: readonly string[] | undefined;
33
39
  defaultModel: Model<Api> | undefined;
34
40
  defaultThinkingLevel: ThinkingLevel | undefined;
35
- modelRoles: Record<string, string>;
36
- agentModelOverrides: Record<string, string>;
41
+ /** Full configured default fallback chain with resolvable entries clamped. */
42
+ defaultChain: readonly string[];
43
+ /** Index of the authenticated default-chain entry selected for activation. */
44
+ defaultActiveIndex: number | undefined;
45
+ /** Resolution-time skips that occurred before selecting the default entry. */
46
+ defaultResolutionSkips: Array<{
47
+ selector: string;
48
+ reason: string;
49
+ }>;
50
+ modelRoles: Record<string, ModelSelectorValue>;
51
+ agentModelOverrides: Record<string, ModelSelectorValue>;
37
52
  previousActiveModelProfile: string | undefined;
38
53
  /**
39
54
  * The session resume default ("provider/id") captured BEFORE activation —
@@ -45,33 +60,38 @@ export interface PreparedModelProfileActivation {
45
60
  previousSessionDefaultModel: string | undefined;
46
61
  }
47
62
  export interface MaterializeModelProfileAssignmentOptions {
48
- session: Pick<ModelProfileActivationSession, "model" | "thinkingLevel" | "setActiveModelProfile" | "getActiveModelProfile">;
49
- settings: Pick<Settings, "clearOverride" | "get" | "override" | "set">;
63
+ session: Pick<ModelProfileActivationSession, "model" | "thinkingLevel" | "getConfiguredModelChain" | "setActiveModelProfile" | "getActiveModelProfile">;
64
+ settings: Pick<Settings, "clearOverride" | "get" | "override" | "set" | "unset">;
50
65
  role: GjcModelAssignmentTargetId;
51
66
  selector: string;
52
67
  }
53
68
  export interface MaterializeModelProfileAssignmentsOptions {
54
- session: Pick<ModelProfileActivationSession, "model" | "thinkingLevel" | "setActiveModelProfile" | "getActiveModelProfile">;
55
- settings: Pick<Settings, "clearOverride" | "get" | "override" | "set">;
69
+ session: Pick<ModelProfileActivationSession, "model" | "thinkingLevel" | "getConfiguredModelChain" | "setActiveModelProfile" | "getActiveModelProfile">;
70
+ settings: Pick<Settings, "clearOverride" | "get" | "override" | "set" | "unset">;
56
71
  assignments: ReadonlyMap<GjcModelAssignmentTargetId, string> | Partial<Record<GjcModelAssignmentTargetId, string>>;
57
72
  }
58
73
  export declare function materializeActiveModelProfileAssignment(options: MaterializeModelProfileAssignmentOptions): boolean;
59
74
  export declare function materializeActiveModelProfileAssignments(options: MaterializeModelProfileAssignmentsOptions): boolean;
75
+ export declare class ModelProfileCredentialError extends Error {
76
+ readonly profileLabel: string;
77
+ readonly providers: readonly string[];
78
+ constructor(profileLabel: string, providers: readonly string[]);
79
+ }
60
80
  export declare function formatModelProfileCredentialError(profileLabel: string, providers: readonly string[]): string;
61
81
  export declare function resolveModelProfileName(profileName: string, profiles: ReadonlyMap<string, unknown>): string;
62
82
  export declare function prepareModelProfileActivation(options: PrepareModelProfileActivationOptions): Promise<PreparedModelProfileActivation>;
63
83
  export declare function applyPreparedModelProfileActivation(prepared: PreparedModelProfileActivation, options?: ApplyModelProfileActivationOptions): Promise<void>;
64
84
  export interface MaterializeModelProfileForDeletionResult {
65
- modelRoles: Record<string, string>;
66
- agentModelOverrides: Record<string, string>;
67
- previousModelRoles: Record<string, string>;
68
- previousAgentModelOverrides: Record<string, string>;
85
+ modelRoles: Record<string, ModelSelectorValue>;
86
+ agentModelOverrides: Record<string, ModelSelectorValue>;
87
+ previousModelRoles: Record<string, ModelSelectorValue>;
88
+ previousAgentModelOverrides: Record<string, ModelSelectorValue>;
69
89
  previousDefaultProfile: string | undefined;
70
90
  previousPersistedDefaultProfile: string | undefined;
71
91
  previousActiveModelProfile: string | undefined;
72
92
  }
73
93
  export declare function materializeModelProfileForDeletion(options: PrepareModelProfileActivationOptions & {
74
- settings: Pick<Settings, "clearOverride" | "flush" | "get" | "getGlobal" | "override" | "set">;
94
+ settings: Pick<Settings, "clearOverride" | "flush" | "get" | "getGlobal" | "override" | "set" | "unset">;
75
95
  }): Promise<MaterializeModelProfileForDeletionResult>;
76
96
  export declare function restoreMaterializedModelProfileForDeletion(options: {
77
97
  settings: Pick<Settings, "flush" | "override" | "set">;
@@ -1,4 +1,5 @@
1
1
  import type { GjcModelAssignmentTargetId } from "./model-registry";
2
+ import { type ModelSelectorValue } from "./model-selector-value";
2
3
  import type { ModelsConfig } from "./models-config-schema";
3
4
  export type ModelProfileRole = GjcModelAssignmentTargetId;
4
5
  export interface ModelProfileDefinition {
@@ -15,16 +16,21 @@ export interface ModelProfileDefinition {
15
16
  * means any single xiaomi credential satisfies the group.
16
17
  */
17
18
  alternativeProviderGroups?: readonly (readonly string[])[];
18
- modelMapping: Partial<Record<ModelProfileRole, string>>;
19
+ modelMapping: Partial<Record<ModelProfileRole, ModelSelectorValue>>;
19
20
  source: "builtin" | "user";
20
21
  }
21
22
  export interface ResolvedProfileBinding {
22
- defaultSelector?: string;
23
- modelRoles: Record<string, string>;
24
- agentModelOverrides: Partial<Record<Exclude<ModelProfileRole, "default">, string>>;
23
+ defaultSelector?: ModelSelectorValue;
24
+ modelRoles: Record<string, ModelSelectorValue>;
25
+ agentModelOverrides: Partial<Record<Exclude<ModelProfileRole, "default">, ModelSelectorValue>>;
25
26
  }
26
27
  export declare function deriveModelProfileMappedProviders(definition: Pick<ModelProfileDefinition, "modelMapping">): string[];
27
- export declare function aggregateModelProfileRequiredProviders(requiredProviders: readonly string[], definition: Pick<ModelProfileDefinition, "modelMapping">): string[];
28
+ /**
29
+ * Return the providers explicitly declared as hard prerequisites.
30
+ * Model mappings may reference fallback providers, but those references are
31
+ * resolution-time candidates rather than activation requirements.
32
+ */
33
+ export declare function aggregateModelProfileRequiredProviders(requiredProviders: readonly string[], _definition: Pick<ModelProfileDefinition, "modelMapping">): string[];
28
34
  export declare const BUILTIN_MODEL_PROFILES: readonly ModelProfileDefinition[];
29
35
  export interface ModelProfilePresentation {
30
36
  displayName: string;
@@ -265,8 +265,8 @@ export declare const ModelsConfigFile: ConfigFile<{
265
265
  } | undefined;
266
266
  }> | undefined;
267
267
  modelBindings?: {
268
- modelRoles?: Record<string, string> | undefined;
269
- agentModelOverrides?: Record<string, string> | undefined;
268
+ modelRoles?: Record<string, string | string[]> | undefined;
269
+ agentModelOverrides?: Record<string, string | string[]> | undefined;
270
270
  } | undefined;
271
271
  equivalence?: {
272
272
  overrides?: Record<string, string> | undefined;
@@ -275,7 +275,7 @@ export declare const ModelsConfigFile: ConfigFile<{
275
275
  profiles?: Record<string, {
276
276
  required_providers: string[];
277
277
  display_name?: string | undefined;
278
- model_mapping: Partial<Record<"architect" | "critic" | "default" | "executor" | "planner", string>>;
278
+ model_mapping: Partial<Record<"architect" | "critic" | "default" | "executor" | "planner", string | string[]>>;
279
279
  }> | undefined;
280
280
  }>;
281
281
  /** Provider override config (baseUrl, headers, apiKey, compat, transport) without custom models */
@@ -4,9 +4,16 @@
4
4
  import { ThinkingLevel } from "@gajae-code/agent-core";
5
5
  import { type Api, type KnownProvider, type Model } from "@gajae-code/ai";
6
6
  import { type ModelRegistry, type ModelRole } from "./model-registry";
7
+ import { type ModelSelectorValue } from "./model-selector-value";
7
8
  import type { Settings } from "./settings";
8
9
  /** Default model IDs for each known provider */
9
10
  export declare const defaultModelPerProvider: Record<KnownProvider, string>;
11
+ /**
12
+ * Cursor's current RPC transport executes its exec protocol while streaming and
13
+ * has no client-side tool-call mode. Managed fallback attempts must not enable
14
+ * that irreversible path.
15
+ */
16
+ export declare function managedCursorFallbackUnavailableReason(model: Model<Api>, selector: string): string | undefined;
10
17
  export interface ScopedModelSelection {
11
18
  model: Model<Api>;
12
19
  thinkingLevel?: ThinkingLevel;
@@ -61,10 +68,10 @@ export declare function parseModelPattern(pattern: string, availableModels: Mode
61
68
  * Expand a role alias like "pi/default" to the configured model string.
62
69
  */
63
70
  export declare function expandRoleAlias(value: string, settings?: Settings): string;
64
- export declare function resolveConfiguredModelPatterns(value: string | string[] | undefined, settings?: Settings): string[];
71
+ export declare function resolveConfiguredModelPatterns(value: ModelSelectorValue | undefined, settings?: Settings): string[];
65
72
  export interface AgentModelPatternResolutionOptions {
66
- settingsOverride?: string | string[];
67
- agentModel?: string | string[];
73
+ settingsOverride?: ModelSelectorValue;
74
+ agentModel?: ModelSelectorValue;
68
75
  settings?: Settings;
69
76
  activeModelPattern?: string;
70
77
  fallbackModelPattern?: string;
@@ -79,12 +86,12 @@ export interface ResolvedModelRoleValue {
79
86
  explicitThinkingLevel: boolean;
80
87
  warning: string | undefined;
81
88
  }
82
- export declare function resolveModelRoleValue(roleValue: string | undefined, availableModels: Model<Api>[], options?: {
89
+ export declare function resolveModelRoleValue(roleValue: ModelSelectorValue | undefined, availableModels: Model<Api>[], options?: {
83
90
  settings?: Settings;
84
91
  matchPreferences?: ModelMatchPreferences;
85
92
  modelRegistry?: CanonicalModelRegistry;
86
93
  }): ResolvedModelRoleValue;
87
- export declare function extractExplicitThinkingSelector(value: string | undefined, settings?: Settings): ThinkingLevel | undefined;
94
+ export declare function extractExplicitThinkingSelector(value: ModelSelectorValue | undefined, settings?: Settings): ThinkingLevel | undefined;
88
95
  /**
89
96
  * Resolve a model identifier or pattern to a Model instance.
90
97
  */
@@ -107,6 +114,26 @@ export declare function resolveModelOverride(modelPatterns: string[], modelRegis
107
114
  thinkingLevel?: ThinkingLevel;
108
115
  explicitThinkingLevel: boolean;
109
116
  };
117
+ /**
118
+ * Resolve a configured fallback chain to its first callable entry without
119
+ * charging requests. For retryable chains, consumers MUST pass
120
+ * `{ managedFallback: true }` so unsuitable entries (including Cursor's
121
+ * provider-side tool mode) fail closed during resolution before any request
122
+ * is attempted. Single-entry chains remain non-managed selections.
123
+ */
124
+ export interface ModelChainResolutionOptions {
125
+ managedFallback?: boolean;
126
+ }
127
+ export declare function resolveModelChainWithAuth(modelPatterns: readonly string[], modelRegistry: ModelLookupRegistry & Pick<ModelRegistry, "getApiKey">, settings?: Settings, sessionId?: string, options?: ModelChainResolutionOptions): Promise<{
128
+ model?: Model<Api>;
129
+ thinkingLevel?: ThinkingLevel;
130
+ explicitThinkingLevel: boolean;
131
+ activeIndex: number;
132
+ skips: Array<{
133
+ selector: string;
134
+ reason: string;
135
+ }>;
136
+ }>;
110
137
  /**
111
138
  * Resolve a list of override patterns to the first matching model, with an
112
139
  * auth-aware fallback to the parent session's active model.
@@ -128,13 +155,19 @@ export declare function resolveModelOverride(modelPatterns: string[], modelRegis
128
155
  * primary resolution unchanged so the existing error path still surfaces
129
156
  * a meaningful failure downstream.
130
157
  */
131
- export declare function resolveModelOverrideWithAuthFallback(modelPatterns: string[], parentActiveModelPattern: string | undefined, modelRegistry: ModelLookupRegistry & Pick<ModelRegistry, "getApiKey">, settings?: Settings, sessionId?: string): Promise<{
158
+ export declare function resolveModelOverrideWithAuthFallback(modelPatterns: string[], parentActiveModelPattern: string | undefined, modelRegistry: ModelLookupRegistry & Pick<ModelRegistry, "getApiKey">, settings?: Settings, sessionId?: string, options?: ModelChainResolutionOptions): Promise<{
132
159
  model?: Model<Api>;
133
160
  thinkingLevel?: ThinkingLevel;
134
161
  explicitThinkingLevel: boolean;
135
162
  authFallbackUsed: boolean;
136
163
  requestedModel?: Model<Api>;
137
164
  fallbackReason?: "auth_unavailable";
165
+ activeIndex?: number;
166
+ parentFallbackSelector?: string;
167
+ skips: Array<{
168
+ selector: string;
169
+ reason: string;
170
+ }>;
138
171
  }>;
139
172
  /**
140
173
  * Resolve a list of role patterns to the first matching model.
@@ -0,0 +1,17 @@
1
+ import * as z from "zod/v4";
2
+ /** A model selector or an ordered fallback chain of selectors. */
3
+ export type ModelSelectorValue = string | readonly string[];
4
+ /**
5
+ * Accept one validated selector or a non-empty ordered chain of validated selectors.
6
+ * Element schemas own each configuration surface's selector grammar.
7
+ */
8
+ export declare function stringOrNonEmptyArray<T extends z.ZodType<string>>(elementSchema: T): z.ZodUnion<readonly [T, z.ZodArray<T>]>;
9
+ /** Return whether a value is a non-blank selector or a non-empty selector chain. */
10
+ export declare function isModelSelectorValue(value: unknown): value is ModelSelectorValue;
11
+ /**
12
+ * Preserve compatibility with comma-delimited selector strings while flattening
13
+ * configured chains in their declared order.
14
+ */
15
+ export declare function normalizeModelSelectorValue(value: ModelSelectorValue | undefined): string[];
16
+ /** Return the first configured selector for consumers that need one selector. */
17
+ export declare function selectorHead(value: ModelSelectorValue | undefined): string | undefined;
@@ -62,6 +62,10 @@ export declare const OpenAICompatSchema: z.ZodObject<{
62
62
  none: "none";
63
63
  }>>;
64
64
  }, z.core.$strip>;
65
+ export declare const ModelBindingsSchema: z.ZodObject<{
66
+ modelRoles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
67
+ agentModelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
68
+ }, z.core.$strip>;
65
69
  export declare const ProfileRoleSchema: z.ZodEnum<{
66
70
  architect: "architect";
67
71
  critic: "critic";
@@ -76,7 +80,7 @@ export declare const ProfileModelMappingSchema: z.ZodRecord<z.ZodEnum<{
76
80
  default: "default";
77
81
  executor: "executor";
78
82
  planner: "planner";
79
- }> & z.core.$partial, z.ZodString>;
83
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
80
84
  export declare const ProfileDefinitionSchema: z.ZodObject<{
81
85
  required_providers: z.ZodArray<z.ZodString>;
82
86
  display_name: z.ZodOptional<z.ZodString>;
@@ -86,7 +90,7 @@ export declare const ProfileDefinitionSchema: z.ZodObject<{
86
90
  default: "default";
87
91
  executor: "executor";
88
92
  planner: "planner";
89
- }> & z.core.$partial, z.ZodString>;
93
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
90
94
  }, z.core.$strict>;
91
95
  export declare const ProfilesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
92
96
  required_providers: z.ZodArray<z.ZodString>;
@@ -97,7 +101,7 @@ export declare const ProfilesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
97
101
  default: "default";
98
102
  executor: "executor";
99
103
  planner: "planner";
100
- }> & z.core.$partial, z.ZodString>;
104
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
101
105
  }, z.core.$strict>>;
102
106
  export declare const ModelOverrideSchema: z.ZodObject<{
103
107
  name: z.ZodOptional<z.ZodString>;
@@ -676,8 +680,8 @@ export declare const ModelsConfigSchema: z.ZodObject<{
676
680
  }, z.core.$strict>>;
677
681
  }, z.core.$strict>>>;
678
682
  modelBindings: z.ZodOptional<z.ZodObject<{
679
- modelRoles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
680
- agentModelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
683
+ modelRoles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
684
+ agentModelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
681
685
  }, z.core.$strip>>;
682
686
  equivalence: z.ZodOptional<z.ZodObject<{
683
687
  overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -692,7 +696,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
692
696
  default: "default";
693
697
  executor: "executor";
694
698
  planner: "planner";
695
- }> & z.core.$partial, z.ZodString>;
699
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
696
700
  }, z.core.$strict>>>;
697
701
  }, z.core.$strict>;
698
702
  export type ModelsConfig = z.infer<typeof ModelsConfigSchema>;
@@ -1,4 +1,5 @@
1
1
  import type { Effort } from "@gajae-code/ai/model-thinking";
2
+ import type { ModelSelectorValue } from "./model-selector-value";
2
3
  import { type SkillDiscoverySettings } from "./skill-settings-defaults";
3
4
  /** Unified settings schema - single source of truth for all settings.
4
5
  *
@@ -10,7 +11,7 @@ import { type SkillDiscoverySettings } from "./skill-settings-defaults";
10
11
  * settings.get("compaction.enabled") // => boolean
11
12
  * settings.set("theme.dark", "red-claw") // sync, saves in background
12
13
  */
13
- export type SettingTab = "appearance" | "model" | "interaction" | "context" | "memory" | "editing" | "tools" | "tasks" | "providers";
14
+ export type SettingTab = "appearance" | "model" | "interaction" | "context" | "memory" | "editing" | "tools" | "tasks" | "providers" | "notifications";
14
15
  /** Tab display metadata - icon is resolved via theme.symbol() */
15
16
  export type TabMetadata = {
16
17
  label: string;
@@ -37,6 +38,11 @@ interface UiBase {
37
38
  description: string;
38
39
  /** Condition function name - setting only shown when true */
39
40
  condition?: string;
41
+ /**
42
+ * Persistence owner for settings which must not use the generic immediate
43
+ * settings-list write path.
44
+ */
45
+ editing?: "notification-atomic";
40
46
  }
41
47
  interface UiBoolean extends UiBase {
42
48
  }
@@ -91,9 +97,13 @@ interface ArrayDef<T> {
91
97
  };
92
98
  ui?: UiBase;
93
99
  }
100
+ interface RecordValueDef {
101
+ type: "model-selector-value";
102
+ }
94
103
  interface RecordDef<T> {
95
104
  type: "record";
96
105
  default: Record<string, T>;
106
+ valueSchema?: RecordValueDef;
97
107
  ui?: UiBase;
98
108
  }
99
109
  type SettingDef = BooleanDef | StringDef | NumberDef | EnumDef<readonly string[]> | ArrayDef<unknown> | RecordDef<unknown>;
@@ -130,13 +140,29 @@ export declare const SETTINGS_SCHEMA: {
130
140
  readonly type: "string";
131
141
  readonly default: undefined;
132
142
  };
143
+ readonly "notifications.telegram.activation": {
144
+ readonly type: "record";
145
+ readonly default: Record<string, unknown>;
146
+ };
133
147
  readonly "notifications.telegram.rich.enabled": {
134
148
  readonly type: "boolean";
135
149
  readonly default: true;
150
+ readonly ui: {
151
+ readonly tab: "notifications";
152
+ readonly label: "Telegram Rich Messages";
153
+ readonly description: "Format Telegram notifications with rich message content.";
154
+ readonly editing: "notification-atomic";
155
+ };
136
156
  };
137
157
  readonly "notifications.telegram.richDraft.enabled": {
138
158
  readonly type: "boolean";
139
159
  readonly default: false;
160
+ readonly ui: {
161
+ readonly tab: "notifications";
162
+ readonly label: "Telegram Rich Drafts";
163
+ readonly description: "Include rich draft updates in Telegram notifications.";
164
+ readonly editing: "notification-atomic";
165
+ };
140
166
  };
141
167
  readonly "notifications.telegram.topics.nameTemplate": {
142
168
  readonly type: "string";
@@ -146,7 +172,15 @@ export declare const SETTINGS_SCHEMA: {
146
172
  readonly type: "string";
147
173
  readonly default: undefined;
148
174
  };
149
- readonly "notifications.discord.channelId": {
175
+ readonly "notifications.discord.applicationId": {
176
+ readonly type: "string";
177
+ readonly default: undefined;
178
+ };
179
+ readonly "notifications.discord.guildId": {
180
+ readonly type: "string";
181
+ readonly default: undefined;
182
+ };
183
+ readonly "notifications.discord.parentChannelId": {
150
184
  readonly type: "string";
151
185
  readonly default: undefined;
152
186
  };
@@ -154,23 +188,71 @@ export declare const SETTINGS_SCHEMA: {
154
188
  readonly type: "string";
155
189
  readonly default: undefined;
156
190
  };
191
+ readonly "notifications.slack.appToken": {
192
+ readonly type: "string";
193
+ readonly default: undefined;
194
+ };
195
+ readonly "notifications.slack.workspaceId": {
196
+ readonly type: "string";
197
+ readonly default: undefined;
198
+ };
157
199
  readonly "notifications.slack.channelId": {
158
200
  readonly type: "string";
159
201
  readonly default: undefined;
160
202
  };
203
+ readonly "notifications.slack.authorizedUserId": {
204
+ readonly type: "string";
205
+ readonly default: undefined;
206
+ };
161
207
  readonly "notifications.redact": {
162
208
  readonly type: "boolean";
163
209
  readonly default: false;
210
+ readonly ui: {
211
+ readonly tab: "notifications";
212
+ readonly label: "Redact Notification Content";
213
+ readonly description: "Redact sensitive content before notifications are delivered.";
214
+ readonly editing: "notification-atomic";
215
+ };
164
216
  };
165
217
  readonly "notifications.verbosity": {
166
218
  readonly type: "string";
167
219
  readonly default: "lean";
168
220
  readonly validate: (value: string) => value is "lean" | "verbose";
221
+ readonly ui: {
222
+ readonly tab: "notifications";
223
+ readonly label: "Notification Verbosity";
224
+ readonly description: "Choose concise or detailed notification messages.";
225
+ readonly options: readonly [{
226
+ readonly value: "lean";
227
+ readonly label: "Lean";
228
+ readonly description: "Send concise notification messages";
229
+ }, {
230
+ readonly value: "verbose";
231
+ readonly label: "Verbose";
232
+ readonly description: "Send detailed notification messages";
233
+ }];
234
+ readonly editing: "notification-atomic";
235
+ };
169
236
  };
170
237
  readonly "notifications.sessionScope": {
171
238
  readonly type: "string";
172
239
  readonly default: "all";
173
240
  readonly validate: (value: string) => value is "all" | "primary";
241
+ readonly ui: {
242
+ readonly tab: "notifications";
243
+ readonly label: "Notification Session Scope";
244
+ readonly description: "Send notifications from all sessions or only the primary session.";
245
+ readonly options: readonly [{
246
+ readonly value: "all";
247
+ readonly label: "All Sessions";
248
+ readonly description: "Allow eligible sessions";
249
+ }, {
250
+ readonly value: "primary";
251
+ readonly label: "Primary Session";
252
+ readonly description: "Limit automatic notifications to the primary session";
253
+ }];
254
+ readonly editing: "notification-atomic";
255
+ };
174
256
  };
175
257
  readonly "notifications.daemon.idleTimeoutMs": {
176
258
  readonly type: "number";
@@ -285,7 +367,10 @@ export declare const SETTINGS_SCHEMA: {
285
367
  };
286
368
  readonly modelRoles: {
287
369
  readonly type: "record";
288
- readonly default: Record<string, string>;
370
+ readonly default: Record<string, ModelSelectorValue>;
371
+ readonly valueSchema: {
372
+ readonly type: "model-selector-value";
373
+ };
289
374
  };
290
375
  readonly "modelProfile.default": {
291
376
  readonly type: "string";
@@ -1240,6 +1325,11 @@ export declare const SETTINGS_SCHEMA: {
1240
1325
  }];
1241
1326
  };
1242
1327
  };
1328
+ readonly "fallback.maxAttempts": {
1329
+ readonly type: "number";
1330
+ readonly default: 3;
1331
+ readonly validate: (value: number) => boolean;
1332
+ };
1243
1333
  readonly "retry.enabled": {
1244
1334
  readonly type: "boolean";
1245
1335
  readonly default: true;
@@ -2802,6 +2892,34 @@ export declare const SETTINGS_SCHEMA: {
2802
2892
  readonly description: "Directory to save screenshots. If unset, screenshots go to a temp file. Supports ~. Examples: ~/Downloads, ~/Desktop, /sdcard/Download (Android)";
2803
2893
  };
2804
2894
  };
2895
+ readonly "browser.profileReuse": {
2896
+ readonly type: "string";
2897
+ readonly default: "auto";
2898
+ readonly validate: (value: string) => value is "auto" | "opt-in";
2899
+ readonly ui: {
2900
+ readonly tab: "tools";
2901
+ readonly label: "Profile reuse posture";
2902
+ readonly description: "'auto' (default): when a usable real Chrome profile is available, the browser tool uses an isolated copy of it (cookies/session/cache) for stronger stealth, warns, and falls back to synthetic. 'opt-in': stay synthetic unless a real profile is explicitly requested.";
2903
+ };
2904
+ };
2905
+ readonly "browser.geo.timezone": {
2906
+ readonly type: "string";
2907
+ readonly default: undefined;
2908
+ readonly ui: {
2909
+ readonly tab: "tools";
2910
+ readonly label: "Geo timezone override";
2911
+ readonly description: "Optional IANA timezone (e.g. 'America/New_York') for headless sessions. Default unset preserves the real timezone. Only set this to a value coherent with your egress (e.g. a proxy region); an incoherent timezone increases bot detection.";
2912
+ };
2913
+ };
2914
+ readonly "browser.geo.locale": {
2915
+ readonly type: "string";
2916
+ readonly default: undefined;
2917
+ readonly ui: {
2918
+ readonly tab: "tools";
2919
+ readonly label: "Geo locale override";
2920
+ readonly description: "Optional UI locale (e.g. 'en-US') for headless sessions. Default unset preserves the real locale. Only set this coherently with your egress region.";
2921
+ };
2922
+ };
2805
2923
  readonly "browser.gc.enabled": {
2806
2924
  readonly type: "boolean";
2807
2925
  readonly default: true;
@@ -3337,7 +3455,10 @@ export declare const SETTINGS_SCHEMA: {
3337
3455
  };
3338
3456
  readonly "task.agentModelOverrides": {
3339
3457
  readonly type: "record";
3340
- readonly default: Record<string, string>;
3458
+ readonly default: Record<string, ModelSelectorValue>;
3459
+ readonly valueSchema: {
3460
+ readonly type: "model-selector-value";
3461
+ };
3341
3462
  };
3342
3463
  readonly "tasks.todoClearDelay": {
3343
3464
  readonly type: "number";
@@ -3909,13 +4030,19 @@ export interface NotificationsSettings {
3909
4030
  };
3910
4031
  discord: {
3911
4032
  botToken: string | undefined;
3912
- channelId: string | undefined;
4033
+ applicationId: string | undefined;
4034
+ guildId: string | undefined;
4035
+ parentChannelId: string | undefined;
3913
4036
  };
3914
4037
  slack: {
3915
4038
  botToken: string | undefined;
4039
+ appToken: string | undefined;
4040
+ workspaceId: string | undefined;
3916
4041
  channelId: string | undefined;
3917
4042
  };
3918
4043
  redact: boolean;
4044
+ verbosity: "lean" | "verbose";
4045
+ sessionScope: "all" | "primary";
3919
4046
  daemon: {
3920
4047
  idleTimeoutMs: number;
3921
4048
  };
@@ -3934,7 +4061,7 @@ export interface GroupTypeMap {
3934
4061
  statusLine: StatusLineSettings;
3935
4062
  thinkingBudgets: ThinkingBudgetsSettings;
3936
4063
  stt: SttSettings;
3937
- modelRoles: Record<string, string>;
4064
+ modelRoles: Record<string, ModelSelectorValue>;
3938
4065
  modelTags: ModelTagsSettings;
3939
4066
  cycleOrder: string[];
3940
4067
  shellMinimizer: ShellMinimizerSettings;