@f5-sales-demo/xcsh 19.101.3 → 19.102.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": "@f5-sales-demo/xcsh",
|
|
4
|
-
"version": "19.
|
|
4
|
+
"version": "19.102.0",
|
|
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.
|
|
61
|
-
"@f5-sales-demo/pi-agent-core": "19.
|
|
62
|
-
"@f5-sales-demo/pi-ai": "19.
|
|
63
|
-
"@f5-sales-demo/pi-natives": "19.
|
|
64
|
-
"@f5-sales-demo/pi-resource-management": "19.
|
|
65
|
-
"@f5-sales-demo/pi-tui": "19.
|
|
66
|
-
"@f5-sales-demo/pi-utils": "19.
|
|
60
|
+
"@f5-sales-demo/xcsh-stats": "19.102.0",
|
|
61
|
+
"@f5-sales-demo/pi-agent-core": "19.102.0",
|
|
62
|
+
"@f5-sales-demo/pi-ai": "19.102.0",
|
|
63
|
+
"@f5-sales-demo/pi-natives": "19.102.0",
|
|
64
|
+
"@f5-sales-demo/pi-resource-management": "19.102.0",
|
|
65
|
+
"@f5-sales-demo/pi-tui": "19.102.0",
|
|
66
|
+
"@f5-sales-demo/pi-utils": "19.102.0",
|
|
67
67
|
"@sinclair/typebox": "^0.34",
|
|
68
68
|
"@xterm/headless": "^6.0",
|
|
69
69
|
"ajv": "^8.20",
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "19.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.102.0",
|
|
21
|
+
"commit": "04881cb7c4206c3d7f88c1dbcc47f98dd7872cbf",
|
|
22
|
+
"shortCommit": "04881cb",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.
|
|
25
|
-
"commitDate": "2026-07-
|
|
26
|
-
"buildDate": "2026-07-
|
|
24
|
+
"tag": "v19.102.0",
|
|
25
|
+
"commitDate": "2026-07-30T05:42:53Z",
|
|
26
|
+
"buildDate": "2026-07-30T06:12:50.423Z",
|
|
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.
|
|
31
|
+
"commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/04881cb7c4206c3d7f88c1dbcc47f98dd7872cbf",
|
|
32
|
+
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.102.0"
|
|
33
33
|
};
|
|
@@ -196,6 +196,8 @@ Configs you didn't validate become incidents. Assumptions you didn't test fail u
|
|
|
196
196
|
{{#list environment prefix="- " join="\n"}}{{label}}: {{value}}{{/list}}
|
|
197
197
|
</workstation>
|
|
198
198
|
|
|
199
|
+
%%WORKSPACE_BOUNDARY%%
|
|
200
|
+
|
|
199
201
|
{{#if context}}
|
|
200
202
|
## F5 XC Platform Context
|
|
201
203
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<workspace-boundary>
|
|
2
|
+
This session may be scoped to a single customer. Treat the working directory as the scope of the
|
|
3
|
+
work: what the task needs is inside it, and another customer's material is not yours to open here.
|
|
4
|
+
- You **MUST NOT** range across the filesystem hunting for files, examples, or precedent. Search
|
|
5
|
+
within the working directory. Your own skills and plugins, and paths the operator granted
|
|
6
|
+
explicitly (`--allow-path`, `sandbox.allowRead`), are legitimate — and are not licence to browse
|
|
7
|
+
anywhere else.
|
|
8
|
+
- Subdirectories may themselves be separate customers. Reachable does not mean in scope: work in
|
|
9
|
+
the one the task names, state the crossing when the task genuinely spans more than one, and
|
|
10
|
+
**MUST NOT** merge two customers' material into one artifact.
|
|
11
|
+
- A sandbox confines this session's file access, but its boundary is the working directory, not the
|
|
12
|
+
customer subdirectory: nothing refuses a sibling, so the rule above is yours to keep. When the
|
|
13
|
+
sandbox is active a path outside the working directory is refused — that is the boundary working,
|
|
14
|
+
not a tool failure. Say what you needed and why, and **MUST NOT** reach the same path another way.
|
|
15
|
+
</workspace-boundary>
|
package/src/system-prompt.ts
CHANGED
|
@@ -26,9 +26,11 @@ import { listXcshPluginSummaries, type XcshPluginSummary } from "./discovery/hel
|
|
|
26
26
|
import { isApplicableToContext, loadSkills, type Skill } from "./extensibility/skills";
|
|
27
27
|
import customSystemPromptTemplate from "./prompts/system/custom-system-prompt.md" with { type: "text" };
|
|
28
28
|
import systemPromptTemplate from "./prompts/system/system-prompt.md" with { type: "text" };
|
|
29
|
+
import workspaceBoundaryTemplate from "./prompts/system/workspace-boundary.md" with { type: "text" };
|
|
29
30
|
|
|
30
31
|
/** Sentinel in system-prompt.md replaced with the rendered deprecation guardrails. */
|
|
31
32
|
const DEPRECATION_GUARDRAILS_MARKER = "%%DEPRECATION_GUARDRAILS%%";
|
|
33
|
+
const WORKSPACE_BOUNDARY_MARKER = "%%WORKSPACE_BOUNDARY%%";
|
|
32
34
|
|
|
33
35
|
let _buildMeta: { version: string; repoSlug: string } | null = null;
|
|
34
36
|
|
|
@@ -816,6 +818,14 @@ export async function buildSystemPrompt(options: BuildSystemPromptOptions = {}):
|
|
|
816
818
|
};
|
|
817
819
|
let rendered = prompt.render(resolvedCustomPrompt ? customSystemPromptTemplate : systemPromptTemplate, data);
|
|
818
820
|
|
|
821
|
+
// The workspace boundary is always-on for the same reason: a custom system prompt
|
|
822
|
+
// swaps in a template with no Workspace section, and the confidentiality guidance
|
|
823
|
+
// must not be what disappears when an operator customises their prompt.
|
|
824
|
+
const workspaceBoundary = workspaceBoundaryTemplate.trimEnd();
|
|
825
|
+
rendered = rendered.includes(WORKSPACE_BOUNDARY_MARKER)
|
|
826
|
+
? rendered.replace(WORKSPACE_BOUNDARY_MARKER, workspaceBoundary)
|
|
827
|
+
: `${rendered}\n\n${workspaceBoundary}`;
|
|
828
|
+
|
|
819
829
|
// Deprecation guardrails are always-on: replace the section marker in the default
|
|
820
830
|
// template, or append when the active template has none (e.g. a fully custom system
|
|
821
831
|
// prompt), so the rules apply on every code path — not only when xcsh:// is consulted.
|