@f5xc-salesdemos/xcsh 18.77.4 → 18.78.0
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": "@f5xc-salesdemos/xcsh",
|
|
4
|
-
"version": "18.
|
|
4
|
+
"version": "18.78.0",
|
|
5
5
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://github.com/f5xc-salesdemos/xcsh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -48,12 +48,12 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@agentclientprotocol/sdk": "0.16.1",
|
|
50
50
|
"@mozilla/readability": "^0.6",
|
|
51
|
-
"@f5xc-salesdemos/xcsh-stats": "18.
|
|
52
|
-
"@f5xc-salesdemos/pi-agent-core": "18.
|
|
53
|
-
"@f5xc-salesdemos/pi-ai": "18.
|
|
54
|
-
"@f5xc-salesdemos/pi-natives": "18.
|
|
55
|
-
"@f5xc-salesdemos/pi-tui": "18.
|
|
56
|
-
"@f5xc-salesdemos/pi-utils": "18.
|
|
51
|
+
"@f5xc-salesdemos/xcsh-stats": "18.78.0",
|
|
52
|
+
"@f5xc-salesdemos/pi-agent-core": "18.78.0",
|
|
53
|
+
"@f5xc-salesdemos/pi-ai": "18.78.0",
|
|
54
|
+
"@f5xc-salesdemos/pi-natives": "18.78.0",
|
|
55
|
+
"@f5xc-salesdemos/pi-tui": "18.78.0",
|
|
56
|
+
"@f5xc-salesdemos/pi-utils": "18.78.0",
|
|
57
57
|
"@sinclair/typebox": "^0.34",
|
|
58
58
|
"@xterm/headless": "^6.0",
|
|
59
59
|
"ajv": "^8.18",
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "18.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "18.78.0",
|
|
21
|
+
"commit": "3bb17496fe0790d993020518091a0fc0979ea249",
|
|
22
|
+
"shortCommit": "3bb1749",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v18.
|
|
25
|
-
"commitDate": "2026-05-
|
|
26
|
-
"buildDate": "2026-05-
|
|
24
|
+
"tag": "v18.78.0",
|
|
25
|
+
"commitDate": "2026-05-24T05:12:38Z",
|
|
26
|
+
"buildDate": "2026-05-24T05:34:47.462Z",
|
|
27
27
|
"dirty": true,
|
|
28
28
|
"prNumber": "",
|
|
29
29
|
"repoUrl": "https://github.com/f5xc-salesdemos/xcsh",
|
|
30
30
|
"repoSlug": "f5xc-salesdemos/xcsh",
|
|
31
|
-
"commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/
|
|
32
|
-
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.
|
|
31
|
+
"commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/3bb17496fe0790d993020518091a0fc0979ea249",
|
|
32
|
+
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.78.0"
|
|
33
33
|
};
|
|
@@ -146,10 +146,13 @@ export class AssistantMessageComponent extends Container {
|
|
|
146
146
|
.some(c => (c.type === "text" && c.text.trim()) || (c.type === "thinking" && c.thinking.trim()));
|
|
147
147
|
|
|
148
148
|
if (this.hideThinkingBlock) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
if (!message.stopReason) {
|
|
150
|
+
this.#contentContainer.addChild(
|
|
151
|
+
new Text(theme.italic(theme.fg("thinkingText", "Thinking...")), 0, 0),
|
|
152
|
+
);
|
|
153
|
+
if (hasVisibleContentAfter) {
|
|
154
|
+
this.#contentContainer.addChild(new Spacer(1));
|
|
155
|
+
}
|
|
153
156
|
}
|
|
154
157
|
} else {
|
|
155
158
|
// Thinking traces in thinkingText color, italic
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - Events: AgentSessionEvent objects streamed as they occur
|
|
11
11
|
* - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response
|
|
12
12
|
*/
|
|
13
|
-
import { $env, readJsonl, Snowflake } from "@f5xc-salesdemos/pi-utils";
|
|
13
|
+
import { $env, getProjectDir, readJsonl, Snowflake, VERSION } from "@f5xc-salesdemos/pi-utils";
|
|
14
14
|
import type {
|
|
15
15
|
ExtensionUIContext,
|
|
16
16
|
ExtensionUIDialogOptions,
|
|
@@ -18,6 +18,22 @@ import type {
|
|
|
18
18
|
} from "../../extensibility/extensions";
|
|
19
19
|
import { type Theme, theme } from "../../modes/theme/theme";
|
|
20
20
|
import type { AgentSession } from "../../session/agent-session";
|
|
21
|
+
import {
|
|
22
|
+
checkAwsStatus,
|
|
23
|
+
checkAzureStatus,
|
|
24
|
+
checkGcloudStatus,
|
|
25
|
+
checkGitHubStatus,
|
|
26
|
+
checkGitLabStatus,
|
|
27
|
+
checkSalesforceStatus,
|
|
28
|
+
mapAwsStatus,
|
|
29
|
+
mapAzureStatus,
|
|
30
|
+
mapContextStatus,
|
|
31
|
+
mapGcloudStatus,
|
|
32
|
+
mapGitHubStatus,
|
|
33
|
+
mapGitLabStatus,
|
|
34
|
+
mapSalesforceStatus,
|
|
35
|
+
runWelcomeChecks,
|
|
36
|
+
} from "../components/welcome-checks";
|
|
21
37
|
import { isRpcHostToolResult, isRpcHostToolUpdate, RpcHostToolBridge } from "./host-tools";
|
|
22
38
|
import type {
|
|
23
39
|
RpcCommand,
|
|
@@ -143,7 +159,7 @@ export function requestRpcEditor(
|
|
|
143
159
|
*/
|
|
144
160
|
export async function runRpcMode(session: AgentSession): Promise<never> {
|
|
145
161
|
// Signal to RPC clients that the server is ready to accept commands
|
|
146
|
-
process.stdout.write(`${JSON.stringify({ type: "ready" })}\n`);
|
|
162
|
+
process.stdout.write(`${JSON.stringify({ type: "ready", version: VERSION })}\n`);
|
|
147
163
|
const output = (obj: RpcResponse | RpcExtensionUIRequest | object) => {
|
|
148
164
|
process.stdout.write(`${JSON.stringify(obj)}\n`);
|
|
149
165
|
};
|
|
@@ -610,6 +626,39 @@ export async function runRpcMode(session: AgentSession): Promise<never> {
|
|
|
610
626
|
return success(id, "set_host_tools", { toolNames: tools.map(tool => tool.name) });
|
|
611
627
|
}
|
|
612
628
|
|
|
629
|
+
case "get_integrations": {
|
|
630
|
+
const cwd = getProjectDir();
|
|
631
|
+
const [welcomeResult, gitlabStatus, salesforceStatus, githubStatus, azureStatus, awsStatus, gcloudStatus] =
|
|
632
|
+
await Promise.all([
|
|
633
|
+
runWelcomeChecks(session.model, session.modelRegistry.authStorage),
|
|
634
|
+
checkGitLabStatus(cwd).catch(() => undefined),
|
|
635
|
+
checkSalesforceStatus(cwd).catch(() => undefined),
|
|
636
|
+
checkGitHubStatus().catch(() => undefined),
|
|
637
|
+
checkAzureStatus().catch(() => undefined),
|
|
638
|
+
checkAwsStatus().catch(() => undefined),
|
|
639
|
+
checkGcloudStatus().catch(() => undefined),
|
|
640
|
+
]);
|
|
641
|
+
|
|
642
|
+
const services =
|
|
643
|
+
welcomeResult.model.state === "connected"
|
|
644
|
+
? [
|
|
645
|
+
mapContextStatus(welcomeResult.context ?? { state: "no_context" }),
|
|
646
|
+
mapGitLabStatus(gitlabStatus),
|
|
647
|
+
mapGitHubStatus(githubStatus),
|
|
648
|
+
mapSalesforceStatus(salesforceStatus),
|
|
649
|
+
mapAzureStatus(azureStatus),
|
|
650
|
+
mapAwsStatus(awsStatus),
|
|
651
|
+
mapGcloudStatus(gcloudStatus),
|
|
652
|
+
]
|
|
653
|
+
: [];
|
|
654
|
+
|
|
655
|
+
return success(id, "get_integrations", {
|
|
656
|
+
version: VERSION,
|
|
657
|
+
model: welcomeResult.model,
|
|
658
|
+
services,
|
|
659
|
+
});
|
|
660
|
+
}
|
|
661
|
+
|
|
613
662
|
// =================================================================
|
|
614
663
|
// Model
|
|
615
664
|
// =================================================================
|
|
@@ -28,6 +28,7 @@ export type RpcCommand =
|
|
|
28
28
|
| { id?: string; type: "get_state" }
|
|
29
29
|
| { id?: string; type: "set_todos"; phases: TodoPhase[] }
|
|
30
30
|
| { id?: string; type: "set_host_tools"; tools: RpcHostToolDefinition[] }
|
|
31
|
+
| { id?: string; type: "get_integrations" }
|
|
31
32
|
|
|
32
33
|
// Model
|
|
33
34
|
| { id?: string; type: "set_model"; provider: string; modelId: string }
|
|
@@ -109,6 +110,17 @@ export type RpcResponse =
|
|
|
109
110
|
| { id?: string; type: "response"; command: "get_state"; success: true; data: RpcSessionState }
|
|
110
111
|
| { id?: string; type: "response"; command: "set_todos"; success: true; data: { todoPhases: TodoPhase[] } }
|
|
111
112
|
| { id?: string; type: "response"; command: "set_host_tools"; success: true; data: { toolNames: string[] } }
|
|
113
|
+
| {
|
|
114
|
+
id?: string;
|
|
115
|
+
type: "response";
|
|
116
|
+
command: "get_integrations";
|
|
117
|
+
success: true;
|
|
118
|
+
data: {
|
|
119
|
+
version: string;
|
|
120
|
+
model: { state: "no_provider" | "connected" | "auth_error"; provider?: string; latencyMs?: number };
|
|
121
|
+
services: Array<{ name: string; state: "connected" | "unauthenticated" | "unavailable"; hint?: string }>;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
112
124
|
|
|
113
125
|
// Model
|
|
114
126
|
| {
|