@wasm-oj/cli 0.2.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.
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/THIRD_PARTY_NOTICES.md +302 -0
- package/bin/woj.js +5 -0
- package/dist/index.d.ts +286 -0
- package/dist/index.js +3685 -0
- package/licenses/napi-rs-keyring-MIT.txt +21 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 JacobLinCool
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# `@wasm-oj/cli`
|
|
2
|
+
|
|
3
|
+
`woj` is the single local-first command-line interface for WASM-OJ. Local build,
|
|
4
|
+
run, test, benchmark, and judge commands never use the network. Student and
|
|
5
|
+
Organizer commands address explicit immutable resources on the configured
|
|
6
|
+
server. `--offline` rejects every network-capable command before dispatch.
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
woj config set server https://example.invalid
|
|
10
|
+
woj auth login
|
|
11
|
+
woj problem pull <problem-version-id> --language cpp --locale zh-TW
|
|
12
|
+
woj test
|
|
13
|
+
woj submit --wait
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Run `woj --help` to see the complete role-based command tree.
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
This file covers third-party software distributed by the WASM-OJ code and
|
|
4
|
+
toolchain packages, including the content-addressed compiler and runtime assets
|
|
5
|
+
mirrored under `public/toolchains`. The WASM-OJ source code is licensed under the MIT License in
|
|
6
|
+
`LICENSE`; that license does not replace the terms of any component listed
|
|
7
|
+
below.
|
|
8
|
+
|
|
9
|
+
The canonical machine-readable component, distribution, source-revision, and
|
|
10
|
+
license-file inventory is `licenses/components.json`. Its verifier binds every
|
|
11
|
+
listed file to a SHA-256 digest and rejects unlisted toolchain or license files.
|
|
12
|
+
|
|
13
|
+
## JavaScript runtime dependency
|
|
14
|
+
|
|
15
|
+
### N-API keyring
|
|
16
|
+
|
|
17
|
+
- Component: `@napi-rs/keyring` 1.3.0
|
|
18
|
+
- Source revision: `Brooooooklyn/keyring-node@e46be75c3ba8d5fde6b88a17c6153b87ffe4b946`
|
|
19
|
+
- Source: <https://github.com/Brooooooklyn/keyring-node/tree/e46be75c3ba8d5fde6b88a17c6153b87ffe4b946>
|
|
20
|
+
- License: MIT
|
|
21
|
+
- License material: `licenses/napi-rs-keyring-MIT.txt`
|
|
22
|
+
|
|
23
|
+
The `woj` CLI stores remote access tokens in the operating system credential
|
|
24
|
+
store through this native binding. It does not provide a plaintext fallback.
|
|
25
|
+
|
|
26
|
+
### es-module-lexer
|
|
27
|
+
|
|
28
|
+
- Component: `es-module-lexer` 2.3.1
|
|
29
|
+
- npm integrity: `sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==`
|
|
30
|
+
- Source revision: `guybedford/es-module-lexer@2b2e6209bac5c06c6ba457f9730014613e1128fb`
|
|
31
|
+
- Source: <https://github.com/guybedford/es-module-lexer/tree/2b2e6209bac5c06c6ba457f9730014613e1128fb>
|
|
32
|
+
- License: MIT
|
|
33
|
+
- License material: `licenses/es-module-lexer-MIT.txt`
|
|
34
|
+
|
|
35
|
+
WASM-OJ uses es-module-lexer inside the browser runner Worker to reject every
|
|
36
|
+
static or dynamic transitive import before loading a content-pinned runtime
|
|
37
|
+
driver plug-in.
|
|
38
|
+
|
|
39
|
+
### fflate
|
|
40
|
+
|
|
41
|
+
- Component: `fflate` 0.8.3
|
|
42
|
+
- Source revision: `101arrowz/fflate@v0.8.3`
|
|
43
|
+
- Source: <https://github.com/101arrowz/fflate/tree/v0.8.3>
|
|
44
|
+
- License: MIT
|
|
45
|
+
- License material: `licenses/fflate-MIT.txt`
|
|
46
|
+
|
|
47
|
+
WASM-OJ uses fflate for bounded dependency archive extraction and to verify the
|
|
48
|
+
canonical Go module `h1:` hash over module ZIP entries.
|
|
49
|
+
|
|
50
|
+
### Wasmer JavaScript SDK
|
|
51
|
+
|
|
52
|
+
- Component: `@wasmer/sdk` 0.10.0
|
|
53
|
+
- npm integrity: `sha512-YQ+s5tGag6P/I8kp9BTH+XhjoS9UFvWiZJvnWEEovClHffhYToKhprWr4UJG7wLP7c/2HQpGkF7ZrjoUvKjdmA==`
|
|
54
|
+
- Source revision: `wasmerio/wasmer-js@93b8b738ebd3ee57e118da0f0eb795b97d5b999e`
|
|
55
|
+
- Locked Rust graph: `Cargo.lock` SHA-256
|
|
56
|
+
`d352926f3f05e3d4308c4e261711d07db568e5c2b4387067180f920da074791f`
|
|
57
|
+
- Source: <https://github.com/wasmerio/wasmer-js/tree/93b8b738ebd3ee57e118da0f0eb795b97d5b999e>
|
|
58
|
+
- License: MIT
|
|
59
|
+
- License material: `licenses/wasmer-sdk-MIT.txt`,
|
|
60
|
+
`licenses/wasmer-sdk-dependencies.html`, and
|
|
61
|
+
`licenses/wasmer-sdk-dependencies.json`
|
|
62
|
+
|
|
63
|
+
WASM-OJ consumes the official npm artifact without patching the installed
|
|
64
|
+
package. The generated dependency report covers every package in the pinned
|
|
65
|
+
normal Cargo dependency graph selected for `wasm32-unknown-unknown`; its compact
|
|
66
|
+
inventory binds all 332 package identities and the exact HTML report digest.
|
|
67
|
+
|
|
68
|
+
## Distributed toolchain assets
|
|
69
|
+
|
|
70
|
+
### TypeScript-Go
|
|
71
|
+
|
|
72
|
+
- Distributed asset: `typescript-7.0.2.wasm.gz.bin`
|
|
73
|
+
- Compressed SHA-256: `06e58ce887d95d1895055699b8dc96a1cde7d1f2baa48de40f9b790e3271dc16`
|
|
74
|
+
- Expanded Wasm SHA-256: `27c931087b3b0cc48804f3749b07eb710538c4ab175969db8a8ff680e6ec4fde`
|
|
75
|
+
- Source revision: `microsoft/typescript-go@2bd066d87f5bafd315be9f40889d0a60b9e58e0b`
|
|
76
|
+
- Source: <https://github.com/microsoft/typescript-go/tree/2bd066d87f5bafd315be9f40889d0a60b9e58e0b>
|
|
77
|
+
- Build runtime: Go 1.26.3 standard library (`GOOS=wasip1`, `GOARCH=wasm`)
|
|
78
|
+
- Licenses: TypeScript-Go Apache-2.0; Go standard library BSD-3-Clause
|
|
79
|
+
- License and attribution material: `licenses/Apache-2.0.txt`,
|
|
80
|
+
`licenses/typescript-go-NOTICE.txt`, and
|
|
81
|
+
`licenses/go-BSD-3-Clause.txt`
|
|
82
|
+
|
|
83
|
+
The TypeScript-Go notice is carried from the exact pinned source revision
|
|
84
|
+
(normalized from CRLF to LF without changing its text). The Go license is from
|
|
85
|
+
the exact `go1.26.3` source tag used by the reproducible build script.
|
|
86
|
+
|
|
87
|
+
### Go compiler toolchain
|
|
88
|
+
|
|
89
|
+
- Distributed assets: `go-1.26.5-wasip1.webc.gz.bin`,
|
|
90
|
+
`go-1.26.5-wasip1.stdlib.gz.bin`, and
|
|
91
|
+
`go-1.26.5-wasip1.manifest.json`
|
|
92
|
+
- Source: <https://go.dev/dl/go1.26.5.src.tar.gz>
|
|
93
|
+
- Source archive SHA-256:
|
|
94
|
+
`495be4bc87176ac567392e5b4116abd98466d33d7b49d41e764ccc6976b2dc42`
|
|
95
|
+
- License: BSD-3-Clause
|
|
96
|
+
- License material: `licenses/go-BSD-3-Clause.txt`
|
|
97
|
+
|
|
98
|
+
WASM-OJ packages the standard Go `compile` and `link` commands plus the matching
|
|
99
|
+
349-package `GOOS=wasip1 GOARCH=wasm` standard library. The stored license is
|
|
100
|
+
byte-identical to `go/LICENSE` in the exact Go 1.26.5 source distribution.
|
|
101
|
+
|
|
102
|
+
### Java compiler toolchain
|
|
103
|
+
|
|
104
|
+
- Distributed assets: `java-teavm-0.13.1.wasi.compiler.webc.gz.bin`,
|
|
105
|
+
`java-teavm-0.13.1.compile-classlib.bin`, and
|
|
106
|
+
`java-teavm-0.13.1.runtime-classlib.bin`
|
|
107
|
+
- TeaVM Java compiler source: <https://github.com/konsoletyper/teavm-javac/tree/7e4a44cf521694a4e326e33850dd8aec165eb5c9>
|
|
108
|
+
- TeaVM core source: `konsoletyper/teavm@b3a245b7d9034ff35cdfab2def057a3d4f256efb`
|
|
109
|
+
plus the pinned WASI compiler and math-intrinsic patch
|
|
110
|
+
- Compiler package compressed SHA-256:
|
|
111
|
+
`129f1f51d591e58954f88787d36396b856a9a68ba3ae9c9d14f20bd67c2c7722`
|
|
112
|
+
- Compiler package expanded SHA-256:
|
|
113
|
+
`f8f86761cf31062565187e4a66f73b6903f257fe84c0ce70ea1cd28441b6c2e9`
|
|
114
|
+
- Licenses: TeaVM Apache-2.0; OpenJDK class library GPL-2.0 with Classpath
|
|
115
|
+
Exception
|
|
116
|
+
- License material: `licenses/Apache-2.0.txt` and
|
|
117
|
+
`licenses/openjdk-21-GPL-2.0-with-Classpath-exception.txt`
|
|
118
|
+
|
|
119
|
+
The compiler emits standalone `wasip1` modules. The class-library archives are
|
|
120
|
+
mounted only during compilation and are not included in submitted artifacts.
|
|
121
|
+
|
|
122
|
+
### QuickJS-ng
|
|
123
|
+
|
|
124
|
+
- Distributed asset: `quickjs-0.15.1.wasm.gz.bin`
|
|
125
|
+
- Compressed SHA-256: `8c7f0588210490e7d77f198fc91f72c1b94787ab4c359c4786ca59a363c4f5e8`
|
|
126
|
+
- Expanded Wasm SHA-256: `956bf2b3700690e1817034eb8e063cfd9781c66b4bffa244ef4f9445656ccfa1`
|
|
127
|
+
- Source revision: `quickjs-ng/quickjs@fd0a0210b7be00957751871e7e01b8291268fc29`
|
|
128
|
+
- Source: <https://github.com/quickjs-ng/quickjs/tree/fd0a0210b7be00957751871e7e01b8291268fc29>
|
|
129
|
+
- Build SDK: [WASI SDK 24.0 release archive for arm64 macOS](https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-24/wasi-sdk-24.0-arm64-macos.tar.gz),
|
|
130
|
+
SHA-256 `aeae999396d5f5caa5ce419f52e83c35869d5fd21d40af80acba2c80f51b0b3a`
|
|
131
|
+
- WASI SDK source revision: `WebAssembly/wasi-sdk@d2bea01edcc46f731156a817f710cdd9fc9c1c19`
|
|
132
|
+
- LLVM and compiler-rt source revision: `llvm/llvm-project@26a1d6601d727a96f4301d0d8647b5a42760ae0c`
|
|
133
|
+
- WASI libc source revision: `WebAssembly/wasi-libc@b9ef79d7dbd47c6c5bafdae760823467c2f60b70`
|
|
134
|
+
- Sources: <https://github.com/WebAssembly/wasi-sdk/tree/d2bea01edcc46f731156a817f710cdd9fc9c1c19>,
|
|
135
|
+
<https://github.com/llvm/llvm-project/tree/26a1d6601d727a96f4301d0d8647b5a42760ae0c>, and
|
|
136
|
+
<https://github.com/WebAssembly/wasi-libc/tree/b9ef79d7dbd47c6c5bafdae760823467c2f60b70>
|
|
137
|
+
- Licenses: QuickJS-ng and the WASM-OJ adapter MIT; LLVM compiler-rt
|
|
138
|
+
Apache-2.0 WITH LLVM-exception plus the third-party terms collected in its
|
|
139
|
+
license; WASI libc Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT, with
|
|
140
|
+
separately licensed dlmalloc, cloudlibc-derived, and musl-derived portions
|
|
141
|
+
- License and attribution material: `licenses/quickjs-ng-MIT.txt`,
|
|
142
|
+
`licenses/wasi-sdk-24.0-Apache-2.0-LLVM-exception.txt`,
|
|
143
|
+
`licenses/wasi-sdk-24.0-compiler-rt-LICENSE.txt`,
|
|
144
|
+
`licenses/wasi-libc-b9ef79d-LICENSE.txt`,
|
|
145
|
+
`licenses/wasi-libc-b9ef79d-Apache-2.0.txt`,
|
|
146
|
+
`licenses/wasi-libc-b9ef79d-MIT.txt`,
|
|
147
|
+
`licenses/wasi-libc-b9ef79d-cloudlibc-BSD-2-Clause.txt`,
|
|
148
|
+
`licenses/wasi-libc-b9ef79d-dlmalloc-CC0-NOTICE.txt`, and
|
|
149
|
+
`licenses/wasi-libc-b9ef79d-emmalloc-NOTICE.txt`, and
|
|
150
|
+
`licenses/wasi-libc-b9ef79d-musl-MIT.txt`
|
|
151
|
+
|
|
152
|
+
The reproducible build links `crt1-command.o`, `libm.a`,
|
|
153
|
+
`libwasi-emulated-signal.a`, `libc.a`, and
|
|
154
|
+
`libclang_rt.builtins-wasm32.a` from that one digest-verified SDK archive.
|
|
155
|
+
Linker tracing confirms that the selected allocator is dlmalloc, not emmalloc.
|
|
156
|
+
WASM-OJ distributes the resulting stripped Wasm runtime, not the host Clang, LLD,
|
|
157
|
+
or strip executables. The build script nevertheless verifies those executables
|
|
158
|
+
and every linked archive by SHA-256 before compiling.
|
|
159
|
+
|
|
160
|
+
### Rust compiler and standard libraries
|
|
161
|
+
|
|
162
|
+
- Distributed assets: `rust-1.91.1-dev.webc.gz.bin` and
|
|
163
|
+
`rust-1.91.1-dev.manifest.json`
|
|
164
|
+
- Build source: `olimpiadi-informatica/wasm-compilers@ae62cab6adf0665377d19ffa39daeaf758290431`
|
|
165
|
+
- Build artifact: GitHub Actions run `26545267884`, `rust.tar.br` SHA-256
|
|
166
|
+
`ba0096d05275954d852a3fb3a9c4c9438dad501f8e428b867c0b88cfa7301c14`
|
|
167
|
+
- Linker payload: `@yowasp/clang@22.0.0-git20542-10`, npm archive SHA-256
|
|
168
|
+
`6230ea1afa9691fa065935cf68c01642ff9b31c183fe8ac64cdfda025df06009`;
|
|
169
|
+
its exact source revisions and license closure are recorded in the following
|
|
170
|
+
“Clang, LLD, libc++, and WASI libc” section
|
|
171
|
+
- Rust source submodule: `rust-lang/rust@ed61e7d7e242494fb7057f2657300d9e77bb4fcb`
|
|
172
|
+
- LLVM source submodule: `llvm/llvm-project@87f0227cb60147a26a1eeb4fb06e3b505e9c7261`
|
|
173
|
+
- GCC source submodule: `gcc-mirror/gcc@ae91b5dd14920ff9671db8ff80c0d763d25f977f`
|
|
174
|
+
- Source: <https://github.com/olimpiadi-informatica/wasm-compilers/tree/ae62cab6adf0665377d19ffa39daeaf758290431>
|
|
175
|
+
- Build repository license: Apache-2.0
|
|
176
|
+
- Rust license: MIT OR Apache-2.0; LLVM license: Apache-2.0 WITH LLVM-exception
|
|
177
|
+
- `libloading` 0.8.8: ISC; Cargo.lock checksum
|
|
178
|
+
`07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667`
|
|
179
|
+
- GCC libstdc++ runtime components: GPL-3.0 with GCC Runtime Library
|
|
180
|
+
Exception 3.1
|
|
181
|
+
- License and attribution texts: `licenses/rust-MIT.txt`,
|
|
182
|
+
`licenses/Apache-2.0.txt`, `licenses/LLVM-exception.txt`,
|
|
183
|
+
`licenses/rust-COPYRIGHT.txt`, `licenses/rust-COPYRIGHT.html`,
|
|
184
|
+
`licenses/rust-COPYRIGHT-library.html`, `licenses/libloading-ISC.txt`,
|
|
185
|
+
`licenses/GPL-3.0.txt`, and
|
|
186
|
+
`licenses/GCC-Runtime-Library-Exception-3.1.txt`
|
|
187
|
+
|
|
188
|
+
The pinned build repository contains its complete Rust/LLVM source revisions,
|
|
189
|
+
the applied `rust.patch`, and the GitHub workflow used for the pinned artifact.
|
|
190
|
+
That workflow builds libstdc++ from the pinned GCC submodule before building
|
|
191
|
+
LLVM and rustc. The custom `rust.tar.br` omits Rust's generated binary-release
|
|
192
|
+
notices, so WASM-OJ carries the complete `COPYRIGHT.html` and
|
|
193
|
+
`COPYRIGHT-library.html` from the official Rust 1.91.1 release for the exact
|
|
194
|
+
`ed61e7d7e` source revision. The official release archive used to source those
|
|
195
|
+
notices is `rustc-1.91.1-x86_64-unknown-linux-gnu.tar.xz`, SHA-256
|
|
196
|
+
`4b4c596fc5268435c310a79c2e231a5a3567572c930ac0740ef9e147e83baf4e`.
|
|
197
|
+
|
|
198
|
+
WASM-OJ copies the matching `wasm32-wasip1-threads` sysroot, replaces rustc's
|
|
199
|
+
WASI `random_get` and `clock_time_get` imports with deterministic internal
|
|
200
|
+
implementations, and packages the transformed atom and sysroot together with
|
|
201
|
+
the verified YoWASP LLVM linker atom and resources into one WebC. The provenance
|
|
202
|
+
manifest records source-rustc, transformed-rustc, linker archive, linker core,
|
|
203
|
+
and linker-resource SHA-256 digests. These transformations and the generated
|
|
204
|
+
WebC do not relicense Rust or any third-party component identified by the exact
|
|
205
|
+
Rust COPYRIGHT reports and YoWASP source closure carried here.
|
|
206
|
+
|
|
207
|
+
### Clang, LLD, libc++, PCH, and WASI libc
|
|
208
|
+
|
|
209
|
+
- Distributed assets: `clang-22.0.0-git20542-10.webc.gz.bin`, the matching
|
|
210
|
+
debug/release libc++ PCH payloads, and their admission manifest
|
|
211
|
+
- Clang source artifact: `@yowasp/clang@22.0.0-git20542-10`, npm archive
|
|
212
|
+
SHA-256 `6230ea1afa9691fa065935cf68c01642ff9b31c183fe8ac64cdfda025df06009`
|
|
213
|
+
- YoWASP source revision: `YoWASP/clang@944dd7c774954180e621cc8e12984023a7f8bcbe`
|
|
214
|
+
- LLVM source revision: `YoWASP/llvm-project@97196c8eeb1d495fa43bb8af2fb26af5ef5b89fb`
|
|
215
|
+
- WASI libc source revision: `WebAssembly/wasi-libc@ac020b86fd44bafe60aa4fa12f407d16e3731329`
|
|
216
|
+
- Sources: <https://github.com/YoWASP/clang/tree/944dd7c774954180e621cc8e12984023a7f8bcbe>
|
|
217
|
+
and <https://github.com/YoWASP/llvm-project/tree/97196c8eeb1d495fa43bb8af2fb26af5ef5b89fb>
|
|
218
|
+
- LLVM license: Apache-2.0 WITH LLVM-exception
|
|
219
|
+
- WASI libc license: Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT,
|
|
220
|
+
with separately licensed portions identified by the upstream notice
|
|
221
|
+
- License and attribution texts: `licenses/LLVM-exception.txt`,
|
|
222
|
+
`licenses/Apache-2.0.txt`, `licenses/wasi-libc-ac020b86-LICENSE.txt`,
|
|
223
|
+
`licenses/wasi-libc-ac020b86-musl-fts-BSD-3-Clause.txt`,
|
|
224
|
+
`licenses/wasi-sdk-24.0-Apache-2.0-LLVM-exception.txt`,
|
|
225
|
+
`licenses/wasi-libc-b9ef79d-Apache-2.0.txt`,
|
|
226
|
+
`licenses/wasi-libc-b9ef79d-MIT.txt`,
|
|
227
|
+
`licenses/wasi-libc-b9ef79d-cloudlibc-BSD-2-Clause.txt`,
|
|
228
|
+
`licenses/wasi-libc-b9ef79d-dlmalloc-CC0-NOTICE.txt`,
|
|
229
|
+
`licenses/wasi-libc-b9ef79d-emmalloc-NOTICE.txt`, and
|
|
230
|
+
`licenses/wasi-libc-b9ef79d-musl-MIT.txt`
|
|
231
|
+
|
|
232
|
+
The published npm manifest incorrectly says `ISC` and omits a license file.
|
|
233
|
+
The exact source revision's root `LICENSE.txt` and npm README both explicitly
|
|
234
|
+
license the package under Apache-2.0. WASM-OJ does not redistribute the npm
|
|
235
|
+
JavaScript wrapper: the packaging script digest-verifies and extracts only the
|
|
236
|
+
LLVM core and LLVM/WASI resource payload, whose complete upstream license terms
|
|
237
|
+
are carried above. The common Apache, MIT, cloudlibc, dlmalloc, emmalloc, and
|
|
238
|
+
musl terms are byte-identical between the pinned `ac020b86` and `b9ef79d7`
|
|
239
|
+
source trees, so the inventory reuses the exact digest-bound `b9ef79d7` copies;
|
|
240
|
+
the revision-specific root and musl-fts notices remain separate. The generated
|
|
241
|
+
WebC and pinned command manifests do not relicense those payloads.
|
|
242
|
+
|
|
243
|
+
### CPython 3.14.6 for WASI P1
|
|
244
|
+
|
|
245
|
+
- Distributed assets: `python-3.14.6-wasip1.webc.gz.bin` and its provenance
|
|
246
|
+
manifest `python-3.14.6-wasip1.manifest.json`
|
|
247
|
+
- Official source archive: <https://www.python.org/ftp/python/3.14.6/Python-3.14.6.tar.xz>,
|
|
248
|
+
SHA-256 `143b1dddefaec3bd2e21e3b839b34a2b7fb9842272883c576420d605e9f30c63`
|
|
249
|
+
- Official SPDX document: <https://www.python.org/ftp/python/3.14.6/Python-3.14.6.tar.xz.spdx.json>,
|
|
250
|
+
SHA-256 `1f5d394856783fa77e1f1db280f84eabf693bffc1fb06a747f7116de9f99f3bd`
|
|
251
|
+
- Expanded WebC SHA-256:
|
|
252
|
+
`454ffc53936aa13a0d7f4afbb5bd50ada339c8ebd04bbf27ea19e4104cf43207`
|
|
253
|
+
- Distributed gzip SHA-256:
|
|
254
|
+
`218cd20ac4abb443e0700816010a615a345a43eae623a0232da2227135a6c7a6`
|
|
255
|
+
- Provenance manifest SHA-256:
|
|
256
|
+
`054eccad04a7cee7ba1661062142ef0d639976850981eab8fc785f48eb26129e`
|
|
257
|
+
- Deterministically exported `WOJFS002` runtime archive SHA-256:
|
|
258
|
+
`44d894f91487f20c2bb04fe496a9343db37d8720fb706472c2b4a7f3300db039`
|
|
259
|
+
- CPython license: Python Software Foundation License Version 2 and the
|
|
260
|
+
historical notices reproduced with it
|
|
261
|
+
- License text: `licenses/cpython-3.14.6-PSF-2.0.txt`
|
|
262
|
+
- Bundled third-party source: Expat 2.8.1 (MIT), HACL* revision
|
|
263
|
+
`8ba599b2f6c9701b3dc961db895b0856a2210f76` (MIT), and libmpdec 2.5.1
|
|
264
|
+
(BSD-2-Clause); their exact notices are
|
|
265
|
+
`licenses/cpython-expat-2.8.1-MIT.txt`,
|
|
266
|
+
`licenses/cpython-hacl-star-8ba599b-MIT.txt`, and
|
|
267
|
+
`licenses/cpython-libmpdec-2.5.1-BSD-2-Clause.txt`.
|
|
268
|
+
- Build toolchain: WASI SDK 24.0 revision
|
|
269
|
+
`d2bea01edcc46f731156a817f710cdd9fc9c1c19`, LLVM revision
|
|
270
|
+
`26a1d6601d727a96f4301d0d8647b5a42760ae0c`, and wasi-libc revision
|
|
271
|
+
`b9ef79d7dbd47c6c5bafdae760823467c2f60b70`.
|
|
272
|
+
|
|
273
|
+
WASM-OJ compiles this package from the pinned official sources, disables
|
|
274
|
+
`_socket`, removes test/development-only standard-library roots, canonicalizes
|
|
275
|
+
build-only sysconfig paths, and packages the complete source SPDX document and
|
|
276
|
+
applicable CPython, third-party, compiler-rt, WASI SDK, and wasi-libc notices
|
|
277
|
+
inside the WebC. The build does not consume or redistribute the retired Wasmer
|
|
278
|
+
Registry CPython/WASIX package, and WASM-OJ's MIT license does not apply to these
|
|
279
|
+
third-party contents.
|
|
280
|
+
|
|
281
|
+
## WASM-OJ runtime-core dependency closure
|
|
282
|
+
|
|
283
|
+
The browser runner embeds `wasm-oj-runtime-core` and its locked normal
|
|
284
|
+
dependency graph for the `wasm32-unknown-unknown` target with the `web` feature.
|
|
285
|
+
The complete generated license report, including the selected license text for
|
|
286
|
+
every dependency, is `licenses/runtime-core-dependencies.html`. Its compact,
|
|
287
|
+
machine-verifiable package inventory and report digest are recorded in
|
|
288
|
+
`licenses/runtime-core-dependencies.json`. Both files are generated with pinned
|
|
289
|
+
`cargo-about` 0.9.1 and are verified against `crates/runtime-core/Cargo.lock`.
|
|
290
|
+
|
|
291
|
+
## Vendored Rust crates
|
|
292
|
+
|
|
293
|
+
WASM-OJ's source tree also contains patched source copies used to build the
|
|
294
|
+
runtime and packaging tools:
|
|
295
|
+
|
|
296
|
+
- `vendor/shared-buffer`: MIT OR Apache-2.0; see
|
|
297
|
+
`vendor/shared-buffer/LICENSE_MIT.md` and
|
|
298
|
+
`vendor/shared-buffer/LICENSE_APACHE.md`.
|
|
299
|
+
- `vendor/virtual-fs`: MIT; see `vendor/virtual-fs/LICENSE`.
|
|
300
|
+
|
|
301
|
+
These vendored sources are build inputs and are not included in the npm package
|
|
302
|
+
allowlist.
|
package/bin/woj.js
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { JudgeResult, parseStandaloneProblemBundle, ToolchainDescriptor } from '@wasm-oj/core';
|
|
2
|
+
|
|
3
|
+
declare const WOJ_CLI_VERSION = "0.2.0";
|
|
4
|
+
/** Stable process exit codes. They are part of the public CLI contract. */
|
|
5
|
+
declare const WOJ_EXIT: Readonly<{
|
|
6
|
+
readonly success: 0;
|
|
7
|
+
readonly unsuccessful: 1;
|
|
8
|
+
readonly usage: 2;
|
|
9
|
+
readonly authentication: 3;
|
|
10
|
+
readonly integrity: 4;
|
|
11
|
+
readonly conflict: 5;
|
|
12
|
+
readonly infrastructure: 6;
|
|
13
|
+
readonly localIntegrity: 7;
|
|
14
|
+
}>;
|
|
15
|
+
type WojExitCode = typeof WOJ_EXIT[keyof typeof WOJ_EXIT];
|
|
16
|
+
type CommandBoundary = "local" | "remote" | "network";
|
|
17
|
+
interface CommandSpec {
|
|
18
|
+
readonly path: readonly string[];
|
|
19
|
+
readonly summary: string;
|
|
20
|
+
readonly boundary: CommandBoundary;
|
|
21
|
+
readonly usage?: string;
|
|
22
|
+
readonly options?: Readonly<Record<string, "boolean" | "string" | "repeatable">>;
|
|
23
|
+
}
|
|
24
|
+
/** The complete Issue #42 command tree. Every leaf is dispatched explicitly. */
|
|
25
|
+
declare const WOJ_COMMANDS: readonly CommandSpec[];
|
|
26
|
+
declare function commandKey(path: readonly string[]): string;
|
|
27
|
+
declare const COMMAND_BY_KEY: ReadonlyMap<string, CommandSpec>;
|
|
28
|
+
|
|
29
|
+
declare class CliError extends Error {
|
|
30
|
+
readonly exitCode: WojExitCode;
|
|
31
|
+
readonly code: string;
|
|
32
|
+
constructor(message: string, options?: {
|
|
33
|
+
readonly exitCode?: WojExitCode;
|
|
34
|
+
readonly code?: string;
|
|
35
|
+
readonly cause?: unknown;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
declare function usageError(message: string): CliError;
|
|
39
|
+
declare function unavailableError(message: string, cause?: unknown): CliError;
|
|
40
|
+
declare function asCliError(error: unknown): CliError;
|
|
41
|
+
|
|
42
|
+
declare const WOJ_ACCESS_TOKEN: RegExp;
|
|
43
|
+
declare function isWojAccessToken(value: unknown): value is string;
|
|
44
|
+
interface TokenStore {
|
|
45
|
+
get(serverOrigin: string): Promise<string | undefined>;
|
|
46
|
+
set(serverOrigin: string, token: string): Promise<void>;
|
|
47
|
+
delete(serverOrigin: string): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
declare class OsKeychainTokenStore implements TokenStore {
|
|
50
|
+
private constructorPromise?;
|
|
51
|
+
private constructor_;
|
|
52
|
+
private entry;
|
|
53
|
+
get(serverOrigin: string): Promise<string | undefined>;
|
|
54
|
+
set(serverOrigin: string, token: string): Promise<void>;
|
|
55
|
+
delete(serverOrigin: string): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
declare class MemoryTokenStore implements TokenStore {
|
|
58
|
+
private readonly tokens;
|
|
59
|
+
get(serverOrigin: string): Promise<string | undefined>;
|
|
60
|
+
set(serverOrigin: string, token: string): Promise<void>;
|
|
61
|
+
delete(serverOrigin: string): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
declare class ApiError extends CliError {
|
|
65
|
+
readonly status: number;
|
|
66
|
+
readonly details?: unknown;
|
|
67
|
+
readonly verificationUrl?: string;
|
|
68
|
+
constructor(status: number, code: string, message: string, details?: unknown);
|
|
69
|
+
}
|
|
70
|
+
interface ApiRequestOptions {
|
|
71
|
+
readonly method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
72
|
+
readonly body?: unknown;
|
|
73
|
+
readonly authenticated?: boolean | "optional";
|
|
74
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
75
|
+
}
|
|
76
|
+
interface RemoteClient {
|
|
77
|
+
readonly origin: string;
|
|
78
|
+
request(path: string, options?: ApiRequestOptions): Promise<unknown>;
|
|
79
|
+
requestBytes(path: string, options?: Omit<ApiRequestOptions, "body">): Promise<Uint8Array>;
|
|
80
|
+
}
|
|
81
|
+
declare class HttpRemoteClient implements RemoteClient {
|
|
82
|
+
private readonly tokenStore;
|
|
83
|
+
private readonly fetchImplementation;
|
|
84
|
+
readonly origin: string;
|
|
85
|
+
constructor(origin: string, tokenStore: TokenStore, fetchImplementation?: typeof fetch);
|
|
86
|
+
request(apiPath: string, options?: ApiRequestOptions): Promise<unknown>;
|
|
87
|
+
requestBytes(apiPath: string, options?: Omit<ApiRequestOptions, "body">): Promise<Uint8Array>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
interface BrowserOpener {
|
|
91
|
+
open(url: string): Promise<void>;
|
|
92
|
+
}
|
|
93
|
+
interface DeviceLoginOptions {
|
|
94
|
+
readonly deviceName: string;
|
|
95
|
+
readonly onVerification: (verificationUrl: string) => void;
|
|
96
|
+
readonly sleep?: (milliseconds: number) => Promise<void>;
|
|
97
|
+
}
|
|
98
|
+
declare function deviceLogin(client: RemoteClient, tokenStore: TokenStore, opener: BrowserOpener, options: DeviceLoginOptions): Promise<Record<string, unknown>>;
|
|
99
|
+
|
|
100
|
+
declare const CONFIG_KEYS: readonly ["server", "runtime-directory", "cache-directory"];
|
|
101
|
+
type ConfigKey = typeof CONFIG_KEYS[number];
|
|
102
|
+
interface WojConfig {
|
|
103
|
+
readonly server?: string;
|
|
104
|
+
readonly "runtime-directory"?: string;
|
|
105
|
+
readonly "cache-directory"?: string;
|
|
106
|
+
}
|
|
107
|
+
interface ConfigStore {
|
|
108
|
+
read(): Promise<WojConfig>;
|
|
109
|
+
write(config: WojConfig): Promise<void>;
|
|
110
|
+
}
|
|
111
|
+
declare function defaultConfigDirectory(environment?: Readonly<Record<string, string | undefined>>, platform?: string): string;
|
|
112
|
+
declare function defaultConfigPath(): string;
|
|
113
|
+
declare function validateConfigValue(key: ConfigKey, value: string): string;
|
|
114
|
+
declare function parseConfig(value: unknown): WojConfig;
|
|
115
|
+
declare class JsonConfigStore implements ConfigStore {
|
|
116
|
+
readonly file: string;
|
|
117
|
+
constructor(file?: string);
|
|
118
|
+
read(): Promise<WojConfig>;
|
|
119
|
+
write(config: WojConfig): Promise<void>;
|
|
120
|
+
}
|
|
121
|
+
declare class MemoryConfigStore implements ConfigStore {
|
|
122
|
+
private value;
|
|
123
|
+
constructor(initial?: WojConfig);
|
|
124
|
+
read(): Promise<WojConfig>;
|
|
125
|
+
write(config: WojConfig): Promise<void>;
|
|
126
|
+
}
|
|
127
|
+
declare function isConfigKey(value: string): value is ConfigKey;
|
|
128
|
+
|
|
129
|
+
interface LocalCommandResult {
|
|
130
|
+
readonly value: unknown;
|
|
131
|
+
readonly successful: boolean;
|
|
132
|
+
}
|
|
133
|
+
interface LocalRuntime {
|
|
134
|
+
build(root: string, config: WojConfig): Promise<LocalCommandResult>;
|
|
135
|
+
run(root: string, config: WojConfig, options: {
|
|
136
|
+
readonly stdin?: string;
|
|
137
|
+
readonly args: readonly string[];
|
|
138
|
+
}): Promise<LocalCommandResult>;
|
|
139
|
+
test(root: string, config: WojConfig, options: {
|
|
140
|
+
readonly cases: readonly string[];
|
|
141
|
+
}): Promise<LocalCommandResult>;
|
|
142
|
+
bench(root: string, config: WojConfig, options: {
|
|
143
|
+
readonly stdin?: string;
|
|
144
|
+
readonly iterations: number;
|
|
145
|
+
}): Promise<LocalCommandResult>;
|
|
146
|
+
inspectJudge(file: string): Promise<LocalCommandResult>;
|
|
147
|
+
verifyJudge(file: string, options: {
|
|
148
|
+
readonly sha256?: string;
|
|
149
|
+
readonly bytes?: number;
|
|
150
|
+
}): Promise<LocalCommandResult>;
|
|
151
|
+
executeJudge(root: string, config: WojConfig, file: string): Promise<LocalCommandResult>;
|
|
152
|
+
toolchainList(config: WojConfig): Promise<LocalCommandResult>;
|
|
153
|
+
toolchainInfo(config: WojConfig, id: string): Promise<LocalCommandResult>;
|
|
154
|
+
toolchainFetch(config: WojConfig, server: string, id: string, fetchImplementation?: typeof fetch): Promise<LocalCommandResult>;
|
|
155
|
+
toolchainVerify(config: WojConfig, id?: string): Promise<LocalCommandResult>;
|
|
156
|
+
toolchainPrune(config: WojConfig): Promise<LocalCommandResult>;
|
|
157
|
+
cacheStatus(config: WojConfig): Promise<LocalCommandResult>;
|
|
158
|
+
cachePrune(config: WojConfig): Promise<LocalCommandResult>;
|
|
159
|
+
cacheClear(config: WojConfig): Promise<LocalCommandResult>;
|
|
160
|
+
doctor(root: string, config: WojConfig): Promise<LocalCommandResult>;
|
|
161
|
+
}
|
|
162
|
+
declare function parsePublicProblem(bytes: Uint8Array): ReturnType<typeof parseStandaloneProblemBundle>;
|
|
163
|
+
declare class NodeLocalRuntime implements LocalRuntime {
|
|
164
|
+
build(root: string, config: WojConfig): Promise<LocalCommandResult>;
|
|
165
|
+
run(root: string, config: WojConfig, options: {
|
|
166
|
+
readonly stdin?: string;
|
|
167
|
+
readonly args: readonly string[];
|
|
168
|
+
}): Promise<LocalCommandResult>;
|
|
169
|
+
test(root: string, config: WojConfig, options: {
|
|
170
|
+
readonly cases: readonly string[];
|
|
171
|
+
}): Promise<LocalCommandResult>;
|
|
172
|
+
bench(root: string, config: WojConfig, options: {
|
|
173
|
+
readonly stdin?: string;
|
|
174
|
+
readonly iterations: number;
|
|
175
|
+
}): Promise<LocalCommandResult>;
|
|
176
|
+
inspectJudge(file: string): Promise<LocalCommandResult>;
|
|
177
|
+
verifyJudge(file: string, options: {
|
|
178
|
+
readonly sha256?: string;
|
|
179
|
+
readonly bytes?: number;
|
|
180
|
+
}): Promise<LocalCommandResult>;
|
|
181
|
+
executeJudge(root: string, config: WojConfig, file: string): Promise<LocalCommandResult>;
|
|
182
|
+
toolchainList(config: WojConfig): Promise<LocalCommandResult>;
|
|
183
|
+
toolchainInfo(config: WojConfig, id: string): Promise<LocalCommandResult>;
|
|
184
|
+
toolchainFetch(config: WojConfig, server: string, id: string, fetchImplementation?: typeof fetch): Promise<LocalCommandResult>;
|
|
185
|
+
toolchainVerify(config: WojConfig, id?: string): Promise<LocalCommandResult>;
|
|
186
|
+
toolchainPrune(config: WojConfig): Promise<LocalCommandResult>;
|
|
187
|
+
cacheStatus(config: WojConfig): Promise<LocalCommandResult>;
|
|
188
|
+
cachePrune(config: WojConfig): Promise<LocalCommandResult>;
|
|
189
|
+
cacheClear(config: WojConfig): Promise<LocalCommandResult>;
|
|
190
|
+
doctor(root: string, config: WojConfig): Promise<LocalCommandResult>;
|
|
191
|
+
}
|
|
192
|
+
declare function judgeSucceeded(result: JudgeResult | undefined): boolean;
|
|
193
|
+
|
|
194
|
+
interface ParsedCommand {
|
|
195
|
+
readonly spec: CommandSpec;
|
|
196
|
+
readonly positionals: readonly string[];
|
|
197
|
+
readonly options: Readonly<Record<string, string | boolean | readonly string[]>>;
|
|
198
|
+
readonly global: {
|
|
199
|
+
readonly offline: boolean;
|
|
200
|
+
readonly json: boolean;
|
|
201
|
+
readonly server?: string;
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
type ParseResult = {
|
|
205
|
+
readonly kind: "command";
|
|
206
|
+
readonly command: ParsedCommand;
|
|
207
|
+
} | {
|
|
208
|
+
readonly kind: "help";
|
|
209
|
+
readonly prefix: readonly string[];
|
|
210
|
+
} | {
|
|
211
|
+
readonly kind: "version";
|
|
212
|
+
};
|
|
213
|
+
declare function parseCli(arguments_: readonly string[]): ParseResult;
|
|
214
|
+
|
|
215
|
+
interface CommandDependencies {
|
|
216
|
+
readonly cwd: string;
|
|
217
|
+
readonly configStore: ConfigStore;
|
|
218
|
+
readonly tokenStore: TokenStore;
|
|
219
|
+
readonly local: LocalRuntime;
|
|
220
|
+
readonly collectionCli: (arguments_: readonly string[]) => Promise<void>;
|
|
221
|
+
readonly remote: (origin: string) => RemoteClient;
|
|
222
|
+
readonly opener: BrowserOpener;
|
|
223
|
+
readonly sleep: (milliseconds: number) => Promise<void>;
|
|
224
|
+
readonly onNotice: (message: string) => void;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
declare const CLI_TOOLCHAIN_DESCRIPTORS: readonly ToolchainDescriptor[];
|
|
228
|
+
|
|
229
|
+
declare const WOJ_WORKSPACE_SCHEMA = "wasm-oj-cli-workspace-v1";
|
|
230
|
+
declare const WORKSPACE_FILE = "woj.json";
|
|
231
|
+
declare const LANGUAGES: readonly ["c", "cpp", "rust", "go", "python", "javascript", "typescript"];
|
|
232
|
+
type WorkspaceLanguage = typeof LANGUAGES[number];
|
|
233
|
+
interface PinnedProblem {
|
|
234
|
+
readonly problemVersionId: string;
|
|
235
|
+
readonly catalogPublicationId: string;
|
|
236
|
+
readonly serverOrigin: string;
|
|
237
|
+
readonly contentUrl: string;
|
|
238
|
+
readonly contentSha256: string;
|
|
239
|
+
readonly contentFile: "problem.json";
|
|
240
|
+
readonly locale: "zh-TW" | "en";
|
|
241
|
+
readonly contestId?: string;
|
|
242
|
+
}
|
|
243
|
+
interface WojWorkspace {
|
|
244
|
+
readonly schema: typeof WOJ_WORKSPACE_SCHEMA;
|
|
245
|
+
readonly name: string;
|
|
246
|
+
readonly language: WorkspaceLanguage;
|
|
247
|
+
readonly target: "wasip1" | "wasix";
|
|
248
|
+
readonly optimization: "debug" | "release";
|
|
249
|
+
readonly entry: string;
|
|
250
|
+
readonly sources: readonly string[];
|
|
251
|
+
readonly problem?: PinnedProblem;
|
|
252
|
+
}
|
|
253
|
+
declare function parseWorkspace(value: unknown): WojWorkspace;
|
|
254
|
+
declare function readWorkspaceFileBytes(root: string, relative: string, maximumBytes: number): Promise<Uint8Array>;
|
|
255
|
+
declare function readWorkspace(root?: string): Promise<WojWorkspace>;
|
|
256
|
+
declare function writeWorkspace(root: string, workspace: WojWorkspace): Promise<void>;
|
|
257
|
+
declare function createWorkspace(root: string, options: {
|
|
258
|
+
readonly name?: string;
|
|
259
|
+
readonly language?: string;
|
|
260
|
+
readonly target?: string;
|
|
261
|
+
readonly optimization?: string;
|
|
262
|
+
readonly entry?: string;
|
|
263
|
+
readonly force?: boolean;
|
|
264
|
+
}): Promise<WojWorkspace>;
|
|
265
|
+
declare function readWorkspaceSources(root: string, workspace: WojWorkspace): Promise<Readonly<Record<string, string>>>;
|
|
266
|
+
|
|
267
|
+
interface CliIo {
|
|
268
|
+
readonly stdout: (text: string) => void;
|
|
269
|
+
readonly stderr: (text: string) => void;
|
|
270
|
+
}
|
|
271
|
+
interface WojCliDependencies {
|
|
272
|
+
readonly cwd?: string;
|
|
273
|
+
readonly configStore?: ConfigStore;
|
|
274
|
+
readonly tokenStore?: TokenStore;
|
|
275
|
+
readonly local?: LocalRuntime;
|
|
276
|
+
readonly collectionCli?: (arguments_: readonly string[]) => Promise<void>;
|
|
277
|
+
readonly remote?: (origin: string) => RemoteClient;
|
|
278
|
+
readonly opener?: BrowserOpener;
|
|
279
|
+
readonly sleep?: (milliseconds: number) => Promise<void>;
|
|
280
|
+
readonly io?: CliIo;
|
|
281
|
+
}
|
|
282
|
+
declare function runWojCli(arguments_: readonly string[], provided?: WojCliDependencies): Promise<WojExitCode>;
|
|
283
|
+
declare function main(arguments_: readonly string[]): Promise<number>;
|
|
284
|
+
|
|
285
|
+
export { ApiError, CLI_TOOLCHAIN_DESCRIPTORS, COMMAND_BY_KEY, CONFIG_KEYS, CliError, HttpRemoteClient, JsonConfigStore, LANGUAGES, MemoryConfigStore, MemoryTokenStore, NodeLocalRuntime, OsKeychainTokenStore, WOJ_ACCESS_TOKEN, WOJ_CLI_VERSION, WOJ_COMMANDS, WOJ_EXIT, WOJ_WORKSPACE_SCHEMA, WORKSPACE_FILE, asCliError, commandKey, createWorkspace, defaultConfigDirectory, defaultConfigPath, deviceLogin, isConfigKey, isWojAccessToken, judgeSucceeded, main, parseCli, parseConfig, parsePublicProblem, parseWorkspace, readWorkspace, readWorkspaceFileBytes, readWorkspaceSources, runWojCli, unavailableError, usageError, validateConfigValue, writeWorkspace };
|
|
286
|
+
export type { ApiRequestOptions, BrowserOpener, CliIo, CommandBoundary, CommandDependencies, CommandSpec, ConfigKey, ConfigStore, LocalCommandResult, LocalRuntime, ParseResult, ParsedCommand, PinnedProblem, RemoteClient, TokenStore, WojCliDependencies, WojConfig, WojExitCode, WojWorkspace, WorkspaceLanguage };
|