@gajae-code/coding-agent 0.11.11 → 0.12.1

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 (344) hide show
  1. package/CHANGELOG.md +131 -4
  2. package/dist/types/async/job-manager.d.ts +17 -3
  3. package/dist/types/cli/read-cli.d.ts +1 -0
  4. package/dist/types/commands/deep-interview.d.ts +9 -0
  5. package/dist/types/commands/harness.d.ts +22 -0
  6. package/dist/types/commands/read.d.ts +6 -0
  7. package/dist/types/config/model-registry.d.ts +4 -0
  8. package/dist/types/config/provider-auth-health.d.ts +14 -0
  9. package/dist/types/config/provider-ranking.d.ts +59 -0
  10. package/dist/types/config/settings-schema.d.ts +83 -1
  11. package/dist/types/config/settings.d.ts +2 -0
  12. package/dist/types/exa/mcp-client.d.ts +10 -1
  13. package/dist/types/exec/bash-executor.d.ts +45 -12
  14. package/dist/types/extensibility/extensions/types.d.ts +38 -4
  15. package/dist/types/extensibility/gjc-plugins/index.d.ts +12 -2
  16. package/dist/types/extensibility/gjc-plugins/installer.d.ts +63 -7
  17. package/dist/types/extensibility/gjc-plugins/lifecycle-reconciliation.d.ts +55 -0
  18. package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +64 -0
  19. package/dist/types/extensibility/gjc-plugins/runtime-quarantine.d.ts +67 -0
  20. package/dist/types/extensibility/gjc-plugins/session-validation.d.ts +3 -1
  21. package/dist/types/extensibility/gjc-plugins/types.d.ts +124 -0
  22. package/dist/types/extensibility/shared-events.d.ts +6 -0
  23. package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +5 -12
  24. package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +17 -32
  25. package/dist/types/gjc-runtime/deep-interview-stage.d.ts +37 -0
  26. package/dist/types/gjc-runtime/deep-interview-state.d.ts +4 -135
  27. package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
  28. package/dist/types/gjc-runtime/launch-tmux.d.ts +1 -0
  29. package/dist/types/gjc-runtime/memory-guard-owner-claims.d.ts +47 -0
  30. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +70 -1
  31. package/dist/types/gjc-runtime/state-writer.d.ts +5 -46
  32. package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
  33. package/dist/types/gjc-runtime/team-runtime.d.ts +27 -1
  34. package/dist/types/gjc-runtime/team-store.d.ts +12 -0
  35. package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +43 -0
  36. package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +92 -0
  37. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +17 -0
  38. package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +8 -0
  39. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +31 -80
  40. package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -5
  41. package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
  42. package/dist/types/main.d.ts +1 -1
  43. package/dist/types/memories/index.d.ts +2 -0
  44. package/dist/types/modes/acp/acp-agent.d.ts +10 -19
  45. package/dist/types/modes/components/assistant-message.d.ts +3 -1
  46. package/dist/types/modes/components/gjc-bundle-settings.d.ts +34 -0
  47. package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
  48. package/dist/types/modes/components/notifications-settings-editor.d.ts +1 -0
  49. package/dist/types/modes/components/read-tool-group.d.ts +4 -4
  50. package/dist/types/modes/components/session-observer-overlay.d.ts +22 -0
  51. package/dist/types/modes/components/settings-selector.d.ts +11 -0
  52. package/dist/types/modes/components/status-line/gh.d.ts +5 -0
  53. package/dist/types/modes/components/tool-execution.d.ts +8 -0
  54. package/dist/types/modes/components/transcript-viewer-overlay.d.ts +18 -1
  55. package/dist/types/modes/controllers/event-controller.d.ts +3 -0
  56. package/dist/types/modes/interactive-mode.d.ts +2 -0
  57. package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
  58. package/dist/types/modes/types.d.ts +2 -0
  59. package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
  60. package/dist/types/reminders/star-reminder.d.ts +3 -13
  61. package/dist/types/runtime-mcp/manager.d.ts +1 -0
  62. package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
  63. package/dist/types/sdk/acp/adapter.d.ts +3 -1
  64. package/dist/types/sdk/broker/lifecycle.d.ts +5 -0
  65. package/dist/types/sdk/broker/transport.d.ts +2 -0
  66. package/dist/types/sdk/bus/attachment-registry.d.ts +1 -0
  67. package/dist/types/sdk/bus/chat-daemon-control.d.ts +4 -1
  68. package/dist/types/sdk/bus/config.d.ts +6 -2
  69. package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
  70. package/dist/types/sdk/bus/index.d.ts +44 -1
  71. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +44 -0
  72. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
  73. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +2 -1
  74. package/dist/types/sdk/bus/reconciliation-store.d.ts +69 -0
  75. package/dist/types/sdk/bus/rich-draft.d.ts +1 -0
  76. package/dist/types/sdk/bus/rich-render.d.ts +2 -0
  77. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +165 -0
  78. package/dist/types/sdk/bus/telegram-cli.d.ts +12 -0
  79. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +11 -4
  80. package/dist/types/sdk/bus/telegram-daemon.d.ts +25 -1
  81. package/dist/types/sdk/bus/telegram-reference.d.ts +11 -1
  82. package/dist/types/sdk/bus/threaded-render.d.ts +3 -2
  83. package/dist/types/sdk/bus/topic-registry.d.ts +11 -1
  84. package/dist/types/sdk/host/control/operations.d.ts +1 -1
  85. package/dist/types/sdk/host/host.d.ts +2 -0
  86. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  87. package/dist/types/sdk/host/query/revision-store.d.ts +2 -0
  88. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  89. package/dist/types/sdk/prompt-status.d.ts +23 -3
  90. package/dist/types/sdk/session.d.ts +6 -0
  91. package/dist/types/session/agent-session.d.ts +82 -12
  92. package/dist/types/session/artifacts.d.ts +8 -0
  93. package/dist/types/session/blob-store.d.ts +57 -4
  94. package/dist/types/session/internal/managed-session-storage.d.ts +8 -1
  95. package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
  96. package/dist/types/session/session-manager.d.ts +48 -19
  97. package/dist/types/session/session-storage.d.ts +4 -0
  98. package/dist/types/session/streaming-output.d.ts +96 -12
  99. package/dist/types/setup/credential-import.d.ts +12 -0
  100. package/dist/types/skill-state/active-state.d.ts +12 -4
  101. package/dist/types/skill-state/workflow-hud.d.ts +9 -0
  102. package/dist/types/task/executor.d.ts +3 -2
  103. package/dist/types/task/index.d.ts +3 -1
  104. package/dist/types/task/provider-retry-status.d.ts +8 -0
  105. package/dist/types/task/receipt.d.ts +7 -1
  106. package/dist/types/task/types.d.ts +23 -0
  107. package/dist/types/tools/ask-answer-registry.d.ts +2 -2
  108. package/dist/types/tools/bash-interactive.d.ts +4 -1
  109. package/dist/types/tools/bash.d.ts +3 -1
  110. package/dist/types/tools/browser/launch.d.ts +7 -0
  111. package/dist/types/tools/fetch.d.ts +17 -1
  112. package/dist/types/tools/image-gen.d.ts +4 -0
  113. package/dist/types/tools/index.d.ts +4 -0
  114. package/dist/types/tools/output-meta.d.ts +44 -3
  115. package/dist/types/tools/path-utils.d.ts +1 -0
  116. package/dist/types/tools/read-internals.d.ts +12 -0
  117. package/dist/types/tools/read.d.ts +45 -7
  118. package/dist/types/tools/resource-gc.d.ts +4 -0
  119. package/dist/types/tools/review.d.ts +5 -7
  120. package/dist/types/tools/subagent.d.ts +2 -0
  121. package/dist/types/tools/tool-result.d.ts +7 -1
  122. package/dist/types/utils/gh.d.ts +13 -0
  123. package/dist/types/utils/image-resize.d.ts +1 -0
  124. package/dist/types/web/search/providers/kimi.d.ts +2 -0
  125. package/dist/types/web/search/providers/searxng.d.ts +7 -0
  126. package/dist/types/web/search/providers/xai.d.ts +2 -0
  127. package/package.json +11 -13
  128. package/scripts/acp-conformance-agent.ts +218 -0
  129. package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
  130. package/scripts/capture-gjc-bundle-settings.ts +306 -0
  131. package/scripts/capture-sticky-viewport-showcase.ts +292 -0
  132. package/scripts/generate-sdk-operation-inventory.ts +5 -0
  133. package/scripts/resident-memory-bench.ts +1341 -0
  134. package/scripts/run-acp-conformance.ts +285 -0
  135. package/scripts/verify-gjc-sdk-canonicalization.ts +122 -18
  136. package/scripts/verify-sticky-viewport-showcase.ts +611 -0
  137. package/src/async/job-manager.ts +78 -20
  138. package/src/capability/index.ts +8 -0
  139. package/src/cli/fast-help.ts +1 -1
  140. package/src/cli/plugin-cli.ts +176 -18
  141. package/src/cli/read-cli.ts +2 -1
  142. package/src/cli.ts +1 -0
  143. package/src/commands/deep-interview.ts +29 -9
  144. package/src/commands/harness.ts +35 -12
  145. package/src/commands/read.ts +11 -2
  146. package/src/commands/team.ts +20 -2
  147. package/src/config/file-lock.ts +11 -2
  148. package/src/config/model-registry.ts +21 -2
  149. package/src/config/provider-auth-health.ts +42 -0
  150. package/src/config/provider-ranking.ts +119 -0
  151. package/src/config/settings-schema.ts +74 -1
  152. package/src/config/settings.ts +246 -108
  153. package/src/coordinator-mcp/question-gate-codec.ts +1 -1
  154. package/src/coordinator-mcp/server.ts +5 -12
  155. package/src/defaults/gjc/skills/deep-interview/SKILL.md +230 -82
  156. package/src/defaults/gjc/skills/ralplan/SKILL.md +77 -41
  157. package/src/defaults/gjc/skills/team/SKILL.md +3 -1
  158. package/src/defaults/gjc/skills/ultragoal/SKILL.md +62 -39
  159. package/src/defaults/gjc/skills/ultragoal/validation-batch-contracts.md +12 -0
  160. package/src/defaults/gjc-defaults.ts +4 -4
  161. package/src/eval/py/executor.ts +7 -2
  162. package/src/exa/mcp-client.ts +12 -3
  163. package/src/exec/bash-executor.ts +144 -27
  164. package/src/extensibility/extensions/runner.ts +15 -0
  165. package/src/extensibility/extensions/types.ts +46 -5
  166. package/src/extensibility/gjc-plugins/constrained-hooks.ts +8 -2
  167. package/src/extensibility/gjc-plugins/index.ts +19 -2
  168. package/src/extensibility/gjc-plugins/installer.ts +189 -50
  169. package/src/extensibility/gjc-plugins/lifecycle-reconciliation.ts +199 -0
  170. package/src/extensibility/gjc-plugins/lifecycle.ts +626 -0
  171. package/src/extensibility/gjc-plugins/observability.ts +3 -3
  172. package/src/extensibility/gjc-plugins/prompt-appendix.ts +5 -1
  173. package/src/extensibility/gjc-plugins/runtime-adapters.ts +12 -2
  174. package/src/extensibility/gjc-plugins/runtime-quarantine.ts +121 -0
  175. package/src/extensibility/gjc-plugins/schema.ts +84 -12
  176. package/src/extensibility/gjc-plugins/session-validation.ts +9 -3
  177. package/src/extensibility/gjc-plugins/types.ts +141 -0
  178. package/src/extensibility/gjc-plugins/validation.ts +9 -0
  179. package/src/extensibility/shared-events.ts +5 -0
  180. package/src/gjc-runtime/deep-interview-ambiguity.ts +47 -82
  181. package/src/gjc-runtime/deep-interview-recorder.ts +227 -310
  182. package/src/gjc-runtime/deep-interview-runtime.ts +109 -270
  183. package/src/gjc-runtime/deep-interview-stage.ts +1016 -0
  184. package/src/gjc-runtime/deep-interview-state.ts +12 -943
  185. package/src/gjc-runtime/gc-render.ts +1 -0
  186. package/src/gjc-runtime/gc-runtime.ts +11 -1
  187. package/src/gjc-runtime/launch-tmux.ts +25 -6
  188. package/src/gjc-runtime/managed-owner-admission.ts +1 -1
  189. package/src/gjc-runtime/memory-guard-owner-claims.ts +389 -0
  190. package/src/gjc-runtime/ralplan-runtime.ts +1149 -98
  191. package/src/gjc-runtime/state-runtime.ts +2 -1
  192. package/src/gjc-runtime/state-writer.ts +70 -222
  193. package/src/gjc-runtime/team-launch.ts +42 -5
  194. package/src/gjc-runtime/team-runtime.ts +1085 -40
  195. package/src/gjc-runtime/team-store.ts +32 -0
  196. package/src/gjc-runtime/team-worker-heartbeat.ts +149 -0
  197. package/src/gjc-runtime/team-worker-memory-guard.ts +363 -0
  198. package/src/gjc-runtime/team-workers.ts +1 -0
  199. package/src/gjc-runtime/tmux-owner-isolation.ts +28 -0
  200. package/src/gjc-runtime/tmux-sessions.ts +58 -13
  201. package/src/gjc-runtime/ultragoal-receipt-freshness.ts +20 -0
  202. package/src/gjc-runtime/ultragoal-runtime.ts +414 -618
  203. package/src/gjc-runtime/workflow-manifest.generated.json +105 -449
  204. package/src/gjc-runtime/workflow-manifest.ts +38 -247
  205. package/src/hooks/native-skill-hook.ts +17 -4
  206. package/src/hooks/skill-state.ts +1 -23
  207. package/src/internal-urls/docs-index.generated.ts +21 -22
  208. package/src/internal-urls/local-root-gc.ts +127 -0
  209. package/src/main.ts +9 -5
  210. package/src/memories/index.ts +10 -0
  211. package/src/modes/DESIGN.md +98 -0
  212. package/src/modes/acp/acp-agent.ts +339 -191
  213. package/src/modes/acp/acp-event-mapper.ts +14 -7
  214. package/src/modes/acp/acp-mode.ts +39 -3
  215. package/src/modes/components/assistant-message.ts +123 -22
  216. package/src/modes/components/gjc-bundle-settings.ts +508 -0
  217. package/src/modes/components/irc-sidebar.ts +176 -62
  218. package/src/modes/components/model-selector.ts +61 -4
  219. package/src/modes/components/notifications-settings-editor.ts +12 -1
  220. package/src/modes/components/oauth-selector.ts +96 -28
  221. package/src/modes/components/read-tool-group.ts +82 -14
  222. package/src/modes/components/session-observer-overlay.ts +457 -83
  223. package/src/modes/components/settings-selector.ts +116 -23
  224. package/src/modes/components/status-line/gh.ts +16 -0
  225. package/src/modes/components/tool-execution.ts +138 -27
  226. package/src/modes/components/tool-status-header.ts +3 -14
  227. package/src/modes/components/transcript-viewer-overlay.ts +99 -24
  228. package/src/modes/controllers/command-controller.ts +4 -0
  229. package/src/modes/controllers/event-controller.ts +109 -27
  230. package/src/modes/controllers/extension-ui-controller.ts +26 -2
  231. package/src/modes/controllers/input-controller.ts +18 -3
  232. package/src/modes/controllers/selector-controller.ts +127 -36
  233. package/src/modes/interactive-mode.ts +62 -3
  234. package/src/modes/irc-observation-ledger.ts +71 -15
  235. package/src/modes/runtime-init.ts +22 -2
  236. package/src/modes/types.ts +2 -0
  237. package/src/modes/utils/ui-helpers.ts +94 -1
  238. package/src/prompts/agent-fragments/ralplan-persistence.md +4 -3
  239. package/src/prompts/agents/architect.md +9 -1
  240. package/src/prompts/agents/critic.md +9 -0
  241. package/src/prompts/system/eager-todo.md +8 -4
  242. package/src/prompts/system/system-prompt.md +11 -5
  243. package/src/prompts/tools/bash.md +5 -5
  244. package/src/prompts/tools/read.md +4 -2
  245. package/src/prompts/tools/search-tool-bm25.md +5 -0
  246. package/src/prompts/tools/task.md +1 -1
  247. package/src/reminders/star-reminder.ts +4 -42
  248. package/src/runtime-mcp/manager.ts +19 -4
  249. package/src/runtime-mcp/smithery-auth.ts +17 -2
  250. package/src/runtime-mcp/smithery-connect.ts +11 -1
  251. package/src/sdk/acp/adapter.ts +22 -6
  252. package/src/sdk/broker/lifecycle.ts +25 -6
  253. package/src/sdk/broker/transport.ts +35 -3
  254. package/src/sdk/bus/attachment-registry.ts +5 -1
  255. package/src/sdk/bus/chat-daemon-cli.ts +4 -39
  256. package/src/sdk/bus/chat-daemon-control.ts +6 -3
  257. package/src/sdk/bus/config.ts +18 -2
  258. package/src/sdk/bus/control-drain-lease.ts +104 -0
  259. package/src/sdk/bus/index.ts +984 -146
  260. package/src/sdk/bus/kind-aware-reconciliation.ts +317 -0
  261. package/src/sdk/bus/lifecycle-commands.ts +4 -1
  262. package/src/sdk/bus/lifecycle-control-runtime.ts +403 -88
  263. package/src/sdk/bus/prompt-reconciliation.ts +2 -1
  264. package/src/sdk/bus/reconciliation-store.ts +303 -0
  265. package/src/sdk/bus/rich-draft.ts +1 -1
  266. package/src/sdk/bus/rich-render.ts +2 -2
  267. package/src/sdk/bus/telegram-adoption-intent.ts +574 -0
  268. package/src/sdk/bus/telegram-cli.ts +33 -8
  269. package/src/sdk/bus/telegram-daemon-cli.ts +1 -0
  270. package/src/sdk/bus/telegram-daemon-contract.ts +11 -4
  271. package/src/sdk/bus/telegram-daemon.ts +916 -23
  272. package/src/sdk/bus/telegram-reference.ts +40 -3
  273. package/src/sdk/bus/threaded-render.ts +48 -3
  274. package/src/sdk/bus/topic-registry.ts +20 -0
  275. package/src/sdk/host/control/dispatch.ts +5 -1
  276. package/src/sdk/host/control/operations.ts +1 -1
  277. package/src/sdk/host/host.ts +23 -1
  278. package/src/sdk/host/query/handlers.ts +55 -0
  279. package/src/sdk/host/query/revision-store.ts +36 -2
  280. package/src/sdk/host/reverse-leases.ts +44 -7
  281. package/src/sdk/mcp/server.ts +46 -18
  282. package/src/sdk/prompt-status.ts +16 -3
  283. package/src/sdk/protocol/operation-inventory.generated.json +51 -0
  284. package/src/sdk/protocol/operation-registry.ts +7 -2
  285. package/src/sdk/session.ts +101 -10
  286. package/src/session/agent-session.ts +1286 -220
  287. package/src/session/artifacts.ts +22 -0
  288. package/src/session/auth-broker-config.ts +10 -3
  289. package/src/session/blob-store.ts +915 -24
  290. package/src/session/internal/managed-session-scope.ts +44 -6
  291. package/src/session/internal/managed-session-storage.ts +48 -6
  292. package/src/session/memory-guard-checkpoint-participant.ts +131 -0
  293. package/src/session/session-manager.ts +2364 -438
  294. package/src/session/session-storage.ts +9 -1
  295. package/src/session/streaming-output.ts +500 -111
  296. package/src/setup/credential-import.ts +75 -13
  297. package/src/setup/provider-onboarding.ts +19 -4
  298. package/src/skill-state/active-state.ts +32 -10
  299. package/src/skill-state/workflow-hud.ts +42 -2
  300. package/src/skill-state/workflow-mutation-guard.ts +560 -8
  301. package/src/task/executor.ts +122 -39
  302. package/src/task/index.ts +23 -14
  303. package/src/task/provider-retry-status.ts +16 -0
  304. package/src/task/receipt.ts +23 -7
  305. package/src/task/render.ts +6 -2
  306. package/src/task/types.ts +108 -0
  307. package/src/tools/ask-answer-registry.ts +12 -6
  308. package/src/tools/ask.ts +169 -118
  309. package/src/tools/ast-edit.ts +1 -0
  310. package/src/tools/ast-grep.ts +1 -0
  311. package/src/tools/bash-interactive.ts +8 -3
  312. package/src/tools/bash.ts +503 -60
  313. package/src/tools/browser/launch.ts +41 -6
  314. package/src/tools/fetch.ts +114 -23
  315. package/src/tools/find.ts +1 -0
  316. package/src/tools/image-gen.ts +29 -5
  317. package/src/tools/index.ts +4 -0
  318. package/src/tools/output-meta.ts +281 -20
  319. package/src/tools/path-utils.ts +8 -3
  320. package/src/tools/read-internals.ts +44 -0
  321. package/src/tools/read.ts +1560 -310
  322. package/src/tools/resource-gc.ts +182 -18
  323. package/src/tools/review.ts +5 -7
  324. package/src/tools/search.ts +1 -0
  325. package/src/tools/subagent-render.ts +6 -2
  326. package/src/tools/subagent.ts +6 -0
  327. package/src/tools/telegram-send.ts +6 -3
  328. package/src/tools/tool-result.ts +14 -1
  329. package/src/utils/gh.ts +39 -0
  330. package/src/utils/image-resize.ts +3 -0
  331. package/src/web/search/providers/anthropic.ts +4 -4
  332. package/src/web/search/providers/codex.ts +1 -1
  333. package/src/web/search/providers/kimi.ts +15 -5
  334. package/src/web/search/providers/searxng.ts +47 -4
  335. package/src/web/search/providers/xai.ts +7 -2
  336. package/dist/types/gjc-runtime/deep-interview-draft.d.ts +0 -8
  337. package/dist/types/gjc-runtime/deep-interview-payload.d.ts +0 -41
  338. package/dist/types/gjc-runtime/deep-interview-repair.d.ts +0 -17
  339. package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +0 -23
  340. package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +0 -30
  341. package/src/gjc-runtime/deep-interview-draft.ts +0 -843
  342. package/src/gjc-runtime/deep-interview-payload.ts +0 -262
  343. package/src/gjc-runtime/deep-interview-repair.ts +0 -1674
  344. package/src/gjc-runtime/ultragoal-pipeline.ts +0 -306
@@ -0,0 +1,12 @@
1
+ import type { Settings } from "../config/settings";
2
+ import type { TruncationDirection } from "../session/streaming-output";
3
+ /**
4
+ * Read execution routes that have distinct truncation-default contracts.
5
+ * Routes that share the same default are grouped only when their truncation
6
+ * policy is identical; selection and rendering remain owned by read.ts.
7
+ */
8
+ export type ReadRoute = "local-bare-stream" | "local-bare-acp" | "archive-member-bare" | "local-range" | "local-multi-range" | "local-raw" | "local-summary" | "url-reader" | "url-cache-page" | "dir-local" | "dir-archive" | "sqlite-list" | "sqlite-rows" | "converted";
9
+ /** Resolve the configured default for a route; explicit parameters bypass it. */
10
+ export declare function pathDefault(route: ReadRoute, settings: Settings): TruncationDirection;
11
+ /** Resolve the effective caller-facing direction with explicit precedence. */
12
+ export declare function resolveEffectiveDirection(explicitParam: TruncationDirection | undefined, route: ReadRoute, settings: Settings): TruncationDirection;
@@ -4,10 +4,49 @@ import * as z from "zod/v4";
4
4
  import type { RenderResultOptions } from "../extensibility/custom-tools/types";
5
5
  import { type Theme } from "../modes/theme/theme";
6
6
  import type { ToolSession } from "../sdk";
7
- import { type TruncationResult } from "../session/streaming-output";
7
+ import type { ReadWindow, TruncationResult } from "../session/streaming-output";
8
8
  import { type OutputMeta } from "./output-meta";
9
+ export declare function streamLinesFromFile(filePath: string, startLine: number, maxLinesToCollect: number, maxBytes: number, selectedLineLimit: number | null, signal?: AbortSignal, collect?: "head" | "tail" | "both", collectEndExclusive?: number | null): Promise<{
10
+ lines: string[];
11
+ totalFileLines: number;
12
+ collectedBytes: number;
13
+ stoppedByByteLimit: boolean;
14
+ firstLinePreview?: {
15
+ text: string;
16
+ bytes: number;
17
+ };
18
+ firstLineByteLength?: number;
19
+ selectedBytesTotal: number;
20
+ windowBytesTotal: number;
21
+ windowLinesTotal: number;
22
+ windowStartIndex: number;
23
+ tailPartial?: {
24
+ text: string;
25
+ bytes: number;
26
+ sourceIndex: number;
27
+ sourceLineBytes: number;
28
+ };
29
+ maxBytes: number;
30
+ headLines?: string[];
31
+ headBytes?: number;
32
+ headStartIndex?: number;
33
+ degenerateTailBudget: boolean;
34
+ degenerateHeadBudget: boolean;
35
+ headStoppedByBytes: boolean;
36
+ headStoppedByLines: boolean;
37
+ ringBudgetLines: number;
38
+ ringEvictedForBytes: boolean;
39
+ ringEvictedForLines: boolean;
40
+ tailDroppedForBytes: boolean;
41
+ }>;
42
+ export declare function streamResultWindow(result: Awaited<ReturnType<typeof streamLinesFromFile>>, collect: "tail" | "both", startLine: number, collectEndExclusive: number | null): ReadWindow;
9
43
  declare const readSchema: z.ZodObject<{
10
44
  path: z.ZodString;
45
+ truncation: z.ZodOptional<z.ZodEnum<{
46
+ both: "both";
47
+ head: "head";
48
+ last: "last";
49
+ }>>;
11
50
  }, z.core.$strict>;
12
51
  export type ReadToolInput = z.infer<typeof readSchema>;
13
52
  /** Project paths and output sizes without exposing read content or remote URLs. */
@@ -45,12 +84,6 @@ export interface ReadToolDetails {
45
84
  conflictCount?: number;
46
85
  }
47
86
  type ReadParams = ReadToolInput;
48
- /**
49
- * Read tool implementation.
50
- *
51
- * Reads files with support for images, converted documents (via markit), and text.
52
- * Directories return a formatted listing with modification times.
53
- */
54
87
  export declare class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
55
88
  #private;
56
89
  private readonly session;
@@ -60,6 +93,11 @@ export declare class ReadTool implements AgentTool<typeof readSchema, ReadToolDe
60
93
  readonly description: string;
61
94
  readonly parameters: z.ZodObject<{
62
95
  path: z.ZodString;
96
+ truncation: z.ZodOptional<z.ZodEnum<{
97
+ both: "both";
98
+ head: "head";
99
+ last: "last";
100
+ }>>;
63
101
  }, z.core.$strict>;
64
102
  readonly nonAbortable = true;
65
103
  readonly strict = true;
@@ -1,5 +1,6 @@
1
1
  import type { WindowsJobMemoryProbeResult } from "@gajae-code/natives";
2
2
  import type { Settings } from "../config/settings";
3
+ import type { MemoryGuardWorkerSample } from "../runtime/memory-guard-contract";
3
4
  import { type TabGcSnapshot } from "./browser/tab-supervisor";
4
5
  export interface BrowserGcPolicy {
5
6
  enabled: boolean;
@@ -35,10 +36,13 @@ export interface ResourceGcDeps {
35
36
  removed: number;
36
37
  }>;
37
38
  screenshotArmed: () => boolean;
39
+ listTeamWorkers?: (cwd: string, sessionId: string) => Promise<MemoryGuardWorkerSample[]>;
40
+ applyTeamWorkerGuard?: (cwd: string, sessionId: string, workerId: string, excessBytes: number, incidentId: string) => Promise<void>;
38
41
  }
39
42
  export interface ResourceGcRegistration {
40
43
  sessionId: string;
41
44
  settings: Settings;
45
+ cwd?: string | (() => string);
42
46
  }
43
47
  /**
44
48
  * Register a session with the resource GC. Starts the single shared timer on the first
@@ -50,14 +50,12 @@ export interface SubmitReviewDetails {
50
50
  }
51
51
  export type { ReportFindingDetails };
52
52
  /**
53
- * Coerce a tool-side `ReportFindingDetails` into the cross-boundary
54
- * `ReviewFinding` shape consumed by the reviewer agent's JTD output schema.
53
+ * Convert tool-side `ReportFindingDetails` into the numeric-priority
54
+ * `ReviewFinding` shape used by caller-owned reviewer payloads.
55
55
  *
56
56
  * The `report_finding` tool exposes `priority` as a string enum (`"P0".."P3"`)
57
- * for ergonomics, but the bundled reviewer schema (and every custom review
58
- * agent that mirrors it) declares `priority: number`. Without this coercion
59
- * the auto-populated `findings[]` fails JTD validation and every review run
60
- * that surfaces a finding is rejected with `findings.0.priority: expected
61
- * number, received string`.
57
+ * for ergonomics, while reviewer schemas may explicitly declare numeric
58
+ * priorities. This pure conversion does not add findings to completion data;
59
+ * callers that include `findings` own both that field and its output schema.
62
60
  */
63
61
  export declare function toReviewFinding(details: ReportFindingDetails): ReviewFinding;
@@ -38,6 +38,8 @@ export interface SubagentSnapshot {
38
38
  durationMs: number;
39
39
  resultText?: string;
40
40
  errorText?: string;
41
+ /** Safe setup failure cause retained from the executor launch path. */
42
+ setupFailureSummary?: string;
41
43
  resultPreview?: string;
42
44
  outputRef?: string;
43
45
  truncated?: boolean;
@@ -1,6 +1,6 @@
1
1
  import type { AgentToolResult } from "@gajae-code/agent-core";
2
2
  import type { ImageContent, TextContent } from "@gajae-code/ai";
3
- import type { OutputSummary, TruncationResult } from "../session/streaming-output";
3
+ import type { OutputSummary, ReadWindow, TruncationResult } from "../session/streaming-output";
4
4
  import type { OutputMeta, TruncationOptions, TruncationSummaryOptions, TruncationTextOptions } from "./output-meta";
5
5
  type ToolContent = Array<TextContent | ImageContent>;
6
6
  type DetailsWithMeta = {
@@ -12,6 +12,12 @@ export declare class ToolResultBuilder<TDetails extends DetailsWithMeta> {
12
12
  text(text: string): this;
13
13
  content(content: ToolContent): this;
14
14
  truncation(result: TruncationResult, options: TruncationOptions): this;
15
+ truncationWindows(windows: ReadWindow, options?: {
16
+ artifactId?: string;
17
+ noticeOwner?: "body";
18
+ maxBytes?: number;
19
+ rangeBase?: "file" | "window";
20
+ }): this;
15
21
  truncationFromSummary(summary: OutputSummary, options: TruncationSummaryOptions): this;
16
22
  truncationFromText(text: string, options: TruncationTextOptions): this;
17
23
  limits(limits: {
@@ -0,0 +1,13 @@
1
+ export interface GhResult {
2
+ exitCode: number;
3
+ stdout: string;
4
+ stderr: string;
5
+ timedOut?: boolean;
6
+ }
7
+ export type RunGh = (args: string[], options?: {
8
+ timeoutMs?: number;
9
+ }) => Promise<GhResult>;
10
+ /** Run GitHub CLI without allowing it to consume the parent terminal's input. */
11
+ export declare function runGhDefault(args: string[], options?: {
12
+ timeoutMs?: number;
13
+ }): Promise<GhResult>;
@@ -5,6 +5,7 @@ export interface ImageResizeOptions {
5
5
  maxBytes?: number;
6
6
  jpegQuality?: number;
7
7
  excludeWebP?: boolean;
8
+ forceReencode?: boolean;
8
9
  }
9
10
  export interface ResizedImage {
10
11
  buffer: Uint8Array;
@@ -16,6 +16,8 @@ export interface KimiSearchParams {
16
16
  authStorage: AuthStorage;
17
17
  sessionId?: string;
18
18
  }
19
+ /** Test seam: the Kimi search base URL as resolved from trusted env. */
20
+ export declare function resolveKimiSearchBaseUrlForTest(): string;
19
21
  /** Execute Kimi web search. */
20
22
  export declare function searchKimi(params: KimiSearchParams): Promise<SearchResponse>;
21
23
  /** Search provider for Kimi web search. */
@@ -28,6 +28,13 @@ import type { AuthStorage } from "@gajae-code/ai";
28
28
  import type { SearchResponse } from "../../../web/search/types";
29
29
  import type { SearchParams } from "./base";
30
30
  import { SearchProvider } from "./base";
31
+ /** Test seam: the SearXNG endpoint and auth material as resolved from trusted env. */
32
+ export declare function resolveSearxngConfigForTest(): {
33
+ endpoint: string | null;
34
+ token: string | null;
35
+ basicUsername: string | null;
36
+ basicPassword: string | null;
37
+ };
31
38
  /** Execute SearXNG web search. */
32
39
  export declare function searchSearXNG(params: {
33
40
  query: string;
@@ -32,6 +32,8 @@ export interface XaiSearchParams {
32
32
  authStorage: AuthStorage;
33
33
  sessionId?: string;
34
34
  }
35
+ /** Test seam: the xAI search base URL as resolved from trusted env. */
36
+ export declare function resolveXaiSearchBaseUrlForTest(): string;
35
37
  export declare function buildXaiRequestBody(params: {
36
38
  query: string;
37
39
  systemPrompt: string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@gajae-code/coding-agent",
4
- "version": "0.11.11",
4
+ "version": "0.12.1",
5
5
  "description": "Gajae Code CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://gajae-code.com",
7
7
  "author": "Yeachan-Heo and Gajae Code Contributors",
@@ -50,16 +50,16 @@
50
50
  "check:sdk-closure": "bun ../../scripts/telegram-daemon-generation-guard.ts --validate-current-tree && bun test ../../scripts/telegram-daemon-generation-guard.test.ts && bun scripts/generate-sdk-operation-inventory.ts --check && bun scripts/generate-sdk-adapter-parity-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/sdk-adapter-parity-v1.json && bun scripts/generate-telegram-baseline-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/telegram-baseline-v1.json && bun test test/sdk-downgrade-rollback.test.ts test/sdk-downgrade-unknown-version.test.ts && bun scripts/verify-gjc-sdk-canonicalization.ts --self-test && bun scripts/verify-gjc-sdk-canonicalization.ts && bun scripts/verify-gjc-sdk-rename.ts"
51
51
  },
52
52
  "dependencies": {
53
- "@agentclientprotocol/sdk": "1.2.1",
53
+ "@agentclientprotocol/sdk": "1.3.0",
54
54
  "@babel/parser": "^7.29.3",
55
55
  "@mozilla/readability": "^0.6.0",
56
- "@gajae-code/stats": "0.11.11",
57
- "@gajae-code/agent-core": "0.11.11",
58
- "@gajae-code/ai": "0.11.11",
59
- "@gajae-code/bridge-client": "0.11.11",
60
- "@gajae-code/natives": "0.11.11",
61
- "@gajae-code/tui": "0.11.11",
62
- "@gajae-code/utils": "0.11.11",
56
+ "@gajae-code/stats": "0.12.1",
57
+ "@gajae-code/agent-core": "0.12.1",
58
+ "@gajae-code/ai": "0.12.1",
59
+ "@gajae-code/bridge-client": "0.12.1",
60
+ "@gajae-code/natives": "0.12.1",
61
+ "@gajae-code/tui": "0.12.1",
62
+ "@gajae-code/utils": "0.12.1",
63
63
  "@puppeteer/browsers": "^2.13.0",
64
64
  "@types/turndown": "5.0.6",
65
65
  "@xterm/headless": "^6.0.0",
@@ -327,6 +327,8 @@
327
327
  "types": "./dist/types/export/html/*.d.ts",
328
328
  "import": "./src/export/html/*.ts"
329
329
  },
330
+ "./extensibility/gjc-plugins/installer": null,
331
+ "./extensibility/gjc-plugins/registry": null,
330
332
  "./extensibility/*": {
331
333
  "types": "./dist/types/extensibility/*.d.ts",
332
334
  "import": "./src/extensibility/*.ts"
@@ -343,10 +345,6 @@
343
345
  "types": "./dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts",
344
346
  "import": "./src/extensibility/custom-commands/bundled/ci-green/index.ts"
345
347
  },
346
- "./extensibility/custom-commands/bundled/review": {
347
- "types": "./dist/types/extensibility/custom-commands/bundled/review/index.d.ts",
348
- "import": "./src/extensibility/custom-commands/bundled/review/index.ts"
349
- },
350
348
  "./extensibility/custom-tools": {
351
349
  "types": "./dist/types/extensibility/custom-tools/index.d.ts",
352
350
  "import": "./src/extensibility/custom-tools/index.ts"
@@ -0,0 +1,218 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * Credential-free ACP fixture launcher. The loopback endpoint is deliberately
5
+ * deterministic; the child remains the production `gjc --mode acp` surface.
6
+ */
7
+ import * as fs from "node:fs/promises";
8
+ import * as os from "node:os";
9
+ import * as path from "node:path";
10
+
11
+ const root = path.resolve(import.meta.dir, "..", "..", "..");
12
+ const agentDir = await fs.mkdtemp(path.join(os.tmpdir(), "gjc-acp-conformance-"));
13
+ let child: ReturnType<typeof Bun.spawn> | undefined;
14
+ let server: ReturnType<typeof Bun.serve> | undefined;
15
+
16
+ /**
17
+ * Deterministic replies for the pinned `acp-core-v1` corpus. Each branch mirrors one
18
+ * upstream case expectation; nothing here reaches the network.
19
+ */
20
+ function response(prompt: string): string {
21
+ if (prompt.includes("inspect-prompt")) return `received blocks: {"type":"resource"}`;
22
+ if (prompt.includes("this-command-does-not-exist")) return "unrecognized prompt";
23
+ if (/^\s*read\b/m.test(prompt)) return "read README.md: acpx";
24
+ if (/^\s*write\b/m.test(prompt)) {
25
+ const target = /write\s+(\S+)/.exec(prompt)?.[1] ?? "file";
26
+ return `wrote ${target}`;
27
+ }
28
+ const echo = /^\s*echo\s*(.*)$/m.exec(prompt);
29
+ if (echo) return echo[1] || "echo";
30
+ return "ok";
31
+ }
32
+
33
+ function sse(value: unknown): string {
34
+ return `data: ${JSON.stringify(value)}\n\n`;
35
+ }
36
+
37
+ function completion(delta: Record<string, unknown>, finishReason: string | null = null): string {
38
+ return sse({ id: "gjc-conformance", choices: [{ delta, finish_reason: finishReason }] });
39
+ }
40
+
41
+ function toolCall(name: "read" | "write", arguments_: Record<string, string>): string {
42
+ return completion(
43
+ {
44
+ tool_calls: [
45
+ {
46
+ index: 0,
47
+ id: `conformance-${name}`,
48
+ type: "function",
49
+ function: { name, arguments: JSON.stringify(arguments_) },
50
+ },
51
+ ],
52
+ },
53
+ "tool_calls",
54
+ );
55
+ }
56
+
57
+ function textCompletion(text: string): string {
58
+ return `${completion({ content: text })}${completion({}, "stop")}data: [DONE]\n\n`;
59
+ }
60
+
61
+ async function cleanup(code = 0): Promise<never> {
62
+ server?.stop(true);
63
+ if (child && child.exitCode === null) child.kill();
64
+ await fs.rm(agentDir, { recursive: true, force: true });
65
+ process.exit(code);
66
+ }
67
+
68
+ server = Bun.serve({
69
+ hostname: "127.0.0.1",
70
+ port: 0,
71
+ async fetch(request) {
72
+ const body = (await request.json().catch(() => ({}))) as {
73
+ messages?: Array<{ role?: string; content?: unknown }>;
74
+ };
75
+ // OpenAI-style content is either a plain string or an array of typed blocks.
76
+ const textOf = (content: unknown): string =>
77
+ typeof content === "string"
78
+ ? content
79
+ : Array.isArray(content)
80
+ ? content
81
+ .map(block =>
82
+ typeof block === "object" &&
83
+ block !== null &&
84
+ typeof (block as { text?: unknown }).text === "string"
85
+ ? (block as { text: string }).text
86
+ : "",
87
+ )
88
+ .join("")
89
+ : "";
90
+ const messages = body.messages ?? [];
91
+ const prompt =
92
+ [...messages]
93
+ .reverse()
94
+ .filter(message => message.role === "user")
95
+ .map(message => textOf(message.content))
96
+ .find(text => text.length > 0) ?? "";
97
+ const hasToolResult = messages.some(message => message.role === "tool");
98
+ const isRead = /^\s*read\b/m.test(prompt);
99
+ const isWrite = /^\s*write\b/m.test(prompt);
100
+ const isLateTool = prompt.includes("late-tool 40 follow-up");
101
+
102
+ if (prompt.includes("sleep")) {
103
+ const requested = Number(/\bsleep\s+(\d+)/.exec(prompt)?.[1] ?? 0);
104
+ const delay = Math.min(Math.max(requested, 0), 30_000);
105
+ const stream = new ReadableStream<Uint8Array>({
106
+ start(controller) {
107
+ let closed = false;
108
+ const close = () => {
109
+ if (closed) return;
110
+ closed = true;
111
+ controller.close();
112
+ };
113
+ request.signal.addEventListener("abort", close, { once: true });
114
+ void Bun.sleep(delay).then(() => {
115
+ if (closed) return;
116
+ controller.enqueue(new TextEncoder().encode(textCompletion("slept")));
117
+ close();
118
+ });
119
+ },
120
+ });
121
+ return new Response(stream, { headers: { "content-type": "text/event-stream" } });
122
+ }
123
+
124
+ if ((isRead || isWrite || isLateTool) && !hasToolResult) {
125
+ if (isLateTool) {
126
+ const prefix = `${completion({ content: "preparing" })}${completion({ content: " writing now" })}${completion({ content: " before tool" })}`;
127
+ return new Response(
128
+ `${prefix}${toolCall("write", { path: ".acpx-conformance-late.txt", content: "late" })}data: [DONE]\n\n`,
129
+ {
130
+ headers: { "content-type": "text/event-stream" },
131
+ },
132
+ );
133
+ }
134
+ // Neutral pre-tool text: every corpus assertion below must come from the real
135
+ // tool result, never from a marker announced before the tool ran.
136
+ const provisional = isRead ? "checking the requested file" : "applying the requested write";
137
+ return new Response(
138
+ `${completion({ content: provisional })}${toolCall(
139
+ isRead ? "read" : "write",
140
+ isRead
141
+ ? { path: "README.md" }
142
+ : {
143
+ path: /write\s+(\S+)/.exec(prompt)?.[1] ?? "file",
144
+ content: /write\s+\S+\s*(.*)/.exec(prompt)?.[1] ?? "",
145
+ },
146
+ )}data: [DONE]\n\n`,
147
+ { headers: { "content-type": "text/event-stream" } },
148
+ );
149
+ }
150
+
151
+ // Derive the reply from what the tool actually returned so a broken permission
152
+ // bridge, filesystem bridge, or tool result cannot still satisfy the corpus.
153
+ const toolText = messages
154
+ .filter(message => message.role === "tool")
155
+ .map(message => textOf(message.content))
156
+ .join("\n");
157
+ const toolDenied = /rejected by user|permission denied|not permitted/i.test(toolText);
158
+ const reply = toolDenied
159
+ ? `permission denied: ${toolText.slice(0, 200)}`
160
+ : isRead
161
+ ? `read README.md: ${toolText.trim().slice(0, 200)}`
162
+ : isWrite
163
+ ? `wrote ${/write\s+(\S+)/.exec(prompt)?.[1] ?? "file"}: ${toolText.trim().slice(0, 120)}`
164
+ : isLateTool
165
+ ? `writing now: ${toolText.trim().slice(0, 120)}`
166
+ : response(prompt);
167
+ return new Response(textCompletion(reply), { headers: { "content-type": "text/event-stream" } });
168
+ },
169
+ });
170
+
171
+ await Bun.write(
172
+ path.join(agentDir, "models.json"),
173
+ JSON.stringify({
174
+ providers: {
175
+ conformance: {
176
+ api: "openai-completions",
177
+ baseUrl: `http://127.0.0.1:${server.port}/v1`,
178
+ auth: "none",
179
+ models: [{ id: "fixture", name: "fixture", input: ["text"], contextWindow: 1_000_000, maxTokens: 8192 }],
180
+ },
181
+ },
182
+ }),
183
+ );
184
+
185
+ // The pinned corpus reads `README.md` from the session cwd the runner passes on
186
+ // `session/new`. The runner creates that directory but seeds no content, so seed it
187
+ // here (never inside the upstream corpus) when the harness names it.
188
+ const scratchCwd = process.env.GJC_ACP_CONFORMANCE_CWD?.trim();
189
+ if (scratchCwd) {
190
+ const scratchReadme = path.join(scratchCwd, "README.md");
191
+ if (!(await Bun.file(scratchReadme).exists())) await Bun.write(scratchReadme, "acpx conformance workspace\n");
192
+ }
193
+
194
+ child = Bun.spawn(
195
+ [
196
+ "bun",
197
+ path.join(root, "packages", "coding-agent", "src", "cli.ts"),
198
+ "--mode",
199
+ "acp",
200
+ "--model",
201
+ "conformance/fixture",
202
+ ],
203
+ {
204
+ cwd: root,
205
+ env: { ...process.env, GJC_CODING_AGENT_DIR: agentDir, PI_CODING_AGENT_DIR: agentDir },
206
+ stdin: "inherit",
207
+ stdout: "inherit",
208
+ stderr: "inherit",
209
+ },
210
+ );
211
+ process.once("SIGTERM", () => {
212
+ void cleanup(0);
213
+ });
214
+ process.once("SIGINT", () => {
215
+ void cleanup(0);
216
+ });
217
+ await child.exited;
218
+ await cleanup(child.exitCode ?? 1);