@f5-sales-demo/xcsh 19.62.2 → 19.62.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@f5-sales-demo/xcsh",
4
- "version": "19.62.2",
4
+ "version": "19.62.3",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://github.com/f5-sales-demo/xcsh",
7
7
  "author": "Can Boluk",
@@ -56,13 +56,13 @@
56
56
  "dependencies": {
57
57
  "@agentclientprotocol/sdk": "0.16.1",
58
58
  "@mozilla/readability": "^0.6",
59
- "@f5-sales-demo/xcsh-stats": "19.62.2",
60
- "@f5-sales-demo/pi-agent-core": "19.62.2",
61
- "@f5-sales-demo/pi-ai": "19.62.2",
62
- "@f5-sales-demo/pi-natives": "19.62.2",
63
- "@f5-sales-demo/pi-resource-management": "19.62.2",
64
- "@f5-sales-demo/pi-tui": "19.62.2",
65
- "@f5-sales-demo/pi-utils": "19.62.2",
59
+ "@f5-sales-demo/xcsh-stats": "19.62.3",
60
+ "@f5-sales-demo/pi-agent-core": "19.62.3",
61
+ "@f5-sales-demo/pi-ai": "19.62.3",
62
+ "@f5-sales-demo/pi-natives": "19.62.3",
63
+ "@f5-sales-demo/pi-resource-management": "19.62.3",
64
+ "@f5-sales-demo/pi-tui": "19.62.3",
65
+ "@f5-sales-demo/pi-utils": "19.62.3",
66
66
  "@sinclair/typebox": "^0.34",
67
67
  "@xterm/headless": "^6.0",
68
68
  "ajv": "^8.20",
@@ -33,6 +33,11 @@ export class ChatHandler {
33
33
  #activeChats = new Map<string, ActiveChat>();
34
34
  #activeHistoryHint: string | undefined;
35
35
  #onTurnStart: (() => void) | undefined;
36
+ // Queued next request: when the session is busy (a turn is in flight), the next
37
+ // prompt is stashed here and replayed automatically when the current turn finishes.
38
+ // Only one pending request at a time (newest wins — a third prompt while one is
39
+ // queued replaces it, so the user's latest intent always runs next).
40
+ #pendingRequest: ChatRequest | null = null;
36
41
 
37
42
  constructor(server: BridgeServer, session: AgentSession) {
38
43
  this.#server = server;
@@ -52,6 +57,7 @@ export class ChatHandler {
52
57
  });
53
58
 
54
59
  this.#server.onDisconnected(() => {
60
+ this.#pendingRequest = null; // abandon any queued prompt — the bridge is gone
55
61
  for (const chat of this.#activeChats.values()) {
56
62
  this.#sendTerminal(chat, {
57
63
  type: "chat_error",
@@ -69,12 +75,18 @@ export class ChatHandler {
69
75
  const { id } = req;
70
76
 
71
77
  if (this.#session.isStreaming || this.#activeChats.size > 0) {
78
+ // Queue instead of reject: stash this request and replay it automatically
79
+ // when the current turn finishes. Newest wins (a third prompt while one is
80
+ // queued replaces it, so the user's latest intent always runs next). Send a
81
+ // tool-notice so the panel clears its timeout and shows "queued."
82
+ this.#pendingRequest = req;
72
83
  this.#server.send({
73
- type: "chat_error",
84
+ type: "chat_tool_notice",
74
85
  id,
75
- error: "session busy",
76
- reason: "session-busy",
77
- } satisfies ChatError);
86
+ tool: "queue",
87
+ ok: true,
88
+ detail: "xcsh is finishing the current request — yours is queued and will run next.",
89
+ });
78
90
  return;
79
91
  }
80
92
 
@@ -114,6 +126,13 @@ export class ChatHandler {
114
126
  }
115
127
  chat.unsubscribe();
116
128
  this.#activeChats.delete(id);
129
+ // Replay a queued request now that this turn is done: the session is free,
130
+ // so the pending prompt runs immediately (no user re-send needed).
131
+ const pending = this.#pendingRequest;
132
+ if (pending) {
133
+ this.#pendingRequest = null;
134
+ void this.#handleChatRequest(pending);
135
+ }
117
136
  }
118
137
  }
119
138
 
@@ -211,6 +230,7 @@ export class ChatHandler {
211
230
  }
212
231
 
213
232
  dispose(): void {
233
+ this.#pendingRequest = null; // abandon any queued prompt — don't replay into a dead session
214
234
  for (const chat of this.#activeChats.values()) {
215
235
  this.#sendTerminal(chat, {
216
236
  type: "chat_error",
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "19.62.2",
21
- "commit": "2db94a2fe43570de2c145baf4692241c0154dd3e",
22
- "shortCommit": "2db94a2",
20
+ "version": "19.62.3",
21
+ "commit": "9cc77a180e4cee61fa4793c5076c766c05bde7f3",
22
+ "shortCommit": "9cc77a1",
23
23
  "branch": "main",
24
- "tag": "v19.62.2",
25
- "commitDate": "2026-07-08T20:22:16Z",
26
- "buildDate": "2026-07-08T20:48:07.292Z",
24
+ "tag": "v19.62.3",
25
+ "commitDate": "2026-07-09T04:45:05Z",
26
+ "buildDate": "2026-07-09T05:10:00.549Z",
27
27
  "dirty": true,
28
28
  "prNumber": "",
29
29
  "repoUrl": "https://github.com/f5-sales-demo/xcsh",
30
30
  "repoSlug": "f5-sales-demo/xcsh",
31
- "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/2db94a2fe43570de2c145baf4692241c0154dd3e",
32
- "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.62.2"
31
+ "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/9cc77a180e4cee61fa4793c5076c766c05bde7f3",
32
+ "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.62.3"
33
33
  };