@poe-platform/safe-bash 0.1.825 → 0.1.827
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/dist/image-ast/index.js +39 -18
- package/dist/pdf-ast/image.js +1 -1
- package/dist/pdf-ast/index.js +1 -1
- package/dist/pdf-ast/vendor/pdfjs-fonts.mjs +9 -3
- package/dist/safe-bash/chunks/{chunk-AGHV53VF.js → chunk-M6XFU6LQ.js} +3 -1
- package/dist/safe-bash/chunks/{chunk-363QOIDR.js → chunk-T6FHWSHM.js} +3 -1
- package/dist/safe-bash/command-chunks/{chunk-ZPBL7TYJ.js → chunk-2JRHCVMQ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-FMGNXOMV.js → chunk-2L3NMRLG.js} +7 -3
- package/dist/safe-bash/command-chunks/{chunk-DAQO64WC.js → chunk-2YKOJPIW.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-EPYJSPOY.js → chunk-3QCW4VQF.js} +12 -8
- package/dist/safe-bash/command-chunks/{chunk-YRBFNT5B.js → chunk-3YL2TMLA.js} +10 -1
- package/dist/safe-bash/command-chunks/{chunk-5H7ZHP7F.js → chunk-43NDRBKY.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-BBOYR6LV.js → chunk-46GA576V.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-WPT2FCHH.js → chunk-4SLPM2WM.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-7ZQVMPSB.js → chunk-5CAXR62E.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-3DTHX5UU.js → chunk-66653AEZ.js} +40 -14
- package/dist/safe-bash/command-chunks/{chunk-ETFJ4L7F.js → chunk-6OLE6CLV.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-ZIDESNHW.js → chunk-7M3M6FKC.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-2KMNVJB7.js → chunk-A7PKUIJT.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-AVSINNZ6.js → chunk-DEQ47SBQ.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-EV7A5FNN.js → chunk-FFFRLPXU.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-4MVQE6CT.js → chunk-FYTBEGSY.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-LFTGMUAV.js → chunk-HQIZR6EU.js} +192 -489
- package/dist/safe-bash/command-chunks/chunk-HS2L7I4N.js +219 -0
- package/dist/safe-bash/command-chunks/{chunk-WKS2PAZL.js → chunk-HUGKO4ZE.js} +10 -1
- package/dist/safe-bash/command-chunks/chunk-IGXH5W5Z.js +111 -0
- package/dist/safe-bash/command-chunks/{chunk-CMJBRGU2.js → chunk-IHQZKUBS.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-JADJ4BMN.js +1519 -0
- package/dist/safe-bash/command-chunks/{chunk-5AQAWIYK.js → chunk-JEZC5V3B.js} +4 -0
- package/dist/safe-bash/command-chunks/{chunk-YB5TNDY6.js → chunk-K5VJ4NNL.js} +39 -5
- package/dist/safe-bash/command-chunks/{chunk-7RQGRFHJ.js → chunk-KHWDEAE4.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-L54KVUSY.js +604 -0
- package/dist/safe-bash/command-chunks/{chunk-3NJETNC2.js → chunk-MBXNG6C3.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-HCPEYQKT.js → chunk-N4SH6QY5.js} +285 -302
- package/dist/safe-bash/command-chunks/{chunk-3DID6MQY.js → chunk-OWTQYLID.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-4EA7WI3L.js → chunk-QOOQD6BD.js} +42 -33
- package/dist/safe-bash/command-chunks/{chunk-RQTFK7AV.js → chunk-QZYEI4N6.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-R3SLT3ZX.js → chunk-R6GON4H3.js} +11 -1
- package/dist/safe-bash/command-chunks/{chunk-2GILUQJY.js → chunk-R7ZGDHME.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-HNEWGADJ.js → chunk-RUXOFW5G.js} +7 -6
- package/dist/safe-bash/command-chunks/{chunk-LKAFLJ5L.js → chunk-RWQKX44L.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-PKH57OIC.js → chunk-SG2KOOD4.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-T4TGJYFV.js +60 -0
- package/dist/safe-bash/command-chunks/chunk-TGSNVLFZ.js +105 -0
- package/dist/safe-bash/command-chunks/{chunk-NXCJNPL3.js → chunk-UCE77LYV.js} +2 -1
- package/dist/safe-bash/command-chunks/{chunk-EWECMOQ5.js → chunk-UIHPHIKI.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-XSZNL3GV.js → chunk-UJPWPRVB.js} +191 -146
- package/dist/safe-bash/command-chunks/{chunk-E5CDHXFA.js → chunk-VOR6YDZC.js} +26 -1
- package/dist/safe-bash/command-chunks/chunk-VSNVYOK2.js +30 -0
- package/dist/safe-bash/command-chunks/{chunk-4XYGJB24.js → chunk-VTH4AORO.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-W5LH7D23.js → chunk-WKKJJBJQ.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-OLXMWQJ5.js → chunk-WRO3PB2M.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-RUAGHZNF.js → chunk-X5ODTF3E.js} +7 -5
- package/dist/safe-bash/command-chunks/{chunk-LH4VBNF6.js → chunk-XGTSP2CP.js} +84 -16
- package/dist/safe-bash/command-chunks/{chunk-K576GZED.js → chunk-XTHKXCF2.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-J3VS55K4.js → chunk-YHRESVJ7.js} +9 -3
- package/dist/safe-bash/command-chunks/{chunk-UWIDPTOB.js → chunk-YSCKOUQP.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-UYNJF5QN.js → chunk-ZALAWNOE.js} +76 -122
- package/dist/safe-bash/command-chunks/{chunk-OT75C5YS.js → chunk-ZYXKW2K7.js} +1 -1
- package/dist/safe-bash/command-chunks/{pdf-renderer-346WYKSZ.js → pdf-renderer-5QWOVFA4.js} +1 -1
- package/dist/safe-bash/command-chunks/{prompt-tool-debug-3POFNRYP.js → prompt-tool-debug-G7ATE7D5.js} +6 -4
- package/dist/safe-bash/commands/llm/index.browser.js +5 -1
- package/dist/safe-bash/commands/llm/index.js +1 -1
- package/dist/safe-bash/commands/python/executor.browser.js +3 -1
- package/dist/safe-bash/commands/python/executor.js +1 -1
- package/dist/safe-bash/commands/python/index.browser.js +5 -1
- package/dist/safe-bash/commands/python/index.js +1 -1
- package/dist/safe-bash/core.browser.js +2 -2
- package/dist/safe-bash/full-core.browser.js +10 -2
- package/dist/safe-bash-command-awk/awk-runtime.js +2 -2
- package/dist/safe-bash-command-awk/awk-syntax.js +1 -1
- package/dist/safe-bash-command-awk/awk.js +3 -3
- package/dist/safe-bash-command-awk/index.js +3 -3
- package/dist/safe-bash-command-gpg/index.js +11 -3
- package/dist/safe-bash-command-imagemagick/index.js +2 -2
- package/dist/safe-bash-command-llm/collections.js +6 -4
- package/dist/safe-bash-command-llm/command.js +4 -4
- package/dist/safe-bash-command-llm/import-json-document.d.ts +9 -2
- package/dist/safe-bash-command-llm/index.d.ts +2 -1
- package/dist/safe-bash-command-llm/index.js +10 -4
- package/dist/safe-bash-command-llm/loader-provider.d.ts +5 -0
- package/dist/safe-bash-command-mcp/index.js +10 -13
- package/dist/safe-bash-command-pdftoppm/index.js +2 -2
- package/dist/safe-bash-command-playwright-cli/index.js +2 -2
- package/dist/safe-bash-command-playwright-cli/playwright/ability-execution.d.ts +1 -0
- package/dist/safe-bash-command-playwright-cli/playwright/ability-execution.js +1 -1
- package/dist/safe-bash-command-playwright-cli/playwright/controller.d.ts +2 -0
- package/dist/safe-bash-command-playwright-cli/playwright/controller.js +2 -2
- package/dist/safe-bash-command-playwright-cli/playwright/index.js +2 -2
- package/dist/safe-bash-command-python/build-backend.d.ts +2 -0
- package/dist/safe-bash-command-python/cache.d.ts +1 -1
- package/dist/safe-bash-command-python/executor.d.ts +5 -2
- package/dist/safe-bash-command-python/executor.js +11 -6
- package/dist/safe-bash-command-python/host-capabilities.js +1 -1
- package/dist/safe-bash-command-python/index.js +11 -6
- package/dist/safe-bash-command-python/jspi.js +5 -3
- package/dist/safe-bash-command-python/manifest-file.d.ts +44 -0
- package/dist/safe-bash-command-python/manifest.d.ts +45 -0
- package/dist/safe-bash-command-python/provisioning.d.ts +20 -1
- package/dist/safe-bash-command-python/provisioning.js +3 -2
- package/dist/safe-bash-command-python/reply.js +7 -11
- package/dist/safe-bash-command-python/source-archive.js +2 -2
- package/dist/safe-bash-command-python/source-zip.js +2 -2
- package/dist/safe-bash-command-python/worker.js +34 -21
- package/dist/safe-bash-command-sqlite3/engine.d.ts +4 -0
- package/dist/safe-bash-command-sqlite3/index.js +174 -18
- package/dist/safe-bash-command-svgo/index.js +1 -1
- package/dist/safe-bash-command-tar/create.js +3 -3
- package/dist/safe-bash-command-tar/extract.js +3 -3
- package/dist/safe-bash-command-tar/index.js +5 -5
- package/dist/safe-bash-command-tar/modes.js +5 -5
- package/dist/safe-bash-command-tar/options.d.ts +1 -1
- package/dist/safe-bash-command-tar/options.js +1 -1
- package/dist/safe-bash-command-tar/stream.js +1 -1
- package/dist/safe-bash-command-wkhtmltopdf/index.js +1 -1
- package/dist/safe-bash-command-xan/argv.js +1 -1
- package/dist/safe-bash-command-xan/commands.js +3 -3
- package/dist/safe-bash-command-xan/index.js +3 -3
- package/dist/safe-bash-command-xan/io.js +2 -2
- package/dist/safe-bash-compression-engine/bounded-codec.js +3 -3
- package/dist/safe-bash-compression-engine/codec-loader.js +2 -2
- package/dist/safe-bash-compression-engine/files.js +6 -6
- package/dist/safe-bash-compression-engine/index.js +5 -5
- package/dist/safe-bash-compression-engine/operand.js +6 -6
- package/dist/safe-bash-compression-engine/options.js +1 -1
- package/dist/safe-bash-compression-engine/stream.js +5 -5
- package/dist/safe-bash-compression-engine/zstd-decode.js +4 -4
- package/dist/safe-bash-contracts/filesystem-descriptor.js +1 -1
- package/dist/safe-bash-contracts/filesystem-output.js +1 -1
- package/dist/safe-bash-csv-engine/index.js +6 -6
- package/dist/safe-bash-csv-engine/python-codec-aliases.js +1 -1
- package/dist/safe-bash-csv-engine/python-codepages.js +3 -3
- package/dist/safe-bash-csv-engine/python-file-codepages.js +2 -2
- package/dist/safe-bash-csv-engine/python-utf16.js +4 -4
- package/dist/safe-bash-csv-engine/text-decoder.js +6 -6
- package/dist/safe-bash-graphviz-engine/index.js +1 -1
- package/dist/safe-bash-pager-engine/index.js +2 -2
- package/dist/safe-bash-query-engine/capture.js +3 -3
- package/dist/safe-bash-query-engine/delpaths.js +3 -3
- package/dist/safe-bash-query-engine/formats.js +2 -2
- package/dist/safe-bash-query-engine/index.js +10 -10
- package/dist/safe-bash-query-engine/indices.js +3 -3
- package/dist/safe-bash-query-engine/input.d.ts +3 -3
- package/dist/safe-bash-query-engine/input.js +1 -1
- package/dist/safe-bash-query-engine/interpreter.js +9 -9
- package/dist/safe-bash-query-engine/query-core.js +10 -10
- package/dist/safe-bash-query-engine/regex.js +4 -4
- package/dist/safe-bash-query-engine/splits.js +5 -5
- package/dist/safe-bash-query-engine/values.js +2 -2
- package/package.json +2 -2
- package/dist/safe-bash/command-chunks/chunk-OOYVZAWL.js +0 -90
- package/dist/safe-bash/command-chunks/chunk-RZOHZGEZ.js +0 -772
- package/dist/safe-bash/command-chunks/chunk-WIUEM7HP.js +0 -58
- package/dist/safe-bash/command-chunks/chunk-WY6THI6J.js +0 -673
- package/dist/safe-bash/command-chunks/chunk-ZERCTWUI.js +0 -467
|
@@ -33,6 +33,8 @@ export interface PythonCommandsOptions {
|
|
|
33
33
|
readonly packageProfile?: 'documents';
|
|
34
34
|
readonly provisioning?: PythonPackageOptions;
|
|
35
35
|
readonly environment?: PythonPackageEnvironment;
|
|
36
|
+
/** Built-in runtimes read host metadata on demand; inline supports older custom executors. */
|
|
37
|
+
readonly packageRecordTransport?: 'host' | 'inline';
|
|
36
38
|
/** Host UI lifecycle; never written to guest stdout/stderr. */
|
|
37
39
|
readonly onProgress?: (event: PythonInitializationProgress) => void;
|
|
38
40
|
readonly onDiagnostic?: PythonDiagnosticObserver;
|
|
@@ -84,8 +86,9 @@ export { createPythonBuildDependencies, type PythonBuildDependenciesRequest } fr
|
|
|
84
86
|
export { createPythonSourceSnapshot, type PythonSourceSnapshot } from './source-snapshot.js';
|
|
85
87
|
export { createPythonBuildBackend, type PythonBuildHookRequest, type PythonSourceRequirementRequest, type PythonEditableRequirementRequest, type PythonSourceRequirement, type PythonLegacyBuildRequest, type PythonLegacyRequirementsRequest, type PythonBuildHookContext, type PythonBuildSystemRequest, type PythonBuildSystemDetails, type PythonBuildRequirementsRequest, type PythonBuildRequirementsStatus } from './build-backend.js';
|
|
86
88
|
export type { PythonPackageInstallOptions, PythonPackageOptions, PythonPackageCache, PythonPackageProgress, PythonPackageStart, PythonPackageContext, PythonPackageEnvironment, PythonPackagePrepareContext } from './provisioning.js';
|
|
87
|
-
export { PythonPackageConflictError, createPythonPackageManifestStore } from './manifest.js';
|
|
88
|
-
export
|
|
89
|
+
export { PythonPackageConflictError, createPythonPackageManifestStore, createPythonPackageStreamingManifestStore } from './manifest.js';
|
|
90
|
+
export { createPythonPackageFileManifestStore } from './manifest-file.js';
|
|
91
|
+
export type { PythonPackageManifest, PythonPackageManifestStore, PythonPackageStreamingManifestStore } from './manifest.js';
|
|
89
92
|
export { createPythonPackageCache } from './cache.js';
|
|
90
93
|
export { createPythonExecutorPool } from './executor-pool.js';
|
|
91
94
|
export type { PythonExecutorPool, PythonExecutorPoolOptions } from './executor-pool.js';
|
|
@@ -14,27 +14,30 @@ import {
|
|
|
14
14
|
installPythonLlmPackages,
|
|
15
15
|
pythonExecutorCommands,
|
|
16
16
|
pythonLlmPackages
|
|
17
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
17
|
+
} from "../safe-bash/command-chunks/chunk-HQIZR6EU.js";
|
|
18
18
|
import {
|
|
19
19
|
PythonPackageConflictError,
|
|
20
20
|
createPythonPackageCache,
|
|
21
21
|
createPythonPackageEnvironment,
|
|
22
|
+
createPythonPackageFileManifestStore,
|
|
22
23
|
createPythonPackageManifestStore,
|
|
24
|
+
createPythonPackageStreamingManifestStore,
|
|
23
25
|
publishPythonBuildWheel,
|
|
24
26
|
pythonDocumentPackages
|
|
25
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
27
|
+
} from "../safe-bash/command-chunks/chunk-JADJ4BMN.js";
|
|
26
28
|
import {
|
|
27
29
|
createPythonShellCapability
|
|
28
30
|
} from "../safe-bash/command-chunks/chunk-NHAG4DWL.js";
|
|
29
|
-
import "../safe-bash/command-chunks/chunk-NXCJNPL3.js";
|
|
30
31
|
import {
|
|
31
32
|
createPythonJspiAssets
|
|
32
33
|
} from "../safe-bash/command-chunks/chunk-IOZTDDNT.js";
|
|
33
34
|
import {
|
|
34
35
|
createPythonJspiExecutor
|
|
35
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
36
|
+
} from "../safe-bash/command-chunks/chunk-UJPWPRVB.js";
|
|
36
37
|
import "../safe-bash/command-chunks/chunk-FXWKMNX2.js";
|
|
37
|
-
import "../safe-bash/command-chunks/chunk-
|
|
38
|
+
import "../safe-bash/command-chunks/chunk-L54KVUSY.js";
|
|
39
|
+
import "../safe-bash/command-chunks/chunk-HS2L7I4N.js";
|
|
40
|
+
import "../safe-bash/command-chunks/chunk-UCE77LYV.js";
|
|
38
41
|
import {
|
|
39
42
|
createPythonJspiNativeCall,
|
|
40
43
|
createPythonJspiStatResult,
|
|
@@ -60,7 +63,7 @@ import {
|
|
|
60
63
|
import {
|
|
61
64
|
createPythonHostBridge,
|
|
62
65
|
pythonHostFailureCode
|
|
63
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
66
|
+
} from "../safe-bash/command-chunks/chunk-3QCW4VQF.js";
|
|
64
67
|
import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
|
|
65
68
|
export {
|
|
66
69
|
PythonFailure,
|
|
@@ -85,7 +88,9 @@ export {
|
|
|
85
88
|
createPythonLlmToolLoader,
|
|
86
89
|
createPythonPackageCache,
|
|
87
90
|
createPythonPackageEnvironment,
|
|
91
|
+
createPythonPackageFileManifestStore,
|
|
88
92
|
createPythonPackageManifestStore,
|
|
93
|
+
createPythonPackageStreamingManifestStore,
|
|
89
94
|
createPythonShellCapability,
|
|
90
95
|
createPythonSourcePackageEnvironment,
|
|
91
96
|
createPythonSourceSnapshot,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createPythonHostBridge,
|
|
3
3
|
pythonHostFailureCode
|
|
4
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
4
|
+
} from "../safe-bash/command-chunks/chunk-3QCW4VQF.js";
|
|
5
5
|
import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
|
|
6
6
|
export {
|
|
7
7
|
createPythonHostBridge,
|
|
@@ -14,27 +14,30 @@ import {
|
|
|
14
14
|
installPythonLlmPackages,
|
|
15
15
|
pythonExecutorCommands,
|
|
16
16
|
pythonLlmPackages
|
|
17
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
17
|
+
} from "../safe-bash/command-chunks/chunk-HQIZR6EU.js";
|
|
18
18
|
import {
|
|
19
19
|
PythonPackageConflictError,
|
|
20
20
|
createPythonPackageCache,
|
|
21
21
|
createPythonPackageEnvironment,
|
|
22
|
+
createPythonPackageFileManifestStore,
|
|
22
23
|
createPythonPackageManifestStore,
|
|
24
|
+
createPythonPackageStreamingManifestStore,
|
|
23
25
|
publishPythonBuildWheel,
|
|
24
26
|
pythonDocumentPackages
|
|
25
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
27
|
+
} from "../safe-bash/command-chunks/chunk-JADJ4BMN.js";
|
|
26
28
|
import {
|
|
27
29
|
createPythonShellCapability
|
|
28
30
|
} from "../safe-bash/command-chunks/chunk-NHAG4DWL.js";
|
|
29
|
-
import "../safe-bash/command-chunks/chunk-NXCJNPL3.js";
|
|
30
31
|
import {
|
|
31
32
|
createPythonJspiAssets
|
|
32
33
|
} from "../safe-bash/command-chunks/chunk-IOZTDDNT.js";
|
|
33
34
|
import {
|
|
34
35
|
createPythonJspiExecutor
|
|
35
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
36
|
+
} from "../safe-bash/command-chunks/chunk-UJPWPRVB.js";
|
|
36
37
|
import "../safe-bash/command-chunks/chunk-FXWKMNX2.js";
|
|
37
|
-
import "../safe-bash/command-chunks/chunk-
|
|
38
|
+
import "../safe-bash/command-chunks/chunk-L54KVUSY.js";
|
|
39
|
+
import "../safe-bash/command-chunks/chunk-HS2L7I4N.js";
|
|
40
|
+
import "../safe-bash/command-chunks/chunk-UCE77LYV.js";
|
|
38
41
|
import {
|
|
39
42
|
createPythonJspiNativeCall,
|
|
40
43
|
createPythonJspiStatResult,
|
|
@@ -60,7 +63,7 @@ import {
|
|
|
60
63
|
import {
|
|
61
64
|
createPythonHostBridge,
|
|
62
65
|
pythonHostFailureCode
|
|
63
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
66
|
+
} from "../safe-bash/command-chunks/chunk-3QCW4VQF.js";
|
|
64
67
|
import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
|
|
65
68
|
|
|
66
69
|
// packages/safe-bash-command-python/src/default-runtime.ts
|
|
@@ -455,7 +458,9 @@ export {
|
|
|
455
458
|
createPythonLlmToolLoader,
|
|
456
459
|
createPythonPackageCache,
|
|
457
460
|
createPythonPackageEnvironment,
|
|
461
|
+
createPythonPackageFileManifestStore,
|
|
458
462
|
createPythonPackageManifestStore,
|
|
463
|
+
createPythonPackageStreamingManifestStore,
|
|
459
464
|
createPythonShellCapability,
|
|
460
465
|
createPythonSourcePackageEnvironment,
|
|
461
466
|
createPythonSourceSnapshot,
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createPythonJspiExecutor
|
|
3
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
3
|
+
} from "../safe-bash/command-chunks/chunk-UJPWPRVB.js";
|
|
4
4
|
import "../safe-bash/command-chunks/chunk-FXWKMNX2.js";
|
|
5
|
-
import "../safe-bash/command-chunks/chunk-
|
|
5
|
+
import "../safe-bash/command-chunks/chunk-L54KVUSY.js";
|
|
6
|
+
import "../safe-bash/command-chunks/chunk-HS2L7I4N.js";
|
|
7
|
+
import "../safe-bash/command-chunks/chunk-UCE77LYV.js";
|
|
6
8
|
import "../safe-bash/command-chunks/chunk-P56KGNW7.js";
|
|
7
9
|
import "../safe-bash/command-chunks/chunk-NK3FRG5O.js";
|
|
8
10
|
import "../safe-bash/command-chunks/chunk-XNJGNDFW.js";
|
|
9
11
|
import "../safe-bash/command-chunks/chunk-TO6UNFEF.js";
|
|
10
|
-
import "../safe-bash/command-chunks/chunk-
|
|
12
|
+
import "../safe-bash/command-chunks/chunk-3QCW4VQF.js";
|
|
11
13
|
import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
|
|
12
14
|
export {
|
|
13
15
|
createPythonJspiExecutor
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type FileSystem } from "../safe-bash-contracts/index.js";
|
|
2
|
+
/** Persistent caller-owned manifests with native conditional publication.
|
|
3
|
+
* filename selects a single existing manifest file; omit it for scope-keyed files.
|
|
4
|
+
* Publication and structured decoding stream; compatibility get returns owned bytes. */
|
|
5
|
+
export declare function createPythonPackageFileManifestStore({ fs, directory, maxCacheBytes, filename }: {
|
|
6
|
+
readonly fs: FileSystem;
|
|
7
|
+
readonly directory: string;
|
|
8
|
+
readonly maxCacheBytes?: number;
|
|
9
|
+
readonly filename?: string;
|
|
10
|
+
}): {
|
|
11
|
+
openSnapshot(scope: string, options: {
|
|
12
|
+
signal: AbortSignal;
|
|
13
|
+
maxBytes: number;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
revision: string;
|
|
16
|
+
installed: readonly string[];
|
|
17
|
+
version: 0 | 1 | 2 | 3;
|
|
18
|
+
recordCount: number;
|
|
19
|
+
readRecord: (ordinal: number, offset: number) => Promise<string>;
|
|
20
|
+
readField?: (ordinal: number, field: number, offset: number) => Promise<string>;
|
|
21
|
+
close: () => Promise<void>;
|
|
22
|
+
} | undefined>;
|
|
23
|
+
getSnapshot(scope: string, options: {
|
|
24
|
+
signal: AbortSignal;
|
|
25
|
+
maxBytes: number;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
revision: string;
|
|
28
|
+
value: unknown;
|
|
29
|
+
} | undefined>;
|
|
30
|
+
get(scope: string, options: {
|
|
31
|
+
readonly signal: AbortSignal;
|
|
32
|
+
}): Promise<import("./manifest.js").PythonPackageManifest | undefined>;
|
|
33
|
+
compareAndSet(scope: string, revision: string | undefined, bytes: Uint8Array, options: {
|
|
34
|
+
readonly signal: AbortSignal;
|
|
35
|
+
}): Promise<boolean>;
|
|
36
|
+
compareAndSetSource?(scope: string, revision: string | undefined, source: AsyncIterable<Uint8Array>, options: {
|
|
37
|
+
readonly signal: AbortSignal;
|
|
38
|
+
readonly maxBytes: number;
|
|
39
|
+
}): Promise<boolean>;
|
|
40
|
+
compareAndSetSnapshot?(scope: string, revision: string | undefined, snapshot: import("./manifest.js").PythonInstalledSnapshot | readonly string[], options: {
|
|
41
|
+
readonly signal: AbortSignal;
|
|
42
|
+
readonly maxBytes: number;
|
|
43
|
+
}): Promise<boolean>;
|
|
44
|
+
};
|
|
@@ -19,14 +19,59 @@ export interface PythonPackageManifest {
|
|
|
19
19
|
readonly revision: string;
|
|
20
20
|
readonly bytes: Uint8Array;
|
|
21
21
|
}
|
|
22
|
+
/** Validated host snapshot whose metadata stays in caller backing storage. */
|
|
23
|
+
export interface PythonPackageRecordSnapshot {
|
|
24
|
+
readonly revision: string;
|
|
25
|
+
readonly installed: readonly string[];
|
|
26
|
+
readonly version: 0 | 1 | 2 | 3;
|
|
27
|
+
readonly recordCount: number;
|
|
28
|
+
readRecord(ordinal: number, offset: number): Promise<string>;
|
|
29
|
+
/** Optional bounded JSON field transport; fields are numbered 0 through 5. */
|
|
30
|
+
readField?(ordinal: number, field: number, offset: number): Promise<string>;
|
|
31
|
+
close(): Promise<void>;
|
|
32
|
+
}
|
|
22
33
|
export interface PythonPackageManifestStore {
|
|
34
|
+
openSnapshot?(scope: string, options: {
|
|
35
|
+
readonly signal: AbortSignal;
|
|
36
|
+
readonly maxBytes: number;
|
|
37
|
+
}): Promise<PythonPackageRecordSnapshot | undefined>;
|
|
23
38
|
get(scope: string, options: {
|
|
24
39
|
readonly signal: AbortSignal;
|
|
25
40
|
}): Promise<PythonPackageManifest | undefined>;
|
|
41
|
+
/** Optional incremental decoding; the returned value is validated by the environment.
|
|
42
|
+
* Enforce maxBytes on original input and retire all read handles before returning. */
|
|
43
|
+
getSnapshot?(scope: string, options: {
|
|
44
|
+
readonly signal: AbortSignal;
|
|
45
|
+
readonly maxBytes: number;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
readonly revision: string;
|
|
48
|
+
readonly value: unknown;
|
|
49
|
+
} | undefined>;
|
|
26
50
|
compareAndSet(scope: string, revision: string | undefined, bytes: Uint8Array, options: {
|
|
27
51
|
readonly signal: AbortSignal;
|
|
28
52
|
}): Promise<boolean>;
|
|
53
|
+
/** Atomic publication from an already validated byte source. */
|
|
54
|
+
compareAndSetSource?(scope: string, revision: string | undefined, source: AsyncIterable<Uint8Array>, options: {
|
|
55
|
+
readonly signal: AbortSignal;
|
|
56
|
+
readonly maxBytes: number;
|
|
57
|
+
}): Promise<boolean>;
|
|
58
|
+
/** Optional structured publication, avoiding the environment's byte buffer.
|
|
59
|
+
* The store must enforce maxBytes on the serialized representation. */
|
|
60
|
+
compareAndSetSnapshot?(scope: string, revision: string | undefined, snapshot: PythonInstalledSnapshot | readonly string[], options: {
|
|
61
|
+
readonly signal: AbortSignal;
|
|
62
|
+
readonly maxBytes: number;
|
|
63
|
+
}): Promise<boolean>;
|
|
64
|
+
}
|
|
65
|
+
export interface PythonPackageStreamingManifestStore {
|
|
66
|
+
get: PythonPackageManifestStore['get'];
|
|
67
|
+
/** Consume privately, then atomically compare and publish. Source errors must
|
|
68
|
+
* leave the prior snapshot unchanged. A stale revision may return false early. */
|
|
69
|
+
compareAndSet(scope: string, revision: string | undefined, source: AsyncIterable<Uint8Array>, options: {
|
|
70
|
+
readonly signal: AbortSignal;
|
|
71
|
+
}): Promise<boolean>;
|
|
29
72
|
}
|
|
73
|
+
/** Adapt an atomic streaming store without assembling encoded manifest bytes. */
|
|
74
|
+
export declare function createPythonPackageStreamingManifestStore(store: PythonPackageStreamingManifestStore): PythonPackageManifestStore;
|
|
30
75
|
export declare class PythonPackageConflictError extends Error {
|
|
31
76
|
readonly code = "EPACKAGECONFLICT";
|
|
32
77
|
readonly retryable = true;
|
|
@@ -10,6 +10,18 @@ export interface PythonPackageProgress {
|
|
|
10
10
|
readonly totalBytes?: number;
|
|
11
11
|
}
|
|
12
12
|
export interface PythonPackageInstallOptions {
|
|
13
|
+
/** Primary Simple API package index. Defaults to PyPI. */
|
|
14
|
+
readonly indexUrl?: string;
|
|
15
|
+
/** Additional indexes searched alongside the primary index. */
|
|
16
|
+
readonly extraIndexUrls?: readonly string[];
|
|
17
|
+
/** Disable index lookup; direct wheel sources remain available. */
|
|
18
|
+
readonly noIndex?: boolean;
|
|
19
|
+
/** Install requested packages without resolving their runtime dependencies. */
|
|
20
|
+
readonly noDeps?: boolean;
|
|
21
|
+
/** Limit selected versions without installing unrequested packages. */
|
|
22
|
+
readonly constraints?: readonly string[];
|
|
23
|
+
/** Local constraint files; nested -r entries remain requirements. */
|
|
24
|
+
readonly constraintFiles?: readonly string[];
|
|
13
25
|
/** Local source trees whose installed imports remain linked to caller storage. */
|
|
14
26
|
readonly editable?: readonly string[];
|
|
15
27
|
/** Include prerelease and development candidates during dependency resolution. */
|
|
@@ -43,7 +55,8 @@ export interface PythonPackageOptions extends PythonPackageInstallOptions {
|
|
|
43
55
|
readonly maxCacheBytes?: number;
|
|
44
56
|
readonly onProgress?: (event: PythonPackageProgress) => void;
|
|
45
57
|
}
|
|
46
|
-
export interface PythonPackageStart extends Omit<PythonPackageInstallOptions, 'noCache' | 'editable'> {
|
|
58
|
+
export interface PythonPackageStart extends Omit<PythonPackageInstallOptions, 'noCache' | 'editable' | 'constraintFiles' | 'indexUrl' | 'extraIndexUrls' | 'noIndex'> {
|
|
59
|
+
readonly indexUrls?: readonly string[];
|
|
47
60
|
readonly session: string;
|
|
48
61
|
/** Load installer tooling even when no application requirements are installed. */
|
|
49
62
|
readonly bootstrap?: boolean;
|
|
@@ -55,6 +68,10 @@ export interface PythonPackageStart extends Omit<PythonPackageInstallOptions, 'n
|
|
|
55
68
|
readonly legacy?: boolean;
|
|
56
69
|
/** Installed metadata used only by uninstall; application startup still restores code. */
|
|
57
70
|
readonly records?: readonly PythonPackageRecord[] | undefined;
|
|
71
|
+
/** Host-owned records are read through package-record-read; -1 means absent. */
|
|
72
|
+
readonly recordCount?: number;
|
|
73
|
+
/** The default native executor may publish a caller-owned manifest file. */
|
|
74
|
+
readonly streamManifest?: boolean;
|
|
58
75
|
/** Prior installation; only legacy manifests resolve dependencies during restore. */
|
|
59
76
|
readonly restore?: readonly string[];
|
|
60
77
|
/** New or host-configured requirements whose dependency closure is resolved. */
|
|
@@ -71,6 +88,8 @@ export interface PythonPackageContext {
|
|
|
71
88
|
readonly signal: AbortSignal;
|
|
72
89
|
}
|
|
73
90
|
export interface PythonPackagePrepareContext extends PythonPackageContext, PythonPackageInstallOptions, Partial<Pick<import("../safe-bash-contracts/index.js").CommandContext, 'env' | 'stdout' | 'stderr' | 'registerCleanup' | 'args'>> {
|
|
91
|
+
/** Keep metadata in the host session instead of copying it into startup. */
|
|
92
|
+
readonly recordTransport?: 'host' | 'inline';
|
|
74
93
|
readonly uninstall?: PythonPackageStart['uninstall'];
|
|
75
94
|
readonly requirements?: readonly string[];
|
|
76
95
|
readonly requirementFiles?: readonly string[];
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createPythonPackageEnvironment,
|
|
3
3
|
pythonDocumentPackages
|
|
4
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
5
|
-
import "../safe-bash/command-chunks/chunk-
|
|
4
|
+
} from "../safe-bash/command-chunks/chunk-JADJ4BMN.js";
|
|
5
|
+
import "../safe-bash/command-chunks/chunk-HS2L7I4N.js";
|
|
6
|
+
import "../safe-bash/command-chunks/chunk-UCE77LYV.js";
|
|
6
7
|
import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
|
|
7
8
|
export {
|
|
8
9
|
createPythonPackageEnvironment,
|
|
@@ -3,15 +3,14 @@ import { FsError } from "../safe-bash-contracts/errors.js";
|
|
|
3
3
|
export function encodePythonReply(value, maxBytes) {
|
|
4
4
|
let used = 0;
|
|
5
5
|
const ancestors = new Set();
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
if (used > maxBytes)
|
|
6
|
+
const checkSize = (bytes, remaining = maxBytes - used) => {
|
|
7
|
+
if (bytes > remaining)
|
|
9
8
|
throw new FsError('EFBIG', { syscall: 'python reply' });
|
|
10
9
|
};
|
|
10
|
+
const reserve = (bytes) => { checkSize(bytes); used += bytes; };
|
|
11
11
|
const string = (text) => {
|
|
12
12
|
// Every UTF-16 code unit needs at least one output byte, even before quoting.
|
|
13
|
-
|
|
14
|
-
throw new FsError('EFBIG', { syscall: 'python reply' });
|
|
13
|
+
checkSize(text.length + 2);
|
|
15
14
|
reserve(2);
|
|
16
15
|
for (let index = 0; index < text.length; index++) {
|
|
17
16
|
const code = text.charCodeAt(index);
|
|
@@ -33,8 +32,7 @@ export function encodePythonReply(value, maxBytes) {
|
|
|
33
32
|
return text;
|
|
34
33
|
};
|
|
35
34
|
const own = (input, depth) => {
|
|
36
|
-
|
|
37
|
-
throw new FsError('EFBIG', { syscall: 'python reply' });
|
|
35
|
+
checkSize(depth, 64);
|
|
38
36
|
if (input === null || input === undefined) {
|
|
39
37
|
reserve(4);
|
|
40
38
|
return null;
|
|
@@ -57,8 +55,7 @@ export function encodePythonReply(value, maxBytes) {
|
|
|
57
55
|
try {
|
|
58
56
|
if (input instanceof Uint8Array || Array.isArray(input)) {
|
|
59
57
|
// Each slot contributes at least one value byte and one separator.
|
|
60
|
-
|
|
61
|
-
throw new FsError('EFBIG', { syscall: 'python reply' });
|
|
58
|
+
checkSize(input.length);
|
|
62
59
|
reserve(2);
|
|
63
60
|
const output = [];
|
|
64
61
|
for (let index = 0; index < input.length; index++) {
|
|
@@ -78,8 +75,7 @@ export function encodePythonReply(value, maxBytes) {
|
|
|
78
75
|
for (const key in input) {
|
|
79
76
|
if (!Object.hasOwn(input, key))
|
|
80
77
|
continue;
|
|
81
|
-
|
|
82
|
-
throw new FsError('EFBIG', { syscall: 'python reply' });
|
|
78
|
+
checkSize(++visited, maxBytes);
|
|
83
79
|
const descriptor = Object.getOwnPropertyDescriptor(input, key);
|
|
84
80
|
if (!('value' in descriptor))
|
|
85
81
|
throw new TypeError('Accessor Python reply');
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
extractPythonSourceZipFile,
|
|
4
4
|
pythonSourceZipSize,
|
|
5
5
|
splitPythonSourcePath
|
|
6
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
6
|
+
} from "../safe-bash/command-chunks/chunk-RWQKX44L.js";
|
|
7
7
|
import {
|
|
8
8
|
openPythonPackageFile
|
|
9
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
9
|
+
} from "../safe-bash/command-chunks/chunk-UCE77LYV.js";
|
|
10
10
|
import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
|
|
11
11
|
|
|
12
12
|
// packages/safe-bash-command-python/src/source-archive.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
extractPythonSourceZip
|
|
3
|
-
} from "../safe-bash/command-chunks/chunk-
|
|
4
|
-
import "../safe-bash/command-chunks/chunk-
|
|
3
|
+
} from "../safe-bash/command-chunks/chunk-RWQKX44L.js";
|
|
4
|
+
import "../safe-bash/command-chunks/chunk-UCE77LYV.js";
|
|
5
5
|
import "../safe-bash/command-chunks/chunk-65DS4IOB.js";
|
|
6
6
|
export {
|
|
7
7
|
extractPythonSourceZip
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
installPythonPackages,
|
|
3
|
+
loadPythonRuntimePrograms,
|
|
3
4
|
parsePythonInvocation,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
pythonRuntimeRelocation,
|
|
9
|
-
pythonStatProjection,
|
|
10
|
-
pythonTreeCleanup
|
|
11
|
-
} from "../safe-bash/command-chunks/chunk-WY6THI6J.js";
|
|
5
|
+
pythonExecution
|
|
6
|
+
} from "../safe-bash/command-chunks/chunk-L54KVUSY.js";
|
|
7
|
+
import "../safe-bash/command-chunks/chunk-HS2L7I4N.js";
|
|
8
|
+
import "../safe-bash/command-chunks/chunk-UCE77LYV.js";
|
|
12
9
|
import {
|
|
13
10
|
PythonFailure
|
|
14
11
|
} from "../safe-bash/command-chunks/chunk-TO6UNFEF.js";
|
|
@@ -139,25 +136,13 @@ async function runPythonWorker(options) {
|
|
|
139
136
|
return previous;
|
|
140
137
|
});
|
|
141
138
|
if (runtime.version !== "314.0.6") throw new PythonFailure("runtime-abi", { cause: new Error("Python worker requires Pyodide 314.0.6") });
|
|
142
|
-
if (start.packages) await installPythonPackages(runtime, start.packages, startupRequest, start.maxTransferBytes);
|
|
143
|
-
const unavailablePackage = () => {
|
|
144
|
-
throw new Error("Python package transport is only available during installation");
|
|
145
|
-
};
|
|
146
|
-
const publicRuntime = runtime;
|
|
147
|
-
if ("loadPackage" in publicRuntime) publicRuntime.loadPackage = unavailablePackage;
|
|
148
|
-
if (publicRuntime._api?.packageManager) publicRuntime._api.packageManager.downloadPackage = unavailablePackage;
|
|
149
|
-
if (start.installOnly) {
|
|
150
|
-
if (!start.packages?.uninstall) startupWrite("stdout", "Successfully installed requested Python packages");
|
|
151
|
-
postMessage({ type: "exit", exitCode: 0 });
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
139
|
category = "runtime-abi";
|
|
155
140
|
const errno = JSON.parse(runtime.runPython("__import__('json').dumps({k:v for k,v in vars(__import__('errno')).items() if k.startswith('E') and isinstance(v,int)})"));
|
|
156
141
|
const request = createPythonWorkerRequest(start.shared, postMessage, (code) => new runtime.FS.ErrnoError(errno[code] ?? errno.EIO));
|
|
157
142
|
const libraries = runtime._module?.LDSO?.loadedLibsByName;
|
|
158
143
|
if (!libraries) throw new Error("Python runtime native loader ABI unavailable");
|
|
159
144
|
if (typeof runtime._module._Py_FinalizeEx !== "function") throw new Error("Python runtime finalization ABI unavailable");
|
|
160
|
-
runtime.runPython("import sys, zipimport, importlib.machinery, json, os, runpy, traceback");
|
|
145
|
+
runtime.runPython("import sys, zipimport, importlib.machinery, json, os, runpy, traceback, site, sysconfig, pyodide._package_loader");
|
|
161
146
|
runtime.setStdin({ read(buffer) {
|
|
162
147
|
const bytes = request("stdin", Math.min(buffer.length, start.maxTransferBytes));
|
|
163
148
|
if (!Array.isArray(bytes) || bytes.length > buffer.length) throw new runtime.FS.ErrnoError(errno.EIO);
|
|
@@ -197,6 +182,7 @@ async function runPythonWorker(options) {
|
|
|
197
182
|
if (name.startsWith("/lib/")) libraries[start.runtimeMount + name] = library;
|
|
198
183
|
}
|
|
199
184
|
runtime.globals.set("_safe_runtime_mount", start.runtimeMount);
|
|
185
|
+
const { pythonRuntimeRelocation, pythonImportMetadata, pythonDirectoryEntries, pythonStatProjection, pythonHardLinks, pythonTreeCleanup, pythonMetadataDiscovery } = await loadPythonRuntimePrograms();
|
|
200
186
|
runtime.runPython(pythonRuntimeRelocation);
|
|
201
187
|
runtime.globals.set("_safe_import_stat", (path) => {
|
|
202
188
|
try {
|
|
@@ -237,6 +223,14 @@ async function runPythonWorker(options) {
|
|
|
237
223
|
return JSON.stringify({ errno: error.errno ?? errno.EIO });
|
|
238
224
|
}
|
|
239
225
|
});
|
|
226
|
+
runtime.globals.set("_safe_directory_cursor", (operation, value) => {
|
|
227
|
+
try {
|
|
228
|
+
if (!["directoryOpen", "directoryNext", "close"].includes(operation)) throw new runtime.FS.ErrnoError(errno.EINVAL);
|
|
229
|
+
return JSON.stringify({ value: request(operation, value) });
|
|
230
|
+
} catch (error) {
|
|
231
|
+
return JSON.stringify({ errno: error.errno ?? errno.EIO });
|
|
232
|
+
}
|
|
233
|
+
});
|
|
240
234
|
runtime.runPython(pythonStatProjection);
|
|
241
235
|
runtime.globals.set("_safe_hard_link", (source, destination, follow) => {
|
|
242
236
|
try {
|
|
@@ -267,6 +261,25 @@ async function runPythonWorker(options) {
|
|
|
267
261
|
});
|
|
268
262
|
runtime.runPython(pythonTreeCleanup);
|
|
269
263
|
runtime.globals.set("_safe_invocation_json", JSON.stringify(start.invocation));
|
|
264
|
+
category = "startup";
|
|
265
|
+
if (start.packages) {
|
|
266
|
+
runtime.globals.set("_safe_metadata_root", () => request("package-root", start.packages.session));
|
|
267
|
+
runtime.runPython(pythonMetadataDiscovery);
|
|
268
|
+
const installationRoot = start.packages.requirements.length || start.packages.uninstall || start.packages.bootstrap ? request("package-root", start.packages.session) : void 0;
|
|
269
|
+
await installPythonPackages(runtime, start.packages, request, start.maxTransferBytes, installationRoot);
|
|
270
|
+
}
|
|
271
|
+
const unavailablePackage = () => {
|
|
272
|
+
throw new Error("Python package transport is only available during installation");
|
|
273
|
+
};
|
|
274
|
+
const publicRuntime = runtime;
|
|
275
|
+
if ("loadPackage" in publicRuntime) publicRuntime.loadPackage = unavailablePackage;
|
|
276
|
+
if (publicRuntime._api?.packageManager) publicRuntime._api.packageManager.downloadPackage = unavailablePackage;
|
|
277
|
+
if (start.installOnly) {
|
|
278
|
+
if (!start.packages?.uninstall) startupWrite("stdout", "Successfully installed requested Python packages");
|
|
279
|
+
const finalized2 = runtime._module._Py_FinalizeEx();
|
|
280
|
+
postMessage({ type: "exit", exitCode: finalized2 < 0 ? 120 : 0 });
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
270
283
|
postMessage({ type: "ready" });
|
|
271
284
|
category = "runtime";
|
|
272
285
|
const exitCode = runtime.runPython(pythonExecution);
|