kobako 0.19.0 → 0.20.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.
- checksums.yaml +4 -4
- data/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +20 -0
- data/Cargo.lock +6 -5
- data/crates/kobako-runtime/CHANGELOG.md +7 -0
- data/crates/kobako-runtime/Cargo.toml +1 -1
- data/crates/kobako-runtime/README.md +1 -1
- data/crates/kobako-wasmtime/CHANGELOG.md +7 -0
- data/crates/kobako-wasmtime/Cargo.toml +2 -2
- data/crates/kobako-wasmtime/README.md +1 -1
- data/data/kobako.wasm +0 -0
- data/ext/kobako/Cargo.toml +6 -2
- data/ext/kobako/src/runtime/bridge.rs +30 -24
- data/ext/kobako/src/runtime/gvl.rs +114 -0
- data/ext/kobako/src/runtime.rs +211 -190
- data/lib/kobako/catalog/extensions.rb +50 -43
- data/lib/kobako/catalog/handles.rb +7 -16
- data/lib/kobako/catalog/services.rb +22 -36
- data/lib/kobako/catalog/snippets.rb +11 -10
- data/lib/kobako/context.rb +202 -0
- data/lib/kobako/errors.rb +26 -4
- data/lib/kobako/execution.rb +52 -0
- data/lib/kobako/extension.rb +24 -10
- data/lib/kobako/pool.rb +1 -7
- data/lib/kobako/sandbox.rb +43 -182
- data/lib/kobako/sandbox_options.rb +23 -2
- data/lib/kobako/transport/dispatcher.rb +16 -15
- data/lib/kobako/unresolved.rb +17 -0
- data/lib/kobako/usage.rb +6 -6
- data/lib/kobako/version.rb +1 -1
- data/lib/kobako.rb +1 -0
- data/sig/kobako/catalog/extensions.rbs +4 -6
- data/sig/kobako/catalog/handles.rbs +0 -2
- data/sig/kobako/catalog/services.rbs +3 -3
- data/sig/kobako/catalog/snippets.rbs +2 -0
- data/sig/kobako/context.rbs +36 -0
- data/sig/kobako/errors.rbs +12 -3
- data/sig/kobako/execution.rbs +24 -0
- data/sig/kobako/extension.rbs +4 -2
- data/sig/kobako/runtime.rbs +37 -9
- data/sig/kobako/sandbox.rbs +5 -24
- data/sig/kobako/sandbox_options.rbs +9 -2
- data/sig/kobako/transport/dispatcher.rbs +3 -3
- data/sig/kobako/unresolved.rbs +4 -0
- metadata +8 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Kobako
|
|
2
|
+
class Context
|
|
3
|
+
def initialize: (
|
|
4
|
+
runtime: Kobako::Runtime,
|
|
5
|
+
services: Kobako::Catalog::Services,
|
|
6
|
+
snippets: Kobako::Catalog::Snippets,
|
|
7
|
+
extensions: Kobako::Catalog::Extensions
|
|
8
|
+
) -> void
|
|
9
|
+
|
|
10
|
+
def bind: (Symbol | String path, untyped object) -> self
|
|
11
|
+
|
|
12
|
+
def lookup: (Symbol | String path) -> untyped
|
|
13
|
+
|
|
14
|
+
def eval: (String code) ?{ (Kobako::Context) -> void } -> Kobako::Execution
|
|
15
|
+
|
|
16
|
+
def run: (Kobako::Transport::Run run_envelope) ?{ (Kobako::Context) -> void } -> Kobako::Execution
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def collect_overrides: () { (Kobako::Context) -> void } -> void
|
|
21
|
+
|
|
22
|
+
def dispatch_handler: () -> ^(String, Kobako::Transport::_GuestYielder) -> String
|
|
23
|
+
|
|
24
|
+
def populate_observability!: (Kobako::Runtime::Snapshot snapshot) -> void
|
|
25
|
+
|
|
26
|
+
def trap_class_for: (Kobako::TrapError err) -> singleton(Kobako::TrapError)
|
|
27
|
+
|
|
28
|
+
def trap_error_for: (Kobako::Runtime::Snapshot snapshot, Symbol verb) -> Kobako::TrapError
|
|
29
|
+
|
|
30
|
+
def build_execution: (untyped value, failed: bool) -> Kobako::Execution
|
|
31
|
+
|
|
32
|
+
def settle_outcome: (Kobako::Runtime::Snapshot snapshot, Symbol verb) -> Kobako::Execution
|
|
33
|
+
|
|
34
|
+
def invoke!: (Symbol verb) { () -> Kobako::Runtime::Snapshot } -> Kobako::Execution
|
|
35
|
+
end
|
|
36
|
+
end
|
data/sig/kobako/errors.rbs
CHANGED
|
@@ -2,7 +2,14 @@ module Kobako
|
|
|
2
2
|
class Error < StandardError
|
|
3
3
|
end
|
|
4
4
|
|
|
5
|
+
module CarriesExecution
|
|
6
|
+
attr_reader execution: Kobako::Execution?
|
|
7
|
+
|
|
8
|
+
def with_execution: (Kobako::Execution execution) -> self
|
|
9
|
+
end
|
|
10
|
+
|
|
5
11
|
class TrapError < Error
|
|
12
|
+
include CarriesExecution
|
|
6
13
|
end
|
|
7
14
|
|
|
8
15
|
class TimeoutError < TrapError
|
|
@@ -17,7 +24,7 @@ module Kobako
|
|
|
17
24
|
class ModuleNotBuiltError < SetupError
|
|
18
25
|
end
|
|
19
26
|
|
|
20
|
-
module
|
|
27
|
+
module Diagnosable : Error
|
|
21
28
|
attr_reader origin: String?
|
|
22
29
|
attr_reader klass: String?
|
|
23
30
|
attr_reader backtrace_lines: Array[String]?
|
|
@@ -33,11 +40,13 @@ module Kobako
|
|
|
33
40
|
end
|
|
34
41
|
|
|
35
42
|
class SandboxError < Error
|
|
36
|
-
include
|
|
43
|
+
include Diagnosable
|
|
44
|
+
include CarriesExecution
|
|
37
45
|
end
|
|
38
46
|
|
|
39
47
|
class ServiceError < Error
|
|
40
|
-
include
|
|
48
|
+
include Diagnosable
|
|
49
|
+
include CarriesExecution
|
|
41
50
|
end
|
|
42
51
|
|
|
43
52
|
class HandleExhaustedError < SandboxError
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Kobako
|
|
2
|
+
class Execution
|
|
3
|
+
attr_reader value: untyped
|
|
4
|
+
attr_reader usage: Kobako::Usage
|
|
5
|
+
|
|
6
|
+
def initialize: (
|
|
7
|
+
value: untyped,
|
|
8
|
+
usage: Kobako::Usage,
|
|
9
|
+
stdout: Kobako::Capture,
|
|
10
|
+
stderr: Kobako::Capture,
|
|
11
|
+
failed: bool
|
|
12
|
+
) -> void
|
|
13
|
+
|
|
14
|
+
def failed?: () -> bool
|
|
15
|
+
|
|
16
|
+
def stdout: () -> String
|
|
17
|
+
|
|
18
|
+
def stderr: () -> String
|
|
19
|
+
|
|
20
|
+
def stdout_truncated?: () -> bool
|
|
21
|
+
|
|
22
|
+
def stderr_truncated?: () -> bool
|
|
23
|
+
end
|
|
24
|
+
end
|
data/sig/kobako/extension.rbs
CHANGED
|
@@ -11,10 +11,12 @@ module Kobako
|
|
|
11
11
|
|
|
12
12
|
class Backend < Data
|
|
13
13
|
attr_reader path: String
|
|
14
|
+
attr_reader object: untyped
|
|
14
15
|
attr_reader provider: untyped
|
|
15
16
|
|
|
16
|
-
def self.new: (path: String, provider: untyped) -> Kobako::Extension::Backend
|
|
17
|
-
|
|
17
|
+
def self.new: (path: String, ?object: untyped, ?provider: untyped) -> Kobako::Extension::Backend
|
|
18
|
+
|
|
19
|
+
def initialize: (path: String, ?object: untyped, ?provider: untyped) -> void
|
|
18
20
|
end
|
|
19
21
|
end
|
|
20
22
|
end
|
data/sig/kobako/runtime.rbs
CHANGED
|
@@ -8,18 +8,23 @@ module Kobako
|
|
|
8
8
|
Integer? memory_limit,
|
|
9
9
|
Integer? stdout_limit_bytes,
|
|
10
10
|
Integer? stderr_limit_bytes,
|
|
11
|
-
Symbol profile
|
|
11
|
+
Symbol profile,
|
|
12
|
+
Symbol gvl
|
|
12
13
|
) -> Runtime
|
|
13
14
|
|
|
14
|
-
def
|
|
15
|
+
def eval: (
|
|
16
|
+
^(String, Kobako::Transport::_GuestYielder) -> String dispatch,
|
|
17
|
+
String preamble,
|
|
18
|
+
String source,
|
|
19
|
+
String snippets
|
|
20
|
+
) -> Kobako::Runtime::Snapshot
|
|
15
21
|
|
|
16
|
-
def
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def captures: () -> [String, bool, String, bool]
|
|
22
|
+
def run: (
|
|
23
|
+
^(String, Kobako::Transport::_GuestYielder) -> String dispatch,
|
|
24
|
+
String preamble,
|
|
25
|
+
String snippets,
|
|
26
|
+
String envelope
|
|
27
|
+
) -> Kobako::Runtime::Snapshot
|
|
23
28
|
|
|
24
29
|
def profile: () -> Symbol
|
|
25
30
|
|
|
@@ -29,5 +34,28 @@ module Kobako
|
|
|
29
34
|
class GuestYielder
|
|
30
35
|
def call: (String args_bytes) -> String
|
|
31
36
|
end
|
|
37
|
+
|
|
38
|
+
# One invocation's result — the whole Snapshot the driver produced.
|
|
39
|
+
class Snapshot
|
|
40
|
+
def outcome: () -> String
|
|
41
|
+
|
|
42
|
+
def trapped?: () -> bool
|
|
43
|
+
|
|
44
|
+
def trap_kind: () -> Symbol?
|
|
45
|
+
|
|
46
|
+
def trap_message: () -> String?
|
|
47
|
+
|
|
48
|
+
def wall_time: () -> Float
|
|
49
|
+
|
|
50
|
+
def memory_peak: () -> Integer
|
|
51
|
+
|
|
52
|
+
def stdout: () -> String
|
|
53
|
+
|
|
54
|
+
def stdout_truncated?: () -> bool
|
|
55
|
+
|
|
56
|
+
def stderr: () -> String
|
|
57
|
+
|
|
58
|
+
def stderr_truncated?: () -> bool
|
|
59
|
+
end
|
|
32
60
|
end
|
|
33
61
|
end
|
data/sig/kobako/sandbox.rbs
CHANGED
|
@@ -11,6 +11,7 @@ module Kobako
|
|
|
11
11
|
def stdout_limit: () -> Integer?
|
|
12
12
|
def stderr_limit: () -> Integer?
|
|
13
13
|
def profile: () -> Symbol
|
|
14
|
+
def gvl: () -> Symbol
|
|
14
15
|
|
|
15
16
|
# Every keyword beyond wasm_path forwards verbatim to
|
|
16
17
|
# SandboxOptions.new (the four caps + the profile floor).
|
|
@@ -19,43 +20,23 @@ module Kobako
|
|
|
19
20
|
**untyped options
|
|
20
21
|
) -> void
|
|
21
22
|
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
def stderr: () -> String
|
|
25
|
-
|
|
26
|
-
def stdout_truncated?: () -> bool
|
|
27
|
-
|
|
28
|
-
def stderr_truncated?: () -> bool
|
|
29
|
-
|
|
30
|
-
attr_reader usage: Kobako::Usage
|
|
31
|
-
|
|
32
|
-
def bind: (Symbol | String path, untyped object) -> Kobako::Sandbox
|
|
23
|
+
def bind: (Symbol | String path, ?untyped object) -> Kobako::Sandbox
|
|
33
24
|
|
|
34
25
|
def install: (*untyped extensions) -> Kobako::Sandbox
|
|
35
26
|
|
|
36
27
|
def preload: (code: String, name: Symbol | String) -> Kobako::Sandbox
|
|
37
28
|
| (binary: String) -> Kobako::Sandbox
|
|
38
29
|
|
|
39
|
-
def run: (Symbol | String target, *untyped args, **untyped kwargs) ->
|
|
30
|
+
def run: (Symbol | String target, *untyped args, **untyped kwargs) ?{ (Kobako::Context) -> void } -> Kobako::Execution
|
|
40
31
|
|
|
41
|
-
def eval: (String code) ->
|
|
42
|
-
|
|
43
|
-
def reset_invocation_state!: () -> void
|
|
32
|
+
def eval: (String code) ?{ (Kobako::Context) -> void } -> Kobako::Execution
|
|
44
33
|
|
|
45
34
|
private
|
|
46
35
|
|
|
47
36
|
def build_runtime!: () -> Kobako::Runtime
|
|
48
37
|
|
|
49
|
-
def
|
|
38
|
+
def new_invocation: () -> Kobako::Context
|
|
50
39
|
|
|
51
40
|
def begin_invocation!: () -> void
|
|
52
|
-
|
|
53
|
-
def read_usage!: () -> void
|
|
54
|
-
|
|
55
|
-
def read_captures!: () -> void
|
|
56
|
-
|
|
57
|
-
def trap_class_for: (Kobako::TrapError err) -> singleton(Kobako::TrapError)
|
|
58
|
-
|
|
59
|
-
def invoke!: (Symbol verb) { () -> String } -> untyped
|
|
60
41
|
end
|
|
61
42
|
end
|
|
@@ -5,19 +5,23 @@ module Kobako
|
|
|
5
5
|
DEFAULT_OUTPUT_LIMIT: Integer
|
|
6
6
|
DEFAULT_PROFILE: Symbol
|
|
7
7
|
PROFILES: Array[Symbol]
|
|
8
|
+
GVL_MODES: Array[Symbol]
|
|
9
|
+
DEFAULT_GVL: Symbol
|
|
8
10
|
|
|
9
11
|
attr_reader timeout: Float?
|
|
10
12
|
attr_reader memory_limit: Integer?
|
|
11
13
|
attr_reader stdout_limit: Integer?
|
|
12
14
|
attr_reader stderr_limit: Integer?
|
|
13
15
|
attr_reader profile: Symbol
|
|
16
|
+
attr_reader gvl: Symbol
|
|
14
17
|
|
|
15
18
|
def self.new: (
|
|
16
19
|
?timeout: (Float | Integer)?,
|
|
17
20
|
?memory_limit: Integer?,
|
|
18
21
|
?stdout_limit: Integer?,
|
|
19
22
|
?stderr_limit: Integer?,
|
|
20
|
-
?profile: Symbol
|
|
23
|
+
?profile: Symbol,
|
|
24
|
+
?gvl: Symbol
|
|
21
25
|
) -> SandboxOptions
|
|
22
26
|
|
|
23
27
|
def initialize: (
|
|
@@ -25,7 +29,8 @@ module Kobako
|
|
|
25
29
|
?memory_limit: Integer?,
|
|
26
30
|
?stdout_limit: Integer?,
|
|
27
31
|
?stderr_limit: Integer?,
|
|
28
|
-
?profile: Symbol
|
|
32
|
+
?profile: Symbol,
|
|
33
|
+
?gvl: Symbol
|
|
29
34
|
) -> void
|
|
30
35
|
|
|
31
36
|
def enforce_floor!: (Symbol declared) -> void
|
|
@@ -39,5 +44,7 @@ module Kobako
|
|
|
39
44
|
def normalize_output_limit: (Integer? limit, String name) -> Integer?
|
|
40
45
|
|
|
41
46
|
def normalize_profile: (untyped profile) -> Symbol
|
|
47
|
+
|
|
48
|
+
def normalize_gvl: (untyped gvl) -> Symbol
|
|
42
49
|
end
|
|
43
50
|
end
|
|
@@ -12,7 +12,7 @@ module Kobako
|
|
|
12
12
|
|
|
13
13
|
CALLABLE_ALLOW: Array[Symbol]
|
|
14
14
|
|
|
15
|
-
def self?.dispatch: (String request_bytes, Kobako::Transport::_ServiceRegistry
|
|
15
|
+
def self?.dispatch: (String request_bytes, Kobako::Transport::_ServiceRegistry resolver, Kobako::Codec::_HandleTable handler, Kobako::Transport::_GuestYielder yield_to_guest) -> String
|
|
16
16
|
|
|
17
17
|
def self?.resolve_call_args: (Kobako::Transport::Request request, Kobako::Codec::_HandleTable handler, bool carried_handle) -> [Array[untyped], Hash[Symbol, untyped]]
|
|
18
18
|
|
|
@@ -26,9 +26,9 @@ module Kobako
|
|
|
26
26
|
|
|
27
27
|
def self?.resolve_arg: (untyped value, Kobako::Codec::_HandleTable handler) -> untyped
|
|
28
28
|
|
|
29
|
-
def self?.resolve_target: (String | Kobako::Handle target, Kobako::Transport::_ServiceRegistry
|
|
29
|
+
def self?.resolve_target: (String | Kobako::Handle target, Kobako::Transport::_ServiceRegistry resolver, Kobako::Codec::_HandleTable handler) -> untyped
|
|
30
30
|
|
|
31
|
-
def self?.resolve_path: (String path, Kobako::Transport::_ServiceRegistry
|
|
31
|
+
def self?.resolve_path: (String path, Kobako::Transport::_ServiceRegistry resolver) -> untyped
|
|
32
32
|
|
|
33
33
|
def self?.require_live_object!: (Integer id, Kobako::Codec::_HandleTable handler) -> untyped
|
|
34
34
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kobako
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.20.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aotokitsuruya
|
|
@@ -88,6 +88,7 @@ files:
|
|
|
88
88
|
- ext/kobako/src/runtime.rs
|
|
89
89
|
- ext/kobako/src/runtime/bridge.rs
|
|
90
90
|
- ext/kobako/src/runtime/errors.rs
|
|
91
|
+
- ext/kobako/src/runtime/gvl.rs
|
|
91
92
|
- lib/kobako.rb
|
|
92
93
|
- lib/kobako/capture.rb
|
|
93
94
|
- lib/kobako/catalog.rb
|
|
@@ -103,7 +104,9 @@ files:
|
|
|
103
104
|
- lib/kobako/codec/handle_walk.rb
|
|
104
105
|
- lib/kobako/codec/state.rb
|
|
105
106
|
- lib/kobako/codec/utils.rb
|
|
107
|
+
- lib/kobako/context.rb
|
|
106
108
|
- lib/kobako/errors.rb
|
|
109
|
+
- lib/kobako/execution.rb
|
|
107
110
|
- lib/kobako/extension.rb
|
|
108
111
|
- lib/kobako/fault.rb
|
|
109
112
|
- lib/kobako/handle.rb
|
|
@@ -124,6 +127,7 @@ files:
|
|
|
124
127
|
- lib/kobako/transport/run.rb
|
|
125
128
|
- lib/kobako/transport/yield.rb
|
|
126
129
|
- lib/kobako/transport/yielder.rb
|
|
130
|
+
- lib/kobako/unresolved.rb
|
|
127
131
|
- lib/kobako/usage.rb
|
|
128
132
|
- lib/kobako/version.rb
|
|
129
133
|
- release-please-config.json
|
|
@@ -143,7 +147,9 @@ files:
|
|
|
143
147
|
- sig/kobako/codec/handle_walk.rbs
|
|
144
148
|
- sig/kobako/codec/state.rbs
|
|
145
149
|
- sig/kobako/codec/utils.rbs
|
|
150
|
+
- sig/kobako/context.rbs
|
|
146
151
|
- sig/kobako/errors.rbs
|
|
152
|
+
- sig/kobako/execution.rbs
|
|
147
153
|
- sig/kobako/extension.rbs
|
|
148
154
|
- sig/kobako/fault.rbs
|
|
149
155
|
- sig/kobako/handle.rbs
|
|
@@ -164,6 +170,7 @@ files:
|
|
|
164
170
|
- sig/kobako/transport/run.rbs
|
|
165
171
|
- sig/kobako/transport/yield.rbs
|
|
166
172
|
- sig/kobako/transport/yielder.rbs
|
|
173
|
+
- sig/kobako/unresolved.rbs
|
|
167
174
|
- sig/kobako/usage.rbs
|
|
168
175
|
- sig/kobako/version.rbs
|
|
169
176
|
homepage: https://github.com/elct9620/kobako
|