@gajae-code/coding-agent 0.13.2 → 0.14.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 (610) hide show
  1. package/CHANGELOG.md +215 -8
  2. package/README.md +2 -0
  3. package/bin/gajaessi.js +4 -0
  4. package/dist/types/async/job-manager.d.ts +55 -2
  5. package/dist/types/async/support.d.ts +14 -0
  6. package/dist/types/capability/mcp.d.ts +6 -0
  7. package/dist/types/capability/types.d.ts +6 -0
  8. package/dist/types/cli/accounts-cli.d.ts +19 -0
  9. package/dist/types/cli/args.d.ts +3 -0
  10. package/dist/types/cli/config-cli.d.ts +6 -0
  11. package/dist/types/cli/crash-cli.d.ts +10 -0
  12. package/dist/types/cli/customize-doctor.d.ts +145 -0
  13. package/dist/types/cli/daemon-cli.d.ts +3 -1
  14. package/dist/types/cli/mcp-cli.d.ts +11 -0
  15. package/dist/types/cli/notify-cli.d.ts +1 -1
  16. package/dist/types/cli/root-flags.d.ts +12 -0
  17. package/dist/types/cli/setup-cli.d.ts +3 -1
  18. package/dist/types/cli/skills-cli.d.ts +2 -1
  19. package/dist/types/cli/update-cli.d.ts +19 -1
  20. package/dist/types/cli.d.ts +6 -0
  21. package/dist/types/commands/accounts.d.ts +40 -0
  22. package/dist/types/commands/crash.d.ts +24 -0
  23. package/dist/types/commands/customize.d.ts +22 -0
  24. package/dist/types/commands/daemon.d.ts +1 -1
  25. package/dist/types/commands/launch.d.ts +6 -0
  26. package/dist/types/commands/setup.d.ts +6 -0
  27. package/dist/types/commands/skills.d.ts +6 -1
  28. package/dist/types/commands/update.d.ts +7 -0
  29. package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
  30. package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
  31. package/dist/types/config/config-schema-version.d.ts +10 -0
  32. package/dist/types/config/file-lock.d.ts +18 -0
  33. package/dist/types/config/model-profile-activation.d.ts +3 -1
  34. package/dist/types/config/model-registry.d.ts +10 -1
  35. package/dist/types/config/models-config-schema.d.ts +2 -0
  36. package/dist/types/config/settings-schema.d.ts +73 -9
  37. package/dist/types/config/settings.d.ts +63 -0
  38. package/dist/types/config/skill-settings-defaults.d.ts +26 -0
  39. package/dist/types/config/task-delegation.d.ts +39 -0
  40. package/dist/types/config/update-channel.d.ts +10 -0
  41. package/dist/types/coordinator-mcp/server.d.ts +5 -1
  42. package/dist/types/crash/index-store.d.ts +87 -0
  43. package/dist/types/crash/nudge.d.ts +50 -0
  44. package/dist/types/crash/record-loader.d.ts +17 -0
  45. package/dist/types/crash/report.d.ts +134 -0
  46. package/dist/types/crash/sanitize.d.ts +25 -0
  47. package/dist/types/cursor.d.ts +13 -2
  48. package/dist/types/customization/import.d.ts +37 -0
  49. package/dist/types/customization/index.d.ts +4 -0
  50. package/dist/types/customization/inventory.d.ts +25 -0
  51. package/dist/types/customization/mutations.d.ts +32 -0
  52. package/dist/types/customization/types.d.ts +115 -0
  53. package/dist/types/daemon/control-types.d.ts +8 -1
  54. package/dist/types/daemon/operator-contract.d.ts +4 -4
  55. package/dist/types/discovery/claude.d.ts +39 -1
  56. package/dist/types/discovery/codex.d.ts +39 -1
  57. package/dist/types/discovery/index.d.ts +2 -0
  58. package/dist/types/discovery/mcp-compat.d.ts +30 -0
  59. package/dist/types/edit/renderer.d.ts +23 -0
  60. package/dist/types/extensibility/extensions/runner.d.ts +3 -0
  61. package/dist/types/extensibility/extensions/types.d.ts +21 -4
  62. package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
  63. package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
  64. package/dist/types/extensibility/hooks/loader.d.ts +19 -5
  65. package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
  66. package/dist/types/extensibility/skill-management.d.ts +107 -0
  67. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
  68. package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
  69. package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
  70. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
  71. package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
  72. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
  73. package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
  74. package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
  75. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
  76. package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
  77. package/dist/types/hooks/events.d.ts +60 -0
  78. package/dist/types/hooks/normalize.d.ts +83 -0
  79. package/dist/types/hooks/skill-state.d.ts +9 -2
  80. package/dist/types/main.d.ts +2 -1
  81. package/dist/types/modes/acp/abort-scope.d.ts +13 -0
  82. package/dist/types/modes/acp/acp-agent.d.ts +7 -4
  83. package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
  84. package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
  85. package/dist/types/modes/components/customization/index.d.ts +1 -0
  86. package/dist/types/modes/components/dynamic-theme-text.d.ts +9 -0
  87. package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
  88. package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
  89. package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
  90. package/dist/types/modes/components/oauth-selector.d.ts +10 -4
  91. package/dist/types/modes/components/pet-capability.d.ts +7 -21
  92. package/dist/types/modes/components/settings-selector.d.ts +5 -0
  93. package/dist/types/modes/components/status-line/gh.d.ts +6 -2
  94. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
  95. package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
  96. package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
  97. package/dist/types/modes/interactive-mode.d.ts +1 -0
  98. package/dist/types/modes/theme/defaults/index.d.ts +118 -0
  99. package/dist/types/modes/types.d.ts +1 -0
  100. package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
  101. package/dist/types/runtime-mcp/config.d.ts +9 -0
  102. package/dist/types/runtime-mcp/manager.d.ts +26 -1
  103. package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
  104. package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
  105. package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
  106. package/dist/types/runtime-mcp/protocol.d.ts +278 -0
  107. package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
  108. package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
  109. package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
  110. package/dist/types/runtime-mcp/types.d.ts +102 -10
  111. package/dist/types/sdk/acp/adapter.d.ts +26 -5
  112. package/dist/types/sdk/broker/broker.d.ts +3 -55
  113. package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
  114. package/dist/types/sdk/broker/session-index.d.ts +14 -5
  115. package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
  116. package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
  117. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
  118. package/dist/types/sdk/bus/config.d.ts +11 -0
  119. package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
  120. package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
  121. package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
  122. package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
  123. package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
  124. package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
  125. package/dist/types/sdk/bus/index.d.ts +85 -99
  126. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
  127. package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
  128. package/dist/types/sdk/bus/notification-service.d.ts +52 -0
  129. package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
  130. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
  131. package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
  132. package/dist/types/sdk/bus/session-control.d.ts +25 -1
  133. package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
  134. package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
  135. package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
  136. package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
  137. package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
  138. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
  139. package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
  140. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
  141. package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
  142. package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
  143. package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
  144. package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
  145. package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
  146. package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
  147. package/dist/types/sdk/cli/rows.d.ts +2 -11
  148. package/dist/types/sdk/cli/session-cli.d.ts +15 -25
  149. package/dist/types/sdk/client/client.d.ts +97 -1
  150. package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
  151. package/dist/types/sdk/host/control/index.d.ts +1 -1
  152. package/dist/types/sdk/host/control/operations.d.ts +18 -5
  153. package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
  154. package/dist/types/sdk/host/host.d.ts +15 -1
  155. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  156. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  157. package/dist/types/sdk/host/session-runtime.d.ts +127 -7
  158. package/dist/types/sdk/host/types.d.ts +1 -1
  159. package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
  160. package/dist/types/sdk/index.d.ts +2 -1
  161. package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
  162. package/dist/types/sdk/lifecycle/client.d.ts +59 -0
  163. package/dist/types/sdk/lifecycle/index.d.ts +3 -0
  164. package/dist/types/sdk/lifecycle/service.d.ts +232 -0
  165. package/dist/types/sdk/mcp/server.d.ts +9 -6
  166. package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
  167. package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
  168. package/dist/types/sdk/prompt-status.d.ts +10 -3
  169. package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
  170. package/dist/types/sdk/receipt-state.d.ts +17 -0
  171. package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
  172. package/dist/types/sdk/router/index.d.ts +1 -0
  173. package/dist/types/sdk/router/session-router.d.ts +152 -0
  174. package/dist/types/sdk/session-list.d.ts +22 -0
  175. package/dist/types/sdk/session-reconnect.d.ts +43 -1
  176. package/dist/types/sdk/session.d.ts +34 -1
  177. package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
  178. package/dist/types/session/account-inventory.d.ts +86 -0
  179. package/dist/types/session/agent-session.d.ts +145 -6
  180. package/dist/types/session/agent-storage.d.ts +10 -0
  181. package/dist/types/session/coordinator-tool-label.d.ts +28 -0
  182. package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
  183. package/dist/types/session/messages.d.ts +1 -1
  184. package/dist/types/session/secure-token-file.d.ts +3 -0
  185. package/dist/types/session/session-manager.d.ts +47 -1
  186. package/dist/types/session/startup-auth-config.d.ts +44 -0
  187. package/dist/types/session/terminal-abort.d.ts +378 -0
  188. package/dist/types/session/yield-queue.d.ts +7 -0
  189. package/dist/types/session-import/claude.d.ts +26 -0
  190. package/dist/types/session-import/codex.d.ts +88 -0
  191. package/dist/types/session-import/command.d.ts +35 -0
  192. package/dist/types/session-import/detect.d.ts +22 -0
  193. package/dist/types/session-import/index.d.ts +7 -0
  194. package/dist/types/session-import/provider-codex.d.ts +22 -0
  195. package/dist/types/session-import/provider-service.d.ts +38 -0
  196. package/dist/types/session-import/redact.d.ts +23 -0
  197. package/dist/types/session-import/service.d.ts +47 -0
  198. package/dist/types/session-import/types.d.ts +120 -0
  199. package/dist/types/setup/paseo/check.d.ts +16 -0
  200. package/dist/types/setup/paseo/install-saga.d.ts +115 -0
  201. package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
  202. package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
  203. package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
  204. package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
  205. package/dist/types/setup/paseo/provider-config.d.ts +35 -0
  206. package/dist/types/setup/paseo/remove.d.ts +14 -0
  207. package/dist/types/setup/paseo/result-types.d.ts +59 -0
  208. package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
  209. package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
  210. package/dist/types/skill-state/active-state.d.ts +5 -1
  211. package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
  212. package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
  213. package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
  214. package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
  215. package/dist/types/slash-commands/types.d.ts +7 -1
  216. package/dist/types/task/executor.d.ts +10 -0
  217. package/dist/types/task/index.d.ts +3 -1
  218. package/dist/types/tools/ask-answer-registry.d.ts +6 -3
  219. package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
  220. package/dist/types/tools/bash.d.ts +2 -6
  221. package/dist/types/tools/browser/attach.d.ts +11 -0
  222. package/dist/types/tools/browser/launch.d.ts +20 -0
  223. package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
  224. package/dist/types/tools/browser/render.d.ts +1 -0
  225. package/dist/types/tools/browser.d.ts +3 -1
  226. package/dist/types/tools/image-gen.d.ts +10 -2
  227. package/dist/types/tools/index.d.ts +8 -0
  228. package/dist/types/tools/monitor.d.ts +1 -1
  229. package/dist/types/tools/skill-discovery.d.ts +8 -1
  230. package/dist/types/tools/subagent.d.ts +2 -0
  231. package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
  232. package/dist/types/utils/herdr-pane.d.ts +76 -0
  233. package/package.json +19 -9
  234. package/scripts/build-binary.ts +2 -1
  235. package/scripts/build-sdk-package-smoke.ts +2 -13
  236. package/scripts/capture-sticky-viewport-showcase.ts +0 -1
  237. package/scripts/compile-args.ts +2 -0
  238. package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
  239. package/scripts/generate-sdk-operation-inventory.ts +28 -0
  240. package/scripts/generate-telegram-baseline-manifest.ts +1 -0
  241. package/scripts/generate-tool-catalog.ts +6 -4
  242. package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
  243. package/src/async/job-manager.ts +352 -17
  244. package/src/async/support.ts +25 -0
  245. package/src/autoresearch/dashboard.ts +28 -13
  246. package/src/capability/index.ts +3 -1
  247. package/src/capability/mcp.ts +6 -0
  248. package/src/capability/types.ts +6 -0
  249. package/src/cli/accounts-cli.ts +395 -0
  250. package/src/cli/args.ts +23 -0
  251. package/src/cli/auth-broker-cli.ts +136 -66
  252. package/src/cli/auth-gateway-cli.ts +94 -70
  253. package/src/cli/config-cli.ts +27 -2
  254. package/src/cli/crash-cli.ts +78 -0
  255. package/src/cli/customize-doctor.ts +1605 -0
  256. package/src/cli/daemon-cli.ts +12 -3
  257. package/src/cli/fast-help.ts +1 -0
  258. package/src/cli/mcp-cli.ts +128 -60
  259. package/src/cli/notify-cli.ts +8 -14
  260. package/src/cli/root-flags.ts +8 -0
  261. package/src/cli/setup-cli.ts +145 -0
  262. package/src/cli/skills-cli.ts +38 -2
  263. package/src/cli/update-cli.ts +167 -12
  264. package/src/cli.ts +4 -0
  265. package/src/commands/accounts.ts +71 -0
  266. package/src/commands/crash.ts +35 -0
  267. package/src/commands/customize.ts +84 -0
  268. package/src/commands/daemon.ts +2 -2
  269. package/src/commands/deep-interview.ts +2 -0
  270. package/src/commands/launch.ts +1 -0
  271. package/src/commands/mcp.ts +12 -7
  272. package/src/commands/ralplan.ts +2 -0
  273. package/src/commands/sdk.ts +65 -32
  274. package/src/commands/setup.ts +5 -0
  275. package/src/commands/skills.ts +14 -4
  276. package/src/commands/ultragoal.ts +10 -1
  277. package/src/commands/update.ts +26 -15
  278. package/src/config/atomic-yaml-patch-worker.ts +57 -0
  279. package/src/config/atomic-yaml-patch.ts +769 -29
  280. package/src/config/config-schema-version.ts +10 -0
  281. package/src/config/file-lock.ts +70 -1
  282. package/src/config/mcp-schema.json +52 -14
  283. package/src/config/model-profile-activation.ts +23 -2
  284. package/src/config/model-profiles.ts +88 -21
  285. package/src/config/model-registry.ts +147 -21
  286. package/src/config/models-config-schema.ts +1 -1
  287. package/src/config/settings-schema.ts +77 -7
  288. package/src/config/settings.ts +4038 -199
  289. package/src/config/skill-settings-defaults.ts +41 -3
  290. package/src/config/task-delegation.ts +87 -0
  291. package/src/config/update-channel.ts +23 -0
  292. package/src/coordinator-mcp/server.ts +377 -308
  293. package/src/crash/index-store.ts +723 -0
  294. package/src/crash/nudge.ts +89 -0
  295. package/src/crash/record-loader.ts +149 -0
  296. package/src/crash/report.ts +551 -0
  297. package/src/crash/sanitize.ts +129 -0
  298. package/src/cursor.ts +36 -10
  299. package/src/customization/import.ts +946 -0
  300. package/src/customization/index.ts +4 -0
  301. package/src/customization/inventory.ts +335 -0
  302. package/src/customization/mutations.ts +141 -0
  303. package/src/customization/types.ts +223 -0
  304. package/src/daemon/control-types.ts +8 -1
  305. package/src/daemon/operator-contract.ts +6 -6
  306. package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
  307. package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
  308. package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
  309. package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
  310. package/src/discovery/claude-hooks.ts +38 -0
  311. package/src/discovery/claude.ts +142 -209
  312. package/src/discovery/codex-hooks.ts +38 -0
  313. package/src/discovery/codex.ts +132 -198
  314. package/src/discovery/helpers.ts +8 -1
  315. package/src/discovery/index.ts +2 -0
  316. package/src/discovery/mcp-compat.ts +234 -0
  317. package/src/discovery/mcp-json.ts +6 -0
  318. package/src/edit/renderer.ts +40 -0
  319. package/src/edit/streaming.ts +4 -2
  320. package/src/exec/bash-executor.ts +24 -20
  321. package/src/export/html/index.ts +51 -2
  322. package/src/extensibility/extensions/loader.ts +9 -1
  323. package/src/extensibility/extensions/runner.ts +17 -4
  324. package/src/extensibility/extensions/types.ts +31 -6
  325. package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
  326. package/src/extensibility/gjc-plugins/installer.ts +9 -5
  327. package/src/extensibility/gjc-plugins/observability.ts +8 -2
  328. package/src/extensibility/gjc-plugins/registry.ts +13 -2
  329. package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
  330. package/src/extensibility/gjc-plugins/schema.ts +222 -39
  331. package/src/extensibility/hooks/loader.ts +154 -10
  332. package/src/extensibility/runtime-skill-discovery.ts +257 -60
  333. package/src/extensibility/skill-management.ts +368 -0
  334. package/src/extensibility/skills.ts +52 -16
  335. package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
  336. package/src/gjc-runtime/launch-worktree.ts +56 -2
  337. package/src/gjc-runtime/linux-proc.ts +7 -1
  338. package/src/gjc-runtime/ralplan-runtime.ts +100 -164
  339. package/src/gjc-runtime/session-state-lock.ts +992 -0
  340. package/src/gjc-runtime/session-state-sidecar.ts +644 -142
  341. package/src/gjc-runtime/state-writer.ts +39 -14
  342. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
  343. package/src/gjc-runtime/ultragoal-guard.ts +11 -4
  344. package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
  345. package/src/gjc-runtime/workflow-settings.ts +596 -0
  346. package/src/goals/tools/goal-tool.ts +6 -1
  347. package/src/hooks/events.ts +291 -0
  348. package/src/hooks/native-skill-hook.ts +4 -0
  349. package/src/hooks/normalize.ts +369 -0
  350. package/src/hooks/skill-state.ts +165 -46
  351. package/src/internal-urls/docs-index.generated.ts +41 -32
  352. package/src/main.ts +36 -5
  353. package/src/migrate/mcp-mapper.ts +25 -2
  354. package/src/modes/acp/abort-scope.ts +29 -0
  355. package/src/modes/acp/acp-agent.ts +423 -98
  356. package/src/modes/components/assistant-message.ts +6 -1
  357. package/src/modes/components/chrome.ts +4 -3
  358. package/src/modes/components/customization/customization-dashboard.ts +443 -0
  359. package/src/modes/components/customization/import-wizard.ts +372 -0
  360. package/src/modes/components/customization/index.ts +1 -0
  361. package/src/modes/components/dynamic-theme-text.ts +22 -0
  362. package/src/modes/components/gajae-pet-widget.ts +607 -193
  363. package/src/modes/components/irc-sidebar.ts +11 -0
  364. package/src/modes/components/iterm-pet-transport.ts +585 -0
  365. package/src/modes/components/model-selector.ts +1 -6
  366. package/src/modes/components/oauth-selector.ts +277 -86
  367. package/src/modes/components/pet-capability.ts +35 -31
  368. package/src/modes/components/settings-selector.ts +29 -5
  369. package/src/modes/components/status-line/gh.ts +45 -1
  370. package/src/modes/components/status-line/segments.ts +19 -4
  371. package/src/modes/components/tool-status-header.ts +13 -3
  372. package/src/modes/controllers/command-controller.ts +20 -8
  373. package/src/modes/controllers/extension-ui-controller.ts +56 -257
  374. package/src/modes/controllers/input-controller.ts +10 -0
  375. package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
  376. package/src/modes/controllers/selector-controller.ts +238 -77
  377. package/src/modes/controllers/stt-controller.ts +3 -3
  378. package/src/modes/interactive-mode.ts +88 -16
  379. package/src/modes/print-mode.ts +35 -6
  380. package/src/modes/runtime-init.ts +21 -68
  381. package/src/modes/theme/defaults/index.ts +2 -0
  382. package/src/modes/theme/defaults/ouroboros.json +118 -0
  383. package/src/modes/types.ts +1 -0
  384. package/src/modes/utils/injected-user-submission.ts +25 -0
  385. package/src/modes/utils/terminal-bell.ts +15 -1
  386. package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
  387. package/src/prompts/agent-fragments/restricted-bash.md +1 -1
  388. package/src/prompts/agents/critic.md +1 -1
  389. package/src/prompts/system/rlm-research.md +1 -1
  390. package/src/prompts/system/system-prompt.md +0 -2
  391. package/src/prompts/tools/bash.md +7 -1
  392. package/src/prompts/tools/browser.md +1 -1
  393. package/src/prompts/tools/cron.md +6 -6
  394. package/src/prompts/tools/read.md +0 -2
  395. package/src/prompts/tools/skill-discovery.md +4 -2
  396. package/src/runtime-mcp/client.ts +427 -23
  397. package/src/runtime-mcp/config.ts +37 -5
  398. package/src/runtime-mcp/manager-pool.test.ts +56 -0
  399. package/src/runtime-mcp/manager.ts +52 -2
  400. package/src/runtime-mcp/oauth-discovery.ts +13 -0
  401. package/src/runtime-mcp/oauth-flow.ts +46 -1
  402. package/src/runtime-mcp/pool-key.ts +5 -1
  403. package/src/runtime-mcp/pool.test.ts +9 -0
  404. package/src/runtime-mcp/protocol.test.ts +353 -0
  405. package/src/runtime-mcp/protocol.ts +624 -0
  406. package/src/runtime-mcp/scope-config.ts +78 -0
  407. package/src/runtime-mcp/tool-bridge.ts +44 -10
  408. package/src/runtime-mcp/transports/http.ts +84 -13
  409. package/src/runtime-mcp/types.ts +123 -12
  410. package/src/sdk/acp/adapter.ts +328 -97
  411. package/src/sdk/broker/broker.ts +160 -741
  412. package/src/sdk/broker/ensure.ts +9 -1
  413. package/src/sdk/broker/lifecycle.ts +510 -116
  414. package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
  415. package/src/sdk/broker/process-incarnation.ts +19 -0
  416. package/src/sdk/broker/session-index.ts +516 -117
  417. package/src/sdk/broker/startup-failure.ts +28 -5
  418. package/src/sdk/broker/transport.ts +1 -13
  419. package/src/sdk/bus/chat-daemon-cli.ts +4 -2
  420. package/src/sdk/bus/chat-daemon-control.ts +67 -6
  421. package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
  422. package/src/sdk/bus/config.ts +13 -0
  423. package/src/sdk/bus/conversation-store.ts +59 -171
  424. package/src/sdk/bus/daemon-paths.ts +20 -0
  425. package/src/sdk/bus/discord-conversation.ts +2 -0
  426. package/src/sdk/bus/discord-daemon.ts +524 -126
  427. package/src/sdk/bus/discord-live-provider.ts +206 -79
  428. package/src/sdk/bus/existing-thread-readiness.ts +4 -97
  429. package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
  430. package/src/sdk/bus/index.ts +2480 -456
  431. package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
  432. package/src/sdk/bus/lifecycle-commands.ts +2 -2
  433. package/src/sdk/bus/managed-daemon.ts +2 -145
  434. package/src/sdk/bus/notification-service.ts +196 -0
  435. package/src/sdk/bus/operator-runtime.ts +1 -1
  436. package/src/sdk/bus/prompt-reconciliation.ts +24 -15
  437. package/src/sdk/bus/reconciliation-store.ts +553 -24
  438. package/src/sdk/bus/session-control.ts +49 -3
  439. package/src/sdk/bus/slack-conversation.ts +4 -0
  440. package/src/sdk/bus/slack-daemon.ts +733 -134
  441. package/src/sdk/bus/slack-live-provider.ts +65 -15
  442. package/src/sdk/bus/slack-provider.ts +4 -0
  443. package/src/sdk/bus/slack-thread-binding.ts +9 -104
  444. package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
  445. package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
  446. package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
  447. package/src/sdk/bus/telegram-daemon-control.ts +3 -13
  448. package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
  449. package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
  450. package/src/sdk/bus/telegram-daemon.ts +2552 -2280
  451. package/src/sdk/bus/telegram-reference.ts +1 -226
  452. package/src/sdk/bus/telegram-setup.ts +2 -2
  453. package/src/sdk/bus/threaded-render.ts +1 -0
  454. package/src/sdk/bus/topic-registry.ts +279 -146
  455. package/src/sdk/cli/rows.ts +2 -35
  456. package/src/sdk/cli/session-cli.ts +776 -700
  457. package/src/sdk/client/client.ts +892 -1
  458. package/src/sdk/host/control/dispatch.ts +93 -58
  459. package/src/sdk/host/control/index.ts +1 -1
  460. package/src/sdk/host/control/operations.ts +18 -10
  461. package/src/sdk/host/control/runtime-gate.ts +40 -0
  462. package/src/sdk/host/host.ts +63 -12
  463. package/src/sdk/host/query/handlers.ts +66 -7
  464. package/src/sdk/host/reverse-leases.ts +2 -2
  465. package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
  466. package/src/sdk/host/session-runtime.test.ts +2787 -34
  467. package/src/sdk/host/session-runtime.ts +1489 -101
  468. package/src/sdk/host/surface-policy.ts +12 -8
  469. package/src/sdk/host/types.ts +1 -1
  470. package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
  471. package/src/sdk/host/websocket-transport.ts +85 -50
  472. package/src/sdk/index.ts +2 -1
  473. package/src/sdk/lifecycle/broker-client.ts +53 -0
  474. package/src/sdk/lifecycle/client.ts +234 -0
  475. package/src/sdk/lifecycle/index.ts +3 -0
  476. package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
  477. package/src/sdk/lifecycle/service.ts +720 -0
  478. package/src/sdk/mcp/server.ts +226 -188
  479. package/src/sdk/prompt-deadline-lease.ts +55 -0
  480. package/src/sdk/prompt-deadline-manager.ts +148 -0
  481. package/src/sdk/prompt-status.ts +11 -3
  482. package/src/sdk/protocol/operation-inventory.generated.json +272 -129
  483. package/src/sdk/protocol/operation-registry.ts +71 -8
  484. package/src/sdk/receipt-state.ts +43 -0
  485. package/src/sdk/reconciliation-extensions.ts +14 -0
  486. package/src/sdk/router/index.ts +1 -0
  487. package/src/sdk/router/session-router.ts +1658 -0
  488. package/src/sdk/session-list.ts +93 -0
  489. package/src/sdk/session-reconnect.ts +45 -1
  490. package/src/sdk/session.ts +716 -120
  491. package/src/sdk/transport/serve-cli.ts +18 -34
  492. package/src/session/account-inventory.ts +603 -0
  493. package/src/session/agent-session.ts +2873 -559
  494. package/src/session/agent-storage.ts +35 -0
  495. package/src/session/blob-store.ts +32 -1
  496. package/src/session/coordinator-tool-label.ts +40 -0
  497. package/src/session/internal/managed-session-scope.ts +4 -0
  498. package/src/session/internal/managed-session-storage.ts +199 -31
  499. package/src/session/messages.ts +1 -1
  500. package/src/session/secure-token-file.ts +80 -0
  501. package/src/session/session-manager.ts +757 -57
  502. package/src/session/session-storage.ts +25 -16
  503. package/src/session/startup-auth-config.ts +297 -0
  504. package/src/session/terminal-abort.ts +1253 -0
  505. package/src/session/yield-queue.ts +57 -15
  506. package/src/session-import/claude.ts +334 -0
  507. package/src/session-import/codex.ts +1033 -0
  508. package/src/session-import/command.ts +77 -0
  509. package/src/session-import/detect.ts +133 -0
  510. package/src/session-import/index.ts +7 -0
  511. package/src/session-import/provider-codex.ts +327 -0
  512. package/src/session-import/provider-service.ts +457 -0
  513. package/src/session-import/redact.ts +128 -0
  514. package/src/session-import/service.ts +1264 -0
  515. package/src/session-import/types.ts +148 -0
  516. package/src/setup/paseo/check.ts +213 -0
  517. package/src/setup/paseo/install-saga.ts +293 -0
  518. package/src/setup/paseo/json-publisher.ts +263 -0
  519. package/src/setup/paseo/orchestration-preferences.ts +86 -0
  520. package/src/setup/paseo/paseo-ownership.ts +224 -0
  521. package/src/setup/paseo/paseo-setup.ts +253 -0
  522. package/src/setup/paseo/provider-config.ts +139 -0
  523. package/src/setup/paseo/remove.ts +183 -0
  524. package/src/setup/paseo/result-types.ts +79 -0
  525. package/src/setup/paseo/setup-deps.ts +175 -0
  526. package/src/setup/paseo/skills-bridge.ts +260 -0
  527. package/src/skill-state/active-state.ts +21 -11
  528. package/src/slash-commands/acp-builtins.ts +9 -1
  529. package/src/slash-commands/builtin-registry.ts +117 -19
  530. package/src/slash-commands/helpers/credential-switch.ts +143 -0
  531. package/src/slash-commands/helpers/mcp.ts +9 -3
  532. package/src/slash-commands/helpers/usage-report.ts +61 -56
  533. package/src/slash-commands/types.ts +7 -2
  534. package/src/task/executor.ts +30 -11
  535. package/src/task/index.ts +66 -7
  536. package/src/task/render.ts +23 -9
  537. package/src/tools/ask-answer-registry.ts +23 -7
  538. package/src/tools/ask.ts +8 -4
  539. package/src/tools/bash-sleep-advisory.ts +115 -0
  540. package/src/tools/bash.ts +98 -18
  541. package/src/tools/browser/attach.ts +71 -3
  542. package/src/tools/browser/launch.ts +86 -13
  543. package/src/tools/browser/profile-discovery.ts +57 -7
  544. package/src/tools/browser/render.ts +8 -1
  545. package/src/tools/browser.ts +130 -21
  546. package/src/tools/computer.enforcement.test.ts +1 -1
  547. package/src/tools/computer.ts +3 -2
  548. package/src/tools/cron.ts +12 -1
  549. package/src/tools/image-gen.ts +349 -142
  550. package/src/tools/index.ts +8 -0
  551. package/src/tools/job.ts +33 -6
  552. package/src/tools/monitor.ts +41 -2
  553. package/src/tools/skill-discovery.ts +21 -29
  554. package/src/tools/subagent.ts +142 -24
  555. package/src/tools/todo-contract.ts +55 -3
  556. package/src/tools/todo-write.ts +4 -3
  557. package/src/tools/tool-catalog.generated.ts +6 -6
  558. package/src/tools/ultragoal-ask-guard.ts +10 -3
  559. package/src/utils/herdr-pane.ts +345 -0
  560. package/src/utils/title-generator.ts +2 -0
  561. package/src/web/scrapers/index.ts +6 -4
  562. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  563. package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
  564. package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
  565. package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
  566. package/dist/types/runtime/lazy-service.test.d.ts +0 -1
  567. package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
  568. package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
  569. package/dist/types/runtime-mcp/config.test.d.ts +0 -1
  570. package/dist/types/runtime-mcp/http.test.d.ts +0 -1
  571. package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
  572. package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
  573. package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
  574. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
  575. package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
  576. package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
  577. package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
  578. package/dist/types/sdk/elevation/audit.d.ts +0 -93
  579. package/dist/types/sdk/elevation/capability.d.ts +0 -3
  580. package/dist/types/sdk/elevation/digest.d.ts +0 -72
  581. package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
  582. package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
  583. package/dist/types/sdk/elevation/owner.d.ts +0 -48
  584. package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
  585. package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
  586. package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
  587. package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
  588. package/dist/types/session/auth-broker-config.d.ts +0 -13
  589. package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
  590. package/dist/types/skills/skills.test.d.ts +0 -1
  591. package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
  592. package/dist/types/task/token-log.test.d.ts +0 -1
  593. package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
  594. package/dist/types/tools/descriptors.test.d.ts +0 -1
  595. package/scripts/g005-daemon-smoke.ts +0 -180
  596. package/scripts/g011-daemon-path-smoke.ts +0 -153
  597. package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
  598. package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
  599. package/src/sdk/bus/telegram-cli.ts +0 -212
  600. package/src/sdk/elevation/allowlist.ts +0 -54
  601. package/src/sdk/elevation/audit.ts +0 -208
  602. package/src/sdk/elevation/capability.ts +0 -41
  603. package/src/sdk/elevation/digest.ts +0 -129
  604. package/src/sdk/elevation/dispatch-receipt.ts +0 -184
  605. package/src/sdk/elevation/grant-ledger.ts +0 -1142
  606. package/src/sdk/elevation/owner.ts +0 -109
  607. package/src/session/auth-broker-config.ts +0 -109
  608. /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
  609. /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
  610. /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@gajae-code/coding-agent",
4
- "version": "0.13.2",
4
+ "version": "0.14.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",
@@ -25,7 +25,8 @@
25
25
  "main": "./src/index.ts",
26
26
  "types": "./dist/types/index.d.ts",
27
27
  "bin": {
28
- "gjc": "bin/gjc.js"
28
+ "gjc": "bin/gjc.js",
29
+ "가재씨": "bin/gajaessi.js"
29
30
  },
30
31
  "scripts": {
31
32
  "build": "bun scripts/build-binary.ts",
@@ -54,13 +55,12 @@
54
55
  "@agentclientprotocol/sdk": "1.3.0",
55
56
  "@babel/parser": "^7.29.3",
56
57
  "@mozilla/readability": "^0.6.0",
57
- "@gajae-code/stats": "0.13.2",
58
- "@gajae-code/agent-core": "0.13.2",
59
- "@gajae-code/ai": "0.13.2",
60
- "@gajae-code/bridge-client": "0.13.2",
61
- "@gajae-code/natives": "0.13.2",
62
- "@gajae-code/tui": "0.13.2",
63
- "@gajae-code/utils": "0.13.2",
58
+ "@gajae-code/stats": "0.14.0",
59
+ "@gajae-code/agent-core": "0.14.0",
60
+ "@gajae-code/ai": "0.14.0",
61
+ "@gajae-code/natives": "0.14.0",
62
+ "@gajae-code/tui": "0.14.0",
63
+ "@gajae-code/utils": "0.14.0",
64
64
  "@puppeteer/browsers": "^2.13.0",
65
65
  "@types/turndown": "5.0.6",
66
66
  "@xterm/headless": "^6.0.0",
@@ -147,6 +147,16 @@
147
147
  "types": "./dist/types/sdk/bus/*.d.ts",
148
148
  "import": "./src/sdk/bus/*.ts"
149
149
  },
150
+ "./sdk/host/control/runtime-gate.js": null,
151
+ "./sdk/host/control/runtime-gate": null,
152
+ "./sdk/host/control/runtime-gate/*": null,
153
+ "./sdk/lifecycle/broker-client.js": null,
154
+ "./sdk/lifecycle/broker-client": null,
155
+ "./sdk/lifecycle/broker-client/*": null,
156
+ "./sdk/broker": null,
157
+ "./sdk/broker/*": null,
158
+ "./sdk/client": null,
159
+ "./sdk/client/*": null,
150
160
  "./session/internal/*": null,
151
161
  "./config/model-auth": null,
152
162
  "./config/model-auth.js": null,
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
 
3
3
  import * as path from "node:path";
4
+ import { signMacOSBinary } from "../../../scripts/macos-code-signing";
4
5
  import { buildDevCompileArgs } from "./compile-args";
5
6
 
6
7
  const packageDir = path.join(import.meta.dir, "..");
@@ -40,7 +41,7 @@ async function main(): Promise<void> {
40
41
  await stageWorkspaceNativeAddons();
41
42
  // Bun 1.3.12 emits a truncated Mach-O signature on darwin builds.
42
43
  if (shouldAdhocSignDarwinBinary()) {
43
- await runCommand(["codesign", "--force", "--sign", "-", outputPath]);
44
+ await signMacOSBinary(outputPath, runCommand);
44
45
  }
45
46
  } finally {
46
47
  await runCommand(["bun", "--cwd=../natives", "run", "embed:native", "--reset"]);
@@ -8,7 +8,6 @@ const packageDir = path.resolve(import.meta.dir, "..");
8
8
  const packageName = "@gajae-code/coding-agent";
9
9
  const agentPackageDir = path.resolve(packageDir, "../agent");
10
10
  const aiPackageDir = path.resolve(packageDir, "../ai");
11
- const bridgeClientPackageDir = path.resolve(packageDir, "../bridge-client");
12
11
  const tuiPackageDir = path.resolve(packageDir, "../tui");
13
12
  const nativesPackageDir = path.resolve(packageDir, "../natives");
14
13
  const linuxX64PackageDir = path.resolve(packageDir, "../natives-linux-x64");
@@ -47,10 +46,6 @@ async function runSmoke(): Promise<Surface> {
47
46
  }
48
47
  const agentTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], agentPackageDir);
49
48
  const aiTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], aiPackageDir);
50
- const bridgeClientTarball = run(
51
- ["bun", "pm", "pack", "--destination", tempDir, "--quiet"],
52
- bridgeClientPackageDir,
53
- );
54
49
  const tuiTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], tuiPackageDir);
55
50
  const nativesTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], nativesPackageDir);
56
51
  const linuxX64Tarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], stagedLinuxX64Dir);
@@ -58,9 +53,6 @@ async function runSmoke(): Promise<Surface> {
58
53
  const codingAgentTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], packageDir);
59
54
  const agentTarballPath = path.isAbsolute(agentTarball) ? agentTarball : path.join(agentPackageDir, agentTarball);
60
55
  const aiTarballPath = path.isAbsolute(aiTarball) ? aiTarball : path.join(aiPackageDir, aiTarball);
61
- const bridgeClientTarballPath = path.isAbsolute(bridgeClientTarball)
62
- ? bridgeClientTarball
63
- : path.join(bridgeClientPackageDir, bridgeClientTarball);
64
56
  const tuiTarballPath = path.isAbsolute(tuiTarball) ? tuiTarball : path.join(tuiPackageDir, tuiTarball);
65
57
  const nativesTarballPath = path.isAbsolute(nativesTarball)
66
58
  ? nativesTarball
@@ -81,7 +73,6 @@ async function runSmoke(): Promise<Surface> {
81
73
  dependencies: {
82
74
  "@gajae-code/agent-core": `file:${agentTarballPath}`,
83
75
  "@gajae-code/ai": `file:${aiTarballPath}`,
84
- "@gajae-code/bridge-client": `file:${bridgeClientTarballPath}`,
85
76
  [packageName]: `file:${codingAgentTarballPath}`,
86
77
  "@gajae-code/tui": `file:${tuiTarballPath}`,
87
78
  "@gajae-code/natives": `file:${nativesTarballPath}`,
@@ -91,7 +82,6 @@ async function runSmoke(): Promise<Surface> {
91
82
  overrides: {
92
83
  "@gajae-code/agent-core": `file:${agentTarballPath}`,
93
84
  "@gajae-code/ai": `file:${aiTarballPath}`,
94
- "@gajae-code/bridge-client": `file:${bridgeClientTarballPath}`,
95
85
  "@gajae-code/tui": `file:${tuiTarballPath}`,
96
86
  "@gajae-code/natives": `file:${nativesTarballPath}`,
97
87
  "@gajae-code/natives-linux-x64": `file:${linuxX64TarballPath}`,
@@ -160,15 +150,14 @@ async function runSmoke(): Promise<Surface> {
160
150
  const probePath = path.join(tempDir, "probe.ts");
161
151
  await fs.writeFile(
162
152
  probePath,
163
- `import * as fs from "node:fs/promises";\nimport * as path from "node:path";\nimport * as root from ${JSON.stringify(packageName)};\nimport * as sdk from ${JSON.stringify(`${packageName}/sdk`)};\nimport * as bus from ${JSON.stringify(`${packageName}/sdk/bus`)};\nconst required = [[root, "createAgentSession", "root"], [root, "SESSION_DIRECTORY_API_VERSION", "root"], [root, "resolveManagedSessionScope", "root"], [root, "listManagedSessionCandidates", "root"], [sdk, "createAgentSession", "sdk"], [bus, "createNotificationsExtension", "sdk/bus"], [sdk, "SdkClient", "sdk"], [sdk, "SESSION_DIRECTORY_API_VERSION", "sdk"], [sdk, "resolveManagedSessionScope", "sdk"], [sdk, "listManagedSessionCandidates", "sdk"]] as const;\nfor (const [module, name, subpath] of required) if (!(name in module)) throw new Error(subpath + " missing " + name);\nconst sandbox = path.join(process.cwd(), "managed-listing-smoke");\nconst cwd = path.join(sandbox, "workspace", "a-b", "c");\nconst agentDir = path.join(sandbox, "agent");\nconst sessionsRoot = path.join(agentDir, "sessions");\nawait fs.mkdir(cwd, { recursive: true });\nconst resolved = await sdk.resolveManagedSessionScope({ cwd, agentDir, sessionsRoot });\nif (resolved.kind !== "resolved") throw new Error("packed resolver failed: " + resolved.message);\nawait fs.mkdir(resolved.scope.directoryPath, { recursive: true, mode: 0o700 });\nawait fs.chmod(sessionsRoot, 0o700);\nawait fs.chmod(resolved.scope.directoryPath, 0o700);\nawait fs.writeFile(path.join(resolved.scope.directoryPath, ".gjc-managed-session-scope.v2.json"), JSON.stringify({ schemaVersion: 1, layoutVersion: 2, identityVersion: 1, platform: process.platform === "win32" ? "win32" : "posix", canonicalPath: resolved.scope.canonicalCwd, identityDigest: resolved.scope.directoryName.slice(3) }) + "\\n", { mode: 0o600 });\nconst transcriptPath = path.join(resolved.scope.directoryPath, "packed-session.jsonl");\nawait fs.writeFile(transcriptPath, JSON.stringify({ type: "session", id: "packed-session", cwd }) + "\\n", { mode: 0o600 });\nconst snapshot = async () => Promise.all((await fs.readdir(sandbox, { recursive: true })).sort().map(async name => { const pathname = path.join(sandbox, name); const stat = await fs.lstat(pathname); return [name, stat.mode, stat.size, stat.mtimeMs, stat.isFile() ? await fs.readFile(pathname, "utf8") : null]; }));\nconst before = JSON.stringify(await snapshot());\nconst listing = await sdk.listManagedSessionCandidates({ scope: resolved.scope });\nif (listing.kind !== "complete" || listing.owned.length !== 1 || listing.owned[0]?.sessionId !== "packed-session") throw new Error("packed readonly listing failed: " + JSON.stringify(listing));\nconst after = JSON.stringify(await snapshot());\nif (after !== before) throw new Error("packed readonly listing mutated the filesystem");\nconst privateSubpath = ${JSON.stringify(`${packageName}/session/internal/managed-session-scope`)};\ntry { await import(privateSubpath); throw new Error("private managed-session scope subpath resolved"); } catch (error) {\n\tif (error instanceof Error && error.message === "private managed-session scope subpath resolved") throw error;\n\tconst message = String(error);\n\tconst exportsRejected = /Package subpath .* is not defined by "exports"/.test(message);\n\tconst bunRejected = message.startsWith("ResolveMessage: Cannot find module '" + privateSubpath + "' from '") && message.endsWith("/probe.ts'");\n\tif (!exportsRejected && !bunRejected) throw new Error("private managed-session scope failed for an unexpected reason: " + message);\n}\nprocess.stdout.write(JSON.stringify({ root: Object.keys(root).sort(), sdk: Object.keys(sdk).sort() }));\n`,
153
+ `import * as fs from "node:fs/promises";\nimport * as path from "node:path";\nimport * as root from ${JSON.stringify(packageName)};\nimport * as sdk from ${JSON.stringify(`${packageName}/sdk`)};\nimport * as bus from ${JSON.stringify(`${packageName}/sdk/bus`)};\nconst required = [[root, "createAgentSession", "root"], [root, "SESSION_DIRECTORY_API_VERSION", "root"], [root, "resolveManagedSessionScope", "root"], [root, "listManagedSessionCandidates", "root"], [sdk, "createAgentSession", "sdk"], [bus, "createNotificationsExtension", "sdk/bus"], [sdk, "SESSION_DIRECTORY_API_VERSION", "sdk"], [sdk, "resolveManagedSessionScope", "sdk"], [sdk, "listManagedSessionCandidates", "sdk"]] as const;\nfor (const [module, name, subpath] of required) if (!(name in module)) throw new Error(subpath + " missing " + name);\nconst sandbox = path.join(process.cwd(), "managed-listing-smoke");\nconst cwd = path.join(sandbox, "workspace", "a-b", "c");\nconst agentDir = path.join(sandbox, "agent");\nconst sessionsRoot = path.join(agentDir, "sessions");\nawait fs.mkdir(cwd, { recursive: true });\nconst resolved = await sdk.resolveManagedSessionScope({ cwd, agentDir, sessionsRoot });\nif (resolved.kind !== "resolved") throw new Error("packed resolver failed: " + resolved.message);\nawait fs.mkdir(resolved.scope.directoryPath, { recursive: true, mode: 0o700 });\nawait fs.chmod(sessionsRoot, 0o700);\nawait fs.chmod(resolved.scope.directoryPath, 0o700);\nawait fs.writeFile(path.join(resolved.scope.directoryPath, ".gjc-managed-session-scope.v2.json"), JSON.stringify({ schemaVersion: 1, layoutVersion: 2, identityVersion: 1, platform: process.platform === "win32" ? "win32" : "posix", canonicalPath: resolved.scope.canonicalCwd, identityDigest: resolved.scope.directoryName.slice(3) }) + "\\n", { mode: 0o600 });\nconst transcriptPath = path.join(resolved.scope.directoryPath, "packed-session.jsonl");\nawait fs.writeFile(transcriptPath, JSON.stringify({ type: "session", id: "packed-session", cwd }) + "\\n", { mode: 0o600 });\nconst snapshot = async () => Promise.all((await fs.readdir(sandbox, { recursive: true })).sort().map(async name => { const pathname = path.join(sandbox, name); const stat = await fs.lstat(pathname); return [name, stat.mode, stat.size, stat.mtimeMs, stat.isFile() ? await fs.readFile(pathname, "utf8") : null]; }));\nconst before = JSON.stringify(await snapshot());\nconst listing = await sdk.listManagedSessionCandidates({ scope: resolved.scope });\nif (listing.kind !== "complete" || listing.owned.length !== 1 || listing.owned[0]?.sessionId !== "packed-session") throw new Error("packed readonly listing failed: " + JSON.stringify(listing));\nconst after = JSON.stringify(await snapshot());\nif (after !== before) throw new Error("packed readonly listing mutated the filesystem");\nconst privateSubpath = ${JSON.stringify(`${packageName}/session/internal/managed-session-scope`)};\ntry { await import(privateSubpath); throw new Error("private managed-session scope subpath resolved"); } catch (error) {\n\tif (error instanceof Error && error.message === "private managed-session scope subpath resolved") throw error;\n\tconst message = String(error);\n\tconst exportsRejected = /Package subpath .* is not defined by "exports"/.test(message);\n\tconst bunRejected = message.startsWith("ResolveMessage: Cannot find module '" + privateSubpath + "' from '") && message.endsWith("/probe.ts'");\n\tif (!exportsRejected && !bunRejected) throw new Error("private managed-session scope failed for an unexpected reason: " + message);\n}\nprocess.stdout.write(JSON.stringify({ root: Object.keys(root).sort(), sdk: Object.keys(sdk).sort() }));\n`,
164
154
  );
165
155
  await fs.appendFile(
166
156
  probePath,
167
- `\nconst rootBefore = JSON.stringify(await snapshot());\nconst rootListing = await root.listManagedSessionCandidates({ scope: resolved.scope });\nif (rootListing.kind !== "complete" || rootListing.owned.length !== listing.owned.length || rootListing.owned[0]?.sessionId !== listing.owned[0]?.sessionId || rootListing.owned[0]?.path !== listing.owned[0]?.path) throw new Error("packed root readonly listing diverged from SDK listing");\nconst rootAfter = JSON.stringify(await snapshot());\nif (rootAfter !== rootBefore) throw new Error("packed root readonly listing mutated the filesystem");\nconst bridgeClient = await import("@gajae-code/bridge-client");\nif (sdk.SdkClient !== bridgeClient.SdkClient) throw new Error("SdkClient class identity differs between sdk and bridge-client");\n`,
157
+ `\nconst rootBefore = JSON.stringify(await snapshot());\nconst rootListing = await root.listManagedSessionCandidates({ scope: resolved.scope });\nif (rootListing.kind !== "complete" || rootListing.owned.length !== listing.owned.length || rootListing.owned[0]?.sessionId !== listing.owned[0]?.sessionId || rootListing.owned[0]?.path !== listing.owned[0]?.path) throw new Error("packed root readonly listing diverged from SDK listing");\nconst rootAfter = JSON.stringify(await snapshot());\nif (rootAfter !== rootBefore) throw new Error("packed root readonly listing mutated the filesystem");\n`,
168
158
  );
169
159
  const surface = JSON.parse(run(["bun", "run", probePath], tempDir)) as Surface;
170
160
  assertExport(Object.fromEntries(surface.root.map(name => [name, true])), "createAgentSession", "root");
171
- assertExport(Object.fromEntries(surface.sdk.map(name => [name, true])), "SdkClient", "sdk");
172
161
  return { root: [...surface.root].sort(), sdk: [...surface.sdk].sort() };
173
162
  } finally {
174
163
  await fs.rm(tempDir, { recursive: true, force: true });
@@ -209,7 +209,6 @@ export const PROVENANCE_DIFF_SCOPE = [
209
209
 
210
210
  "packages/agent/src",
211
211
  "packages/ai/src",
212
- "packages/bridge-client/src",
213
212
  "packages/coding-agent/scripts/capture-sticky-viewport-showcase.ts",
214
213
  "packages/coding-agent/scripts/verify-sticky-viewport-showcase.ts",
215
214
  "packages/coding-agent/src",
@@ -25,6 +25,7 @@ export const releaseEntrypoints = [
25
25
  "./packages/stats/src/sync-worker.ts",
26
26
  "./packages/coding-agent/src/tools/browser/tab-worker-entry.ts",
27
27
  "./packages/coding-agent/src/eval/js/worker-entry.ts",
28
+ "./packages/coding-agent/src/config/atomic-yaml-patch-worker.ts",
28
29
  "./packages/natives/native/index.js",
29
30
  "./packages/coding-agent/src/sdk/bus/telegram-daemon-cli.ts",
30
31
  "./packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts",
@@ -42,6 +43,7 @@ export const devEntrypoints = [
42
43
  "../stats/src/sync-worker.ts",
43
44
  "./src/tools/browser/tab-worker-entry.ts",
44
45
  "./src/eval/js/worker-entry.ts",
46
+ "./src/config/atomic-yaml-patch-worker.ts",
45
47
  // W5b: natives has no static importer anymore (global native gate), so the
46
48
  // dev bundle must list it as an extra entrypoint like the release build or
47
49
  // runtime import("@gajae-code/natives") fails inside the compiled bunfs.
@@ -6,36 +6,38 @@ import { type Manifest, type ManifestAdapterRow, validateManifest } from "./mani
6
6
 
7
7
  const repoRoot = path.resolve(import.meta.dir, "..", "..", "..");
8
8
  const manifestPath = path.join(repoRoot, "packages/coding-agent/test/manifests/sdk-adapter-parity-v1.json");
9
+ const chatDispositionFile = "packages/coding-agent/test/sdk-adapter-dispositions.test.ts";
10
+ const mcpDispositionFile = "packages/coding-agent/test/sdk-adapter-dispositions-mcp.test.ts";
11
+ const acpDispositionFile = "packages/coding-agent/test/sdk-adapter-dispositions-acp.test.ts";
12
+ const daemonCliDispositionFile = "packages/coding-agent/test/sdk-adapter-dispositions-daemon-cli.test.ts";
9
13
  const adapterTests: Record<Adapter, string[]> = {
10
- telegram: ["packages/coding-agent/test/sdk-adapter-dispositions.test.ts"],
11
- discord: ["packages/coding-agent/test/sdk-adapter-dispositions.test.ts"],
12
- slack: ["packages/coding-agent/test/sdk-adapter-dispositions.test.ts"],
14
+ telegram: [chatDispositionFile],
15
+ discord: [chatDispositionFile],
16
+ slack: [chatDispositionFile],
13
17
  mcp: [
14
18
  "packages/coding-agent/test/sdk-mcp-adapter.test.ts",
15
19
  "packages/coding-agent/test/sdk-mcp-entrypoint-e2e.test.ts",
16
- "packages/coding-agent/test/sdk-adapter-dispositions.test.ts",
20
+ mcpDispositionFile,
17
21
  ],
18
22
  acp: [
19
23
  "packages/coding-agent/test/sdk-acp-adapter.test.ts",
20
24
  "packages/coding-agent/test/sdk-acp-two-client-race.test.ts",
21
25
  "packages/coding-agent/test/sdk-acp-provider-reconnect.test.ts",
22
- "packages/coding-agent/test/sdk-adapter-dispositions.test.ts",
26
+ acpDispositionFile,
23
27
  ],
24
28
  daemonCli: [
25
29
  "packages/coding-agent/test/sdk-daemon-cli-e2e.test.ts",
26
30
  "packages/coding-agent/test/sdk-client.test.ts",
27
- "packages/coding-agent/test/sdk-adapter-dispositions.test.ts",
31
+ daemonCliDispositionFile,
28
32
  ],
29
33
  };
30
- const dispositionTestFile = "packages/coding-agent/test/sdk-adapter-dispositions.test.ts";
34
+ const dispositionChatFile = chatDispositionFile;
31
35
  const commandFiles = [
32
36
  ...new Set([...Object.values(adapterTests).flat(), "packages/coding-agent/test/sdk-host-wiring.test.ts"]),
33
37
  ].sort();
34
38
  const commands: Manifest["commands"] = commandFiles.flatMap(file =>
35
- file === dispositionTestFile
36
- ? ["^AD-M-", "^AD-A-", "^AD-L-", "^AD-(T|D|S)-"].map(pattern => ({
37
- argv: ["bun", "test", file, "--test-name-pattern", pattern],
38
- }))
39
+ file === dispositionChatFile
40
+ ? [{ argv: ["bun", "test", file, "--test-name-pattern", "^AD-(T|D|S)-"] }]
39
41
  : [{ argv: ["bun", "test", file] }],
40
42
  );
41
43
  const required = [...commandFiles];
@@ -63,19 +65,26 @@ function adapterTestPrefix(adapter: Adapter): string {
63
65
  ? "M"
64
66
  : "A";
65
67
  }
68
+ function dispositionFileFor(adapter: Adapter): string {
69
+ if (adapter === "mcp") return mcpDispositionFile;
70
+ if (adapter === "acp") return acpDispositionFile;
71
+ if (adapter === "daemonCli") return daemonCliDispositionFile;
72
+ return chatDispositionFile;
73
+ }
66
74
  function row(adapter: Adapter, operation: (typeof OPERATIONS)[number], secret = false): ManifestAdapterRow {
67
75
  const suffix = secret ? "-secret" : "";
76
+ const testFile = dispositionFileFor(adapter);
68
77
  return {
69
78
  adapterTestId: `AD-${adapterTestPrefix(adapter)}-${operation.id}${suffix}`,
70
79
  sdkId: operation.sdkId,
71
80
  adapter,
72
81
  disposition: operation.adapterDispositions[adapter],
73
- testFile: dispositionTestFile,
82
+ testFile,
74
83
  testNamePattern: `AD-${adapterTestPrefix(adapter)}-${operation.id}${suffix}`,
75
84
  argv: [
76
85
  "bun",
77
86
  "test",
78
- dispositionTestFile,
87
+ testFile,
79
88
  "--test-name-pattern",
80
89
  `^AD-${adapterTestPrefix(adapter)}-${operation.id}${suffix}:`,
81
90
  ],
@@ -127,11 +136,17 @@ async function checkCoverage(manifest: Manifest): Promise<void> {
127
136
  throw new Error(`${row.adapterTestId} must execute its exact test-name pattern.`);
128
137
  const testPath = path.join(repoRoot, row.testFile);
129
138
  const testFile = Bun.file(testPath);
130
- if (!(await testFile.exists())) throw new Error(`${row.adapterTestId} test file does not exist: ${row.testFile}`);
139
+ if (!(await testFile.exists()))
140
+ throw new Error(`${row.adapterTestId} test file does not exist: ${row.testFile}.`);
131
141
  const testText = await testFile.text();
132
142
  // The disposition suite deliberately generates names from registry IDs. This source check
133
- // confirms its name template and the concrete row ID are both present in the registry.
134
- if (!testText.includes("AD-$" + "{adapterPrefix[adapter]}-$" + "{operation.id}"))
143
+ // confirms its name template and the concrete row ID are both present in the test source.
144
+ // Chat adapters use chatPrefix; machine adapters use adapterPrefix (issue #4475 split).
145
+ const isChat = row.adapter === "telegram" || row.adapter === "discord" || row.adapter === "slack";
146
+ const nameTemplate = isChat
147
+ ? "AD-$" + "{chatPrefix[adapter]}-$" + "{operation.id}"
148
+ : "AD-$" + "{adapterPrefix[adapter]}-$" + "{operation.id}";
149
+ if (!testText.includes(nameTemplate))
135
150
  throw new Error(`${row.adapterTestId} test name template was not found in ${row.testFile}.`);
136
151
  if (!OPERATIONS.some(operation => row.sdkId === operation.sdkId))
137
152
  throw new Error(`${row.adapterTestId} references an unknown SDK ID.`);
@@ -11,6 +11,12 @@ const inventoryPath = process.env.GJC_SDK_OPERATION_INVENTORY
11
11
 
12
12
  /** Reviewed seams deliberately excluded from the public SDK operation surface. */
13
13
  const LOCKED_EXCLUSIONS: Readonly<Record<string, string>> = {
14
+ "agent_session:getTerminalTurnEpoch":
15
+ "internal terminal-abort bus seam (epoch only), threaded via terminalAbortSeams; not a user-facing SDK control seam",
16
+ "agent_session:cancelPendingPreflightForTerminalAbort":
17
+ "internal terminal-abort bus seam, threaded via terminalAbortSeams; not a user-facing SDK control seam",
18
+ "agent_session:abortPromptAndWaitWithTerminal":
19
+ "internal terminal-abort fencing seam, threaded via terminalAbortSeams; not a user-facing SDK control seam",
14
20
  "slash_command:settings": "visual/local-only command, not a user-facing SDK control seam",
15
21
  "slash_command:theme": "visual/local-only command, not a user-facing SDK control seam",
16
22
  "slash_command:copy": "visual/local-only command, not a user-facing SDK control seam",
@@ -23,6 +29,8 @@ const LOCKED_EXCLUSIONS: Readonly<Record<string, string>> = {
23
29
  "slash_command:provider": "visual/local-only command, not a user-facing SDK control seam",
24
30
  "slash_command:logout": "visual/local-only command, not a user-facing SDK control seam",
25
31
  "slash_command:ssh": "visual/local-only command, not a user-facing SDK control seam",
32
+ "slash_command:import-session":
33
+ "local transcript-file import into a new session; no SDK operation counterpart, not a user-facing SDK control seam",
26
34
  "slash_command:drop": "visual/local-only command, not a user-facing SDK control seam",
27
35
  "slash_command:contribute-pr": "visual/local-only command, not a user-facing SDK control seam",
28
36
  "slash_command:btw": "visual/local-only command, not a user-facing SDK control seam",
@@ -31,10 +39,22 @@ const LOCKED_EXCLUSIONS: Readonly<Record<string, string>> = {
31
39
  "slash_command:exit": "visual/local-only command, not a user-facing SDK control seam",
32
40
  "slash_command:notify":
33
41
  "interactive diagnostics command; session on/off delegate to the notifications extension, not an SDK ingress seam",
42
+ "slash_command:extensions":
43
+ "interactive local customization dashboard mutates trusted local skill, hook, and MCP configuration (including filesystem import/removal); ACP and local headless cannot dispatch it, while SDK extension list/enable operations do not expose this dashboard authority",
44
+ "slash_command:credential":
45
+ "interactive session credential selector; not a credential-free public SDK operation or independent control seam",
34
46
  "slash_command:pet": "visual/local-only command, not a user-facing SDK control seam",
35
47
  "slash_command:transcript": "visual/local-only transcript viewer, not a user-facing SDK control seam",
36
48
  "slash_command:sessions": "visual/local-only sessions dashboard, not a user-facing SDK control seam",
37
49
  "agent_session:constructor": "internal accessor/plumbing, not a user-facing control seam",
50
+ "agent_session:getSessionAgentDir":
51
+ "internal session-scoped agent-directory accessor, not a user-facing SDK control seam",
52
+ "agent_session:captureTerminalAbortSteeringSnapshot":
53
+ "internal terminal-abort steering snapshot, not a user-facing SDK control seam",
54
+ "agent_session:rebindTerminalAbortSteeringSnapshot":
55
+ "internal terminal-abort steering snapshot rebind, not a user-facing SDK control seam",
56
+ "agent_session:discardTerminalAbortSteeringSnapshot":
57
+ "internal terminal-abort steering snapshot cleanup, not a user-facing SDK control seam",
38
58
  "agent_session:getConfiguredModelChainState":
39
59
  "internal model-profile transaction snapshot, not a user-facing SDK control seam",
40
60
  "agent_session:getDefaultFallbackRuntimeState":
@@ -82,6 +102,8 @@ const LOCKED_EXCLUSIONS: Readonly<Record<string, string>> = {
82
102
  "internal CLI startup-readiness fence composition, not a user-facing SDK control seam",
83
103
  "agent_session:awaitPendingContextTransformations":
84
104
  "internal context-transformation lifecycle barrier, not a user-facing SDK control seam",
105
+ "agent_session:awaitSessionSettlement":
106
+ "internal agent-event settlement barrier, not a user-facing SDK control seam",
85
107
  "agent_session:drainAsyncJobDeliveriesForAcp": "internal accessor/plumbing, not a user-facing control seam",
86
108
  "agent_session:getAsyncDeliveryStateForAcp":
87
109
  "internal ACP lifecycle quiescence plumbing, not a user-facing control seam",
@@ -217,8 +239,14 @@ const LOCKED_EXCLUSIONS: Readonly<Record<string, string>> = {
217
239
  "internal profile and fallback-chain state, not a user-facing SDK control seam",
218
240
  "agent_session:setDefaultFallbackRuntimeModel":
219
241
  "internal fallback runtime bookkeeping, not a user-facing SDK control seam",
242
+ "agent_session:setCredentialPin":
243
+ "interactive session-scoped OAuth account selector mutation behind the locked /credential and OAuth selector surfaces; the public SDK has no credential-selection operation and must not gain credential authority implicitly",
244
+ "agent_session:setCredentialAuto":
245
+ "interactive session-scoped OAuth AUTO-ranking mutation behind the locked /credential and OAuth selector surfaces; the public SDK has no credential-selection operation and must not gain credential authority implicitly",
220
246
  "agent_session:seedDefaultFallbackResolution":
221
247
  "internal fallback resolution bookkeeping, not a user-facing SDK control seam",
248
+ "agent_session:syncEagerDelegation":
249
+ "internal profile-derived eager delegation synchronization, not a user-facing SDK control seam",
222
250
  };
223
251
  /** Maps reviewed source seams to registry SDK operation IDs. */
224
252
  const SEAM_TO_SDK: Readonly<Record<string, string>> = {
@@ -18,6 +18,7 @@ const explicitTests = [
18
18
  "telegram-send-tool.test.ts",
19
19
  "telegram-onboarding-docs.test.ts",
20
20
  "lifecycle-notification-docs.test.ts",
21
+ "sdk-lifecycle-telegram-integration.test.ts",
21
22
  ];
22
23
  const requiredTests = [
23
24
  "packages/coding-agent/test/daemon-control.test.ts",
@@ -1,5 +1,6 @@
1
1
  import * as path from "node:path";
2
2
  import { toolWireSchema } from "@gajae-code/ai/utils/schema";
3
+ import { TaskTool } from "../src/task";
3
4
  import { TOOL_CATALOG } from "../src/tools/tool-catalog.generated";
4
5
 
5
6
  export interface GeneratedToolCatalogEntry {
@@ -26,6 +27,7 @@ export interface GeneratedToolCatalogEntry {
26
27
  export interface ToolCatalogGenerationOptions {
27
28
  platform?: NodeJS.Platform;
28
29
  arch?: NodeJS.Architecture;
30
+ cwd?: string;
29
31
  }
30
32
 
31
33
  type AuditedFallback = {
@@ -99,10 +101,10 @@ function makeSettings() {
99
101
  };
100
102
  }
101
103
 
102
- function makeSession(): any {
104
+ function makeSession(cwd: string = path.resolve(import.meta.dir, "../..")): any {
103
105
  const settings = makeSettings();
104
106
  return {
105
- cwd: path.resolve(import.meta.dir, "../.."),
107
+ cwd,
106
108
  hasUI: false,
107
109
  workflowGateEligible: true,
108
110
  settings,
@@ -326,7 +328,7 @@ export async function generateToolCatalogData(
326
328
  ...HIDDEN_TOOL_DESCRIPTORS,
327
329
  ...PLATFORM_EXCLUDED_TOOL_DESCRIPTORS,
328
330
  } as Record<string, any>;
329
- const session = makeSession();
331
+ const session = makeSession(options.cwd);
330
332
  const output: Record<string, GeneratedToolCatalogEntry> = {};
331
333
  for (const [name, descriptor] of Object.entries(all)) {
332
334
  let fallback: AuditedFallback | undefined;
@@ -334,7 +336,7 @@ export async function generateToolCatalogData(
334
336
  const platformExcluded = excludedOnPlatform(descriptor.metadata.platformExclusions, platform, arch);
335
337
  if (!platformExcluded) {
336
338
  try {
337
- tool = await descriptor.load(session);
339
+ tool = name === "task" ? await TaskTool.createForToolCatalog(session) : await descriptor.load(session);
338
340
  } catch (cause) {
339
341
  throw new ToolCatalogGenerationError(
340
342
  `Failed to load descriptor "${name}": ${formatCause(cause)}`,
@@ -838,43 +838,8 @@ function rpcModeInvocationViolations(file: string, contents: string): string[] {
838
838
  }
839
839
 
840
840
  function bridgeClientPackageMetadataViolation(file: string, contents: string): string | undefined {
841
- if (
842
- !file.endsWith("package.json") ||
843
- (file !== bridgeClientPackageManifestPath && !contents.includes(bridgeClientPackageName))
844
- )
845
- return undefined;
846
- try {
847
- const manifest = JSON.parse(contents) as {
848
- catalog?: Record<string, unknown>;
849
- dependencies?: Record<string, unknown>;
850
- name?: unknown;
851
- optionalDependencies?: Record<string, unknown>;
852
- peerDependencies?: Record<string, unknown>;
853
- workspaces?: { catalog?: Record<string, unknown> };
854
- };
855
- if (file === bridgeClientPackageManifestPath) {
856
- if (manifest.name !== bridgeClientPackageName)
857
- return `${file}: is not the canonical bridge-client package manifest`;
858
- if (
859
- Object.keys(manifest.dependencies ?? {}).length > 0 ||
860
- Object.keys(manifest.peerDependencies ?? {}).length > 0 ||
861
- Object.keys(manifest.optionalDependencies ?? {}).length > 0
862
- )
863
- return `${file}: canonical bridge-client package must remain runtime-dependency-free`;
864
- return undefined;
865
- }
866
- if (
867
- file === "package.json" &&
868
- (typeof manifest.catalog?.[bridgeClientPackageName] === "string" ||
869
- typeof manifest.workspaces?.catalog?.[bridgeClientPackageName] === "string")
870
- )
871
- return undefined;
872
- if (file === packageManifestPath && typeof manifest.dependencies?.[bridgeClientPackageName] === "string")
873
- return undefined;
874
- } catch {
875
- return `${file}: declares unsupported bridge-client package metadata`;
876
- }
877
-
841
+ if (!file.endsWith("package.json")) return undefined;
842
+ if (file !== bridgeClientPackageManifestPath && !contents.includes(bridgeClientPackageName)) return undefined;
878
843
  return `${file}: declares unsupported bridge-client package metadata`;
879
844
  }
880
845
 
@@ -2617,7 +2582,8 @@ async function selfTest(): Promise<void> {
2617
2582
  "packages/coding-agent/src/sdk/client/client.ts":
2618
2583
  'export { SdkClient } from "@gajae-code/bridge-client";\nexport type { SdkClientOptions } from "@gajae-code/bridge-client";\n',
2619
2584
  },
2620
- 0,
2585
+ 1,
2586
+ "declares unsupported bridge-client package metadata",
2621
2587
  );
2622
2588
  await runSelfTestFixture(
2623
2589
  {
@@ -2625,7 +2591,7 @@ async function selfTest(): Promise<void> {
2625
2591
  '{"name":"@gajae-code/bridge-client","dependencies":{"unsafe":"1.0.0"}}\n',
2626
2592
  },
2627
2593
  1,
2628
- "canonical bridge-client package must remain runtime-dependency-free",
2594
+ "declares unsupported bridge-client package metadata",
2629
2595
  );
2630
2596
  await runSelfTestFixture(
2631
2597
  {