kobako 0.5.0-x86_64-linux

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 (79) hide show
  1. checksums.yaml +7 -0
  2. data/.release-please-manifest.json +1 -0
  3. data/CHANGELOG.md +29 -0
  4. data/LICENSE +201 -0
  5. data/README.md +408 -0
  6. data/data/kobako.wasm +0 -0
  7. data/lib/kobako/3.3/kobako.so +0 -0
  8. data/lib/kobako/3.4/kobako.so +0 -0
  9. data/lib/kobako/4.0/kobako.so +0 -0
  10. data/lib/kobako/capture.rb +43 -0
  11. data/lib/kobako/catalog/handles.rb +107 -0
  12. data/lib/kobako/catalog/namespaces.rb +99 -0
  13. data/lib/kobako/catalog/snippets.rb +149 -0
  14. data/lib/kobako/catalog.rb +18 -0
  15. data/lib/kobako/codec/decoder.rb +73 -0
  16. data/lib/kobako/codec/encoder.rb +37 -0
  17. data/lib/kobako/codec/error.rb +34 -0
  18. data/lib/kobako/codec/factory.rb +162 -0
  19. data/lib/kobako/codec/utils.rb +145 -0
  20. data/lib/kobako/codec.rb +31 -0
  21. data/lib/kobako/errors.rb +140 -0
  22. data/lib/kobako/fault.rb +40 -0
  23. data/lib/kobako/handle.rb +60 -0
  24. data/lib/kobako/namespace.rb +67 -0
  25. data/lib/kobako/outcome/panic.rb +42 -0
  26. data/lib/kobako/outcome.rb +166 -0
  27. data/lib/kobako/runtime.rb +30 -0
  28. data/lib/kobako/sandbox.rb +314 -0
  29. data/lib/kobako/sandbox_options.rb +70 -0
  30. data/lib/kobako/snapshot.rb +40 -0
  31. data/lib/kobako/snippet/binary.rb +29 -0
  32. data/lib/kobako/snippet/source.rb +28 -0
  33. data/lib/kobako/snippet.rb +18 -0
  34. data/lib/kobako/transport/dispatcher.rb +195 -0
  35. data/lib/kobako/transport/error.rb +24 -0
  36. data/lib/kobako/transport/request.rb +78 -0
  37. data/lib/kobako/transport/response.rb +69 -0
  38. data/lib/kobako/transport/run.rb +141 -0
  39. data/lib/kobako/transport/yield.rb +91 -0
  40. data/lib/kobako/transport/yielder.rb +89 -0
  41. data/lib/kobako/transport.rb +24 -0
  42. data/lib/kobako/usage.rb +41 -0
  43. data/lib/kobako/version.rb +5 -0
  44. data/lib/kobako.rb +10 -0
  45. data/release-please-config.json +24 -0
  46. data/sig/kobako/capture.rbs +11 -0
  47. data/sig/kobako/catalog/handles.rbs +19 -0
  48. data/sig/kobako/catalog/namespaces.rbs +17 -0
  49. data/sig/kobako/catalog/snippets.rbs +27 -0
  50. data/sig/kobako/catalog.rbs +4 -0
  51. data/sig/kobako/codec/decoder.rbs +12 -0
  52. data/sig/kobako/codec/encoder.rbs +7 -0
  53. data/sig/kobako/codec/error.rbs +18 -0
  54. data/sig/kobako/codec/factory.rbs +31 -0
  55. data/sig/kobako/codec/utils.rbs +19 -0
  56. data/sig/kobako/errors.rbs +55 -0
  57. data/sig/kobako/fault.rbs +19 -0
  58. data/sig/kobako/handle.rbs +18 -0
  59. data/sig/kobako/namespace.rbs +19 -0
  60. data/sig/kobako/outcome/panic.rbs +34 -0
  61. data/sig/kobako/outcome.rbs +24 -0
  62. data/sig/kobako/runtime.rbs +23 -0
  63. data/sig/kobako/sandbox.rbs +55 -0
  64. data/sig/kobako/sandbox_options.rbs +32 -0
  65. data/sig/kobako/snapshot.rbs +15 -0
  66. data/sig/kobako/snippet/binary.rbs +12 -0
  67. data/sig/kobako/snippet/source.rbs +13 -0
  68. data/sig/kobako/snippet.rbs +4 -0
  69. data/sig/kobako/transport/dispatcher.rbs +34 -0
  70. data/sig/kobako/transport/error.rbs +6 -0
  71. data/sig/kobako/transport/request.rbs +32 -0
  72. data/sig/kobako/transport/response.rbs +30 -0
  73. data/sig/kobako/transport/run.rbs +27 -0
  74. data/sig/kobako/transport/yield.rbs +34 -0
  75. data/sig/kobako/transport/yielder.rbs +21 -0
  76. data/sig/kobako/transport.rbs +4 -0
  77. data/sig/kobako/usage.rbs +11 -0
  78. data/sig/kobako.rbs +3 -0
  79. metadata +145 -0
@@ -0,0 +1,15 @@
1
+ module Kobako
2
+ class Snapshot
3
+ def return_bytes: () -> String
4
+ def stdout_bytes: () -> String
5
+ def stdout_truncated: () -> bool
6
+ def stderr_bytes: () -> String
7
+ def stderr_truncated: () -> bool
8
+ def wall_time: () -> Float
9
+ def memory_peak: () -> Integer
10
+
11
+ def stdout: () -> Kobako::Capture
12
+ def stderr: () -> Kobako::Capture
13
+ def usage: () -> Kobako::Usage
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module Kobako
2
+ module Snippet
3
+ class Binary < Data
4
+ KIND: String
5
+
6
+ attr_reader body: String
7
+
8
+ def self.new: (body: String) -> Binary
9
+ | (String body) -> Binary
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Kobako
2
+ module Snippet
3
+ class Source < Data
4
+ KIND: String
5
+
6
+ attr_reader name: Symbol
7
+ attr_reader body: String
8
+
9
+ def self.new: (name: Symbol, body: String) -> Source
10
+ | (Symbol name, String body) -> Source
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module Kobako
2
+ module Snippet
3
+ end
4
+ end
@@ -0,0 +1,34 @@
1
+ module Kobako
2
+ module Transport
3
+ module Dispatcher
4
+ class UndefinedTargetError < StandardError
5
+ end
6
+
7
+ BREAK_THROW: Symbol
8
+
9
+ def self?.dispatch: (String request_bytes, Kobako::Catalog::Namespaces namespaces, Kobako::Catalog::Handles handler, ^(String) -> String yield_to_guest) -> String
10
+
11
+ def self?.resolve_call_args: (Kobako::Transport::Request request, Kobako::Catalog::Handles handler) -> [Array[untyped], Hash[Symbol, untyped]]
12
+
13
+ def self?.encode_caught_error: (StandardError error) -> String
14
+
15
+ def self?.invoke: (untyped target, String method, Array[untyped] args, Hash[Symbol, untyped] kwargs, ?Kobako::Transport::Yielder? yielder) -> untyped
16
+
17
+ def self?.resolve_arg: (untyped value, Kobako::Catalog::Handles handler) -> untyped
18
+
19
+ def self?.resolve_target: (String | Kobako::Handle target, Kobako::Catalog::Namespaces namespaces, Kobako::Catalog::Handles handler) -> untyped
20
+
21
+ def self?.resolve_path: (String path, Kobako::Catalog::Namespaces namespaces) -> untyped
22
+
23
+ def self?.resolve_handle: (Kobako::Handle handle, Kobako::Catalog::Handles handler) -> untyped
24
+
25
+ def self?.require_live_object!: (Integer id, Kobako::Catalog::Handles handler) -> untyped
26
+
27
+ def self?.encode_ok: (untyped value, Kobako::Catalog::Handles handler) -> String
28
+
29
+ def self?.wrap_as_handle: (untyped value, Kobako::Catalog::Handles handler) -> Kobako::Handle
30
+
31
+ def self?.encode_error: (String type, String message) -> String
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,6 @@
1
+ module Kobako
2
+ module Transport
3
+ class Error < Kobako::SandboxError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,32 @@
1
+ module Kobako
2
+ module Transport
3
+ STATUS_OK: Integer
4
+ STATUS_ERROR: Integer
5
+
6
+ class Request < Data
7
+ attr_reader target: String | Kobako::Handle
8
+ attr_reader method_name: String
9
+ attr_reader args: Array[untyped]
10
+ attr_reader kwargs: Hash[Symbol, untyped]
11
+ attr_reader block_given: bool
12
+
13
+ def self.new: (target: String | Kobako::Handle, method_name: String, ?args: Array[untyped], ?kwargs: Hash[Symbol, untyped], ?block_given: bool) -> Request
14
+
15
+ def self.decode: (String bytes) -> Request
16
+
17
+ def initialize: (target: String | Kobako::Handle, method_name: String, ?args: Array[untyped], ?kwargs: Hash[Symbol, untyped], ?block_given: bool) -> void
18
+
19
+ def encode: () -> String
20
+
21
+ def with: (?target: String | Kobako::Handle, ?method_name: String, ?args: Array[untyped], ?kwargs: Hash[Symbol, untyped], ?block_given: bool) -> Request
22
+
23
+ def ==: (untyped other) -> bool
24
+
25
+ def hash: () -> Integer
26
+
27
+ private
28
+
29
+ def validate_kwargs!: (Hash[untyped, untyped] kwargs) -> void
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ module Kobako
2
+ module Transport
3
+ class Response < Data
4
+ attr_reader status: Integer
5
+ attr_reader payload: untyped
6
+
7
+ def self.ok: (untyped value) -> Response
8
+
9
+ def self.error: (Kobako::Fault fault) -> Response
10
+
11
+ def self.decode: (String bytes) -> Response
12
+
13
+ def self.new: (status: Integer, payload: untyped) -> Response
14
+
15
+ def initialize: (status: Integer, payload: untyped) -> void
16
+
17
+ def with: (?status: Integer, ?payload: untyped) -> Response
18
+
19
+ def ok?: () -> bool
20
+
21
+ def error?: () -> bool
22
+
23
+ def encode: () -> String
24
+
25
+ def ==: (untyped other) -> bool
26
+
27
+ def hash: () -> Integer
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,27 @@
1
+ module Kobako
2
+ module Transport
3
+ class Run < Data
4
+ NAME_PATTERN: Regexp
5
+
6
+ attr_reader entrypoint: Symbol
7
+ attr_reader args: Array[untyped]
8
+ attr_reader kwargs: Hash[Symbol, untyped]
9
+
10
+ def self.new: (entrypoint: Symbol | String, ?args: Array[untyped], ?kwargs: Hash[untyped, untyped]) -> Run
11
+
12
+ def initialize: (entrypoint: Symbol | String, ?args: Array[untyped], ?kwargs: Hash[untyped, untyped]) -> void
13
+
14
+ def encode: (Kobako::Catalog::Handles handler) -> String
15
+
16
+ private
17
+
18
+ def normalize_entrypoint: (Symbol | String target) -> Symbol
19
+
20
+ def validate_args!: (Array[untyped] args) -> Array[untyped]
21
+
22
+ def validate_kwargs!: (Hash[untyped, untyped] kwargs) -> Hash[Symbol, untyped]
23
+
24
+ def forged_handle_message: (String slot) -> String
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ module Kobako
2
+ module Transport
3
+ TAG_OK: Integer
4
+ TAG_BREAK: Integer
5
+ TAG_RESERVED: Integer
6
+ TAG_ERROR: Integer
7
+ LIVE_TAGS: Array[Integer]
8
+
9
+ class Yield
10
+ attr_reader tag: Integer
11
+ attr_reader value: untyped
12
+
13
+ def self.decode: (String bytes) -> Yield
14
+
15
+ def self.reject_dead_tag!: (Integer tag) -> void
16
+
17
+ def initialize: (tag: Integer, value: untyped) -> void
18
+
19
+ def with: (?tag: Integer, ?value: untyped) -> Yield
20
+
21
+ def ok?: () -> bool
22
+
23
+ def break?: () -> bool
24
+
25
+ def error?: () -> bool
26
+
27
+ def encode: () -> String
28
+
29
+ def ==: (untyped other) -> bool
30
+
31
+ def hash: () -> Integer
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ module Kobako
2
+ module Transport
3
+ class Yielder
4
+ @yield_to_guest: ^(String) -> String
5
+ @break_tag: Symbol
6
+ @active: bool
7
+
8
+ def initialize: (^(String) -> String yield_to_guest, Symbol break_tag) -> void
9
+
10
+ def yield: (*untyped args) -> untyped
11
+
12
+ def to_proc: () -> Proc
13
+
14
+ def invalidate!: () -> void
15
+
16
+ private
17
+
18
+ def yield_failure: (untyped payload, default: String) -> RuntimeError
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,4 @@
1
+ module Kobako
2
+ module Transport
3
+ end
4
+ end
@@ -0,0 +1,11 @@
1
+ module Kobako
2
+ class Usage < Data
3
+ EMPTY: Usage
4
+
5
+ attr_reader wall_time: Float
6
+ attr_reader memory_peak: Integer
7
+
8
+ def self.new: (wall_time: Float, memory_peak: Integer) -> Usage
9
+ | (Float wall_time, Integer memory_peak) -> Usage
10
+ end
11
+ end
data/sig/kobako.rbs ADDED
@@ -0,0 +1,3 @@
1
+ module Kobako
2
+ VERSION: String
3
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kobako
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: x86_64-linux
6
+ authors:
7
+ - Aotokitsuruya
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2026-05-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: msgpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ description: kobako provides an in-process Wasm sandbox (wasmtime + mruby) with a
28
+ MessagePack-based host/guest RPC, allowing Ruby applications to execute untrusted
29
+ mruby scripts under capability-based Service injection.
30
+ email:
31
+ - contact@aotoki.me
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - ".release-please-manifest.json"
37
+ - CHANGELOG.md
38
+ - LICENSE
39
+ - README.md
40
+ - data/kobako.wasm
41
+ - lib/kobako.rb
42
+ - lib/kobako/3.3/kobako.so
43
+ - lib/kobako/3.4/kobako.so
44
+ - lib/kobako/4.0/kobako.so
45
+ - lib/kobako/capture.rb
46
+ - lib/kobako/catalog.rb
47
+ - lib/kobako/catalog/handles.rb
48
+ - lib/kobako/catalog/namespaces.rb
49
+ - lib/kobako/catalog/snippets.rb
50
+ - lib/kobako/codec.rb
51
+ - lib/kobako/codec/decoder.rb
52
+ - lib/kobako/codec/encoder.rb
53
+ - lib/kobako/codec/error.rb
54
+ - lib/kobako/codec/factory.rb
55
+ - lib/kobako/codec/utils.rb
56
+ - lib/kobako/errors.rb
57
+ - lib/kobako/fault.rb
58
+ - lib/kobako/handle.rb
59
+ - lib/kobako/namespace.rb
60
+ - lib/kobako/outcome.rb
61
+ - lib/kobako/outcome/panic.rb
62
+ - lib/kobako/runtime.rb
63
+ - lib/kobako/sandbox.rb
64
+ - lib/kobako/sandbox_options.rb
65
+ - lib/kobako/snapshot.rb
66
+ - lib/kobako/snippet.rb
67
+ - lib/kobako/snippet/binary.rb
68
+ - lib/kobako/snippet/source.rb
69
+ - lib/kobako/transport.rb
70
+ - lib/kobako/transport/dispatcher.rb
71
+ - lib/kobako/transport/error.rb
72
+ - lib/kobako/transport/request.rb
73
+ - lib/kobako/transport/response.rb
74
+ - lib/kobako/transport/run.rb
75
+ - lib/kobako/transport/yield.rb
76
+ - lib/kobako/transport/yielder.rb
77
+ - lib/kobako/usage.rb
78
+ - lib/kobako/version.rb
79
+ - release-please-config.json
80
+ - sig/kobako.rbs
81
+ - sig/kobako/capture.rbs
82
+ - sig/kobako/catalog.rbs
83
+ - sig/kobako/catalog/handles.rbs
84
+ - sig/kobako/catalog/namespaces.rbs
85
+ - sig/kobako/catalog/snippets.rbs
86
+ - sig/kobako/codec/decoder.rbs
87
+ - sig/kobako/codec/encoder.rbs
88
+ - sig/kobako/codec/error.rbs
89
+ - sig/kobako/codec/factory.rbs
90
+ - sig/kobako/codec/utils.rbs
91
+ - sig/kobako/errors.rbs
92
+ - sig/kobako/fault.rbs
93
+ - sig/kobako/handle.rbs
94
+ - sig/kobako/namespace.rbs
95
+ - sig/kobako/outcome.rbs
96
+ - sig/kobako/outcome/panic.rbs
97
+ - sig/kobako/runtime.rbs
98
+ - sig/kobako/sandbox.rbs
99
+ - sig/kobako/sandbox_options.rbs
100
+ - sig/kobako/snapshot.rbs
101
+ - sig/kobako/snippet.rbs
102
+ - sig/kobako/snippet/binary.rbs
103
+ - sig/kobako/snippet/source.rbs
104
+ - sig/kobako/transport.rbs
105
+ - sig/kobako/transport/dispatcher.rbs
106
+ - sig/kobako/transport/error.rbs
107
+ - sig/kobako/transport/request.rbs
108
+ - sig/kobako/transport/response.rbs
109
+ - sig/kobako/transport/run.rbs
110
+ - sig/kobako/transport/yield.rbs
111
+ - sig/kobako/transport/yielder.rbs
112
+ - sig/kobako/usage.rbs
113
+ homepage: https://github.com/elct9620/kobako
114
+ licenses:
115
+ - Apache-2.0
116
+ metadata:
117
+ allowed_push_host: https://rubygems.org
118
+ homepage_uri: https://github.com/elct9620/kobako
119
+ source_code_uri: https://github.com/elct9620/kobako
120
+ changelog_uri: https://github.com/elct9620/kobako/blob/main/CHANGELOG.md
121
+ bug_tracker_uri: https://github.com/elct9620/kobako/issues
122
+ rubygems_mfa_required: 'true'
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '3.3'
132
+ - - "<"
133
+ - !ruby/object:Gem::Version
134
+ version: 4.1.dev
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 3.3.11
140
+ requirements: []
141
+ rubygems_version: 3.5.23
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Embeddable Wasm sandbox for running untrusted mruby code from Ruby applications.
145
+ test_files: []