@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
@@ -1,163 +0,0 @@
1
- import { SDK_STATE_VERSION } from "../broker/state-version";
2
- import { type ElevationOperation } from "./digest";
3
- import { type ElevationAnswerAuthority, type ElevationClaimIdentity, type ElevationDispatchOutcome, type ElevationDispatchReceipt } from "./dispatch-receipt";
4
- import { type BrokerOwnerPrincipal, classifyProcessIncarnationLiveness } from "./owner";
5
- /**
6
- * Broker-owned elevation grant ledger.
7
- *
8
- * Durable state machine (per elevation request):
9
- * `requested -> granted -> claimed -> dispatched(outcome)`; terminal
10
- * `denied`/`expired`/`misused`/`target_unavailable`; crash truth
11
- * `consumed` (claimed but outcome unknown). Grants are single-use: the claim
12
- * CAS consumes the grant before dispatch, and a crash between consume and
13
- * dispatch is replayed truthfully as `consumed` with outcome `unknown`
14
- * (retry requires a new grant — fail closed).
15
- *
16
- * All mutations and reads serialize on one elevation-local
17
- * `withFileLock` transaction covering grants (`grants.jsonl`), dispatch
18
- * receipts (`receipts.jsonl`), the issue index (`index.json`), and the
19
- * audit trail (`audit.jsonl`), so a claim, its receipt, and the issue
20
- * sequence commit together.
21
- *
22
- * The answer boundary is internal operator-only: there is no public
23
- * `elevation.answer` operation; answers are admitted only from the internal
24
- * operator attestation, so requester self-approval is impossible by
25
- * construction.
26
- */
27
- export type ElevationGrantState = "requested" | "granted" | "claimed" | "dispatched" | "consumed" | "denied" | "expired" | "misused" | "target_unavailable";
28
- export interface ElevationSessionIdentity {
29
- sessionId: string;
30
- /** Exact endpoint state root bound at issue time; never the repo root. */
31
- endpointStateRoot: string;
32
- endpointGeneration: number;
33
- endpointIncarnation: string;
34
- }
35
- /** Audit-only requester binding; never an identity claim. */
36
- export interface ElevationRequester {
37
- source: "broker_connection";
38
- connectionId: string;
39
- }
40
- export interface ElevationGrantRecord {
41
- version: typeof SDK_STATE_VERSION;
42
- /** Durable correlation ID; UUID, path-safe. */
43
- elevationRequestId: string;
44
- /** Monotonic path-safe issue sequence, allocated under the ledger lock. */
45
- issueIndex: number;
46
- state: ElevationGrantState;
47
- operation: ElevationOperation;
48
- requestDigest: string;
49
- sessionIdentity: ElevationSessionIdentity;
50
- principal: BrokerOwnerPrincipal;
51
- requester: ElevationRequester;
52
- requestedAt: number;
53
- expiresAt: number;
54
- outcome?: ElevationDispatchOutcome;
55
- ts: number;
56
- }
57
- export type ElevationErrorCode = "not_found" | "invalid_input" | "idempotency_conflict" | "grant_spent" | "elevation_claim_in_progress" | "elevation_required" | "elevation_unavailable" | "elevation_not_required" | "endpoint_stale" | "target_unavailable" | "expired" | "misused" | "duplicate_answer" | "terminal_uncertain" | (string & {});
58
- export type ElevationResult<T> = {
59
- ok: true;
60
- value: T;
61
- } | {
62
- ok: false;
63
- error: {
64
- code: ElevationErrorCode;
65
- message: string;
66
- };
67
- };
68
- export interface ElevationIssueParams {
69
- /** Optional caller-supplied correlation ID for idempotent retry; the broker generates a UUID otherwise. */
70
- elevationRequestId?: string;
71
- operation: ElevationOperation;
72
- input: Record<string, unknown>;
73
- sessionIdentity: ElevationSessionIdentity;
74
- principal: BrokerOwnerPrincipal;
75
- requester: ElevationRequester;
76
- expiresInMs?: number;
77
- }
78
- export interface ElevationIssueValue {
79
- replay: boolean;
80
- elevationRequestId: string;
81
- issueIndex: number;
82
- requestDigest: string;
83
- state: ElevationGrantState;
84
- requestedAt: number;
85
- expiresAt: number;
86
- grant: ElevationGrantRecord;
87
- }
88
- export interface ElevationAnswerParams {
89
- elevationRequestId: string;
90
- answer: "approve" | "deny";
91
- /** Digest the answering surface presented from the gate payload. */
92
- presentedDigest: string;
93
- /** Broker-owner principal attesting the answer authority. */
94
- principal: BrokerOwnerPrincipal;
95
- answerer: ElevationAnswerAuthority;
96
- /** Current broker-resolved target identity; undefined means the session is unreachable. */
97
- currentSessionIdentity?: ElevationSessionIdentity;
98
- }
99
- export type ElevationAnswerOutcome = "granted" | "denied" | "expired" | "misused" | "target_unavailable" | "duplicate_answer";
100
- export interface ElevationAnswerValue {
101
- outcome: ElevationAnswerOutcome;
102
- grant: ElevationGrantRecord;
103
- }
104
- export interface ElevationClaimParams {
105
- elevationRequestId: string;
106
- claimIdentity: ElevationClaimIdentity;
107
- /** Current broker-resolved target identity; undefined means the session is unreachable. */
108
- currentSessionIdentity?: ElevationSessionIdentity;
109
- }
110
- export interface ElevationClaimValue {
111
- grant: ElevationGrantRecord;
112
- receipt: ElevationDispatchReceipt;
113
- }
114
- export interface ElevationDispatchParams {
115
- elevationRequestId: string;
116
- dispatchIdentity: ElevationClaimIdentity;
117
- outcome: ElevationDispatchOutcome;
118
- }
119
- export interface ElevationDispatchValue {
120
- grant: ElevationGrantRecord;
121
- receipt: ElevationDispatchReceipt;
122
- }
123
- export interface ElevationReadValue {
124
- grant: ElevationGrantRecord;
125
- receipt?: ElevationDispatchReceipt;
126
- }
127
- export interface ElevationListValue {
128
- grants: ElevationReadValue[];
129
- }
130
- export interface ElevationLedgerOptions {
131
- /** Defaults to the GJC_SDK_ELEVATION_ENABLED environment flag. */
132
- enabled?: boolean;
133
- /** Request lifetime before the grant expires. */
134
- ttlMs?: number;
135
- /** Injectable clock. */
136
- now?: () => number;
137
- /**
138
- * Injectable tri-state process-incarnation liveness classifier (defaults to
139
- * `classifyProcessIncarnationLiveness`). Test seam for crash-state replay:
140
- * "unknown" must always fail closed as `elevation_claim_in_progress`.
141
- */
142
- classifyLiveness?: typeof classifyProcessIncarnationLiveness;
143
- }
144
- declare function isElevationOperation(value: unknown): value is ElevationOperation;
145
- declare function isElevationGrantRecord(value: unknown): value is ElevationGrantRecord;
146
- export declare class ElevationLedger {
147
- #private;
148
- constructor(agentDir: string, options?: ElevationLedgerOptions);
149
- get warnings(): readonly string[];
150
- open(): Promise<this>;
151
- assertSupportedStateVersions(): Promise<void>;
152
- issue(params: ElevationIssueParams): Promise<ElevationResult<ElevationIssueValue>>;
153
- answer(params: ElevationAnswerParams): Promise<ElevationResult<ElevationAnswerValue>>;
154
- claim(params: ElevationClaimParams): Promise<ElevationResult<ElevationClaimValue>>;
155
- dispatch(params: ElevationDispatchParams): Promise<ElevationResult<ElevationDispatchValue>>;
156
- /** Pure read without reconciliation writes; used before actions. */
157
- get(elevationRequestId: string): Promise<ElevationResult<ElevationReadValue>>;
158
- /** Truthful read: reconciles expiry and crash-state claims before returning. */
159
- resolve(elevationRequestId: string, claimIdentity: ElevationClaimIdentity): Promise<ElevationResult<ElevationReadValue>>;
160
- /** Truthful listing: reconciles every grant before returning. */
161
- list(claimIdentity: ElevationClaimIdentity): Promise<ElevationResult<ElevationListValue>>;
162
- }
163
- export { isElevationGrantRecord, isElevationOperation };
@@ -1,48 +0,0 @@
1
- /**
2
- * Broker-owner principal.
3
- *
4
- * The elevation authority is the broker itself under the existing loopback
5
- * trust model: one local OS-user/broker authority derived entirely from
6
- * broker-owned state, never from caller input. `agentDirUid` is the uid that
7
- * owns the agent directory, `brokerPid`/`brokerIncarnation` identify the
8
- * broker process tenure so a restarted broker cannot attest the same
9
- * authority.
10
- */
11
- export interface BrokerOwnerPrincipal {
12
- kind: "broker_owner";
13
- owner: {
14
- agentDirUid: number;
15
- brokerPid: number;
16
- brokerIncarnation: string;
17
- };
18
- }
19
- export declare function isBrokerOwnerPrincipal(value: unknown): value is BrokerOwnerPrincipal;
20
- export declare function sameBrokerOwnerPrincipal(left: BrokerOwnerPrincipal, right: BrokerOwnerPrincipal): boolean;
21
- /**
22
- * Reads the broker-owner principal from broker-owned state. Throws when the
23
- * broker cannot attest a canonical process incarnation (the broker refuses to
24
- * start in that case anyway), so callers treat a throw as "authority
25
- * unavailable".
26
- */
27
- export declare function readBrokerOwnerPrincipal(agentDir: string, brokerPid: number, brokerIncarnation: string): Promise<BrokerOwnerPrincipal>;
28
- export type ProcessIncarnationLiveness = "alive" | "dead" | "unknown";
29
- /**
30
- * Tri-state liveness of a process incarnation.
31
- *
32
- * - `alive`: the pid is running and its current incarnation matches the
33
- * stored one, so the original process tenure is still live.
34
- * - `dead`: ESRCH (the pid is provably gone — independent of any persisted
35
- * incarnation text), or the pid is running under a *different* canonical
36
- * incarnation (PID reuse), which provably means the original process
37
- * ended.
38
- * - `unknown`: the pid is malformed, the persisted or observed incarnation
39
- * is malformed/undefined, or the current incarnation cannot be read.
40
- * Unknown never implies death: elevation claims must fail closed with
41
- * `elevation_claim_in_progress` instead of terminalizing state on
42
- * unprovable liveness.
43
- *
44
- * ESRCH is independent positive death proof: a pid that provably does not
45
- * exist is dead regardless of the persisted incarnation text, so a corrupt
46
- * persisted incarnation can never stall recovery forever.
47
- */
48
- export declare function classifyProcessIncarnationLiveness(pid: unknown, incarnation: unknown): ProcessIncarnationLiveness;
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,13 +0,0 @@
1
- export interface AuthBrokerClientConfig {
2
- url: string;
3
- token: string;
4
- }
5
- /** Path to the local bearer token file. Created on the broker host by `gjc auth-broker token`. */
6
- export declare function getAuthBrokerTokenFilePath(): string;
7
- /**
8
- * Read broker configuration. Returns null when the URL is missing
9
- * (broker disabled — local store is used). Throws when URL is set but no
10
- * token is available — the caller cannot fall back silently because the
11
- * user explicitly asked to use the broker.
12
- */
13
- export declare function resolveAuthBrokerConfig(): Promise<AuthBrokerClientConfig | null>;
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,180 +0,0 @@
1
- // G005 real end-to-end daemon-orchestration smoke.
2
- //
3
- // Drives the lifecycle orchestrator's create -> close path with REAL effects:
4
- // a real fsynced file-backed idempotency ledger, a real audit JSONL, and a real
5
- // tmux session spawned/closed via the actual tmux helpers. Proves the daemon
6
- // orchestration turns a `session_create` frame into a genuinely-spawned,
7
- // GJC-tagged tmux session and a `session_close` frame into a real hard-close,
8
- // with idempotent re-ack. Not part of the unit suite.
9
- import assert from "node:assert";
10
- import * as fs from "node:fs";
11
- import * as os from "node:os";
12
- import * as path from "node:path";
13
-
14
- import {
15
- buildGjcTmuxExactOptionTarget,
16
- buildGjcTmuxProfileCommands,
17
- resolveGjcTmuxCommand,
18
- } from "../src/gjc-runtime/tmux-common";
19
- import { forceCloseGjcTmuxSession, statusGjcTmuxSession } from "../src/gjc-runtime/tmux-sessions";
20
- import type { SessionCloseFrame, SessionCreateFrame } from "../src/sdk/bus/index";
21
- import {
22
- type AuditEvent,
23
- handleLifecycleRequest,
24
- type LedgerDoc,
25
- type LedgerStore,
26
- type OrchestratorDeps,
27
- } from "../src/sdk/bus/lifecycle-orchestrator";
28
-
29
- const tmux = resolveGjcTmuxCommand(process.env);
30
- const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), "gjc-g005-"));
31
- const ledgerPath = path.join(tmpRoot, "idempotency.json");
32
- const auditPath = path.join(tmpRoot, "audit.jsonl");
33
- const created: string[] = [];
34
-
35
- function sh(args: string[]): number {
36
- return Bun.spawnSync([tmux, ...args], { stdout: "pipe", stderr: "pipe" }).exitCode;
37
- }
38
- function exists(name: string): boolean {
39
- return sh(["has-session", "-t", `=${name}`]) === 0;
40
- }
41
-
42
- // Real fsynced + atomic file ledger store.
43
- const store: LedgerStore = {
44
- async read(): Promise<LedgerDoc> {
45
- try {
46
- return JSON.parse(fs.readFileSync(ledgerPath, "utf8")) as LedgerDoc;
47
- } catch {
48
- return { version: 1, entries: {} };
49
- }
50
- },
51
- async write(doc: LedgerDoc): Promise<void> {
52
- const tmp = `${ledgerPath}.${process.pid}.tmp`;
53
- const fd = fs.openSync(tmp, "w", 0o600);
54
- fs.writeSync(fd, JSON.stringify(doc));
55
- fs.fsyncSync(fd);
56
- fs.closeSync(fd);
57
- fs.renameSync(tmp, ledgerPath);
58
- },
59
- };
60
-
61
- const auditLines: AuditEvent[] = [];
62
- const deps: OrchestratorDeps = {
63
- pairedChatId: "42",
64
- auditRedactionKey: new Uint8Array(32).fill(5),
65
- isPsmuxProvider: () => false,
66
- now: () => Date.now(),
67
- store,
68
- audit: e => {
69
- auditLines.push(e);
70
- fs.appendFileSync(auditPath, `${JSON.stringify(e)}\n`, { mode: 0o600 });
71
- },
72
- allowCreate: () => true,
73
- writeStartupPrompt: async (requestId, prompt) => {
74
- if (prompt === undefined) return undefined;
75
- const ref = path.join(tmpRoot, `prompt-${requestId}`);
76
- const fd = fs.openSync(ref, "w", 0o600);
77
- fs.writeSync(fd, prompt);
78
- fs.fsyncSync(fd);
79
- fs.closeSync(fd);
80
- return ref;
81
- },
82
- // REAL spawn: create a GJC-tagged tmux session carrying the authoritative id.
83
- spawnCreate: async (_frame, ids) => {
84
- const name = `gjc_g005_${ids.intendedSessionId}`;
85
- created.push(name);
86
- if (sh(["new-session", "-d", "-s", name, "sleep 600"]) !== 0) {
87
- throw new Error(`tmux spawn failed for ${name}`);
88
- }
89
- const target = buildGjcTmuxExactOptionTarget(name);
90
- for (const cmd of buildGjcTmuxProfileCommands(target, process.env, {
91
- sessionId: ids.intendedSessionId,
92
- })) {
93
- if (sh(cmd.args) !== 0) throw new Error(`tag failed for ${name}`);
94
- }
95
- return {
96
- sessionId: ids.intendedSessionId,
97
- tmuxSession: name,
98
- endpointUrl: "ws://127.0.0.1:0",
99
- topicThreadId: "1",
100
- };
101
- },
102
- // REAL close: hard-close the GJC-managed tmux session, id-matched.
103
- closeSession: async target => {
104
- forceCloseGjcTmuxSession(target.tmuxSession ?? "", process.env, target.sessionId);
105
- return { processGone: !exists(target.tmuxSession ?? "") };
106
- },
107
- resumeSession: async () => ({ ambiguous: [] }),
108
- };
109
-
110
- const createFrame: SessionCreateFrame = {
111
- type: "session_create",
112
- requestId: "lc_g005",
113
- lifecycleRequestId: "lc_g005",
114
- intendedSessionId: `g005${Date.now().toString(36)}`,
115
- updateId: 100,
116
- chatId: "42",
117
- token: "control-token",
118
- target: { kind: "existing_path", path: tmpRoot },
119
- };
120
-
121
- async function main(): Promise<void> {
122
- // 1. CREATE -> real tmux session spawned + GJC-tagged with the authoritative id.
123
- const createOut = await handleLifecycleRequest(createFrame, deps);
124
- assert.equal(createOut.status, "ok", "create must succeed");
125
- const session = createOut.status === "ok" ? createOut.entry.tmuxSession! : "";
126
- assert.ok(exists(session), "real tmux session must exist after create");
127
- const status = statusGjcTmuxSession(session);
128
- assert.equal(status.profile, "1", "spawned session must be GJC-managed");
129
- assert.equal(status.sessionId, createFrame.intendedSessionId, "authoritative session id propagated to tmux tag");
130
- console.log(`[g005] CREATE -> live tmux session ${session} (id=${status.sessionId})`);
131
-
132
- // 2. Idempotent re-ack: same updateId+body must NOT spawn a second session.
133
- const before = created.length;
134
- const dupOut = await handleLifecycleRequest(createFrame, deps);
135
- assert.equal(dupOut.status, "ok", "duplicate create re-acks ok");
136
- assert.equal(created.length, before, "duplicate create must NOT spawn a second session");
137
- console.log("[g005] DUPLICATE create re-acked, no second spawn (idempotent)");
138
-
139
- // 3. CLOSE -> real hard-close of the GJC-managed session, id-matched.
140
- const closeFrame: SessionCloseFrame = {
141
- type: "session_close",
142
- requestId: "lc_g005_close",
143
- updateId: 101,
144
- chatId: "42",
145
- token: "control-token",
146
- target: { sessionId: createFrame.intendedSessionId, tmuxSession: session },
147
- force: true,
148
- };
149
- const closeOut = await handleLifecycleRequest(closeFrame, deps);
150
- assert.equal(closeOut.status, "ok", "close must succeed");
151
- assert.ok(!exists(session), "real tmux session must be gone after close");
152
- console.log(`[g005] CLOSE -> hard-closed ${session} (id-matched)`);
153
-
154
- // 4. Durable ledger + audit redaction.
155
- const doc = JSON.parse(fs.readFileSync(ledgerPath, "utf8")) as LedgerDoc;
156
- assert.equal(doc.entries["42:100"]?.state, "success");
157
- assert.equal(doc.entries["42:101"]?.state, "success");
158
- const auditBlob = fs.readFileSync(auditPath, "utf8");
159
- assert.ok(!auditBlob.includes("control-token"), "audit must never contain the control token");
160
- assert.ok(
161
- auditLines.some(a => a.event === "spawn_started"),
162
- "audit records spawn_started",
163
- );
164
- console.log("[g005] durable fsynced ledger + token-redacted audit verified");
165
-
166
- console.log("[g005] PASS: real create->close daemon orchestration over live tmux");
167
- }
168
-
169
- main()
170
- .then(() => {
171
- for (const n of created) sh(["kill-session", "-t", `=${n}`]);
172
- fs.rmSync(tmpRoot, { recursive: true, force: true });
173
- process.exit(0);
174
- })
175
- .catch(err => {
176
- for (const n of created) sh(["kill-session", "-t", `=${n}`]);
177
- fs.rmSync(tmpRoot, { recursive: true, force: true });
178
- console.error("[g005] FAIL", err);
179
- process.exit(1);
180
- });
@@ -1,153 +0,0 @@
1
- // G011 real daemon-path smoke.
2
- //
3
- // Drives a PARSED /session_* command through the LIVE native
4
- // NotificationControlServer + a real loopback WebSocket client (NO injected/fake
5
- // seams), wired to the real orchestrator (with stubbed spawn/close effects so the
6
- // focus is the authenticated wire path, not tmux). Asserts:
7
- // - a wrong-token handshake is rejected (control token gates the endpoint);
8
- // - a valid frame is forwarded with the control token STRIPPED from payloadJson;
9
- // - the host response is routed back to the client by requestId;
10
- // - control discovery exists while running and is removed after stop.
11
- import assert from "node:assert";
12
- import * as crypto from "node:crypto";
13
- import * as fs from "node:fs";
14
- import * as os from "node:os";
15
- import * as path from "node:path";
16
- import WebSocket from "ws";
17
-
18
- // Import the WORKTREE native build directly (not @gajae-code/natives, which can
19
- // resolve to a different checkout in this dev environment).
20
- import { NotificationControlServer } from "../../natives/native/index.js";
21
- import { parseLifecycleCommand } from "../src/sdk/bus/lifecycle-commands";
22
- import { attachLifecycleControl, fileAudit, fileLedgerStore } from "../src/sdk/bus/lifecycle-control-runtime";
23
- import type { OrchestratorDeps } from "../src/sdk/bus/lifecycle-orchestrator";
24
-
25
- const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "gjc-g011-"));
26
- const token = crypto.randomBytes(32).toString("base64url");
27
- const ownerId = "daemon-g011";
28
- const closed: string[] = [];
29
-
30
- function deps(): OrchestratorDeps {
31
- return {
32
- pairedChatId: "42",
33
- auditRedactionKey: new Uint8Array(32).fill(11),
34
- isPsmuxProvider: () => false,
35
- now: () => Date.now(),
36
- store: fileLedgerStore(path.join(tmp, "idempotency.json")),
37
- audit: fileAudit(path.join(tmp, "audit.jsonl")),
38
- allowCreate: () => true,
39
- writeStartupPrompt: async () => undefined,
40
- // Stubbed effects: this smoke proves the WIRE path, not tmux (covered by g005).
41
- spawnCreate: async (_f, ids) => ({
42
- sessionId: ids.intendedSessionId,
43
- tmuxSession: `gjc-${ids.intendedSessionId}`,
44
- endpointUrl: "ws://127.0.0.1:0",
45
- topicThreadId: "1",
46
- }),
47
- closeSession: async t => {
48
- closed.push(t.sessionId);
49
- return { processGone: true };
50
- },
51
- resumeSession: async () => ({ ambiguous: [] }),
52
- };
53
- }
54
-
55
- function send(ws: WebSocket, frame: unknown): void {
56
- ws.send(JSON.stringify(frame));
57
- }
58
-
59
- async function main(): Promise<void> {
60
- const server = new NotificationControlServer(token, ownerId, tmp);
61
-
62
- // Wire the real orchestrator to the real native control server.
63
- const d = deps();
64
- attachLifecycleControl(server as never, d);
65
-
66
- const ep = (await server.start()) as { url: string };
67
- assert.ok(ep.url.startsWith("ws://127.0.0.1:"), `loopback url, got ${ep.url}`);
68
- const controlJson = path.join(tmp, "notifications", "control.json");
69
- assert.ok(fs.existsSync(controlJson), "control discovery must exist while running");
70
- // The control discovery file MUST NOT persist the privileged control token:
71
- // the daemon holds it in memory and is the only client.
72
- const controlRaw = fs.readFileSync(controlJson, "utf8");
73
- assert.ok(!controlRaw.includes(token), "control token MUST NOT be persisted in control.json");
74
- assert.ok(
75
- !("token" in (JSON.parse(controlRaw) as Record<string, unknown>)),
76
- "control.json must omit any token field",
77
- );
78
- console.log(`[g011] live control endpoint ${ep.url}; discovery present, no persisted token`);
79
-
80
- // 1. Wrong-token handshake must be rejected.
81
- await new Promise<void>(resolve => {
82
- const bad = new WebSocket(`${ep.url}/?token=wrong`);
83
- bad.on("open", () => {
84
- throw new Error("wrong-token handshake must NOT open");
85
- });
86
- bad.on("error", () => {
87
- console.log("[g011] wrong-token handshake rejected (expected)");
88
- resolve();
89
- });
90
- });
91
-
92
- // 2. Valid client: send a PARSED /session_close command through the real wire.
93
- const parsed = parseLifecycleCommand("/session_close sess-g011");
94
- assert.equal(parsed.kind, "close", "parser must yield a close command");
95
- const requestId = "lc-g011-1";
96
- const frame = {
97
- type: "session_close",
98
- requestId,
99
- updateId: 1,
100
- chatId: "42",
101
- token,
102
- target: parsed.kind === "close" ? parsed.target : { sessionId: "sess-g011" },
103
- force: true,
104
- };
105
-
106
- const response = await new Promise<Record<string, unknown>>((resolve, reject) => {
107
- const ws = new WebSocket(`${ep.url}/?token=${token}`);
108
- const timer = setTimeout(() => reject(new Error("timed out")), 5000);
109
- ws.on("open", () => send(ws, frame));
110
- ws.on("message", data => {
111
- clearTimeout(timer);
112
- ws.close();
113
- resolve(JSON.parse(String(data)) as Record<string, unknown>);
114
- });
115
- ws.on("error", reject);
116
- });
117
-
118
- assert.equal(response.type, "session_close_response", "response routed back to client");
119
- assert.equal(response.requestId, requestId, "response correlated by requestId");
120
- assert.equal(response.sessionId, "sess-g011");
121
- assert.deepEqual(closed, ["sess-g011"], "orchestrator close effect ran exactly once");
122
- console.log("[g011] parsed command -> real wire -> orchestrator -> routed response OK");
123
-
124
- // 3. The real orchestrator path must NOT leak the control token into its
125
- // durable audit log or idempotency ledger (g002 separately proves the native
126
- // payloadJson boundary is token-stripped).
127
- for (const f of ["audit.jsonl", "idempotency.json"]) {
128
- const p = path.join(tmp, f);
129
- if (fs.existsSync(p)) {
130
- assert.ok(!fs.readFileSync(p, "utf8").includes(token), `control token leaked into ${f}`);
131
- }
132
- }
133
- console.log("[g011] no control-token leak in audit/ledger on the real path");
134
-
135
- // 4. Stop removes control discovery.
136
- server.stop();
137
- await new Promise(r => setTimeout(r, 50));
138
- assert.ok(!fs.existsSync(controlJson), "control discovery removed after stop");
139
- console.log("[g011] control discovery removed after stop");
140
-
141
- console.log("[g011] PASS: real daemon-path (parse -> native control endpoint -> orchestrator -> reply)");
142
- }
143
-
144
- main()
145
- .then(() => {
146
- fs.rmSync(tmp, { recursive: true, force: true });
147
- process.exit(0);
148
- })
149
- .catch(err => {
150
- fs.rmSync(tmp, { recursive: true, force: true });
151
- console.error("[g011] FAIL", err);
152
- process.exit(1);
153
- });