kobako 0.18.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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.release-please-manifest.json +1 -1
  3. data/CHANGELOG.md +31 -0
  4. data/Cargo.lock +6 -5
  5. data/README.md +4 -1
  6. data/crates/kobako-runtime/CHANGELOG.md +14 -0
  7. data/crates/kobako-runtime/Cargo.toml +1 -1
  8. data/crates/kobako-runtime/README.md +1 -1
  9. data/crates/kobako-wasmtime/CHANGELOG.md +14 -0
  10. data/crates/kobako-wasmtime/Cargo.toml +2 -2
  11. data/crates/kobako-wasmtime/README.md +1 -1
  12. data/data/kobako.wasm +0 -0
  13. data/ext/kobako/Cargo.toml +6 -2
  14. data/ext/kobako/src/runtime/bridge.rs +30 -24
  15. data/ext/kobako/src/runtime/gvl.rs +114 -0
  16. data/ext/kobako/src/runtime.rs +211 -190
  17. data/lib/kobako/catalog/extensions.rb +50 -43
  18. data/lib/kobako/catalog/handles.rb +7 -16
  19. data/lib/kobako/catalog/services.rb +22 -36
  20. data/lib/kobako/catalog/snippets.rb +11 -10
  21. data/lib/kobako/context.rb +202 -0
  22. data/lib/kobako/errors.rb +26 -4
  23. data/lib/kobako/execution.rb +52 -0
  24. data/lib/kobako/extension.rb +24 -10
  25. data/lib/kobako/pool.rb +1 -7
  26. data/lib/kobako/sandbox.rb +43 -182
  27. data/lib/kobako/sandbox_options.rb +23 -2
  28. data/lib/kobako/transport/dispatcher.rb +16 -15
  29. data/lib/kobako/transport/yielder.rb +1 -1
  30. data/lib/kobako/unresolved.rb +17 -0
  31. data/lib/kobako/usage.rb +6 -6
  32. data/lib/kobako/version.rb +1 -1
  33. data/lib/kobako.rb +1 -0
  34. data/release-please-config.json +2 -1
  35. data/sig/kobako/catalog/extensions.rbs +4 -6
  36. data/sig/kobako/catalog/handles.rbs +0 -2
  37. data/sig/kobako/catalog/services.rbs +3 -3
  38. data/sig/kobako/catalog/snippets.rbs +2 -0
  39. data/sig/kobako/context.rbs +36 -0
  40. data/sig/kobako/errors.rbs +12 -3
  41. data/sig/kobako/execution.rbs +24 -0
  42. data/sig/kobako/extension.rbs +4 -2
  43. data/sig/kobako/runtime.rbs +37 -9
  44. data/sig/kobako/sandbox.rbs +5 -24
  45. data/sig/kobako/sandbox_options.rbs +9 -2
  46. data/sig/kobako/transport/dispatcher.rbs +3 -3
  47. data/sig/kobako/unresolved.rbs +4 -0
  48. 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
@@ -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 StructuredError : Error
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 StructuredError
43
+ include Diagnosable
44
+ include CarriesExecution
37
45
  end
38
46
 
39
47
  class ServiceError < Error
40
- include StructuredError
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
@@ -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
- | (String path, untyped provider) -> Kobako::Extension::Backend
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
@@ -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 on_dispatch=: (^(String, Kobako::Transport::_GuestYielder) -> String dispatch_proc) -> void
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 eval: (String preamble, String source, String snippets) -> String
17
-
18
- def run: (String preamble, String snippets, String envelope) -> String
19
-
20
- def usage: () -> [Float, Integer]
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
@@ -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 stdout: () -> String
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) -> untyped
30
+ def run: (Symbol | String target, *untyped args, **untyped kwargs) ?{ (Kobako::Context) -> void } -> Kobako::Execution
40
31
 
41
- def eval: (String code) -> untyped
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 install_dispatch_proc!: () -> void
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 services, Kobako::Codec::_HandleTable handler, Kobako::Transport::_GuestYielder yield_to_guest) -> String
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 services, Kobako::Codec::_HandleTable handler) -> untyped
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 services) -> untyped
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
 
@@ -0,0 +1,4 @@
1
+ module Kobako
2
+ module Unresolved
3
+ end
4
+ end
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.18.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