@poe-platform/safe-bash 0.1.683 → 0.1.684
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 +10 -0
- package/dist/safe-bash/chunks/chunk-4MPK7VIM.js +519 -0
- package/dist/safe-bash/chunks/chunk-4MPK7VIM.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-6R7IR2MV.js → chunk-BONY6MX5.js} +731 -15
- package/dist/safe-bash/chunks/chunk-BONY6MX5.js.map +7 -0
- package/dist/safe-bash/commands/python/index.browser.js +12 -2
- package/dist/safe-bash/commands/python/index.d.ts +5 -0
- package/dist/safe-bash/commands/python/index.d.ts.map +1 -1
- package/dist/safe-bash/commands/python/index.js +15 -3
- package/dist/safe-bash/commands/python/index.js.map +1 -1
- package/dist/safe-bash/commands/python/jspi-assets.d.ts +14 -0
- package/dist/safe-bash/commands/python/jspi-assets.d.ts.map +1 -0
- package/dist/safe-bash/commands/python/jspi-assets.js +51 -0
- package/dist/safe-bash/commands/python/jspi-assets.js.map +1 -0
- package/dist/safe-bash/commands/python/jspi-scheduler.d.ts +8 -0
- package/dist/safe-bash/commands/python/jspi-scheduler.d.ts.map +1 -0
- package/dist/safe-bash/commands/python/jspi-scheduler.js +49 -0
- package/dist/safe-bash/commands/python/jspi-scheduler.js.map +1 -0
- package/dist/safe-bash/commands/python/jspi-trampoline.d.ts +5 -0
- package/dist/safe-bash/commands/python/jspi-trampoline.d.ts.map +1 -0
- package/dist/safe-bash/commands/python/jspi-trampoline.js +90 -0
- package/dist/safe-bash/commands/python/jspi-trampoline.js.map +1 -0
- package/dist/safe-bash/commands/python/jspi.d.ts +22 -0
- package/dist/safe-bash/commands/python/jspi.d.ts.map +1 -0
- package/dist/safe-bash/commands/python/jspi.js +295 -0
- package/dist/safe-bash/commands/python/jspi.js.map +1 -0
- package/dist/safe-bash/commands/python/runtime-scripts.d.ts +6 -0
- package/dist/safe-bash/commands/python/runtime-scripts.d.ts.map +1 -0
- package/dist/safe-bash/commands/python/runtime-scripts.js +168 -0
- package/dist/safe-bash/commands/python/runtime-scripts.js.map +1 -0
- package/dist/safe-bash/commands/python/worker.browser.js +13 -368
- package/dist/safe-bash/commands/python/worker.browser.js.map +3 -3
- package/dist/safe-bash/commands/python/worker.d.ts.map +1 -1
- package/dist/safe-bash/commands/python/worker.js +6 -168
- package/dist/safe-bash/commands/python/worker.js.map +1 -1
- package/dist/safe-bash/core.browser.js +12 -2
- package/dist/safe-bash/core.browser.js.map +1 -1
- package/package.json +2 -2
- package/dist/safe-bash/chunks/chunk-3G3EZZ63.js +0 -145
- package/dist/safe-bash/chunks/chunk-3G3EZZ63.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-6R7IR2MV.js.map +0 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@poe-platform/safe-bash",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.684",
|
|
4
4
|
"description": "Extensible virtual shell with pluggable filesystems and streaming commands",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
"access": "public"
|
|
367
367
|
},
|
|
368
368
|
"dependencies": {
|
|
369
|
-
"@poe-platform/safe-fs": "0.1.
|
|
369
|
+
"@poe-platform/safe-fs": "0.1.684",
|
|
370
370
|
"pako": "3.0.1",
|
|
371
371
|
"@types/node": "^25.2.2",
|
|
372
372
|
"@noble/hashes": "2.4.0",
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
init_platform
|
|
3
|
-
} from "./chunk-O4SKIJ5J.js";
|
|
4
|
-
|
|
5
|
-
// packages/safe-bash/src/commands/python/invocation.ts
|
|
6
|
-
init_platform();
|
|
7
|
-
var PythonInvocationError = class extends Error {
|
|
8
|
-
constructor(message) {
|
|
9
|
-
super(message);
|
|
10
|
-
this.name = "PythonInvocationError";
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
function parsePythonInvocation(args, env) {
|
|
14
|
-
const startupArgs = [];
|
|
15
|
-
let informational = false;
|
|
16
|
-
scan: for (let index = 0; index < args.length; index++) {
|
|
17
|
-
const option = args[index];
|
|
18
|
-
if (option === "--" || option === "-" || !option.startsWith("-")) break;
|
|
19
|
-
if (option === "--help") {
|
|
20
|
-
informational = true;
|
|
21
|
-
break;
|
|
22
|
-
}
|
|
23
|
-
if (option === "--version") {
|
|
24
|
-
informational = true;
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
if (option.startsWith("--")) throw new PythonInvocationError("unsupported option " + option);
|
|
28
|
-
for (let offset = 1; offset < option.length; offset++) {
|
|
29
|
-
const flag = option[offset];
|
|
30
|
-
if (flag === "h" || flag === "?") {
|
|
31
|
-
informational = true;
|
|
32
|
-
break scan;
|
|
33
|
-
}
|
|
34
|
-
if (flag === "V") {
|
|
35
|
-
informational = true;
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
if ("cmWX".includes(flag)) {
|
|
39
|
-
const operand = option.slice(offset + 1) || args[++index];
|
|
40
|
-
if (operand === void 0) throw new PythonInvocationError("argument expected for -" + flag);
|
|
41
|
-
if (flag === "c" || flag === "m") break scan;
|
|
42
|
-
if (flag === "X") {
|
|
43
|
-
const separator = operand.indexOf("=");
|
|
44
|
-
const name = separator < 0 ? operand : operand.slice(0, separator);
|
|
45
|
-
const value = separator < 0 ? void 0 : operand.slice(separator + 1);
|
|
46
|
-
let decimal = value ?? "";
|
|
47
|
-
while (decimal.length && " \n\r\v\f".includes(decimal[0])) decimal = decimal.slice(1);
|
|
48
|
-
if (decimal[0] === "+" || decimal[0] === "-") decimal = decimal.slice(1);
|
|
49
|
-
const digits = decimal.length > 0 && [...decimal].every((character) => character >= "0" && character <= "9");
|
|
50
|
-
const supported = name === "utf8" && (value === void 0 || value === "0" || value === "1") || (name === "dev" || name === "warn_default_encoding") && value === void 0 || name === "int_max_str_digits" && digits && Number.isSafeInteger(Number(value)) && Number(value) <= 2147483647 && (Number(value) === 0 || Number(value) >= 640);
|
|
51
|
-
if (!supported) throw new PythonInvocationError("unsupported -X option " + operand);
|
|
52
|
-
startupArgs.push("-X", operand);
|
|
53
|
-
}
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
if (!"BEPOusISbdvqR".includes(flag)) throw new PythonInvocationError("unsupported option -" + flag);
|
|
57
|
-
startupArgs.push("-" + flag);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (!informational && !startupArgs.includes("-E") && !startupArgs.includes("-I")) {
|
|
61
|
-
if (env.PYTHONINSPECT) throw new PythonInvocationError("PYTHONINSPECT requires an interactive terminal, which the shell does not expose");
|
|
62
|
-
if (env.PYTHONHOME) throw new PythonInvocationError("PYTHONHOME cannot replace the configured Pyodide runtime");
|
|
63
|
-
}
|
|
64
|
-
const runtimeEnv = { ...env };
|
|
65
|
-
delete runtimeEnv.PYTHONPATH;
|
|
66
|
-
delete runtimeEnv.PYTHONHOME;
|
|
67
|
-
delete runtimeEnv.PYTHONWARNINGS;
|
|
68
|
-
runtimeEnv.PYTHONINSPECT = "";
|
|
69
|
-
startupArgs.push("-c", "");
|
|
70
|
-
return { startupArgs, env: runtimeEnv };
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// packages/safe-bash/src/commands/python/diagnostics.ts
|
|
74
|
-
init_platform();
|
|
75
|
-
var messages = {
|
|
76
|
-
"executor-unavailable": "Python executor is unavailable; configure exactly one supported executor or interpreter worker.",
|
|
77
|
-
"transport-unavailable": "Python worker transport or shared-memory operations are unavailable.",
|
|
78
|
-
"runtime-abi": "Python runtime version or native ABI is unsupported.",
|
|
79
|
-
"runtime-assets": "Python runtime or package assets could not be loaded.",
|
|
80
|
-
"isolation-unavailable": "Python host isolation or resource enforcement is unavailable.",
|
|
81
|
-
deadline: "Python execution exceeded its host deadline.",
|
|
82
|
-
"filesystem-open": "Python filesystem handle access is unavailable; the backend must support retained open.",
|
|
83
|
-
"filesystem-read": "Python filesystem reads are unavailable for this backend.",
|
|
84
|
-
"filesystem-write": "Python filesystem writes are unavailable for this backend.",
|
|
85
|
-
"filesystem-directory": "Python retained directory operations are unavailable for this backend.",
|
|
86
|
-
"filesystem-operation": "The requested Python filesystem operation is unavailable for this backend.",
|
|
87
|
-
capacity: "Python worker capacity exhausted.",
|
|
88
|
-
cleanup: "Python resource cleanup failed; retirement could not be confirmed.",
|
|
89
|
-
startup: "Python startup failed; consult the host diagnostic callback.",
|
|
90
|
-
runtime: "Python runtime failed; consult the host diagnostic callback."
|
|
91
|
-
};
|
|
92
|
-
var PythonFailure = class extends Error {
|
|
93
|
-
constructor(category, options) {
|
|
94
|
-
super(messages[category], options);
|
|
95
|
-
this.category = category;
|
|
96
|
-
this.name = "PythonFailure";
|
|
97
|
-
}
|
|
98
|
-
category;
|
|
99
|
-
};
|
|
100
|
-
function isPythonFailureCategory(value) {
|
|
101
|
-
return typeof value === "string" && Object.hasOwn(messages, value);
|
|
102
|
-
}
|
|
103
|
-
function reportPythonFailure(category, cause, observer) {
|
|
104
|
-
const failure = new PythonFailure(category);
|
|
105
|
-
try {
|
|
106
|
-
void Promise.resolve(observer?.({ failure, cause })).catch(() => {
|
|
107
|
-
});
|
|
108
|
-
} catch {
|
|
109
|
-
}
|
|
110
|
-
return failure;
|
|
111
|
-
}
|
|
112
|
-
function inspectPythonCapabilities(options = {}) {
|
|
113
|
-
const failures = /* @__PURE__ */ new Set();
|
|
114
|
-
if (typeof options.createWorker === "function" === (typeof options.createExecutor === "function") || options.createWorker !== void 0 && typeof options.createWorker !== "function" || options.createExecutor !== void 0 && typeof options.createExecutor !== "function") failures.add("executor-unavailable");
|
|
115
|
-
if (typeof options.createExecutor !== "function" && (typeof SharedArrayBuffer !== "function" || typeof Atomics !== "object" || typeof Atomics.store !== "function" || typeof Atomics.notify !== "function")) failures.add("transport-unavailable");
|
|
116
|
-
if (options.runtimeVersion !== void 0 && options.runtimeVersion !== "314.0.6") failures.add("runtime-abi");
|
|
117
|
-
for (const requirement of options.requiredFileSystem ?? []) {
|
|
118
|
-
if (!["open", "read", "write", "directory"].includes(requirement)) throw new TypeError("Unknown Python filesystem requirement");
|
|
119
|
-
const category = requirement === "open" ? "filesystem-open" : requirement === "read" ? "filesystem-read" : requirement === "write" ? "filesystem-write" : "filesystem-directory";
|
|
120
|
-
try {
|
|
121
|
-
const fs = options.fs;
|
|
122
|
-
if (requirement === "directory") {
|
|
123
|
-
failures.add(category);
|
|
124
|
-
} else if (!fs || typeof fs.open !== "function" || fs.capabilities.open === false) failures.add("filesystem-open");
|
|
125
|
-
else if (requirement === "write" && (fs.capabilities.readOnly === true || fs.capabilities.write === false)) failures.add(category);
|
|
126
|
-
else if (requirement === "read" && fs.capabilities.read === false) failures.add(category);
|
|
127
|
-
} catch {
|
|
128
|
-
failures.add(category);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return Object.freeze({
|
|
132
|
-
configurationValid: failures.size === 0,
|
|
133
|
-
failures: Object.freeze([...failures].map((category) => new PythonFailure(category)))
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export {
|
|
138
|
-
PythonInvocationError,
|
|
139
|
-
parsePythonInvocation,
|
|
140
|
-
PythonFailure,
|
|
141
|
-
isPythonFailureCategory,
|
|
142
|
-
reportPythonFailure,
|
|
143
|
-
inspectPythonCapabilities
|
|
144
|
-
};
|
|
145
|
-
//# sourceMappingURL=chunk-3G3EZZ63.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/commands/python/invocation.ts", "../../src/commands/python/diagnostics.ts"],
|
|
4
|
-
"sourcesContent": ["/** An explicit compatibility failure, rendered as Python usage status 2. */\nexport class PythonInvocationError extends Error {\n constructor(message: string) { super(message); this.name = 'PythonInvocationError'; }\n}\n\n/** Extract native initialization flags without consuming script/module arguments. */\nexport function parsePythonInvocation(args: readonly string[], env: Readonly<Record<string, string>>): {\n readonly startupArgs: string[];\n readonly env: Record<string, string>;\n} {\n const startupArgs: string[] = [];\n let informational = false;\n scan: for (let index = 0; index < args.length; index++) {\n const option = args[index]!;\n if (option === '--' || option === '-' || !option.startsWith('-')) break;\n if (option === '--help') { informational = true; break; }\n if (option === '--version') { informational = true; continue; }\n if (option.startsWith('--')) throw new PythonInvocationError('unsupported option ' + option);\n for (let offset = 1; offset < option.length; offset++) {\n const flag = option[offset]!;\n if (flag === 'h' || flag === '?') { informational = true; break scan; }\n if (flag === 'V') { informational = true; continue; }\n if ('cmWX'.includes(flag)) {\n const operand = option.slice(offset + 1) || args[++index];\n if (operand === undefined) throw new PythonInvocationError('argument expected for -' + flag);\n if (flag === 'c' || flag === 'm') break scan;\n if (flag === 'X') {\n const separator = operand.indexOf('=');\n const name = separator < 0 ? operand : operand.slice(0, separator);\n const value = separator < 0 ? undefined : operand.slice(separator + 1);\n let decimal = value ?? '';\n while (decimal.length && ' \\t\\n\\r\\v\\f'.includes(decimal[0]!)) decimal = decimal.slice(1);\n if (decimal[0] === '+' || decimal[0] === '-') decimal = decimal.slice(1);\n const digits = decimal.length > 0 && [...decimal].every(character => character >= '0' && character <= '9');\n const supported = (name === 'utf8' && (value === undefined || value === '0' || value === '1'))\n || ((name === 'dev' || name === 'warn_default_encoding') && value === undefined)\n || (name === 'int_max_str_digits' && digits && Number.isSafeInteger(Number(value)) && Number(value) <= 2147483647 && (Number(value) === 0 || Number(value) >= 640));\n if (!supported) throw new PythonInvocationError('unsupported -X option ' + operand);\n startupArgs.push('-X', operand);\n }\n // Warning-as-error can prevent Pyodide bootstrap; apply -W after bootstrap.\n break;\n }\n if (!'BEPOusISbdvqR'.includes(flag)) throw new PythonInvocationError('unsupported option -' + flag);\n startupArgs.push('-' + flag);\n }\n }\n if (!informational && !startupArgs.includes('-E') && !startupArgs.includes('-I')) {\n if (env.PYTHONINSPECT) throw new PythonInvocationError('PYTHONINSPECT requires an interactive terminal, which the shell does not expose');\n if (env.PYTHONHOME) throw new PythonInvocationError('PYTHONHOME cannot replace the configured Pyodide runtime');\n }\n const runtimeEnv = { ...env };\n // These paths belong to the canonical filesystem, mounted after bootstrap.\n delete runtimeEnv.PYTHONPATH;\n delete runtimeEnv.PYTHONHOME;\n delete runtimeEnv.PYTHONWARNINGS;\n // Pyodide otherwise supplies PYTHONINSPECT=1, including with a -c operand.\n runtimeEnv.PYTHONINSPECT = '';\n // Without a command Pyodide initializes CPython in inspect mode.\n startupArgs.push('-c', '');\n return { startupArgs, env: runtimeEnv };\n}\n", "import type { FileSystem } from '../../contracts/filesystem.js';\n\nconst messages = {\n 'executor-unavailable': 'Python executor is unavailable; configure exactly one supported executor or interpreter worker.',\n 'transport-unavailable': 'Python worker transport or shared-memory operations are unavailable.',\n 'runtime-abi': 'Python runtime version or native ABI is unsupported.',\n 'runtime-assets': 'Python runtime or package assets could not be loaded.',\n 'isolation-unavailable': 'Python host isolation or resource enforcement is unavailable.',\n deadline: 'Python execution exceeded its host deadline.',\n 'filesystem-open': 'Python filesystem handle access is unavailable; the backend must support retained open.',\n 'filesystem-read': 'Python filesystem reads are unavailable for this backend.',\n 'filesystem-write': 'Python filesystem writes are unavailable for this backend.',\n 'filesystem-directory': 'Python retained directory operations are unavailable for this backend.',\n 'filesystem-operation': 'The requested Python filesystem operation is unavailable for this backend.',\n capacity: 'Python worker capacity exhausted.',\n cleanup: 'Python resource cleanup failed; retirement could not be confirmed.',\n startup: 'Python startup failed; consult the host diagnostic callback.',\n runtime: 'Python runtime failed; consult the host diagnostic callback.',\n} as const;\n\nexport type PythonFailureCategory = keyof typeof messages;\n\nexport class PythonFailure extends Error {\n constructor(readonly category: PythonFailureCategory, options?: ErrorOptions) {\n super(messages[category], options);\n this.name = 'PythonFailure';\n }\n}\n\nexport interface PythonDiagnostic {\n readonly failure: PythonFailure;\n readonly cause: unknown;\n}\n\nexport type PythonDiagnosticObserver = (diagnostic: PythonDiagnostic) => void | Promise<void>;\nexport type PythonFileSystemRequirement = 'open' | 'read' | 'write' | 'directory';\n\nexport function isPythonFailureCategory(value: unknown): value is PythonFailureCategory {\n return typeof value === 'string' && Object.hasOwn(messages, value);\n}\n\nexport function reportPythonFailure(category: PythonFailureCategory, cause: unknown, observer?: PythonDiagnosticObserver): PythonFailure {\n const failure = new PythonFailure(category);\n try { void Promise.resolve(observer?.({ failure, cause })).catch(() => {}); } catch {}\n return failure;\n}\n\nexport interface PythonCapabilityOptions {\n readonly createWorker?: () => unknown;\n readonly createExecutor?: () => unknown;\n readonly fs?: FileSystem;\n readonly requiredFileSystem?: readonly PythonFileSystemRequirement[];\n readonly runtimeVersion?: string;\n}\n\nexport interface PythonCapabilityReport {\n readonly configurationValid: boolean;\n readonly failures: readonly PythonFailure[];\n}\n\nexport function inspectPythonCapabilities(options: PythonCapabilityOptions = {}): PythonCapabilityReport {\n const failures = new Set<PythonFailureCategory>();\n if ((typeof options.createWorker === 'function') === (typeof options.createExecutor === 'function')\n || options.createWorker !== undefined && typeof options.createWorker !== 'function'\n || options.createExecutor !== undefined && typeof options.createExecutor !== 'function') failures.add('executor-unavailable');\n if (typeof options.createExecutor !== 'function' && (typeof SharedArrayBuffer !== 'function' || typeof Atomics !== 'object'\n || typeof Atomics.store !== 'function' || typeof Atomics.notify !== 'function')) failures.add('transport-unavailable');\n if (options.runtimeVersion !== undefined && options.runtimeVersion !== '314.0.6') failures.add('runtime-abi');\n for (const requirement of options.requiredFileSystem ?? []) {\n if (!['open', 'read', 'write', 'directory'].includes(requirement)) throw new TypeError('Unknown Python filesystem requirement');\n const category: PythonFailureCategory = requirement === 'open' ? 'filesystem-open'\n : requirement === 'read' ? 'filesystem-read' : requirement === 'write' ? 'filesystem-write' : 'filesystem-directory';\n try {\n const fs = options.fs;\n if (requirement === 'directory') {\n failures.add(category);\n } else if (!fs || typeof fs.open !== 'function' || fs.capabilities.open === false) failures.add('filesystem-open');\n else if (requirement === 'write' && (fs.capabilities.readOnly === true || fs.capabilities.write === false)) failures.add(category);\n else if (requirement === 'read' && fs.capabilities.read === false) failures.add(category);\n } catch { failures.add(category); }\n }\n return Object.freeze({ configurationValid: failures.size === 0,\n failures: Object.freeze([...failures].map(category => new PythonFailure(category))) });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|