@chainingintention/pi-web-cn 1.202609.8 → 1.202609.9

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.
@@ -31,21 +31,7 @@ export function createManagedSandboxEnvironment(options) {
31
31
  }
32
32
  export function createBubblewrapPythonInvocation(options) {
33
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-try", path, path]),
34
+ ...bubblewrapBaseArgs(options.env, options.readOnlyPaths, options.network),
49
35
  "--bind",
50
36
  options.workspaceRoot,
51
37
  MANAGED_SANDBOX_WORKSPACE,
@@ -58,11 +44,14 @@ export function createBubblewrapPythonInvocation(options) {
58
44
  return { command: options.bubblewrapExecutable, args };
59
45
  }
60
46
  export function createBubblewrapShellInvocation(options) {
47
+ const hostFilesystem = options.hostFilesystem === true;
61
48
  const args = [
62
- ...bubblewrapBaseArgs(options.env, options.readOnlyPaths),
49
+ ...bubblewrapBaseArgs(options.env, hostFilesystem ? [] : options.readOnlyPaths, options.network),
50
+ ...(hostFilesystem ? ["--ro-bind-try", "/", "/"] : []),
63
51
  "--bind",
64
52
  options.workspaceRoot,
65
53
  MANAGED_SANDBOX_WORKSPACE,
54
+ ...(hostFilesystem ? ["--bind", options.workspaceRoot, options.workspaceRoot] : []),
66
55
  "--chdir",
67
56
  MANAGED_SANDBOX_WORKSPACE,
68
57
  options.shellExecutable,
@@ -71,9 +60,9 @@ export function createBubblewrapShellInvocation(options) {
71
60
  ];
72
61
  return { command: options.bubblewrapExecutable, args };
73
62
  }
74
- function bubblewrapBaseArgs(env, readOnlyPaths) {
63
+ function bubblewrapBaseArgs(env, readOnlyPaths, network = false) {
75
64
  return [
76
- "--unshare-net",
65
+ ...(network ? [] : ["--unshare-net"]),
77
66
  "--unshare-ipc",
78
67
  "--unshare-pid",
79
68
  "--die-with-parent",
@@ -1 +1 @@
1
- {"version":3,"file":"managementSandbox.js","sourceRoot":"","sources":["../../../src/server/sessions/managementSandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managementSandbox.js","sourceRoot":"","sources":["../../../src/server/sessions/managementSandbox.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ import { createLocalOnlyModelRuntime } from "./authService.js";
24
24
  import { canonicalizeStoredCwd, cwdPathsEqual } from "../workingDirectory.js";
25
25
  import { clearSessionFileParent, readSessionHeaderSummary } from "./sessionFileHeader.js";
26
26
  import { workbenchAccessHandle } from "../managementEmbed.js";
27
+ import { managementPrivilegeRequested, managementPrivileges } from "../managementPrivileges.js";
27
28
  import { DEFAULT_EXTENSION_DIALOGS_TIMEOUT_MS, piWebDataDir } from "../../config.js";
28
29
  import { createScopedSettingsManager, resolveSettingsScopeDirectory } from "./projectSettingsScope.js";
29
30
  import { createAskUserToolDefinition } from "./askUserTool.js";
@@ -34,8 +35,8 @@ import { createSpawnSessionToolDefinition } from "./spawnSessionTool.js";
34
35
  import { createSubsessionToolDefinitions } from "./spawnSubsessionTool.js";
35
36
  import { buildTranscriptView } from "./subsessionTranscript.js";
36
37
  import { planSessionCleanup, summarizeSessionCleanupExecution } from "./sessionCleanup.js";
37
- import { createManagedAgentToolOptions, createManagedPythonToolDefinition } from "./managementAgentTools.js";
38
- import { PI_PERMISSION_SYSTEM_POLICY_AGENT_DIR, managementAgentToolNames, withRuntimeCreationEnvironment, writeManagementPermissionSystemPolicy } from "./managementPermissionSystem.js";
38
+ import { createManagedAgentToolOptions, createManagedBashToolDefinition, createManagedPythonToolDefinition } from "./managementAgentTools.js";
39
+ import { PI_PERMISSION_SYSTEM_POLICY_AGENT_DIR, managementAgentToolNames, privilegedManagementToolNames, withRuntimeCreationEnvironment, writeManagementPermissionSystemPolicy } from "./managementPermissionSystem.js";
39
40
  import { SessionNotificationStore } from "./sessionNotificationStore.js";
40
41
  import { plainTextTheme } from "./plainTextTheme.js";
41
42
  import { deduplicateBundledRelaySkills, ensureManagedRelaySkills, MANAGED_RELAY_SKILL_NAMES } from "./relaySkill.js";
@@ -370,11 +371,11 @@ export function piWebResourceLoaderOptions(appendSystemPromptSections) {
370
371
  return undefined;
371
372
  return { appendSystemPromptOverride: (base) => [...base, ...appendSystemPromptSections] };
372
373
  }
373
- function createDefaultRuntimeFactory(normalModelRuntimeForCwd, managementModelRuntime, resolveSettingsScope, spawn, subsessions, askUser, workbench, logger = noopLogger, managementAudit, managementProjectIdForCwd, appendSystemPromptSections = []) {
374
+ function createDefaultRuntimeFactory(normalModelRuntimeForCwd, managementModelRuntime, resolveSettingsScope, spawn, subsessions, askUser, workbench, logger = noopLogger, managementAudit, managementProjectIdForCwd, appendSystemPromptSections = [], managementAllowPrivileged = false) {
374
375
  return async ({ cwd, agentDir, sessionManager, sessionStartEvent, managementContext, initialModel, initialThinkingLevel, delegationToolsEnabled = true }) => {
375
376
  const scopedModelRuntime = managementContext === undefined ? await normalModelRuntimeForCwd(cwd) : await managementModelRuntime();
376
377
  if (managementContext !== undefined) {
377
- return createManagementRuntimeFactory(scopedModelRuntime, resolveSettingsScope, spawn, subsessions, askUser, managementContext, workbench, logger, managementAudit, managementProjectIdForCwd)({
378
+ return createManagementRuntimeFactory(scopedModelRuntime, resolveSettingsScope, spawn, subsessions, askUser, managementContext, workbench, logger, managementAudit, managementProjectIdForCwd, managementAllowPrivileged)({
378
379
  cwd,
379
380
  agentDir,
380
381
  sessionManager,
@@ -421,7 +422,7 @@ function createDefaultRuntimeFactory(normalModelRuntimeForCwd, managementModelRu
421
422
  return { ...result, services, diagnostics: services.diagnostics };
422
423
  };
423
424
  }
424
- function createManagementRuntimeFactory(modelRuntime, resolveSettingsScope, spawn, subsessions, askUser, managementContext, workbench, logger, managementAudit, managementProjectIdForCwd) {
425
+ function createManagementRuntimeFactory(modelRuntime, resolveSettingsScope, spawn, subsessions, askUser, managementContext, workbench, logger, managementAudit, managementProjectIdForCwd, managementAllowPrivileged = false) {
425
426
  return async ({ cwd, agentDir, sessionManager, sessionStartEvent, initialModel, initialThinkingLevel, delegationToolsEnabled = true }) => {
426
427
  await ensureManagedRelaySkills(cwd);
427
428
  const auditIdentity = await resolveManagementAuditIdentity(cwd, managementContext, managementProjectIdForCwd, logger);
@@ -463,7 +464,16 @@ function createManagementRuntimeFactory(modelRuntime, resolveSettingsScope, spaw
463
464
  ...workbenchTools,
464
465
  ];
465
466
  const controlledManagementToolNames = controlledManagementTools.map((tool) => tool.name);
466
- const policyAgentDir = await writeManagementPermissionSystemPolicy(agentDir, cwd, managementContext, controlledManagementToolNames);
467
+ const privileges = managementPrivileges(managementContext, { allowPrivileged: managementAllowPrivileged });
468
+ if (!managementAllowPrivileged && managementPrivilegeRequested(managementContext)) {
469
+ logger.info({
470
+ userId: managementContext.user.id,
471
+ requestedBash: managementContext.privileged?.bash === true,
472
+ requestedNetwork: managementContext.privileged?.network === true,
473
+ }, "management privileged grant ignored because managementEmbed.allowPrivileged is disabled");
474
+ }
475
+ const extraToolNames = [...controlledManagementToolNames, ...privilegedManagementToolNames(privileges)];
476
+ const policyAgentDir = await writeManagementPermissionSystemPolicy(agentDir, cwd, managementContext, extraToolNames, privileges);
467
477
  return withRuntimeCreationEnvironment({ [PI_PERMISSION_SYSTEM_POLICY_AGENT_DIR]: policyAgentDir }, async () => {
468
478
  const settingsManager = await createScopedSettingsManager({
469
479
  cwd,
@@ -491,7 +501,8 @@ function createManagementRuntimeFactory(modelRuntime, resolveSettingsScope, spaw
491
501
  const managedToolOptions = createManagedAgentToolOptions(cwd);
492
502
  const customTools = [
493
503
  ...managedAgentToolDefinitions(cwd, managedToolOptions),
494
- createManagedPythonToolDefinition(cwd, managementContext),
504
+ createManagedPythonToolDefinition(cwd, managementContext, { network: privileges.network }),
505
+ ...(privileges.bash ? [createManagedBashToolDefinition(cwd, managementContext, { network: privileges.network })] : []),
495
506
  ...controlledManagementTools,
496
507
  ];
497
508
  const options = {
@@ -499,7 +510,7 @@ function createManagementRuntimeFactory(modelRuntime, resolveSettingsScope, spaw
499
510
  sessionManager,
500
511
  ...(sessionStartEvent === undefined ? {} : { sessionStartEvent }),
501
512
  customTools,
502
- tools: managementAgentToolNames(managementContext, controlledManagementToolNames),
513
+ tools: managementAgentToolNames(managementContext, extraToolNames, privileges),
503
514
  ...(modelOptions.model === undefined ? {} : { model: modelOptions.model }),
504
515
  ...(modelOptions.thinkingLevel === undefined ? {} : { thinkingLevel: modelOptions.thinkingLevel }),
505
516
  ...(modelOptions.scopedModels.length === 0 ? {} : { scopedModels: modelOptions.scopedModels }),
@@ -647,7 +658,7 @@ export class PiSessionService {
647
658
  list: (parentSessionId, parentSessionFile) => this.listSubsessions(parentSessionId, parentSessionFile),
648
659
  check: (parentSessionId, sessionId, parentSessionFile) => this.checkSubsession(parentSessionId, sessionId, parentSessionFile),
649
660
  read: (parentSessionId, sessionId, query, parentSessionFile) => this.readSubsession(parentSessionId, sessionId, query, parentSessionFile),
650
- }, deps.askUserEnabled === true ? { open: (input) => this.openAsk(input) } : undefined, deps.workbench, this.logger, this.managementAudit, this.managementProjectIdForCwd, deps.appendSystemPromptSections ?? []);
661
+ }, deps.askUserEnabled === true ? { open: (input) => this.openAsk(input) } : undefined, deps.workbench, this.logger, this.managementAudit, this.managementProjectIdForCwd, deps.appendSystemPromptSections ?? [], deps.managementAllowPrivileged === true);
651
662
  this.createAgentRuntime = deps.createAgentRuntime ?? defaultCreateAgentRuntime;
652
663
  this.workspaceActivity = deps.workspaceActivity;
653
664
  this.heartbeat = setInterval(() => { this.publishHeartbeats(); }, deps.heartbeatIntervalMs ?? 2000);