@chainingintention/pi-web-cn 1.202606.4 → 1.202606.6

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.
Files changed (60) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/{CodeViewer-BNKhIElN.js → CodeViewer-8znVN61S.js} +1 -1
  3. package/dist/client/assets/{TerminalPanel-VPiiPQfC.js → TerminalPanel-DrdWnF1y.js} +1 -1
  4. package/dist/client/assets/index-BiGrW6IC.js +2169 -0
  5. package/dist/client/index.html +1 -1
  6. package/dist/config.js +72 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/plugin-api.d.ts +17 -11
  9. package/dist/server/app.js +55 -17
  10. package/dist/server/app.js.map +1 -1
  11. package/dist/server/configRoutes.js +77 -0
  12. package/dist/server/configRoutes.js.map +1 -1
  13. package/dist/server/gitRoutes.js +16 -3
  14. package/dist/server/gitRoutes.js.map +1 -1
  15. package/dist/server/machines/machinePluginProxyRoutes.js +179 -0
  16. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -0
  17. package/dist/server/machines/machineProxyRoutes.js +1 -0
  18. package/dist/server/machines/machineProxyRoutes.js.map +1 -1
  19. package/dist/server/managementEmbed.js +205 -0
  20. package/dist/server/managementEmbed.js.map +1 -0
  21. package/dist/server/sessiond/sessionProxyRoutes.js +66 -8
  22. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  23. package/dist/server/sessions/managementPermissionSystem.js +94 -0
  24. package/dist/server/sessions/managementPermissionSystem.js.map +1 -0
  25. package/dist/server/sessions/managementSandbox.js +156 -0
  26. package/dist/server/sessions/managementSandbox.js.map +1 -0
  27. package/dist/server/sessions/piSessionService.js +339 -31
  28. package/dist/server/sessions/piSessionService.js.map +1 -1
  29. package/dist/server/sessions/sessionNameGenerator.js +2 -0
  30. package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
  31. package/dist/server/sessions/sessionRoutes.js +9 -4
  32. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  33. package/dist/server/terminalProxyRoutes.js +64 -8
  34. package/dist/server/terminalProxyRoutes.js.map +1 -1
  35. package/dist/server/terminals/terminalRoutes.js +23 -3
  36. package/dist/server/terminals/terminalRoutes.js.map +1 -1
  37. package/dist/server/terminals/terminalService.js +54 -4
  38. package/dist/server/terminals/terminalService.js.map +1 -1
  39. package/dist/server/workspaceExplorerRoutes.js +103 -4
  40. package/dist/server/workspaceExplorerRoutes.js.map +1 -1
  41. package/dist/server/workspaces/fileOperationService.js +95 -0
  42. package/dist/server/workspaces/fileOperationService.js.map +1 -0
  43. package/dist/server/workspaces/fileUploadService.js +23 -0
  44. package/dist/server/workspaces/fileUploadService.js.map +1 -0
  45. package/dist/server/workspaces/pathSafety.js +9 -2
  46. package/dist/server/workspaces/pathSafety.js.map +1 -1
  47. package/dist/server/workspaces/workspaceDeletionRoutes.js +127 -0
  48. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -0
  49. package/dist/sessiond/sessionDaemonClient.js +12 -12
  50. package/dist/sessiond/sessionDaemonClient.js.map +1 -1
  51. package/dist/shared/apiTypes.d.ts +30 -0
  52. package/dist/shared/federatedRoutes.js +9 -0
  53. package/dist/shared/federatedRoutes.js.map +1 -1
  54. package/dist/shared/machinePluginIds.js +41 -0
  55. package/dist/shared/machinePluginIds.js.map +1 -0
  56. package/dist/shared/workspaceDeletion.js +12 -0
  57. package/dist/shared/workspaceDeletion.js.map +1 -0
  58. package/docs/plugins.md +88 -12
  59. package/package.json +1 -1
  60. package/dist/client/assets/index-Csx3hC75.js +0 -1994
@@ -0,0 +1,94 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ export const PI_PERMISSION_SYSTEM_POLICY_AGENT_DIR = "PI_PERMISSION_SYSTEM_POLICY_AGENT_DIR";
5
+ const MANAGEMENT_AGENT_TOOL_NAMES = ["read", "write", "edit", "ls", "grep", "find", "python"];
6
+ export function createManagementPermissionSystemPolicy(context) {
7
+ const tools = {
8
+ "*": "deny",
9
+ };
10
+ for (const tool of managementAgentToolNames(context))
11
+ tools[tool] = "allow";
12
+ for (const tool of managementDeniedToolNames(context))
13
+ tools[tool] = "deny";
14
+ return {
15
+ defaultPolicy: {
16
+ tools: "deny",
17
+ bash: "deny",
18
+ mcp: "deny",
19
+ skills: "deny",
20
+ special: "deny",
21
+ },
22
+ tools,
23
+ bash: { "*": "deny" },
24
+ mcp: { "*": "deny" },
25
+ skills: { "*": "deny" },
26
+ special: {
27
+ doom_loop: "deny",
28
+ external_directory: "deny",
29
+ },
30
+ };
31
+ }
32
+ export function managementAgentToolNames(context) {
33
+ const deny = new Set([...(context.tools?.deny ?? []), "bash", "shell", "terminal"]);
34
+ const allow = context.tools?.allow;
35
+ const safeTools = MANAGEMENT_AGENT_TOOL_NAMES.filter((tool) => !deny.has(tool));
36
+ if (allow === undefined || allow.length === 0)
37
+ return [...safeTools];
38
+ return safeTools.filter((tool) => allow.includes(tool));
39
+ }
40
+ export async function writeManagementPermissionSystemPolicy(agentDir, cwd, context) {
41
+ const policyAgentDir = join(agentDir, "management-embed", "permission-system", safePathSegment(context.user.rootUserId), createHash("sha256").update(cwd).digest("hex").slice(0, 16));
42
+ await mkdir(policyAgentDir, { recursive: true });
43
+ await writeFile(join(policyAgentDir, "pi-permissions.jsonc"), `${JSON.stringify(createManagementPermissionSystemPolicy(context), null, 2)}\n`, "utf8");
44
+ return policyAgentDir;
45
+ }
46
+ let runtimeEnvironmentQueue = Promise.resolve();
47
+ export async function withRuntimeCreationEnvironment(env, action) {
48
+ const previousQueue = runtimeEnvironmentQueue;
49
+ let releaseQueue = () => undefined;
50
+ runtimeEnvironmentQueue = new Promise((resolve) => {
51
+ releaseQueue = resolve;
52
+ });
53
+ await previousQueue;
54
+ const previousValues = new Map();
55
+ for (const [key, value] of Object.entries(env)) {
56
+ previousValues.set(key, process.env[key]);
57
+ if (value === undefined)
58
+ Reflect.deleteProperty(process.env, key);
59
+ else
60
+ process.env[key] = value;
61
+ }
62
+ try {
63
+ return await action();
64
+ }
65
+ finally {
66
+ for (const [key, value] of previousValues) {
67
+ if (value === undefined)
68
+ Reflect.deleteProperty(process.env, key);
69
+ else
70
+ process.env[key] = value;
71
+ }
72
+ releaseQueue();
73
+ }
74
+ }
75
+ function managementDeniedToolNames(context) {
76
+ return [
77
+ "bash",
78
+ "shell",
79
+ "terminal",
80
+ "terminal-command-runs",
81
+ "powershell",
82
+ "pwsh",
83
+ "mcp",
84
+ "http",
85
+ "webfetch",
86
+ "websearch",
87
+ ...(context.tools?.deny ?? []),
88
+ ];
89
+ }
90
+ function safePathSegment(value) {
91
+ const safe = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
92
+ return safe === "" ? "user" : safe.slice(0, 80);
93
+ }
94
+ //# sourceMappingURL=managementPermissionSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managementPermissionSystem.js","sourceRoot":"","sources":["../../../src/server/sessions/managementPermissionSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ const DEFAULT_PATH = "/usr/local/bin:/usr/bin:/bin";
2
+ const SAFE_HOST_ENV_KEYS = ["PATH", "LANG", "LC_ALL", "LC_CTYPE"];
3
+ const SENSITIVE_ENV_PATTERNS = ["TOKEN", "SECRET", "PASSWORD", "PRIVATE_KEY", "API_KEY"];
4
+ const SANDBOX_WORKSPACE = "/workspace";
5
+ const SANDBOX_HOME = "/tmp/pi-web-home";
6
+ export const DEFAULT_BUBBLEWRAP_PATHS = [
7
+ "/usr",
8
+ "/bin",
9
+ "/lib",
10
+ "/lib64",
11
+ "/etc/alternatives",
12
+ "/etc/ld.so.cache",
13
+ "/etc/ssl",
14
+ "/etc/ca-certificates",
15
+ ];
16
+ export function createManagedSandboxEnvironment(options) {
17
+ const env = {};
18
+ for (const key of SAFE_HOST_ENV_KEYS) {
19
+ const value = options.hostEnv[key];
20
+ if (value !== undefined && value !== "")
21
+ env[key] = value;
22
+ }
23
+ env["PATH"] ??= DEFAULT_PATH;
24
+ for (const [key, value] of Object.entries(options.context.sandbox?.env ?? {})) {
25
+ assertNonSensitiveSandboxEnvKey(key);
26
+ env[key] = value;
27
+ }
28
+ env["HOME"] = SANDBOX_HOME;
29
+ env["TMPDIR"] = "/tmp";
30
+ return env;
31
+ }
32
+ export function createBubblewrapPythonInvocation(options) {
33
+ const args = [
34
+ "--unshare-net",
35
+ "--unshare-ipc",
36
+ "--unshare-pid",
37
+ "--die-with-parent",
38
+ "--clearenv",
39
+ ...Object.entries(options.env ?? {}).flatMap(([key, value]) => ["--setenv", key, value ?? ""]),
40
+ "--tmpfs",
41
+ "/tmp",
42
+ "--dir",
43
+ SANDBOX_HOME,
44
+ "--proc",
45
+ "/proc",
46
+ "--dev",
47
+ "/dev",
48
+ ...[...new Set(options.readOnlyPaths ?? DEFAULT_BUBBLEWRAP_PATHS)].flatMap((path) => ["--ro-bind", path, path]),
49
+ "--bind",
50
+ options.workspaceRoot,
51
+ SANDBOX_WORKSPACE,
52
+ "--chdir",
53
+ SANDBOX_WORKSPACE,
54
+ options.pythonExecutable,
55
+ "-I",
56
+ "-",
57
+ ];
58
+ return { command: options.bubblewrapExecutable, args };
59
+ }
60
+ export function bubblewrapUnavailableReason(output) {
61
+ if (output.includes("setting up uid map: Permission denied"))
62
+ return "setting up uid map: Permission denied";
63
+ if (output.includes("Failed RTM_NEWADDR: Operation not permitted"))
64
+ return "Failed RTM_NEWADDR: Operation not permitted";
65
+ if (output.includes("No permissions to creating new namespace"))
66
+ return "No permissions to creating new namespace";
67
+ if (output.includes("Creating new namespace failed"))
68
+ return "Creating new namespace failed";
69
+ return undefined;
70
+ }
71
+ export function createManagedPythonFallbackPrelude(root) {
72
+ return `
73
+ import builtins
74
+ import io
75
+ import os
76
+ import pathlib
77
+ import subprocess
78
+
79
+ _PI_WEB_ROOT = ${JSON.stringify(root)}
80
+ _PI_WEB_OPEN = builtins.open
81
+ _PI_WEB_IO_OPEN = io.open
82
+ _PI_WEB_PATH_OPEN = pathlib.Path.open
83
+ _PI_WEB_PATH_READ_TEXT = pathlib.Path.read_text
84
+ _PI_WEB_PATH_READ_BYTES = pathlib.Path.read_bytes
85
+ _PI_WEB_PATH_WRITE_TEXT = pathlib.Path.write_text
86
+ _PI_WEB_PATH_WRITE_BYTES = pathlib.Path.write_bytes
87
+
88
+ def _pi_web_inside(path):
89
+ real = os.path.realpath(os.fspath(path))
90
+ rel = os.path.relpath(real, _PI_WEB_ROOT)
91
+ return rel == "." or (not rel.startswith("..") and not os.path.isabs(rel))
92
+
93
+ def _pi_web_check_path(path):
94
+ if not isinstance(path, (str, bytes, os.PathLike)):
95
+ return
96
+ if not _pi_web_inside(path):
97
+ raise PermissionError("path outside the managed project sandbox: %s" % path)
98
+
99
+ def open(file, mode="r", *args, **kwargs):
100
+ _pi_web_check_path(file)
101
+ return _PI_WEB_OPEN(file, mode, *args, **kwargs)
102
+
103
+ def _pi_web_path_open(self, *args, **kwargs):
104
+ _pi_web_check_path(self)
105
+ return _PI_WEB_PATH_OPEN(self, *args, **kwargs)
106
+
107
+ def _pi_web_path_read_text(self, *args, **kwargs):
108
+ _pi_web_check_path(self)
109
+ return _PI_WEB_PATH_READ_TEXT(self, *args, **kwargs)
110
+
111
+ def _pi_web_path_read_bytes(self, *args, **kwargs):
112
+ _pi_web_check_path(self)
113
+ return _PI_WEB_PATH_READ_BYTES(self, *args, **kwargs)
114
+
115
+ def _pi_web_path_write_text(self, *args, **kwargs):
116
+ _pi_web_check_path(self)
117
+ return _PI_WEB_PATH_WRITE_TEXT(self, *args, **kwargs)
118
+
119
+ def _pi_web_path_write_bytes(self, *args, **kwargs):
120
+ _pi_web_check_path(self)
121
+ return _PI_WEB_PATH_WRITE_BYTES(self, *args, **kwargs)
122
+
123
+ def _pi_web_blocked_os_path(path, *args, **kwargs):
124
+ _pi_web_check_path(path)
125
+ raise PermissionError("low-level os path APIs are disabled in managed Python fallback mode")
126
+
127
+ def _pi_web_blocked_process(*args, **kwargs):
128
+ raise PermissionError("subprocess and shell execution are disabled in managed Python fallback mode")
129
+
130
+ builtins.open = open
131
+ io.open = open
132
+ pathlib.Path.open = _pi_web_path_open
133
+ pathlib.Path.read_text = _pi_web_path_read_text
134
+ pathlib.Path.read_bytes = _pi_web_path_read_bytes
135
+ pathlib.Path.write_text = _pi_web_path_write_text
136
+ pathlib.Path.write_bytes = _pi_web_path_write_bytes
137
+ os.open = _pi_web_blocked_os_path
138
+ os.listdir = _pi_web_blocked_os_path
139
+ os.scandir = _pi_web_blocked_os_path
140
+ os.stat = _pi_web_blocked_os_path
141
+ os.lstat = _pi_web_blocked_os_path
142
+ subprocess.Popen = _pi_web_blocked_process
143
+ subprocess.run = _pi_web_blocked_process
144
+ subprocess.call = _pi_web_blocked_process
145
+ subprocess.check_call = _pi_web_blocked_process
146
+ subprocess.check_output = _pi_web_blocked_process
147
+ os.system = _pi_web_blocked_process
148
+ `;
149
+ }
150
+ function assertNonSensitiveSandboxEnvKey(key) {
151
+ const upper = key.toUpperCase();
152
+ if (SENSITIVE_ENV_PATTERNS.some((pattern) => upper.includes(pattern))) {
153
+ throw new Error(`Sensitive sandbox environment variable is not allowed: ${key}`);
154
+ }
155
+ }
156
+ //# sourceMappingURL=managementSandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managementSandbox.js","sourceRoot":"","sources":["../../../src/server/sessions/managementSandbox.ts"],"names":[],"mappings":"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"}