@gajae-code/coding-agent 0.12.18 → 0.12.19
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
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.12.19] - 2026-08-08
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Telegram topic-registry archive transitions remain parser-valid across durable-fence load promotion and failed archive-publication rollback. The initial generation-57 fix cleared `disconnectGraceExpiresAt` on direct archive transitions, but loading a `disconnect_grace` record superseded by a newer durable fence could still promote it to `archive_pending` while retaining the grace-only field, and rollback could restore `disconnect_grace` without restoring its required deadline. Both paths now preserve the state/field invariant with parser-roundtrip coverage. This entry also corrects the hotfix attribution omitted from the published 0.12.18 release notes. `DAEMON_GENERATION` bumped to 58.
|
|
10
|
+
|
|
5
11
|
## [0.12.18] - 2026-08-08
|
|
6
12
|
|
|
7
13
|
### Fixed
|
|
@@ -88,9 +88,11 @@ export declare const NOTIFICATION_PROTOCOL_VERSION = 3;
|
|
|
88
88
|
* lazy native bindings for the startup-cost cut (#3846). Generation 57 clears
|
|
89
89
|
* disconnect-grace-only fields whenever a topic enters an archive state, so
|
|
90
90
|
* one stale session cannot make the shared registry unreadable and block every
|
|
91
|
-
* later session from creating a topic or replaying notifications.
|
|
91
|
+
* later session from creating a topic or replaying notifications. Generation
|
|
92
|
+
* 58 preserves that invariant during durable-fence load promotion and restores
|
|
93
|
+
* the exact grace deadline when a failed archive publication rolls back.
|
|
92
94
|
*/
|
|
93
|
-
export declare const DAEMON_GENERATION =
|
|
95
|
+
export declare const DAEMON_GENERATION = 58;
|
|
94
96
|
/**
|
|
95
97
|
* Serving-compatibility boundary for daemon lifecycle requests. Epoch 5
|
|
96
98
|
* requires the complete generation-36 topic authority contract, so older
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@gajae-code/coding-agent",
|
|
4
|
-
"version": "0.12.
|
|
4
|
+
"version": "0.12.19",
|
|
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",
|
|
@@ -54,13 +54,13 @@
|
|
|
54
54
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
55
55
|
"@babel/parser": "^7.29.3",
|
|
56
56
|
"@mozilla/readability": "^0.6.0",
|
|
57
|
-
"@gajae-code/stats": "0.12.
|
|
58
|
-
"@gajae-code/agent-core": "0.12.
|
|
59
|
-
"@gajae-code/ai": "0.12.
|
|
60
|
-
"@gajae-code/bridge-client": "0.12.
|
|
61
|
-
"@gajae-code/natives": "0.12.
|
|
62
|
-
"@gajae-code/tui": "0.12.
|
|
63
|
-
"@gajae-code/utils": "0.12.
|
|
57
|
+
"@gajae-code/stats": "0.12.19",
|
|
58
|
+
"@gajae-code/agent-core": "0.12.19",
|
|
59
|
+
"@gajae-code/ai": "0.12.19",
|
|
60
|
+
"@gajae-code/bridge-client": "0.12.19",
|
|
61
|
+
"@gajae-code/natives": "0.12.19",
|
|
62
|
+
"@gajae-code/tui": "0.12.19",
|
|
63
|
+
"@gajae-code/utils": "0.12.19",
|
|
64
64
|
"@puppeteer/browsers": "^2.13.0",
|
|
65
65
|
"@types/turndown": "5.0.6",
|
|
66
66
|
"@xterm/headless": "^6.0.0",
|
|
@@ -90,9 +90,11 @@ export const NOTIFICATION_PROTOCOL_VERSION = 3;
|
|
|
90
90
|
* lazy native bindings for the startup-cost cut (#3846). Generation 57 clears
|
|
91
91
|
* disconnect-grace-only fields whenever a topic enters an archive state, so
|
|
92
92
|
* one stale session cannot make the shared registry unreadable and block every
|
|
93
|
-
* later session from creating a topic or replaying notifications.
|
|
93
|
+
* later session from creating a topic or replaying notifications. Generation
|
|
94
|
+
* 58 preserves that invariant during durable-fence load promotion and restores
|
|
95
|
+
* the exact grace deadline when a failed archive publication rolls back.
|
|
94
96
|
*/
|
|
95
|
-
export const DAEMON_GENERATION =
|
|
97
|
+
export const DAEMON_GENERATION = 58;
|
|
96
98
|
|
|
97
99
|
/**
|
|
98
100
|
* Serving-compatibility boundary for daemon lifecycle requests. Epoch 5
|
|
@@ -578,7 +578,10 @@ export class TopicRegistry {
|
|
|
578
578
|
: {}),
|
|
579
579
|
...(isValidBindingString(raw.archiveHostId) ? { archiveHostId: raw.archiveHostId } : {}),
|
|
580
580
|
...(isValidBindingGeneration(raw.archiveLeaseEpoch) ? { archiveLeaseEpoch: raw.archiveLeaseEpoch } : {}),
|
|
581
|
-
...(
|
|
581
|
+
...(raw.authorityState === "disconnect_grace" &&
|
|
582
|
+
!fenceSupersedesRecord &&
|
|
583
|
+
typeof raw.disconnectGraceExpiresAt === "number" &&
|
|
584
|
+
Number.isFinite(raw.disconnectGraceExpiresAt)
|
|
582
585
|
? { disconnectGraceExpiresAt: raw.disconnectGraceExpiresAt }
|
|
583
586
|
: {}),
|
|
584
587
|
...(bindingMalformed ? { bindingMalformed: true as const } : {}),
|
|
@@ -1179,6 +1182,9 @@ export class TopicRegistry {
|
|
|
1179
1182
|
} else {
|
|
1180
1183
|
record.authorityEpoch = snapshot.authorityEpoch;
|
|
1181
1184
|
record.authorityState = snapshot.authorityState;
|
|
1185
|
+
if (snapshot.authorityState === "disconnect_grace" && snapshot.record?.disconnectGraceExpiresAt !== undefined)
|
|
1186
|
+
record.disconnectGraceExpiresAt = snapshot.record.disconnectGraceExpiresAt;
|
|
1187
|
+
else delete record.disconnectGraceExpiresAt;
|
|
1182
1188
|
this.rebuildInboundRoutes();
|
|
1183
1189
|
}
|
|
1184
1190
|
if (snapshot.fenceEpoch === undefined) this.epochs.delete(snapshot.sessionId);
|