@f5-sales-demo/xcsh 19.62.2 → 19.62.4
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.
|
|
4
|
+
"version": "19.62.4",
|
|
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.
|
|
60
|
-
"@f5-sales-demo/pi-agent-core": "19.62.
|
|
61
|
-
"@f5-sales-demo/pi-ai": "19.62.
|
|
62
|
-
"@f5-sales-demo/pi-natives": "19.62.
|
|
63
|
-
"@f5-sales-demo/pi-resource-management": "19.62.
|
|
64
|
-
"@f5-sales-demo/pi-tui": "19.62.
|
|
65
|
-
"@f5-sales-demo/pi-utils": "19.62.
|
|
59
|
+
"@f5-sales-demo/xcsh-stats": "19.62.4",
|
|
60
|
+
"@f5-sales-demo/pi-agent-core": "19.62.4",
|
|
61
|
+
"@f5-sales-demo/pi-ai": "19.62.4",
|
|
62
|
+
"@f5-sales-demo/pi-natives": "19.62.4",
|
|
63
|
+
"@f5-sales-demo/pi-resource-management": "19.62.4",
|
|
64
|
+
"@f5-sales-demo/pi-tui": "19.62.4",
|
|
65
|
+
"@f5-sales-demo/pi-utils": "19.62.4",
|
|
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: "
|
|
84
|
+
type: "chat_tool_notice",
|
|
74
85
|
id,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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",
|
|
@@ -267,15 +287,21 @@ BEHAVIOR:
|
|
|
267
287
|
|
|
268
288
|
BROWSER AUTOMATION (when the user asks to create/modify/navigate resources):
|
|
269
289
|
- You are IN a Chrome browser. The active console tab is your workspace — use IT.
|
|
270
|
-
- For create/modify/delete: call catalog_workflow_runner IMMEDIATELY with ONE tool call:
|
|
290
|
+
- For create/modify/delete: call catalog_workflow_runner IMMEDIATELY with ONE tool call per resource:
|
|
271
291
|
{"resource": "health-check", "operation": "create", "params": {"name": "foo", "namespace": "demo"}, "presentation": "guided"}
|
|
272
|
-
|
|
292
|
+
Do NOT read API specs first, do NOT create todos, do NOT orchestrate multi-step tool chains. The catalog_workflow_runner handles ALL the form navigation internally.
|
|
273
293
|
- Say a brief text message BEFORE the tool call: "Creating health check **foo** — watch the browser." Then call the tool. Nothing else.
|
|
274
294
|
- The human is WATCHING the form automation (fingerprint-before-click, highlights, ~1.5s/step). Do NOT use background API calls.
|
|
275
295
|
- The browser may be at 85% zoom — automation handles coordinates at any zoom.
|
|
276
296
|
- The console catalog has workflows for 100+ F5 XC resources.
|
|
277
297
|
- Do NOT open new tabs — drive the existing console tab.
|
|
278
298
|
|
|
299
|
+
MULTI-RESOURCE REQUESTS (when the user asks to create several resources in one prompt):
|
|
300
|
+
- Create resources in DEPENDENCY ORDER: health checks first, then origin pools (which reference health checks), then load balancers (which reference origin pools and app firewalls).
|
|
301
|
+
- After each catalog_workflow_runner call completes, IMMEDIATELY proceed to the next resource. Do NOT inspect, verify, click into, or navigate to the resource you just created. Do NOT open the JSON view. Do NOT read the page to confirm — the tool already confirmed success. Move directly to the next creation.
|
|
302
|
+
- Between resources, say ONE short line: "Health check created. Now creating origin pool **bar** — watch the browser." Then call the next tool.
|
|
303
|
+
- NEVER navigate to a list/detail/JSON view between creations. Stay on the automation path.
|
|
304
|
+
|
|
279
305
|
SAFETY — NEVER DO THESE:
|
|
280
306
|
- NEVER kill, stop, or manage processes on port 19222 — that is YOUR OWN bridge. Killing it kills you.
|
|
281
307
|
- NEVER run lsof, fuser, kill, or pkill on the bridge port. You ARE the bridge.
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "19.62.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.62.4",
|
|
21
|
+
"commit": "156cce9e3d3c27cbf7a4ed531f1657d1b28bbdfa",
|
|
22
|
+
"shortCommit": "156cce9",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.62.
|
|
25
|
-
"commitDate": "2026-07-
|
|
26
|
-
"buildDate": "2026-07-
|
|
24
|
+
"tag": "v19.62.4",
|
|
25
|
+
"commitDate": "2026-07-09T13:55:15Z",
|
|
26
|
+
"buildDate": "2026-07-09T14:16:25.999Z",
|
|
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/
|
|
32
|
-
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.62.
|
|
31
|
+
"commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/156cce9e3d3c27cbf7a4ed531f1657d1b28bbdfa",
|
|
32
|
+
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.62.4"
|
|
33
33
|
};
|