@gajae-code/coding-agent 0.7.6 → 0.7.8

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 (111) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/README.md +8 -0
  3. package/dist/types/cli/local-provider-smoke.d.ts +59 -0
  4. package/dist/types/cli/notify-cli.d.ts +1 -1
  5. package/dist/types/cli/update-cli.d.ts +24 -1
  6. package/dist/types/commands/local-provider.d.ts +34 -0
  7. package/dist/types/config/model-profiles.d.ts +2 -2
  8. package/dist/types/config/model-registry.d.ts +8 -3
  9. package/dist/types/config/models-config-schema.d.ts +5 -5
  10. package/dist/types/config/settings-schema.d.ts +123 -9
  11. package/dist/types/config/settings.d.ts +7 -0
  12. package/dist/types/coordinator-mcp/server.d.ts +8 -0
  13. package/dist/types/export/html/template.generated.d.ts +1 -1
  14. package/dist/types/gjc-runtime/launch-tmux.d.ts +2 -2
  15. package/dist/types/gjc-runtime/state-renderer.d.ts +5 -0
  16. package/dist/types/gjc-runtime/team-runtime.d.ts +1 -1
  17. package/dist/types/gjc-runtime/tmux-common.d.ts +12 -0
  18. package/dist/types/gjc-runtime/ultragoal-guard.d.ts +37 -1
  19. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +80 -0
  20. package/dist/types/modes/components/custom-model-preset-wizard.d.ts +1 -1
  21. package/dist/types/modes/components/model-selector.d.ts +2 -0
  22. package/dist/types/modes/components/settings-selector.d.ts +4 -1
  23. package/dist/types/modes/components/status-line/types.d.ts +5 -7
  24. package/dist/types/modes/components/status-line.d.ts +4 -3
  25. package/dist/types/modes/controllers/input-controller.d.ts +1 -0
  26. package/dist/types/modes/controllers/selector-controller.d.ts +2 -1
  27. package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -0
  28. package/dist/types/modes/tmux-scroll.d.ts +18 -0
  29. package/dist/types/modes/utils/terminal-bell.d.ts +3 -0
  30. package/dist/types/notifications/telegram-daemon-cli.d.ts +13 -2
  31. package/dist/types/tools/browser/tab-supervisor.d.ts +31 -0
  32. package/dist/types/tools/computer-gc.d.ts +23 -0
  33. package/dist/types/tools/cron.d.ts +36 -61
  34. package/dist/types/tools/index.d.ts +0 -1
  35. package/dist/types/tools/resource-gc.d.ts +54 -0
  36. package/dist/types/web/search/index.d.ts +1 -0
  37. package/dist/types/web/search/providers/utils.d.ts +11 -4
  38. package/package.json +7 -7
  39. package/src/cli/args.ts +0 -1
  40. package/src/cli/fast-help.ts +0 -1
  41. package/src/cli/local-provider-smoke.ts +632 -0
  42. package/src/cli/notify-cli.ts +4 -2
  43. package/src/cli/update-cli.ts +155 -13
  44. package/src/cli/web-search-cli.ts +5 -0
  45. package/src/cli.ts +18 -0
  46. package/src/commands/launch.ts +46 -1
  47. package/src/commands/local-provider.ts +62 -0
  48. package/src/commands/notify.ts +1 -1
  49. package/src/config/model-profiles.ts +3 -4
  50. package/src/config/model-registry.ts +58 -7
  51. package/src/config/models-config-schema.ts +10 -1
  52. package/src/config/settings-schema.ts +127 -10
  53. package/src/config/settings.ts +11 -0
  54. package/src/coordinator-mcp/server.ts +276 -34
  55. package/src/export/html/template.generated.ts +1 -1
  56. package/src/export/html/template.js +0 -12
  57. package/src/gjc-runtime/launch-tmux.ts +34 -8
  58. package/src/gjc-runtime/launch-worktree.ts +16 -2
  59. package/src/gjc-runtime/state-renderer.ts +13 -0
  60. package/src/gjc-runtime/team-runtime.ts +21 -6
  61. package/src/gjc-runtime/tmux-common.ts +16 -0
  62. package/src/gjc-runtime/tmux-sessions.ts +13 -9
  63. package/src/gjc-runtime/ultragoal-guard.ts +167 -0
  64. package/src/gjc-runtime/ultragoal-runtime.ts +221 -1
  65. package/src/goals/tools/goal-tool.ts +14 -1
  66. package/src/internal-urls/docs-index.generated.ts +7 -7
  67. package/src/modes/components/agent-dashboard.ts +2 -1
  68. package/src/modes/components/custom-model-preset-wizard.ts +30 -189
  69. package/src/modes/components/model-selector.ts +182 -5
  70. package/src/modes/components/session-observer-overlay.ts +3 -3
  71. package/src/modes/components/settings-selector.ts +491 -5
  72. package/src/modes/components/status-line/segments.ts +7 -18
  73. package/src/modes/components/status-line/types.ts +6 -2
  74. package/src/modes/components/status-line.ts +69 -35
  75. package/src/modes/controllers/event-controller.ts +98 -4
  76. package/src/modes/controllers/extension-ui-controller.ts +3 -0
  77. package/src/modes/controllers/input-controller.ts +15 -0
  78. package/src/modes/controllers/selector-controller.ts +18 -4
  79. package/src/modes/prompt-action-autocomplete.ts +8 -0
  80. package/src/modes/tmux-scroll.ts +92 -0
  81. package/src/modes/utils/terminal-bell.ts +48 -0
  82. package/src/notifications/telegram-daemon-cli.ts +112 -9
  83. package/src/notifications/telegram-daemon.ts +4 -0
  84. package/src/prompts/system/system-prompt.md +2 -2
  85. package/src/prompts/tools/cron.md +5 -3
  86. package/src/prompts/tools/read.md +1 -1
  87. package/src/sdk.ts +5 -0
  88. package/src/session/agent-session.ts +118 -5
  89. package/src/slash-commands/builtin-registry.ts +106 -13
  90. package/src/tools/browser/tab-supervisor.ts +86 -2
  91. package/src/tools/computer-gc.ts +66 -0
  92. package/src/tools/computer.ts +2 -0
  93. package/src/tools/cron.ts +75 -112
  94. package/src/tools/index.ts +2 -8
  95. package/src/tools/read.ts +25 -55
  96. package/src/tools/renderers.ts +0 -2
  97. package/src/tools/resource-gc.ts +291 -0
  98. package/src/tools/ultragoal-ask-guard.ts +7 -1
  99. package/src/web/search/index.ts +1 -0
  100. package/src/web/search/providers/utils.ts +22 -5
  101. package/vendor/insane-search/MANIFEST.json +3 -1
  102. package/vendor/insane-search/engine/__init__.py +14 -0
  103. package/vendor/insane-search/engine/content_safety.py +151 -0
  104. package/vendor/insane-search/engine/fetch_chain.py +32 -0
  105. package/vendor/insane-search/engine/tests/test_u8.py +216 -0
  106. package/dist/types/tools/inspect-image-renderer.d.ts +0 -26
  107. package/dist/types/tools/inspect-image.d.ts +0 -31
  108. package/src/prompts/tools/inspect-image-system.md +0 -20
  109. package/src/prompts/tools/inspect-image.md +0 -32
  110. package/src/tools/inspect-image-renderer.ts +0 -103
  111. package/src/tools/inspect-image.ts +0 -172
package/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.7.8] - 2026-06-30
6
+ ### Added
7
+
8
+ - Terminal bell notifications can now be enabled for agent completion, approval, and ask/user-input prompts (#1277).
9
+ - Added a generic `providers.local.openaiCompat` models config path for OpenAI-compatible local endpoints plus `gjc local-provider smoke` for bounded streaming chat-completion checks (#1246).
10
+ - Added `gjc local-provider discover` / `models` to list model IDs from a configured local OpenAI-compatible provider via `GET /v1/models`, with clear network and response-shape errors and no chat-completion request (#1247).
11
+
12
+ ### Fixed
13
+
14
+ - `gjc update` now verifies the installed runtime after package-manager failures and treats a nonzero Bun/npm exit as recoverable when the requested version and smoke test actually landed, avoiding false failures from Bun tarball extraction errors (#1280).
15
+ - Submitted user prompts now use the live terminal viewport width in wide Windows Terminal/PowerShell sessions, keeping Korean/CJK prompt wrapping responsive without changing narrow layouts (#1239).
16
+ - Coordinator MCP now fails tmux-delivered turns that never receive a runtime prompt acknowledgement/`turn_start`, surfacing an explicit unacknowledged delivery reason instead of leaving Hermes/Oren waiting on a normal active/running state (#1237).
17
+ - Telegram now advertises `/session_create`, `/session_recent`, `/session_close`, and `/session_resume` in the bot command menu so lifecycle control commands are discoverable from `/` autocomplete.
18
+
19
+ ## [0.7.7] - 2026-06-28
20
+ ### Added
21
+
22
+ - Added a `#` prompt action that enters tmux copy-mode and searches backward to the previous rendered `user` input marker, providing a tmux-local previous-input scroll jump without relying on terminal-specific modified key chords.
23
+
24
+ ### Fixed
25
+
26
+ - Fixed steering regression where a prompt submitted while the agent was busy (`busyPromptMode: "steer"`) could stall in the steering queue — shown as a `Steer:` chip but never delivered — until the user pressed Esc to interrupt. A steer queued while no live agent loop was running (the busy/unwind window between a finished turn and the session going idle) now schedules a continuation so it is delivered promptly, mirroring the follow-up queue. A live loop still consumes the steer at its next tool/turn boundary, so steers are never double-delivered.
27
+
5
28
  ## [0.7.6] - 2026-06-28
6
29
 
7
30
  ### Fixed
@@ -16,7 +39,6 @@
16
39
  - Elided runaway thinking-token loops in the assistant message renderer so repeated thinking output no longer grows without bound (#1196).
17
40
  - Made `gjc session` create/list work on psmux-backed multiplexers (#1192).
18
41
  - Sanitized dot-prefixed cwd window titles so tmux window names render correctly (#1198).
19
-
20
42
  ## [0.7.4] - 2026-06-27
21
43
 
22
44
  ### Added
@@ -120,6 +142,9 @@
120
142
  - Corrected the auto-compaction output reserve so post-compaction responses keep adequate headroom (#1021).
121
143
  - Improved active-input shortcut hints and the busy-input queueing hint for clearer in-session guidance (#1022, #1024).
122
144
  - Fixed the Ultragoal ask guard blocking the `ask` tool when no GJC session can be resolved. `ultragoalReadPaths` falls back to the legacy/global `.gjc/ultragoal` directory when neither `GJC_SESSION_ID` nor an auto-detectable active session is present, but the follow-up `readUltragoalPlan`/`readUltragoalLedger` reads ignored that resolution and re-ran session detection, throwing `no active GJC session found` and surfacing `durable_state_unreadable` — which blocked `ask` for every agent even with no active Ultragoal run. `ultragoalReadPaths` now returns the resolved session id (or `null`); the ask guard treats a null session as inactive and falls open, and threads the resolved id into the plan/ledger reads so they no longer re-resolve. An inconsistent state (state dir present but `goals.json` missing/empty) still fails closed so the pause guard keeps blocking give-ups.
145
+ ### Added
146
+
147
+ - Added a user-level `completion.notifyCommand` hook that runs a shell command with `GJC_NOTIFICATION_*` payload environment variables when an agent turn completes, enabling cmux/desktop/webhook completion alerts without project-config command execution.
123
148
 
124
149
  ## [0.7.1] - 2026-06-23
125
150
  ### Fixed
package/README.md CHANGED
@@ -18,6 +18,14 @@ GJC already exposes public lifecycle events through the extension/hook event con
18
18
  - `turn_end` — a model/tool turn finished. The public payload is `{ type: "turn_end", turnIndex, message, toolResults }`.
19
19
  - `agent_end` — the agent loop for a submitted prompt reached a terminal boundary. The public payload is `{ type: "agent_end", messages }`.
20
20
 
21
+ For simple local side effects that do not need a full extension, set the user-level `completion.notifyCommand`. GJC runs it on completed agent turns with `GJC_NOTIFICATION_*` environment variables (`GJC_NOTIFICATION_TITLE`, `GJC_NOTIFICATION_BODY`, `GJC_NOTIFICATION_JSON`, etc.); project settings cannot activate this command hook.
22
+
23
+ ```sh
24
+ gjc config set completion.notifyCommand 'cmux notify --title "$GJC_NOTIFICATION_TITLE" --body "$GJC_NOTIFICATION_BODY"'
25
+ ```
26
+
27
+ `cmux notify` returning successfully means GJC handed the completion event to cmux. cmux may still suppress the native desktop banner when the app/window is focused, the emitting workspace is active, or the notification panel is open. In those cases, check cmux's notification panel or unread workspace state instead of treating the missing banner as a GJC delivery failure.
28
+
21
29
  Recommended external mapping:
22
30
 
23
31
  | Notification | Public event | Status guidance |
@@ -0,0 +1,59 @@
1
+ import type { ModelsConfig } from "../config/models-config-schema";
2
+ export interface LocalProviderSmokeCommandArgs {
3
+ model?: string;
4
+ modelsPath?: string;
5
+ timeoutMs?: number;
6
+ json?: boolean;
7
+ smoke?: boolean;
8
+ }
9
+ export interface LocalOpenAICompatConfig {
10
+ baseUrl: string;
11
+ apiKey?: string;
12
+ }
13
+ export type LocalProviderDiagnosticCheckName = "config" | "models" | "chat_stream";
14
+ export type LocalProviderDiagnosticStatus = "ok" | "skipped" | "error";
15
+ export type LocalProviderDiagnosticCategory = "auth" | "timeout" | "unreachable" | "not_ready" | "oom" | "malformed_response" | "http_error" | "configuration" | "empty_response";
16
+ export interface LocalProviderDiagnosticCheck {
17
+ name: LocalProviderDiagnosticCheckName;
18
+ status: LocalProviderDiagnosticStatus;
19
+ message: string;
20
+ action?: string;
21
+ category?: LocalProviderDiagnosticCategory;
22
+ error?: string;
23
+ httpStatus?: number;
24
+ }
25
+ export interface LocalProviderSmokeResult {
26
+ ok: boolean;
27
+ baseUrl?: string;
28
+ model?: string;
29
+ message: string;
30
+ error?: string;
31
+ category?: LocalProviderDiagnosticCategory;
32
+ action?: string;
33
+ }
34
+ export interface LocalProviderDiscoveryResult {
35
+ ok: boolean;
36
+ provider: string;
37
+ baseUrl?: string;
38
+ models: string[];
39
+ message: string;
40
+ error?: string;
41
+ category?: LocalProviderDiagnosticCategory;
42
+ action?: string;
43
+ }
44
+ export interface LocalProviderStatusResult {
45
+ ok: boolean;
46
+ provider: "local";
47
+ baseUrl?: string;
48
+ model?: string;
49
+ models: string[];
50
+ checks: LocalProviderDiagnosticCheck[];
51
+ message: string;
52
+ }
53
+ export declare function getLocalOpenAICompatConfig(config: ModelsConfig | undefined): LocalOpenAICompatConfig | undefined;
54
+ export declare function runLocalProviderDiscover(cmd: Omit<LocalProviderSmokeCommandArgs, "model" | "smoke">): Promise<LocalProviderDiscoveryResult>;
55
+ export declare function runLocalProviderStatus(cmd: LocalProviderSmokeCommandArgs): Promise<LocalProviderStatusResult>;
56
+ export declare function runLocalProviderSmoke(cmd: LocalProviderSmokeCommandArgs): Promise<LocalProviderSmokeResult>;
57
+ export declare function runLocalProviderDiscoverCommand(cmd: Omit<LocalProviderSmokeCommandArgs, "model" | "smoke">): Promise<void>;
58
+ export declare function runLocalProviderStatusCommand(cmd: LocalProviderSmokeCommandArgs): Promise<void>;
59
+ export declare function runLocalProviderSmokeCommand(cmd: LocalProviderSmokeCommandArgs): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { Settings } from "../config/settings";
1
+ import type { Settings } from "../config/settings";
2
2
  export type NotifyAction = "setup" | "status" | "daemon-internal";
3
3
  export interface NotifyCommandArgs {
4
4
  action: NotifyAction;
@@ -5,6 +5,20 @@ export interface InstalledVersionVerification {
5
5
  path?: string;
6
6
  smokeTestFailed?: boolean;
7
7
  smokeTestOutput?: string;
8
+ cleanupWarning?: string;
9
+ }
10
+ export interface PackageManagerUpdateResult {
11
+ exitCode: number | null;
12
+ text: () => string;
13
+ }
14
+ export type PackageManagerUpdateRunner = (expectedVersion: string) => Promise<PackageManagerUpdateResult>;
15
+ export interface PackageManagerUpdateOptions {
16
+ managerName: string;
17
+ expectedVersion: string;
18
+ runInstall: PackageManagerUpdateRunner;
19
+ verifyInstalledRuntime: (expectedVersion: string) => Promise<InstalledVersionVerification>;
20
+ printVerificationResult?: (expectedVersion: string) => Promise<void>;
21
+ printRecoveredVerification?: (expectedVersion: string) => void;
8
22
  }
9
23
  /** Paths and verifier used while replacing a downloaded binary update. */
10
24
  export interface BinaryReplacementOptions {
@@ -22,7 +36,14 @@ export declare function parseUpdateArgs(args: string[]): {
22
36
  force: boolean;
23
37
  check: boolean;
24
38
  } | undefined;
25
- export declare function resolveUpdateMethodForTest(ompPath: string, bunBinDir: string | undefined): "bun" | "binary";
39
+ type PackageManagerTarget = {
40
+ manager: "npm";
41
+ packageName: string;
42
+ };
43
+ type PathPlatform = NodeJS.Platform;
44
+ type PackageExists = (packageName: string, packageRoot: string) => boolean;
45
+ export declare function resolveUpdateMethodForTest(ompPath: string, bunBinDir: string | undefined): "bun" | "npm" | "binary";
46
+ export declare function resolveNpmManagedTargetForTest(ompPath: string, platform: PathPlatform, packageExists: PackageExists): PackageManagerTarget | undefined;
26
47
  export declare function formatBinaryDownloadFailureMessageForTest(binaryName: string, url: string, status: string | number, platform?: NodeJS.Platform): string;
27
48
  export declare function buildReleaseBinaryUrlForTest(version: string, platform?: NodeJS.Platform, arch?: string): string;
28
49
  export declare function formatManualUpdateInstructionsForTest(platform?: NodeJS.Platform): string;
@@ -31,6 +52,7 @@ export declare function formatVerificationFailureForTest(result: InstalledVersio
31
52
  * Atomically replace the installed binary and roll back if version verification fails.
32
53
  */
33
54
  export declare function replaceBinaryForUpdate(options: BinaryReplacementOptions): Promise<InstalledVersionVerification>;
55
+ export declare function runPackageManagerUpdateForTest(options: PackageManagerUpdateOptions): Promise<InstalledVersionVerification>;
34
56
  /**
35
57
  * Run the update command.
36
58
  */
@@ -42,3 +64,4 @@ export declare function runUpdateCommand(opts: {
42
64
  * Print update command help.
43
65
  */
44
66
  export declare function printUpdateHelp(): void;
67
+ export {};
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Test configured local OpenAI-compatible providers.
3
+ */
4
+ import { Command } from "@gajae-code/utils/cli";
5
+ export declare const LOCAL_PROVIDER_ACTIONS: readonly ["status", "diagnose", "discover", "models", "smoke"];
6
+ export declare const LOCAL_PROVIDER_DEFAULT_ACTION = "status";
7
+ export default class LocalProvider extends Command {
8
+ static description: string;
9
+ static args: {
10
+ action: import("@gajae-code/utils/cli").ArgDescriptor & {
11
+ description: string;
12
+ required: false;
13
+ options: readonly ["status", "diagnose", "discover", "models", "smoke"];
14
+ };
15
+ };
16
+ static flags: {
17
+ model: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
18
+ description: string;
19
+ };
20
+ "models-path": import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
21
+ description: string;
22
+ };
23
+ "timeout-ms": import("@gajae-code/utils/cli").FlagDescriptor<"integer"> & {
24
+ description: string;
25
+ };
26
+ smoke: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
27
+ description: string;
28
+ };
29
+ json: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
30
+ description: string;
31
+ };
32
+ };
33
+ run(): Promise<void>;
34
+ }
@@ -20,8 +20,8 @@ export interface ModelProfileDefinition {
20
20
  }
21
21
  export interface ResolvedProfileBinding {
22
22
  defaultSelector?: string;
23
- modelRoles: Partial<Record<"vision", string>>;
24
- agentModelOverrides: Partial<Record<Exclude<ModelProfileRole, "default" | "vision">, string>>;
23
+ modelRoles: Record<string, string>;
24
+ agentModelOverrides: Partial<Record<Exclude<ModelProfileRole, "default">, string>>;
25
25
  }
26
26
  export declare function deriveModelProfileMappedProviders(definition: Pick<ModelProfileDefinition, "modelMapping">): string[];
27
27
  export declare function aggregateModelProfileRequiredProviders(requiredProviders: readonly string[], definition: Pick<ModelProfileDefinition, "modelMapping">): string[];
@@ -11,7 +11,7 @@ import { type Settings } from "./settings";
11
11
  export type { CanonicalModelIndex, CanonicalModelRecord, CanonicalModelVariant, ModelEquivalenceConfig };
12
12
  export declare const kNoAuth = "N/A";
13
13
  export declare function isAuthenticated(apiKey: string | undefined | null): apiKey is string;
14
- export type ModelRole = "default" | "vision";
14
+ export type ModelRole = "default";
15
15
  export interface ModelRoleInfo {
16
16
  tag?: string;
17
17
  name: string;
@@ -19,7 +19,7 @@ export interface ModelRoleInfo {
19
19
  }
20
20
  export declare const MODEL_ROLES: Record<ModelRole, ModelRoleInfo>;
21
21
  export declare const MODEL_ROLE_IDS: ModelRole[];
22
- export type GjcModelAssignmentTargetId = "default" | "vision" | "executor" | "architect" | "planner" | "critic";
22
+ export type GjcModelAssignmentTargetId = "default" | "executor" | "architect" | "planner" | "critic";
23
23
  export interface GjcModelAssignmentTargetInfo extends ModelRoleInfo {
24
24
  id: GjcModelAssignmentTargetId;
25
25
  settingsPath: "modelRoles" | "task.agentModelOverrides";
@@ -256,6 +256,11 @@ export declare const ModelsConfigFile: ConfigFile<{
256
256
  disableStrictTools?: boolean | undefined;
257
257
  transport?: "pi-native" | undefined;
258
258
  cacheRetention?: "long" | "none" | "short" | undefined;
259
+ openaiCompat?: {
260
+ baseUrl: string;
261
+ apiKey?: string | undefined;
262
+ apiKeyEnv?: string | undefined;
263
+ } | undefined;
259
264
  }> | undefined;
260
265
  modelBindings?: {
261
266
  modelRoles?: Record<string, string> | undefined;
@@ -268,7 +273,7 @@ export declare const ModelsConfigFile: ConfigFile<{
268
273
  profiles?: Record<string, {
269
274
  required_providers: string[];
270
275
  display_name?: string | undefined;
271
- model_mapping: Partial<Record<"architect" | "critic" | "default" | "executor" | "planner" | "vision", string>>;
276
+ model_mapping: Partial<Record<"architect" | "critic" | "default" | "executor" | "planner", string>>;
272
277
  }> | undefined;
273
278
  }>;
274
279
  /** Provider override config (baseUrl, headers, apiKey, compat, transport) without custom models */
@@ -68,7 +68,6 @@ export declare const ProfileRoleSchema: z.ZodEnum<{
68
68
  default: "default";
69
69
  executor: "executor";
70
70
  planner: "planner";
71
- vision: "vision";
72
71
  }>;
73
72
  export declare const ProfileModelSelectorSchema: z.ZodString;
74
73
  export declare const ProfileModelMappingSchema: z.ZodRecord<z.ZodEnum<{
@@ -77,7 +76,6 @@ export declare const ProfileModelMappingSchema: z.ZodRecord<z.ZodEnum<{
77
76
  default: "default";
78
77
  executor: "executor";
79
78
  planner: "planner";
80
- vision: "vision";
81
79
  }> & z.core.$partial, z.ZodString>;
82
80
  export declare const ProfileDefinitionSchema: z.ZodObject<{
83
81
  required_providers: z.ZodArray<z.ZodString>;
@@ -88,7 +86,6 @@ export declare const ProfileDefinitionSchema: z.ZodObject<{
88
86
  default: "default";
89
87
  executor: "executor";
90
88
  planner: "planner";
91
- vision: "vision";
92
89
  }> & z.core.$partial, z.ZodString>;
93
90
  }, z.core.$strict>;
94
91
  export declare const ProfilesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -100,7 +97,6 @@ export declare const ProfilesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
100
97
  default: "default";
101
98
  executor: "executor";
102
99
  planner: "planner";
103
- vision: "vision";
104
100
  }> & z.core.$partial, z.ZodString>;
105
101
  }, z.core.$strict>>;
106
102
  export declare const ModelOverrideSchema: z.ZodObject<{
@@ -673,6 +669,11 @@ export declare const ModelsConfigSchema: z.ZodObject<{
673
669
  none: "none";
674
670
  short: "short";
675
671
  }>>;
672
+ openaiCompat: z.ZodOptional<z.ZodObject<{
673
+ baseUrl: z.ZodString;
674
+ apiKey: z.ZodOptional<z.ZodString>;
675
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
676
+ }, z.core.$strict>>;
676
677
  }, z.core.$strict>>>;
677
678
  modelBindings: z.ZodOptional<z.ZodObject<{
678
679
  modelRoles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -691,7 +692,6 @@ export declare const ModelsConfigSchema: z.ZodObject<{
691
692
  default: "default";
692
693
  executor: "executor";
693
694
  planner: "planner";
694
- vision: "vision";
695
695
  }> & z.core.$partial, z.ZodString>;
696
696
  }, z.core.$strict>>>;
697
697
  }, z.core.$strict>;
@@ -160,6 +160,42 @@ export declare const SETTINGS_SCHEMA: {
160
160
  readonly default: 60000;
161
161
  readonly validate: (value: number) => boolean;
162
162
  };
163
+ readonly "notifications.terminalBell": {
164
+ readonly type: "boolean";
165
+ readonly default: false;
166
+ readonly ui: {
167
+ readonly tab: "interaction";
168
+ readonly label: "Terminal Bell";
169
+ readonly description: "Emit a BEL character for local terminal notifications";
170
+ };
171
+ };
172
+ readonly "notifications.bellOnComplete": {
173
+ readonly type: "boolean";
174
+ readonly default: true;
175
+ readonly ui: {
176
+ readonly tab: "interaction";
177
+ readonly label: "Bell on Completion";
178
+ readonly description: "Ring the terminal bell when an agent turn completes";
179
+ };
180
+ };
181
+ readonly "notifications.bellOnApproval": {
182
+ readonly type: "boolean";
183
+ readonly default: true;
184
+ readonly ui: {
185
+ readonly tab: "interaction";
186
+ readonly label: "Bell on Approval";
187
+ readonly description: "Ring the terminal bell when a plan or approval prompt needs attention";
188
+ };
189
+ };
190
+ readonly "notifications.bellOnAsk": {
191
+ readonly type: "boolean";
192
+ readonly default: true;
193
+ readonly ui: {
194
+ readonly tab: "interaction";
195
+ readonly label: "Bell on Ask";
196
+ readonly description: "Ring the terminal bell when an ask/user-input prompt needs attention";
197
+ };
198
+ };
163
199
  readonly autoResume: {
164
200
  readonly type: "boolean";
165
201
  readonly default: false;
@@ -1301,6 +1337,15 @@ export declare const SETTINGS_SCHEMA: {
1301
1337
  readonly description: "Notify when the agent completes";
1302
1338
  };
1303
1339
  };
1340
+ readonly "completion.notifyCommand": {
1341
+ readonly type: "string";
1342
+ readonly default: "";
1343
+ readonly ui: {
1344
+ readonly tab: "interaction";
1345
+ readonly label: "Completion Notification Command";
1346
+ readonly description: "Optional user-level shell command to run when an agent turn completes; receives GJC_NOTIFICATION_* environment variables.";
1347
+ };
1348
+ };
1304
1349
  readonly "ask.timeout": {
1305
1350
  readonly type: "number";
1306
1351
  readonly default: 0;
@@ -2449,15 +2494,6 @@ export declare const SETTINGS_SCHEMA: {
2449
2494
  readonly description: "Enable the recipe tool when a justfile / package.json / Cargo.toml / Makefile / Taskfile is present";
2450
2495
  };
2451
2496
  };
2452
- readonly "inspect_image.enabled": {
2453
- readonly type: "boolean";
2454
- readonly default: false;
2455
- readonly ui: {
2456
- readonly tab: "tools";
2457
- readonly label: "Inspect Image";
2458
- readonly description: "Enable the inspect_image tool, delegating image understanding to a vision-capable model";
2459
- };
2460
- };
2461
2497
  readonly "checkpoint.enabled": {
2462
2498
  readonly type: "boolean";
2463
2499
  readonly default: false;
@@ -2551,6 +2587,16 @@ export declare const SETTINGS_SCHEMA: {
2551
2587
  readonly description: "Ordered fallback web search providers after the active model native provider";
2552
2588
  };
2553
2589
  };
2590
+ readonly "web_search.timeout": {
2591
+ readonly type: "number";
2592
+ readonly default: 300;
2593
+ readonly validate: (value: number) => boolean;
2594
+ readonly ui: {
2595
+ readonly tab: "tools";
2596
+ readonly label: "Web Search Timeout";
2597
+ readonly description: "Hard timeout in seconds for a single web search request (default 300)";
2598
+ };
2599
+ };
2554
2600
  readonly "browser.enabled": {
2555
2601
  readonly type: "boolean";
2556
2602
  readonly default: true;
@@ -2578,6 +2624,45 @@ export declare const SETTINGS_SCHEMA: {
2578
2624
  readonly description: "Directory to save screenshots. If unset, screenshots go to a temp file. Supports ~. Examples: ~/Downloads, ~/Desktop, /sdcard/Download (Android)";
2579
2625
  };
2580
2626
  };
2627
+ readonly "browser.gc.enabled": {
2628
+ readonly type: "boolean";
2629
+ readonly default: true;
2630
+ readonly ui: {
2631
+ readonly tab: "tools";
2632
+ readonly label: "Browser Tab GC";
2633
+ readonly description: "Automatically reclaim idle, unheld GJC-managed headless/spawned browser tabs.";
2634
+ };
2635
+ };
2636
+ readonly "browser.gc.idleMs": {
2637
+ readonly type: "number";
2638
+ readonly default: 300000;
2639
+ readonly validate: (value: number) => boolean;
2640
+ readonly ui: {
2641
+ readonly tab: "tools";
2642
+ readonly label: "Browser Tab GC Idle (ms)";
2643
+ readonly description: "Evict headless/spawned tabs idle longer than this many milliseconds.";
2644
+ };
2645
+ };
2646
+ readonly "browser.gc.rssLimitMb": {
2647
+ readonly type: "number";
2648
+ readonly default: 1536;
2649
+ readonly validate: (value: number) => boolean;
2650
+ readonly ui: {
2651
+ readonly tab: "tools";
2652
+ readonly label: "Browser Tab GC RSS Limit (MB)";
2653
+ readonly description: "Parent-process RSS (MB) above which idle tabs are opportunistically evicted LRU.";
2654
+ };
2655
+ };
2656
+ readonly "resourceGc.sweepIntervalMs": {
2657
+ readonly type: "number";
2658
+ readonly default: 30000;
2659
+ readonly validate: (value: number) => boolean;
2660
+ readonly ui: {
2661
+ readonly tab: "tools";
2662
+ readonly label: "Resource GC Sweep Interval (ms)";
2663
+ readonly description: "How often the resource GC sweeps browser tabs and stale screenshot directories.";
2664
+ };
2665
+ };
2581
2666
  readonly "computer.enabled": {
2582
2667
  readonly type: "boolean";
2583
2668
  readonly default: false;
@@ -2632,6 +2717,35 @@ export declare const SETTINGS_SCHEMA: {
2632
2717
  readonly description: "Persist audit records for enabled computer-use actions.";
2633
2718
  };
2634
2719
  };
2720
+ readonly "computer.screenshotGc.enabled": {
2721
+ readonly type: "boolean";
2722
+ readonly default: true;
2723
+ readonly ui: {
2724
+ readonly tab: "tools";
2725
+ readonly label: "Computer Screenshot GC";
2726
+ readonly description: "Delete stale computer-use screenshot fallback directories on disk.";
2727
+ };
2728
+ };
2729
+ readonly "computer.screenshotGc.staleMs": {
2730
+ readonly type: "number";
2731
+ readonly default: 43200000;
2732
+ readonly validate: (value: number) => boolean;
2733
+ readonly ui: {
2734
+ readonly tab: "tools";
2735
+ readonly label: "Computer Screenshot GC Stale Age (ms)";
2736
+ readonly description: "Remove screenshot fallback directories whose mtime is older than this many milliseconds.";
2737
+ };
2738
+ };
2739
+ readonly "computer.screenshotGc.scanIntervalMs": {
2740
+ readonly type: "number";
2741
+ readonly default: 1800000;
2742
+ readonly validate: (value: number) => boolean;
2743
+ readonly ui: {
2744
+ readonly tab: "tools";
2745
+ readonly label: "Computer Screenshot GC Scan Interval (ms)";
2746
+ readonly description: "Minimum interval between os.tmpdir scans for stale screenshot directories.";
2747
+ };
2748
+ };
2635
2749
  readonly "tools.intentTracing": {
2636
2750
  readonly type: "boolean";
2637
2751
  readonly default: true;
@@ -54,6 +54,13 @@ export declare class Settings {
54
54
  * Returns the merged value from global + project + overrides, or the default.
55
55
  */
56
56
  get<P extends SettingPath>(path: P): SettingValue<P>;
57
+ /**
58
+ * Get a setting value from the user/global config only.
59
+ *
60
+ * Use for machine-local command hooks and other settings that must not be
61
+ * activated by project-scoped config files.
62
+ */
63
+ getGlobal<P extends SettingPath>(path: P): SettingValue<P> | undefined;
57
64
  /** Check whether a setting is present in loaded settings/overrides rather than coming from schema defaults. */
58
65
  has(path: SettingPath): boolean;
59
66
  /**
@@ -45,6 +45,14 @@ interface LegacyHandlerOptions {
45
45
  env?: NodeJS.ProcessEnv;
46
46
  createSession?: () => unknown;
47
47
  }
48
+ export declare const COORDINATOR_AWAIT_TURN_TIMEOUT_MAX_MS: number;
49
+ export declare const COORDINATOR_RUNTIME_PROMPT_ACK_TIMEOUT_MAX_MS: number;
50
+ export declare const COORDINATOR_EVENT_WATCH_TIMEOUT_MAX_MS = 30000;
51
+ export declare const COORDINATOR_POLL_INTERVAL_MAX_MS = 10000;
52
+ export declare function boundedAwaitTurnTimeoutMs(value: unknown): number;
53
+ export declare function boundedRuntimePromptAckTimeoutMs(value: unknown): number;
54
+ export declare function boundedEventWatchTimeoutMs(value: unknown): number;
55
+ export declare function boundedPollIntervalMs(value: unknown): number;
48
56
  export declare function readCoordinatorArtifact(config: CoordinatorMcpConfig, args: {
49
57
  path: unknown;
50
58
  }): Promise<Record<string, unknown>>;