@aalis/plugin-code-sandbox-os 0.7.0 → 0.9.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAmB,KAAK,cAAc,EAAkB,MAAM,oBAAoB,CAAC;;;;;;;;AA2F1F,wBAwBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAmB,KAAK,cAAc,EAAkB,MAAM,oBAAoB,CAAC;;;;;;;;AAyF1F,wBAwBG"}
package/dist/index.js CHANGED
@@ -2,16 +2,18 @@
2
2
  // @aalis/plugin-code-sandbox-os — code-sandbox 的 OS 原生实现
3
3
  //
4
4
  // Linux bubblewrap / macOS sandbox-exec。把不可信代码包成沙箱启动器命令后,
5
- // **经现有 `process` 服务** spawn(不碰 process-api / process-local 的实现,
5
+ // **经现有 `process` 服务** spawn(不碰 api-process / process-local 的实现,
6
6
  // 也不直接 import node:child_process / node:fs——OS 探测靠经 process 服务功能性试跑)。
7
7
  // ============================================================
8
8
  import { codeSandbox } from '@aalis/api-code-sandbox';
9
9
  import { doctor } from '@aalis/api-doctor';
10
10
  import { processService } from '@aalis/api-process';
11
11
  import { definePlugin, lifecycle, logger, optional, provide } from '@aalis/core';
12
+ import { textOf, toSource } from '@aalis/schema-i18n';
12
13
  import { wrapForSandbox } from './sandbox.js';
14
+ import { t } from './texts.js';
13
15
  /**
14
- * 各平台的最小沙箱命令:跑通即有该后端,跑不通时按 fix 修。Linux 与正式运行(sandbox.ts 的 buildBwrapArgs)一样挂 /dev 与 /proc:
16
+ * 各平台的最小沙箱命令:运行成功即有该后端,运行失败时按 fix 修。Linux 与正式运行(sandbox.ts 的 buildBwrapArgs)一样挂 /dev 与 /proc:
15
17
  * 只放开 seccomp、挂不了 /proc 的容器里,不挂的探测会报 bwrap 可用,之后每次运行都失败
16
18
  */
17
19
  const PROBES = {
@@ -19,32 +21,28 @@ const PROBES = {
19
21
  backend: 'seatbelt',
20
22
  cmd: 'sandbox-exec',
21
23
  args: ['-p', '(version 1) (allow default)', 'true'],
22
- fix: 'sandbox-exec 是 macOS 自带的,确认 /usr/bin/sandbox-exec 能执行后重载本插件',
24
+ fix: t('fixSeatbelt'),
23
25
  },
24
26
  linux: {
25
27
  backend: 'bwrap',
26
28
  cmd: 'bwrap',
27
29
  args: ['--ro-bind', '/', '/', '--dev', '/dev', '--proc', '/proc', '--unshare-all', 'true'],
28
- fix: '装上 bubblewrap(bwrap),并开启非特权用户命名空间(unprivileged user namespaces);在容器里运行时还要能挂 /proc。改好后重载本插件',
30
+ fix: t('fixBwrap'),
29
31
  },
30
32
  };
31
33
  /** 没有后端时的结论:code_runner 的 auto 模式在没有沙箱时拒绝执行(fail-closed) */
32
- const NONE = '没有可用的 OS 沙箱,code_runner 的 auto 模式会拒绝执行代码';
34
+ const NONE = t('none');
33
35
  /**
34
- * 功能性探测:经 process 服务真正跑一次最小沙箱命令,退出码为 0 才算有后端。
36
+ * 功能性探测:经 process 服务真正执行一次最小沙箱命令,退出码为 0 才算有后端。
35
37
  * 比「命令是否存在」更强——一次覆盖 存在性 + Linux unprivileged userns 是否真能用。
36
- * 没有后端时 problem 写怎么修与原因(日志与诊断共用)。
37
- * 停用、停机时随 signal 中止并抛出(不落成「无后端」),启动器挂住也不拖满停机宽限。
38
+ * 没有后端时 problem 写怎么修与原因(日志取原文,诊断交文字对象)。
39
+ * 停用、停机时随 signal 中止并抛出(不落成「无后端」),启动器阻塞时也不拖满停机宽限。
38
40
  */
39
41
  async function probeBackend(proc, signal) {
40
42
  const platform = process.platform;
41
43
  const probe = PROBES[platform];
42
- if (!probe) {
43
- return {
44
- backend: 'none',
45
- problem: `这个平台(${platform})没有 OS 沙箱后端:要用沙箱就在 macOS、Linux 或 WSL 上运行 Aalis`,
46
- };
47
- }
44
+ if (!probe)
45
+ return { backend: 'none', problem: t('noPlatform', { platform }) };
48
46
  let result;
49
47
  let error;
50
48
  try {
@@ -60,19 +58,20 @@ async function probeBackend(proc, signal) {
60
58
  // 启动器不存在 / 不可用(如 Linux 未安装 bwrap、或 unprivileged user namespaces 被禁)/ 超时 → 无后端
61
59
  const reason = result
62
60
  ? result.code === null
63
- ? `被信号 ${result.signal} 终止(含 5 秒超时)`
64
- : `退出码 ${result.code}`
65
- : error instanceof Error
66
- ? error.message
67
- : String(error);
68
- return { backend: 'none', problem: `${probe.fix}。探测 ${probe.cmd} 失败:${reason}` };
61
+ ? t('killed', { signal: String(result.signal) })
62
+ : t('exitCode', { code: result.code })
63
+ : textOf(error);
64
+ return { backend: 'none', problem: t('probeFailed', { fix: probe.fix, cmd: probe.cmd, reason }) };
69
65
  }
70
66
  class OsCodeSandboxService {
71
67
  proc;
72
68
  _backend;
73
- constructor(proc, _backend) {
69
+ activation;
70
+ /** activation 是本插件这次激活的中止信号:调用方没中止、本插件停用或重启时,沙箱里的命令同样停下 */
71
+ constructor(proc, _backend, activation) {
74
72
  this.proc = proc;
75
73
  this._backend = _backend;
74
+ this.activation = activation;
76
75
  }
77
76
  get available() {
78
77
  return this._backend !== 'none';
@@ -87,12 +86,13 @@ class OsCodeSandboxService {
87
86
  const wrapped = wrapForSandbox(this._backend, req.policy, req.cmd, req.args, req.cwd, req.env ?? {});
88
87
  // 经 process 服务 spawn 包好的启动器命令;env 已由 wrapper 的 --clearenv / env -i 注入白名单,
89
88
  // 故此处不再传 env(外层启动器进程继承宿主 env 无妨,wrapper 已为内层不可信子进程清空)。
90
- return this.proc.execFile(wrapped.cmd, wrapped.args, { cwd: req.cwd, timeout: req.timeout, signal: req.signal });
89
+ const signal = req.signal ? AbortSignal.any([req.signal, this.activation]) : this.activation;
90
+ return this.proc.execFile(wrapped.cmd, wrapped.args, { cwd: req.cwd, timeout: req.timeout, signal });
91
91
  }
92
92
  }
93
93
  export default definePlugin({
94
94
  name: '@aalis/plugin-code-sandbox-os',
95
- displayName: '代码沙箱(OS)',
95
+ displayName: t('displayName'),
96
96
  subsystem: 'tools',
97
97
  provides: [codeSandbox],
98
98
  uses: { processService, doctor: optional(doctor), logger, lifecycle, provide },
@@ -102,15 +102,15 @@ export default definePlugin({
102
102
  const proc = caps.processService.use;
103
103
  const { backend, problem } = await probeBackend(proc, caps.lifecycle.use.signal);
104
104
  if (problem)
105
- log.warn(`${NONE}:${problem}`);
106
- caps.provide.use(codeSandbox, new OsCodeSandboxService(proc, backend));
105
+ log.warn(`${toSource(NONE)}:${toSource(problem)}`);
106
+ caps.provide.use(codeSandbox, new OsCodeSandboxService(proc, backend, caps.lifecycle.use.signal));
107
107
  // 这台机器上没有沙箱时整个插件用不了:在诊断里给出修法,没装 WebUI 的用户靠 /doctor 看到
108
108
  caps.doctor.use.registerCheck({
109
109
  id: 'code-sandbox.backend',
110
110
  category: 'env',
111
111
  run: () => problem
112
112
  ? { id: 'code-sandbox.backend', category: 'env', level: 'warn', message: NONE, detail: problem }
113
- : { id: 'code-sandbox.backend', category: 'env', level: 'ok', message: `OS 沙箱可用(${backend})` },
113
+ : { id: 'code-sandbox.backend', category: 'env', level: 'ok', message: t('available', { backend }) },
114
114
  });
115
115
  log.info(`code-sandbox-os 就绪(后端: ${backend})`);
116
116
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ readonly displayName: "Code sandbox (OS)";
3
+ readonly none: "No OS sandbox is available; “Code runner” refuses to run code when “Isolation mode” is “Automatic”";
4
+ readonly noPlatform: "This platform ({platform}) has no OS sandbox backend: to use the sandbox, run Aalis on macOS, Linux or WSL";
5
+ readonly fixSeatbelt: "sandbox-exec ships with macOS; make sure /usr/bin/sandbox-exec can run, then reload this plugin";
6
+ readonly fixBwrap: "Install bubblewrap (bwrap) and enable unprivileged user namespaces; inside a container, /proc must also be mountable. Reload this plugin after fixing it";
7
+ readonly probeFailed: "{fix}. Probing {cmd} failed: {reason}";
8
+ readonly killed: "terminated by signal {signal} (including the 5-second timeout)";
9
+ readonly exitCode: "exit code {code}";
10
+ readonly available: "OS sandbox available ({backend})";
11
+ };
12
+ export default _default;
13
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":";;;;;;;;;;;AAGA,wBAYG"}
@@ -0,0 +1,13 @@
1
+ import { defineLocale } from '@aalis/schema-i18n';
2
+ export default defineLocale()({
3
+ displayName: 'Code sandbox (OS)',
4
+ none: 'No OS sandbox is available; “Code runner” refuses to run code when “Isolation mode” is “Automatic”',
5
+ noPlatform: 'This platform ({platform}) has no OS sandbox backend: to use the sandbox, run Aalis on macOS, Linux or WSL',
6
+ fixSeatbelt: 'sandbox-exec ships with macOS; make sure /usr/bin/sandbox-exec can run, then reload this plugin',
7
+ fixBwrap: 'Install bubblewrap (bwrap) and enable unprivileged user namespaces; inside a container, /proc must also be mountable. Reload this plugin after fixing it',
8
+ probeFailed: '{fix}. Probing {cmd} failed: {reason}',
9
+ killed: 'terminated by signal {signal} (including the 5-second timeout)',
10
+ exitCode: 'exit code {code}',
11
+ available: 'OS sandbox available ({backend})',
12
+ });
13
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,eAAe,YAAY,EAAU,CAAC;IACpC,WAAW,EAAE,mBAAmB;IAChC,IAAI,EAAE,oGAAoG;IAC1G,UAAU,EACR,4GAA4G;IAC9G,WAAW,EAAE,iGAAiG;IAC9G,QAAQ,EACN,0JAA0J;IAC5J,WAAW,EAAE,uCAAuC;IACpD,MAAM,EAAE,gEAAgE;IACxE,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE,kCAAkC;CAC9C,CAAC,CAAC"}
package/dist/sandbox.d.ts CHANGED
@@ -2,7 +2,11 @@ import type { SandboxPolicy } from '@aalis/api-code-sandbox';
2
2
  export type SandboxBackend = 'seatbelt' | 'bwrap' | 'none';
3
3
  /**
4
4
  * 生成 macOS Seatbelt (SBPL) profile:默认拒绝;放开 进程/读/常见系统调用;
5
- * 写仅限 fsWrite + /dev 标准设备;网络按 policy。
5
+ * 写仅限 fsWrite + /dev 标准设备;网络按 policy。信号只能发给同一沙箱里的进程(自己与自己启动的子孙),
6
+ * 沙箱外同一用户的进程(包括宿主)杀不到。POSIX 信号量按建它的进程放行:同一沙箱里建的可用(Python 的 multiprocessing
7
+ * 建锁靠它),沙箱外仍在运行的进程建的按名字也打不开;建它的进程已退出、名字没被删的不在此限。POSIX 共享内存不放行:
8
+ * Seatbelt 对它只有按名字的过滤、没有按建它的进程的,放行就能按名字读写、删掉沙箱外同一用户进程建的;代价是 Python 的
9
+ * multiprocessing.shared_memory 在沙箱里不能用(Queue、Pool、Value 不靠它,照常)
6
10
  */
7
11
  export declare function buildSeatbeltProfile(policy: SandboxPolicy): string;
8
12
  /** macOS:sandbox-exec -p profile env -i <allowlist> cmd args(env -i 清空 env 仅留白名单) */
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAY3D;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAgBlE;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIjC;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBjC;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIjC"}
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAY3D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAgBlE;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIjC;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBjC;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIjC"}
package/dist/sandbox.js CHANGED
@@ -17,7 +17,11 @@ function sbplQuote(p) {
17
17
  }
18
18
  /**
19
19
  * 生成 macOS Seatbelt (SBPL) profile:默认拒绝;放开 进程/读/常见系统调用;
20
- * 写仅限 fsWrite + /dev 标准设备;网络按 policy。
20
+ * 写仅限 fsWrite + /dev 标准设备;网络按 policy。信号只能发给同一沙箱里的进程(自己与自己启动的子孙),
21
+ * 沙箱外同一用户的进程(包括宿主)杀不到。POSIX 信号量按建它的进程放行:同一沙箱里建的可用(Python 的 multiprocessing
22
+ * 建锁靠它),沙箱外仍在运行的进程建的按名字也打不开;建它的进程已退出、名字没被删的不在此限。POSIX 共享内存不放行:
23
+ * Seatbelt 对它只有按名字的过滤、没有按建它的进程的,放行就能按名字读写、删掉沙箱外同一用户进程建的;代价是 Python 的
24
+ * multiprocessing.shared_memory 在沙箱里不能用(Queue、Pool、Value 不靠它,照常)
21
25
  */
22
26
  export function buildSeatbeltProfile(policy) {
23
27
  const lines = [
@@ -28,8 +32,8 @@ export function buildSeatbeltProfile(policy) {
28
32
  '(allow file-read*)',
29
33
  '(allow sysctl-read)',
30
34
  '(allow mach-lookup)',
31
- '(allow ipc-posix-shm)',
32
- '(allow signal)',
35
+ '(allow ipc-posix-sem (semaphore-owner same-sandbox))',
36
+ '(allow signal (target same-sandbox))',
33
37
  '(allow file-write-data (literal "/dev/null") (literal "/dev/stdout") (literal "/dev/stderr") (literal "/dev/dtracehelper") (literal "/dev/urandom"))',
34
38
  ];
35
39
  for (const dir of policy.fsWrite)
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ declare const SOURCE: {
2
+ readonly displayName: "代码沙箱(OS)";
3
+ readonly none: "没有可用的 OS 沙箱,「代码执行器」的「隔离模式」选「自动」时会拒绝执行代码";
4
+ readonly noPlatform: "这个平台({platform})没有 OS 沙箱后端:要用沙箱就在 macOS、Linux 或 WSL 上运行 Aalis";
5
+ readonly fixSeatbelt: "sandbox-exec 是 macOS 自带的,确认 /usr/bin/sandbox-exec 能执行后重载本插件";
6
+ readonly fixBwrap: "装上 bubblewrap(bwrap),并开启非特权用户命名空间(unprivileged user namespaces);在容器里运行时还要能挂 /proc。改好后重载本插件";
7
+ readonly probeFailed: "{fix}。探测 {cmd} 失败:{reason}";
8
+ readonly killed: "被信号 {signal} 终止(含 5 秒超时)";
9
+ readonly exitCode: "退出码 {code}";
10
+ readonly available: "OS 沙箱可用({backend})";
11
+ };
12
+ export type Source = typeof SOURCE;
13
+ export declare const t: import("@aalis/schema-i18n").TextFactory<{
14
+ readonly displayName: "代码沙箱(OS)";
15
+ readonly none: "没有可用的 OS 沙箱,「代码执行器」的「隔离模式」选「自动」时会拒绝执行代码";
16
+ readonly noPlatform: "这个平台({platform})没有 OS 沙箱后端:要用沙箱就在 macOS、Linux 或 WSL 上运行 Aalis";
17
+ readonly fixSeatbelt: "sandbox-exec 是 macOS 自带的,确认 /usr/bin/sandbox-exec 能执行后重载本插件";
18
+ readonly fixBwrap: "装上 bubblewrap(bwrap),并开启非特权用户命名空间(unprivileged user namespaces);在容器里运行时还要能挂 /proc。改好后重载本插件";
19
+ readonly probeFailed: "{fix}。探测 {cmd} 失败:{reason}";
20
+ readonly killed: "被信号 {signal} 终止(含 5 秒超时)";
21
+ readonly exitCode: "退出码 {code}";
22
+ readonly available: "OS 沙箱可用({backend})";
23
+ }>;
24
+ export {};
25
+ //# sourceMappingURL=texts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM;;;;;;;;;;CAWF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;;;;;;;;;EAKZ,CAAC"}
package/dist/texts.js ADDED
@@ -0,0 +1,21 @@
1
+ // 本插件自己的原文字典:显示名,探测沙箱后端的结论与原因(诊断项交文字对象,日志取原文)
2
+ import { defineTexts } from '@aalis/schema-i18n';
3
+ import en from './locales/en.js';
4
+ const SOURCE = {
5
+ displayName: '代码沙箱(OS)',
6
+ none: '没有可用的 OS 沙箱,「代码执行器」的「隔离模式」选「自动」时会拒绝执行代码',
7
+ noPlatform: '这个平台({platform})没有 OS 沙箱后端:要用沙箱就在 macOS、Linux 或 WSL 上运行 Aalis',
8
+ fixSeatbelt: 'sandbox-exec 是 macOS 自带的,确认 /usr/bin/sandbox-exec 能执行后重载本插件',
9
+ fixBwrap: '装上 bubblewrap(bwrap),并开启非特权用户命名空间(unprivileged user namespaces);在容器里运行时还要能挂 /proc。改好后重载本插件',
10
+ probeFailed: '{fix}。探测 {cmd} 失败:{reason}',
11
+ killed: '被信号 {signal} 终止(含 5 秒超时)',
12
+ exitCode: '退出码 {code}',
13
+ available: 'OS 沙箱可用({backend})',
14
+ };
15
+ export const t = defineTexts({
16
+ ns: '@aalis/plugin-code-sandbox-os',
17
+ language: 'zh-CN',
18
+ source: SOURCE,
19
+ locales: { en },
20
+ });
21
+ //# sourceMappingURL=texts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,UAAU;IACvB,IAAI,EAAE,yCAAyC;IAC/C,UAAU,EAAE,+DAA+D;IAC3E,WAAW,EAAE,6DAA6D;IAC1E,QAAQ,EACN,4FAA4F;IAC9F,WAAW,EAAE,4BAA4B;IACzC,MAAM,EAAE,0BAA0B;IAClC,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,oBAAoB;CACvB,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;IAC3B,EAAE,EAAE,+BAA+B;IACnC,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,EAAE,EAAE,EAAE;CAChB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/plugin-code-sandbox-os",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,16 +25,17 @@
25
25
  ],
26
26
  "dependencies": {
27
27
  "@aalis/api-code-sandbox": ">=0.7.0 <1.0.0",
28
- "@aalis/api-doctor": ">=0.8.0 <1.0.0",
29
- "@aalis/api-process": ">=0.9.0 <1.0.0"
28
+ "@aalis/api-doctor": ">=0.9.0 <1.0.0",
29
+ "@aalis/api-process": ">=0.10.0 <1.0.0",
30
+ "@aalis/schema-i18n": ">=0.1.0 <1.0.0"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@types/node": "^22.0.0",
33
34
  "typescript": "^5.7.0",
34
- "@aalis/core": "0.20.0"
35
+ "@aalis/core": "0.21.1"
35
36
  },
36
37
  "peerDependencies": {
37
- "@aalis/core": ">=0.20.0 <1.0.0"
38
+ "@aalis/core": ">=0.21.0 <1.0.0"
38
39
  },
39
40
  "aalis": {
40
41
  "service": {