@gajae-code/coding-agent 0.10.1 → 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 (474) hide show
  1. package/CHANGELOG.md +70 -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/gajae-pet-widget.d.ts +1 -0
  54. package/dist/types/modes/components/model-selector.d.ts +1 -0
  55. package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
  56. package/dist/types/modes/components/pet-capability.d.ts +37 -0
  57. package/dist/types/modes/components/pet-selector.d.ts +1 -1
  58. package/dist/types/modes/components/settings-selector.d.ts +15 -4
  59. package/dist/types/modes/components/welcome.d.ts +1 -1
  60. package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
  61. package/dist/types/modes/index.d.ts +0 -4
  62. package/dist/types/modes/interactive-mode.d.ts +5 -1
  63. package/dist/types/modes/runtime-init.d.ts +2 -2
  64. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
  65. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
  66. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
  67. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
  68. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
  69. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +169 -30
  70. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
  71. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
  72. package/dist/types/modes/types.d.ts +16 -1
  73. package/dist/types/runtime-mcp/client.d.ts +2 -0
  74. package/dist/types/runtime-mcp/config.d.ts +5 -1
  75. package/dist/types/runtime-mcp/manager.d.ts +8 -1
  76. package/dist/types/runtime-mcp/types.d.ts +4 -0
  77. package/dist/types/sdk/acp/adapter.d.ts +67 -0
  78. package/dist/types/sdk/acp/index.d.ts +2 -0
  79. package/dist/types/sdk/broker/broker.d.ts +53 -0
  80. package/dist/types/sdk/broker/discovery.d.ts +30 -0
  81. package/dist/types/sdk/broker/ensure.d.ts +33 -0
  82. package/dist/types/sdk/broker/identity.d.ts +3 -0
  83. package/dist/types/sdk/broker/index.d.ts +8 -0
  84. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
  85. package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
  86. package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
  87. package/dist/types/sdk/broker/runtime.d.ts +33 -0
  88. package/dist/types/sdk/broker/session-index.d.ts +57 -0
  89. package/dist/types/sdk/broker/state-version.d.ts +8 -0
  90. package/dist/types/sdk/broker/transport.d.ts +9 -0
  91. package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
  92. package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
  93. package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
  94. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
  95. package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
  96. package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
  97. package/dist/types/sdk/bus/config.d.ts +274 -0
  98. package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
  99. package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
  100. package/dist/types/sdk/bus/discord-daemon.d.ts +45 -0
  101. package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
  102. package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
  103. package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
  104. package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
  105. package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
  106. package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
  107. package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
  108. package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
  109. package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
  110. package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
  111. package/dist/types/sdk/bus/session-control.d.ts +83 -0
  112. package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
  113. package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
  114. package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
  115. package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
  116. package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
  117. package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
  118. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
  119. package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
  120. package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +55 -17
  121. package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
  122. package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
  123. package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
  124. package/dist/types/sdk/cli/index.d.ts +1 -0
  125. package/dist/types/sdk/cli/session-cli.d.ts +19 -0
  126. package/dist/types/sdk/client/client.d.ts +1 -0
  127. package/dist/types/sdk/client/discovery.d.ts +27 -0
  128. package/dist/types/sdk/client/index.d.ts +2 -0
  129. package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
  130. package/dist/types/sdk/host/control/index.d.ts +2 -0
  131. package/dist/types/sdk/host/control/operations.d.ts +65 -0
  132. package/dist/types/sdk/host/events.d.ts +35 -0
  133. package/dist/types/sdk/host/host.d.ts +35 -0
  134. package/dist/types/sdk/host/index.d.ts +4 -0
  135. package/dist/types/sdk/host/query/cursor.d.ts +62 -0
  136. package/dist/types/sdk/host/query/handlers.d.ts +70 -0
  137. package/dist/types/sdk/host/query/index.d.ts +3 -0
  138. package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
  139. package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
  140. package/dist/types/sdk/host/types.d.ts +32 -0
  141. package/dist/types/sdk/index.d.ts +6 -0
  142. package/dist/types/sdk/lifecycle-session.d.ts +14 -0
  143. package/dist/types/sdk/mcp/index.d.ts +1 -0
  144. package/dist/types/sdk/mcp/server.d.ts +37 -0
  145. package/dist/types/sdk/models.d.ts +44 -0
  146. package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
  147. package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
  148. package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
  149. package/dist/types/sdk/startup-capability.d.ts +50 -0
  150. package/dist/types/session/agent-session.d.ts +114 -21
  151. package/dist/types/session/default-model-selection.d.ts +25 -0
  152. package/dist/types/session/fallback-chain-controller.d.ts +52 -0
  153. package/dist/types/session/session-manager.d.ts +58 -1
  154. package/dist/types/setup/credential-auto-import.d.ts +36 -6
  155. package/dist/types/tools/ask-answer-registry.d.ts +1 -1
  156. package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
  157. package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
  158. package/dist/types/tools/browser/launch.d.ts +22 -0
  159. package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
  160. package/dist/types/tools/browser/profile-posture.d.ts +37 -0
  161. package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
  162. package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
  163. package/dist/types/tools/browser/registry.d.ts +19 -0
  164. package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
  165. package/dist/types/tools/index.d.ts +8 -8
  166. package/package.json +34 -13
  167. package/scripts/build-sdk-package-smoke.ts +94 -0
  168. package/scripts/capture-notifications-settings-showcase.ts +435 -0
  169. package/scripts/compile-args.ts +4 -2
  170. package/scripts/g005-daemon-smoke.ts +4 -5
  171. package/scripts/g011-daemon-path-smoke.ts +5 -5
  172. package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
  173. package/scripts/generate-sdk-operation-inventory.ts +867 -0
  174. package/scripts/generate-telegram-baseline-manifest.ts +128 -0
  175. package/scripts/manifest-schema.ts +124 -0
  176. package/scripts/run-test-manifest.ts +153 -0
  177. package/scripts/run-threat-model-check.ts +157 -0
  178. package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
  179. package/scripts/verify-gjc-sdk-rename.ts +90 -0
  180. package/src/append-only-mode.ts +1 -1
  181. package/src/cli/args.ts +43 -12
  182. package/src/cli/auth-gateway-cli.ts +2 -2
  183. package/src/cli/config-cli.ts +2 -1
  184. package/src/cli/daemon-cli.ts +63 -14
  185. package/src/cli/list-models.ts +1 -1
  186. package/src/cli/notify-cli.ts +288 -286
  187. package/src/cli.ts +21 -2
  188. package/src/commands/daemon.ts +50 -6
  189. package/src/commands/harness.ts +93 -36
  190. package/src/commands/launch.ts +5 -2
  191. package/src/commands/mcp-serve.ts +19 -12
  192. package/src/commands/notify.ts +36 -3
  193. package/src/commands/sdk.ts +426 -0
  194. package/src/commit/agentic/agent.ts +1 -0
  195. package/src/config/atomic-yaml-patch.ts +423 -0
  196. package/src/config/model-profile-activation.ts +240 -89
  197. package/src/config/model-profiles.ts +37 -34
  198. package/src/config/model-registry.ts +51 -26
  199. package/src/config/model-resolver.ts +138 -51
  200. package/src/config/model-selector-value.ts +50 -0
  201. package/src/config/models-config-schema.ts +14 -21
  202. package/src/config/settings-schema.ts +128 -10
  203. package/src/config/settings.ts +1120 -158
  204. package/src/coordinator-mcp/model-preset.ts +74 -20
  205. package/src/coordinator-mcp/server.ts +1597 -3052
  206. package/src/daemon/builtin.ts +8 -5
  207. package/src/daemon/control-types.ts +1 -1
  208. package/src/defaults/gjc/skills/team/SKILL.md +4 -4
  209. package/src/discovery/mcp-json.ts +327 -20
  210. package/src/extensibility/custom-tools/types.ts +1 -1
  211. package/src/extensibility/extensions/compact-handler.ts +3 -3
  212. package/src/extensibility/extensions/get-commands-handler.ts +2 -2
  213. package/src/extensibility/extensions/loader.ts +69 -5
  214. package/src/extensibility/extensions/runner.ts +112 -4
  215. package/src/extensibility/extensions/types.ts +176 -17
  216. package/src/extensibility/hooks/types.ts +1 -1
  217. package/src/extensibility/slash-commands.ts +3 -3
  218. package/src/gjc-runtime/launch-tmux.ts +170 -86
  219. package/src/gjc-runtime/psmux-detect.ts +82 -4
  220. package/src/gjc-runtime/session-state-sidecar.ts +41 -31
  221. package/src/gjc-runtime/team-runtime.ts +54 -35
  222. package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
  223. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -2
  224. package/src/gjc-runtime/tmux-sessions.ts +19 -13
  225. package/src/gjc-runtime/ultragoal-guard.ts +53 -6
  226. package/src/gjc-runtime/ultragoal-runtime.ts +155 -3
  227. package/src/gjc-runtime/windows-powershell-command.ts +58 -0
  228. package/src/harness-control-plane/operate.ts +9 -9
  229. package/src/harness-control-plane/owner.ts +283 -39
  230. package/src/harness-control-plane/receipts.ts +0 -1
  231. package/src/harness-control-plane/sdk-transport.ts +395 -0
  232. package/src/harness-control-plane/session-transport.ts +94 -0
  233. package/src/harness-control-plane/types.ts +1 -1
  234. package/src/internal-urls/docs-index.generated.ts +36 -37
  235. package/src/lsp/client.ts +42 -6
  236. package/src/lsp/index.ts +2 -2
  237. package/src/main.ts +299 -204
  238. package/src/modes/DESIGN.md +258 -0
  239. package/src/modes/acp/acp-agent.ts +1228 -2612
  240. package/src/modes/acp/acp-client-bridge.ts +2 -20
  241. package/src/modes/acp/acp-event-mapper.ts +18 -2
  242. package/src/modes/acp/acp-mode.ts +8 -36
  243. package/src/modes/acp/permission-mode.ts +25 -0
  244. package/src/modes/acp/startup-options.ts +6 -0
  245. package/src/modes/components/agent-dashboard.ts +37 -17
  246. package/src/modes/components/custom-editor.ts +1 -0
  247. package/src/modes/components/gajae-pet-widget.ts +169 -20
  248. package/src/modes/components/model-selector.ts +93 -35
  249. package/src/modes/components/notifications-settings-editor.ts +1379 -0
  250. package/src/modes/components/pet-capability.ts +115 -0
  251. package/src/modes/components/pet-selector.ts +4 -6
  252. package/src/modes/components/settings-selector.ts +86 -11
  253. package/src/modes/components/welcome.ts +4 -4
  254. package/src/modes/controllers/command-controller.ts +1 -2
  255. package/src/modes/controllers/event-controller.ts +11 -16
  256. package/src/modes/controllers/extension-ui-controller.ts +357 -12
  257. package/src/modes/controllers/input-controller.ts +43 -13
  258. package/src/modes/controllers/selector-controller.ts +671 -44
  259. package/src/modes/index.ts +0 -22
  260. package/src/modes/interactive-mode.ts +108 -24
  261. package/src/modes/runtime-init.ts +298 -6
  262. package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
  263. package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
  264. package/src/modes/shared/agent-wire/event-contract.ts +7 -8
  265. package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
  266. package/src/modes/shared/agent-wire/event-observation.ts +16 -7
  267. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1254 -87
  268. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
  269. package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
  270. package/src/modes/types.ts +16 -1
  271. package/src/runtime-mcp/client.ts +94 -19
  272. package/src/runtime-mcp/config.ts +27 -15
  273. package/src/runtime-mcp/manager.ts +343 -105
  274. package/src/runtime-mcp/oauth-flow.ts +42 -12
  275. package/src/runtime-mcp/transports/http.ts +49 -19
  276. package/src/runtime-mcp/transports/stdio.ts +47 -28
  277. package/src/runtime-mcp/types.ts +10 -0
  278. package/src/sdk/acp/adapter.ts +418 -0
  279. package/src/sdk/acp/index.ts +2 -0
  280. package/src/sdk/broker/broker.ts +642 -0
  281. package/src/sdk/broker/discovery.ts +94 -0
  282. package/src/sdk/broker/ensure.ts +249 -0
  283. package/src/sdk/broker/identity.ts +42 -0
  284. package/src/sdk/broker/index.ts +8 -0
  285. package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
  286. package/src/sdk/broker/internal-source.bunfig.toml +1 -0
  287. package/src/sdk/broker/lifecycle-ledger.ts +286 -0
  288. package/src/sdk/broker/lifecycle.ts +2157 -0
  289. package/src/sdk/broker/process-incarnation.ts +159 -0
  290. package/src/sdk/broker/runtime.ts +164 -0
  291. package/src/sdk/broker/session-index.ts +318 -0
  292. package/src/sdk/broker/state-version.ts +23 -0
  293. package/src/sdk/broker/transport.ts +125 -0
  294. package/src/sdk/bus/chat-command-policy.ts +107 -0
  295. package/src/sdk/bus/chat-daemon-cli.ts +214 -0
  296. package/src/sdk/bus/chat-daemon-control.ts +713 -0
  297. package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
  298. package/src/sdk/bus/chat-effect-journal.ts +353 -0
  299. package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
  300. package/src/sdk/bus/config.ts +433 -0
  301. package/src/sdk/bus/conversation-store.ts +391 -0
  302. package/src/sdk/bus/discord-conversation.ts +85 -0
  303. package/src/sdk/bus/discord-daemon.ts +2275 -0
  304. package/src/sdk/bus/discord-live-provider.ts +521 -0
  305. package/src/sdk/bus/discord-provider.ts +56 -0
  306. package/src/{notifications → sdk/bus}/html-format.ts +2 -2
  307. package/src/sdk/bus/index.ts +3943 -0
  308. package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
  309. package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
  310. package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
  311. package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
  312. package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
  313. package/src/sdk/bus/natives-augment.d.ts +38 -0
  314. package/src/sdk/bus/notification-orchestration.ts +535 -0
  315. package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
  316. package/src/sdk/bus/session-control.ts +333 -0
  317. package/src/sdk/bus/slack-conversation.ts +74 -0
  318. package/src/sdk/bus/slack-daemon.ts +2144 -0
  319. package/src/sdk/bus/slack-live-provider.ts +380 -0
  320. package/src/sdk/bus/slack-provider.ts +76 -0
  321. package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
  322. package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
  323. package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
  324. package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
  325. package/src/{notifications → sdk/bus}/telegram-daemon.ts +502 -54
  326. package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
  327. package/src/sdk/bus/telegram-setup.ts +663 -0
  328. package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
  329. package/src/sdk/cli/index.ts +1 -0
  330. package/src/sdk/cli/session-cli.ts +275 -0
  331. package/src/sdk/client/client.ts +1 -0
  332. package/src/sdk/client/discovery.ts +108 -0
  333. package/src/sdk/client/index.ts +2 -0
  334. package/src/sdk/host/control/dispatch.ts +367 -0
  335. package/src/sdk/host/control/index.ts +10 -0
  336. package/src/sdk/host/control/operations.ts +63 -0
  337. package/src/sdk/host/events.ts +91 -0
  338. package/src/sdk/host/host.ts +296 -0
  339. package/src/sdk/host/index.ts +4 -0
  340. package/src/sdk/host/query/cursor.ts +189 -0
  341. package/src/sdk/host/query/handlers.ts +533 -0
  342. package/src/sdk/host/query/index.ts +3 -0
  343. package/src/sdk/host/query/revision-store.ts +1126 -0
  344. package/src/sdk/host/reverse-leases.ts +325 -0
  345. package/src/sdk/host/types.ts +29 -0
  346. package/src/sdk/index.ts +13 -0
  347. package/src/sdk/lifecycle-session.ts +39 -0
  348. package/src/sdk/mcp/index.ts +1 -0
  349. package/src/sdk/mcp/server.ts +332 -0
  350. package/src/sdk/models.ts +168 -0
  351. package/src/sdk/protocol/adapter-validation.ts +48 -0
  352. package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
  353. package/src/sdk/protocol/operation-registry.ts +312 -0
  354. package/src/{sdk.ts → sdk/session.ts} +339 -212
  355. package/src/sdk/startup-capability.ts +189 -0
  356. package/src/session/agent-session.ts +2470 -866
  357. package/src/session/default-model-selection.ts +93 -0
  358. package/src/session/fallback-chain-controller.ts +136 -0
  359. package/src/session/session-manager.ts +447 -13
  360. package/src/session/session-storage.ts +8 -1
  361. package/src/setup/credential-auto-import.ts +290 -35
  362. package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
  363. package/src/slash-commands/builtin-registry.ts +33 -30
  364. package/src/task/executor.ts +62 -13
  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/telegram-send.ts +2 -2
  384. package/vendor/insane-search/MANIFEST.json +2 -1
  385. package/vendor/insane-search/engine/bias_check.py +4 -1
  386. package/vendor/insane-search/engine/phase0.py +26 -1
  387. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  388. package/dist/types/modes/bridge/auth.d.ts +0 -12
  389. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  390. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  391. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  392. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  393. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  394. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  395. package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
  396. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
  397. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  398. package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
  399. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  400. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  401. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  402. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  403. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  404. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  405. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  406. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  407. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  408. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  409. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  410. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  411. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  412. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  413. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
  414. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
  415. package/dist/types/notifications/config.d.ts +0 -132
  416. package/src/harness-control-plane/rpc-adapter.ts +0 -290
  417. package/src/modes/bridge/auth.ts +0 -41
  418. package/src/modes/bridge/bridge-client-bridge.ts +0 -47
  419. package/src/modes/bridge/bridge-mode.ts +0 -675
  420. package/src/modes/bridge/bridge-ui-context.ts +0 -200
  421. package/src/modes/bridge/event-stream.ts +0 -70
  422. package/src/modes/rpc/host-tools.ts +0 -1
  423. package/src/modes/rpc/host-uris.ts +0 -1
  424. package/src/modes/rpc/rpc-client.ts +0 -1166
  425. package/src/modes/rpc/rpc-mode.ts +0 -1029
  426. package/src/modes/rpc/rpc-socket-security.ts +0 -115
  427. package/src/modes/rpc/rpc-types.ts +0 -637
  428. package/src/modes/shared/agent-wire/command-contract.ts +0 -18
  429. package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
  430. package/src/modes/shared/agent-wire/command-validation.ts +0 -181
  431. package/src/modes/shared/agent-wire/handshake.ts +0 -157
  432. package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
  433. package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
  434. package/src/modes/shared/agent-wire/protocol.ts +0 -46
  435. package/src/modes/shared/agent-wire/responses.ts +0 -17
  436. package/src/modes/shared/agent-wire/scopes.ts +0 -94
  437. package/src/modes/shared/agent-wire/session-registry.ts +0 -109
  438. package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
  439. package/src/modes/shared/agent-wire/ui-result.ts +0 -48
  440. package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
  441. package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
  442. package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
  443. package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
  444. package/src/notifications/config.ts +0 -219
  445. package/src/notifications/index.ts +0 -1835
  446. package/src/notifications/telegram-daemon-cli.ts +0 -243
  447. package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
  448. /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
  449. /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
  450. /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
  451. /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
  452. /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
  453. /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
  454. /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
  455. /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
  456. /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
  457. /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
  458. /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
  459. /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
  460. /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
  461. /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
  462. /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
  463. /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
  464. /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
  465. /package/src/{notifications → sdk/bus}/engine.ts +0 -0
  466. /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
  467. /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
  468. /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
  469. /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
  470. /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
  471. /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
  472. /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
  473. /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
  474. /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import * as path from "node:path";
4
+
5
+ const repoRoot = process.env.GJC_SDK_RENAME_SCAN_ROOT
6
+ ? path.resolve(process.env.GJC_SDK_RENAME_SCAN_ROOT)
7
+ : path.resolve(import.meta.dir, "..", "..", "..");
8
+ const scannerPath = "packages/coding-agent/scripts/verify-gjc-sdk-rename.ts";
9
+ const pinnedRollbackFixturePaths = new Set([
10
+ "packages/coding-agent/test/manifests/sdk-pretrain-binary.json",
11
+ "packages/coding-agent/test/sdk-downgrade-rollback.test.ts",
12
+ "scripts/transform-sdk-state-for-rollback.ts",
13
+ ]);
14
+ const forbidden = [
15
+ { label: "gjc-notifications", pattern: /\bgjc-notifications\b/i },
16
+ { label: "gjc_notifications", pattern: /\bgjc_notifications\b/ },
17
+ { label: "@gajae-code/notifications", pattern: /@gajae-code[/_-]notifications\b/i },
18
+ { label: "notifications SDK", pattern: /\bnotifications[\s_-]+sdk\b/i },
19
+ { label: "src/notifications/", pattern: /\bsrc[/\\]notifications(?:[/\\]|\b)/i },
20
+ { label: "state/notifications", pattern: /\bstate[/\\]notifications(?:[/\\]|\b)/i },
21
+ { label: "src/sdk.ts", pattern: /\bsrc[/\\]sdk\.ts\b/i },
22
+ ];
23
+
24
+ function isAllowed(file: string): boolean {
25
+ return (
26
+ file.startsWith("artifacts/") ||
27
+ file === "REPORT.md" ||
28
+ path.basename(file).toLowerCase() === "changelog.md" ||
29
+ pinnedRollbackFixturePaths.has(file)
30
+ );
31
+ }
32
+
33
+ const filesResult = Bun.spawnSync(["git", "ls-files", "-z", "--cached", "--others", "--exclude-standard"], {
34
+ cwd: repoRoot,
35
+ stdout: "pipe",
36
+ stderr: "pipe",
37
+ });
38
+ if (filesResult.exitCode !== 0) {
39
+ process.stderr.write(`Unable to list repository files: ${new TextDecoder().decode(filesResult.stderr)}\n`);
40
+ process.exit(2);
41
+ }
42
+
43
+ // Files deleted in the working tree (e.g. staged/unstaged deletions mid-rename)
44
+ // are excluded explicitly: they have no content to scan and must not abort the gate.
45
+ const deletedResult = Bun.spawnSync(["git", "ls-files", "-z", "--deleted"], {
46
+ cwd: repoRoot,
47
+ stdout: "pipe",
48
+ stderr: "pipe",
49
+ });
50
+ if (deletedResult.exitCode !== 0) {
51
+ process.stderr.write(`Unable to list deleted files: ${new TextDecoder().decode(deletedResult.stderr)}\n`);
52
+ process.exit(2);
53
+ }
54
+ const deleted = new Set(new TextDecoder().decode(deletedResult.stdout).split("\0").filter(Boolean));
55
+
56
+ const files = new TextDecoder()
57
+ .decode(filesResult.stdout)
58
+ .split("\0")
59
+ .filter(file => file.length > 0 && !deleted.has(file));
60
+ const violations: string[] = [];
61
+ for (const file of files) {
62
+ if (file === scannerPath || isAllowed(file)) continue;
63
+ for (const { label, pattern } of forbidden) {
64
+ if (pattern.test(file)) violations.push(`${file}: forbidden filename ${JSON.stringify(label)}`);
65
+ }
66
+
67
+ const filePath = path.join(repoRoot, file);
68
+ let contents: string;
69
+ try {
70
+ contents = await Bun.file(filePath).text();
71
+ } catch (error) {
72
+ process.stderr.write(
73
+ `Unable to scan tracked file ${file}: ${error instanceof Error ? error.message : String(error)}\n`,
74
+ );
75
+ process.exit(2);
76
+ }
77
+
78
+ for (const [index, line] of contents.split(/\r?\n/).entries()) {
79
+ for (const { label, pattern } of forbidden) {
80
+ if (pattern.test(line)) violations.push(`${file}:${index + 1}: forbidden ${JSON.stringify(label)}`);
81
+ }
82
+ }
83
+ }
84
+
85
+ if (violations.length > 0) {
86
+ process.stderr.write(`Forbidden pre-rename SDK references found:\n${violations.join("\n")}\n`);
87
+ process.exit(1);
88
+ }
89
+
90
+ process.stdout.write("GJC SDK rename verification passed.\n");
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Single source of truth for append-only context-mode resolution and manager
3
- * construction. Both the initial session build (`sdk.ts`) and the runtime
3
+ * construction. Both the initial session build (`sdk/session.ts`) and the runtime
4
4
  * model/setting-change path (`agent-session.ts`), plus the status UI, resolve
5
5
  * through here so the auto allowlist and prefix-reset diagnostics never drift.
6
6
  */
package/src/cli/args.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * CLI argument parsing and help display
3
3
  */
4
+ import * as path from "node:path";
4
5
  import { type Effort, THINKING_EFFORTS } from "@gajae-code/ai";
5
6
  import { APP_NAME, CONFIG_DIR_NAME, logger } from "@gajae-code/utils";
6
7
  import { CliParseError } from "@gajae-code/utils/cli";
@@ -8,7 +9,7 @@ import chalk from "chalk";
8
9
  import { parseEffort } from "../thinking";
9
10
  import { BUILTIN_TOOLS } from "../tools";
10
11
 
11
- export type Mode = "text" | "json" | "rpc" | "acp" | "rpc-ui" | "bridge";
12
+ export type Mode = "text" | "json" | "acp";
12
13
 
13
14
  export interface Args {
14
15
  cwd?: string;
@@ -24,6 +25,7 @@ export interface Args {
24
25
  credential?: string;
25
26
  systemPrompt?: string;
26
27
  appendSystemPrompt?: string;
28
+ mcpConfig?: string;
27
29
  thinking?: Effort;
28
30
  continue?: boolean;
29
31
  resume?: string | true;
@@ -32,7 +34,6 @@ export interface Args {
32
34
  mode?: Mode;
33
35
  noSession?: boolean;
34
36
  sessionDir?: string;
35
- rpcListen?: string;
36
37
  providerSessionId?: string;
37
38
  fork?: string;
38
39
  models?: string[];
@@ -58,6 +59,8 @@ export interface Args {
58
59
  fileArgs: string[];
59
60
  /** Retained for test/runtime compatibility; extension-defined flags are no longer parsed. */
60
61
  unknownFlags: Map<string, boolean | string>;
62
+ /** Exact interactive startup login intent, recognized before model-profile activation. */
63
+ authBootstrap?: true;
61
64
  }
62
65
 
63
66
  function isStartupSlashCommandArg(arg: string | undefined): boolean {
@@ -69,6 +72,13 @@ function isStartupSlashCommandArg(arg: string | undefined): boolean {
69
72
  );
70
73
  }
71
74
 
75
+ function isStartupLoginCommandArg(args: readonly string[], index: number): boolean {
76
+ const command = args[index];
77
+ if (command !== "/login" && command !== "login") return false;
78
+ const argumentCount = args.length - index - 1;
79
+ return argumentCount === 0 || (argumentCount === 1 && !args[index + 1].startsWith("-"));
80
+ }
81
+
72
82
  export function parseArgs(args: string[]): Args {
73
83
  const result: Args = {
74
84
  messages: [],
@@ -79,6 +89,12 @@ export function parseArgs(args: string[]): Args {
79
89
  for (let i = 0; i < args.length; i++) {
80
90
  let arg = args[i];
81
91
 
92
+ if (isStartupLoginCommandArg(args, i)) {
93
+ result.authBootstrap = true;
94
+ const loginCommand = arg === "login" ? "/login" : arg;
95
+ result.messages.push([loginCommand, ...args.slice(i + 1)].join(" "));
96
+ break;
97
+ }
82
98
  if (isStartupSlashCommandArg(arg)) {
83
99
  result.messages.push(args.slice(i).join(" "));
84
100
  break;
@@ -101,15 +117,15 @@ export function parseArgs(args: string[]): Args {
101
117
  result.allowHome = true;
102
118
  } else if (arg === "--mode" && i + 1 < args.length) {
103
119
  const mode = args[++i];
104
- if (
105
- mode === "text" ||
106
- mode === "json" ||
107
- mode === "rpc" ||
108
- mode === "acp" ||
109
- mode === "rpc-ui" ||
110
- mode === "bridge"
111
- ) {
120
+ if (mode === "text" || mode === "json" || mode === "acp") {
112
121
  result.mode = mode;
122
+ } else {
123
+ const removed = mode === "rpc" || mode === "rpc-ui" || mode === "bridge";
124
+ throw new CliParseError(
125
+ removed
126
+ ? `--mode ${mode} was removed; external control now uses the Gajae-Code SDK (docs/sdk.md)`
127
+ : `invalid --mode value: ${mode} (expected text, json, or acp)`,
128
+ );
113
129
  }
114
130
  } else if (arg === "--continue" || arg === "-c") {
115
131
  result.continue = true;
@@ -148,14 +164,21 @@ export function parseArgs(args: string[]): Args {
148
164
  result.systemPrompt = args[++i];
149
165
  } else if (arg === "--append-system-prompt" && i + 1 < args.length) {
150
166
  result.appendSystemPrompt = args[++i];
167
+ } else if (arg === "--mcp-config") {
168
+ if (result.mcpConfig !== undefined) {
169
+ throw new CliParseError("--mcp-config can only be specified once");
170
+ }
171
+ const next = args[i + 1];
172
+ if (!next || next.startsWith("-") || !path.isAbsolute(next)) {
173
+ throw new CliParseError("--mcp-config requires <absolute-path>");
174
+ }
175
+ result.mcpConfig = args[++i];
151
176
  } else if (arg === "--provider-session-id" && i + 1 < args.length) {
152
177
  result.providerSessionId = args[++i];
153
178
  } else if (arg === "--no-session") {
154
179
  result.noSession = true;
155
180
  } else if (arg === "--session-dir" && i + 1 < args.length) {
156
181
  result.sessionDir = args[++i];
157
- } else if (arg === "--listen" && i + 1 < args.length) {
158
- result.rpcListen = args[++i];
159
182
  } else if (arg === "--models" && i + 1 < args.length) {
160
183
  result.models = args[++i].split(",").map(s => s.trim());
161
184
  } else if (arg === "--no-tools") {
@@ -219,6 +242,14 @@ export function parseArgs(args: string[]): Args {
219
242
  if (result.default && !result.mpreset) {
220
243
  throw new Error("--default requires --mpreset <name>");
221
244
  }
245
+ if (
246
+ result.mcpConfig !== undefined &&
247
+ (result.mode === "acp" || result.listModels !== undefined || result.export !== undefined)
248
+ ) {
249
+ throw new CliParseError(
250
+ "--mcp-config is only supported in standalone interactive, tmux, print, text, or json modes.",
251
+ );
252
+ }
222
253
 
223
254
  return result;
224
255
  }
@@ -2,7 +2,7 @@
2
2
  * `gjc auth-gateway` command handlers.
3
3
  *
4
4
  * Boots a forward-proxy server that lets less-trusted clients (the macOS
5
- * usage widget, robogjc containers, …) make provider API calls without ever
5
+ * usage widget and containerized deployments) make provider API calls without ever
6
6
  * seeing the access token. The gateway is itself a broker client and
7
7
  * resolves credentials through the configured broker (via the same
8
8
  * `GJC_AUTH_BROKER_URL` / `auth.broker.url` precedence used elsewhere).
@@ -139,7 +139,7 @@ async function runServe(flags: AuthGatewayCommandArgs["flags"]): Promise<void> {
139
139
  const gatewayToken = flags.noAuth ? null : await ensureToken();
140
140
 
141
141
  // Build a broker-backed AuthStorage — same pattern as discoverAuthStorage()
142
- // in sdk.ts. The gateway never touches local SQLite.
142
+ // in sdk/session.ts. The gateway never touches local SQLite.
143
143
  const client = createBrokerClient(brokerConfig);
144
144
  const initialSnapshot = await fetchBrokerSnapshot(client);
145
145
  const store = new RemoteAuthCredentialStore({ client, initialSnapshot });
@@ -429,7 +429,8 @@ async function handleReset(key: string | undefined, flags: { json?: boolean }):
429
429
 
430
430
  const path = def.path as SettingPath;
431
431
  const defaultValue = getDefault(path);
432
- settings.set(path, defaultValue as SettingValue<typeof path>);
432
+ if (defaultValue === undefined) settings.unset(path);
433
+ else settings.set(path, defaultValue as SettingValue<typeof path>);
433
434
 
434
435
  if (flags.json) {
435
436
  console.log(JSON.stringify({ key: def.path, value: defaultValue }));
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { Settings } from "../config/settings";
9
- import { selectDaemonControllers } from "../daemon/builtin";
9
+ import { BUILT_IN_DAEMON_KINDS, selectDaemonControllers } from "../daemon/builtin";
10
10
  import type {
11
11
  BuiltInDaemonController,
12
12
  DaemonKind,
@@ -20,11 +20,28 @@ import {
20
20
  formatDaemonStatus,
21
21
  resolveDaemonAction,
22
22
  } from "../daemon/operator-contract";
23
+ import { runChatDaemonInternal } from "../sdk/bus/chat-daemon-cli";
23
24
 
24
25
  export type DaemonCliAction = "list" | "status" | "stop" | "reload";
26
+ export type DaemonInternalCliAction = "discord-internal" | "slack-internal";
27
+ export type DaemonCommandAction = DaemonCliAction | DaemonInternalCliAction;
28
+
29
+ export class UnknownDaemonKindError extends Error {
30
+ constructor(
31
+ readonly kinds: readonly string[],
32
+ readonly knownKinds: readonly DaemonKind[],
33
+ ) {
34
+ super(`Unknown daemon kind(s): ${kinds.join(", ")}. Known kinds: ${knownKinds.join(", ")}.`);
35
+ this.name = "UnknownDaemonKindError";
36
+ }
37
+ }
38
+
39
+ export function isDaemonInternalAction(action: DaemonCommandAction): action is DaemonInternalCliAction {
40
+ return action === "discord-internal" || action === "slack-internal";
41
+ }
25
42
 
26
43
  export interface DaemonCommandArgs {
27
- action: DaemonCliAction;
44
+ action: DaemonCommandAction;
28
45
  kinds: DaemonKind[];
29
46
  all: boolean;
30
47
  json: boolean;
@@ -32,6 +49,9 @@ export interface DaemonCommandArgs {
32
49
  gracefulTimeoutMs?: number;
33
50
  killTimeoutMs?: number;
34
51
  spawnIfStopped?: boolean;
52
+ smoke?: boolean;
53
+ ownerId?: string;
54
+ agentDir?: string;
35
55
  /** Show runtime detail and the full roots list in human output. */
36
56
  verbose?: boolean;
37
57
  }
@@ -41,14 +61,21 @@ export interface DaemonCommandDeps {
41
61
  controllers?: BuiltInDaemonController[];
42
62
  }
43
63
 
44
- const KNOWN_KINDS: DaemonKind[] = ["telegram"];
64
+ const INTERNAL_ACTIONS: DaemonInternalCliAction[] = ["discord-internal", "slack-internal"];
65
+ const KNOWN_KINDS = BUILT_IN_DAEMON_KINDS;
45
66
 
46
67
  export function parseDaemonArgs(argv: string[]): DaemonCommandArgs | undefined {
47
68
  if (argv.length === 0 || argv[0] !== "daemon") return undefined;
48
69
  const rest = argv.slice(1);
49
- const resolved = resolveDaemonAction(rest[0]);
50
- const isActionToken = (DAEMON_ACTION_TOKENS as readonly string[]).includes(rest[0] ?? "");
51
- const action = (resolved ?? "status") as DaemonCliAction;
70
+ const actionToken = rest[0];
71
+ const resolved = resolveDaemonAction(actionToken);
72
+ const action = (resolved ??
73
+ ((INTERNAL_ACTIONS as readonly string[]).includes(actionToken ?? "")
74
+ ? actionToken
75
+ : "status")) as DaemonCommandAction;
76
+ const isActionToken =
77
+ (DAEMON_ACTION_TOKENS as readonly string[]).includes(actionToken ?? "") ||
78
+ (INTERNAL_ACTIONS as readonly string[]).includes(actionToken ?? "");
52
79
  const positional = isActionToken ? rest.slice(1) : rest;
53
80
  const kinds: DaemonKind[] = [];
54
81
  let all = false;
@@ -58,6 +85,9 @@ export function parseDaemonArgs(argv: string[]): DaemonCommandArgs | undefined {
58
85
  let gracefulTimeoutMs: number | undefined;
59
86
  let killTimeoutMs: number | undefined;
60
87
  let spawnIfStopped: boolean | undefined;
88
+ let smoke = false;
89
+ let ownerId: string | undefined;
90
+ let agentDir: string | undefined;
61
91
  for (let i = 0; i < positional.length; i++) {
62
92
  const arg = positional[i];
63
93
  if (arg === "--all") all = true;
@@ -65,21 +95,40 @@ export function parseDaemonArgs(argv: string[]): DaemonCommandArgs | undefined {
65
95
  else if (arg === "--force") force = true;
66
96
  else if (arg === "--verbose" || arg === "-v") verbose = true;
67
97
  else if (arg === "--spawn-if-stopped") spawnIfStopped = true;
98
+ else if (arg === "--smoke") smoke = true;
99
+ else if (arg === "--owner-id") ownerId = positional[++i];
100
+ else if (arg === "--agent-dir") agentDir = positional[++i];
68
101
  else if (arg === "--graceful-timeout-ms") gracefulTimeoutMs = Number.parseInt(positional[++i], 10);
69
102
  else if (arg === "--kill-timeout-ms") killTimeoutMs = Number.parseInt(positional[++i], 10);
70
- else if (!arg.startsWith("--") && (KNOWN_KINDS as string[]).includes(arg)) kinds.push(arg as DaemonKind);
103
+ else if (!arg.startsWith("--")) kinds.push(arg as DaemonKind);
71
104
  }
72
- return { action, kinds, all, json, force, verbose, gracefulTimeoutMs, killTimeoutMs, spawnIfStopped };
105
+ return {
106
+ action,
107
+ kinds,
108
+ all,
109
+ json,
110
+ force,
111
+ verbose,
112
+ gracefulTimeoutMs,
113
+ killTimeoutMs,
114
+ spawnIfStopped,
115
+ smoke,
116
+ ownerId,
117
+ agentDir,
118
+ };
73
119
  }
74
120
  export async function runDaemonCommand(cmd: DaemonCommandArgs, deps: DaemonCommandDeps = {}): Promise<void> {
75
- const unknownKinds = cmd.kinds.filter(kind => !(KNOWN_KINDS as string[]).includes(kind));
76
- if (unknownKinds.length > 0) {
77
- process.stderr.write(
78
- `Unknown daemon kind(s): ${unknownKinds.join(", ")}. Known kinds: ${KNOWN_KINDS.join(", ")}.\n`,
79
- );
80
- process.exitCode = 1;
121
+ if (isDaemonInternalAction(cmd.action)) {
122
+ const args = [
123
+ ...(cmd.smoke ? ["--smoke"] : []),
124
+ ...(cmd.ownerId ? ["--owner-id", cmd.ownerId] : []),
125
+ ...(cmd.agentDir ? ["--agent-dir", cmd.agentDir] : []),
126
+ ];
127
+ await runChatDaemonInternal(cmd.action === "discord-internal" ? "discord" : "slack", args);
81
128
  return;
82
129
  }
130
+ const unknownKinds = cmd.kinds.filter(kind => !(KNOWN_KINDS as readonly string[]).includes(kind));
131
+ if (unknownKinds.length > 0) throw new UnknownDaemonKindError(unknownKinds, KNOWN_KINDS);
83
132
  const settings = deps.settings ?? (await Settings.init());
84
133
  const controllers = deps.controllers ?? selectDaemonControllers(settings, cmd.kinds, cmd.all);
85
134
 
@@ -191,7 +191,7 @@ export async function runListModelsCommand(options: RunListModelsOptions): Promi
191
191
  process.stderr.write(`Failed to load extension: ${extPath}: ${error}\n`);
192
192
  }
193
193
 
194
- // Mirror sdk.ts: drain pending provider registrations into the registry.
194
+ // Mirror sdk/session.ts: drain pending provider registrations into the registry.
195
195
  const activeSources = extensionsResult.extensions.map(extension => extension.path);
196
196
  modelRegistry.syncExtensionSources(activeSources);
197
197
  for (const sourceId of new Set(activeSources)) {