@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
@@ -0,0 +1,13 @@
1
+ import type { AbortScope } from "../../sdk/host/control/operations";
2
+ /**
3
+ * Resolves the C04 terminal-abort scope for an ACP `session/cancel`. Client
4
+ * metadata is authoritative; the process environment is only a fallback when
5
+ * that field is absent. Both default to `"turn"` so an external client that
6
+ * ends a turn only stops that turn, matching the SDK `turn.abort` default and
7
+ * other ACP clients' cancel behavior; a client that also wants exact owned
8
+ * subagents and background tasks stopped opts in per request with
9
+ * `_meta.gjc.abortScope: "owned"` (or process-wide with
10
+ * `GJC_ACP_ABORT_SCOPE=owned`). Paseo keeps owned cancels through its provider
11
+ * config `env: { "GJC_ACP_ABORT_SCOPE": "owned" }` without source changes.
12
+ */
13
+ export declare function resolveAcpAbortScope(meta: unknown, env?: NodeJS.ProcessEnv): AbortScope;
@@ -1,4 +1,4 @@
1
- import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type AvailableCommand, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type DeleteSessionRequest, type DeleteSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
1
+ import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type AvailableCommand, type CancelNotification, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type DeleteSessionRequest, type DeleteSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
2
2
  import { type AcpProviderRegistration, type AcpReverseConnection, AcpSdkAdapter } from "../../sdk/acp";
3
3
  import { type PromptWatchdogClock } from "../../sdk/prompt-watchdog";
4
4
  import type { AcpStartupOptions } from "./startup-options";
@@ -240,6 +240,11 @@ export declare function acpSessionStateFromConfig(query: unknown, modelCatalogQu
240
240
  currentModeId: string;
241
241
  };
242
242
  };
243
+ /** Recognize a canonical ACP skill command only when it is the complete, single text prompt. */
244
+ export declare function acpSkillInvocation(blocks: PromptRequest["prompt"]): {
245
+ name: string;
246
+ args: string;
247
+ } | undefined;
243
248
  /** Convert every ACP prompt block the agent advertises without silently discarding context. */
244
249
  export declare function acpPromptPayload(blocks: PromptRequest["prompt"]): {
245
250
  text: string;
@@ -295,9 +300,7 @@ export declare class AcpAgent implements Agent {
295
300
  setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse>;
296
301
  setSessionConfigOption(params: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse>;
297
302
  prompt(params: PromptRequest): Promise<PromptResponse>;
298
- cancel(params: {
299
- sessionId: string;
300
- }): Promise<void>;
303
+ cancel(params: CancelNotification): Promise<void>;
301
304
  extMethod(method: string, params: JsonObject): Promise<JsonObject>;
302
305
  extNotification(_method: string, _params: JsonObject): Promise<void>;
303
306
  get signal(): AbortSignal;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * CustomizationDashboard — the umbrella local-customization home opened by the
3
+ * `/extensions` slash command (issue #4291).
4
+ *
5
+ * This is a standalone state model and component tree around local
6
+ * Skills/Hooks/MCPs/Import. It is intentionally NOT built on the
7
+ * provider/extension-module ExtensionDashboard; the two surfaces share only
8
+ * generic TUI primitives (Container, Text, SelectList, DynamicBorder).
9
+ *
10
+ * The scope switch is a real management boundary: each list only shows rows
11
+ * persisted at the active scope, and mutations refuse rows from the other
12
+ * scope. All dynamic text is sanitized before rendering.
13
+ *
14
+ * Layout (narrow-terminal safe):
15
+ * title: /extensions — Configure skills, hooks, and MCPs.
16
+ * scope badge (Project .gjc / Global .gjc) — `s` switches
17
+ * section tabs: Skills | Hooks | MCPs — left/right switch
18
+ * inventory rows for the active section + scope with status + provenance
19
+ * footer key hints
20
+ */
21
+ import { Container } from "@gajae-code/tui";
22
+ import { type CustomizationInventory } from "../../../customization/inventory";
23
+ import { type CustomizationSurface, type GjcScope } from "../../../customization/types";
24
+ /** Minimal settings slice the dashboard reads and writes. */
25
+ export interface CustomizationSettingsSlice {
26
+ get(key: string): unknown;
27
+ set?(key: string, value: unknown): void;
28
+ }
29
+ export declare class CustomizationDashboard extends Container {
30
+ #private;
31
+ /** Called when the dashboard wants to close (Esc / q / interrupt). */
32
+ onClose: (() => void) | undefined;
33
+ /** Called whenever the dashboard needs a re-render. */
34
+ onRequestRender: (() => void) | undefined;
35
+ /** Use `create()` — async inventory load runs before chrome construction. */
36
+ constructor(cwd: string, settings: CustomizationSettingsSlice | undefined, homeDir: string | undefined);
37
+ static create(cwd: string, settings?: CustomizationSettingsSlice, homeDir?: string): Promise<CustomizationDashboard>;
38
+ get scope(): GjcScope;
39
+ get section(): CustomizationSurface;
40
+ /** Current inventory snapshot (test-visible). */
41
+ get inventory(): CustomizationInventory;
42
+ handleInput(keyData: string): void;
43
+ render(width: number): string[];
44
+ }
@@ -0,0 +1,21 @@
1
+ import { Container } from "@gajae-code/tui";
2
+ import type { GjcScope, ImportPreview, ImportResult } from "../../../customization/types";
3
+ type WizardStep = "product" | "sourceScope" | "surfaces" | "collision" | "preview" | "result";
4
+ export declare class ImportWizard extends Container {
5
+ #private;
6
+ /** Called when the wizard finishes or is cancelled; `applied` is true only when an import succeeded. */
7
+ onClose: ((applied: boolean) => void) | undefined;
8
+ onRequestRender: (() => void) | undefined;
9
+ constructor(cwd: string, destinationScope: GjcScope, homeDir?: string);
10
+ /** Current step (test-visible). */
11
+ get step(): WizardStep;
12
+ /** Last built preview DTO — redacted and serialization-safe (test-visible). */
13
+ get preview(): ImportPreview | null;
14
+ /** Last apply result (test-visible). */
15
+ get result(): ImportResult | null;
16
+ /** Whether the wizard currently shows an attached selection list (test-visible). */
17
+ get hasVisibleSelector(): boolean;
18
+ handleInput(keyData: string): void;
19
+ render(width: number): string[];
20
+ }
21
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./customization-dashboard";
@@ -0,0 +1,9 @@
1
+ import { type Component } from "@gajae-code/tui";
2
+ /** Text whose styling is resolved at render time so live theme previews recolor open overlays. */
3
+ export declare class DynamicThemeText implements Component {
4
+ #private;
5
+ private readonly getText;
6
+ constructor(getText: () => string);
7
+ invalidate(): void;
8
+ render(width: number): string[];
9
+ }
@@ -2,11 +2,7 @@ import { type Component, type Container, type PetMode, type PetSkinId, type TUI
2
2
  import type { CustomEditor } from "./custom-editor";
3
3
  /** Re-exported from the tui skin registry so widget-relative imports stay valid. */
4
4
  export type { PetMode, PetSkinId };
5
- /**
6
- * Wraps the composer editor, reserving a right-side area beside it where the
7
- * real-pixel pet is drawn. The editor just renders narrower; the pet pixels
8
- * are emitted separately as an absolute-positioned overlay.
9
- */
5
+ /** Reserve a right-side area beside the composer where the pixel pet is drawn. */
10
6
  export declare class PetFramedEditor implements Component {
11
7
  #private;
12
8
  constructor(editor: CustomEditor);
@@ -15,20 +11,7 @@ export declare class PetFramedEditor implements Component {
15
11
  invalidate(): void;
16
12
  render(width: number): string[];
17
13
  }
18
- /**
19
- * The gajae pet: a 16x16 real-pixel sprite living in a reserved area beside
20
- * the composer. It is nearest-neighbor scaled to the two terminal rows occupied
21
- * by an empty one-line composer and lifted one row so its feet meet the input
22
- * box's bottom edge.
23
- *
24
- * Rendering has two paths that share one payload builder:
25
- * - a post-render emitter re-draws the sprite after every TUI write (line
26
- * renders clear the pet cells, so the overlay must be re-applied), and
27
- * - frame advances write the payload directly to the terminal, because the
28
- * TUI skips writes entirely when no component line changed.
29
- *
30
- * Requires a sixel- or kitty-graphics terminal (`pixelProtocol()`).
31
- */
14
+ /** The gajae pet pixel sprite and protocol-specific rendering lifecycle. */
32
15
  export declare class GajaePetWidget {
33
16
  #private;
34
17
  constructor(options: {
@@ -37,24 +20,19 @@ export declare class GajaePetWidget {
37
20
  editorContainer: Container;
38
21
  floorContainer: Container;
39
22
  isWorking: () => boolean;
40
- /** Rows rendered below the composer box (pet floor + hook widgets). */
41
23
  getComposerBottomOffset: () => number;
24
+ syncManagedItermCursor: (row: number, column: number) => Promise<boolean>;
42
25
  forcePixelProtocol?: "sixel" | "kitty";
43
- /** Random [min, max] ms between auto-flexes; null disables. */
44
26
  autoFlexGapMs?: [number, number] | null;
45
27
  });
46
- /** Protocol available for the real-pixel pet, if any. */
47
- static pixelProtocol(): "sixel" | "kitty" | null;
28
+ static pixelProtocol(): "sixel" | "kitty" | "iterm" | null;
48
29
  get mode(): PetMode;
49
30
  get isFlexing(): boolean;
50
31
  setMode(mode: PetMode): void;
51
- /** Live preview during a selector: change the sprite without re-mounting the
52
- * composer editor (that would tear down the open overlay). After a short idle
53
- * eye-roll it fires the signature burst once (RedGajae flex, BlueGajae para-para
54
- * then sob) so the selector demos the animation instead of waiting the random gap. */
32
+ suspendItermCapability(): Promise<void>;
55
33
  previewMode(mode: PetMode): void;
56
34
  commitPreviewMode(mode: PetMode): void;
57
35
  dispose(): void;
58
- /** Re-mount the composer editor (framed when a skin is active) after an overlay. */
36
+ disposeAsync(): Promise<void>;
59
37
  remountComposer(): void;
60
38
  }
@@ -77,6 +77,7 @@ export declare class IrcSplitViewComponent implements ViewportAnchorProvider {
77
77
  private readonly ledger;
78
78
  private readonly componentTheme;
79
79
  constructor(leftPane: Component, ledger: IrcObservationLedger, componentTheme: IrcSidebarThemeSource);
80
+ getRenderRevision(): bigint;
80
81
  get visible(): boolean;
81
82
  effectiveSidebarVisible(width?: number): boolean;
82
83
  setVisible(visible: boolean): void;
@@ -0,0 +1,122 @@
1
+ export declare const PET_CAPABILITY_DRAIN_MAX_MS = 100;
2
+ export declare const PET_CAPABILITY_QUIESCENCE_MS = 25;
3
+ export declare const PET_CAPABILITY_QUERY_TIMEOUT_MS = 1000;
4
+ export declare const PET_TOPOLOGY_POLL_MS = 250;
5
+ export type PetTransportMode = "direct" | "managed";
6
+ export type PetUnavailableReason = "not-iterm2" | "tty-unavailable" | "missing-f" | "invalid-f" | "probe-timeout" | "topology-ineligible" | "topology-lost" | "zero-client-recovery" | "cleanup-failed";
7
+ export type PetTransportAvailability = Readonly<{
8
+ available: boolean;
9
+ mode: PetTransportMode;
10
+ reason?: PetUnavailableReason;
11
+ epoch: number;
12
+ }>;
13
+ export type PetTransportClock = Readonly<{
14
+ now(): number;
15
+ setTimeout(callback: () => void, ms: number): unknown;
16
+ clearTimeout(handle: unknown): void;
17
+ }>;
18
+ export type PetTransportInput = Readonly<{
19
+ drain(maxMs: number, quiescenceMs: number): Promise<void>;
20
+ onData(callback: (data: Uint8Array | string) => PetInputResult | undefined): () => void;
21
+ }>;
22
+ export type PetInputResult = Readonly<{
23
+ consume?: true;
24
+ data?: string;
25
+ }>;
26
+ export type NativePetUi = Readonly<{
27
+ drainPetProbeInput?(maxMs: number, quiescenceMs: number): Promise<void>;
28
+ drainInput(maxMs: number, quiescenceMs: number): Promise<void>;
29
+ addInputListener(callback: (data: string | Uint8Array) => unknown): () => void;
30
+ submitTerminalOutput(request: Readonly<{
31
+ operation: Readonly<{
32
+ type: "raster-probe";
33
+ bytes: Uint8Array;
34
+ }>;
35
+ }>): Promise<Readonly<{
36
+ status?: string;
37
+ written?: number;
38
+ }>>;
39
+ notifyTerminalLifecycle(event: Readonly<{
40
+ kind: "availability-restored" | "explicit-cleanup";
41
+ source: "transport";
42
+ terminalGeneration: number;
43
+ }>): Promise<unknown>;
44
+ readonly terminalGeneration: number;
45
+ }>;
46
+ export type PetTransportOutput = Readonly<{
47
+ write(bytes: Uint8Array): Promise<Readonly<{
48
+ status: "written" | "failed";
49
+ }>>;
50
+ notifyLifecycle?(event: Readonly<{
51
+ kind: "availability-restored" | "explicit-cleanup";
52
+ terminalGeneration: number;
53
+ }>): Promise<unknown>;
54
+ }>;
55
+ export type PetTmuxResult = Readonly<{
56
+ status: number;
57
+ stdout: string;
58
+ stderr?: string;
59
+ }>;
60
+ export type PetTmuxRunner = (argv: readonly string[]) => Promise<PetTmuxResult | string>;
61
+ export type PetTmuxTopology = Readonly<{
62
+ clients: number;
63
+ paneId?: string;
64
+ ownedPaneId?: string;
65
+ clientId?: string;
66
+ clientVersion?: string;
67
+ }>;
68
+ export declare function hasItermFileCapability(v: Uint8Array | string): boolean;
69
+ export declare function consumeCapabilityInput(callback: (data: Uint8Array | string) => void): (data: string | Uint8Array) => PetInputResult | undefined;
70
+ export declare function capabilityProbe(): NodeJS.NonSharedUint8Array;
71
+ export declare function isItermCandidate(env?: NodeJS.ProcessEnv, tty?: boolean): boolean;
72
+ export declare function createNativePetTransport(o: {
73
+ ui: NativePetUi;
74
+ env?: NodeJS.ProcessEnv;
75
+ topology?: () => Promise<PetTmuxTopology>;
76
+ }): ItermPetTransport | undefined;
77
+ export declare class ItermPetTransport {
78
+ #private;
79
+ constructor(o: Readonly<{
80
+ mode?: PetTransportMode;
81
+ ttyCandidate?: boolean;
82
+ clock: PetTransportClock;
83
+ input: PetTransportInput;
84
+ output: PetTransportOutput;
85
+ tmux?: PetTmuxRunner;
86
+ ownedPaneId?: string;
87
+ paneId?: string;
88
+ sessionTarget?: string;
89
+ topology?: () => Promise<PetTmuxTopology>;
90
+ expectedClientId?: string;
91
+ }>);
92
+ get availability(): {
93
+ available: boolean;
94
+ mode: PetTransportMode;
95
+ reason: PetUnavailableReason | undefined;
96
+ epoch: number;
97
+ };
98
+ refreshManagedClient(row: number, column: number): Promise<boolean>;
99
+ subscribe(cb: (a: PetTransportAvailability) => void): () => boolean;
100
+ probe(): Promise<Readonly<{
101
+ available: boolean;
102
+ mode: PetTransportMode;
103
+ reason?: PetUnavailableReason;
104
+ epoch: number;
105
+ }>>;
106
+ retry(): Promise<Readonly<{
107
+ available: boolean;
108
+ mode: PetTransportMode;
109
+ reason?: PetUnavailableReason;
110
+ epoch: number;
111
+ }>>;
112
+ revoke(reason?: PetUnavailableReason): Promise<PetTransportAvailability>;
113
+ inspectManagedTopology(): Promise<Readonly<{
114
+ available: boolean;
115
+ mode: PetTransportMode;
116
+ reason?: PetUnavailableReason;
117
+ epoch: number;
118
+ }>>;
119
+ startManagedPolling(): void;
120
+ stopManagedPolling(): void;
121
+ dispose(): Promise<void>;
122
+ }
@@ -1,16 +1,22 @@
1
+ import type { AuthCredentialSelector, CredentialRemovalTarget } from "@gajae-code/ai/core";
1
2
  import { Container } from "@gajae-code/tui";
2
3
  import type { AuthStorage } from "../../session/auth-storage";
3
4
  import type { ImportableCredential } from "../../setup/credential-import";
4
- /**
5
- * Component that renders an OAuth provider selector.
6
- */
5
+ export interface OAuthSelectorAccountOptions {
6
+ accountProviderId?: string;
7
+ onAccountSelect?: (selector: AuthCredentialSelector) => void | Promise<void>;
8
+ onAutoSelect?: () => void | Promise<void>;
9
+ onAddAccount?: () => void | Promise<void>;
10
+ onAccountRemove?: (targets: readonly CredentialRemovalTarget[]) => void | Promise<void>;
11
+ }
12
+ /** Component that renders an OAuth provider selector or a provider-scoped account selector. */
7
13
  export declare class OAuthSelectorComponent extends Container {
8
14
  #private;
9
15
  constructor(mode: "login" | "logout", authStorage: AuthStorage, onSelect: (providerId: string) => void, onCancel: () => void, options?: {
10
16
  validateAuth?: (providerId: string) => Promise<boolean>;
11
17
  requestRender?: () => void;
12
18
  externalCredentialCandidates?: ImportableCredential[];
13
- });
19
+ } & Partial<OAuthSelectorAccountOptions>);
14
20
  stopValidation(): void;
15
21
  dispose(): void;
16
22
  handleInput(keyData: string): void;
@@ -1,34 +1,20 @@
1
1
  import { type SelectItem } from "@gajae-code/tui";
2
- export type PetPixelProtocol = "sixel" | "kitty";
2
+ import type { PetTransportAvailability } from "./iterm-pet-transport";
3
+ export type PetPixelProtocol = "sixel" | "kitty" | "iterm";
3
4
  export declare const PET_UNAVAILABLE_DESCRIPTION = "Unavailable: requires compatible Kitty or Sixel overlay rendering";
4
5
  export declare const PET_SAVED_UNAVAILABLE_DESCRIPTION = "Saved, unavailable \u2014 requires compatible Kitty or Sixel overlay rendering";
5
6
  export declare const PET_UNAVAILABLE_WARNING = "\u26A0 Pets aren\u2019t available in this terminal. Its image support isn\u2019t compatible with Gajae Pet\u2019s overlay rendering yet. Try Kitty, Ghostty, WezTerm, or a terminal with compatible Sixel support.";
6
7
  export declare function getPetUnavailableWarning(env?: NodeJS.ProcessEnv): string;
8
+ export declare function subscribeVerifiedItermPetAvailability(callback: (availability: PetTransportAvailability | undefined) => void): () => void;
9
+ export declare function setVerifiedItermPetAvailability(availability: PetTransportAvailability | undefined): void;
10
+ export declare function getItermPetAvailability(): PetTransportAvailability | undefined;
11
+ export declare function getVerifiedItermPetAvailability(): PetTransportAvailability | undefined;
12
+ export declare function getItermPetUnavailableReason(): string | undefined;
7
13
  export declare function getPetPixelProtocol(): PetPixelProtocol | null;
8
14
  export declare function isPetAvailable(): boolean;
9
15
  export declare function createPetSelectItems(options: ReadonlyArray<SelectItem>, currentValue: string, available: boolean): SelectItem[];
10
- /**
11
- * Grace period before declaring the terminal pet-incapable at startup. The
12
- * asynchronous Sixel capability probe starts inside `TUI.start()` and answers
13
- * within its own 250 ms deadline; this margin covers probe scheduling so a
14
- * supported terminal is never told it is incompatible while the probe is
15
- * still in flight.
16
- */
17
16
  export declare const PET_CAPABILITY_SETTLE_MS = 1000;
18
- /**
19
- * Whether the asynchronous startup Sixel capability probe may still enable
20
- * graphics for this session, meaning current unavailability is not final.
21
- */
22
17
  export declare function isPetCapabilityProbePending(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): boolean;
23
- /**
24
- * Deliver the pet-unavailable startup warning only once the capability
25
- * question is settled. With no probe pending, unavailability is final and
26
- * `onUnavailable` fires immediately. While a probe may still enable
27
- * graphics, the warning is deferred: a protocol-change event cancels it (the
28
- * saved pet re-applies through the existing subscription), and only the
29
- * settle deadline passing with the terminal still unavailable emits it.
30
- * Returns a disposer that cancels the pending decision.
31
- */
32
18
  export declare function warnWhenPetCapabilitySettled(options: {
33
19
  probePending: boolean;
34
20
  isAvailable?: () => boolean;
@@ -52,6 +52,11 @@ export interface SettingsCallbacks {
52
52
  onThemePreview?: (theme: string) => void | Promise<void>;
53
53
  /** Called to restore the rendered theme when theme settings preview is cancelled */
54
54
  onThemePreviewCancel?: (theme: string) => void | Promise<void>;
55
+ /**
56
+ * Atomically apply and persist a theme selection. Returns false when the
57
+ * candidate could not be loaded, leaving the submenu open.
58
+ */
59
+ onThemeCommit?: (path: "theme.dark" | "theme.light", theme: string, previousTheme: string) => Promise<boolean>;
55
60
  /** Called to live-preview the gajae pet skin while browsing the pet setting. */
56
61
  onPetPreview?: (mode: string) => void;
57
62
  /**
@@ -1,5 +1,9 @@
1
1
  import { type RunGh } from "../../../utils/gh";
2
- export declare function lookupCurrentPr(runGh?: RunGh): Promise<{
2
+ type CurrentPr = {
3
3
  number: number;
4
4
  url: string;
5
- } | null>;
5
+ } | null;
6
+ export declare function lookupCurrentPr(runGh?: RunGh): Promise<CurrentPr>;
7
+ export declare function lookupCurrentPrCached(cacheKey: string, runGh?: RunGh, now?: () => number): Promise<CurrentPr>;
8
+ export declare function clearCurrentPrCache(): void;
9
+ export {};
@@ -2,7 +2,7 @@ import { type Component, type TUI } from "@gajae-code/tui";
2
2
  import { KeybindingsManager } from "../../config/keybindings";
3
3
  import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetContent, ExtensionWidgetOptions, TerminalInputHandler } from "../../extensibility/extensions";
4
4
  import { type Theme } from "../../modes/theme/theme";
5
- import { type InteractiveModeContext } from "../../modes/types";
5
+ import type { InteractiveModeContext } from "../../modes/types";
6
6
  export declare class ExtensionUiController {
7
7
  #private;
8
8
  private ctx;
@@ -5,7 +5,7 @@ import { type InteractiveModeContext, type OAuthSelectorOptions } from "../../mo
5
5
  import { getCurrentTelegramActivationMarker, getNotificationConfig, maskToken } from "../../sdk/bus/config";
6
6
  import { type NotificationProviderRuntimeAuthority, proposedTelegramIdentity, reconcileCommittedTelegramConfiguration, removeTelegramConfiguration, saveTelegramInactive } from "../../sdk/bus/notification-orchestration";
7
7
  import { buildNotificationStatusReport, checkNotificationHealth, recoverNotifications, sanitizeDiagnostic, sendNotificationTest } from "../../sdk/bus/notification-service";
8
- import { ensureTelegramDaemonRunningDetailed, readNotificationRootRegistration, resolveTelegramSetupPreflight, unregisterNotificationRoot } from "../../sdk/bus/telegram-daemon";
8
+ import { ensureTelegramDaemonRunningDetailed, resolveTelegramSetupPreflight } from "../../sdk/bus/telegram-daemon";
9
9
  import { runTelegramSetup } from "../../sdk/bus/telegram-setup";
10
10
  import { type CredentialAutoImportStateStore } from "../../setup/credential-auto-import";
11
11
  import { type CommandPaletteAction } from "../components/command-palette";
@@ -51,13 +51,6 @@ export interface NotificationsEditorOperationDependencies {
51
51
  reconcileCommittedTelegramConfiguration: typeof reconcileCommittedTelegramConfiguration;
52
52
  saveTelegramInactive: typeof saveTelegramInactive;
53
53
  removeTelegramConfiguration: typeof removeTelegramConfiguration;
54
- readNotificationRootRegistration: typeof readNotificationRootRegistration;
55
- unregisterNotificationRoot: typeof unregisterNotificationRoot;
56
- stopTelegramDaemonIfRootRegistryFenceMatches(input: {
57
- settings: Settings;
58
- registryFingerprint: string;
59
- stop: () => Promise<TelegramDaemonStopResult>;
60
- }): Promise<boolean>;
61
54
  reloadTelegramDaemon(settings: Settings): Promise<{
62
55
  ok: boolean;
63
56
  message: string;
@@ -103,6 +96,12 @@ export declare class SelectorController {
103
96
  * Replaces /status with a unified view of all providers and extensions.
104
97
  */
105
98
  showExtensionsDashboard(): Promise<void>;
99
+ /**
100
+ * Show the `/extensions` umbrella local-customization dashboard (skills,
101
+ * hooks, MCPs, import) — a separate surface from the provider-focused
102
+ * Extension Control Center above (issue #4291).
103
+ */
104
+ showCustomizationDashboard(): Promise<void>;
106
105
  /**
107
106
  * Show the Agent Control Center dashboard.
108
107
  */
@@ -7,7 +7,7 @@ interface SttEditor {
7
7
  }
8
8
  interface SttUi {
9
9
  getShowHardwareCursor(): boolean;
10
- requestRender(): void;
10
+ requestLayoutRender(source?: string): void;
11
11
  setShowHardwareCursor(enabled: boolean): void;
12
12
  }
13
13
  export interface SttModeContext {
@@ -261,6 +261,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
261
261
  showPetSelector(): void;
262
262
  showHistorySearch(): Promise<void>;
263
263
  showExtensionsDashboard(): void;
264
+ showCustomizationDashboard(): void;
264
265
  showAgentsDashboard(): void;
265
266
  showModelSelector(options?: {
266
267
  temporaryOnly?: boolean;
@@ -526,6 +526,124 @@ export declare const defaultThemes: {
526
526
  preset: string;
527
527
  };
528
528
  };
529
+ ouroboros: {
530
+ $schema: string;
531
+ name: string;
532
+ vars: {
533
+ cyan: string;
534
+ blue: string;
535
+ green: string;
536
+ red: string;
537
+ yellow: string;
538
+ gray: string;
539
+ dimGray: string;
540
+ darkGray: string;
541
+ accent: string;
542
+ selectedBg: string;
543
+ userMsgBg: string;
544
+ toolPendingBg: string;
545
+ toolSuccessBg: string;
546
+ toolErrorBg: string;
547
+ customMsgBg: string;
548
+ abyss: string;
549
+ deepNavy: string;
550
+ mantle: string;
551
+ surface: string;
552
+ surfaceBright: string;
553
+ ouroTeal: string;
554
+ serpentGreen: string;
555
+ petLime: string;
556
+ ritualGold: string;
557
+ eyeGold: string;
558
+ coolScale: string;
559
+ foam: string;
560
+ mutedScale: string;
561
+ dimScale: string;
562
+ dangerRed: string;
563
+ diffRemovalRed: string;
564
+ };
565
+ colors: {
566
+ accent: string;
567
+ border: string;
568
+ borderAccent: string;
569
+ borderMuted: string;
570
+ success: string;
571
+ error: string;
572
+ warning: string;
573
+ muted: string;
574
+ dim: string;
575
+ text: string;
576
+ thinkingText: string;
577
+ selectedBg: string;
578
+ userMessageBg: string;
579
+ userMessageText: string;
580
+ customMessageBg: string;
581
+ customMessageText: string;
582
+ customMessageLabel: string;
583
+ toolPendingBg: string;
584
+ toolSuccessBg: string;
585
+ toolErrorBg: string;
586
+ toolTitle: string;
587
+ toolOutput: string;
588
+ mdHeading: string;
589
+ mdLink: string;
590
+ mdLinkUrl: string;
591
+ mdCode: string;
592
+ mdCodeBlock: string;
593
+ mdCodeBlockBorder: string;
594
+ mdQuote: string;
595
+ mdQuoteBorder: string;
596
+ mdHr: string;
597
+ mdListBullet: string;
598
+ toolDiffAdded: string;
599
+ toolDiffRemoved: string;
600
+ toolDiffContext: string;
601
+ syntaxComment: string;
602
+ syntaxKeyword: string;
603
+ syntaxFunction: string;
604
+ syntaxVariable: string;
605
+ syntaxString: string;
606
+ syntaxNumber: string;
607
+ syntaxType: string;
608
+ syntaxOperator: string;
609
+ syntaxPunctuation: string;
610
+ thinkingOff: string;
611
+ thinkingMinimal: string;
612
+ thinkingLow: string;
613
+ thinkingMedium: string;
614
+ thinkingHigh: string;
615
+ thinkingXhigh: string;
616
+ bashMode: string;
617
+ statusLineBg: string;
618
+ statusLineSep: string;
619
+ statusLineModel: string;
620
+ statusLinePath: string;
621
+ statusLineGitClean: string;
622
+ statusLineGitDirty: string;
623
+ statusLineContext: string;
624
+ statusLineSpend: string;
625
+ statusLineStaged: string;
626
+ statusLineDirty: string;
627
+ statusLineUntracked: string;
628
+ statusLineOutput: string;
629
+ statusLineCost: string;
630
+ statusLineSubagents: string;
631
+ pythonMode: string;
632
+ };
633
+ export: {
634
+ pageBg: string;
635
+ cardBg: string;
636
+ infoBg: string;
637
+ };
638
+ symbols: {
639
+ preset: string;
640
+ overrides: {
641
+ "icon.pi": string;
642
+ "status.running": string;
643
+ "md.bullet": string;
644
+ };
645
+ };
646
+ };
529
647
  "red-claw": {
530
648
  $schema: string;
531
649
  name: string;
@@ -302,6 +302,7 @@ export interface InteractiveModeContext {
302
302
  showPetSelector(): void;
303
303
  showHistorySearch(): Promise<void>;
304
304
  showExtensionsDashboard(): void;
305
+ showCustomizationDashboard(): void;
305
306
  showAgentsDashboard(): void;
306
307
  showModelSelector(options?: {
307
308
  temporaryOnly?: boolean;
@@ -6,6 +6,16 @@ import type { InteractiveModeContext } from "../types";
6
6
  * `AgentSession.sendUserMessage` (text parts joined with "\n") so the resulting
7
7
  * text matches the eventual user `message_start` payload.
8
8
  */
9
+ /**
10
+ * Validate extension `sendUserMessage` content at the owning interactive
11
+ * boundary, before session delivery and UI bookkeeping. Returns a typed
12
+ * `invalid_input` Error when the content container or any array element is
13
+ * absent/null/malformed — exactly the shapes that would make
14
+ * `normalizeInjectedUserContent`'s `for-of` dereference (`part.type`) throw an
15
+ * untyped TypeError synchronously before the caller's `send.catch` is attached
16
+ * (unhandled rejection → resident crash).
17
+ */
18
+ export declare function extensionUserMessageContentError(content: string | (TextContent | ImageContent)[]): Error | undefined;
9
19
  export declare function normalizeInjectedUserContent(content: string | (TextContent | ImageContent)[]): {
10
20
  text: string;
11
21
  images: ImageContent[];