@f5-sales-demo/xcsh 19.98.0 → 19.98.1
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.98.
|
|
4
|
+
"version": "19.98.1",
|
|
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",
|
|
@@ -57,13 +57,13 @@
|
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
59
59
|
"@mozilla/readability": "^0.6",
|
|
60
|
-
"@f5-sales-demo/xcsh-stats": "19.98.
|
|
61
|
-
"@f5-sales-demo/pi-agent-core": "19.98.
|
|
62
|
-
"@f5-sales-demo/pi-ai": "19.98.
|
|
63
|
-
"@f5-sales-demo/pi-natives": "19.98.
|
|
64
|
-
"@f5-sales-demo/pi-resource-management": "19.98.
|
|
65
|
-
"@f5-sales-demo/pi-tui": "19.98.
|
|
66
|
-
"@f5-sales-demo/pi-utils": "19.98.
|
|
60
|
+
"@f5-sales-demo/xcsh-stats": "19.98.1",
|
|
61
|
+
"@f5-sales-demo/pi-agent-core": "19.98.1",
|
|
62
|
+
"@f5-sales-demo/pi-ai": "19.98.1",
|
|
63
|
+
"@f5-sales-demo/pi-natives": "19.98.1",
|
|
64
|
+
"@f5-sales-demo/pi-resource-management": "19.98.1",
|
|
65
|
+
"@f5-sales-demo/pi-tui": "19.98.1",
|
|
66
|
+
"@f5-sales-demo/pi-utils": "19.98.1",
|
|
67
67
|
"@sinclair/typebox": "^0.34",
|
|
68
68
|
"@xterm/headless": "^6.0",
|
|
69
69
|
"ajv": "^8.20",
|
|
@@ -58,8 +58,62 @@ export class PendingRequests {
|
|
|
58
58
|
|
|
59
59
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* The historical base of the whole bridge port layout.
|
|
63
|
+
*
|
|
64
|
+
* Every range below is derived from a base rather than written out, so a caller can move the entire
|
|
65
|
+
* layout coherently. That matters because the layout is otherwise global to the machine: every
|
|
66
|
+
* clone, worktree and live session competes for the same window, and an integration test that reaps
|
|
67
|
+
* "whatever holds my ports" can reach a developer's own bridge (#2495).
|
|
68
|
+
*/
|
|
69
|
+
export const BRIDGE_PORT_BASE_DEFAULT = 19222;
|
|
70
|
+
|
|
71
|
+
/** Ports occupied by one bridge layout. */
|
|
72
|
+
export interface BridgePortLayout {
|
|
73
|
+
defaultPort: number;
|
|
74
|
+
chrome: PortRange;
|
|
75
|
+
office: PortRange;
|
|
76
|
+
/** Paired wss listeners for the chrome ws range. */
|
|
77
|
+
wss: PortRange;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Fixed offset from a bound ws port to its paired `wss` port. The wss listener is
|
|
82
|
+
* ADDITIVE: when the bridge binds ws port P (in {@link PORT_RANGE_START}–{@link
|
|
83
|
+
* PORT_RANGE_END}), it also binds wss on P + {@link WSS_PORT_OFFSET}, so discovery
|
|
84
|
+
* stays trivial (ws 19222 ↔ wss 19322 at the default base) and the pair can never desync.
|
|
85
|
+
*/
|
|
86
|
+
export const WSS_PORT_OFFSET = 100;
|
|
87
|
+
|
|
88
|
+
/** Width of each auto-select range. */
|
|
89
|
+
const RANGE_WIDTH = 20;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Resolve the layout base from the environment.
|
|
93
|
+
*
|
|
94
|
+
* Anything that is not a usable port number falls back to the default rather than shifting the
|
|
95
|
+
* fleet somewhere unexpected.
|
|
96
|
+
*/
|
|
97
|
+
export function resolveBridgePortBase(env: Record<string, string | undefined> = process.env): number {
|
|
98
|
+
const raw = Number(env.XCSH_BRIDGE_PORT_START);
|
|
99
|
+
if (!Number.isInteger(raw) || raw <= 0 || raw > 65_535 - 200) return BRIDGE_PORT_BASE_DEFAULT;
|
|
100
|
+
return raw;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Every range for a given base, preserving the office-above-chrome and wss=ws+100 invariants. */
|
|
104
|
+
export function deriveBridgePorts(base: number): BridgePortLayout {
|
|
105
|
+
return {
|
|
106
|
+
defaultPort: base,
|
|
107
|
+
chrome: { start: base, end: base + RANGE_WIDTH - 1 },
|
|
108
|
+
office: { start: base + RANGE_WIDTH, end: base + 2 * RANGE_WIDTH - 1 },
|
|
109
|
+
wss: { start: base + WSS_PORT_OFFSET, end: base + WSS_PORT_OFFSET + RANGE_WIDTH - 1 },
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const LAYOUT = deriveBridgePorts(resolveBridgePortBase());
|
|
114
|
+
|
|
61
115
|
/** Default loopback port for the extension WebSocket bridge. */
|
|
62
|
-
export const DEFAULT_PORT =
|
|
116
|
+
export const DEFAULT_PORT = LAYOUT.defaultPort;
|
|
63
117
|
|
|
64
118
|
/** Resolve the bridge port from an explicit value, then `XCSH_BRIDGE_PORT`, then the default. */
|
|
65
119
|
export function resolvePort(port?: number): number {
|
|
@@ -70,8 +124,8 @@ export function resolvePort(port?: number): number {
|
|
|
70
124
|
}
|
|
71
125
|
|
|
72
126
|
/** Inclusive loopback discovery range for auto-selected bridge ports (Chrome worker). */
|
|
73
|
-
export const PORT_RANGE_START =
|
|
74
|
-
export const PORT_RANGE_END =
|
|
127
|
+
export const PORT_RANGE_START = LAYOUT.chrome.start;
|
|
128
|
+
export const PORT_RANGE_END = LAYOUT.chrome.end;
|
|
75
129
|
|
|
76
130
|
/**
|
|
77
131
|
* Dedicated loopback ws range for `xcsh office serve` bridges — DISJOINT from the
|
|
@@ -81,8 +135,8 @@ export const PORT_RANGE_END = 19241;
|
|
|
81
135
|
* the office wss range) can never adopt a Chrome worker. The Chrome fleet's range
|
|
82
136
|
* is UNCHANGED — zero blast radius on browser automation.
|
|
83
137
|
*/
|
|
84
|
-
export const OFFICE_PORT_RANGE_START =
|
|
85
|
-
export const OFFICE_PORT_RANGE_END =
|
|
138
|
+
export const OFFICE_PORT_RANGE_START = LAYOUT.office.start;
|
|
139
|
+
export const OFFICE_PORT_RANGE_END = LAYOUT.office.end;
|
|
86
140
|
|
|
87
141
|
/** An inclusive port range for auto-select. */
|
|
88
142
|
export interface PortRange {
|
|
@@ -100,16 +154,9 @@ export const OFFICE_PORT_RANGE: PortRange = { start: OFFICE_PORT_RANGE_START, en
|
|
|
100
154
|
* client's announced host). Echoed in hello_ack so the office pane can filter. */
|
|
101
155
|
export type ServeKind = "office" | "browser";
|
|
102
156
|
|
|
103
|
-
/**
|
|
104
|
-
* Fixed offset from a bound ws port to its paired `wss` port. The wss listener is
|
|
105
|
-
* ADDITIVE: when the bridge binds ws port P (in {@link PORT_RANGE_START}–{@link
|
|
106
|
-
* PORT_RANGE_END}), it also binds wss on P + {@link WSS_PORT_OFFSET}, so discovery
|
|
107
|
-
* stays trivial (ws 19222 ↔ wss 19322) and the ws/wss pair can never desync.
|
|
108
|
-
*/
|
|
109
|
-
export const WSS_PORT_OFFSET = 100;
|
|
110
157
|
/** Inclusive discovery range for the paired `wss` listeners (ws range + offset). */
|
|
111
|
-
export const WSS_RANGE_START =
|
|
112
|
-
export const WSS_RANGE_END =
|
|
158
|
+
export const WSS_RANGE_START = LAYOUT.wss.start;
|
|
159
|
+
export const WSS_RANGE_END = LAYOUT.wss.end;
|
|
113
160
|
|
|
114
161
|
/**
|
|
115
162
|
* Add-in origin allowlist suffixes for the bridge gate. An `https:` origin whose
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "19.98.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.98.1",
|
|
21
|
+
"commit": "2cf64a9979fc34447e7e1f35b466fbcc789b2289",
|
|
22
|
+
"shortCommit": "2cf64a9",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.98.
|
|
25
|
-
"commitDate": "2026-07-
|
|
26
|
-
"buildDate": "2026-07-
|
|
24
|
+
"tag": "v19.98.1",
|
|
25
|
+
"commitDate": "2026-07-28T02:41:40Z",
|
|
26
|
+
"buildDate": "2026-07-28T03:07:44.141Z",
|
|
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.98.
|
|
31
|
+
"commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/2cf64a9979fc34447e7e1f35b466fbcc789b2289",
|
|
32
|
+
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.98.1"
|
|
33
33
|
};
|