Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/coding-agent/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
- Updated every bundled GLM model profile (`glm-eco`, `glm-medium`, and `glm-pro`) from ZAI GLM-5.2 to GLM-5.3.
- Defense-in-depth: when an Anthropic-origin assistant transcript message carrying directly adjacent `thinking`/`redacted_thinking` blocks is persisted, a single bounded warn is emitted per session manager instance — but only in development/test builds, never in production. The diagnostic names only the envelope shape (block count, adjacency presence, provider), never raw thinking text, signatures, redacted payloads, or transcript-path metadata. Storage is never mutated — the send-boundary collapse remains the wire source of truth; this is a read-only observation that helps surface upstream producers of the rejected shape (#4443).
### Fixed
- Post-merge repair for #4542: `CHAT_DAEMON_GENERATIONS.discord` 64→65 and `.slack` 67→68 so the `SessionRouter` initial attachment replay change is generation-fenced for already-running Discord and Slack daemons. The semantic guard manifest is regenerated with the corrected generation and declaration digests.
- Cursor split responses now preserve canonical provider order across pre-admission artifact spilling, so a server-side tool result cannot be persisted after the assistant continuation that follows it. The canonical admission reservation is owned by each emission's own handler, so a host bridge or replay emitting the same `message_end` event object twice can no longer overwrite the reservation and deadlock every later canonical admission (#4536).
- Default-model selection now reserves a causal fence before credential probing, so an already accepted prompt preflight cannot be overtaken and a selection accepted first blocks later prompt preflight through durable publication. The fence does not hold session admission across `waitForIdle`, allowing inherited auto-compaction continuations to obtain prompt admission; same-session reentrancy still fails fast, successor sessions remain protected, and disposal deterministically drains accepted selections while rejecting queued prompts without unhandled rejections (#4519).
- Ordinary sessions no longer import or execute Claude Code and Codex directory hooks as competing runtime authorities. Runtime hook discovery is fail-closed to canonical native `.gjc/hooks/` providers while explicit configured paths, constrained plugin hooks, and foreign-provider import/diagnostic discovery remain available (#4516).
Expand Down
7 changes: 5 additions & 2 deletions packages/coding-agent/src/sdk/bus/chat-daemon-control.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,13 @@ export type ChatDaemonAction = "stop" | "reload";
* Discord generation 64 / Slack generation 67 contain synchronous provider-
* subscription admission and ready-hook failures without revoking shared Router
* attachment authority.
* Discord generation 65 / Slack generation 68 fence the off-reconcile-tail
* initial attachment replay introduced by #4542 so pre-upgrade daemon owners
* cannot retain the earlier SessionRouter attachment contract.
*/
export const CHAT_DAEMON_GENERATIONS: Readonly<Record<ChatDaemonKind, number>> = {
discord: 64,
slack: 67,
discord: 65,
slack: 68,
};

export function chatDaemonGeneration(kind: ChatDaemonKind): number {
Expand Down
12 changes: 6 additions & 6 deletions scripts/telegram-daemon-generation-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts:loadConfig": "aff409ff6d08bfe19f5c39aac900ec6c8e898d988971bac029edb50459a84f5e",
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts:ownerPid": "31110dcdd6e0f5dbc8b4dce27383646b9c339739758623ab67dc40ddc36661e0",
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts:runChatDaemonInternal": "3865dd37ea7a6b92ef0e692a63fb9c084f06fa88b823d293b1e1e55d082dac86",
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:CHAT_DAEMON_GENERATIONS.discord": "7fa9a4aa17f19a6f9e6a2ddc29dca3b67a04938ef603ffccda9e3ee31f977d3d",
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:CHAT_DAEMON_GENERATIONS.discord": "95bd65c6a74757de7a5063f5b252801709418c27e361979788d98955eb2387c2",
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:ChatDaemonAction": "d8acaf90439e410595b5cd56fd187001393ea943517a5563a4a2ea3c88d155ef",
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:ChatDaemonController": "bb722a6a83eb383fce45e756cba356592b33ff0f505b4263409ce9138ea651f1",
"discord:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:ChatDaemonKind": "b1c2906c4eb04e120c9ce42f8b549a68cfc834d29d4d745335712a7f61bf09f2",
Expand Down Expand Up @@ -432,14 +432,14 @@
"discord:packages/coding-agent/src/sdk/bus/discord-daemon.ts:start": "bf8bbd91ad9e0abf3cd9d222ca64c58d424580c9d47b132b874f06d9e8fc19d1",
"discord:packages/coding-agent/src/sdk/bus/discord-daemon.ts:stop": "c8bcd881cc0331fb0565a82d997805f939701b12a80e03177192dbd5935824ff",
"discord:packages/coding-agent/src/sdk/client/discovery.ts:readSdkSessionEndpoint": "c0f42dcf4843e6c79516b11927150e0fe827f6f4cfff400f04ab113ae0574022",
"discord:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#attach": "f01b84c3ab97d1123b4d7b85760ceb113fbb079f665e188cc7cabcda873e88fe",
"discord:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#attach": "d9e810776f1bd821e0c62730ae89fe71dc83d6f93b12d9ccebd2cb237dae08cf",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Bump both daemon generations before accepting these hashes

When users upgrade with a Discord or Slack daemon already running from before #4542, this digest-only refresh makes the current-tree validation pass while CHAT_DAEMON_GENERATIONS remains 64/67. Because the immediate base already contains the #attach and #publishAttachment changes, evaluate() now sees no protected declaration delta and cannot demand the missed bumps; the controller consequently classifies the old owners as compatible instead of replacing them. Increment both provider generations and regenerate the manifest so the protected endpoint-discovery change is actually fenced.

Useful? React with 👍 / 👎.

"discord:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#createAttachedClient": "dc2c780c9decb94e23481bc57d5d0fbfd3a45320197e03f33079a91a3334e43e",
"discord:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#publishAttachment": "ecbcfe6d6447556d69d424fb14ee5b0815d421db642cf7907171b94d203a7450",
"discord:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#publishAttachment": "df2509604cbd0ff2f821a6fde48131df18a5b73142fbbb9e8855075af01a2618",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts:defaultPidAlive": "437658a2f14ac5daa2a3e84dcd637078566e71a88841cd750efab6d48fc94c3f",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts:loadConfig": "aff409ff6d08bfe19f5c39aac900ec6c8e898d988971bac029edb50459a84f5e",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts:ownerPid": "31110dcdd6e0f5dbc8b4dce27383646b9c339739758623ab67dc40ddc36661e0",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts:runChatDaemonInternal": "3865dd37ea7a6b92ef0e692a63fb9c084f06fa88b823d293b1e1e55d082dac86",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:CHAT_DAEMON_GENERATIONS.slack": "34e260f7d68ceb8702467a93e41eeab8230920a950a9983d03c2e7409a7f4ee6",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:CHAT_DAEMON_GENERATIONS.slack": "365d76b838f67e52933d2c05b31507634e93ad5eac6d84dd8e8538d71f9e7855",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:ChatDaemonAction": "d8acaf90439e410595b5cd56fd187001393ea943517a5563a4a2ea3c88d155ef",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:ChatDaemonController": "bb722a6a83eb383fce45e756cba356592b33ff0f505b4263409ce9138ea651f1",
"slack:packages/coding-agent/src/sdk/bus/chat-daemon-control.ts:ChatDaemonKind": "b1c2906c4eb04e120c9ce42f8b549a68cfc834d29d4d745335712a7f61bf09f2",
Expand Down Expand Up @@ -517,9 +517,9 @@
"slack:packages/coding-agent/src/sdk/bus/slack-daemon.ts:start": "d3a5392ddff0d522aea7b4fd349758a56d56189f4b66d4403487e11e3dcacb21",
"slack:packages/coding-agent/src/sdk/bus/slack-daemon.ts:stop": "193b4d16482533da0d6ae137e0b9e74e5449cfa7f1633bb87b4e10572ad7c43e",
"slack:packages/coding-agent/src/sdk/client/discovery.ts:readSdkSessionEndpoint": "c0f42dcf4843e6c79516b11927150e0fe827f6f4cfff400f04ab113ae0574022",
"slack:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#attach": "f01b84c3ab97d1123b4d7b85760ceb113fbb079f665e188cc7cabcda873e88fe",
"slack:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#attach": "d9e810776f1bd821e0c62730ae89fe71dc83d6f93b12d9ccebd2cb237dae08cf",
"slack:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#createAttachedClient": "dc2c780c9decb94e23481bc57d5d0fbfd3a45320197e03f33079a91a3334e43e",
"slack:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#publishAttachment": "ecbcfe6d6447556d69d424fb14ee5b0815d421db642cf7907171b94d203a7450",
"slack:packages/coding-agent/src/sdk/router/session-router.ts:SessionRouter.#publishAttachment": "df2509604cbd0ff2f821a6fde48131df18a5b73142fbbb9e8855075af01a2618",
"telegram:packages/coding-agent/src/sdk/bus/config.ts:isTelegramSessionEligible": "6e2bf01ec7f58e07658172a2911741891f4eb05e2050e536bc170d6770746c37",
"telegram:packages/coding-agent/src/sdk/bus/config.ts:parseNotificationSettingsSnapshot": "a694158726a9a4f4df58d1b1a4cee54884ef2e4bab506b3c6cac981b3f41072e",
"telegram:packages/coding-agent/src/sdk/bus/daemon-paths.ts:DaemonPaths": "2a22d60aed8c778a8f4b7e2b2017b192977e3767b04572ca13d534980fa2f560",
Expand Down
Loading