@gajae-code/coding-agent 0.7.7 → 0.7.9
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.
- package/CHANGELOG.md +38 -1
- package/README.md +14 -0
- package/dist/types/cli/local-provider-smoke.d.ts +59 -0
- package/dist/types/cli/notify-cli.d.ts +1 -1
- package/dist/types/cli/update-cli.d.ts +24 -1
- package/dist/types/commands/local-provider.d.ts +34 -0
- package/dist/types/config/keybindings.d.ts +1 -1
- package/dist/types/config/model-profile-activation.d.ts +19 -2
- package/dist/types/config/model-profiles.d.ts +1 -0
- package/dist/types/config/model-registry.d.ts +9 -0
- package/dist/types/config/models-config-schema.d.ts +5 -0
- package/dist/types/config/settings-schema.d.ts +45 -0
- package/dist/types/config/settings.d.ts +7 -0
- package/dist/types/coordinator-mcp/server.d.ts +8 -0
- package/dist/types/gjc-runtime/launch-tmux.d.ts +14 -5
- package/dist/types/gjc-runtime/team-runtime.d.ts +1 -1
- package/dist/types/gjc-runtime/tmux-common.d.ts +12 -0
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +3 -1
- package/dist/types/modes/components/custom-model-preset-wizard.d.ts +1 -1
- package/dist/types/modes/components/hook-input.d.ts +1 -0
- package/dist/types/modes/components/model-selector.d.ts +11 -0
- package/dist/types/modes/components/settings-selector.d.ts +4 -1
- package/dist/types/modes/components/status-line/types.d.ts +5 -7
- package/dist/types/modes/components/status-line.d.ts +7 -3
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +3 -1
- package/dist/types/modes/controllers/input-controller.d.ts +1 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +2 -1
- package/dist/types/modes/interactive-mode.d.ts +3 -1
- package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -0
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +21 -1
- package/dist/types/modes/tmux-scroll.d.ts +18 -0
- package/dist/types/modes/types.d.ts +3 -1
- package/dist/types/modes/utils/terminal-bell.d.ts +3 -0
- package/dist/types/notifications/daemon-paths.d.ts +9 -0
- package/dist/types/notifications/telegram-daemon-cli.d.ts +21 -4
- package/dist/types/notifications/telegram-daemon.d.ts +1 -10
- package/dist/types/tools/ask.d.ts +24 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +9 -2
- package/package.json +7 -7
- package/src/cli/local-provider-smoke.ts +632 -0
- package/src/cli/notify-cli.ts +5 -3
- package/src/cli/update-cli.ts +155 -13
- package/src/cli.ts +19 -0
- package/src/commands/launch.ts +46 -1
- package/src/commands/local-provider.ts +62 -0
- package/src/commands/notify.ts +1 -1
- package/src/config/keybindings.ts +1 -1
- package/src/config/model-profile-activation.ts +92 -11
- package/src/config/model-profiles.ts +15 -2
- package/src/config/model-registry.ts +136 -6
- package/src/config/models-config-schema.ts +9 -0
- package/src/config/settings-schema.ts +48 -0
- package/src/config/settings.ts +11 -0
- package/src/coordinator-mcp/server.ts +280 -36
- package/src/deep-interview/render-middleware.ts +1 -0
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +14 -6
- package/src/defaults/gjc/skills/ralplan/SKILL.md +14 -7
- package/src/gjc-runtime/deep-interview-runtime.ts +1 -1
- package/src/gjc-runtime/launch-tmux.ts +321 -38
- package/src/gjc-runtime/launch-worktree.ts +16 -2
- package/src/gjc-runtime/team-runtime.ts +87 -7
- package/src/gjc-runtime/tmux-common.ts +16 -0
- package/src/gjc-runtime/tmux-sessions.ts +13 -9
- package/src/gjc-runtime/ultragoal-guard.ts +11 -5
- package/src/internal-urls/docs-index.generated.ts +10 -9
- package/src/modes/components/agent-dashboard.ts +2 -1
- package/src/modes/components/custom-model-preset-wizard.ts +31 -192
- package/src/modes/components/hook-editor.ts +7 -4
- package/src/modes/components/hook-input.ts +4 -0
- package/src/modes/components/model-selector.ts +260 -12
- package/src/modes/components/session-observer-overlay.ts +3 -3
- package/src/modes/components/settings-selector.ts +506 -5
- package/src/modes/components/status-line/segments.ts +16 -19
- package/src/modes/components/status-line/types.ts +6 -2
- package/src/modes/components/status-line.ts +70 -35
- package/src/modes/controllers/event-controller.ts +98 -4
- package/src/modes/controllers/extension-ui-controller.ts +5 -0
- package/src/modes/controllers/input-controller.ts +15 -0
- package/src/modes/controllers/selector-controller.ts +142 -11
- package/src/modes/interactive-mode.ts +7 -2
- package/src/modes/prompt-action-autocomplete.ts +8 -0
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +11 -4
- package/src/modes/tmux-scroll.ts +92 -0
- package/src/modes/types.ts +6 -1
- package/src/modes/utils/terminal-bell.ts +48 -0
- package/src/notifications/daemon-paths.ts +22 -0
- package/src/notifications/telegram-daemon-cli.ts +125 -13
- package/src/notifications/telegram-daemon.ts +6 -21
- package/src/prompts/system/system-prompt.md +5 -0
- package/src/sdk.ts +10 -1
- package/src/session/agent-session.ts +84 -6
- package/src/slash-commands/builtin-registry.ts +106 -13
- package/src/tools/ask.ts +11 -1
- package/src/tools/eval.ts +2 -2
- package/src/tools/render-utils.ts +2 -0
- package/src/tools/ultragoal-ask-guard.ts +39 -5
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,42 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.7.9] - 2026-07-01
|
|
6
|
+
### Added
|
|
7
|
+
|
|
8
|
+
- Added an optional Tavily web search provider selectable through `providers.webSearch`, using `TAVILY_API_KEY` only when Tavily is selected (#1323).
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Deep Interview now treats English `implementation` and Korean `구현` wording as eventual-target language, not permission to edit code or launch implementation before post-interview approval (#1320).
|
|
13
|
+
- Restored default Enter = submit in the main chat composer. #1326 rerouted plain Enter in the prompt to insert a newline (making Ctrl+Enter the submit chord); this reverts that so Enter submits again and Shift+Enter inserts a newline.
|
|
14
|
+
- Registered the optional `gjc acp` subcommand so Zed/custom ACP clients can launch the ACP stdio server through the documented command entrypoint, and documented the Zed `agent_servers` custom-agent shape (#1327).
|
|
15
|
+
- Compiled binaries can now include the hidden Telegram daemon CLI entrypoint without hanging root startup, and release builds preserve that entry so `gjc notify daemon-internal --smoke` is available in standalone binaries (#1288).
|
|
16
|
+
- Documented Windows Terminal BEL limitations for terminal bell notifications and added a PowerShell `completion.notifyCommand` beep workaround example (#1318).
|
|
17
|
+
|
|
18
|
+
## [0.7.8] - 2026-06-30
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Terminal bell notifications can now be enabled for agent completion, approval, and ask/user-input prompts (#1277).
|
|
22
|
+
- 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).
|
|
23
|
+
- 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).
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Fixed a class of TUI renderer crashes (`TypeError: undefined is not an object (evaluating 'x.trim'/'x.split')`) where render helpers typed `(x: string)` ran a string op on an optional/possibly-undefined tool-detail field. The deep-interview/ralplan `ask` renderer crashed on a result with a missing `question`; caught during streaming but fatal on render/teardown paths such as `/background` detach. Hardened `normalizeText`, `getPreviewLines`, `shortenPath`, and the eval git_log status-event renderer (#1290).
|
|
28
|
+
|
|
29
|
+
- `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).
|
|
30
|
+
- Deep Interview now prefers the native hook's pre-resolved ambiguity threshold state and avoids surfacing missing optional settings files as failed `Read` calls during Phase 0.
|
|
31
|
+
- Scoped Ultragoal ask-guard checks for `deep-interview` and `ralplan` asks to the current session, so stale or ambiguous Ultragoal state from other sessions no longer suppresses the choice UI while same-session active Ultragoal blockers still apply.
|
|
32
|
+
- 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).
|
|
33
|
+
- 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).
|
|
34
|
+
- 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.
|
|
35
|
+
- `gjc --tmux` now prefixes the root terminal title (`GJC: tmp`) and managed tmux window names (`GJC-tmp`) with a GJC workspace label so terminal multiplexers and workspace switchers do not fall back to noisy launch paths.
|
|
36
|
+
|
|
5
37
|
## [0.7.7] - 2026-06-28
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- 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.
|
|
6
41
|
|
|
7
42
|
### Fixed
|
|
8
43
|
|
|
@@ -22,7 +57,6 @@
|
|
|
22
57
|
- Elided runaway thinking-token loops in the assistant message renderer so repeated thinking output no longer grows without bound (#1196).
|
|
23
58
|
- Made `gjc session` create/list work on psmux-backed multiplexers (#1192).
|
|
24
59
|
- Sanitized dot-prefixed cwd window titles so tmux window names render correctly (#1198).
|
|
25
|
-
|
|
26
60
|
## [0.7.4] - 2026-06-27
|
|
27
61
|
|
|
28
62
|
### Added
|
|
@@ -126,6 +160,9 @@
|
|
|
126
160
|
- Corrected the auto-compaction output reserve so post-compaction responses keep adequate headroom (#1021).
|
|
127
161
|
- Improved active-input shortcut hints and the busy-input queueing hint for clearer in-session guidance (#1022, #1024).
|
|
128
162
|
- 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.
|
|
163
|
+
### Added
|
|
164
|
+
|
|
165
|
+
- 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.
|
|
129
166
|
|
|
130
167
|
## [0.7.1] - 2026-06-23
|
|
131
168
|
### Fixed
|
package/README.md
CHANGED
|
@@ -18,6 +18,20 @@ 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
|
+
Windows Terminal may keep BEL (`[Console]::Write([char]7)`) silent depending on profile and system sound settings even when `notifications.terminalBell` is enabled. For an audible Windows completion beep, configure a user-level PowerShell command hook instead:
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
gjc config set completion.notifyCommand 'powershell.exe -NoProfile -Command "[Console]::Beep(880, 300)"'
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`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.
|
|
34
|
+
|
|
21
35
|
Recommended external mapping:
|
|
22
36
|
|
|
23
37
|
| 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>;
|
|
@@ -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
|
-
|
|
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
|
+
}
|
|
@@ -231,7 +231,7 @@ export declare const KEYBINDINGS: {
|
|
|
231
231
|
};
|
|
232
232
|
readonly "app.message.followUp": {
|
|
233
233
|
readonly defaultKeys: [];
|
|
234
|
-
readonly description: "Send follow-up message (no default; Ctrl+Enter
|
|
234
|
+
readonly description: "Send follow-up message (no default; Ctrl+Enter submits)";
|
|
235
235
|
};
|
|
236
236
|
readonly "app.message.queue": {
|
|
237
237
|
readonly defaultKeys: "alt+enter";
|
|
@@ -21,7 +21,7 @@ export interface PreparedModelProfileActivation {
|
|
|
21
21
|
session: ModelProfileActivationSession & {
|
|
22
22
|
setModelTemporary: AgentSession["setModelTemporary"];
|
|
23
23
|
};
|
|
24
|
-
settings: Pick<Settings, "get" | "override" | "set" | "flush">;
|
|
24
|
+
settings: Pick<Settings, "clearOverride" | "get" | "getGlobal" | "override" | "set" | "flush">;
|
|
25
25
|
previousModel: Model<Api> | undefined;
|
|
26
26
|
previousThinkingLevel: ThinkingLevel | undefined;
|
|
27
27
|
previousAgentModelOverrides: Record<string, string>;
|
|
@@ -47,11 +47,28 @@ export interface MaterializeModelProfileAssignmentOptions {
|
|
|
47
47
|
selector: string;
|
|
48
48
|
}
|
|
49
49
|
export declare function materializeActiveModelProfileAssignment(options: MaterializeModelProfileAssignmentOptions): boolean;
|
|
50
|
-
export declare function formatModelProfileCredentialError(
|
|
50
|
+
export declare function formatModelProfileCredentialError(profileLabel: string, providers: readonly string[]): string;
|
|
51
51
|
export declare function prepareModelProfileActivation(options: PrepareModelProfileActivationOptions): Promise<PreparedModelProfileActivation>;
|
|
52
52
|
export declare function applyPreparedModelProfileActivation(prepared: PreparedModelProfileActivation, options?: {
|
|
53
53
|
persistDefault?: boolean;
|
|
54
54
|
}): Promise<void>;
|
|
55
|
+
export interface MaterializeModelProfileForDeletionResult {
|
|
56
|
+
modelRoles: Record<string, string>;
|
|
57
|
+
agentModelOverrides: Record<string, string>;
|
|
58
|
+
previousModelRoles: Record<string, string>;
|
|
59
|
+
previousAgentModelOverrides: Record<string, string>;
|
|
60
|
+
previousDefaultProfile: string | undefined;
|
|
61
|
+
previousPersistedDefaultProfile: string | undefined;
|
|
62
|
+
previousActiveModelProfile: string | undefined;
|
|
63
|
+
}
|
|
64
|
+
export declare function materializeModelProfileForDeletion(options: PrepareModelProfileActivationOptions & {
|
|
65
|
+
settings: Pick<Settings, "clearOverride" | "flush" | "get" | "getGlobal" | "override" | "set">;
|
|
66
|
+
}): Promise<MaterializeModelProfileForDeletionResult>;
|
|
67
|
+
export declare function restoreMaterializedModelProfileForDeletion(options: {
|
|
68
|
+
settings: Pick<Settings, "flush" | "override" | "set">;
|
|
69
|
+
session: Pick<ModelProfileActivationSession, "setActiveModelProfile">;
|
|
70
|
+
snapshot: MaterializeModelProfileForDeletionResult;
|
|
71
|
+
}): Promise<void>;
|
|
55
72
|
export declare function activateModelProfile(options: PrepareModelProfileActivationOptions, applyOptions?: {
|
|
56
73
|
persistDefault?: boolean;
|
|
57
74
|
}): Promise<void>;
|
|
@@ -31,6 +31,7 @@ export interface ModelProfilePresentation {
|
|
|
31
31
|
providerGroup: string;
|
|
32
32
|
}
|
|
33
33
|
export declare function getModelProfilePresentation(profile: string | Pick<ModelProfileDefinition, "name" | "displayName">): ModelProfilePresentation;
|
|
34
|
+
export declare function formatModelProfileDisplayLabel(profile: Pick<ModelProfileDefinition, "name" | "displayName">): string;
|
|
34
35
|
export declare function groupModelProfilesForPresetLanding(profiles: ReadonlyMap<string, ModelProfileDefinition>): Map<string, ModelProfileDefinition[]>;
|
|
35
36
|
export declare function recommendModelProfileForProvider(providerId: string, profiles: ReadonlyMap<string, ModelProfileDefinition>): ModelProfileDefinition | undefined;
|
|
36
37
|
export declare function mergeModelProfiles(userProfiles?: ModelsConfig["profiles"]): Map<string, ModelProfileDefinition>;
|
|
@@ -19,6 +19,8 @@ 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 declare const MODEL_PROFILE_NAME_PATTERN: RegExp;
|
|
23
|
+
export declare const MODEL_PROFILE_NAME_PATTERN_DESCRIPTION = "lowercase letters, numbers, dots, underscores, or hyphens";
|
|
22
24
|
export type GjcModelAssignmentTargetId = "default" | "executor" | "architect" | "planner" | "critic";
|
|
23
25
|
export interface GjcModelAssignmentTargetInfo extends ModelRoleInfo {
|
|
24
26
|
id: GjcModelAssignmentTargetId;
|
|
@@ -256,6 +258,11 @@ export declare const ModelsConfigFile: ConfigFile<{
|
|
|
256
258
|
disableStrictTools?: boolean | undefined;
|
|
257
259
|
transport?: "pi-native" | undefined;
|
|
258
260
|
cacheRetention?: "long" | "none" | "short" | undefined;
|
|
261
|
+
openaiCompat?: {
|
|
262
|
+
baseUrl: string;
|
|
263
|
+
apiKey?: string | undefined;
|
|
264
|
+
apiKeyEnv?: string | undefined;
|
|
265
|
+
} | undefined;
|
|
259
266
|
}> | undefined;
|
|
260
267
|
modelBindings?: {
|
|
261
268
|
modelRoles?: Record<string, string> | undefined;
|
|
@@ -337,6 +344,8 @@ export declare class ModelRegistry {
|
|
|
337
344
|
getModelProfile(name: string): ModelProfileDefinition | undefined;
|
|
338
345
|
getAvailableModelProfileNames(): string[];
|
|
339
346
|
saveCustomModelProfile(name: string, definition: ModelProfileConfig): Promise<ModelProfileDefinition>;
|
|
347
|
+
renameCustomModelProfile(name: string, displayName: string): Promise<ModelProfileDefinition>;
|
|
348
|
+
deleteCustomModelProfile(name: string): Promise<ModelProfileConfig>;
|
|
340
349
|
applyConfiguredModelBindings(targetSettings: Settings): void;
|
|
341
350
|
/**
|
|
342
351
|
* Get all models (built-in + custom).
|
|
@@ -669,6 +669,11 @@ export declare const ModelsConfigSchema: z.ZodObject<{
|
|
|
669
669
|
none: "none";
|
|
670
670
|
short: "short";
|
|
671
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>>;
|
|
672
677
|
}, z.core.$strict>>>;
|
|
673
678
|
modelBindings: z.ZodOptional<z.ZodObject<{
|
|
674
679
|
modelRoles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
@@ -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. Windows Terminal may keep BEL silent depending on profile/system sound settings; use completion.notifyCommand for a PowerShell Console.Beep workaround.";
|
|
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. On Windows, this can call PowerShell [Console]::Beep when terminal BEL is silent.";
|
|
1347
|
+
};
|
|
1348
|
+
};
|
|
1304
1349
|
readonly "ask.timeout": {
|
|
1305
1350
|
readonly type: "number";
|
|
1306
1351
|
readonly default: 0;
|
|
@@ -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>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Args } from "../cli/args";
|
|
2
|
-
import { buildGjcTmuxProfileCommands, GJC_DEFAULT_TMUX_SESSION, GJC_TMUX_COMMAND_ENV, GJC_TMUX_MOUSE_ENV, GJC_TMUX_PROFILE_ENV, GJC_TMUX_SESSION_PREFIX, type GjcTmuxProfileCommand } from "./tmux-common";
|
|
3
|
-
export { buildGjcTmuxProfileCommands, GJC_DEFAULT_TMUX_SESSION, GJC_TMUX_COMMAND_ENV, GJC_TMUX_MOUSE_ENV, GJC_TMUX_PROFILE_ENV, GJC_TMUX_SESSION_PREFIX, };
|
|
2
|
+
import { buildGjcTmuxExactSessionTarget, buildGjcTmuxProfileCommands, GJC_DEFAULT_TMUX_SESSION, GJC_TMUX_COMMAND_ENV, GJC_TMUX_MOUSE_ENV, GJC_TMUX_PROFILE_ENV, GJC_TMUX_SESSION_PREFIX, type GjcTmuxProfileCommand } from "./tmux-common";
|
|
3
|
+
export { buildGjcTmuxExactSessionTarget, buildGjcTmuxProfileCommands, GJC_DEFAULT_TMUX_SESSION, GJC_TMUX_COMMAND_ENV, GJC_TMUX_MOUSE_ENV, GJC_TMUX_PROFILE_ENV, GJC_TMUX_SESSION_PREFIX, };
|
|
4
4
|
export declare const GJC_TMUX_LAUNCHED_ENV = "GJC_TMUX_LAUNCHED";
|
|
5
5
|
export declare const GJC_LAUNCH_POLICY_ENV = "GJC_LAUNCH_POLICY";
|
|
6
6
|
export declare const GJC_TMUX_WINDOW_LABEL_MAX_WIDTH = 48;
|
|
@@ -35,9 +35,18 @@ export type TmuxSpawnSync = (command: string, args: string[], options: TmuxSpawn
|
|
|
35
35
|
export interface TmuxSpawnOptions {
|
|
36
36
|
cwd: string;
|
|
37
37
|
env: NodeJS.ProcessEnv;
|
|
38
|
-
stdin: "inherit";
|
|
39
|
-
stdout: "inherit";
|
|
40
|
-
stderr: "inherit";
|
|
38
|
+
stdin: "inherit" | "pipe";
|
|
39
|
+
stdout: "inherit" | "pipe";
|
|
40
|
+
stderr: "inherit" | "pipe";
|
|
41
|
+
/**
|
|
42
|
+
* When true, the spawn captures stderr into a buffer and forwards it to
|
|
43
|
+
* the parent stderr so the user still sees the live output. The captured
|
|
44
|
+
* text is also returned in TmuxSpawnResult.stderr for diagnostic
|
|
45
|
+
* surfacing in "attach failed" / "profile tagging failed" messages.
|
|
46
|
+
* Defaults to false to preserve the previous PTY-binding behavior for
|
|
47
|
+
* attach-session and other interactive commands.
|
|
48
|
+
*/
|
|
49
|
+
captureStderr?: boolean;
|
|
41
50
|
}
|
|
42
51
|
export interface TmuxLaunchPlan {
|
|
43
52
|
tmuxCommand: string;
|
|
@@ -280,7 +280,7 @@ export declare function pruneTeamWorkerGcRecord(record: GcRecord, probe: GcPidPr
|
|
|
280
280
|
export declare function persistGjcTeamModeStateSummary(snapshot: GjcTeamSnapshot, cwd?: string): Promise<void>;
|
|
281
281
|
export declare function recoverGjcTeamStaleClaims(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamLivenessRecoveryResult>;
|
|
282
282
|
type GjcTeamTaskMetadataInput = Partial<Pick<GjcTeamTask, "owner" | "lane" | "required_role" | "allowed_roles" | "depends_on" | "blocked_by">>;
|
|
283
|
-
export declare function resolveGjcWorkerCommand(cwd?: string, env?: NodeJS.ProcessEnv): string;
|
|
283
|
+
export declare function resolveGjcWorkerCommand(cwd?: string, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, argv?: string[], execPath?: string): string;
|
|
284
284
|
/** @internal Exported for unit tests. */
|
|
285
285
|
export declare function buildWorkerCommand(config: GjcTeamConfig, worker: GjcTeamWorker, platform?: NodeJS.Platform): string;
|
|
286
286
|
export type GjcWorkerCheckpointClassification = {
|
|
@@ -60,6 +60,18 @@ export declare function buildGjcTmuxExactOptionTarget(sessionName: string, opts?
|
|
|
60
60
|
platform?: NodeJS.Platform;
|
|
61
61
|
binary?: ResolvedTmuxBinary;
|
|
62
62
|
}): string;
|
|
63
|
+
/**
|
|
64
|
+
* Build the exact-session target for tmux *session-scoped* commands such as
|
|
65
|
+
* `attach-session` and `kill-session`. Native tmux accepts `=NAME` for an
|
|
66
|
+
* exact session match, but Windows psmux 3.3.x rejects that target form for
|
|
67
|
+
* session commands even though the bare `NAME` resolves. Keep native tmux on
|
|
68
|
+
* exact targets and intentionally use the bare session name for psmux.
|
|
69
|
+
*/
|
|
70
|
+
export declare function buildGjcTmuxExactSessionTarget(sessionName: string, opts?: {
|
|
71
|
+
env?: NodeJS.ProcessEnv;
|
|
72
|
+
platform?: NodeJS.Platform;
|
|
73
|
+
binary?: ResolvedTmuxBinary;
|
|
74
|
+
}): string;
|
|
63
75
|
export declare const GJC_TMUX_UNTAGGED_REASON = "gjc_tmux_session_untagged";
|
|
64
76
|
export declare function buildGjcTmuxUntaggedSessionHint(tmuxCommand: string): string;
|
|
65
77
|
export declare function buildGjcTmuxUntaggedSessionError(sessionName: string, tmuxCommand: string): string;
|
|
@@ -29,7 +29,9 @@ export declare function readUltragoalVerificationState(input: {
|
|
|
29
29
|
currentGoal?: CurrentGoalLike | null;
|
|
30
30
|
sessionId?: string | null;
|
|
31
31
|
}): Promise<UltragoalGuardDiagnostic>;
|
|
32
|
-
export declare function isUltragoalAskBlocked(cwd: string
|
|
32
|
+
export declare function isUltragoalAskBlocked(cwd: string, options?: {
|
|
33
|
+
sessionId?: string | null;
|
|
34
|
+
}): Promise<UltragoalAskBlockDiagnostic>;
|
|
33
35
|
/**
|
|
34
36
|
* Escalating per-attempt refusal text. Deliberately avoids every
|
|
35
37
|
* `isUltragoalBypassPrompt` trigger: no `update_goal(`, no "skip/weaken verification",
|
|
@@ -6,7 +6,7 @@ export interface CustomModelPresetWizardSubmit {
|
|
|
6
6
|
}
|
|
7
7
|
export declare class CustomModelPresetWizardComponent extends Container {
|
|
8
8
|
#private;
|
|
9
|
-
constructor(onSubmit: (input: CustomModelPresetWizardSubmit) => void, onCancel: () => void, onRender?: () => void);
|
|
9
|
+
constructor(snapshot: ModelProfileConfig, onSubmit: (input: CustomModelPresetWizardSubmit) => void, onCancel: () => void, onRender?: () => void);
|
|
10
10
|
setSubmitError(error: string): void;
|
|
11
11
|
handleInput(keyData: string): void;
|
|
12
12
|
}
|
|
@@ -3,6 +3,7 @@ import { type Model } from "@gajae-code/ai";
|
|
|
3
3
|
import { Container, Input, type TUI } from "@gajae-code/tui";
|
|
4
4
|
import type { GjcModelAssignmentTargetId, ModelRegistry } from "../../config/model-registry";
|
|
5
5
|
import { type ScopedModelSelection } from "../../config/model-resolver";
|
|
6
|
+
import type { ModelProfileConfig } from "../../config/models-config-schema";
|
|
6
7
|
import type { Settings } from "../../config/settings";
|
|
7
8
|
type ScopedModelItem = ScopedModelSelection;
|
|
8
9
|
export type ModelSelectorSelection = {
|
|
@@ -17,6 +18,13 @@ export type ModelSelectorSelection = {
|
|
|
17
18
|
setDefault: boolean;
|
|
18
19
|
} | {
|
|
19
20
|
kind: "createProfile";
|
|
21
|
+
profile: ModelProfileConfig;
|
|
22
|
+
} | {
|
|
23
|
+
kind: "renameProfile";
|
|
24
|
+
profileName: string;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "deleteProfile";
|
|
27
|
+
profileName: string;
|
|
20
28
|
};
|
|
21
29
|
type RoleSelectCallback = (selection: ModelSelectorSelection) => void | Promise<void>;
|
|
22
30
|
/**
|
|
@@ -45,7 +53,10 @@ export declare class ModelSelectorComponent extends Container {
|
|
|
45
53
|
activeModelProfile?: string;
|
|
46
54
|
}): void;
|
|
47
55
|
handleInput(keyData: string): void;
|
|
56
|
+
refreshPresetProfiles(profileName?: string): void;
|
|
48
57
|
getSearchInput(): Input;
|
|
49
58
|
__testSelectProfile(profileName: string, setDefault: boolean): Promise<void>;
|
|
59
|
+
__testSelectPresetAction(profileName: string, action: "rename" | "delete"): Promise<void>;
|
|
60
|
+
__testSelectedPresetRowIdentity(): string | undefined;
|
|
50
61
|
}
|
|
51
62
|
export {};
|
|
@@ -4,6 +4,7 @@ import { Container, SettingsList } from "@gajae-code/tui";
|
|
|
4
4
|
import { type SettingPath } from "../../config/settings";
|
|
5
5
|
import type { StatusLinePreset, StatusLineSegmentId, StatusLineSeparatorStyle } from "../../config/settings-schema";
|
|
6
6
|
import { PluginSettingsComponent } from "./plugin-settings";
|
|
7
|
+
import type { StatusLineSegmentOptions } from "./status-line";
|
|
7
8
|
/**
|
|
8
9
|
* Dynamic context for settings that need runtime data.
|
|
9
10
|
* Some settings (like thinking level) are managed by the session, not Settings.
|
|
@@ -24,6 +25,8 @@ export interface StatusLinePreviewSettings {
|
|
|
24
25
|
leftSegments?: StatusLineSegmentId[];
|
|
25
26
|
rightSegments?: StatusLineSegmentId[];
|
|
26
27
|
separator?: StatusLineSeparatorStyle;
|
|
28
|
+
segmentOptions?: StatusLineSegmentOptions;
|
|
29
|
+
previewHighlightSegment?: StatusLineSegmentId;
|
|
27
30
|
sessionAccent?: boolean;
|
|
28
31
|
}
|
|
29
32
|
export interface SettingsCallbacks {
|
|
@@ -36,7 +39,7 @@ export interface SettingsCallbacks {
|
|
|
36
39
|
/** Called for status line preview while configuring */
|
|
37
40
|
onStatusLinePreview?: (settings: StatusLinePreviewSettings) => void;
|
|
38
41
|
/** Get current rendered status line for inline preview */
|
|
39
|
-
getStatusLinePreview?: () => string;
|
|
42
|
+
getStatusLinePreview?: (width?: number) => string;
|
|
40
43
|
/** Called when plugins change */
|
|
41
44
|
onPluginsChanged?: () => void;
|
|
42
45
|
/** Called when settings panel is closed */
|
|
@@ -44,14 +44,12 @@ export interface SegmentContext {
|
|
|
44
44
|
} | null;
|
|
45
45
|
};
|
|
46
46
|
usage: {
|
|
47
|
-
|
|
47
|
+
windows: Array<{
|
|
48
|
+
label: string;
|
|
48
49
|
percent: number;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
percent: number;
|
|
53
|
-
resetHours?: number;
|
|
54
|
-
};
|
|
50
|
+
resetValue?: number;
|
|
51
|
+
resetUnit?: "m" | "h";
|
|
52
|
+
}>;
|
|
55
53
|
} | null;
|
|
56
54
|
}
|
|
57
55
|
export interface RenderedSegment {
|
|
@@ -22,6 +22,9 @@ export interface StatusLineSegmentOptions {
|
|
|
22
22
|
format?: "12h" | "24h";
|
|
23
23
|
showSeconds?: boolean;
|
|
24
24
|
};
|
|
25
|
+
usage?: {
|
|
26
|
+
mode?: "used" | "remaining";
|
|
27
|
+
};
|
|
25
28
|
}
|
|
26
29
|
export interface StatusLineSettings {
|
|
27
30
|
preset?: StatusLinePreset;
|
|
@@ -29,6 +32,7 @@ export interface StatusLineSettings {
|
|
|
29
32
|
rightSegments?: StatusLineSegmentId[];
|
|
30
33
|
separator?: StatusLineSeparatorStyle;
|
|
31
34
|
segmentOptions?: StatusLineSegmentOptions;
|
|
35
|
+
previewHighlightSegment?: StatusLineSegmentId;
|
|
32
36
|
showHookStatus?: boolean;
|
|
33
37
|
showSkillHud?: boolean;
|
|
34
38
|
sessionAccent?: boolean;
|
|
@@ -59,9 +63,9 @@ export declare class StatusLineComponent implements Component {
|
|
|
59
63
|
dispose(): void;
|
|
60
64
|
invalidate(): void;
|
|
61
65
|
/**
|
|
62
|
-
* Background-refresh the
|
|
63
|
-
*
|
|
64
|
-
*
|
|
66
|
+
* Background-refresh the OAuth quota report. Guarded by a 5-min TTL on both
|
|
67
|
+
* success (cache lifetime) and error (backoff). Exposed (non-private) so
|
|
68
|
+
* unit tests can verify the backoff invariant.
|
|
65
69
|
*/
|
|
66
70
|
refreshUsageInBackground(): void;
|
|
67
71
|
/**
|