@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
@@ -1,4 +1,5 @@
1
1
  import { type AgentMessage } from "@gajae-code/agent-core";
2
+ import type { ConfiguredModelChainEntry as SharedConfiguredModelChainEntry } from "@gajae-code/agent-core/compaction";
2
3
  import type { ImageContent, Message, MessageAttribution, ServiceTier, TextContent } from "@gajae-code/ai";
3
4
  import type { TtsrInjectionRecord } from "../export/ttsr";
4
5
  import { ArtifactManager } from "./artifacts";
@@ -97,6 +98,9 @@ export interface ModelChangeEntry extends SessionEntryBase {
97
98
  /** Effective thinking level when the change was recorded. */
98
99
  thinkingLevel?: string | null;
99
100
  }
101
+ /** Persisted configured fallback chain for one model role. */
102
+ export type ConfiguredModelChainEntry = SharedConfiguredModelChainEntry;
103
+ export type ConfiguredModelChain = Pick<ConfiguredModelChainEntry, "role" | "entries" | "origin" | "identity" | "explicitHead" | "cleared">;
100
104
  export interface ServiceTierChangeEntry extends SessionEntryBase {
101
105
  type: "service_tier_change";
102
106
  serviceTier: ServiceTier | null;
@@ -206,9 +210,27 @@ export interface CustomMessageEntry<T = unknown> extends SessionEntryBase {
206
210
  evictedContent?: EvictedContentMarker;
207
211
  }
208
212
  /** Session entry - has id/parentId for tree structure (returned by "read" methods in SessionManager) */
209
- export type SessionEntry = SessionMessageEntry | ThinkingLevelChangeEntry | ModelChangeEntry | ServiceTierChangeEntry | CompactionEntry | BranchSummaryEntry | CustomEntry | CustomMessageEntry | LabelEntry | TtsrInjectionEntry | MCPToolSelectionEntry | SessionInitEntry | ModeChangeEntry;
213
+ export type SessionEntry = SessionMessageEntry | ThinkingLevelChangeEntry | ModelChangeEntry | ServiceTierChangeEntry | CompactionEntry | BranchSummaryEntry | CustomEntry | CustomMessageEntry | LabelEntry | TtsrInjectionEntry | MCPToolSelectionEntry | SessionInitEntry | ModeChangeEntry | ConfiguredModelChainEntry;
210
214
  /** Raw file entry (includes header) */
211
215
  export type FileEntry = SessionHeader | SessionEntry;
216
+ export type DefaultModelSelectionStage = {
217
+ readonly entryRevision: number;
218
+ readonly headerExportRevision: number;
219
+ readonly sessionId: string;
220
+ readonly sessionFile: string | undefined;
221
+ readonly entries: readonly FileEntry[];
222
+ readonly tempPath: string | undefined;
223
+ readonly persistsToExistingFile: boolean;
224
+ };
225
+ export type DefaultModelSelectionPromotion = {
226
+ readonly kind: "promoted";
227
+ } | {
228
+ readonly kind: "not_promoted";
229
+ readonly error?: Error;
230
+ } | {
231
+ readonly kind: "unknown";
232
+ readonly error: Error;
233
+ };
212
234
  /** Tree node for getTree() - defensive copy of session structure */
213
235
  export interface SessionTreeNode {
214
236
  entry: SessionEntry;
@@ -222,6 +244,8 @@ export interface SessionContext {
222
244
  serviceTier?: ServiceTier;
223
245
  /** Model roles: { default: "provider/modelId", small: "provider/modelId", ... } */
224
246
  models: Record<string, string>;
247
+ /** Configured fallback chains for model roles on the active branch. */
248
+ configuredModelChains: Record<string, ConfiguredModelChain>;
225
249
  /** Names of TTSR rules that have been injected this session */
226
250
  injectedTtsrRules: string[];
227
251
  /** Rich TTSR rule injection records for repeat resume. */
@@ -269,6 +293,21 @@ export interface StrictSessionOpenFailure {
269
293
  kind: "error";
270
294
  reason: ResumeTailError["reason"] | "identity-mismatch";
271
295
  }
296
+ /** Exact transcript bytes and authority captured from one descriptor-bound read. */
297
+ export interface CapturedSessionTranscriptSnapshot {
298
+ sourcePath: string;
299
+ identity: ResumeSessionIdentity;
300
+ content: Uint8Array;
301
+ storage: SessionStorage;
302
+ }
303
+ export type StrictSessionCaptureResult = {
304
+ kind: "captured";
305
+ snapshot: CapturedSessionTranscriptSnapshot;
306
+ } | ResumeTailError;
307
+ export type StrictSessionForkResult = {
308
+ kind: "forked";
309
+ manager: SessionManager;
310
+ } | StrictSessionOpenFailure;
272
311
  /** Result of opening an inspected session without create-or-rewrite fallback. */
273
312
  export type StrictSessionOpenResult = StrictSessionOpenSuccess | StrictSessionOpenFailure;
274
313
  export interface SessionInfo {
@@ -410,6 +449,7 @@ interface SessionManagerStateSnapshot {
410
449
  titleSource: "auto" | "user" | undefined;
411
450
  sessionFile: string | undefined;
412
451
  flushed: boolean;
452
+ ensuredOnDisk: boolean;
413
453
  needsFullRewriteOnNextPersist: boolean;
414
454
  fileEntries: FileEntry[];
415
455
  materializedFileEntries: FileEntry[];
@@ -459,6 +499,11 @@ export declare class SessionManager {
459
499
  */
460
500
  moveTo(newCwd: string): Promise<void>;
461
501
  isPersisted(): boolean;
502
+ stageDefaultModelSelection(model: string, thinkingLevel: string | undefined, options?: {
503
+ readonly appendThinkingLevel: boolean;
504
+ }): Promise<DefaultModelSelectionStage>;
505
+ promoteDefaultModelSelection(stage: DefaultModelSelectionStage): DefaultModelSelectionPromotion;
506
+ discardDefaultModelSelectionStage(stage: DefaultModelSelectionStage): Promise<void>;
462
507
  /**
463
508
  * Force-persist all current entries to disk, even when no assistant message exists yet.
464
509
  * Used by ACP mode where session/new must create a discoverable session immediately.
@@ -543,6 +588,8 @@ export declare class SessionManager {
543
588
  */
544
589
  setSessionName(name: string, source?: "auto" | "user"): Promise<boolean>;
545
590
  _persist(entry: SessionEntry): void;
591
+ /** Append a configured fallback chain as child of current leaf, then advance leaf. Returns entry id. */
592
+ appendConfiguredModelChain(chain: ConfiguredModelChain): string;
546
593
  /** Append a message as child of current leaf, then advance leaf. Returns entry id.
547
594
  * Does not allow writing CompactionSummaryMessage and BranchSummaryMessage directly.
548
595
  * Reason: we want these to be top-level entries in the session, not message session entries,
@@ -713,6 +760,8 @@ export declare class SessionManager {
713
760
  * Resolve the canonical default session directory for a cwd.
714
761
  */
715
762
  static getDefaultSessionDir(cwd: string, agentDir?: string, storage?: SessionStorage): string;
763
+ /** Resolve the default session directory without creating or migrating storage. */
764
+ static getDefaultSessionDirReadOnly(cwd: string, agentDir?: string): string;
716
765
  /**
717
766
  * Create a new session.
718
767
  * @param cwd Working directory (stored in session header)
@@ -734,6 +783,14 @@ export declare class SessionManager {
734
783
  * List sessions for the resume picker without recovery or other maintenance writes.
735
784
  */
736
785
  static listForResumePickerReadOnly(cwd: string, sessionDir?: string, storage?: SessionStorage): Promise<SessionInfo[]>;
786
+ /** Capture exact source content for a strict fork without granting write ownership. */
787
+ static captureTranscriptStrict(filePath: string, storage?: SessionStorage): StrictSessionCaptureResult;
788
+ /**
789
+ * Fork strictly from captured source bytes. The source pathname is used only to
790
+ * revalidate captured authority before destination initialization and transcript
791
+ * persistence; destination history always comes from the captured bytes.
792
+ */
793
+ static forkFromCaptured(snapshot: CapturedSessionTranscriptSnapshot, cwd: string, sessionDir?: string): Promise<StrictSessionForkResult>;
737
794
  /** Inspect a selected session without acquiring write-capable ownership. */
738
795
  static inspectSessionTailReadOnly(filePath: string, storage?: SessionStorage): Promise<ResumeTailInspection>;
739
796
  /**
@@ -2,9 +2,40 @@ import type { AuthCredentialIfAbsentReason, AuthCredentialIfAbsentSnapshotResult
2
2
  import type { ModelRegistry } from "../config/model-registry";
3
3
  import { type CredentialDiscoveryResult, type CredentialOrigin, type DiscoveryOptions, type ImportableCredential } from "./credential-import";
4
4
  export declare const CREDENTIAL_AUTO_IMPORT_ROTATION_WARNING = "Refreshing in gjc may log out the Claude/Codex CLI because OAuth refresh tokens can rotate.";
5
+ export declare const CREDENTIAL_AUTO_IMPORT_PERSISTENCE_WARNING = "Credential import preference could not be saved; external credentials may be offered again.";
6
+ export declare const CREDENTIAL_AUTO_IMPORT_REFRESH_WARNING = "Imported credentials were saved, but provider availability could not be refreshed.";
7
+ export declare const CREDENTIAL_AUTO_IMPORT_DISCOVERY_WARNING = "External credential discovery could not be completed. Use /provider to import credentials manually.";
8
+ export declare const CREDENTIAL_AUTO_IMPORT_RETRY_WARNING = "Some external credentials could not be imported. Use /provider to retry.";
9
+ export declare const CREDENTIAL_AUTO_IMPORT_STATE_UNREADABLE_WARNING = "Credential import preference could not be read. External credential discovery was skipped; use /provider to import credentials manually.";
5
10
  export type CredentialAutoImportSourceLabel = "claude-code-file" | "claude-code-keychain" | "codex-file";
6
11
  export type CredentialAutoImportTrigger = "startup" | "bare-login" | "setup-cli";
12
+ export type InitialImportResolution = "accepted" | "declined";
13
+ export type CredentialAutoImportStateProblem = "invalid-initial-import-resolution" | "invalid-last-import-version" | "malformed-json" | "malformed-root";
14
+ export interface CredentialAutoImportStateFile {
15
+ lastImportVersion?: string;
16
+ initialImportResolution?: InitialImportResolution;
17
+ }
18
+ export interface CredentialAutoImportStateReadResult {
19
+ state: CredentialAutoImportStateFile;
20
+ problems: CredentialAutoImportStateProblem[];
21
+ unreadable: boolean;
22
+ }
23
+ export interface CredentialAutoImportStateMutation {
24
+ lastImportVersion?: string;
25
+ initialImportResolution?: InitialImportResolution;
26
+ }
27
+ export interface CredentialAutoImportStateStore {
28
+ read: () => Promise<CredentialAutoImportStateReadResult>;
29
+ write: (mutation: CredentialAutoImportStateMutation) => Promise<boolean>;
30
+ }
31
+ export interface CredentialAutoImportStateStoreDependencies {
32
+ withFileLock?: <T>(filePath: string, transaction: () => Promise<T>) => Promise<T>;
33
+ rename?: (oldPath: string, newPath: string) => Promise<void>;
34
+ }
7
35
  export declare function getCredentialAutoImportStatePath(agentDir?: string): string;
36
+ export declare function createCredentialAutoImportStateStore(agentDir?: string, dependencies?: CredentialAutoImportStateStoreDependencies): CredentialAutoImportStateStore;
37
+ export declare function readCredentialAutoImportState(agentDir?: string): Promise<CredentialAutoImportStateReadResult>;
38
+ export declare function isCredentialAutoImportStateResolvedForVersion(state: CredentialAutoImportStateFile, version: string): boolean;
8
39
  export declare function readCredentialImportMarker(agentDir?: string): Promise<string | undefined>;
9
40
  export declare function writeCredentialImportMarker(version: string, agentDir?: string): Promise<boolean>;
10
41
  export declare enum CredentialAutoImportFailureClass {
@@ -37,6 +68,9 @@ export interface CredentialAutoImportResult {
37
68
  discovery?: CredentialDiscoveryResult;
38
69
  globalDiscoveryFailure?: CredentialAutoImportFailure;
39
70
  }
71
+ export declare function formatCredentialAutoImportCandidateLabel(candidate: Pick<ImportableCredential, "provider" | "origin">): string;
72
+ export declare function formatCredentialAutoImportPrompt(candidates: readonly Pick<ImportableCredential, "provider" | "origin">[]): string;
73
+ export declare function logCredentialAutoImportFailures(trigger: CredentialAutoImportTrigger, failures: readonly Pick<CredentialAutoImportFailure, "failureClass">[]): void;
40
74
  export type CredentialAutoImportAuthStorage = Pick<AuthStorage, "importCredentialIfAbsent">;
41
75
  export interface CredentialAutoImportOptions {
42
76
  authStorage: CredentialAutoImportAuthStorage;
@@ -48,16 +82,12 @@ export interface CredentialAutoImportOptions {
48
82
  export declare function runExternalCredentialAutoImport({ authStorage, discover, discoveryOptions, }: CredentialAutoImportOptions): Promise<CredentialAutoImportResult>;
49
83
  export declare function buildCredentialAutoImportNotice(result: Pick<CredentialAutoImportResult, "imported">): string | undefined;
50
84
  export declare function formatCredentialAutoImportResult(result: CredentialAutoImportResult): string[];
51
- export interface CredentialImportMarkerStore {
52
- read: () => Promise<string | undefined> | string | undefined;
53
- write: (version: string) => Promise<boolean> | boolean;
54
- }
55
85
  export interface StartupCredentialAutoImportOptions {
56
86
  authStorage: CredentialAutoImportOptions["authStorage"];
57
87
  modelRegistry: Pick<ModelRegistry, "refresh">;
58
88
  discover?: CredentialAutoImportOptions["discover"];
59
89
  version?: string;
60
90
  agentDir?: string;
61
- markerStore?: CredentialImportMarkerStore;
91
+ stateStore?: CredentialAutoImportStateStore;
62
92
  }
63
- export declare function runStartupCredentialAutoImportIfNeeded({ authStorage: activeAuthStorage, modelRegistry: activeModelRegistry, discover, version, agentDir, markerStore, }: StartupCredentialAutoImportOptions): Promise<string | undefined>;
93
+ export declare function runStartupCredentialAutoImportIfNeeded({ authStorage: activeAuthStorage, modelRegistry: activeModelRegistry, discover, version, agentDir, stateStore, }: StartupCredentialAutoImportOptions): Promise<string | undefined>;
@@ -6,7 +6,7 @@
6
6
  * through the extension/runner/controller wiring. A session has at most one
7
7
  * source; registering returns a disposer.
8
8
  */
9
- import type { WorkflowGateEmitter } from "../modes/shared/agent-wire/unattended-session";
9
+ import type { WorkflowGateEmitter } from "../modes/shared/agent-wire/workflow-gate-broker";
10
10
  import type { AskAnswerSource } from "./index";
11
11
  /** Register `source` for `sessionId`. Returns a disposer that clears it. */
12
12
  export declare function registerAskAnswerSource(sessionId: string, source: AskAnswerSource): () => void;
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Offline stealth-detector benchmark model.
3
+ *
4
+ * Pure, deterministic logic for the anti-detection benchmark suite: it converts
5
+ * a browser-collected fingerprint probe into a normalized per-detector verdict,
6
+ * implements the falsifiable CI gate (see plan Phase 1 / R-T3), and renders a
7
+ * before/after report. No browser or network access lives here so it can be
8
+ * unit-tested deterministically; the harness that drives the real browser tool
9
+ * against vendored detector fixtures feeds its output into these functions.
10
+ */
11
+ export type SignalStatus = "pass" | "fail";
12
+ /** A single boolean fingerprint signal, e.g. "navigator.webdriver is undefined". */
13
+ export interface DetectorSignal {
14
+ /** Stable identifier, used to diff across runs. */
15
+ id: string;
16
+ /** Human-readable label for the report. */
17
+ label: string;
18
+ /** `pass` means the signal looks human; `fail` means it leaks automation. */
19
+ status: SignalStatus;
20
+ /** Optional observed value for debugging. */
21
+ detail?: string;
22
+ }
23
+ export type AutomatedVerdict = "human" | "bot" | "unknown";
24
+ /** Normalized result for one detector (e.g. bot.sannysoft, CreepJS). */
25
+ export interface DetectorResult {
26
+ detector: string;
27
+ signals: DetectorSignal[];
28
+ /** Overall automated/not classification when the detector exposes one. */
29
+ automatedVerdict: AutomatedVerdict;
30
+ /** Absolute trust score (observability-only, never a hard gate). */
31
+ trustScore: number | null;
32
+ }
33
+ /** Shape emitted by the offline probe fixture on `window.__stealthProbe`. */
34
+ export interface RawProbe {
35
+ detector: string;
36
+ signals: Array<{
37
+ id: string;
38
+ label: string;
39
+ pass: boolean;
40
+ detail?: string;
41
+ }>;
42
+ automatedVerdict?: AutomatedVerdict;
43
+ trustScore?: number | null;
44
+ }
45
+ /** Convert a raw browser-collected probe into a normalized {@link DetectorResult}. */
46
+ export declare function parseProbe(raw: RawProbe): DetectorResult;
47
+ export interface GateOutcome {
48
+ pass: boolean;
49
+ reasons: string[];
50
+ }
51
+ /**
52
+ * Falsifiable CI gate (plan Phase 1 / R-T3, R-C1, R-C2):
53
+ * (a) zero failing signals in the current run, AND
54
+ * current pass-count >= baseline pass-count (no silent regression), AND
55
+ * (b) either at least one signal that failed at baseline now passes,
56
+ * OR the baseline was already all-green (empty-gap regression lock).
57
+ * The absolute `trustScore` is never consulted here; it is observability-only.
58
+ */
59
+ export declare function evaluateGate(baseline: DetectorResult, current: DetectorResult): GateOutcome;
60
+ /** Aggregate gate across every detector; passes only when all detectors pass. */
61
+ export declare function evaluateSuiteGate(baseline: readonly DetectorResult[], current: readonly DetectorResult[]): GateOutcome;
62
+ /** Render a deterministic before/after markdown report for one run. */
63
+ export declare function renderReport(baseline: readonly DetectorResult[], current: readonly DetectorResult[]): string;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Offline stealth benchmark harness (plan Phase 1).
3
+ *
4
+ * Drives a puppeteer Page (already stealth-patched by the browser tool) against
5
+ * self-contained offline detector fixtures and collects normalized results. The
6
+ * navigation/evaluation is injected so this stays unit-testable without a real
7
+ * browser; the integration test wires a live puppeteer Page.
8
+ */
9
+ import type { Page } from "puppeteer-core";
10
+ import type { DetectorResult } from "./detector-report";
11
+ /** Minimal surface of a puppeteer Page that the harness needs. */
12
+ export type SuitePage = Pick<Page, "goto" | "evaluate">;
13
+ export interface SuiteFixture {
14
+ /** file:// (or http://) URL of the offline detector fixture. */
15
+ url: string;
16
+ }
17
+ /** Navigate to each fixture and collect a normalized DetectorResult per fixture. */
18
+ export declare function runOfflineSuite(page: SuitePage, fixtures: readonly SuiteFixture[]): Promise<DetectorResult[]>;
@@ -20,6 +20,25 @@ export interface LaunchHeadlessOptions {
20
20
  height: number;
21
21
  deviceScaleFactor?: number;
22
22
  };
23
+ /**
24
+ * Optional isolated warm-up profile directory (see profile-reuse.ts). When
25
+ * set, the headless browser launches against this isolated copy of the user's
26
+ * real Chrome profile so sessions inherit real cookies/storage/cache for
27
+ * stronger stealth. Callers resolve this via resolveProfileReuse and MUST
28
+ * pass an isolated copy, never a live profile dir.
29
+ */
30
+ profileWarmupDir?: string;
31
+ /**
32
+ * Optional opt-in geo alignment (see settings browser.geo.*). When set, the
33
+ * browser is launched with a matching timezone (TZ env) and/or UI language
34
+ * (--lang) at the source. Default unset = strict no-op: the real environment
35
+ * timezone/locale are preserved (never half-spoof). Only align these to a
36
+ * coherent value (e.g. one matching a configured proxy egress).
37
+ */
38
+ geo?: {
39
+ timezone?: string;
40
+ locale?: string;
41
+ };
23
42
  }
24
43
  export declare function launchHeadlessBrowser(opts: LaunchHeadlessOptions): Promise<Browser>;
25
44
  export declare function applyViewport(page: Page, viewport?: {
@@ -54,6 +73,9 @@ export declare function buildStealthInjectionScriptForTest(scripts?: readonly st
54
73
  export declare function applyStealthPatches(browser: Browser, page: Page, state: {
55
74
  browserSession: CDPSession | null;
56
75
  override: UserAgentOverride | null;
76
+ }, geo?: {
77
+ readonly timezone?: string;
78
+ readonly locale?: string;
57
79
  }): Promise<void>;
58
80
  export declare function targetSupportsUserAgentOverrideForTest(target: Target): boolean;
59
81
  export declare function configureUserAgentTargetsForTest(browser: Browser, state: {
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Default Chrome profile discovery (plan Phase 2 wiring).
3
+ *
4
+ * Locates the user's real Chrome "Default" profile directory per OS so the
5
+ * default headless launch path can warm up synthetic sessions from an isolated
6
+ * copy of it (see profile-warmup.ts + profile-posture.ts). Pure path logic with
7
+ * an injectable existence check, so it is unit-testable without touching the
8
+ * real filesystem.
9
+ */
10
+ export interface DiscoveryEnv {
11
+ platform: NodeJS.Platform;
12
+ home: string;
13
+ /** Injectable for tests; defaults to fs.existsSync at call sites. */
14
+ exists: (p: string) => boolean;
15
+ /** Windows LOCALAPPDATA override (tests / non-default installs). */
16
+ localAppData?: string;
17
+ }
18
+ /** Candidate Chrome user-data roots for the platform (most common first). */
19
+ export declare function chromeUserDataRoots(env: DiscoveryEnv): string[];
20
+ export interface DiscoveredProfile {
21
+ userDataDir: string;
22
+ profileDirectory: string;
23
+ profileDir: string;
24
+ }
25
+ /**
26
+ * Discover the default Chrome profile, or null when none is present.
27
+ * Only returns a profile whose directory actually exists.
28
+ */
29
+ export declare function discoverDefaultChromeProfile(env: DiscoveryEnv, profileDirectory?: string): DiscoveredProfile | null;
30
+ /** Convenience wrapper using the live OS environment + fs. */
31
+ export declare function defaultDiscoveryEnv(exists: (p: string) => boolean): DiscoveryEnv;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Auto-default profile-reuse posture decision (plan Phase 2, Intent Reconciliation).
3
+ *
4
+ * User-confirmed policy: when a usable real Chrome profile is available, the
5
+ * browser tool uses it automatically (AUTO), emits a warning, and falls back to
6
+ * synthetic stealth when unavailable. The posture is overridable via a setting.
7
+ * This is pure decision logic (no browser, no filesystem side effects) so the
8
+ * launch/attach layer can call it and it can be unit-tested deterministically.
9
+ */
10
+ /** Configured posture: `auto` (default) prefers the real profile; `opt-in` stays synthetic unless explicitly asked. */
11
+ export type ProfileReusePosture = "auto" | "opt-in";
12
+ export declare const DEFAULT_PROFILE_REUSE_POSTURE: ProfileReusePosture;
13
+ export interface PostureInputs {
14
+ /** Configured posture; defaults to `auto` when unset. */
15
+ posture?: ProfileReusePosture;
16
+ /** A usable real Chrome profile was detected and is attachable/safe to copy. */
17
+ realProfileAvailable: boolean;
18
+ /** Caller explicitly requested real-profile reuse for this run (e.g. app.browser === "chrome"). */
19
+ explicitlyRequested?: boolean;
20
+ }
21
+ export interface PostureDecision {
22
+ /** `real` = use the (isolated copy of the) real profile; `synthetic` = synthetic stealth session. */
23
+ mode: "real" | "synthetic";
24
+ /** User-facing warning to emit when real credentials/state are about to be used. */
25
+ warning: string | null;
26
+ /** Machine-readable reason for logs/audit. */
27
+ reason: "auto-real" | "explicit-real" | "synthetic-fallback" | "synthetic-opt-in";
28
+ }
29
+ /**
30
+ * Decide whether to reuse the real profile or run synthetic.
31
+ *
32
+ * - `auto` + available -> real (with warning)
33
+ * - `opt-in` + explicitly asked -> real (with warning)
34
+ * - `opt-in` (no explicit ask) -> synthetic
35
+ * - not available -> synthetic (fallback), even under `auto`
36
+ */
37
+ export declare function decideProfilePosture(inputs: PostureInputs): PostureDecision;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Profile-reuse orchestration (plan Phase 2 wiring).
3
+ *
4
+ * Single entry point the launch path calls to decide, for a default headless
5
+ * session, whether to warm up from an isolated copy of the user's real Chrome
6
+ * profile. Ties together discovery + posture + isolated warm-up. Filesystem
7
+ * effects (the copy) are performed only when the posture resolves to `real`.
8
+ * The heavy pieces are injectable so this is unit-testable without a browser.
9
+ */
10
+ import { type DiscoveredProfile, type DiscoveryEnv } from "./profile-discovery";
11
+ import { type ProfileReusePosture } from "./profile-posture";
12
+ import { type WarmupManifest } from "./profile-warmup";
13
+ export interface ResolveProfileReuseInputs {
14
+ posture?: ProfileReusePosture;
15
+ /** Caller explicitly requested real-profile reuse (e.g. app.browser === "chrome"). */
16
+ explicitlyRequested?: boolean;
17
+ discoveryEnv: DiscoveryEnv;
18
+ /** Destination for the isolated warm-up copy; defaults to an ephemeral temp dir. */
19
+ destDir?: string;
20
+ /** Injectable copier (defaults to collectWarmupArtifacts). */
21
+ copy?: (sourceProfileDir: string, destDir: string) => WarmupManifest;
22
+ /** Injectable temp-dir factory (defaults to fs.mkdtemp under os.tmpdir()). */
23
+ makeTempDir?: () => string;
24
+ }
25
+ export interface ProfileReuseResult {
26
+ mode: "real" | "synthetic";
27
+ reason: string;
28
+ warning: string | null;
29
+ discovered: DiscoveredProfile | null;
30
+ /** Isolated copy directory when mode === "real", else null. */
31
+ warmupDir: string | null;
32
+ manifest: WarmupManifest | null;
33
+ }
34
+ /**
35
+ * Resolve profile reuse for a default session. When the posture resolves to
36
+ * `real`, copies an allowlisted, lock-free subset of the discovered profile
37
+ * into an isolated dir and returns that dir for the launcher to use.
38
+ */
39
+ export declare function resolveProfileReuse(inputs: ResolveProfileReuseInputs): ProfileReuseResult;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Isolated profile warm-up (plan Phase 2, R-C3).
3
+ *
4
+ * Aggressive real-profile reuse seeds a session with the user's cookies /
5
+ * localStorage / cache. To stay safe (never lock or corrupt the live browser
6
+ * session) we NEVER bind the source profile directly: we copy an allowlisted
7
+ * subset of artifacts into an ephemeral, isolated directory and drive Chromium
8
+ * against that copy. Chromium single-instance lock files (SingletonLock/Socket/
9
+ * Cookie) are explicitly excluded so the isolated copy can never contend with a
10
+ * running browser.
11
+ *
12
+ * This module is pure filesystem logic (no browser, no network) so it is
13
+ * deterministically unit-testable.
14
+ */
15
+ /** Chromium single-instance lock artifacts — must never be copied. */
16
+ export declare const CHROME_LOCK_ARTIFACTS: readonly ["SingletonLock", "SingletonSocket", "SingletonCookie"];
17
+ /**
18
+ * Profile-relative artifacts worth seeding for warm-up. Kept intentionally
19
+ * small: session state (cookies, storage) plus a light cache. Anything not
20
+ * listed is skipped, which also keeps the isolated copy cheap.
21
+ */
22
+ export declare const WARMUP_ARTIFACTS: readonly ["Cookies", "Cookies-journal", "Local Storage", "Session Storage", "IndexedDB", "Network", "Preferences"];
23
+ export interface WarmupManifest {
24
+ sourceProfileDir: string;
25
+ destDir: string;
26
+ copied: string[];
27
+ skippedMissing: string[];
28
+ /** Always empty unless a lock artifact was seen (never copied). */
29
+ excludedLocks: string[];
30
+ }
31
+ /**
32
+ * Copy warm-up artifacts from `sourceProfileDir` into an isolated `destDir`.
33
+ *
34
+ * Guarantees:
35
+ * - The source profile is only ever read, never written or locked.
36
+ * - Chromium lock artifacts are never copied (recorded in `excludedLocks`).
37
+ * - Missing artifacts are skipped, not fatal (recorded in `skippedMissing`).
38
+ */
39
+ export declare function collectWarmupArtifacts(sourceProfileDir: string, destDir: string): WarmupManifest;
@@ -1,6 +1,7 @@
1
1
  import type { Subprocess } from "bun";
2
2
  import type { Browser, CDPSession } from "puppeteer-core";
3
3
  import { type UserAgentOverride } from "./launch";
4
+ import type { ProfileReusePosture } from "./profile-posture";
4
5
  export type BrowserKind = {
5
6
  kind: "headless";
6
7
  headless: boolean;
@@ -20,9 +21,14 @@ export type BrowserKind = {
20
21
  cdpUrl: string;
21
22
  };
22
23
  export type BrowserKindTag = BrowserKind["kind"];
24
+ export interface BrowserGeo {
25
+ readonly timezone?: string;
26
+ readonly locale?: string;
27
+ }
23
28
  export interface BrowserHandle {
24
29
  key: string;
25
30
  kind: BrowserKind;
31
+ readonly geo?: BrowserGeo;
26
32
  browser: Browser;
27
33
  cdpUrl?: string;
28
34
  pid?: number;
@@ -45,7 +51,20 @@ export interface AcquireBrowserOptions {
45
51
  };
46
52
  appArgs?: string[];
47
53
  signal?: AbortSignal;
54
+ /**
55
+ * Profile-reuse posture for the default headless path (from settings
56
+ * `browser.profileReuse`, resolved by the settings-aware caller). When set,
57
+ * the headless browser may warm up from an isolated copy of the user's real
58
+ * Chrome profile (see profile-reuse.ts). Omitted = synthetic session.
59
+ */
60
+ profileReuse?: ProfileReusePosture;
61
+ /**
62
+ * Opt-in geo alignment for the default headless path (from settings
63
+ * `browser.geo.*`). Default unset = no-op (real timezone/locale preserved).
64
+ */
65
+ geo?: BrowserGeo;
48
66
  }
67
+ export declare function browserKeyForTest(kind: BrowserKind, opts: Pick<AcquireBrowserOptions, "geo" | "profileReuse">): string;
49
68
  export declare function acquireBrowser(kind: BrowserKind, opts: AcquireBrowserOptions): Promise<BrowserHandle>;
50
69
  export declare function buildChromeProfileLaunchArgs(kind: SpawnedChromeProfileKind, appArgs: readonly string[] | undefined, port: number): string[];
51
70
  export declare function buildChromeProfileLaunchArgsForTest(kind: SpawnedChromeProfileKind, appArgs: readonly string[] | undefined, port: number): string[];
@@ -47,6 +47,10 @@ export type WorkerInitPayload = {
47
47
  height: number;
48
48
  deviceScaleFactor?: number;
49
49
  };
50
+ geo?: {
51
+ readonly timezone?: string;
52
+ readonly locale?: string;
53
+ };
50
54
  dialogs?: "accept" | "dismiss";
51
55
  url?: string;
52
56
  waitUntil?: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
@@ -5,7 +5,7 @@ import type { Settings } from "../config/settings";
5
5
  import type { Skill } from "../extensibility/skills";
6
6
  import type { GoalModeState, GoalRuntime } from "../goals";
7
7
  import type { HindsightSessionState } from "../hindsight/state";
8
- import type { WorkflowGateEmitter } from "../modes/shared/agent-wire/unattended-session";
8
+ import type { WorkflowGateEmitter } from "../modes/shared/agent-wire/workflow-gate-broker";
9
9
  import type { PlanModeState } from "../plan-mode/state";
10
10
  import type { AgentRegistry } from "../registry/agent-registry";
11
11
  import type { ForkContextSeed, ForkContextSeedOptions, PurgeQueuedCustomMessagesResult } from "../session/agent-session";
@@ -125,9 +125,10 @@ export interface AskRemoteReceipt {
125
125
  }
126
126
  export type AskAnswerSourceResult = AskRemoteReceipt | string | undefined;
127
127
  /**
128
- * Source of remote answers. `awaitAnswer` remains the legacy wire for existing
129
- * integrations; typed sources opt into `awaitAnswerRequest`. This keeps an old
130
- * string-only source from accidentally acquiring acknowledgement authority.
128
+ * Source of remote answers for interactive asks. `awaitAnswer` remains the legacy
129
+ * wire for existing integrations; typed sources opt into `awaitAnswerRequest`.
130
+ * This keeps a string-only source from accidentally acquiring acknowledgement
131
+ * authority while allowing SDK-routed interactions to settle durably.
131
132
  */
132
133
  export interface AskAnswerSource {
133
134
  awaitAnswer(question: string, options: string[], signal?: AbortSignal): Promise<string | undefined>;
@@ -232,12 +233,11 @@ export interface ToolSession {
232
233
  getPlanModeState?: () => PlanModeState | undefined;
233
234
  /** Goal mode state (if active or paused) */
234
235
  getGoalModeState?: () => GoalModeState | undefined;
235
- /** Unattended workflow-gate emitter (present only when unattended mode is negotiated). */
236
+ /** SDK workflow-gate emitter, when a remote gate responder is connected. */
236
237
  getWorkflowGateEmitter?: () => WorkflowGateEmitter | undefined;
237
238
  /**
238
- * Optional remote answer source for interactive asks. When present, the ask
239
- * tool races the local UI selection against a remote answer (e.g. a Telegram
240
- * reply via the notifications SDK) so asks can be answered without RPC mode.
239
+ * Optional SDK-routed answer source for interactive asks. When present, the
240
+ * tool races the local UI selection against the remote SDK answer.
241
241
  * No-op when undefined: the ask path behaves exactly as before.
242
242
  */
243
243
  getAskAnswerSource?: () => AskAnswerSource | undefined;
@@ -11,6 +11,7 @@ import type { Component } from "@gajae-code/tui";
11
11
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
12
12
  import type { Theme } from "../modes/theme/theme";
13
13
  import { type SubagentToolDetails } from "./subagent";
14
+ export { subagentAwaitRenderedStateSignature } from "./subagent";
14
15
  /** Test-only seam (PR3 deterministic cache-hit assertions). */
15
16
  export declare const subagentBodyCacheTestHooks: {
16
17
  readonly bodyRenders: number;
@@ -56,8 +56,13 @@ export interface SubagentSnapshot {
56
56
  /** True when the requested model lacked credentials and fell back to the parent model. */
57
57
  modelFellBack?: boolean;
58
58
  }
59
+ export type SubagentAwaitOutcome = "completed" | "timed_out" | "interrupted";
59
60
  export interface SubagentToolDetails {
60
61
  subagents: SubagentSnapshot[];
62
+ /** Await outcome for a live await receipt; omitted when no wait was started. */
63
+ awaitOutcome?: SubagentAwaitOutcome;
64
+ /** True only when the parent await was interrupted; the child was not cancelled. */
65
+ interrupted?: true;
61
66
  }
62
67
  export declare class SubagentTool implements AgentTool<typeof subagentSchema, SubagentToolDetails> {
63
68
  #private;
@@ -113,5 +118,5 @@ export declare class SubagentTool implements AgentTool<typeof subagentSchema, Su
113
118
  * countdown ticking is sacrificed by design; every real transition still changes
114
119
  * the signature.
115
120
  */
116
- export declare function subagentAwaitRenderedStateSignature(subagents: readonly SubagentSnapshot[]): string;
121
+ export declare function subagentAwaitRenderedStateSignature(subagents: readonly SubagentSnapshot[], receipt?: Pick<SubagentToolDetails, "awaitOutcome" | "interrupted">): string;
117
122
  export {};