@lemoncat7/dsh-partner 1.4.0 → 1.4.2
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/README.md +1 -0
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +6 -4
- package/lib/agent-runtime.js.map +1 -1
- package/lib/autonomy.d.ts.map +1 -1
- package/lib/autonomy.js +2 -1
- package/lib/autonomy.js.map +1 -1
- package/lib/client.js +64 -29
- package/lib/client.js.map +2 -2
- package/lib/glass-surface.d.ts.map +1 -1
- package/lib/glass-surface.js +30 -14
- package/lib/glass-surface.js.map +1 -1
- package/lib/heartbeat-command.d.ts +15 -0
- package/lib/heartbeat-command.d.ts.map +1 -0
- package/lib/heartbeat-command.js +211 -0
- package/lib/heartbeat-command.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glass-surface.d.ts","sourceRoot":"","sources":["../src/glass-surface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAEd,KAAK,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEjF,UAAU,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAC7F,EAAE,EAAE,YAAY,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AA8CD,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EAAE,OAAO,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAiB,EACjB,UAAe,EACf,IAAS,EACT,eAAqB,EACrB,WAAmB,EACnB,OAAa,EACb,UAAiB,EACjB,GAAG,YAAY,EAChB,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"glass-surface.d.ts","sourceRoot":"","sources":["../src/glass-surface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAEd,KAAK,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEjF,UAAU,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAC7F,EAAE,EAAE,YAAY,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AA8CD,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EAAE,OAAO,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAiB,EACjB,UAAe,EACf,IAAS,EACT,eAAqB,EACrB,WAAmB,EACnB,OAAa,EACb,UAAiB,EACjB,GAAG,YAAY,EAChB,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAqIjC"}
|
package/lib/glass-surface.js
CHANGED
|
@@ -39,22 +39,30 @@ export function GlassSurface({ as: Element, children, className, borderRadius, b
|
|
|
39
39
|
const greenRef = useRef(null);
|
|
40
40
|
const blueRef = useRef(null);
|
|
41
41
|
const glareFrameRef = useRef(0);
|
|
42
|
-
const
|
|
42
|
+
const glarePointerRef = useRef();
|
|
43
43
|
const [svgSupported, setSvgSupported] = useState(false);
|
|
44
44
|
useEffect(() => {
|
|
45
45
|
setSvgSupported(supportsSvgBackdropFilter(filterId));
|
|
46
46
|
}, [filterId]);
|
|
47
47
|
useEffect(() => {
|
|
48
|
+
if (!svgSupported)
|
|
49
|
+
return;
|
|
48
50
|
const element = containerRef.current;
|
|
49
51
|
const image = imageRef.current;
|
|
50
52
|
if (element === null || image === null)
|
|
51
53
|
return;
|
|
52
54
|
let frame = 0;
|
|
55
|
+
let previousWidth = 0;
|
|
56
|
+
let previousHeight = 0;
|
|
53
57
|
const update = () => {
|
|
54
58
|
frame = 0;
|
|
55
59
|
const rect = element.getBoundingClientRect();
|
|
56
60
|
const width = Math.max(1, Math.round(rect.width));
|
|
57
61
|
const height = Math.max(1, Math.round(rect.height));
|
|
62
|
+
if (width === previousWidth && height === previousHeight)
|
|
63
|
+
return;
|
|
64
|
+
previousWidth = width;
|
|
65
|
+
previousHeight = height;
|
|
58
66
|
image.setAttribute('href', displacementMap(width, height, Math.min(borderRadius, Math.min(width, height) / 2), borderWidth, brightness, opacity, blur, redGradientId, blueGradientId));
|
|
59
67
|
};
|
|
60
68
|
const schedule = () => {
|
|
@@ -69,12 +77,14 @@ export function GlassSurface({ as: Element, children, className, borderRadius, b
|
|
|
69
77
|
cancelAnimationFrame(frame);
|
|
70
78
|
observer?.disconnect();
|
|
71
79
|
};
|
|
72
|
-
}, [blueGradientId, blur, borderRadius, borderWidth, brightness, opacity, redGradientId]);
|
|
80
|
+
}, [blueGradientId, blur, borderRadius, borderWidth, brightness, opacity, redGradientId, svgSupported]);
|
|
73
81
|
useEffect(() => {
|
|
82
|
+
if (!svgSupported)
|
|
83
|
+
return;
|
|
74
84
|
const channels = [redRef.current, greenRef.current, blueRef.current];
|
|
75
85
|
const offsets = [0, 5, 10];
|
|
76
86
|
channels.forEach((channel, index) => channel?.setAttribute('scale', String(distortionScale + (offsets[index] ?? 0))));
|
|
77
|
-
}, [distortionScale]);
|
|
87
|
+
}, [distortionScale, svgSupported]);
|
|
78
88
|
useEffect(() => () => {
|
|
79
89
|
if (glareFrameRef.current !== 0)
|
|
80
90
|
cancelAnimationFrame(glareFrameRef.current);
|
|
@@ -84,28 +94,34 @@ export function GlassSurface({ as: Element, children, className, borderRadius, b
|
|
|
84
94
|
const element = containerRef.current;
|
|
85
95
|
if (element === null)
|
|
86
96
|
return;
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
const pointer = glarePointerRef.current;
|
|
98
|
+
if (pointer === undefined) {
|
|
99
|
+
element.style.setProperty('--partner-glare-x', '50%');
|
|
100
|
+
element.style.setProperty('--partner-glare-y', '50%');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const rect = element.getBoundingClientRect();
|
|
104
|
+
if (rect.width === 0 || rect.height === 0)
|
|
105
|
+
return;
|
|
106
|
+
const x = Math.max(0, Math.min(100, (pointer.clientX - rect.left) / rect.width * 100));
|
|
107
|
+
const y = Math.max(0, Math.min(100, (pointer.clientY - rect.top) / rect.height * 100));
|
|
108
|
+
element.style.setProperty('--partner-glare-x', `${x}%`);
|
|
109
|
+
element.style.setProperty('--partner-glare-y', `${y}%`);
|
|
89
110
|
};
|
|
90
111
|
const scheduleGlare = () => {
|
|
91
112
|
if (glareFrameRef.current === 0)
|
|
92
113
|
glareFrameRef.current = requestAnimationFrame(renderGlare);
|
|
93
114
|
};
|
|
94
115
|
const moveGlare = (clientX, clientY) => {
|
|
95
|
-
|
|
96
|
-
if (!interactive || element === null)
|
|
116
|
+
if (!interactive)
|
|
97
117
|
return;
|
|
98
|
-
|
|
99
|
-
glarePositionRef.current = {
|
|
100
|
-
x: Math.max(0, Math.min(100, (clientX - rect.left) / rect.width * 100)),
|
|
101
|
-
y: Math.max(0, Math.min(100, (clientY - rect.top) / rect.height * 100)),
|
|
102
|
-
};
|
|
118
|
+
glarePointerRef.current = { clientX, clientY };
|
|
103
119
|
scheduleGlare();
|
|
104
120
|
};
|
|
105
121
|
const resetGlare = () => {
|
|
106
122
|
if (!interactive)
|
|
107
123
|
return;
|
|
108
|
-
|
|
124
|
+
glarePointerRef.current = undefined;
|
|
109
125
|
scheduleGlare();
|
|
110
126
|
};
|
|
111
127
|
const style = {
|
|
@@ -114,6 +130,6 @@ export function GlassSurface({ as: Element, children, className, borderRadius, b
|
|
|
114
130
|
'--partner-glare-x': '50%',
|
|
115
131
|
'--partner-glare-y': '50%',
|
|
116
132
|
};
|
|
117
|
-
return _jsxs(Element, { ...elementProps, ref: containerRef, className: `dsh-partner-glass-surface ${svgSupported ? 'is-svg' : 'is-fallback'}${interactive ? ' is-interactive' : ''} ${className}`, style: style, onPointerMove: interactive ? event => moveGlare(event.clientX, event.clientY) : undefined, onPointerLeave: interactive ? resetGlare : undefined, children: [_jsx("svg", { className: "dsh-partner-glass-filter", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", focusable: "false", children: _jsx("defs", { children: _jsxs("filter", { id: filterId, colorInterpolationFilters: "sRGB", x: "0%", y: "0%", width: "100%", height: "100%", children: [_jsx("feImage", { ref: imageRef, x: "0", y: "0", width: "100%", height: "100%", preserveAspectRatio: "none", result: "map" }), _jsx("feDisplacementMap", { ref: redRef, in: "SourceGraphic", in2: "map", result: "displaced-red" }), _jsx("feColorMatrix", { in: "displaced-red", type: "matrix", values: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0", result: "red" }), _jsx("feDisplacementMap", { ref: greenRef, in: "SourceGraphic", in2: "map", result: "displaced-green" }), _jsx("feColorMatrix", { in: "displaced-green", type: "matrix", values: "0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0", result: "green" }), _jsx("feDisplacementMap", { ref: blueRef, in: "SourceGraphic", in2: "map", result: "displaced-blue" }), _jsx("feColorMatrix", { in: "displaced-blue", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0", result: "blue" }), _jsx("feBlend", { in: "red", in2: "green", mode: "screen", result: "red-green" }), _jsx("feBlend", { in: "red-green", in2: "blue", mode: "screen", result: "output" }), _jsx("feGaussianBlur", { in: "output", stdDeviation: ".45" })] }) }) }), children] });
|
|
133
|
+
return _jsxs(Element, { ...elementProps, ref: containerRef, className: `dsh-partner-glass-surface ${svgSupported ? 'is-svg' : 'is-fallback'}${interactive ? ' is-interactive' : ''} ${className}`, style: style, onPointerMove: interactive ? event => moveGlare(event.clientX, event.clientY) : undefined, onPointerLeave: interactive ? resetGlare : undefined, children: [svgSupported && _jsx("svg", { className: "dsh-partner-glass-filter", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", focusable: "false", children: _jsx("defs", { children: _jsxs("filter", { id: filterId, colorInterpolationFilters: "sRGB", x: "0%", y: "0%", width: "100%", height: "100%", children: [_jsx("feImage", { ref: imageRef, x: "0", y: "0", width: "100%", height: "100%", preserveAspectRatio: "none", result: "map" }), _jsx("feDisplacementMap", { ref: redRef, in: "SourceGraphic", in2: "map", result: "displaced-red" }), _jsx("feColorMatrix", { in: "displaced-red", type: "matrix", values: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0", result: "red" }), _jsx("feDisplacementMap", { ref: greenRef, in: "SourceGraphic", in2: "map", result: "displaced-green" }), _jsx("feColorMatrix", { in: "displaced-green", type: "matrix", values: "0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0", result: "green" }), _jsx("feDisplacementMap", { ref: blueRef, in: "SourceGraphic", in2: "map", result: "displaced-blue" }), _jsx("feColorMatrix", { in: "displaced-blue", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0", result: "blue" }), _jsx("feBlend", { in: "red", in2: "green", mode: "screen", result: "red-green" }), _jsx("feBlend", { in: "red-green", in2: "blue", mode: "screen", result: "output" }), _jsx("feGaussianBlur", { in: "output", stdDeviation: ".45" })] }) }) }), children] });
|
|
118
134
|
}
|
|
119
135
|
//# sourceMappingURL=glass-surface.js.map
|
package/lib/glass-surface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glass-surface.js","sourceRoot":"","sources":["../src/glass-surface.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"glass-surface.js","sourceRoot":"","sources":["../src/glass-surface.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ToolDefinition } from '@deepseek-ai/dsh-tools';
|
|
2
|
+
export declare const HEARTBEAT_LOCAL_COMMAND = "heartbeat_local_command";
|
|
3
|
+
export interface AuthorizedHeartbeatCommand {
|
|
4
|
+
file: string;
|
|
5
|
+
args: string[];
|
|
6
|
+
command: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* One heartbeat-only command surface. It never invokes a shell and accepts only
|
|
10
|
+
* exact read-only inspection forms, so a knowledge document cannot smuggle in
|
|
11
|
+
* operators, scripts, environment changes or arbitrary executables.
|
|
12
|
+
*/
|
|
13
|
+
export declare function heartbeatLocalCommandTool(cwd: string): ToolDefinition;
|
|
14
|
+
export declare function authorizeHeartbeatCommand(command: string): AuthorizedHeartbeatCommand;
|
|
15
|
+
//# sourceMappingURL=heartbeat-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat-command.d.ts","sourceRoot":"","sources":["../src/heartbeat-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,eAAO,MAAM,uBAAuB,4BAA4B,CAAA;AAOhE,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAoCrE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,0BAA0B,CAWrF"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
export const HEARTBEAT_LOCAL_COMMAND = 'heartbeat_local_command';
|
|
3
|
+
const COMMAND_TIMEOUT_MS = 8_000;
|
|
4
|
+
const COMMAND_MAX_BUFFER = 64 * 1024;
|
|
5
|
+
const COMMAND_MAX_LENGTH = 300;
|
|
6
|
+
const PACKAGE_NAME = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/i;
|
|
7
|
+
/**
|
|
8
|
+
* One heartbeat-only command surface. It never invokes a shell and accepts only
|
|
9
|
+
* exact read-only inspection forms, so a knowledge document cannot smuggle in
|
|
10
|
+
* operators, scripts, environment changes or arbitrary executables.
|
|
11
|
+
*/
|
|
12
|
+
export function heartbeatLocalCommandTool(cwd) {
|
|
13
|
+
return {
|
|
14
|
+
name: HEARTBEAT_LOCAL_COMMAND,
|
|
15
|
+
description: [
|
|
16
|
+
'Run one tightly controlled read-only local inspection command when a user-managed knowledge document explicitly requires that command as evidence.',
|
|
17
|
+
'Use this instead of guessing a local version from workspace files. The command runs without a shell, in the current partner workspace, with an 8 second timeout and bounded output.',
|
|
18
|
+
'Supported forms: dsh/node/npm/pnpm/yarn/python/python3/docker/podman/git version; npm or pnpm view/info <package> version|dist-tags.latest; npm list -g <package> --depth=0 --json; and a small set of read-only git status/describe/rev-parse/log commands.',
|
|
19
|
+
'Pipes, redirects, command substitution, scripts, arbitrary programs and unsupported arguments are rejected. If rejected or failed, report that the local fact was not verified; do not silently replace it with a file search.',
|
|
20
|
+
].join(' '),
|
|
21
|
+
parameters: {
|
|
22
|
+
type: 'object', additionalProperties: false,
|
|
23
|
+
properties: {
|
|
24
|
+
command: { type: 'string', description: 'Exact command from the knowledge procedure, without surrounding Markdown or sentence punctuation.' },
|
|
25
|
+
},
|
|
26
|
+
required: ['command'],
|
|
27
|
+
},
|
|
28
|
+
output: {
|
|
29
|
+
schema: { type: 'string' },
|
|
30
|
+
render: (_args, value) => [{ type: 'text', text: String(value) }],
|
|
31
|
+
},
|
|
32
|
+
presentCall: () => ({ card: 'generic', title: '核验本地状态' }),
|
|
33
|
+
timeoutMs: COMMAND_TIMEOUT_MS + 1_000,
|
|
34
|
+
isConcurrencySafe: () => true,
|
|
35
|
+
async execute(value, exec) {
|
|
36
|
+
const input = record(value);
|
|
37
|
+
if (typeof input.command !== 'string')
|
|
38
|
+
throw new Error('command must be a string');
|
|
39
|
+
const authorized = authorizeHeartbeatCommand(input.command);
|
|
40
|
+
const result = await runAuthorizedCommand(authorized, cwd, exec.signal);
|
|
41
|
+
return [
|
|
42
|
+
`Command: ${authorized.command}`,
|
|
43
|
+
`Exit code: ${result.exitCode}`,
|
|
44
|
+
result.stdout ? `stdout:\n${result.stdout}` : 'stdout: (empty)',
|
|
45
|
+
result.stderr ? `stderr:\n${result.stderr}` : '',
|
|
46
|
+
].filter(Boolean).join('\n');
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function authorizeHeartbeatCommand(command) {
|
|
51
|
+
const normalized = command.normalize('NFKC').trim();
|
|
52
|
+
if (!normalized || normalized.length > COMMAND_MAX_LENGTH)
|
|
53
|
+
throw new Error(`command must contain 1-${COMMAND_MAX_LENGTH} characters`);
|
|
54
|
+
if (/[\r\n\0]/u.test(normalized))
|
|
55
|
+
throw new Error('multiline commands are not allowed');
|
|
56
|
+
const tokens = tokenizeCommand(normalized);
|
|
57
|
+
if (tokens.length === 0 || tokens.length > 8)
|
|
58
|
+
throw new Error('command has an unsupported number of arguments');
|
|
59
|
+
const [file, ...args] = tokens;
|
|
60
|
+
if (allowedVersionCommand(file, args) || allowedRegistryCommand(file, args) || allowedGlobalPackageQuery(file, args) || allowedGitCommand(file, args)) {
|
|
61
|
+
return { file, args, command: tokens.map(quoteDisplayToken).join(' ') };
|
|
62
|
+
}
|
|
63
|
+
throw new Error(`command is not in the heartbeat read-only allowlist: ${file}`);
|
|
64
|
+
}
|
|
65
|
+
function allowedVersionCommand(file, args) {
|
|
66
|
+
const versionArgs = {
|
|
67
|
+
dsh: ['-V', '--version'],
|
|
68
|
+
node: ['-v', '--version'],
|
|
69
|
+
npm: ['-v', '--version'],
|
|
70
|
+
pnpm: ['-v', '--version'],
|
|
71
|
+
yarn: ['-v', '--version'],
|
|
72
|
+
python: ['-V', '--version'],
|
|
73
|
+
python3: ['-V', '--version'],
|
|
74
|
+
docker: ['-v', '--version'],
|
|
75
|
+
podman: ['-v', '--version'],
|
|
76
|
+
git: ['--version'],
|
|
77
|
+
};
|
|
78
|
+
return args.length === 1 && versionArgs[file]?.includes(args[0] ?? '') === true;
|
|
79
|
+
}
|
|
80
|
+
function allowedRegistryCommand(file, args) {
|
|
81
|
+
if (file !== 'npm' && file !== 'pnpm')
|
|
82
|
+
return false;
|
|
83
|
+
if (args.length !== 3 || (args[0] !== 'view' && args[0] !== 'info'))
|
|
84
|
+
return false;
|
|
85
|
+
return PACKAGE_NAME.test(args[1] ?? '') && (args[2] === 'version' || args[2] === 'dist-tags.latest');
|
|
86
|
+
}
|
|
87
|
+
function allowedGlobalPackageQuery(file, args) {
|
|
88
|
+
if (file !== 'npm' || args.length !== 5)
|
|
89
|
+
return false;
|
|
90
|
+
return args[0] === 'list' && args[1] === '-g' && PACKAGE_NAME.test(args[2] ?? '') && args[3] === '--depth=0' && args[4] === '--json';
|
|
91
|
+
}
|
|
92
|
+
function allowedGitCommand(file, args) {
|
|
93
|
+
if (file !== 'git')
|
|
94
|
+
return false;
|
|
95
|
+
const joined = args.join('\0');
|
|
96
|
+
return new Set([
|
|
97
|
+
'status\0--short\0--branch',
|
|
98
|
+
'describe\0--tags\0--always',
|
|
99
|
+
'describe\0--tags\0--always\0--dirty',
|
|
100
|
+
'rev-parse\0HEAD',
|
|
101
|
+
'rev-parse\0--short\0HEAD',
|
|
102
|
+
'branch\0--show-current',
|
|
103
|
+
'log\0-1\0--format=%H',
|
|
104
|
+
'log\0-1\0--format=%h',
|
|
105
|
+
]).has(joined);
|
|
106
|
+
}
|
|
107
|
+
function tokenizeCommand(value) {
|
|
108
|
+
const tokens = [];
|
|
109
|
+
let current = '';
|
|
110
|
+
let quote;
|
|
111
|
+
let escaping = false;
|
|
112
|
+
let started = false;
|
|
113
|
+
for (const character of value) {
|
|
114
|
+
if (escaping) {
|
|
115
|
+
current += character;
|
|
116
|
+
escaping = false;
|
|
117
|
+
started = true;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (character === '\\' && quote !== "'") {
|
|
121
|
+
escaping = true;
|
|
122
|
+
started = true;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (quote !== undefined) {
|
|
126
|
+
if (character === quote)
|
|
127
|
+
quote = undefined;
|
|
128
|
+
else
|
|
129
|
+
current += character;
|
|
130
|
+
started = true;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (character === "'" || character === '"') {
|
|
134
|
+
quote = character;
|
|
135
|
+
started = true;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (/\s/u.test(character)) {
|
|
139
|
+
if (started) {
|
|
140
|
+
tokens.push(current);
|
|
141
|
+
current = '';
|
|
142
|
+
started = false;
|
|
143
|
+
}
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if ('|&;<>`$(){}'.includes(character))
|
|
147
|
+
throw new Error(`shell metacharacter is not allowed: ${character}`);
|
|
148
|
+
current += character;
|
|
149
|
+
started = true;
|
|
150
|
+
}
|
|
151
|
+
if (quote !== undefined || escaping)
|
|
152
|
+
throw new Error('command contains an unfinished quote or escape');
|
|
153
|
+
if (started)
|
|
154
|
+
tokens.push(current);
|
|
155
|
+
return tokens;
|
|
156
|
+
}
|
|
157
|
+
function runAuthorizedCommand(command, cwd, signal) {
|
|
158
|
+
return new Promise((resolve, reject) => {
|
|
159
|
+
execFile(command.file, command.args, {
|
|
160
|
+
cwd,
|
|
161
|
+
signal,
|
|
162
|
+
timeout: COMMAND_TIMEOUT_MS,
|
|
163
|
+
maxBuffer: COMMAND_MAX_BUFFER,
|
|
164
|
+
windowsHide: true,
|
|
165
|
+
encoding: 'utf8',
|
|
166
|
+
env: commandEnvironment(),
|
|
167
|
+
}, (error, stdout, stderr) => {
|
|
168
|
+
const output = { stdout: cleanOutput(stdout), stderr: cleanOutput(stderr), exitCode: exitCode(error) };
|
|
169
|
+
if (error !== null) {
|
|
170
|
+
const detail = output.stderr || output.stdout || error.message;
|
|
171
|
+
reject(new Error(`read-only command failed (exit ${output.exitCode}): ${detail}`));
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
resolve(output);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function commandEnvironment() {
|
|
179
|
+
const inherited = [
|
|
180
|
+
'PATH', 'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY', 'NO_PROXY',
|
|
181
|
+
'http_proxy', 'https_proxy', 'all_proxy', 'no_proxy', 'npm_config_registry',
|
|
182
|
+
];
|
|
183
|
+
const env = {};
|
|
184
|
+
for (const name of inherited)
|
|
185
|
+
if (process.env[name] !== undefined)
|
|
186
|
+
env[name] = process.env[name];
|
|
187
|
+
return {
|
|
188
|
+
...env,
|
|
189
|
+
CI: '1', NO_COLOR: '1', PAGER: 'cat', GIT_PAGER: 'cat', GIT_TERMINAL_PROMPT: '0',
|
|
190
|
+
NPM_CONFIG_AUDIT: 'false', NPM_CONFIG_FUND: 'false', NPM_CONFIG_UPDATE_NOTIFIER: 'false', NPM_CONFIG_COLOR: 'false',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function cleanOutput(value) {
|
|
194
|
+
const cleaned = value.replace(/\x1B\[[0-?]*[ -/]*[@-~]/gu, '').trim();
|
|
195
|
+
return cleaned.length <= 16_000 ? cleaned : `${cleaned.slice(0, 15_999)}…`;
|
|
196
|
+
}
|
|
197
|
+
function exitCode(error) {
|
|
198
|
+
if (error === null)
|
|
199
|
+
return 0;
|
|
200
|
+
const code = error.code;
|
|
201
|
+
return typeof code === 'number' ? code : code === 'ETIMEDOUT' ? 124 : 1;
|
|
202
|
+
}
|
|
203
|
+
function quoteDisplayToken(value) {
|
|
204
|
+
return /^[a-zA-Z0-9@%_./:=+-]+$/u.test(value) ? value : JSON.stringify(value);
|
|
205
|
+
}
|
|
206
|
+
function record(value) {
|
|
207
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
208
|
+
throw new Error('arguments must be an object');
|
|
209
|
+
return value;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=heartbeat-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat-command.js","sourceRoot":"","sources":["../src/heartbeat-command.ts"],"names":[],"mappings":"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"}
|