@gajae-code/coding-agent 0.15.4 → 0.15.6

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 (174) hide show
  1. package/CHANGELOG.md +46 -2
  2. package/dist/types/async/job-manager.d.ts +83 -0
  3. package/dist/types/cli/auth-gateway-cli.d.ts +17 -0
  4. package/dist/types/cli/model-presets-cli.d.ts +9 -0
  5. package/dist/types/cli/update-cli.d.ts +27 -5
  6. package/dist/types/commands/auth-gateway.d.ts +3 -0
  7. package/dist/types/commands/gc.d.ts +13 -0
  8. package/dist/types/commands/model-presets.d.ts +21 -0
  9. package/dist/types/config/autorouting-tier-map.d.ts +99 -0
  10. package/dist/types/config/file-lock.d.ts +49 -2
  11. package/dist/types/config/internal/model-preset-registry-test-state.d.ts +4 -0
  12. package/dist/types/config/internal/model-preset-registry-test-support.d.ts +3 -0
  13. package/dist/types/config/keybindings.d.ts +3 -2
  14. package/dist/types/config/model-preset-registry.d.ts +368 -0
  15. package/dist/types/config/model-profile-activation.d.ts +39 -0
  16. package/dist/types/config/model-profiles.d.ts +5 -3
  17. package/dist/types/config/model-registry.d.ts +11 -5
  18. package/dist/types/config/settings-schema.d.ts +9 -0
  19. package/dist/types/coordinator-mcp/model-preset.d.ts +7 -5
  20. package/dist/types/coordinator-mcp/projection-scan.d.ts +46 -0
  21. package/dist/types/extensibility/extensions/types.d.ts +4 -4
  22. package/dist/types/extensibility/shared-events.d.ts +2 -0
  23. package/dist/types/gjc-runtime/empty-delete-gc.d.ts +58 -0
  24. package/dist/types/gjc-runtime/gc-runtime.d.ts +2 -0
  25. package/dist/types/gjc-runtime/session-state-lock.d.ts +35 -6
  26. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +6 -0
  27. package/dist/types/index.d.ts +1 -0
  28. package/dist/types/main.d.ts +3 -1
  29. package/dist/types/modes/components/jobs-overlay-model.d.ts +4 -2
  30. package/dist/types/modes/jobs-observer.d.ts +36 -0
  31. package/dist/types/sdk/broker/broker.d.ts +3 -0
  32. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +3 -0
  33. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +4 -0
  34. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +8 -1
  35. package/dist/types/sdk/cli/session-cli.d.ts +42 -1
  36. package/dist/types/sdk/client/discovery.d.ts +1 -0
  37. package/dist/types/sdk/host/host.d.ts +2 -0
  38. package/dist/types/sdk/host/model-pin.d.ts +7 -2
  39. package/dist/types/sdk/host/sdk-run-capability.d.ts +1 -0
  40. package/dist/types/sdk/host/session-runtime.d.ts +19 -1
  41. package/dist/types/sdk/prompt-deadline-manager.d.ts +11 -1
  42. package/dist/types/sdk/protocol/adapter-validation.d.ts +2 -0
  43. package/dist/types/sdk/router/session-router.d.ts +9 -0
  44. package/dist/types/session/account-inventory.d.ts +1 -0
  45. package/dist/types/session/agent-session.d.ts +19 -5
  46. package/dist/types/session/fold-coordinator.d.ts +201 -0
  47. package/dist/types/session/internal/managed-session-storage.d.ts +4 -3
  48. package/dist/types/session/sdk-run-capability-internal.d.ts +7 -0
  49. package/dist/types/session/sdk-run-capability.d.ts +2 -0
  50. package/dist/types/telemetry/control.d.ts +11 -0
  51. package/dist/types/telemetry/events.d.ts +20 -0
  52. package/dist/types/telemetry/index.d.ts +3 -0
  53. package/dist/types/telemetry/transport.d.ts +22 -0
  54. package/dist/types/tools/bash-interactive.d.ts +23 -0
  55. package/dist/types/tools/index.d.ts +6 -5
  56. package/dist/types/tools/path-utils.d.ts +5 -6
  57. package/dist/types/tools/tmux-self-injection-guard.d.ts +15 -0
  58. package/dist/types/web/search/providers/base.d.ts +9 -4
  59. package/dist/types/web/search/providers/xai.d.ts +2 -1
  60. package/dist/types/web/search/types.d.ts +14 -0
  61. package/package.json +10 -7
  62. package/scripts/generate-hotkeys-docs.ts +4 -0
  63. package/scripts/generate-sdk-operation-inventory.ts +3 -3
  64. package/src/async/job-manager.ts +671 -39
  65. package/src/cli/auth-broker-cli.ts +40 -12
  66. package/src/cli/auth-gateway-cli.ts +273 -97
  67. package/src/cli/config-cli.ts +2 -2
  68. package/src/cli/fast-help.ts +3 -0
  69. package/src/cli/model-presets-cli.ts +100 -0
  70. package/src/cli/update-cli.ts +142 -6
  71. package/src/cli.ts +6 -2
  72. package/src/commands/auth-gateway.ts +12 -8
  73. package/src/commands/gc.ts +19 -0
  74. package/src/commands/model-presets.ts +24 -0
  75. package/src/commands/sdk.ts +5 -0
  76. package/src/config/autorouting-tier-map.ts +33 -0
  77. package/src/config/file-lock-gc.ts +9 -4
  78. package/src/config/file-lock.ts +775 -59
  79. package/src/config/internal/model-preset-registry-test-state.ts +28 -0
  80. package/src/config/internal/model-preset-registry-test-support.ts +11 -0
  81. package/src/config/keybindings.ts +6 -2
  82. package/src/config/model-preset-registry.ts +2799 -0
  83. package/src/config/model-profile-activation.ts +115 -28
  84. package/src/config/model-profile-contract.ts +4 -1
  85. package/src/config/model-profiles.ts +56 -14
  86. package/src/config/model-registry.ts +1028 -123
  87. package/src/config/settings-schema.ts +11 -0
  88. package/src/config/settings.ts +6 -1
  89. package/src/coordinator-mcp/model-preset.ts +32 -17
  90. package/src/coordinator-mcp/policy.ts +1 -1
  91. package/src/coordinator-mcp/projection-scan.ts +571 -0
  92. package/src/coordinator-mcp/server.ts +19 -24
  93. package/src/coordinator-mcp/session-reaper.ts +9 -3
  94. package/src/extensibility/extensions/loader.ts +0 -1
  95. package/src/extensibility/extensions/types.ts +4 -2
  96. package/src/extensibility/gjc-plugins/runtime-adapters.ts +1 -0
  97. package/src/extensibility/shared-events.ts +2 -0
  98. package/src/gjc-runtime/empty-delete-gc.ts +301 -0
  99. package/src/gjc-runtime/gc-render.ts +29 -0
  100. package/src/gjc-runtime/gc-runtime.ts +174 -11
  101. package/src/gjc-runtime/launch-worktree.ts +44 -7
  102. package/src/gjc-runtime/ralplan-runtime.ts +14 -1
  103. package/src/gjc-runtime/session-state-lock.ts +1242 -141
  104. package/src/gjc-runtime/session-state-sidecar.ts +76 -3
  105. package/src/gjc-runtime/tmux-sessions.ts +145 -48
  106. package/src/index.ts +1 -0
  107. package/src/internal-urls/docs-index.generated.ts +14 -13
  108. package/src/lsp/config.ts +4 -3
  109. package/src/lsp/path-trust.ts +12 -6
  110. package/src/main.ts +9 -2
  111. package/src/modes/acp/acp-agent.ts +11 -5
  112. package/src/modes/components/jobs-overlay-model.ts +99 -16
  113. package/src/modes/components/model-selector.ts +158 -18
  114. package/src/modes/components/status-line/segments.ts +6 -1
  115. package/src/modes/controllers/extension-ui-controller.ts +1 -1
  116. package/src/modes/controllers/input-controller.ts +23 -6
  117. package/src/modes/interactive-mode.ts +14 -1
  118. package/src/modes/jobs-observer.ts +149 -16
  119. package/src/modes/prompt-action-autocomplete.ts +26 -47
  120. package/src/modes/runtime-init.ts +1 -1
  121. package/src/modes/utils/injected-user-submission.ts +15 -1
  122. package/src/prompts/tools/bash.md +2 -2
  123. package/src/prompts/tools/fold-receipt.md +3 -0
  124. package/src/prompts/tools/job.md +1 -1
  125. package/src/sdk/acp/adapter.ts +17 -2
  126. package/src/sdk/broker/broker.ts +48 -21
  127. package/src/sdk/broker/lifecycle.ts +32 -6
  128. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  129. package/src/sdk/bus/chat-daemon-runtime.ts +11 -1
  130. package/src/sdk/bus/kind-aware-reconciliation.ts +46 -8
  131. package/src/sdk/bus/prompt-reconciliation.ts +33 -6
  132. package/src/sdk/bus/slack-conversation.ts +5 -1
  133. package/src/sdk/bus/telegram-daemon-contract.ts +8 -1
  134. package/src/sdk/cli/session-cli.ts +161 -5
  135. package/src/sdk/client/discovery.ts +3 -1
  136. package/src/sdk/host/control/dispatch.ts +3 -0
  137. package/src/sdk/host/host.ts +7 -0
  138. package/src/sdk/host/model-pin.ts +185 -25
  139. package/src/sdk/host/sdk-run-capability.ts +1 -0
  140. package/src/sdk/host/session-runtime.test.ts +1240 -107
  141. package/src/sdk/host/session-runtime.ts +1029 -115
  142. package/src/sdk/prompt-deadline-manager.ts +16 -1
  143. package/src/sdk/protocol/adapter-validation.ts +27 -0
  144. package/src/sdk/protocol/operation-inventory.generated.json +2 -2
  145. package/src/sdk/protocol/operation-registry.ts +4 -1
  146. package/src/sdk/router/session-router.ts +297 -111
  147. package/src/sdk/session.ts +83 -12
  148. package/src/session/account-inventory.ts +27 -11
  149. package/src/session/agent-session.ts +887 -95
  150. package/src/session/fold-coordinator.ts +433 -0
  151. package/src/session/internal/managed-session-storage.ts +64 -26
  152. package/src/session/sdk-run-capability-internal.ts +15 -0
  153. package/src/session/sdk-run-capability.ts +2 -0
  154. package/src/session/session-manager.ts +29 -10
  155. package/src/setup/provider-presets.json +1 -1
  156. package/src/slash-commands/helpers/credential-switch.ts +6 -1
  157. package/src/task/executor.ts +19 -3
  158. package/src/telemetry/control.ts +26 -0
  159. package/src/telemetry/events.ts +142 -0
  160. package/src/telemetry/index.ts +3 -0
  161. package/src/telemetry/transport.ts +87 -0
  162. package/src/tools/bash-interactive.ts +182 -85
  163. package/src/tools/bash.ts +786 -67
  164. package/src/tools/index.ts +7 -5
  165. package/src/tools/path-utils.ts +77 -29
  166. package/src/tools/tmux-self-injection-guard.ts +359 -0
  167. package/src/tools/tool-catalog.generated.ts +1 -1
  168. package/src/web/search/provider.ts +120 -11
  169. package/src/web/search/providers/anthropic.ts +89 -17
  170. package/src/web/search/providers/base.ts +9 -4
  171. package/src/web/search/providers/gemini.ts +87 -15
  172. package/src/web/search/providers/openai-compatible.ts +23 -8
  173. package/src/web/search/providers/xai.ts +98 -12
  174. package/src/web/search/types.ts +16 -0
@@ -7,6 +7,7 @@ import {
7
7
  promptDeadlineAt,
8
8
  recordAttributableProgress,
9
9
  } from "./prompt-deadline-lease";
10
+ import type { TurnResultContent } from "./turn-result";
10
11
 
11
12
  const MAX_EXPIRY_RETRIES = 5;
12
13
  const MAX_UNCERTAINTY_RETRIES = 3;
@@ -22,6 +23,12 @@ export type PromptDeadlineOutcome = {
22
23
  provenance: "deadline";
23
24
  };
24
25
 
26
+ export interface PromptTerminalTransitionEvidence {
27
+ content?: TurnResultContent;
28
+ hasActivity?: boolean;
29
+ outcome?: { kind: "stopped"; reason: "cancelled"; provenance: "client_cancel" };
30
+ }
31
+
25
32
  function leaseKey(correlation: InvocationCorrelation): string {
26
33
  return `${correlation.commandId}:${correlation.turnId}`;
27
34
  }
@@ -37,6 +44,7 @@ export class PromptDeadlineManager {
37
44
  readonly #expiring = new Set<string>();
38
45
  readonly #pendingTerminalTransitions = new Set<string>();
39
46
  readonly #pendingTerminalFailureReasons = new Map<string, { code: string; message: string }>();
47
+ readonly #pendingTerminalEvidence = new Map<string, PromptTerminalTransitionEvidence>();
40
48
  readonly #getLeaseMs: () => number;
41
49
  readonly #getMaxMs: () => number;
42
50
  readonly #now: () => number;
@@ -102,7 +110,10 @@ export class PromptDeadlineManager {
102
110
  error: Object.assign(new Error(failureReason.message), { code: failureReason.code }),
103
111
  } as never);
104
112
  }
105
- await this.#reconciliation.noteTransition("prompt", correlation, { type: "agent_end" });
113
+ await this.#reconciliation.noteTransition("prompt", correlation, {
114
+ type: "agent_end",
115
+ ...this.#pendingTerminalEvidence.get(key),
116
+ });
106
117
  // Supersession check before retiring ownership (exact-head review P1):
107
118
  // attributable progress during the awaited writes renews the lease
108
119
  // past its deadline, so this replay instance must back off and
@@ -367,6 +378,7 @@ export class PromptDeadlineManager {
367
378
  noteTerminalTransition(
368
379
  correlation: InvocationCorrelation,
369
380
  pendingFailure?: { code: string; message: string },
381
+ evidence?: PromptTerminalTransitionEvidence,
370
382
  ): void {
371
383
  const key = leaseKey(correlation);
372
384
  if (!this.#leases.has(key)) {
@@ -377,6 +389,7 @@ export class PromptDeadlineManager {
377
389
  this.onAccepted(correlation);
378
390
  }
379
391
  this.#pendingTerminalTransitions.add(key);
392
+ if (evidence !== undefined) this.#pendingTerminalEvidence.set(key, evidence);
380
393
  // Compound failure-plus-terminal recovery intent (exact-head review HIGH):
381
394
  // when expiry replays this real terminal transition after a failed write, it
382
395
  // must re-record the failure reason BEFORE agent_end, or the abandoned or
@@ -395,6 +408,7 @@ export class PromptDeadlineManager {
395
408
  this.#expiring.delete(key);
396
409
  this.#pendingTerminalTransitions.delete(key);
397
410
  this.#pendingTerminalFailureReasons.delete(key);
411
+ this.#pendingTerminalEvidence.delete(key);
398
412
  }
399
413
 
400
414
  clearAll(): void {
@@ -407,6 +421,7 @@ export class PromptDeadlineManager {
407
421
  this.#expiring.clear();
408
422
  this.#pendingTerminalTransitions.clear();
409
423
  this.#pendingTerminalFailureReasons.clear();
424
+ this.#pendingTerminalEvidence.clear();
410
425
  }
411
426
 
412
427
  /** For tests: current deadline or undefined if no lease. */
@@ -28,8 +28,35 @@ export type AdapterValidationError = {
28
28
  message: string;
29
29
  };
30
30
 
31
+ const PROMPT_OPERATIONS = new Set(["turn.prompt", "turn.steer", "turn.follow_up", "turn.abort_and_prompt"]);
32
+
33
+ function hasUsablePromptImage(value: unknown): boolean {
34
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
35
+ const image = value as Record<string, unknown>;
36
+ return (
37
+ typeof image.data === "string" &&
38
+ image.data.trim().length > 0 &&
39
+ (image.mimeType === undefined || (typeof image.mimeType === "string" && image.mimeType.length > 0))
40
+ );
41
+ }
42
+
43
+ /** Rejects instruction-bearing controls before correlation or provider work. */
44
+ export function validateRequiredPromptText(operation: string, input: Input): AdapterValidationError | undefined {
45
+ const hasUsableImage =
46
+ operation === "turn.prompt" && Array.isArray(input.images) && input.images.some(hasUsablePromptImage);
47
+ if (
48
+ PROMPT_OPERATIONS.has(operation) &&
49
+ (typeof input.text !== "string" || (input.text.trim().length === 0 && !hasUsableImage))
50
+ ) {
51
+ return { code: "invalid_input", message: "Prompt must not be empty." };
52
+ }
53
+ return undefined;
54
+ }
55
+
31
56
  /** Validates controls that adapters must reject before forwarding them to a host. */
32
57
  export function validateAdapterControl(operation: string, input: Input): AdapterValidationError | undefined {
58
+ const promptError = validateRequiredPromptText(operation, input);
59
+ if (promptError) return promptError;
33
60
  if (operation === "runtime.reload") {
34
61
  if (
35
62
  !Array.isArray(input.components) ||
@@ -2937,7 +2937,7 @@
2937
2937
  }
2938
2938
  },
2939
2939
  {
2940
- "sourceId": "agent_session:registerForegroundBashBackgroundRequestHandler",
2940
+ "sourceId": "agent_session:registerForegroundFoldParticipant",
2941
2941
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
2942
2942
  "sourceKind": "agent_session",
2943
2943
  "decision": "exclude",
@@ -2992,7 +2992,7 @@
2992
2992
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
2993
2993
  "sourceKind": "agent_session",
2994
2994
  "decision": "exclude",
2995
- "rationale": "internal accessor/plumbing, not a user-facing control seam",
2995
+ "rationale": "internal accessor/plumbing, not a user-facing SDK control seam",
2996
2996
  "exclusionMetadata": {
2997
2997
  "adapterMappings": "not_applicable",
2998
2998
  "testIds": "not_applicable"
@@ -165,7 +165,10 @@ const queries = [
165
165
  ["artifact.read", "Read a bounded artifact range."],
166
166
  ["runtime.jobs.list", "List managed jobs."],
167
167
  ["turn.result", "Read the authoritative durable result of a submitted turn by command/turn IDs or clientRef."],
168
- ["models.profiles.list", "List the effective built-in and configured model profiles for this session."],
168
+ [
169
+ "models.profiles.list",
170
+ "List the effective embedded, signed-registry, and configured model profiles for this session.",
171
+ ],
169
172
  ["providers.list/active", "List active providers."],
170
173
  ["session.checkpoint", "Resolve a durable transcript checkpoint into a connection-owned replay cursor."],
171
174
  ["turn.steer_status", "Read the durable acknowledgement status of a correlated steer by clientRef."],