@gajae-code/coding-agent 0.10.2 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/CHANGELOG.md +50 -2
  2. package/dist/types/append-only-mode.d.ts +1 -1
  3. package/dist/types/cli/args.d.ts +4 -5
  4. package/dist/types/cli/daemon-cli.d.ts +12 -1
  5. package/dist/types/cli/notify-cli.d.ts +21 -1
  6. package/dist/types/cli.d.ts +3 -0
  7. package/dist/types/commands/daemon.d.ts +39 -0
  8. package/dist/types/commands/launch.d.ts +3 -0
  9. package/dist/types/commands/notify.d.ts +28 -1
  10. package/dist/types/commands/sdk.d.ts +33 -0
  11. package/dist/types/config/atomic-yaml-patch.d.ts +85 -0
  12. package/dist/types/config/model-profile-activation.d.ts +35 -15
  13. package/dist/types/config/model-profiles.d.ts +11 -5
  14. package/dist/types/config/model-registry.d.ts +3 -3
  15. package/dist/types/config/model-resolver.d.ts +39 -6
  16. package/dist/types/config/model-selector-value.d.ts +17 -0
  17. package/dist/types/config/models-config-schema.d.ts +10 -6
  18. package/dist/types/config/settings-schema.d.ts +133 -6
  19. package/dist/types/config/settings.d.ts +63 -35
  20. package/dist/types/coordinator-mcp/model-preset.d.ts +7 -6
  21. package/dist/types/coordinator-mcp/server.d.ts +6 -49
  22. package/dist/types/daemon/builtin.d.ts +6 -5
  23. package/dist/types/daemon/control-types.d.ts +1 -1
  24. package/dist/types/discovery/mcp-json.d.ts +12 -1
  25. package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
  26. package/dist/types/extensibility/extensions/compact-handler.d.ts +4 -2
  27. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +2 -2
  28. package/dist/types/extensibility/extensions/loader.d.ts +10 -1
  29. package/dist/types/extensibility/extensions/runner.d.ts +3 -3
  30. package/dist/types/extensibility/extensions/types.d.ts +141 -16
  31. package/dist/types/extensibility/hooks/types.d.ts +1 -1
  32. package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -2
  33. package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -0
  34. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +3 -0
  35. package/dist/types/gjc-runtime/team-runtime.d.ts +3 -4
  36. package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +13 -0
  37. package/dist/types/gjc-runtime/tmux-sessions.d.ts +4 -1
  38. package/dist/types/gjc-runtime/windows-powershell-command.d.ts +9 -0
  39. package/dist/types/harness-control-plane/operate.d.ts +5 -5
  40. package/dist/types/harness-control-plane/owner.d.ts +18 -4
  41. package/dist/types/harness-control-plane/receipts.d.ts +0 -1
  42. package/dist/types/harness-control-plane/sdk-transport.d.ts +43 -0
  43. package/dist/types/harness-control-plane/session-transport.d.ts +48 -0
  44. package/dist/types/harness-control-plane/types.d.ts +3 -4
  45. package/dist/types/lsp/index.d.ts +1 -1
  46. package/dist/types/main.d.ts +32 -38
  47. package/dist/types/modes/acp/acp-agent.d.ts +224 -53
  48. package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -0
  49. package/dist/types/modes/acp/acp-mode.d.ts +6 -15
  50. package/dist/types/modes/acp/permission-mode.d.ts +4 -0
  51. package/dist/types/modes/acp/startup-options.d.ts +6 -0
  52. package/dist/types/modes/components/agent-dashboard.d.ts +3 -0
  53. package/dist/types/modes/components/model-selector.d.ts +1 -0
  54. package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
  55. package/dist/types/modes/components/settings-selector.d.ts +6 -4
  56. package/dist/types/modes/components/welcome.d.ts +1 -1
  57. package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
  58. package/dist/types/modes/index.d.ts +0 -4
  59. package/dist/types/modes/interactive-mode.d.ts +3 -0
  60. package/dist/types/modes/runtime-init.d.ts +2 -2
  61. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
  62. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
  63. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
  64. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
  65. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
  66. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +169 -30
  67. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
  68. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
  69. package/dist/types/modes/types.d.ts +5 -0
  70. package/dist/types/runtime-mcp/client.d.ts +2 -0
  71. package/dist/types/runtime-mcp/config.d.ts +5 -1
  72. package/dist/types/runtime-mcp/manager.d.ts +8 -1
  73. package/dist/types/runtime-mcp/types.d.ts +4 -0
  74. package/dist/types/sdk/acp/adapter.d.ts +67 -0
  75. package/dist/types/sdk/acp/index.d.ts +2 -0
  76. package/dist/types/sdk/broker/broker.d.ts +53 -0
  77. package/dist/types/sdk/broker/discovery.d.ts +30 -0
  78. package/dist/types/sdk/broker/ensure.d.ts +33 -0
  79. package/dist/types/sdk/broker/identity.d.ts +3 -0
  80. package/dist/types/sdk/broker/index.d.ts +8 -0
  81. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
  82. package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
  83. package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
  84. package/dist/types/sdk/broker/runtime.d.ts +33 -0
  85. package/dist/types/sdk/broker/session-index.d.ts +57 -0
  86. package/dist/types/sdk/broker/state-version.d.ts +8 -0
  87. package/dist/types/sdk/broker/transport.d.ts +9 -0
  88. package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
  89. package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
  90. package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
  91. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
  92. package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
  93. package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
  94. package/dist/types/sdk/bus/config.d.ts +274 -0
  95. package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
  96. package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
  97. package/dist/types/sdk/bus/discord-daemon.d.ts +45 -0
  98. package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
  99. package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
  100. package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
  101. package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
  102. package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
  103. package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
  104. package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
  105. package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
  106. package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
  107. package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
  108. package/dist/types/sdk/bus/session-control.d.ts +83 -0
  109. package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
  110. package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
  111. package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
  112. package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
  113. package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
  114. package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
  115. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
  116. package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
  117. package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +55 -17
  118. package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
  119. package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
  120. package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
  121. package/dist/types/sdk/cli/index.d.ts +1 -0
  122. package/dist/types/sdk/cli/session-cli.d.ts +19 -0
  123. package/dist/types/sdk/client/client.d.ts +1 -0
  124. package/dist/types/sdk/client/discovery.d.ts +27 -0
  125. package/dist/types/sdk/client/index.d.ts +2 -0
  126. package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
  127. package/dist/types/sdk/host/control/index.d.ts +2 -0
  128. package/dist/types/sdk/host/control/operations.d.ts +65 -0
  129. package/dist/types/sdk/host/events.d.ts +35 -0
  130. package/dist/types/sdk/host/host.d.ts +35 -0
  131. package/dist/types/sdk/host/index.d.ts +4 -0
  132. package/dist/types/sdk/host/query/cursor.d.ts +62 -0
  133. package/dist/types/sdk/host/query/handlers.d.ts +70 -0
  134. package/dist/types/sdk/host/query/index.d.ts +3 -0
  135. package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
  136. package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
  137. package/dist/types/sdk/host/types.d.ts +32 -0
  138. package/dist/types/sdk/index.d.ts +6 -0
  139. package/dist/types/sdk/lifecycle-session.d.ts +14 -0
  140. package/dist/types/sdk/mcp/index.d.ts +1 -0
  141. package/dist/types/sdk/mcp/server.d.ts +37 -0
  142. package/dist/types/sdk/models.d.ts +44 -0
  143. package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
  144. package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
  145. package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
  146. package/dist/types/sdk/startup-capability.d.ts +50 -0
  147. package/dist/types/session/agent-session.d.ts +114 -21
  148. package/dist/types/session/default-model-selection.d.ts +25 -0
  149. package/dist/types/session/fallback-chain-controller.d.ts +52 -0
  150. package/dist/types/session/session-manager.d.ts +58 -1
  151. package/dist/types/setup/credential-auto-import.d.ts +36 -6
  152. package/dist/types/tools/ask-answer-registry.d.ts +1 -1
  153. package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
  154. package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
  155. package/dist/types/tools/browser/launch.d.ts +22 -0
  156. package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
  157. package/dist/types/tools/browser/profile-posture.d.ts +37 -0
  158. package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
  159. package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
  160. package/dist/types/tools/browser/registry.d.ts +19 -0
  161. package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
  162. package/dist/types/tools/index.d.ts +8 -8
  163. package/package.json +34 -13
  164. package/scripts/build-sdk-package-smoke.ts +94 -0
  165. package/scripts/capture-notifications-settings-showcase.ts +435 -0
  166. package/scripts/compile-args.ts +4 -2
  167. package/scripts/g005-daemon-smoke.ts +4 -5
  168. package/scripts/g011-daemon-path-smoke.ts +5 -5
  169. package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
  170. package/scripts/generate-sdk-operation-inventory.ts +867 -0
  171. package/scripts/generate-telegram-baseline-manifest.ts +128 -0
  172. package/scripts/manifest-schema.ts +124 -0
  173. package/scripts/run-test-manifest.ts +153 -0
  174. package/scripts/run-threat-model-check.ts +157 -0
  175. package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
  176. package/scripts/verify-gjc-sdk-rename.ts +90 -0
  177. package/src/append-only-mode.ts +1 -1
  178. package/src/cli/args.ts +43 -12
  179. package/src/cli/auth-gateway-cli.ts +2 -2
  180. package/src/cli/config-cli.ts +2 -1
  181. package/src/cli/daemon-cli.ts +63 -14
  182. package/src/cli/list-models.ts +1 -1
  183. package/src/cli/notify-cli.ts +288 -286
  184. package/src/cli.ts +21 -2
  185. package/src/commands/daemon.ts +50 -6
  186. package/src/commands/harness.ts +93 -36
  187. package/src/commands/launch.ts +5 -2
  188. package/src/commands/mcp-serve.ts +19 -12
  189. package/src/commands/notify.ts +36 -3
  190. package/src/commands/sdk.ts +426 -0
  191. package/src/commit/agentic/agent.ts +1 -0
  192. package/src/config/atomic-yaml-patch.ts +423 -0
  193. package/src/config/model-profile-activation.ts +240 -89
  194. package/src/config/model-profiles.ts +18 -15
  195. package/src/config/model-registry.ts +51 -26
  196. package/src/config/model-resolver.ts +138 -51
  197. package/src/config/model-selector-value.ts +50 -0
  198. package/src/config/models-config-schema.ts +14 -21
  199. package/src/config/settings-schema.ts +128 -10
  200. package/src/config/settings.ts +1120 -158
  201. package/src/coordinator-mcp/model-preset.ts +74 -20
  202. package/src/coordinator-mcp/server.ts +1597 -3052
  203. package/src/daemon/builtin.ts +8 -5
  204. package/src/daemon/control-types.ts +1 -1
  205. package/src/defaults/gjc/skills/team/SKILL.md +4 -4
  206. package/src/discovery/mcp-json.ts +327 -20
  207. package/src/extensibility/custom-tools/types.ts +1 -1
  208. package/src/extensibility/extensions/compact-handler.ts +3 -3
  209. package/src/extensibility/extensions/get-commands-handler.ts +2 -2
  210. package/src/extensibility/extensions/loader.ts +69 -5
  211. package/src/extensibility/extensions/runner.ts +112 -4
  212. package/src/extensibility/extensions/types.ts +176 -17
  213. package/src/extensibility/hooks/types.ts +1 -1
  214. package/src/gjc-runtime/launch-tmux.ts +170 -86
  215. package/src/gjc-runtime/psmux-detect.ts +82 -4
  216. package/src/gjc-runtime/session-state-sidecar.ts +41 -31
  217. package/src/gjc-runtime/team-runtime.ts +54 -35
  218. package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
  219. package/src/gjc-runtime/tmux-owner-isolation.ts +1 -1
  220. package/src/gjc-runtime/tmux-sessions.ts +19 -13
  221. package/src/gjc-runtime/ultragoal-guard.ts +53 -6
  222. package/src/gjc-runtime/ultragoal-runtime.ts +155 -3
  223. package/src/gjc-runtime/windows-powershell-command.ts +58 -0
  224. package/src/harness-control-plane/operate.ts +9 -9
  225. package/src/harness-control-plane/owner.ts +283 -39
  226. package/src/harness-control-plane/receipts.ts +0 -1
  227. package/src/harness-control-plane/sdk-transport.ts +395 -0
  228. package/src/harness-control-plane/session-transport.ts +94 -0
  229. package/src/harness-control-plane/types.ts +1 -1
  230. package/src/internal-urls/docs-index.generated.ts +34 -35
  231. package/src/lsp/client.ts +42 -6
  232. package/src/lsp/index.ts +2 -2
  233. package/src/main.ts +299 -204
  234. package/src/modes/DESIGN.md +258 -0
  235. package/src/modes/acp/acp-agent.ts +1228 -2612
  236. package/src/modes/acp/acp-client-bridge.ts +2 -20
  237. package/src/modes/acp/acp-event-mapper.ts +18 -2
  238. package/src/modes/acp/acp-mode.ts +8 -36
  239. package/src/modes/acp/permission-mode.ts +25 -0
  240. package/src/modes/acp/startup-options.ts +6 -0
  241. package/src/modes/components/agent-dashboard.ts +37 -17
  242. package/src/modes/components/model-selector.ts +93 -35
  243. package/src/modes/components/notifications-settings-editor.ts +1379 -0
  244. package/src/modes/components/settings-selector.ts +60 -11
  245. package/src/modes/components/welcome.ts +4 -4
  246. package/src/modes/controllers/command-controller.ts +1 -2
  247. package/src/modes/controllers/event-controller.ts +11 -16
  248. package/src/modes/controllers/extension-ui-controller.ts +348 -4
  249. package/src/modes/controllers/selector-controller.ts +674 -36
  250. package/src/modes/index.ts +0 -22
  251. package/src/modes/interactive-mode.ts +59 -20
  252. package/src/modes/runtime-init.ts +298 -6
  253. package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
  254. package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
  255. package/src/modes/shared/agent-wire/event-contract.ts +7 -8
  256. package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
  257. package/src/modes/shared/agent-wire/event-observation.ts +16 -7
  258. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1254 -87
  259. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
  260. package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
  261. package/src/modes/types.ts +5 -0
  262. package/src/runtime-mcp/client.ts +94 -19
  263. package/src/runtime-mcp/config.ts +27 -15
  264. package/src/runtime-mcp/manager.ts +343 -105
  265. package/src/runtime-mcp/oauth-flow.ts +42 -12
  266. package/src/runtime-mcp/transports/http.ts +49 -19
  267. package/src/runtime-mcp/transports/stdio.ts +47 -28
  268. package/src/runtime-mcp/types.ts +10 -0
  269. package/src/sdk/acp/adapter.ts +418 -0
  270. package/src/sdk/acp/index.ts +2 -0
  271. package/src/sdk/broker/broker.ts +642 -0
  272. package/src/sdk/broker/discovery.ts +94 -0
  273. package/src/sdk/broker/ensure.ts +249 -0
  274. package/src/sdk/broker/identity.ts +42 -0
  275. package/src/sdk/broker/index.ts +8 -0
  276. package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
  277. package/src/sdk/broker/internal-source.bunfig.toml +1 -0
  278. package/src/sdk/broker/lifecycle-ledger.ts +286 -0
  279. package/src/sdk/broker/lifecycle.ts +2157 -0
  280. package/src/sdk/broker/process-incarnation.ts +159 -0
  281. package/src/sdk/broker/runtime.ts +164 -0
  282. package/src/sdk/broker/session-index.ts +318 -0
  283. package/src/sdk/broker/state-version.ts +23 -0
  284. package/src/sdk/broker/transport.ts +125 -0
  285. package/src/sdk/bus/chat-command-policy.ts +107 -0
  286. package/src/sdk/bus/chat-daemon-cli.ts +214 -0
  287. package/src/sdk/bus/chat-daemon-control.ts +713 -0
  288. package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
  289. package/src/sdk/bus/chat-effect-journal.ts +353 -0
  290. package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
  291. package/src/sdk/bus/config.ts +433 -0
  292. package/src/sdk/bus/conversation-store.ts +391 -0
  293. package/src/sdk/bus/discord-conversation.ts +85 -0
  294. package/src/sdk/bus/discord-daemon.ts +2275 -0
  295. package/src/sdk/bus/discord-live-provider.ts +521 -0
  296. package/src/sdk/bus/discord-provider.ts +56 -0
  297. package/src/{notifications → sdk/bus}/html-format.ts +2 -2
  298. package/src/sdk/bus/index.ts +3943 -0
  299. package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
  300. package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
  301. package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
  302. package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
  303. package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
  304. package/src/sdk/bus/natives-augment.d.ts +38 -0
  305. package/src/sdk/bus/notification-orchestration.ts +535 -0
  306. package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
  307. package/src/sdk/bus/session-control.ts +333 -0
  308. package/src/sdk/bus/slack-conversation.ts +74 -0
  309. package/src/sdk/bus/slack-daemon.ts +2144 -0
  310. package/src/sdk/bus/slack-live-provider.ts +380 -0
  311. package/src/sdk/bus/slack-provider.ts +76 -0
  312. package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
  313. package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
  314. package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
  315. package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
  316. package/src/{notifications → sdk/bus}/telegram-daemon.ts +502 -54
  317. package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
  318. package/src/sdk/bus/telegram-setup.ts +663 -0
  319. package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
  320. package/src/sdk/cli/index.ts +1 -0
  321. package/src/sdk/cli/session-cli.ts +275 -0
  322. package/src/sdk/client/client.ts +1 -0
  323. package/src/sdk/client/discovery.ts +108 -0
  324. package/src/sdk/client/index.ts +2 -0
  325. package/src/sdk/host/control/dispatch.ts +367 -0
  326. package/src/sdk/host/control/index.ts +10 -0
  327. package/src/sdk/host/control/operations.ts +63 -0
  328. package/src/sdk/host/events.ts +91 -0
  329. package/src/sdk/host/host.ts +296 -0
  330. package/src/sdk/host/index.ts +4 -0
  331. package/src/sdk/host/query/cursor.ts +189 -0
  332. package/src/sdk/host/query/handlers.ts +533 -0
  333. package/src/sdk/host/query/index.ts +3 -0
  334. package/src/sdk/host/query/revision-store.ts +1126 -0
  335. package/src/sdk/host/reverse-leases.ts +325 -0
  336. package/src/sdk/host/types.ts +29 -0
  337. package/src/sdk/index.ts +13 -0
  338. package/src/sdk/lifecycle-session.ts +39 -0
  339. package/src/sdk/mcp/index.ts +1 -0
  340. package/src/sdk/mcp/server.ts +332 -0
  341. package/src/sdk/models.ts +168 -0
  342. package/src/sdk/protocol/adapter-validation.ts +48 -0
  343. package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
  344. package/src/sdk/protocol/operation-registry.ts +312 -0
  345. package/src/{sdk.ts → sdk/session.ts} +339 -212
  346. package/src/sdk/startup-capability.ts +189 -0
  347. package/src/session/agent-session.ts +2453 -894
  348. package/src/session/default-model-selection.ts +93 -0
  349. package/src/session/fallback-chain-controller.ts +136 -0
  350. package/src/session/session-manager.ts +438 -11
  351. package/src/session/session-storage.ts +8 -1
  352. package/src/setup/credential-auto-import.ts +290 -35
  353. package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
  354. package/src/slash-commands/builtin-registry.ts +2 -1
  355. package/src/task/executor.ts +62 -13
  356. package/src/tools/ask-answer-registry.ts +1 -1
  357. package/src/tools/ask.ts +13 -8
  358. package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
  359. package/src/tools/browser/benchmark/detector-report.ts +157 -0
  360. package/src/tools/browser/benchmark/run-suite.ts +39 -0
  361. package/src/tools/browser/launch.ts +124 -19
  362. package/src/tools/browser/profile-discovery.ts +63 -0
  363. package/src/tools/browser/profile-posture.ts +59 -0
  364. package/src/tools/browser/profile-reuse.ts +102 -0
  365. package/src/tools/browser/profile-warmup.ts +109 -0
  366. package/src/tools/browser/registry.ts +87 -11
  367. package/src/tools/browser/tab-protocol.ts +1 -0
  368. package/src/tools/browser/tab-supervisor.ts +1 -0
  369. package/src/tools/browser/tab-worker.ts +1 -1
  370. package/src/tools/browser.ts +6 -0
  371. package/src/tools/index.ts +8 -8
  372. package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
  373. package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
  374. package/src/tools/telegram-send.ts +2 -2
  375. package/vendor/insane-search/MANIFEST.json +2 -1
  376. package/vendor/insane-search/engine/bias_check.py +4 -1
  377. package/vendor/insane-search/engine/phase0.py +26 -1
  378. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  379. package/dist/types/modes/bridge/auth.d.ts +0 -12
  380. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  381. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  382. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  383. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  384. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  385. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  386. package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
  387. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
  388. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  389. package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
  390. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  391. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  392. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  393. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  394. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  395. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  396. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  397. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  398. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  399. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  400. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  401. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  402. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  403. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  404. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
  405. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
  406. package/dist/types/notifications/config.d.ts +0 -132
  407. package/src/harness-control-plane/rpc-adapter.ts +0 -290
  408. package/src/modes/bridge/auth.ts +0 -41
  409. package/src/modes/bridge/bridge-client-bridge.ts +0 -47
  410. package/src/modes/bridge/bridge-mode.ts +0 -675
  411. package/src/modes/bridge/bridge-ui-context.ts +0 -200
  412. package/src/modes/bridge/event-stream.ts +0 -70
  413. package/src/modes/rpc/host-tools.ts +0 -1
  414. package/src/modes/rpc/host-uris.ts +0 -1
  415. package/src/modes/rpc/rpc-client.ts +0 -1166
  416. package/src/modes/rpc/rpc-mode.ts +0 -1029
  417. package/src/modes/rpc/rpc-socket-security.ts +0 -115
  418. package/src/modes/rpc/rpc-types.ts +0 -637
  419. package/src/modes/shared/agent-wire/command-contract.ts +0 -18
  420. package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
  421. package/src/modes/shared/agent-wire/command-validation.ts +0 -181
  422. package/src/modes/shared/agent-wire/handshake.ts +0 -157
  423. package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
  424. package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
  425. package/src/modes/shared/agent-wire/protocol.ts +0 -46
  426. package/src/modes/shared/agent-wire/responses.ts +0 -17
  427. package/src/modes/shared/agent-wire/scopes.ts +0 -94
  428. package/src/modes/shared/agent-wire/session-registry.ts +0 -109
  429. package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
  430. package/src/modes/shared/agent-wire/ui-result.ts +0 -48
  431. package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
  432. package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
  433. package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
  434. package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
  435. package/src/notifications/config.ts +0 -219
  436. package/src/notifications/index.ts +0 -1835
  437. package/src/notifications/telegram-daemon-cli.ts +0 -243
  438. package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
  439. /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
  440. /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
  441. /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
  442. /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
  443. /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
  444. /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
  445. /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
  446. /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
  447. /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
  448. /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
  449. /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
  450. /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
  451. /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
  452. /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
  453. /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
  454. /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
  455. /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
  456. /package/src/{notifications → sdk/bus}/engine.ts +0 -0
  457. /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
  458. /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
  459. /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
  460. /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
  461. /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
  462. /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
  463. /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
  464. /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
  465. /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
@@ -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;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@gajae-code/coding-agent",
4
- "version": "0.10.2",
4
+ "version": "0.11.0",
5
5
  "description": "Gajae Code CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://gajae-code.com",
7
7
  "author": "Yeachan-Heo and Gajae Code Contributors",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "scripts": {
31
31
  "build": "bun scripts/build-binary.ts",
32
- "check": "biome check . && bun run check:types",
32
+ "check": "biome check . && bun run verify:sdk-canonicalization && bun run check:types",
33
33
  "check:types": "tsc -p tsconfig.json --noEmit",
34
34
  "lint": "biome lint .",
35
35
  "test": "bun test",
@@ -43,18 +43,21 @@
43
43
  "prepack": "bun scripts/generate-docs-index.ts",
44
44
  "generate-template": "bun scripts/generate-template.ts",
45
45
  "install:defaults": "bun src/cli.ts setup defaults",
46
- "verify:insane-vendor": "bun scripts/verify-insane-vendor.ts"
46
+ "verify:insane-vendor": "bun scripts/verify-insane-vendor.ts",
47
+ "verify:sdk-canonicalization": "bun scripts/verify-gjc-sdk-canonicalization.ts",
48
+ "check:sdk-closure": "bun scripts/generate-sdk-operation-inventory.ts --check && bun scripts/generate-sdk-adapter-parity-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/sdk-adapter-parity-v1.json && bun scripts/generate-telegram-baseline-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/telegram-baseline-v1.json && bun test test/sdk-downgrade-rollback.test.ts test/sdk-downgrade-unknown-version.test.ts && bun scripts/verify-gjc-sdk-canonicalization.ts --self-test && bun scripts/verify-gjc-sdk-canonicalization.ts && bun scripts/verify-gjc-sdk-rename.ts"
47
49
  },
48
50
  "dependencies": {
49
51
  "@agentclientprotocol/sdk": "1.2.1",
50
52
  "@babel/parser": "^7.29.3",
51
53
  "@mozilla/readability": "^0.6.0",
52
- "@gajae-code/stats": "0.10.2",
53
- "@gajae-code/agent-core": "0.10.2",
54
- "@gajae-code/ai": "0.10.2",
55
- "@gajae-code/natives": "0.10.2",
56
- "@gajae-code/tui": "0.10.2",
57
- "@gajae-code/utils": "0.10.2",
54
+ "@gajae-code/stats": "0.11.0",
55
+ "@gajae-code/agent-core": "0.11.0",
56
+ "@gajae-code/ai": "0.11.0",
57
+ "@gajae-code/bridge-client": "0.11.0",
58
+ "@gajae-code/natives": "0.11.0",
59
+ "@gajae-code/tui": "0.11.0",
60
+ "@gajae-code/utils": "0.11.0",
58
61
  "@puppeteer/browsers": "^2.13.0",
59
62
  "@types/turndown": "5.0.6",
60
63
  "@xterm/headless": "^6.0.0",
@@ -71,6 +74,9 @@
71
74
  "zod": "4.4.3"
72
75
  },
73
76
  "devDependencies": {
77
+ "@babel/traverse": "^7.29.0",
78
+ "@babel/types": "^7.29.0",
79
+ "@types/babel__traverse": "^7.28.0",
74
80
  "@types/bun": "^1.3.14",
75
81
  "@types/ws": "^8.5.13"
76
82
  },
@@ -115,6 +121,24 @@
115
121
  "./modes/components/runtime-mcp-add-wizard": null,
116
122
  "./modes/controllers/runtime-mcp-command-controller": null,
117
123
  "./slash-commands/helpers/mcp": null,
124
+ "./sdk": {
125
+ "types": "./dist/types/sdk/index.d.ts",
126
+ "import": "./src/sdk/index.ts"
127
+ },
128
+ "./sdk/models": null,
129
+ "./sdk/models.js": null,
130
+ "./sdk/lifecycle-session": null,
131
+ "./sdk/lifecycle-session.js": null,
132
+ "./sdk/startup-capability": null,
133
+ "./sdk/startup-capability.js": null,
134
+ "./sdk/bus": {
135
+ "types": "./dist/types/sdk/bus/index.d.ts",
136
+ "import": "./src/sdk/bus/index.ts"
137
+ },
138
+ "./sdk/bus/*": {
139
+ "types": "./dist/types/sdk/bus/*.d.ts",
140
+ "import": "./src/sdk/bus/*.ts"
141
+ },
118
142
  "./*": {
119
143
  "types": "./dist/types/*.d.ts",
120
144
  "import": "./src/*.ts"
@@ -395,6 +419,7 @@
395
419
  "types": "./dist/types/hindsight/*.d.ts",
396
420
  "import": "./src/hindsight/*.ts"
397
421
  },
422
+ "./modes/shared/agent-wire/*": null,
398
423
  "./modes": {
399
424
  "types": "./dist/types/modes/index.d.ts",
400
425
  "import": "./src/modes/index.ts"
@@ -439,10 +464,6 @@
439
464
  "types": "./dist/types/modes/controllers/*.d.ts",
440
465
  "import": "./src/modes/controllers/*.ts"
441
466
  },
442
- "./modes/rpc/*": {
443
- "types": "./dist/types/modes/rpc/*.d.ts",
444
- "import": "./src/modes/rpc/*.ts"
445
- },
446
467
  "./modes/theme/*": {
447
468
  "types": "./dist/types/modes/theme/*.d.ts",
448
469
  "import": "./src/modes/theme/*.ts"
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import * as fs from "node:fs/promises";
4
+ import * as os from "node:os";
5
+ import * as path from "node:path";
6
+
7
+ const packageDir = path.resolve(import.meta.dir, "..");
8
+ const packageName = "@gajae-code/coding-agent";
9
+ const aiPackageDir = path.resolve(packageDir, "../ai");
10
+ const bridgeClientPackageDir = path.resolve(packageDir, "../bridge-client");
11
+ const manifestsDir = path.join(packageDir, "test/manifests");
12
+ const baselinePath = path.join(manifestsDir, "sdk-public-surface-v1.json");
13
+ const generatedPath = path.join(manifestsDir, "sdk-public-surface.generated.json");
14
+
15
+ type Surface = { root: string[]; sdk: string[] };
16
+
17
+ function run(command: string[], cwd: string): string {
18
+ const result = Bun.spawnSync(command, { cwd, stdout: "pipe", stderr: "pipe" });
19
+ if (result.exitCode !== 0) {
20
+ throw new Error(`${command.join(" ")} failed:\n${new TextDecoder().decode(result.stderr)}`);
21
+ }
22
+ return new TextDecoder().decode(result.stdout).trim();
23
+ }
24
+
25
+ function assertExport(module: Record<string, unknown>, name: string, subpath: string): void {
26
+ if (!(name in module)) throw new Error(`${subpath} does not export ${name}`);
27
+ }
28
+
29
+ async function runSmoke(): Promise<Surface> {
30
+ const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "gjc-sdk-package-smoke-"));
31
+ try {
32
+ const aiTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], aiPackageDir);
33
+ const bridgeClientTarball = run(
34
+ ["bun", "pm", "pack", "--destination", tempDir, "--quiet"],
35
+ bridgeClientPackageDir,
36
+ );
37
+ const codingAgentTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], packageDir);
38
+ const aiTarballPath = path.isAbsolute(aiTarball) ? aiTarball : path.join(aiPackageDir, aiTarball);
39
+ const bridgeClientTarballPath = path.isAbsolute(bridgeClientTarball)
40
+ ? bridgeClientTarball
41
+ : path.join(bridgeClientPackageDir, bridgeClientTarball);
42
+ const codingAgentTarballPath = path.isAbsolute(codingAgentTarball)
43
+ ? codingAgentTarball
44
+ : path.join(packageDir, codingAgentTarball);
45
+ await fs.writeFile(
46
+ path.join(tempDir, "package.json"),
47
+ JSON.stringify(
48
+ {
49
+ name: "sdk-smoke",
50
+ private: true,
51
+ dependencies: {
52
+ "@gajae-code/ai": `file:${aiTarballPath}`,
53
+ "@gajae-code/bridge-client": `file:${bridgeClientTarballPath}`,
54
+ [packageName]: `file:${codingAgentTarballPath}`,
55
+ },
56
+ overrides: {
57
+ "@gajae-code/ai": `file:${aiTarballPath}`,
58
+ "@gajae-code/bridge-client": `file:${bridgeClientTarballPath}`,
59
+ },
60
+ },
61
+ null,
62
+ 2,
63
+ ),
64
+ );
65
+ // Install the matching packed workspace artifacts so the smoke test exercises the
66
+ // release dependency boundary without falling back to an older registry package.
67
+ run(["bun", "install", "--ignore-scripts"], tempDir);
68
+ const probePath = path.join(tempDir, "probe.ts");
69
+ await fs.writeFile(
70
+ probePath,
71
+ `import * as root from ${JSON.stringify(packageName)};\nimport * as sdk from ${JSON.stringify(`${packageName}/sdk`)};\nimport * as bus from ${JSON.stringify(`${packageName}/sdk/bus`)};\nimport * as bridgeClient from "@gajae-code/bridge-client";\nconst required = [[root, "createAgentSession", "root"], [sdk, "createAgentSession", "sdk"], [bus, "createNotificationsExtension", "sdk/bus"], [sdk, "SdkClient", "sdk"], [bridgeClient, "SdkClient", "bridge-client"]] as const;\nfor (const [module, name, subpath] of required) if (!(name in module)) throw new Error(subpath + " missing " + name);\nif (sdk.SdkClient !== bridgeClient.SdkClient) throw new Error("SdkClient class identity differs between sdk and bridge-client");\nprocess.stdout.write(JSON.stringify({ root: Object.keys(root).sort(), sdk: Object.keys(sdk).sort() }));\n`,
72
+ );
73
+ const surface = JSON.parse(run(["bun", "run", probePath], tempDir)) as Surface;
74
+ assertExport(Object.fromEntries(surface.root.map(name => [name, true])), "createAgentSession", "root");
75
+ assertExport(Object.fromEntries(surface.sdk.map(name => [name, true])), "SdkClient", "sdk");
76
+ return { root: [...surface.root].sort(), sdk: [...surface.sdk].sort() };
77
+ } finally {
78
+ await fs.rm(tempDir, { recursive: true, force: true });
79
+ }
80
+ }
81
+
82
+ async function main(): Promise<void> {
83
+ const surface = await runSmoke();
84
+ await fs.mkdir(manifestsDir, { recursive: true });
85
+ await fs.writeFile(generatedPath, `${JSON.stringify(surface, null, 2)}\n`);
86
+ const baseline = JSON.parse(await Bun.file(baselinePath).text()) as Surface;
87
+ const removals = (Object.keys(baseline) as Array<keyof Surface>).flatMap(area =>
88
+ baseline[area].filter(name => !surface[area].includes(name)).map(name => `${area}.${name}`),
89
+ );
90
+ if (removals.length > 0) throw new Error(`SDK public surface removals are not allowed:\n${removals.join("\n")}`);
91
+ process.stdout.write(`SDK package smoke passed (root: ${surface.root.length}, sdk: ${surface.sdk.length}).\n`);
92
+ }
93
+
94
+ await main();