@gajae-code/coding-agent 0.18.11 → 0.18.12

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 (270) hide show
  1. package/CHANGELOG.md +293 -0
  2. package/dist/types/async/job-manager.d.ts +7 -3
  3. package/dist/types/async/result-formatting.d.ts +2 -0
  4. package/dist/types/autoresearch/git.d.ts +1 -1
  5. package/dist/types/capability/fs.d.ts +2 -2
  6. package/dist/types/cli/accounts-cli.d.ts +2 -2
  7. package/dist/types/cli/doctor/install-repairs.d.ts +4 -1
  8. package/dist/types/cli/install-activation.d.ts +10 -4
  9. package/dist/types/cli/public-command-errors.d.ts +1 -0
  10. package/dist/types/cli/update-cli.d.ts +14 -1
  11. package/dist/types/cli-ordinary.d.ts +2 -2
  12. package/dist/types/commands/accounts.d.ts +2 -1
  13. package/dist/types/commands/migrate.d.ts +1 -1
  14. package/dist/types/commands/sdk.d.ts +5 -0
  15. package/dist/types/commit/changelog/index.d.ts +1 -0
  16. package/dist/types/config/autorouting-tier-map.d.ts +30 -0
  17. package/dist/types/config/config-hot-reload-trust.d.ts +12 -0
  18. package/dist/types/config/config-hot-reload.d.ts +39 -0
  19. package/dist/types/config/file-lock.d.ts +8 -1
  20. package/dist/types/config/model-discovery-manager.d.ts +2 -0
  21. package/dist/types/config/model-profile-activation.d.ts +62 -6
  22. package/dist/types/config/model-registry.d.ts +56 -5
  23. package/dist/types/config/model-resolver.d.ts +2 -0
  24. package/dist/types/config/models-config-schema.d.ts +10 -0
  25. package/dist/types/config/settings-schema.d.ts +46 -3
  26. package/dist/types/config/settings.d.ts +33 -1
  27. package/dist/types/dap/config.d.ts +8 -4
  28. package/dist/types/debug/system-info.d.ts +6 -1
  29. package/dist/types/discovery/mcp-compat.d.ts +3 -1
  30. package/dist/types/edit/modes/patch.d.ts +5 -0
  31. package/dist/types/edit/modes/replace.d.ts +3 -0
  32. package/dist/types/exec/bash-executor.d.ts +12 -0
  33. package/dist/types/gjc-runtime/managed-owner-admission.d.ts +3 -0
  34. package/dist/types/gjc-runtime/session-state-lock.d.ts +2 -0
  35. package/dist/types/gjc-runtime/state-runtime.d.ts +0 -2
  36. package/dist/types/migrate/adapters/codex.d.ts +2 -1
  37. package/dist/types/migrate/adapters/index.d.ts +10 -1
  38. package/dist/types/migrate/executor.d.ts +3 -1
  39. package/dist/types/migrate/types.d.ts +15 -3
  40. package/dist/types/modes/components/settings-selector.d.ts +6 -0
  41. package/dist/types/modes/controllers/selector-controller.d.ts +2 -0
  42. package/dist/types/modes/theme/theme.d.ts +1 -0
  43. package/dist/types/runtime-mcp/content-limits.d.ts +4 -0
  44. package/dist/types/runtime-mcp/manager.d.ts +7 -0
  45. package/dist/types/runtime-mcp/plugin-mcp-name-filter.d.ts +22 -0
  46. package/dist/types/runtime-mcp/tool-bridge.d.ts +4 -0
  47. package/dist/types/sdk/broker/broker-exit.d.ts +2 -2
  48. package/dist/types/sdk/broker/broker.d.ts +7 -1
  49. package/dist/types/sdk/broker/daemon-entry.d.ts +11 -1
  50. package/dist/types/sdk/broker/doctor-restart.d.ts +1 -1
  51. package/dist/types/sdk/broker/ensure.d.ts +136 -7
  52. package/dist/types/sdk/broker/hop.d.ts +36 -0
  53. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +18 -10
  54. package/dist/types/sdk/broker/lock-host-identity.d.ts +5 -0
  55. package/dist/types/sdk/broker/session-index.d.ts +4 -1
  56. package/dist/types/sdk/bus/chat-command-policy.d.ts +2 -1
  57. package/dist/types/sdk/bus/index.d.ts +23 -0
  58. package/dist/types/sdk/bus/reconciliation-store.d.ts +10 -0
  59. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +3 -1
  60. package/dist/types/sdk/cli/session-cli.d.ts +0 -1
  61. package/dist/types/sdk/host/session-runtime.d.ts +32 -0
  62. package/dist/types/sdk/prompt-deadline-flush.d.ts +42 -4
  63. package/dist/types/sdk/prompt-deadline-manager.d.ts +2 -0
  64. package/dist/types/sdk/protocol/adapter-validation.d.ts +10 -4
  65. package/dist/types/sdk/reconciliation-extensions.d.ts +1 -1
  66. package/dist/types/sdk/session-list.d.ts +1 -1
  67. package/dist/types/session/agent-session.d.ts +58 -2
  68. package/dist/types/session/internal/managed-session-scope.d.ts +2 -2
  69. package/dist/types/session/internal/managed-session-storage.d.ts +1 -1
  70. package/dist/types/session/internal/native-publish-outcome.d.ts +1 -1
  71. package/dist/types/session/messages.d.ts +5 -1
  72. package/dist/types/session/session-manager.d.ts +13 -3
  73. package/dist/types/session/startup-auth-config.d.ts +24 -2
  74. package/dist/types/session/streaming-output.d.ts +11 -0
  75. package/dist/types/session/terminal-abort.d.ts +3 -1
  76. package/dist/types/session-import/service.d.ts +1 -1
  77. package/dist/types/skill-state/workflow-mutation-guard.d.ts +7 -3
  78. package/dist/types/slash-commands/helpers/provider-auth-status.d.ts +8 -0
  79. package/dist/types/task/executor.d.ts +19 -2
  80. package/dist/types/tools/ast-edit-write-path.d.ts +10 -0
  81. package/dist/types/tools/atomic-file-write.d.ts +9 -7
  82. package/dist/types/tools/bash-allowed-prefixes.d.ts +11 -0
  83. package/dist/types/tools/descriptors.d.ts +2 -0
  84. package/dist/types/tools/fetch.d.ts +1 -1
  85. package/dist/types/tools/index.d.ts +2 -0
  86. package/dist/types/tools/python.d.ts +1 -1
  87. package/dist/types/tools/report-issue.d.ts +41 -0
  88. package/dist/types/tools/subagent.d.ts +23 -0
  89. package/dist/types/web/scrapers/types.d.ts +8 -1
  90. package/dist/types/web/search/providers/insane.d.ts +7 -1
  91. package/dist/types/web/search/providers/searxng.d.ts +5 -0
  92. package/package.json +8 -8
  93. package/scripts/build-binary.ts +2 -1
  94. package/scripts/capture-subagent-compact-panel-showcase.ts +105 -0
  95. package/scripts/generate-docs-index.ts +8 -1
  96. package/scripts/generate-sdk-operation-inventory.ts +22 -4
  97. package/src/async/job-manager.ts +356 -56
  98. package/src/async/result-formatting.ts +40 -0
  99. package/src/autoresearch/git.ts +9 -2
  100. package/src/autoresearch/prompts/prompt-setup.md +1 -1
  101. package/src/capability/fs.ts +27 -19
  102. package/src/capability/index.ts +2 -2
  103. package/src/cli/accounts-cli.ts +176 -8
  104. package/src/cli/auth-broker-cli.ts +21 -11
  105. package/src/cli/doctor/install-repairs.ts +35 -5
  106. package/src/cli/fast-help.ts +1 -1
  107. package/src/cli/install-activation.ts +47 -4
  108. package/src/cli/migrate-cli.ts +7 -5
  109. package/src/cli/public-command-errors.ts +4 -0
  110. package/src/cli/root-flags.ts +2 -2
  111. package/src/cli/stats-cli.ts +9 -5
  112. package/src/cli/update-cli.ts +224 -7
  113. package/src/cli-ordinary.ts +7 -2
  114. package/src/commands/accounts.ts +10 -5
  115. package/src/commands/migrate.ts +3 -3
  116. package/src/commands/sdk.ts +199 -42
  117. package/src/commands/ultragoal.ts +16 -8
  118. package/src/commit/changelog/index.ts +39 -1
  119. package/src/commit/message.ts +10 -3
  120. package/src/config/autorouting-tier-map.ts +30 -0
  121. package/src/config/config-hot-reload-trust.ts +148 -0
  122. package/src/config/config-hot-reload.ts +734 -0
  123. package/src/config/file-lock.ts +216 -56
  124. package/src/config/model-bindings-applier.ts +85 -47
  125. package/src/config/model-discovery-manager.ts +10 -0
  126. package/src/config/model-profile-activation.ts +716 -113
  127. package/src/config/model-registry.ts +1334 -158
  128. package/src/config/model-resolver.ts +3 -1
  129. package/src/config/models-config-schema.ts +6 -0
  130. package/src/config/settings-schema.ts +60 -3
  131. package/src/config/settings.ts +458 -24
  132. package/src/coordinator-mcp/policy.ts +26 -1
  133. package/src/crash/sanitize.ts +4 -0
  134. package/src/customization/import.ts +3 -1
  135. package/src/dap/config.ts +31 -11
  136. package/src/dap/defaults.json +1 -1
  137. package/src/debug/crash-diagnostics.ts +2 -1
  138. package/src/debug/report-bundle.ts +19 -0
  139. package/src/debug/system-info.ts +8 -3
  140. package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.ts +21 -7
  141. package/src/discovery/agents-md.ts +1 -1
  142. package/src/discovery/helpers.ts +1 -2
  143. package/src/discovery/mcp-compat.ts +120 -17
  144. package/src/edit/apply-patch/index.ts +12 -1
  145. package/src/edit/index.ts +13 -17
  146. package/src/edit/modes/patch.ts +187 -8
  147. package/src/edit/modes/replace.ts +136 -0
  148. package/src/eval/js/context-manager.ts +29 -3
  149. package/src/eval/js/worker-entry.ts +51 -18
  150. package/src/eval/py/executor.ts +14 -4
  151. package/src/eval/py/runner.py +144 -5
  152. package/src/exec/bash-executor.ts +81 -4
  153. package/src/exec/bash-shell-guardian.ts +4 -1
  154. package/src/exec/bash-shell-supervisor.ts +8 -4
  155. package/src/exec/isolated-shell.ts +5 -1
  156. package/src/export/html/index.ts +46 -6
  157. package/src/extensibility/custom-tools/wrapper.ts +3 -1
  158. package/src/extensibility/extensions/loader.ts +8 -1
  159. package/src/extensibility/plugins/marketplace/fetcher.ts +2 -2
  160. package/src/gjc-runtime/gc-runtime.ts +33 -6
  161. package/src/gjc-runtime/launch-tmux.ts +7 -2
  162. package/src/gjc-runtime/launch-worktree.test.ts +148 -0
  163. package/src/gjc-runtime/launch-worktree.ts +101 -14
  164. package/src/gjc-runtime/managed-owner-admission.ts +46 -2
  165. package/src/gjc-runtime/session-resolution.ts +38 -6
  166. package/src/gjc-runtime/session-state-lock.ts +59 -14
  167. package/src/gjc-runtime/state-runtime.ts +23 -19
  168. package/src/hooks/native-skill-hook.ts +14 -11
  169. package/src/internal-urls/docs-index.generated.ts +14 -13
  170. package/src/internal-urls/local-protocol.ts +142 -8
  171. package/src/lsp/index.ts +29 -0
  172. package/src/lsp/workspace-path.ts +23 -0
  173. package/src/migrate/action-planner.ts +57 -0
  174. package/src/migrate/adapters/claude-code.ts +23 -4
  175. package/src/migrate/adapters/codex.ts +22 -4
  176. package/src/migrate/adapters/index.ts +22 -4
  177. package/src/migrate/adapters/opencode.ts +6 -1
  178. package/src/migrate/executor.ts +84 -7
  179. package/src/migrate/report.ts +19 -2
  180. package/src/migrate/types.ts +14 -4
  181. package/src/modes/DESIGN.md +51 -0
  182. package/src/modes/acp/permission-mode.ts +18 -1
  183. package/src/modes/components/assistant-message.ts +55 -1
  184. package/src/modes/components/settings-selector.ts +103 -37
  185. package/src/modes/controllers/command-controller.ts +38 -2
  186. package/src/modes/controllers/plan-mode-controller.ts +17 -7
  187. package/src/modes/controllers/selector-controller.ts +62 -6
  188. package/src/modes/interactive-mode.ts +68 -0
  189. package/src/modes/theme/theme.ts +15 -0
  190. package/src/prompts/tools/debug.md +1 -1
  191. package/src/prompts/tools/read.md +1 -1
  192. package/src/prompts/tools/report-issue.md +13 -0
  193. package/src/prompts/tools/task.md +1 -1
  194. package/src/runtime-credential-selector.ts +2 -2
  195. package/src/runtime-mcp/content-limits.ts +7 -0
  196. package/src/runtime-mcp/manager-pool.test.ts +5 -4
  197. package/src/runtime-mcp/manager.ts +32 -0
  198. package/src/runtime-mcp/oauth-flow.ts +32 -6
  199. package/src/runtime-mcp/plugin-mcp-name-filter.ts +62 -0
  200. package/src/runtime-mcp/render.ts +16 -1
  201. package/src/runtime-mcp/tool-bridge.ts +126 -17
  202. package/src/sdk/broker/broker-exit.ts +8 -5
  203. package/src/sdk/broker/broker.ts +342 -82
  204. package/src/sdk/broker/daemon-entry.ts +338 -116
  205. package/src/sdk/broker/doctor-restart.ts +2 -1
  206. package/src/sdk/broker/ensure.ts +1143 -265
  207. package/src/sdk/broker/hop.ts +274 -0
  208. package/src/sdk/broker/lifecycle-ledger.ts +35 -11
  209. package/src/sdk/broker/lock-host-identity.ts +29 -0
  210. package/src/sdk/broker/session-index.ts +62 -12
  211. package/src/sdk/bus/chat-command-policy.ts +16 -3
  212. package/src/sdk/bus/index.ts +52 -21
  213. package/src/sdk/bus/reconciliation-store.ts +201 -8
  214. package/src/sdk/bus/telegram-daemon-contract.ts +3 -1
  215. package/src/sdk/cli/session-cli.ts +21 -6
  216. package/src/sdk/host/session-runtime.test.ts +118 -23
  217. package/src/sdk/host/session-runtime.ts +352 -47
  218. package/src/sdk/lifecycle/service.ts +1 -0
  219. package/src/sdk/prompt-deadline-flush.ts +78 -5
  220. package/src/sdk/prompt-deadline-manager.ts +68 -14
  221. package/src/sdk/protocol/adapter-validation.ts +53 -11
  222. package/src/sdk/protocol/operation-inventory.generated.json +101 -2
  223. package/src/sdk/reconciliation-extensions.ts +1 -0
  224. package/src/sdk/session-list.ts +1 -0
  225. package/src/sdk/session.ts +114 -61
  226. package/src/session/agent-session.ts +1043 -81
  227. package/src/session/internal/managed-session-scope.ts +126 -39
  228. package/src/session/internal/managed-session-storage.ts +14 -11
  229. package/src/session/internal/native-publish-outcome.ts +5 -1
  230. package/src/session/messages.ts +47 -6
  231. package/src/session/session-manager.ts +236 -14
  232. package/src/session/startup-auth-config.ts +116 -8
  233. package/src/session/streaming-output.ts +262 -4
  234. package/src/session/terminal-abort.ts +14 -2
  235. package/src/session-import/service.ts +1 -0
  236. package/src/skill-state/workflow-mutation-guard.ts +491 -32
  237. package/src/slash-commands/builtin-registry.ts +15 -3
  238. package/src/slash-commands/helpers/credential-switch.ts +10 -5
  239. package/src/slash-commands/helpers/provider-auth-status.ts +456 -0
  240. package/src/task/executor.ts +103 -12
  241. package/src/task/index.ts +389 -175
  242. package/src/tools/ast-edit-write-path.ts +64 -0
  243. package/src/tools/ast-edit.ts +18 -1
  244. package/src/tools/atomic-file-write.ts +46 -15
  245. package/src/tools/auto-generated-guard.ts +3 -0
  246. package/src/tools/bash-allowed-prefixes.ts +153 -5
  247. package/src/tools/bash-interactive.ts +14 -2
  248. package/src/tools/bash.ts +14 -0
  249. package/src/tools/debug.ts +7 -6
  250. package/src/tools/descriptors.test.ts +44 -0
  251. package/src/tools/descriptors.ts +34 -2
  252. package/src/tools/fetch.ts +3 -2
  253. package/src/tools/index.ts +2 -0
  254. package/src/tools/output-meta.ts +23 -2
  255. package/src/tools/python.ts +1 -1
  256. package/src/tools/read.ts +17 -35
  257. package/src/tools/report-issue.ts +184 -0
  258. package/src/tools/subagent-render.ts +114 -12
  259. package/src/tools/subagent.ts +108 -1
  260. package/src/tools/todo-write.ts +41 -3
  261. package/src/tools/tool-catalog.generated.ts +31 -3
  262. package/src/tools/write.ts +35 -3
  263. package/src/utils/commit-message-generator.ts +9 -2
  264. package/src/utils/file-mentions.ts +29 -1
  265. package/src/utils/title-generator.ts +7 -2
  266. package/src/web/scrapers/index.ts +3 -1
  267. package/src/web/scrapers/types.ts +8 -0
  268. package/src/web/scrapers/youtube.ts +3 -2
  269. package/src/web/search/providers/insane.ts +91 -28
  270. package/src/web/search/providers/searxng.ts +62 -10
@@ -0,0 +1,39 @@
1
+ export interface ConfigHotReloadPaths {
2
+ readonly configPath: string;
3
+ readonly modelsPath: string;
4
+ }
5
+ export interface ConfigHotReloadFileSnapshot {
6
+ readonly path: string;
7
+ readonly text: string | null;
8
+ readonly identity: string;
9
+ }
10
+ export interface ConfigHotReloadCandidate {
11
+ readonly revision: number;
12
+ readonly config: ConfigHotReloadFileSnapshot;
13
+ readonly models: ConfigHotReloadFileSnapshot;
14
+ }
15
+ export type ConfigHotReloadErrorOperation = "watch" | "read" | "validate" | "apply";
16
+ /** A path-free diagnostic for watcher, snapshot, and callback failures. */
17
+ export declare class ConfigHotReloadError extends Error {
18
+ readonly operation: ConfigHotReloadErrorOperation;
19
+ readonly code: string | undefined;
20
+ constructor(operation: ConfigHotReloadErrorOperation, code?: string);
21
+ }
22
+ export interface ConfigHotReloadWatcherOptions {
23
+ /** Validate the snapshots without mutating live state before a candidate may supersede queued work. */
24
+ readonly onValidate: (candidate: ConfigHotReloadCandidate) => void | Promise<void>;
25
+ /** Apply these text snapshots, not a second read of their paths, and honor abort before commit. */
26
+ readonly onCandidate: (candidate: ConfigHotReloadCandidate, signal: AbortSignal) => void | Promise<void>;
27
+ readonly onError: (error: ConfigHotReloadError) => void;
28
+ }
29
+ /** Watches resolved config and models files and delivers immutable source snapshots. */
30
+ export declare class ConfigHotReloadWatcher {
31
+ #private;
32
+ constructor(options: ConfigHotReloadWatcherOptions);
33
+ /** Establishes the initial fingerprint baseline without emitting a candidate. */
34
+ start(paths: ConfigHotReloadPaths): Promise<void>;
35
+ /** Rebinds after session or configuration-root changes, fencing old work. */
36
+ rebind(paths: ConfigHotReloadPaths): Promise<void>;
37
+ /** Closes all watches and cancels or fences pending and in-flight callbacks. */
38
+ dispose(): void;
39
+ }
@@ -2,6 +2,8 @@ import type { NativeDirectoryTreeResult, NativeExactUnlinkResult } from "@gajae-
2
2
  import { renameDirectoryNoReplacePathAsync, renameNoReplacePathAsync } from "@gajae-code/natives";
3
3
  export interface FileLockOptions {
4
4
  staleMs?: number;
5
+ /** Age after which an ownerless removal transition may be adopted; defaults to `staleMs`. */
6
+ orphanTransitionAgeMs?: number;
5
7
  retries?: number;
6
8
  retryDelayMs?: number;
7
9
  signal?: AbortSignal;
@@ -42,6 +44,7 @@ export declare class FileLockAcquireError extends Error {
42
44
  constructor(filePath: string, lockPath: string, attempts: number, holder: string, reason?: FileLockAcquireReason, orphanPath?: string | undefined, removalFailure?: FileLockStaleRemovalFailure | undefined);
43
45
  }
44
46
  export declare function isFileLockAcquireTimeout(error: unknown): error is FileLockAcquireError;
47
+ export declare const FILE_LOCK_ORPHAN_TRANSITION_ADOPTION_AGE_MS: number;
45
48
  /** Release retries cover transient handle denial and a competing exact-removal quarantine cleanup. */
46
49
  export declare const FILE_LOCK_RELEASE_RETRY_ATTEMPTS = 20;
47
50
  export declare const FILE_LOCK_RELEASE_RETRY_DELAY_MS = 25;
@@ -52,6 +55,10 @@ export declare const FileLockTestHooks: {
52
55
  renameNoReplacePathAsync: typeof renameNoReplacePathAsync;
53
56
  renameDirectoryNoReplacePathAsync: typeof renameDirectoryNoReplacePathAsync;
54
57
  };
58
+ stagingIdentityEvidence?: () => {
59
+ processIncarnation: string | null;
60
+ startTime: string | null;
61
+ };
55
62
  nativeQuarantineBindings?: () => NativeFileLockBindings;
56
63
  nativeExactRemovalProbe?: () => boolean | Promise<boolean>;
57
64
  };
@@ -177,7 +184,7 @@ export declare function acquireFileLock(filePath: string, options?: FileLockOpti
177
184
  * that fact through its own `lockHeld` path instead of acquiring it again.
178
185
  */
179
186
  export declare function withFileLock<T>(filePath: string, fn: () => Promise<T>, options?: FileLockOptions): Promise<T>;
180
- /** Strictly recognize the staging names emitted by tryAcquireLock. */
187
+ /** Return a name-encoded staging PID for GC discovery. */
181
188
  export declare function fileLockStagingOwnerPid(name: string): number | null;
182
189
  export interface FileLockStagingResult {
183
190
  path: string;
@@ -53,6 +53,8 @@ export declare class ModelDiscoveryManager<TProvider extends DiscoveryProvider>
53
53
  get providers(): readonly TProvider[];
54
54
  providerIds(): Set<string>;
55
55
  getState(provider: string): ProviderDiscoveryState | undefined;
56
+ /** Retain accepted discovery evidence for unchanged providers during a local reload. */
57
+ retainStatesFrom(source: ModelDiscoveryManager<TProvider>, providers: ReadonlySet<string>): void;
56
58
  invalidate(provider: string): void;
57
59
  loadCached(provider: TProvider, cacheDbPath?: string, expectedProvenance?: string): readonly Model<Api>[];
58
60
  beginRefresh(provider: string): DiscoveryRefreshToken;
@@ -1,6 +1,6 @@
1
1
  import { ThinkingLevel } from "@gajae-code/agent-core";
2
2
  import { type Api, type Model } from "@gajae-code/ai/core";
3
- import type { AgentSession, DefaultFallbackRuntimeState } from "../session/agent-session";
3
+ import type { AgentSession, AgentSessionProfileInstalledOverrideState, DefaultFallbackRuntimeState } from "../session/agent-session";
4
4
  import { type ModelProfileDefinition } from "./model-profiles";
5
5
  export { resolveModelProfileName } from "./model-profile-contract";
6
6
  import { type GjcModelAssignmentTargetId, type ModelRegistry } from "./model-registry";
@@ -16,7 +16,16 @@ type ModelProfileActivationSession = Pick<AgentSession, "model" | "thinkingLevel
16
16
  setActiveModelProfile?: (name: string | undefined) => void;
17
17
  getActiveModelProfile?: () => string | undefined;
18
18
  /** Record which runtime override keys this activation installed (session-scoped). */
19
- noteProfileInstalledOverrides?: (modelRoles: readonly string[], agentModelOverrides: readonly string[], preProfileModel: Model<Api> | undefined) => void;
19
+ noteProfileInstalledOverrides?: (modelRoles: readonly string[], agentModelOverrides: readonly string[], preProfileModel: Model<Api> | undefined, baseline?: {
20
+ modelRoles: Readonly<Record<string, ModelSelectorValue>>;
21
+ agentModelOverrides: Readonly<Record<string, ModelSelectorValue>>;
22
+ }, installed?: {
23
+ modelRoles: Readonly<Record<string, ModelSelectorValue>>;
24
+ agentModelOverrides: Readonly<Record<string, ModelSelectorValue>>;
25
+ }, manual?: {
26
+ modelRoles: readonly string[];
27
+ agentModelOverrides: readonly string[];
28
+ }) => void;
20
29
  /** Drop the recorded profile-installed override keys (e.g. after materialization). */
21
30
  clearProfileInstalledOverrides?: () => void;
22
31
  /** Current profile-installed override keys, for deriving the activation base. */
@@ -24,11 +33,15 @@ type ModelProfileActivationSession = Pick<AgentSession, "model" | "thinkingLevel
24
33
  modelRoles: readonly string[];
25
34
  agentModelOverrides: readonly string[];
26
35
  };
36
+ /** Profile-installed baselines, preserved when a refreshed profile drops an assignment. */
37
+ getProfileInstalledOverrideState?: () => AgentSessionProfileInstalledOverrideState;
38
+ restoreProfileInstalledOverrideState?: (state: AgentSessionProfileInstalledOverrideState) => void;
27
39
  /** Re-apply vendor-separated delegation (task tool + prompt) after the role layer changed. */
28
40
  syncEagerDelegation?: () => Promise<void>;
29
41
  getSessionDefaultModelSelector?: () => string | undefined;
30
42
  recordResumeDefaultModel?: (selector: string | undefined) => void;
31
43
  getUserCanonicalVariantSelection?: () => UserCanonicalVariantSelection;
44
+ getUserModelSelectionRevision?: () => number;
32
45
  seedDefaultFallbackResolution?: (activeIndex: number, skips: Array<{
33
46
  selector: string;
34
47
  reason: string;
@@ -36,7 +49,10 @@ type ModelProfileActivationSession = Pick<AgentSession, "model" | "thinkingLevel
36
49
  getDefaultFallbackRuntimeState?: () => DefaultFallbackRuntimeState;
37
50
  restoreDefaultFallbackRuntimeState?: (state: DefaultFallbackRuntimeState) => void;
38
51
  restoreModelSelectionForRollback?: AgentSession["restoreModelSelectionForRollback"];
39
- modelRegistry?: Pick<ModelRegistry, "getSessionCanonicalVariant" | "restoreSessionCanonicalVariant" | "clearCanonicalVariant" | "getAvailable" | "lookupAliasExists" | "resolveModelByLookupAlias" | "authStorage" | "isCredentiallessProvider">;
52
+ prepareModelSelectionForProfileActivation?: AgentSession["prepareModelSelectionForProfileActivation"];
53
+ commitPreparedProfileModelSelection?: AgentSession["commitPreparedProfileModelSelection"];
54
+ finishPreparedProfileModelSelection?: AgentSession["finishPreparedProfileModelSelection"];
55
+ modelRegistry?: Pick<ModelRegistry, "getSessionCanonicalVariant" | "restoreSessionCanonicalVariant" | "clearCanonicalVariant" | "getAvailable" | "lookupAliasExists" | "resolveModelByLookupAlias" | "authStorage" | "isCredentiallessProvider"> & Partial<Pick<ModelRegistry, "seedCanonicalVariant">>;
40
56
  getConfiguredModelChainState?: (role: string) => ConfiguredModelChainState | undefined;
41
57
  };
42
58
  type ConfiguredModelChainState = {
@@ -45,18 +61,45 @@ type ConfiguredModelChainState = {
45
61
  identity?: string;
46
62
  explicitHead: boolean;
47
63
  };
64
+ type PublishedModelProfileActivationState = {
65
+ model: Model<Api> | undefined;
66
+ thinkingLevel: ThinkingLevel | undefined;
67
+ modelRolesOverride: Readonly<Record<string, ModelSelectorValue>> | undefined;
68
+ agentModelOverridesOverride: Readonly<Record<string, ModelSelectorValue>> | undefined;
69
+ defaultChainState: ConfiguredModelChainState | undefined;
70
+ defaultFallbackRuntimeState: DefaultFallbackRuntimeState | undefined;
71
+ activeModelProfile: string | undefined;
72
+ profileInstalledOverrideState: AgentSessionProfileInstalledOverrideState | undefined;
73
+ sessionDefaultModel: string | undefined;
74
+ persistedModelRoles: Readonly<Record<string, ModelSelectorValue>> | undefined;
75
+ persistedAgentModelOverrides: Readonly<Record<string, ModelSelectorValue>> | undefined;
76
+ persistedDefaultProfile: string | undefined;
77
+ persistedDefaultThinkingLevel: Exclude<ThinkingLevel, "inherit"> | undefined;
78
+ defaultThinkingLevelOverride: Exclude<ThinkingLevel, "inherit"> | undefined;
79
+ defaultProfileOverride: string | undefined;
80
+ };
48
81
  export interface PrepareModelProfileActivationOptions {
49
82
  session: ModelProfileActivationSession;
50
- modelRegistry: Pick<ModelRegistry, "getModelProfile" | "getModelProfiles" | "getAvailableModelProfileNames" | "getApiKeyForProvider" | "getAll" | "resolveCanonicalModel" | "getCanonicalVariants" | "getCanonicalId" | "isSelectorCircuitOpen"> & Partial<Pick<ModelRegistry, "getAvailable" | "resolveModelByLookupAlias" | "lookupAliasExists" | "clearCanonicalVariant" | "seedCanonicalVariant" | "getSessionCanonicalVariant" | "restoreSessionCanonicalVariant" | "getConfiguredProviderIds" | "isKnownProvider">> & {
83
+ modelRegistry: Pick<ModelRegistry, "getModelProfile" | "getModelProfiles" | "getAvailableModelProfileNames" | "getApiKeyForProvider" | "getAll" | "resolveCanonicalModel" | "getCanonicalVariants" | "getCanonicalId" | "isSelectorCircuitOpen"> & Partial<Pick<ModelRegistry, "getAvailable" | "hasUsableAuthForProvider" | "isStagedReloadCandidate" | "resolveModelByLookupAlias" | "lookupAliasExists" | "clearCanonicalVariant" | "seedCanonicalVariant" | "getSessionCanonicalVariant" | "restoreSessionCanonicalVariant" | "getConfiguredProviderIds" | "getConfiguredModelBindings" | "isKnownProvider">> & {
51
84
  getError?: ModelRegistry["getError"];
52
85
  authStorage?: ModelRegistry["authStorage"];
53
86
  };
54
87
  settings: Pick<Settings, "get" | "getGlobal" | "getOverride">;
88
+ /** Live mutation target when `settings` is a validated staged view. */
89
+ settingsForApply?: Settings;
90
+ prepareSessionModelSelection?: boolean;
91
+ preserveManualOverrides?: boolean;
92
+ preserveCanonicalVariant?: boolean;
93
+ signal?: AbortSignal;
55
94
  profileName: string;
56
95
  }
57
96
  export interface ApplyModelProfileActivationOptions {
58
97
  persistDefault?: boolean;
59
98
  thinkingLevelOverride?: ThinkingLevel;
99
+ preserveDefaultModelSelection?: boolean;
100
+ preserveLiveModelSelection?: boolean;
101
+ deferRuntimePublication?: boolean;
102
+ signal?: AbortSignal;
60
103
  /** Cancels deferred activation if a newer user model selection exists. */
61
104
  isCurrent?: () => boolean;
62
105
  }
@@ -77,11 +120,16 @@ export interface PreparedModelProfileActivation {
77
120
  previousDefaultProfileOverride: string | undefined;
78
121
  previousPersistedDefaultProfile: string | undefined;
79
122
  previousPersistedDefaultThinkingLevel: Exclude<ThinkingLevel, "inherit"> | undefined;
80
- previousDefaultThinkingLevelOverride: ThinkingLevel | undefined;
123
+ previousDefaultThinkingLevelOverride: Exclude<ThinkingLevel, "inherit"> | undefined;
81
124
  baseAgentModelOverrides: Record<string, ModelSelectorValue>;
82
125
  baseModelRoles: Record<string, ModelSelectorValue>;
83
126
  previousDefaultChain: readonly string[] | undefined;
84
127
  previousDefaultChainState: ConfiguredModelChainState | undefined;
128
+ previousProfileInstalledOverrideState: AgentSessionProfileInstalledOverrideState | undefined;
129
+ preparedDefaultModelSelection: Awaited<ReturnType<NonNullable<ModelProfileActivationSession["prepareModelSelectionForProfileActivation"]>>> | undefined;
130
+ defaultChainPublished: boolean;
131
+ defaultModelPublished: boolean;
132
+ publishedState: PublishedModelProfileActivationState | undefined;
85
133
  previousDefaultFallbackRuntimeState: DefaultFallbackRuntimeState | undefined;
86
134
  defaultModel: Model<Api> | undefined;
87
135
  defaultThinkingLevel: ThinkingLevel | undefined;
@@ -96,6 +144,8 @@ export interface PreparedModelProfileActivation {
96
144
  }>;
97
145
  modelRoles: Record<string, ModelSelectorValue>;
98
146
  agentModelOverrides: Record<string, ModelSelectorValue>;
147
+ manualModelRoleOverrides: ReadonlySet<string>;
148
+ manualAgentModelOverrides: ReadonlySet<string>;
99
149
  previousActiveModelProfile: string | undefined;
100
150
  /**
101
151
  * The session resume default ("provider/id") captured BEFORE activation —
@@ -253,7 +303,12 @@ export declare function resolveModelProfileDefaultChain(options: {
253
303
  }>;
254
304
  export declare function rewriteSelectorForProxy(selector: string, proxyProvider: string, proxyMode: ModelProfileProxyMode, allModels: Model<Api>[], directlyAuthenticated: ReadonlySet<string>, routableProviders: ReadonlySet<string>): string;
255
305
  export declare function prepareModelProfileActivation(options: PrepareModelProfileActivationOptions): Promise<PreparedModelProfileActivation>;
306
+ /** Publish the prepared model selection and role layer without awaiting. */
307
+ export declare function publishPreparedModelProfileActivation(prepared: PreparedModelProfileActivation, options?: Pick<ApplyModelProfileActivationOptions, "preserveDefaultModelSelection" | "preserveLiveModelSelection">): void;
308
+ export declare function finishPreparedModelProfileActivation(prepared: PreparedModelProfileActivation): Promise<void>;
256
309
  export declare function applyPreparedModelProfileActivation(prepared: PreparedModelProfileActivation, options?: ApplyModelProfileActivationOptions): Promise<void>;
310
+ /** Restore an applied activation when its enclosing settings/registry commit fails. */
311
+ export declare function rollbackPreparedModelProfileActivation(prepared: PreparedModelProfileActivation, options?: ApplyModelProfileActivationOptions): Promise<void>;
257
312
  export interface MaterializeModelProfileForDeletionResult {
258
313
  modelRoles: Record<string, ModelSelectorValue>;
259
314
  agentModelOverrides: Record<string, ModelSelectorValue>;
@@ -269,6 +324,7 @@ export interface MaterializeModelProfileForDeletionResult {
269
324
  previousActiveModelProfile: string | undefined;
270
325
  previousDefaultChainState: ConfiguredModelChainState | undefined;
271
326
  previousDefaultFallbackRuntimeState: DefaultFallbackRuntimeState | undefined;
327
+ previousProfileInstalledOverrideState: AgentSessionProfileInstalledOverrideState | undefined;
272
328
  /**
273
329
  * Restores the session sticky canonical variant that was snapshotted before
274
330
  * materialization cleared it. Internal closure capturing the registry,
@@ -283,7 +339,7 @@ export declare function materializeModelProfileForDeletion(options: PrepareModel
283
339
  }): Promise<MaterializeModelProfileForDeletionResult>;
284
340
  export declare function restoreMaterializedModelProfileForDeletion(options: {
285
341
  settings: Pick<Settings, "clearOverride" | "flushOrThrow" | "override" | "set" | "unset">;
286
- session: Pick<ModelProfileActivationSession, "setActiveModelProfile" | "setConfiguredModelChain" | "restoreDefaultFallbackRuntimeState">;
342
+ session: Pick<ModelProfileActivationSession, "setActiveModelProfile" | "setConfiguredModelChain" | "restoreDefaultFallbackRuntimeState" | "restoreProfileInstalledOverrideState">;
287
343
  snapshot: MaterializeModelProfileForDeletionResult;
288
344
  }): Promise<void>;
289
345
  export declare function activateModelProfile(options: PrepareModelProfileActivationOptions, applyOptions?: ApplyModelProfileActivationOptions): Promise<void>;
@@ -5,15 +5,15 @@ import { type ActiveProviderDescriptor } from "../sdk/providers";
5
5
  import type { AuthStorage } from "../session/auth-storage";
6
6
  import type { ActiveSearchModelContext, WebSearchMode } from "../web/search/types";
7
7
  import { type BillingPath } from "./billing-path";
8
- import { ConfigError, ConfigFile } from "./config-file";
8
+ import { ConfigError, ConfigFile, type LoadResult } from "./config-file";
9
9
  import { isAuthenticated, kNoAuth } from "./model-auth";
10
10
  import { type ConfiguredModelBindings } from "./model-bindings-applier";
11
11
  import { type ProviderDiscoveryState } from "./model-discovery-manager";
12
- import { type ModelPresetRegistryDependencies, type ModelPresetRegistryRefreshResult } from "./model-preset-registry";
12
+ import { type AcceptedModelPresetRegistry, type ModelPresetRegistryDependencies, type ModelPresetRegistryRefreshResult } from "./model-preset-registry";
13
13
  export type { ProviderDiscoveryState, ProviderDiscoveryStatus } from "./model-discovery-manager";
14
14
  import { type CanonicalModelIndex, type CanonicalModelRecord, type CanonicalModelVariant, type ModelEquivalenceConfig } from "./model-equivalence";
15
15
  import { type ModelProfileDefinition } from "./model-profiles";
16
- import { GJC_MODEL_ASSIGNMENT_TARGET_IDS, type ModelProfileConfig } from "./models-config-schema";
16
+ import { GJC_MODEL_ASSIGNMENT_TARGET_IDS, type ModelProfileConfig, type ModelsConfig } from "./models-config-schema";
17
17
  import { type EffectiveProviderAuth } from "./provider-selection-policy";
18
18
  import { type Settings } from "./settings";
19
19
  export type { BillingPath, BillingPathKind } from "./billing-path";
@@ -78,6 +78,7 @@ export declare const ModelsConfigFile: ConfigFile<{
78
78
  sendSessionHeaders?: boolean | undefined;
79
79
  supportsResponsesSessionAffinity?: boolean | undefined;
80
80
  supportsServiceTier?: boolean | undefined;
81
+ supportsUltrafastTier?: boolean | undefined;
81
82
  supportsMultipleSystemMessages?: boolean | undefined;
82
83
  supportsReasoningEffort?: boolean | undefined;
83
84
  reasoningEffortMap?: {
@@ -163,6 +164,7 @@ export declare const ModelsConfigFile: ConfigFile<{
163
164
  sendSessionHeaders?: boolean | undefined;
164
165
  supportsResponsesSessionAffinity?: boolean | undefined;
165
166
  supportsServiceTier?: boolean | undefined;
167
+ supportsUltrafastTier?: boolean | undefined;
166
168
  supportsMultipleSystemMessages?: boolean | undefined;
167
169
  supportsReasoningEffort?: boolean | undefined;
168
170
  reasoningEffortMap?: {
@@ -212,6 +214,7 @@ export declare const ModelsConfigFile: ConfigFile<{
212
214
  extraBody?: Record<string, unknown> | undefined;
213
215
  } | undefined;
214
216
  cacheRetention?: "long" | "none" | "short" | undefined;
217
+ streamIdleTimeoutMs?: number | undefined;
215
218
  }[] | undefined;
216
219
  modelOverrides?: Record<string, {
217
220
  name?: string | undefined;
@@ -241,6 +244,7 @@ export declare const ModelsConfigFile: ConfigFile<{
241
244
  sendSessionHeaders?: boolean | undefined;
242
245
  supportsResponsesSessionAffinity?: boolean | undefined;
243
246
  supportsServiceTier?: boolean | undefined;
247
+ supportsUltrafastTier?: boolean | undefined;
244
248
  supportsMultipleSystemMessages?: boolean | undefined;
245
249
  supportsReasoningEffort?: boolean | undefined;
246
250
  reasoningEffortMap?: {
@@ -290,10 +294,12 @@ export declare const ModelsConfigFile: ConfigFile<{
290
294
  extraBody?: Record<string, unknown> | undefined;
291
295
  } | undefined;
292
296
  cacheRetention?: "long" | "none" | "short" | undefined;
297
+ streamIdleTimeoutMs?: number | undefined;
293
298
  }> | undefined;
294
299
  disableStrictTools?: boolean | undefined;
295
300
  transport?: "pi-native" | undefined;
296
301
  cacheRetention?: "long" | "none" | "short" | undefined;
302
+ streamIdleTimeoutMs?: number | undefined;
297
303
  openaiCompat?: {
298
304
  baseUrl: string;
299
305
  apiKey?: string | undefined;
@@ -325,6 +331,7 @@ interface ProviderOverride {
325
331
  transport?: Model<Api>["transport"];
326
332
  requestTransform?: ModelRequestTransform;
327
333
  cacheRetention?: CacheRetention;
334
+ streamIdleTimeoutMs?: number;
328
335
  isOAuth?: boolean;
329
336
  }
330
337
  /**
@@ -359,7 +366,7 @@ export declare function registrySelectorResolvesToModel(selector: string, index:
359
366
  * See `xiaomi-tp-discovery-merge.test.ts` and the `refresh()` baseUrl-override
360
367
  * regression in `model-registry.test.ts`.
361
368
  */
362
- export declare function mergeDiscoveredModel<TApi extends Api>(model: Model<TApi>, existing: Model<Api> | undefined, providerOverride?: Pick<ProviderOverride, "baseUrl" | "headers" | "transport" | "requestTransform" | "cacheRetention">): Model<TApi>;
369
+ export declare function mergeDiscoveredModel<TApi extends Api>(model: Model<TApi>, existing: Model<Api> | undefined, providerOverride?: Pick<ProviderOverride, "baseUrl" | "headers" | "transport" | "requestTransform" | "cacheRetention" | "streamIdleTimeoutMs">): Model<TApi>;
363
370
  export interface CanonicalModelQueryOptions {
364
371
  availableOnly?: boolean;
365
372
  candidates?: readonly Model<Api>[];
@@ -373,6 +380,25 @@ export interface CanonicalModelSelection {
373
380
  record: CanonicalModelRecord;
374
381
  model: Model<Api> | undefined;
375
382
  }
383
+ export interface ModelsConfigReloadCandidate {
384
+ readonly valid: boolean;
385
+ readonly changed: boolean;
386
+ readonly diagnostics: {
387
+ readonly valid: boolean;
388
+ readonly errors: readonly unknown[];
389
+ };
390
+ readonly registry: ModelRegistry;
391
+ isCurrent(): boolean;
392
+ commit(): void;
393
+ rollback(): void;
394
+ finalize(): void;
395
+ }
396
+ interface ModelRegistryInternalOptions {
397
+ readonly configFile: ConfigFile<ModelsConfig>;
398
+ readonly configSource: LoadResult<ModelsConfig>;
399
+ readonly runtimeSource: ModelRegistry;
400
+ readonly acceptedPresets: AcceptedModelPresetRegistry;
401
+ }
376
402
  /**
377
403
  * Model registry - loads and manages models, resolves API keys via AuthStorage.
378
404
  */
@@ -382,7 +408,15 @@ export declare class ModelRegistry {
382
408
  /**
383
409
  * @param authStorage - Auth storage for API key resolution
384
410
  */
385
- constructor(authStorage: AuthStorage, modelsPath?: string, registrySettings?: Pick<Settings, "get" | "getGlobal"> & Partial<Pick<Settings, "commitAtomicBatchWithCurrent">>, modelPresetRegistryDependencies?: ModelPresetRegistryDependencies);
411
+ constructor(authStorage: AuthStorage, modelsPath?: string, registrySettings?: Pick<Settings, "get" | "getGlobal"> & Partial<Pick<Settings, "commitAtomicBatchWithCurrent">>, modelPresetRegistryDependencies?: ModelPresetRegistryDependencies, internalOptions?: ModelRegistryInternalOptions);
412
+ getModelsConfigPath(): string | undefined;
413
+ stageModelsConfigReload(snapshot: {
414
+ path: string;
415
+ text: string | null;
416
+ identity: string;
417
+ }, registrySettings?: Pick<Settings, "get" | "getGlobal">): Promise<ModelsConfigReloadCandidate>;
418
+ withConsumerLease<T>(body: () => T | Promise<T>, signal?: AbortSignal): Promise<T>;
419
+ acquirePublicationFence(signal?: AbortSignal): Promise<() => void>;
386
420
  dispose(): Promise<void>;
387
421
  onCatalogChanged(listener: () => void): () => void;
388
422
  /** Replace the read-only settings snapshot used by profile-scoped resolution. */
@@ -431,6 +465,19 @@ export declare class ModelRegistry {
431
465
  getAll(): Model<Api>[];
432
466
  /** Provider ids declared in models.yml, including override-only providers. */
433
467
  getConfiguredProviderIds(): readonly string[];
468
+ /** Configured API-key sources in models.yml precedence order, excluding absent environment values. */
469
+ getProviderConfigApiKeySources(provider: string): Array<{
470
+ kind: "environment";
471
+ name: string;
472
+ provider: string;
473
+ } | {
474
+ kind: "models-yml";
475
+ provider: string;
476
+ }>;
477
+ /** Environment variable name for a provider API key supplied by runtime setup. */
478
+ getProviderRuntimeApiKeyEnvName(provider: string): string | undefined;
479
+ /** Whether a runtime extension's provider API key is currently installed in AuthStorage. */
480
+ hasRuntimeProviderApiKey(provider: string): boolean;
434
481
  /**
435
482
  * Whether this registry can serve a provider id from any active source.
436
483
  *
@@ -608,6 +655,10 @@ export declare class ModelRegistry {
608
655
  preferredCredentialSelector?: AuthCredentialSelector;
609
656
  signal?: AbortSignal;
610
657
  }): Promise<string | undefined>;
658
+ /** Check credential availability without resolving keys or refreshing OAuth tokens. */
659
+ hasUsableAuthForProvider(provider: string, sessionId?: string): boolean;
660
+ /** @internal Whether this registry is an unpublished staged reload candidate. */
661
+ isStagedReloadCandidate(): boolean;
611
662
  /**
612
663
  * Check if a model is using OAuth credentials (subscription).
613
664
  */
@@ -164,6 +164,8 @@ export interface ModelChainResolutionOptions {
164
164
  canonicalSessionId?: string | null;
165
165
  credentialSessionId?: string;
166
166
  isCredentialUnavailable?: (provider: string) => boolean;
167
+ /** Read-only auth eligibility for staged profile preflight when no access token can be exposed. */
168
+ isProviderAuthAvailable?: (provider: string) => boolean;
167
169
  signal?: AbortSignal;
168
170
  }
169
171
  /**
@@ -5,6 +5,7 @@ export declare const ModelCompatSchema: z.ZodObject<{
5
5
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
6
6
  supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
7
7
  supportsServiceTier: z.ZodOptional<z.ZodBoolean>;
8
+ supportsUltrafastTier: z.ZodOptional<z.ZodBoolean>;
8
9
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
9
10
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
10
11
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -76,6 +77,7 @@ export declare const OpenAICompatSchema: z.ZodObject<{
76
77
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
77
78
  supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
78
79
  supportsServiceTier: z.ZodOptional<z.ZodBoolean>;
80
+ supportsUltrafastTier: z.ZodOptional<z.ZodBoolean>;
79
81
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
80
82
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
81
83
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -265,6 +267,7 @@ export declare const ModelOverrideSchema: z.ZodObject<{
265
267
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
266
268
  supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
267
269
  supportsServiceTier: z.ZodOptional<z.ZodBoolean>;
270
+ supportsUltrafastTier: z.ZodOptional<z.ZodBoolean>;
268
271
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
269
272
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
270
273
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -345,6 +348,7 @@ export declare const ModelOverrideSchema: z.ZodObject<{
345
348
  none: "none";
346
349
  short: "short";
347
350
  }>>;
351
+ streamIdleTimeoutMs: z.ZodOptional<z.ZodNumber>;
348
352
  }, z.core.$strict>;
349
353
  export type ModelOverride = z.infer<typeof ModelOverrideSchema>;
350
354
  export declare const ProviderDiscoverySchema: z.ZodObject<{
@@ -397,6 +401,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
397
401
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
398
402
  supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
399
403
  supportsServiceTier: z.ZodOptional<z.ZodBoolean>;
404
+ supportsUltrafastTier: z.ZodOptional<z.ZodBoolean>;
400
405
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
401
406
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
402
407
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -582,6 +587,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
582
587
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
583
588
  supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
584
589
  supportsServiceTier: z.ZodOptional<z.ZodBoolean>;
590
+ supportsUltrafastTier: z.ZodOptional<z.ZodBoolean>;
585
591
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
586
592
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
587
593
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -662,6 +668,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
662
668
  none: "none";
663
669
  short: "short";
664
670
  }>>;
671
+ streamIdleTimeoutMs: z.ZodOptional<z.ZodNumber>;
665
672
  }, z.core.$strict>>>;
666
673
  modelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
667
674
  name: z.ZodOptional<z.ZodString>;
@@ -731,6 +738,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
731
738
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
732
739
  supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
733
740
  supportsServiceTier: z.ZodOptional<z.ZodBoolean>;
741
+ supportsUltrafastTier: z.ZodOptional<z.ZodBoolean>;
734
742
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
735
743
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
736
744
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -811,6 +819,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
811
819
  none: "none";
812
820
  short: "short";
813
821
  }>>;
822
+ streamIdleTimeoutMs: z.ZodOptional<z.ZodNumber>;
814
823
  }, z.core.$strict>>>;
815
824
  disableStrictTools: z.ZodOptional<z.ZodBoolean>;
816
825
  transport: z.ZodOptional<z.ZodLiteral<"pi-native">>;
@@ -819,6 +828,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
819
828
  none: "none";
820
829
  short: "short";
821
830
  }>>;
831
+ streamIdleTimeoutMs: z.ZodOptional<z.ZodNumber>;
822
832
  openaiCompat: z.ZodOptional<z.ZodObject<{
823
833
  baseUrl: z.ZodString;
824
834
  apiKey: z.ZodOptional<z.ZodString>;
@@ -1,4 +1,5 @@
1
1
  import type { Effort } from "@gajae-code/ai/model-thinking";
2
+ import { type CredentialPreferenceEntryValue } from "../session/startup-auth-config";
2
3
  import { type EditMode } from "../utils/edit-mode";
3
4
  import { type AutoroutingLocalIssue, type AutoroutingProvenance, type AutoroutingSetup, type AutoroutingTierMapInput } from "./autorouting-contract";
4
5
  import { type DurableModelProfileOwnership } from "./model-profile-ownership";
@@ -122,7 +123,11 @@ type RecordValueDef = {
122
123
  values: readonly string[];
123
124
  } | {
124
125
  type: "credential-selector";
126
+ } | {
127
+ type: "credential-preference-list";
125
128
  };
129
+ /** A provider's `auth.credentialPreferences` value: one account or a non-empty ordered list of entries. */
130
+ export type CredentialPreferenceSettingValue = string | CredentialPreferenceEntryValue[];
126
131
  interface ConstrainedRecordValueDef {
127
132
  type: "autorouting-selector-value";
128
133
  pattern: string;
@@ -198,6 +203,13 @@ export declare const SETTINGS_SCHEMA: {
198
203
  readonly type: "string";
199
204
  readonly default: undefined;
200
205
  };
206
+ readonly "auth.credentialPreferences": {
207
+ readonly type: "record";
208
+ readonly default: Record<string, CredentialPreferenceSettingValue>;
209
+ readonly valueSchema: {
210
+ readonly type: "credential-preference-list";
211
+ };
212
+ };
201
213
  readonly "session.directoryMigration": {
202
214
  readonly type: "enum";
203
215
  readonly values: readonly ["copy-retain", "disabled"];
@@ -1565,12 +1577,12 @@ export declare const SETTINGS_SCHEMA: {
1565
1577
  };
1566
1578
  readonly serviceTier: {
1567
1579
  readonly type: "enum";
1568
- readonly values: readonly ["none", "auto", "default", "flex", "scale", "priority", "openai-only", "claude-only"];
1580
+ readonly values: readonly ["none", "auto", "default", "flex", "scale", "priority", "ultrafast", "openai-only", "claude-only"];
1569
1581
  readonly default: "none";
1570
1582
  readonly ui: {
1571
1583
  readonly tab: "model";
1572
1584
  readonly label: "Service Tier";
1573
- readonly description: 'Processing priority hint (none = omit). OpenAI accepts the tier values directly; Anthropic realizes `priority` as `speed: "fast"` on supported Opus models. Scoped values target one family.';
1585
+ readonly description: 'Processing priority hint (none = omit). OpenAI accepts the tier values directly; ultrafast is a 6x premium tier. Anthropic realizes `priority` as `speed: "fast"` on supported Opus models. Scoped values target one family.';
1574
1586
  readonly options: readonly [{
1575
1587
  readonly value: "none";
1576
1588
  readonly label: "None";
@@ -1591,6 +1603,10 @@ export declare const SETTINGS_SCHEMA: {
1591
1603
  readonly value: "scale";
1592
1604
  readonly label: "Scale";
1593
1605
  readonly description: "Scale Tier credits when available (OpenAI)";
1606
+ }, {
1607
+ readonly value: "ultrafast";
1608
+ readonly label: "Ultrafast";
1609
+ readonly description: "Ultrafast processing at a 6x premium (OpenAI)";
1594
1610
  }, {
1595
1611
  readonly value: "priority";
1596
1612
  readonly label: "Priority";
@@ -1608,7 +1624,7 @@ export declare const SETTINGS_SCHEMA: {
1608
1624
  };
1609
1625
  readonly "task.serviceTier": {
1610
1626
  readonly type: "enum";
1611
- readonly values: readonly ["inherit", "none", "auto", "default", "flex", "scale", "priority", "openai-only", "claude-only"];
1627
+ readonly values: readonly ["inherit", "none", "auto", "default", "flex", "scale", "priority", "ultrafast", "openai-only", "claude-only"];
1612
1628
  readonly default: "inherit";
1613
1629
  readonly ui: {
1614
1630
  readonly tab: "tasks";
@@ -1638,6 +1654,10 @@ export declare const SETTINGS_SCHEMA: {
1638
1654
  readonly value: "scale";
1639
1655
  readonly label: "Scale";
1640
1656
  readonly description: "Scale Tier credits when available (OpenAI)";
1657
+ }, {
1658
+ readonly value: "ultrafast";
1659
+ readonly label: "Ultrafast";
1660
+ readonly description: "Ultrafast processing at a 6x premium (OpenAI)";
1641
1661
  }, {
1642
1662
  readonly value: "priority";
1643
1663
  readonly label: "Priority";
@@ -3143,6 +3163,10 @@ export declare const SETTINGS_SCHEMA: {
3143
3163
  readonly type: "string";
3144
3164
  readonly default: undefined;
3145
3165
  };
3166
+ readonly "shellMinimizer.settingsHash": {
3167
+ readonly type: "string";
3168
+ readonly default: undefined;
3169
+ };
3146
3170
  readonly "shellMinimizer.only": {
3147
3171
  readonly type: "array";
3148
3172
  readonly default: string[];
@@ -3348,6 +3372,15 @@ export declare const SETTINGS_SCHEMA: {
3348
3372
  readonly description: "Enable the render_mermaid tool for Mermaid-to-ASCII rendering";
3349
3373
  };
3350
3374
  };
3375
+ readonly "reportIssue.enabled": {
3376
+ readonly type: "boolean";
3377
+ readonly default: false;
3378
+ readonly ui: {
3379
+ readonly tab: "tools";
3380
+ readonly label: "Tool issue reporting";
3381
+ readonly description: "Enable the report_issue tool: the model records tool behavior that contradicts the tool's description into the local ~/.gjc/tool-issues.db. Nothing is sent anywhere.";
3382
+ };
3383
+ };
3351
3384
  readonly "debug.enabled": {
3352
3385
  readonly type: "boolean";
3353
3386
  readonly default: true;
@@ -4101,6 +4134,15 @@ export declare const SETTINGS_SCHEMA: {
4101
4134
  }];
4102
4135
  };
4103
4136
  };
4137
+ readonly "task.compactSubagentPanel": {
4138
+ readonly type: "boolean";
4139
+ readonly default: false;
4140
+ readonly ui: {
4141
+ readonly tab: "tasks";
4142
+ readonly label: "Compact Subagent Panel";
4143
+ readonly description: "Collapse awaited subagents into one summary line (expand tool output to see each one) and refresh only when the summary changes";
4144
+ };
4145
+ };
4104
4146
  readonly "task.enableLsp": {
4105
4147
  readonly type: "boolean";
4106
4148
  readonly default: false;
@@ -4800,6 +4842,7 @@ export interface BashInterceptorRule {
4800
4842
  export interface ShellMinimizerSettings {
4801
4843
  enabled: boolean;
4802
4844
  settingsPath: string | undefined;
4845
+ settingsHash: string | undefined;
4803
4846
  only: string[];
4804
4847
  except: string[];
4805
4848
  maxCaptureBytes: number;