@gajae-code/coding-agent 0.12.0 → 0.12.2

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 (247) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/dist/types/async/job-manager.d.ts +17 -3
  3. package/dist/types/config/settings-schema.d.ts +56 -2
  4. package/dist/types/exa/mcp-client.d.ts +10 -1
  5. package/dist/types/exec/bash-executor.d.ts +45 -12
  6. package/dist/types/extensibility/extensions/types.d.ts +16 -2
  7. package/dist/types/extensibility/gjc-plugins/index.d.ts +12 -2
  8. package/dist/types/extensibility/gjc-plugins/installer.d.ts +63 -7
  9. package/dist/types/extensibility/gjc-plugins/lifecycle-reconciliation.d.ts +55 -0
  10. package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +64 -0
  11. package/dist/types/extensibility/gjc-plugins/runtime-quarantine.d.ts +67 -0
  12. package/dist/types/extensibility/gjc-plugins/session-validation.d.ts +3 -1
  13. package/dist/types/extensibility/gjc-plugins/types.d.ts +124 -0
  14. package/dist/types/gjc-runtime/launch-tmux.d.ts +1 -0
  15. package/dist/types/gjc-runtime/ralplan-review-conflicts.d.ts +114 -0
  16. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +23 -3
  17. package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
  18. package/dist/types/gjc-runtime/team-runtime.d.ts +25 -0
  19. package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +43 -0
  20. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +10 -0
  21. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +37 -80
  22. package/dist/types/modes/acp/acp-agent.d.ts +2 -19
  23. package/dist/types/modes/components/gjc-bundle-settings.d.ts +34 -0
  24. package/dist/types/modes/components/irc-sidebar.d.ts +16 -0
  25. package/dist/types/modes/components/notifications-settings-editor.d.ts +1 -0
  26. package/dist/types/modes/components/session-observer-overlay.d.ts +18 -0
  27. package/dist/types/modes/components/settings-selector.d.ts +9 -0
  28. package/dist/types/modes/components/status-line/gh.d.ts +5 -0
  29. package/dist/types/modes/components/transcript-viewer-overlay.d.ts +18 -1
  30. package/dist/types/modes/controllers/command-controller.d.ts +1 -1
  31. package/dist/types/modes/controllers/event-controller.d.ts +1 -1
  32. package/dist/types/modes/controllers/extension-ui-controller.d.ts +2 -1
  33. package/dist/types/modes/controllers/selector-controller.d.ts +1 -1
  34. package/dist/types/modes/interactive-mode.d.ts +9 -0
  35. package/dist/types/modes/theme/theme.d.ts +3 -1
  36. package/dist/types/modes/types.d.ts +32 -0
  37. package/dist/types/reminders/star-reminder.d.ts +3 -13
  38. package/dist/types/runtime-mcp/manager.d.ts +1 -0
  39. package/dist/types/sdk/acp/adapter.d.ts +3 -1
  40. package/dist/types/sdk/broker/transport.d.ts +2 -0
  41. package/dist/types/sdk/bus/attachment-registry.d.ts +1 -0
  42. package/dist/types/sdk/bus/chat-daemon-control.d.ts +5 -1
  43. package/dist/types/sdk/bus/config.d.ts +6 -2
  44. package/dist/types/sdk/bus/index.d.ts +29 -0
  45. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +8 -1
  46. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
  47. package/dist/types/sdk/bus/reconciliation-store.d.ts +7 -3
  48. package/dist/types/sdk/bus/rich-draft.d.ts +1 -0
  49. package/dist/types/sdk/bus/rich-render.d.ts +2 -0
  50. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +165 -0
  51. package/dist/types/sdk/bus/telegram-cli.d.ts +12 -0
  52. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -4
  53. package/dist/types/sdk/bus/telegram-daemon.d.ts +25 -1
  54. package/dist/types/sdk/bus/telegram-reference.d.ts +11 -1
  55. package/dist/types/sdk/bus/threaded-render.d.ts +3 -2
  56. package/dist/types/sdk/bus/topic-registry.d.ts +11 -1
  57. package/dist/types/sdk/host/query/revision-store.d.ts +2 -0
  58. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  59. package/dist/types/sdk/prompt-status.d.ts +23 -3
  60. package/dist/types/sdk/session.d.ts +6 -0
  61. package/dist/types/session/agent-session.d.ts +40 -2
  62. package/dist/types/session/artifacts.d.ts +8 -0
  63. package/dist/types/session/blob-store.d.ts +57 -4
  64. package/dist/types/session/internal/managed-session-storage.d.ts +30 -4
  65. package/dist/types/session/session-manager.d.ts +23 -6
  66. package/dist/types/session/session-storage.d.ts +4 -0
  67. package/dist/types/session/streaming-output.d.ts +36 -7
  68. package/dist/types/setup/credential-import.d.ts +12 -0
  69. package/dist/types/skill-state/active-state.d.ts +12 -0
  70. package/dist/types/skill-state/workflow-hud.d.ts +6 -0
  71. package/dist/types/task/executor.d.ts +3 -2
  72. package/dist/types/task/index.d.ts +7 -1
  73. package/dist/types/task/output-manager.d.ts +1 -0
  74. package/dist/types/task/provider-retry-status.d.ts +8 -0
  75. package/dist/types/task/receipt.d.ts +9 -1
  76. package/dist/types/task/types.d.ts +23 -0
  77. package/dist/types/tools/ask-answer-registry.d.ts +2 -2
  78. package/dist/types/tools/bash-interactive.d.ts +4 -1
  79. package/dist/types/tools/bash.d.ts +3 -1
  80. package/dist/types/tools/image-gen.d.ts +4 -0
  81. package/dist/types/tools/index.d.ts +6 -0
  82. package/dist/types/tools/output-meta.d.ts +23 -2
  83. package/dist/types/tools/path-utils.d.ts +1 -0
  84. package/dist/types/tools/read.d.ts +0 -6
  85. package/dist/types/tools/review.d.ts +5 -7
  86. package/dist/types/tools/subagent.d.ts +2 -0
  87. package/dist/types/utils/gh.d.ts +13 -0
  88. package/dist/types/utils/image-resize.d.ts +1 -0
  89. package/dist/types/web/search/providers/kimi.d.ts +2 -0
  90. package/dist/types/web/search/providers/searxng.d.ts +7 -0
  91. package/dist/types/web/search/providers/xai.d.ts +2 -0
  92. package/package.json +10 -8
  93. package/scripts/acp-conformance-agent.ts +218 -0
  94. package/scripts/capture-gjc-bundle-settings.ts +306 -0
  95. package/scripts/dogfood-ralplan-review-conflicts.ts +272 -0
  96. package/scripts/generate-sdk-operation-inventory.ts +5 -0
  97. package/scripts/resident-memory-bench.ts +1341 -0
  98. package/scripts/run-acp-conformance.ts +290 -0
  99. package/src/async/job-manager.ts +99 -39
  100. package/src/cli/fast-help.ts +1 -1
  101. package/src/cli/plugin-cli.ts +176 -18
  102. package/src/commands/team.ts +19 -1
  103. package/src/config/file-lock.ts +11 -2
  104. package/src/config/settings-schema.ts +53 -2
  105. package/src/coordinator-mcp/question-gate-codec.ts +1 -1
  106. package/src/coordinator-mcp/server.ts +5 -12
  107. package/src/debug/index.ts +42 -17
  108. package/src/defaults/gjc/skills/deep-interview/SKILL.md +1 -0
  109. package/src/defaults/gjc/skills/ralplan/SKILL.md +25 -20
  110. package/src/defaults/gjc/skills/team/SKILL.md +2 -0
  111. package/src/defaults/gjc/skills/ultragoal/SKILL.md +39 -26
  112. package/src/defaults/gjc/skills/ultragoal/validation-batch-contracts.md +12 -0
  113. package/src/defaults/gjc-defaults.ts +4 -4
  114. package/src/exa/mcp-client.ts +12 -3
  115. package/src/exec/bash-executor.ts +144 -27
  116. package/src/extensibility/extensions/runner.ts +15 -0
  117. package/src/extensibility/extensions/types.ts +18 -1
  118. package/src/extensibility/gjc-plugins/constrained-hooks.ts +8 -2
  119. package/src/extensibility/gjc-plugins/index.ts +19 -2
  120. package/src/extensibility/gjc-plugins/installer.ts +189 -50
  121. package/src/extensibility/gjc-plugins/lifecycle-reconciliation.ts +199 -0
  122. package/src/extensibility/gjc-plugins/lifecycle.ts +626 -0
  123. package/src/extensibility/gjc-plugins/observability.ts +3 -3
  124. package/src/extensibility/gjc-plugins/prompt-appendix.ts +5 -1
  125. package/src/extensibility/gjc-plugins/runtime-adapters.ts +12 -2
  126. package/src/extensibility/gjc-plugins/runtime-quarantine.ts +121 -0
  127. package/src/extensibility/gjc-plugins/schema.ts +84 -12
  128. package/src/extensibility/gjc-plugins/session-validation.ts +9 -3
  129. package/src/extensibility/gjc-plugins/types.ts +141 -0
  130. package/src/extensibility/gjc-plugins/validation.ts +9 -0
  131. package/src/gjc-runtime/launch-tmux.ts +25 -6
  132. package/src/gjc-runtime/launch-worktree.ts +103 -1
  133. package/src/gjc-runtime/ledger-event-renderer.ts +1 -0
  134. package/src/gjc-runtime/managed-owner-admission.ts +1 -1
  135. package/src/gjc-runtime/ralplan-review-conflicts.ts +472 -0
  136. package/src/gjc-runtime/ralplan-runtime.ts +491 -27
  137. package/src/gjc-runtime/team-launch.ts +8 -0
  138. package/src/gjc-runtime/team-runtime.ts +140 -32
  139. package/src/gjc-runtime/team-worker-heartbeat.ts +149 -0
  140. package/src/gjc-runtime/tmux-owner-isolation.ts +10 -0
  141. package/src/gjc-runtime/tmux-sessions.ts +58 -13
  142. package/src/gjc-runtime/ultragoal-evidence.ts +6 -74
  143. package/src/gjc-runtime/ultragoal-runtime.ts +635 -612
  144. package/src/gjc-runtime/workflow-manifest.generated.json +37 -99
  145. package/src/gjc-runtime/workflow-manifest.ts +21 -70
  146. package/src/internal-urls/docs-index.generated.ts +16 -16
  147. package/src/modes/DESIGN.md +104 -0
  148. package/src/modes/acp/acp-agent.ts +298 -186
  149. package/src/modes/components/gjc-bundle-settings.ts +508 -0
  150. package/src/modes/components/irc-sidebar.ts +30 -1
  151. package/src/modes/components/notifications-settings-editor.ts +12 -1
  152. package/src/modes/components/oauth-selector.ts +68 -30
  153. package/src/modes/components/session-observer-overlay.ts +305 -86
  154. package/src/modes/components/settings-selector.ts +56 -5
  155. package/src/modes/components/status-line/gh.ts +16 -0
  156. package/src/modes/components/tool-status-header.ts +3 -15
  157. package/src/modes/components/transcript-viewer-overlay.ts +99 -24
  158. package/src/modes/controllers/command-controller.ts +42 -34
  159. package/src/modes/controllers/event-controller.ts +27 -16
  160. package/src/modes/controllers/extension-ui-controller.ts +193 -34
  161. package/src/modes/controllers/selector-controller.ts +160 -22
  162. package/src/modes/interactive-mode.ts +189 -62
  163. package/src/modes/jobs-observer.ts +1 -1
  164. package/src/modes/runtime-init.ts +3 -0
  165. package/src/modes/theme/theme.ts +11 -9
  166. package/src/modes/types.ts +88 -0
  167. package/src/prompts/agent-fragments/ralplan-persistence.md +4 -3
  168. package/src/prompts/system/eager-todo.md +8 -4
  169. package/src/prompts/system/system-prompt.md +11 -4
  170. package/src/prompts/tools/bash.md +5 -5
  171. package/src/prompts/tools/search-tool-bm25.md +5 -0
  172. package/src/prompts/tools/task.md +1 -1
  173. package/src/reminders/star-reminder.ts +4 -42
  174. package/src/runtime-mcp/manager.ts +19 -4
  175. package/src/sdk/acp/adapter.ts +22 -6
  176. package/src/sdk/broker/lifecycle.ts +18 -13
  177. package/src/sdk/broker/transport.ts +35 -3
  178. package/src/sdk/bus/attachment-registry.ts +5 -1
  179. package/src/sdk/bus/chat-daemon-cli.ts +4 -39
  180. package/src/sdk/bus/chat-daemon-control.ts +7 -3
  181. package/src/sdk/bus/config.ts +18 -2
  182. package/src/sdk/bus/index.ts +661 -126
  183. package/src/sdk/bus/kind-aware-reconciliation.ts +148 -73
  184. package/src/sdk/bus/lifecycle-commands.ts +4 -1
  185. package/src/sdk/bus/lifecycle-control-runtime.ts +403 -88
  186. package/src/sdk/bus/reconciliation-store.ts +95 -16
  187. package/src/sdk/bus/rich-draft.ts +1 -1
  188. package/src/sdk/bus/rich-render.ts +2 -2
  189. package/src/sdk/bus/telegram-adoption-intent.ts +574 -0
  190. package/src/sdk/bus/telegram-cli.ts +33 -8
  191. package/src/sdk/bus/telegram-daemon-cli.ts +1 -0
  192. package/src/sdk/bus/telegram-daemon-contract.ts +12 -4
  193. package/src/sdk/bus/telegram-daemon.ts +916 -23
  194. package/src/sdk/bus/telegram-reference.ts +40 -3
  195. package/src/sdk/bus/threaded-render.ts +48 -3
  196. package/src/sdk/bus/topic-registry.ts +20 -0
  197. package/src/sdk/host/query/revision-store.ts +36 -2
  198. package/src/sdk/host/reverse-leases.ts +44 -7
  199. package/src/sdk/prompt-status.ts +16 -3
  200. package/src/sdk/protocol/operation-inventory.generated.json +33 -0
  201. package/src/sdk/session.ts +89 -9
  202. package/src/session/agent-session.ts +844 -173
  203. package/src/session/artifacts.ts +22 -0
  204. package/src/session/auth-broker-config.ts +10 -3
  205. package/src/session/blob-store.ts +915 -24
  206. package/src/session/internal/managed-session-scope.ts +200 -111
  207. package/src/session/internal/managed-session-storage.ts +492 -62
  208. package/src/session/session-manager.ts +1614 -435
  209. package/src/session/session-storage.ts +38 -45
  210. package/src/session/streaming-output.ts +238 -68
  211. package/src/setup/credential-import.ts +75 -13
  212. package/src/skill-state/active-state.ts +32 -0
  213. package/src/skill-state/workflow-hud.ts +17 -0
  214. package/src/skill-state/workflow-mutation-guard.ts +496 -2
  215. package/src/task/executor.ts +122 -39
  216. package/src/task/index.ts +280 -45
  217. package/src/task/output-manager.ts +24 -14
  218. package/src/task/provider-retry-status.ts +16 -0
  219. package/src/task/receipt.ts +34 -8
  220. package/src/task/render.ts +6 -2
  221. package/src/task/types.ts +108 -0
  222. package/src/tools/ask-answer-registry.ts +12 -6
  223. package/src/tools/ask.ts +86 -55
  224. package/src/tools/ast-edit.ts +1 -0
  225. package/src/tools/ast-grep.ts +1 -0
  226. package/src/tools/bash-interactive.ts +8 -3
  227. package/src/tools/bash.ts +503 -60
  228. package/src/tools/find.ts +1 -0
  229. package/src/tools/image-gen.ts +29 -5
  230. package/src/tools/index.ts +6 -0
  231. package/src/tools/output-meta.ts +108 -14
  232. package/src/tools/path-utils.ts +3 -2
  233. package/src/tools/read.ts +18 -0
  234. package/src/tools/review.ts +5 -7
  235. package/src/tools/search.ts +1 -0
  236. package/src/tools/subagent-render.ts +6 -2
  237. package/src/tools/subagent.ts +6 -0
  238. package/src/tools/telegram-send.ts +6 -3
  239. package/src/utils/gh.ts +39 -0
  240. package/src/utils/image-resize.ts +3 -0
  241. package/src/web/search/providers/anthropic.ts +4 -4
  242. package/src/web/search/providers/kimi.ts +15 -5
  243. package/src/web/search/providers/searxng.ts +47 -4
  244. package/src/web/search/providers/xai.ts +7 -2
  245. package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +0 -23
  246. package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +0 -30
  247. package/src/gjc-runtime/ultragoal-pipeline.ts +0 -306
@@ -5,37 +5,6 @@ export { CRITIC_GATE_HARD_STOP_EVENT, CRITIC_GATE_OVERRIDE_EVENT, CRITIC_VERDICT
5
5
  export { captureUltragoalRecoverySnapshot, parseStrictTerminalTranscript, persistUltragoalRecoveryDecision, planUltragoalOwnerLossRecovery, type UltragoalOwnerLossReceipt, type UltragoalRecoveryBinding, type UltragoalRecoveryDecision, type UltragoalRecoverySnapshot, validateOwnerLossBinding, validateRawUltragoalEvidence, validateRecoveryAdmission, validateRecoveryPath, } from "./ultragoal-owner-loss-recovery";
6
6
  export type UltragoalGjcGoalMode = "aggregate" | "per-story";
7
7
  export type UltragoalGoalStatus = "pending" | "active" | "complete" | "failed" | "blocked" | "review_blocked" | "superseded";
8
- export type UltragoalPipelineMetadataSource = "original_plan_graph" | "legacy_brief_only" | "steering";
9
- export type UltragoalPipelineOverlapState = "none" | "open" | "joined_clean" | "blocked_disjoint_continue" | "quarantine_required" | "rebaseline_complete";
10
- export interface UltragoalPipelineTargets extends JsonObject {
11
- files: string[];
12
- surfaces: string[];
13
- }
14
- export interface UltragoalPipelineMetadata extends JsonObject {
15
- schemaVersion: 1;
16
- goalId: string;
17
- source: UltragoalPipelineMetadataSource;
18
- eligible: boolean;
19
- dependsOn: string[];
20
- independentOf: string[];
21
- targets: UltragoalPipelineTargets;
22
- metadataHash: string;
23
- overlap: UltragoalPipelineOverlapState;
24
- overlapId?: string;
25
- priorGoalId?: string;
26
- nextGoalId?: string;
27
- blockerFootprints?: UltragoalPipelineTargets[];
28
- invalidationReason?: string;
29
- invalidatedAt?: string;
30
- }
31
- export interface UltragoalGoalMetadataInput {
32
- schemaVersion: 1;
33
- goalId: string;
34
- source: UltragoalPipelineMetadataSource;
35
- dependsOn?: string[];
36
- independentOf?: string[];
37
- targets?: Partial<UltragoalPipelineTargets>;
38
- }
39
8
  export interface UltragoalValidationBatchMetadata extends JsonObject {
40
9
  schemaVersion: 1;
41
10
  batchId: string;
@@ -50,31 +19,6 @@ export interface UltragoalValidationBatchInput {
50
19
  memberIds: string[];
51
20
  finalGoalId: string;
52
21
  }
53
- export interface UltragoalPipelineOverlapHandles extends JsonObject {
54
- review: JsonObject;
55
- qa: JsonObject;
56
- implementation: JsonObject;
57
- }
58
- export interface UltragoalPipelineOverlapReceipt extends JsonObject {
59
- ok: true;
60
- event: string;
61
- overlap_id: string;
62
- prior_goal_id: string;
63
- next_goal_id?: string;
64
- goal_id?: string;
65
- status?: UltragoalPipelineOverlapState;
66
- next_goal_status?: UltragoalGoalStatus;
67
- goals_path: string;
68
- ledger_path: string;
69
- }
70
- export type UltragoalPipelineLedgerEventName = "pipeline_overlap_started" | "pipeline_overlap_joined" | "pipeline_overlap_blocked" | "pipeline_overlap_quarantined" | "pipeline_overlap_rebaselined";
71
- export interface UltragoalPipelineLedgerEvent extends UltragoalLedgerEvent {
72
- event: UltragoalPipelineLedgerEventName;
73
- schemaVersion: 1;
74
- overlapId: string;
75
- priorGoalId: string;
76
- nextGoalId: string;
77
- }
78
22
  export interface UltragoalGoal {
79
23
  id: string;
80
24
  title: string;
@@ -87,7 +31,6 @@ export interface UltragoalGoal {
87
31
  evidence?: string;
88
32
  steering?: Record<string, unknown>;
89
33
  completionVerification?: UltragoalCompletionVerification;
90
- pipelineMetadata?: UltragoalPipelineMetadata;
91
34
  validationBatch?: UltragoalValidationBatchMetadata;
92
35
  }
93
36
  export interface UltragoalPlan {
@@ -204,7 +147,6 @@ export interface UltragoalStatusSummary {
204
147
  nudgeRemaining?: number;
205
148
  nudgeGoalId?: string;
206
149
  nudgeTargetKind?: UltragoalNudgeTargetKind;
207
- pipelineOverlap?: JsonObject;
208
150
  }
209
151
  export interface UltragoalCommandResult {
210
152
  reviewBlockerGoalIds?: string[];
@@ -267,22 +209,6 @@ export declare function recordUltragoalNudgeIfBudgetRemaining(input: {
267
209
  export declare function writePlan(cwd: string, plan: UltragoalPlan, sessionId?: string | null): Promise<void>;
268
210
  export declare function nonEmptyString(value: unknown): string | null;
269
211
  export declare function stringArray(value: unknown): string[] | null;
270
- export declare function hashPipelineMetadata(metadata: Omit<UltragoalPipelineMetadata, "metadataHash">): string;
271
- export declare function validateValidationBatchPipelineExclusion(goal: UltragoalGoal): void;
272
- export declare function targetsAreDisjoint(left: UltragoalPipelineTargets, right: UltragoalPipelineTargets): boolean;
273
- export declare function targetsOverlap(left: UltragoalPipelineTargets, right: UltragoalPipelineTargets): boolean;
274
- export declare function requireNonEmptyPipelineTargets(value: unknown, fieldName: string): UltragoalPipelineTargets;
275
- export declare function collectPipelineBlockerFootprints(result: JsonObject, fieldName: string): UltragoalPipelineTargets[];
276
- export declare function pipelinePeer(plan: UltragoalPlan, metadata: UltragoalPipelineMetadata): UltragoalGoal | undefined;
277
- export declare function handleIdsFromValue(value: JsonObject | JsonObject[], fieldName: string): string[];
278
- export declare function resultHandleIds(value: JsonObject, fieldName: string): string[];
279
- export declare function requireCoveredHandles(expected: readonly string[], actual: readonly string[], fieldName: string): void;
280
- export declare function requireFreshPipelineMetadata(goal: UltragoalGoal): UltragoalPipelineMetadata;
281
- export declare function openPipelineOverlap(plan: UltragoalPlan): {
282
- prior: UltragoalGoal;
283
- next: UltragoalGoal;
284
- overlapId: string;
285
- } | null;
286
212
  export declare function readUltragoalPlan(cwd: string, sessionId?: string | null): Promise<UltragoalPlan | null>;
287
213
  export declare function getUltragoalStatus(cwd: string, sessionId?: string | null): Promise<UltragoalStatusSummary>;
288
214
  export declare function buildUltragoalHudSummary(summary: UltragoalStatusSummary, latestLedger?: UltragoalLedgerEvent): WorkflowHudSummary;
@@ -291,8 +217,6 @@ export declare function createUltragoalPlan(input: {
291
217
  brief: string;
292
218
  gjcGoalMode?: UltragoalGjcGoalMode;
293
219
  sessionId?: string | null;
294
- goalMetadata?: UltragoalGoalMetadataInput[];
295
- goalMetadataJson?: string;
296
220
  validationBatches?: UltragoalValidationBatchInput[];
297
221
  validationBatchJson?: string;
298
222
  }): Promise<UltragoalPlan>;
@@ -304,10 +228,6 @@ export interface UltragoalRunCompletionState {
304
228
  hasBlockers: boolean;
305
229
  needsFinalAggregateReceipt: boolean;
306
230
  }
307
- export declare function requireJsonObjectValue(value: unknown, fieldName: string): JsonObject;
308
- export declare function requireJsonObjectOrArrayValue(value: unknown, fieldName: string): JsonObject | JsonObject[];
309
- import { joinUltragoalPipelineOverlap, rebaselineUltragoalPipelineOverlap, startUltragoalPipelineOverlap } from "./ultragoal-pipeline";
310
- export { joinUltragoalPipelineOverlap, rebaselineUltragoalPipelineOverlap, startUltragoalPipelineOverlap };
311
231
  export declare function getUltragoalRunCompletionState(plan: UltragoalPlan, options?: {
312
232
  retryFailed?: boolean;
313
233
  }): UltragoalRunCompletionState;
@@ -343,6 +263,22 @@ export declare function startNextUltragoalGoal(input: {
343
263
  }>;
344
264
  export declare function qualityGateObject(value: unknown): JsonObject | null;
345
265
  export declare function nonEmptyStringArray(value: unknown): string[] | null;
266
+ export interface UltragoalQualityGateDiagnostic {
267
+ path: string;
268
+ code: string;
269
+ message: string;
270
+ }
271
+ /**
272
+ * Collects every quality-gate defect in one pass instead of throwing on the first.
273
+ * Authoring a valid gate is otherwise an edit/retry loop at the most expensive phase
274
+ * of a run (#3474). The aggregate error message keeps each individual message verbatim
275
+ * so existing callers and assertions that match on a single message still work, and
276
+ * `diagnostics` carries the machine-readable stable `path` + `code` pairs.
277
+ */
278
+ export declare class UltragoalQualityGateError extends Error {
279
+ readonly diagnostics: readonly UltragoalQualityGateDiagnostic[];
280
+ constructor(diagnostics: readonly UltragoalQualityGateDiagnostic[]);
281
+ }
346
282
  export declare function requireQualityGateObject(value: unknown, fieldName: string): JsonObject;
347
283
  export declare function requireObjectArray(value: unknown, fieldName: string): JsonObject[];
348
284
  export declare function requiredStringField(row: JsonObject, key: string, fieldName: string): string;
@@ -386,6 +322,27 @@ export declare function validateExecutorQaRedTeamEvidenceForReview(cwd: string,
386
322
  mode?: "review";
387
323
  changeSet?: UltragoalChangeSet;
388
324
  }): Promise<void>;
325
+ /**
326
+ * Scaffold a schema-shaped quality-gate template for selected surfaces (#3474).
327
+ * The template is intentionally incomplete for live artifact proofs so `quality-gate
328
+ * validate` can report remaining evidence gaps in one pass after the author fills paths.
329
+ */
330
+ export declare function buildQualityGateInitTemplate(surfaces: readonly string[]): JsonObject;
331
+ /**
332
+ * Read-only quality-gate validation (#3474). Applies exactly the same rules as
333
+ * `checkpoint --status complete` — including deferred-vs-boundary gate selection and
334
+ * artifact existence checks — but never touches `goals.json`, `ledger.jsonl`, or goal
335
+ * state, and reports every diagnostic in one run instead of the first failure.
336
+ */
337
+ export declare function validateUltragoalQualityGateReadOnly(input: {
338
+ cwd: string;
339
+ qualityGateJson: string;
340
+ goalId?: string;
341
+ sessionId?: string | null;
342
+ }): Promise<{
343
+ valid: boolean;
344
+ errors: readonly UltragoalQualityGateDiagnostic[];
345
+ }>;
389
346
  export declare function checkpointUltragoalGoal(input: {
390
347
  cwd: string;
391
348
  goalId: string;
@@ -1,5 +1,5 @@
1
1
  import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type AvailableCommand, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type DeleteSessionRequest, type DeleteSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
2
- import { type AcpProviderRegistration, AcpSdkAdapter } from "../../sdk/acp";
2
+ import { type AcpProviderRegistration, type AcpReverseConnection, AcpSdkAdapter } from "../../sdk/acp";
3
3
  import type { AcpStartupOptions } from "./startup-options";
4
4
  export declare const ACP_BOOTSTRAP_RACE_GUARD_MS = 50;
5
5
  type JsonObject = Record<string, unknown>;
@@ -205,28 +205,11 @@ export declare function acpPromptPayload(blocks: PromptRequest["prompt"]): {
205
205
  export declare function acpRequestFailure(error: unknown): unknown;
206
206
  /** Registers a permission provider only when the ACP client requires prompts. */
207
207
  export declare function acpProviderRegistrations(capabilities: ClientCapabilities | undefined, env?: NodeJS.ProcessEnv): AcpProviderRegistration[];
208
+ export declare function createAcpReverseConnection(connection: AgentSideConnection, sessionId: string): AcpReverseConnection;
208
209
  /** Maps ACP permission handling to the session's canonical SDK policy. */
209
210
  export declare function applyAcpPermissionMode(adapter: Pick<AcpSdkAdapter, "control">, capabilities: ClientCapabilities | undefined, env?: NodeJS.ProcessEnv): Promise<void>;
210
211
  /** Applies CLI-provided ACP startup settings through SDK controls before session exposure. */
211
212
  export declare function applyAcpStartupOptions(adapter: Pick<AcpSdkAdapter, "setModel" | "control">, options: AcpStartupOptions | undefined): Promise<void>;
212
- /** ACP form elicitation uses the client-facing reverse surface without owning a session runtime. */
213
- export declare function createAcpExtensionUiContext(connection: AgentSideConnection, getSessionId: () => string, capabilities: ClientCapabilities | undefined): {
214
- select: (message: string, options: string[], dialog?: {
215
- signal?: AbortSignal;
216
- timeout?: number;
217
- onTimeout?: () => void;
218
- }) => Promise<string | undefined>;
219
- confirm: (message: string, detail?: string, dialog?: {
220
- signal?: AbortSignal;
221
- timeout?: number;
222
- onTimeout?: () => void;
223
- }) => Promise<boolean>;
224
- input: (message: string, placeholder?: string, dialog?: {
225
- signal?: AbortSignal;
226
- timeout?: number;
227
- onTimeout?: () => void;
228
- }) => Promise<string | undefined>;
229
- };
230
213
  /**
231
214
  * ACP is a pure SDK client. Session processes are created and resumed by the
232
215
  * broker, while all per-session operations use that session's authenticated SDK
@@ -0,0 +1,34 @@
1
+ import { Container } from "@gajae-code/tui";
2
+ import { type GjcLifecycleContext } from "../../extensibility/gjc-plugins/lifecycle";
3
+ import { type GjcRuntimeSnapshotProvider } from "../../extensibility/gjc-plugins/runtime-quarantine";
4
+ import type { GjcBundleIdentity, GjcBundleSummary, GjcLifecycleResult, GjcReviewedUpdateToken, GjcToggleResult, GjcUpdateApplyResult, GjcUpdatePreview } from "../../extensibility/gjc-plugins/types";
5
+ /** Injectable lifecycle boundary; Settings never reads registries or executes bundle code. */
6
+ export interface GjcBundleLifecyclePort {
7
+ listGjcBundles(ctx: GjcLifecycleContext): Promise<GjcBundleSummary[]>;
8
+ getGjcBundle(ctx: GjcLifecycleContext, identity: GjcBundleIdentity): Promise<GjcLifecycleResult<GjcBundleSummary>>;
9
+ previewGjcBundleUpdate(ctx: GjcLifecycleContext, identity: GjcBundleIdentity): Promise<GjcLifecycleResult<GjcUpdatePreview>>;
10
+ applyGjcBundleUpdate(ctx: GjcLifecycleContext, token: GjcReviewedUpdateToken): Promise<GjcLifecycleResult<GjcUpdateApplyResult>>;
11
+ setGjcBundleEnabled(ctx: GjcLifecycleContext, identity: GjcBundleIdentity, enabled: boolean): Promise<GjcLifecycleResult<GjcToggleResult>>;
12
+ setGjcBundleSurfaceEnabled(ctx: GjcLifecycleContext, identity: GjcBundleIdentity, surfaceId: string, enabled: boolean): Promise<GjcLifecycleResult<GjcToggleResult>>;
13
+ }
14
+ export interface GjcBundleSettingsDependencies {
15
+ lifecycle?: GjcBundleLifecyclePort;
16
+ runtimeSnapshotProvider?: GjcRuntimeSnapshotProvider;
17
+ activationGeneration?: number;
18
+ }
19
+ export interface GjcBundleSettingsCallbacks {
20
+ onClose: () => void;
21
+ onBundlesChanged?: () => void;
22
+ }
23
+ export type GjcBundleSettingsState = "loading" | "error" | "empty" | "list" | "detail" | "unsupported-source" | "update-review" | "update-confirm" | "update-running" | "update-result" | "stale-result" | "quarantined-blocked" | "mutation-in-flight-locked";
24
+ /** Scope-qualified, lifecycle-backed Settings UI for installed GJC bundles. */
25
+ export declare class GjcBundleSettingsComponent extends Container {
26
+ #private;
27
+ private readonly callbacks;
28
+ private readonly dependencies;
29
+ constructor(cwd: string, callbacks: GjcBundleSettingsCallbacks, dependencies?: GjcBundleSettingsDependencies);
30
+ get stateId(): GjcBundleSettingsState;
31
+ get navigationLocked(): boolean;
32
+ dispose(): void;
33
+ handleInput(data: string): void;
34
+ }
@@ -32,6 +32,22 @@ export declare function computeIrcSplitWidths(width: number): {
32
32
  separatorWidth: number;
33
33
  rightWidth: number;
34
34
  };
35
+ /**
36
+ * Resolves the single shared work-lane geometry. The left lane is used by both
37
+ * transcript and todo content whenever the IRC lane is effective.
38
+ */
39
+ export declare function computeIrcWorkLaneWidths(width: number, sidebarVisible: boolean): {
40
+ leftWidth: number;
41
+ separatorWidth: number;
42
+ rightWidth: number;
43
+ };
44
+ export declare class IrcLeftLaneComponent implements Component {
45
+ private readonly content;
46
+ private readonly isSidebarVisible;
47
+ constructor(content: Component, isSidebarVisible: (width: number) => boolean);
48
+ render(width: number): string[];
49
+ invalidate(): void;
50
+ }
35
51
  type SemanticLine = Readonly<{
36
52
  kind: "header" | "body" | "elision" | "blank";
37
53
  text: string;
@@ -12,6 +12,7 @@ export interface NotificationsEditorPreferences {
12
12
  richDraftEnabled: boolean;
13
13
  toolActivityEnabled: boolean;
14
14
  streamingEnabled: boolean;
15
+ sound: "all" | "important" | "none";
15
16
  }
16
17
  /** Secret-safe snapshot used to render the Notifications tab. */
17
18
  export interface NotificationsEditorState {
@@ -2,6 +2,24 @@ import type { KeyId } from "../../config/keybindings";
2
2
  import type { SessionMessageEntry } from "../../session/session-manager";
3
3
  import type { SessionObserverRegistry } from "../session-observer-registry";
4
4
  import { type TranscriptViewerEntry, TranscriptViewerOverlay } from "./transcript-viewer-overlay";
5
+ export declare const __sessionObserverProjectionCounters: {
6
+ enabled: boolean;
7
+ projectionFullRuns: number;
8
+ projectionIncrementalRuns: number;
9
+ sourceMessagesProjected: number;
10
+ projectedEntriesAppended: number;
11
+ resultPatchCount: number;
12
+ snapshot(): {
13
+ projectionFullRuns: number;
14
+ projectionIncrementalRuns: number;
15
+ sourceMessagesProjected: number;
16
+ projectedEntriesAppended: number;
17
+ resultPatchCount: number;
18
+ };
19
+ enable(): void;
20
+ disable(): void;
21
+ reset(): void;
22
+ };
5
23
  /** Session-observer adapter. The shared viewer owns navigation and fold state. */
6
24
  export declare class SessionObserverOverlayComponent extends TranscriptViewerOverlay {
7
25
  #private;
@@ -3,6 +3,7 @@ import type { Effort } from "@gajae-code/ai";
3
3
  import { type Component, Container } from "@gajae-code/tui";
4
4
  import { type SettingPath } from "../../config/settings";
5
5
  import type { StatusLinePreset, StatusLineSegmentId, StatusLineSeparatorStyle } from "../../config/settings-schema";
6
+ import type { GjcRuntimeSnapshotProvider } from "../../extensibility/gjc-plugins/runtime-quarantine";
6
7
  import { type NotificationsEditorOperations } from "./notifications-settings-editor";
7
8
  import type { StatusLineSegmentOptions } from "./tool-status-header";
8
9
  /**
@@ -24,6 +25,14 @@ export interface SettingsRuntimeContext {
24
25
  petAvailable?: boolean;
25
26
  /** Terminal environment used to select unavailable-pet guidance. Omitted in production to use Bun.env. */
26
27
  terminalEnv?: NodeJS.ProcessEnv;
28
+ /**
29
+ * Runtime evidence published by the session for the current activation
30
+ * generation. Omitted when no session published one, in which case the GJC
31
+ * Bundles tab honestly reports runtime status as unavailable.
32
+ */
33
+ gjcRuntimeSnapshot?: GjcRuntimeSnapshotProvider;
34
+ /** Activation generation the published snapshot must match to be merged. */
35
+ gjcActivationGeneration?: number;
27
36
  }
28
37
  /** Status line settings subset for preview */
29
38
  export interface StatusLinePreviewSettings {
@@ -0,0 +1,5 @@
1
+ import { type RunGh } from "../../../utils/gh";
2
+ export declare function lookupCurrentPr(runGh?: RunGh): Promise<{
3
+ number: number;
4
+ url: string;
5
+ } | null>;
@@ -29,13 +29,30 @@ export type TranscriptViewerOverlayOptions = {
29
29
  footerControls?: string;
30
30
  getEntryText?: (entry: TranscriptViewerEntry, expanded: boolean) => string;
31
31
  };
32
+ export declare const __transcriptViewerPerfCounters: {
33
+ enabled: boolean;
34
+ layoutCacheHits: number;
35
+ layoutCacheMisses: number;
36
+ refreshRuns: number;
37
+ rebuildRuns: number;
38
+ snapshot(): {
39
+ layoutCacheHits: number;
40
+ layoutCacheMisses: number;
41
+ refreshRuns: number;
42
+ rebuildRuns: number;
43
+ };
44
+ enable(): void;
45
+ disable(): void;
46
+ reset(): void;
47
+ };
32
48
  /** Message-agnostic, modal transcript browser over resolved projection entries. */
33
49
  export declare class TranscriptViewerOverlay extends Container {
34
50
  #private;
35
51
  constructor(options: TranscriptViewerOverlayOptions);
36
52
  get selectedEntryId(): string | undefined;
37
53
  get isFullscreen(): boolean;
38
- refresh(identityMap?: ReadonlyMap<string, string>): void;
54
+ refresh(identityMap?: ReadonlyMap<string, string>, preserveLayoutCache?: boolean): void;
55
+ invalidateLayoutEntries(entryIds: readonly string[]): void;
39
56
  render(width: number): string[];
40
57
  handleMouse(event: MouseEvent): void;
41
58
  handleInput(keyData: string): void;
@@ -3,7 +3,7 @@ import { type ProviderDetails, type UsageReport } from "@gajae-code/ai";
3
3
  import type { KeybindingsManager } from "../../config/keybindings";
4
4
  import type { CompactOptions } from "../../extensibility/extensions/types";
5
5
  import { theme } from "../../modes/theme/theme";
6
- import type { InteractiveModeContext } from "../../modes/types";
6
+ import { type InteractiveModeContext } from "../../modes/types";
7
7
  export declare function buildHelpMarkdown(keybindings: Pick<KeybindingsManager, "getAccessibleDisplayString">): string;
8
8
  export declare class CommandController {
9
9
  #private;
@@ -1,5 +1,5 @@
1
1
  import { type Component } from "@gajae-code/tui";
2
- import type { InteractiveModeContext } from "../../modes/types";
2
+ import { type InteractiveModeContext } from "../../modes/types";
3
3
  import type { AgentSessionEvent } from "../../session/agent-session";
4
4
  /** Test-only performance counters for advisory baseline tests. */
5
5
  export declare const __eventControllerPerfCounters: {
@@ -2,7 +2,7 @@ import type { Component, TUI } from "@gajae-code/tui";
2
2
  import { KeybindingsManager } from "../../config/keybindings";
3
3
  import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetContent, ExtensionWidgetOptions, TerminalInputHandler } from "../../extensibility/extensions";
4
4
  import { type Theme } from "../../modes/theme/theme";
5
- import type { InteractiveModeContext } from "../../modes/types";
5
+ import { type InteractiveModeContext } from "../../modes/types";
6
6
  export declare class ExtensionUiController {
7
7
  #private;
8
8
  private ctx;
@@ -79,5 +79,6 @@ export declare class ExtensionUiController {
79
79
  addExtensionTerminalInputListener(handler: TerminalInputHandler): () => void;
80
80
  clearHookWidgets(): void;
81
81
  clearExtensionTerminalInputListeners(): void;
82
+ dispose(): void;
82
83
  showExtensionError(extensionPath: string, error: string): void;
83
84
  }
@@ -1,7 +1,7 @@
1
1
  import type { Component, SlashCommand } from "@gajae-code/tui";
2
2
  import type { ModelProfileConfig } from "../../config/models-config-schema";
3
3
  import { type Settings } from "../../config/settings";
4
- import type { InteractiveModeContext, OAuthSelectorOptions } from "../../modes/types";
4
+ import { type InteractiveModeContext, type OAuthSelectorOptions } from "../../modes/types";
5
5
  import { getNotificationConfig, maskToken } from "../../sdk/bus/config";
6
6
  import { proposedTelegramIdentity, reconcileCommittedTelegramConfiguration, removeTelegramConfiguration, saveTelegramInactive } from "../../sdk/bus/notification-orchestration";
7
7
  import { buildNotificationStatusReport, checkNotificationHealth, recoverNotifications, sanitizeDiagnostic, sendNotificationTest } from "../../sdk/bus/notification-service";
@@ -39,7 +39,9 @@ export declare const DEFAULT_COMPOSER_PLACEHOLDER: string;
39
39
  export declare function getComposerPlaceholder(keybindings: Pick<KeybindingsManager, "getDisplayString">, context: KeyDisplayContext, options: {
40
40
  readonly busy: boolean;
41
41
  readonly busyPromptMode: "steer" | "queue";
42
+ readonly showActionHints: boolean;
42
43
  }): string;
44
+ export declare function resolveActivityIndicatorMessage(foregroundActive: boolean, activeBackgroundTasks: number, foregroundMessage: string): string | undefined;
43
45
  export declare function getWelcomeTranscriptReservedRows(chatContainer: Container, width: number): number;
44
46
  export type WelcomeBannerSettingMode = "auto" | "unicode" | "square" | "ascii";
45
47
  export declare function resolveWelcomeLogoMode(mode: WelcomeBannerSettingMode, env?: Record<string, string | undefined>, platform?: NodeJS.Platform): WelcomeLogoMode;
@@ -156,6 +158,8 @@ export declare class InteractiveMode implements InteractiveModeContext {
156
158
  commitPetPreviewMode(mode: PetMode): boolean;
157
159
  restoreComposer(): void;
158
160
  rebuildChatFromMessages(policy: TranscriptRebuildPolicy): void;
161
+ isStopped(): boolean;
162
+ onStop(callback: () => void): () => void;
159
163
  stop(): void;
160
164
  shutdown(): Promise<void>;
161
165
  checkShutdownRequested(): Promise<void>;
@@ -169,7 +173,12 @@ export declare class InteractiveMode implements InteractiveModeContext {
169
173
  }): void;
170
174
  showError(message: string): void;
171
175
  showWarning(message: string): void;
176
+ syncActivityIndicator(): void;
172
177
  ensureLoadingAnimation(): void;
178
+ stopLoadingAnimation(options?: {
179
+ restoreBackground?: boolean;
180
+ }): void;
181
+ suspendActivityIndicator(): () => void;
173
182
  setWorkingMessage(message?: string): void;
174
183
  applyPendingWorkingMessage(): void;
175
184
  showNewVersionNotification(newVersion: string): void;
@@ -193,7 +193,9 @@ export declare var theme: Theme;
193
193
  /** Get the name of the currently active theme. */
194
194
  export declare function getCurrentThemeName(): string | undefined;
195
195
  export declare function initTheme(enableWatcher?: boolean, symbolPreset?: SymbolPreset, colorBlindMode?: boolean, darkTheme?: string, lightTheme?: string): Promise<void>;
196
- export declare function setTheme(name: string, enableWatcher?: boolean): Promise<{
196
+ export declare function setTheme(name: string, enableWatcher?: boolean, options?: {
197
+ shouldApply?: () => boolean;
198
+ }): Promise<{
197
199
  success: boolean;
198
200
  error?: string;
199
201
  }>;
@@ -49,6 +49,29 @@ export type ComposerSubmissionOptions = Readonly<{
49
49
  editor: CustomEditor;
50
50
  }>;
51
51
  export declare function canApplyComposerSubmission(options: ComposerSubmissionOptions | undefined, editor: CustomEditor): boolean;
52
+ type PartialActivityStatusContainer = Partial<Pick<Container, "children" | "clear" | "detachChild" | "addChild">>;
53
+ export declare function stopInteractiveActivityIndicator(ctx: {
54
+ loadingAnimation?: Loader;
55
+ statusContainer?: PartialActivityStatusContainer;
56
+ stopLoadingAnimation?: (options?: {
57
+ restoreBackground?: boolean;
58
+ }) => void;
59
+ }, options?: {
60
+ restoreBackground?: boolean;
61
+ }): void;
62
+ export declare function clearInteractiveActivityLoaders(ctx: Pick<InteractiveModeContext, "autoCompactionLoader" | "autoCompactionEscapeHandler" | "retryLoader" | "retryCountdownTimer" | "retryEscapeHandler" | "retryEscapePrimed" | "editor">): void;
63
+ export declare function suspendInteractiveActivityIndicator(ctx: {
64
+ loadingAnimation?: Loader;
65
+ statusContainer?: PartialActivityStatusContainer;
66
+ stopLoadingAnimation?: (options?: {
67
+ restoreBackground?: boolean;
68
+ }) => void;
69
+ syncActivityIndicator?: () => void;
70
+ suspendActivityIndicator?: () => () => void;
71
+ }): () => void;
72
+ export declare function syncInteractiveActivityIndicator(ctx: {
73
+ syncActivityIndicator?: () => void;
74
+ }): void;
52
75
  export type TodoStatus = "pending" | "in_progress" | "completed" | "abandoned";
53
76
  export type TodoItem = {
54
77
  content: string;
@@ -139,6 +162,8 @@ export interface InteractiveModeContext {
139
162
  init(): Promise<void>;
140
163
  shutdown(): Promise<void>;
141
164
  checkShutdownRequested(): Promise<void>;
165
+ isStopped?(): boolean;
166
+ onStop(callback: () => void): () => void;
142
167
  setToolUIContext(uiContext: ExtensionUIContext, hasUI: boolean): void;
143
168
  initializeHookRunner(uiContext: ExtensionUIContext, hasUI: boolean): void;
144
169
  createBackgroundUiContext(): ExtensionUIContext;
@@ -161,6 +186,11 @@ export interface InteractiveModeContext {
161
186
  setWorkingMessage(message?: string): void;
162
187
  applyPendingWorkingMessage(): void;
163
188
  ensureLoadingAnimation(): void;
189
+ syncActivityIndicator(): void;
190
+ suspendActivityIndicator(): () => void;
191
+ stopLoadingAnimation(options?: {
192
+ restoreBackground?: boolean;
193
+ }): void;
164
194
  /**
165
195
  * Commit a pet mode through the shared result-returning policy: capability
166
196
  * is rechecked immediately before mutation and the preference persists only
@@ -223,6 +253,7 @@ export interface InteractiveModeContext {
223
253
  updateEditorTopBorder(): void;
224
254
  updateEditorBorderColor(): void;
225
255
  rebuildChatFromMessages(policy: TranscriptRebuildPolicy): void;
256
+ updateEditorChrome(): void;
226
257
  setTodos(todos: TodoItem[] | TodoPhase[]): void;
227
258
  reloadTodos(): Promise<void>;
228
259
  toggleTodoExpansion(): void;
@@ -344,3 +375,4 @@ export interface OAuthSelectorOptions {
344
375
  trigger?: "bare-login";
345
376
  externalCredentialDiscover?: CredentialAutoImportOptions["discover"];
346
377
  }
378
+ export {};
@@ -1,5 +1,8 @@
1
1
  import type { ImageContent } from "@gajae-code/ai";
2
2
  import type { CustomMessage } from "../session/messages";
3
+ import { type GhResult, type RunGh, runGhDefault } from "../utils/gh";
4
+ export type { GhResult, RunGh };
5
+ export { runGhDefault };
3
6
  export declare const STAR_REMINDER_REPO = "Yeachan-Heo/gajae-code";
4
7
  export declare const STAR_REMINDER_CUSTOM_TYPE = "star-reminder";
5
8
  export declare const STARRED_CACHE_TTL_MS: number;
@@ -10,15 +13,6 @@ export interface StarReminderState {
10
13
  starredCheckedAt: string;
11
14
  }
12
15
  export type StarCheckStatus = "starred" | "unstarred" | "unavailable";
13
- export interface GhResult {
14
- exitCode: number;
15
- stdout: string;
16
- stderr: string;
17
- timedOut?: boolean;
18
- }
19
- export type RunGh = (args: string[], options?: {
20
- timeoutMs?: number;
21
- }) => Promise<GhResult>;
22
16
  export interface StarReminderDeps {
23
17
  statePath?: string;
24
18
  now?: () => Date;
@@ -49,10 +43,6 @@ export declare function recordStarredFromPut(deps?: StarReminderDeps): Promise<S
49
43
  export declare function recordFreshStarCheck(status: "starred" | "unstarred", deps?: StarReminderDeps): Promise<StarReminderState>;
50
44
  /** Record a launch-nudge decline. Never downgrades a confirmed star. */
51
45
  export declare function recordDeclinedAfterNo(deps?: StarReminderDeps): Promise<StarReminderState>;
52
- /** Default `gh` runner. Returns an unavailable-style result instead of throwing. */
53
- export declare function runGhDefault(args: string[], options?: {
54
- timeoutMs?: number;
55
- }): Promise<GhResult>;
56
46
  /** Classify the star state of the repo via `gh api`. */
57
47
  export declare function checkGhStarred(deps?: StarReminderDeps): Promise<StarCheckStatus>;
58
48
  /** Star the repo via `gh api -X PUT`. Returns whether the PUT succeeded. */
@@ -6,6 +6,7 @@ import type { MCPToolDetails } from "./tool-bridge";
6
6
  import type { MCPToolCache } from "./tool-cache";
7
7
  import type { MCPGetPromptResult, MCPPrompt, MCPRequestOptions, MCPResource, MCPResourceReadResult, MCPResourceTemplate, MCPServerConfig, MCPServerConnection } from "./types";
8
8
  export declare function resolveStartupTimeoutMs(configs: MCPServerConfig[], maxStartupTimeoutMs?: number): number;
9
+ export declare function resolveExactConfigStartupTimeoutMs(configs: MCPServerConfig[]): number;
9
10
  /**
10
11
  * Stable, total ordering on MCP tools by name.
11
12
  *
@@ -2,7 +2,9 @@ import { SdkClient, SdkClientError, type SdkFrame } from "../client";
2
2
  type JsonObject = Record<string, unknown>;
3
3
  /** The small agent-side ACP surface used for reverse requests. */
4
4
  export interface AcpReverseConnection {
5
- request?(method: string, params: JsonObject): Promise<unknown>;
5
+ request?(method: string, params: JsonObject, options?: {
6
+ cancellationSignal?: AbortSignal;
7
+ }): Promise<unknown>;
6
8
  [key: string]: unknown;
7
9
  }
8
10
  export interface AcpProviderRegistration {
@@ -1,4 +1,6 @@
1
1
  import type { Broker } from "./broker";
2
+ export type BrokerShutdownSendAction = "dropped" | "wait_for_drain" | "close";
3
+ export declare function brokerShutdownSendAction(status: number): BrokerShutdownSendAction;
2
4
  /** Loopback-only WebSocket transport for the agent-global SDK broker. */
3
5
  export declare class BrokerTransport {
4
6
  #private;
@@ -7,6 +7,7 @@
7
7
  export type TelegramFileSink = (file: {
8
8
  path: string;
9
9
  caption?: string;
10
+ mime?: string;
10
11
  }) => Promise<{
11
12
  ok: boolean;
12
13
  error?: string;
@@ -16,7 +16,11 @@ export type ChatDaemonAction = "stop" | "reload";
16
16
  * when deleting an observed owner-lock lease. Generation 12 refreshes retained
17
17
  * native path and process authority semantics. Generation 13 rejects special
18
18
  * files before retained native authority opens. Generation 14 reloads shared
19
- * chat daemons after notification configuration parsing changes.
19
+ * chat daemons after notification configuration parsing changes. Generation 15
20
+ * applies the current notification configuration directly when starting chat
21
+ * daemon transports. Generation 16 applies Telegram sound-policy configuration
22
+ * through shared notification parsing. Generation 17 binds managed-session
23
+ * replacement to exact native filesystem authority.
20
24
  */
21
25
  export declare const CHAT_DAEMON_GENERATIONS: Readonly<Record<ChatDaemonKind, number>>;
22
26
  export declare function chatDaemonGeneration(kind: ChatDaemonKind): number;