@gajae-code/coding-agent 0.16.1 → 0.16.3
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 +11 -0
- package/dist/types/sdk/cli/rows.d.ts +7 -0
- package/dist/types/sdk/host/events.d.ts +1 -0
- package/dist/types/sdk/host/host.d.ts +2 -0
- package/dist/types/tools/index.d.ts +0 -2
- package/dist/types/utils/external-editor.d.ts +5 -0
- package/package.json +7 -7
- package/src/gjc-runtime/session-state-lock.ts +2 -4
- package/src/internal-urls/docs-index.generated.ts +3 -3
- package/src/modes/acp/acp-agent.ts +29 -14
- package/src/prompts/tools/bash.md +1 -1
- package/src/prompts/tools/job.md +1 -1
- package/src/sdk/acp/adapter.ts +1 -1
- package/src/sdk/bus/chat-daemon-runtime.ts +7 -0
- package/src/sdk/cli/rows.ts +47 -2
- package/src/sdk/cli/session-cli.ts +38 -17
- package/src/sdk/host/events.ts +25 -2
- package/src/sdk/host/host.ts +4 -1
- package/src/sdk/host/session-runtime.test.ts +34 -23
- package/src/sdk/host/session-runtime.ts +4 -0
- package/src/sdk/router/session-router.ts +60 -37
- package/src/sdk/session.ts +0 -1
- package/src/tools/bash.ts +15 -13
- package/src/tools/index.ts +0 -2
- package/src/tools/tool-catalog.generated.ts +1 -1
- package/src/utils/external-editor.ts +16 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.16.3] - 2026-09-04
|
|
6
|
+
|
|
7
|
+
## [0.16.2] - 2026-09-04
|
|
8
|
+
|
|
9
|
+
- Primary model binding now rejects GPT-5.6 Sol when the selected openai-codex OAuth account is known to be below the Pro tier, preventing a raw entitlement failure on the first turn and preserving the prior model on a failed selection.
|
|
10
|
+
|
|
11
|
+
- Fixed the steer-triggered bash fold being skipped under `toolInterruptPolicy: finish_tools`: a composer steer over a long foreground `bash` was aborted instead of folded because the fold gate wrongly treated the policy as an exclusion. `finish_tools` governs sibling tools in the batch, not the fold; the fold kills nothing and now applies under both policies. A tmux dogfood driver (`scripts/dogfood/steer-fold-tmux.sh`) proves the real binary folds, answers the steer in the same turn, and wakes on completion.
|
|
12
|
+
- SDK session tails now preserve authoritative transcript revisions in item identity and lifecycle ordering, close the pre-checkpoint live/replay dedupe race, and recover held live frames across reconnect replay without losing ordered delivery.
|
|
13
|
+
- Native Windows external editors now reassert runtime raw input for ConPTY-backed terminals after returning from the editor, preventing cooked-mode handoff from swallowing the first keystroke.
|
|
14
|
+
- ACP reconnect cancellation now reports `cancelled` only after the SDK acknowledges the abort; pre-ack owner loss remains `connection_closed`, while failed aborts preserve non-cancelled prompt outcomes and leave the session reusable.
|
|
15
|
+
|
|
5
16
|
## [0.16.1] - 2026-09-03
|
|
6
17
|
|
|
7
18
|
- Broker-launched SDK sessions now activate an already-cached default model profile before refreshing provider catalogs in the background, preventing redundant online discovery from consuming the fixed semantic-readiness window while preserving strict refresh fallback when cached profile resolution fails.
|
|
@@ -75,6 +75,13 @@ export interface SdkTailEnvelopeV1 {
|
|
|
75
75
|
gap?: SdkRetentionGapV1;
|
|
76
76
|
items: SdkTailItemV1[];
|
|
77
77
|
}
|
|
78
|
+
export declare function tailItemKey(item: SdkTailItemV1): string;
|
|
79
|
+
/** Holds positioned live frames until the checkpoint can stamp their authoritative revision. */
|
|
80
|
+
export declare class TailRevisionBuffer {
|
|
81
|
+
#private;
|
|
82
|
+
push(item: SdkTailItemV1): SdkTailItemV1[];
|
|
83
|
+
resolve(revision: number): SdkTailItemV1[];
|
|
84
|
+
}
|
|
78
85
|
/** Recursively removes secret-shaped fields (defense in depth for DTO output). */
|
|
79
86
|
export declare function stripSecretFields(value: unknown): unknown;
|
|
80
87
|
/**
|
|
@@ -34,6 +34,8 @@ export type SessionActivationGate = (input: {
|
|
|
34
34
|
export interface SessionSdkHostOptions extends HostEndpointAdapters {
|
|
35
35
|
control?: (connectionId: string, frame: SdkFrame) => unknown | Promise<unknown>;
|
|
36
36
|
query?: (connectionId: string, frame: SdkFrame) => unknown | Promise<unknown>;
|
|
37
|
+
/** Supplies the durable transcript revision stamped on ordinary emitted events. */
|
|
38
|
+
eventRevision?: () => number | undefined;
|
|
37
39
|
/** Test/lifecycle seam invoked synchronously before fire-and-forget dispatch. */
|
|
38
40
|
onFrameAdmitted?: (connectionId: string, frame: SdkFrame) => void;
|
|
39
41
|
/** Synchronously rejects external input while a runtime is being replaced. */
|
|
@@ -191,8 +191,6 @@ export interface ToolSession {
|
|
|
191
191
|
hasForegroundBashBackgroundRequestHandler?: () => boolean;
|
|
192
192
|
/** Request that a foreground wait fold into a background job, if supported. `reason` names the trigger; `adapter` targets a specific wait instead of the newest registration. */
|
|
193
193
|
requestForegroundBashBackground?: (reason?: FoldReason, adapter?: FoldAdapter) => Promise<boolean>;
|
|
194
|
-
/** Current tool interrupt policy; `finish_tools` lets the running tool finish, so a steer must not fold it. */
|
|
195
|
-
getToolInterruptPolicy?: () => "abort_tools" | "finish_tools";
|
|
196
194
|
/** Get the session-owned or inherited async job manager. */
|
|
197
195
|
getAsyncJobManager?: () => AsyncJobManager | undefined;
|
|
198
196
|
/** Resolves on a steer admitted after the wait starts, or when `signal` aborts, without consuming the steer. */
|
|
@@ -17,6 +17,10 @@ export declare function trimEditorTrailingNewline(text: string): string;
|
|
|
17
17
|
* files still require a shell on Windows; ordinary executables do not.
|
|
18
18
|
*/
|
|
19
19
|
export declare function shouldUseExternalEditorShell(editor: string, platform?: NodeJS.Platform): boolean;
|
|
20
|
+
interface RawModeInput {
|
|
21
|
+
setRawMode?: (mode: boolean) => unknown;
|
|
22
|
+
}
|
|
23
|
+
export declare function prepareWindowsConsoleForExternalEditor(platform?: NodeJS.Platform, input?: RawModeInput): void;
|
|
20
24
|
/**
|
|
21
25
|
* Opens `content` in the user's external editor and returns the edited text.
|
|
22
26
|
* Returns `null` if the editor exits with a non-zero code.
|
|
@@ -24,3 +28,4 @@ export declare function shouldUseExternalEditorShell(editor: string, platform?:
|
|
|
24
28
|
* The caller is responsible for stopping/starting the TUI around this call.
|
|
25
29
|
*/
|
|
26
30
|
export declare function openInEditor(editorCmd: string, content: string, options?: OpenInEditorOptions): Promise<string | null>;
|
|
31
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@gajae-code/coding-agent",
|
|
4
|
-
"version": "0.16.
|
|
4
|
+
"version": "0.16.3",
|
|
5
5
|
"description": "Gajae Code CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://gajae-code.com",
|
|
7
7
|
"author": "Yeachan-Heo and Gajae Code Contributors",
|
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
57
57
|
"@babel/parser": "^7.29.3",
|
|
58
58
|
"@mozilla/readability": "^0.6.0",
|
|
59
|
-
"@gajae-code/stats": "0.16.
|
|
60
|
-
"@gajae-code/agent-core": "0.16.
|
|
61
|
-
"@gajae-code/ai": "0.16.
|
|
62
|
-
"@gajae-code/natives": "0.16.
|
|
63
|
-
"@gajae-code/tui": "0.16.
|
|
64
|
-
"@gajae-code/utils": "0.16.
|
|
59
|
+
"@gajae-code/stats": "0.16.3",
|
|
60
|
+
"@gajae-code/agent-core": "0.16.3",
|
|
61
|
+
"@gajae-code/ai": "0.16.3",
|
|
62
|
+
"@gajae-code/natives": "0.16.3",
|
|
63
|
+
"@gajae-code/tui": "0.16.3",
|
|
64
|
+
"@gajae-code/utils": "0.16.3",
|
|
65
65
|
"@puppeteer/browsers": "^2.13.0",
|
|
66
66
|
"@types/turndown": "5.0.6",
|
|
67
67
|
"@xterm/headless": "^6.0.0",
|
|
@@ -241,8 +241,7 @@ function removeOwnedTransitionClaim(nativePath: string, generation: TransitionDi
|
|
|
241
241
|
if (!captured.ok || !captured.snapshot) return captured.code === "not_found";
|
|
242
242
|
const root = captured.snapshot.entries.find(entry => entry.relativePath === "");
|
|
243
243
|
if (
|
|
244
|
-
|
|
245
|
-
root.kind !== "directory" ||
|
|
244
|
+
root?.kind !== "directory" ||
|
|
246
245
|
root.dev !== String(generation.dev) ||
|
|
247
246
|
root.ino !== String(generation.ino) ||
|
|
248
247
|
root.nlink !== String(generation.nlink) ||
|
|
@@ -1728,8 +1727,7 @@ async function reclaimStaleTransitionClaim(transitionDir: string, quarantineName
|
|
|
1728
1727
|
if (!captured.ok || !captured.snapshot) return false;
|
|
1729
1728
|
const root = captured.snapshot.entries.find(entry => entry.relativePath === "");
|
|
1730
1729
|
if (
|
|
1731
|
-
|
|
1732
|
-
root.kind !== "directory" ||
|
|
1730
|
+
root?.kind !== "directory" ||
|
|
1733
1731
|
root.dev !== String(generation.dev) ||
|
|
1734
1732
|
root.ino !== String(generation.ino) ||
|
|
1735
1733
|
root.nlink !== String(generation.nlink) ||
|