daytona 0.169.0 → 0.171.0.rc.1
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/.rspec +3 -0
- data/lib/daytona/code_interpreter.rb +42 -58
- data/lib/daytona/common/charts.rb +3 -0
- data/lib/daytona/common/code_interpreter.rb +3 -0
- data/lib/daytona/common/code_language.rb +3 -0
- data/lib/daytona/common/daytona.rb +15 -2
- data/lib/daytona/common/file_system.rb +3 -0
- data/lib/daytona/common/git.rb +3 -0
- data/lib/daytona/common/image.rb +6 -2
- data/lib/daytona/common/process.rb +3 -0
- data/lib/daytona/common/pty.rb +4 -1
- data/lib/daytona/common/resources.rb +3 -0
- data/lib/daytona/common/response.rb +3 -0
- data/lib/daytona/common/snapshot.rb +3 -0
- data/lib/daytona/computer_use.rb +8 -5
- data/lib/daytona/config.rb +3 -0
- data/lib/daytona/daytona.rb +5 -1
- data/lib/daytona/file_system.rb +3 -0
- data/lib/daytona/git.rb +4 -1
- data/lib/daytona/lsp_server.rb +3 -0
- data/lib/daytona/object_storage.rb +3 -0
- data/lib/daytona/otel.rb +3 -0
- data/lib/daytona/process.rb +7 -1
- data/lib/daytona/sandbox.rb +3 -0
- data/lib/daytona/sdk/version.rb +4 -1
- data/lib/daytona/sdk.rb +3 -0
- data/lib/daytona/snapshot_service.rb +3 -0
- data/lib/daytona/util.rb +3 -0
- data/lib/daytona/volume.rb +3 -0
- data/lib/daytona/volume_service.rb +3 -0
- data/lib/daytona.rb +3 -0
- data/project.json +17 -0
- data/scripts/generate-docs.rb +2 -0
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5471eba0ff200757c6372f92f80f5369c48a17cddb2dcf46f1c75f802a5e4519
|
|
4
|
+
data.tar.gz: d3ce842087c3ce1a84ee083d510650e2cd64ff3c516ab0240a967e9a59047810
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 15fa69f937b6c13f5ae96509ae0ab2e31be713075f7247fd3d3a71c1078771aa775f762a00ab9c6e84cd78688ac7cda9973ca0c12bced64894d758100758f5bc
|
|
7
|
+
data.tar.gz: b5cccda24d664d4ecc74a01fe891e12310a51d20152dfbae8be15255da5ed4244c23cd7e77250cbb8405ba98871e25e40125a0f1538615124d2e3f9a3e599710
|
data/.rspec
ADDED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
require 'json'
|
|
@@ -100,15 +103,11 @@ module Daytona
|
|
|
100
103
|
'Accept' => 'application/json'
|
|
101
104
|
)
|
|
102
105
|
|
|
103
|
-
# Use queue for synchronization
|
|
104
106
|
completion_queue = Queue.new
|
|
105
|
-
interpreter = self
|
|
106
|
-
last_message_time = Time.now
|
|
107
|
-
message_mutex = Mutex.new
|
|
107
|
+
interpreter = self
|
|
108
108
|
|
|
109
109
|
puts "[DEBUG] Connecting to WebSocket: #{ws_url}" if ENV['DEBUG']
|
|
110
110
|
|
|
111
|
-
# Connect to WebSocket and execute
|
|
112
111
|
ws = WebSocket::Client::Simple.connect(ws_url, headers:)
|
|
113
112
|
|
|
114
113
|
ws.on :open do
|
|
@@ -117,8 +116,6 @@ module Daytona
|
|
|
117
116
|
end
|
|
118
117
|
|
|
119
118
|
ws.on :message do |msg|
|
|
120
|
-
message_mutex.synchronize { last_message_time = Time.now }
|
|
121
|
-
|
|
122
119
|
puts "[DEBUG] Received message (length=#{msg.data.length}): #{msg.data.inspect[0..200]}" if ENV['DEBUG']
|
|
123
120
|
|
|
124
121
|
interpreter.send(:handle_message, msg.data, result, on_stdout, on_stderr, on_error, completion_queue)
|
|
@@ -143,72 +140,59 @@ module Daytona
|
|
|
143
140
|
end
|
|
144
141
|
end
|
|
145
142
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
# Otherwise use short idle timeout for normal completion
|
|
149
|
-
idle_timeout = timeout ? (timeout + 2.0) : 1.0
|
|
150
|
-
max_wait = (timeout || 300) + 3 # Add buffer to configured timeout
|
|
143
|
+
no_timeout = timeout.is_a?(Numeric) && timeout <= 0
|
|
144
|
+
max_wait = no_timeout ? nil : (timeout || 600) + 3
|
|
151
145
|
start_time = Time.now
|
|
152
146
|
completion_reason = nil
|
|
153
147
|
|
|
154
|
-
# Wait for completion or close event
|
|
155
148
|
loop do
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
completion_reason = :completed
|
|
163
|
-
break
|
|
164
|
-
# If it's an error from close event (like timeout), raise it
|
|
165
|
-
elsif completion[:type] == :error_from_close
|
|
166
|
-
error_msg = completion[:error]
|
|
167
|
-
# Raise TimeoutError for timeout cases, regular Error for others
|
|
168
|
-
if error_msg.include?('timed out') || error_msg.include?('Execution timed out')
|
|
169
|
-
raise Sdk::TimeoutError, error_msg
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
raise Sdk::Error, error_msg
|
|
173
|
-
|
|
174
|
-
# Close event during execution (before control message) = likely timeout or error
|
|
175
|
-
elsif completion[:type] == :close
|
|
176
|
-
elapsed = Time.now - start_time
|
|
177
|
-
# If we got close near the timeout, it's likely a timeout
|
|
178
|
-
if timeout && elapsed >= timeout && elapsed < (timeout + 2)
|
|
179
|
-
raise Sdk::TimeoutError,
|
|
180
|
-
'Execution timed out: operation exceeded the configured `timeout`. Provide a larger value if needed.'
|
|
181
|
-
end
|
|
182
|
-
# Otherwise normal close
|
|
183
|
-
completion_reason = :close
|
|
184
|
-
break
|
|
185
|
-
# WebSocket errors
|
|
186
|
-
elsif completion[:type] == :error && !completion[:error].message.include?('stream closed')
|
|
187
|
-
raise Sdk::Error, "WebSocket error: #{completion[:error].message}"
|
|
149
|
+
if max_wait
|
|
150
|
+
remaining = max_wait - (Time.now - start_time)
|
|
151
|
+
if remaining <= 0
|
|
152
|
+
ws.close
|
|
153
|
+
raise Sdk::TimeoutError,
|
|
154
|
+
'Execution timed out: operation exceeded the configured `timeout`. Provide a larger value if needed.'
|
|
188
155
|
end
|
|
189
|
-
rescue ThreadError
|
|
190
|
-
# Queue is empty, check idle timeout
|
|
191
156
|
end
|
|
192
157
|
|
|
193
|
-
|
|
194
|
-
time_since_last_message = message_mutex.synchronize { Time.now - last_message_time }
|
|
195
|
-
if time_since_last_message > idle_timeout
|
|
196
|
-
puts "[DEBUG] Idle timeout reached (#{idle_timeout}s), assuming completion" if ENV['DEBUG']
|
|
197
|
-
completion_reason = :idle_complete
|
|
198
|
-
break
|
|
199
|
-
end
|
|
158
|
+
completion = completion_queue.pop(timeout: max_wait ? remaining : nil)
|
|
200
159
|
|
|
201
|
-
|
|
202
|
-
if Time.now - start_time > max_wait
|
|
160
|
+
if completion.nil?
|
|
203
161
|
ws.close
|
|
204
162
|
raise Sdk::TimeoutError,
|
|
205
163
|
'Execution timed out: operation exceeded the configured `timeout`. Provide a larger value if needed.'
|
|
206
164
|
end
|
|
207
165
|
|
|
208
|
-
|
|
166
|
+
puts "[DEBUG] Got completion signal: #{completion[:type]}" if ENV['DEBUG']
|
|
167
|
+
|
|
168
|
+
if completion[:type] == :completed
|
|
169
|
+
completion_reason = :completed
|
|
170
|
+
break
|
|
171
|
+
elsif completion[:type] == :error_from_close
|
|
172
|
+
error_msg = completion[:error]
|
|
173
|
+
if error_msg.include?('timed out') || error_msg.include?('Execution timed out')
|
|
174
|
+
raise Sdk::TimeoutError, error_msg
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
raise Sdk::Error, error_msg
|
|
178
|
+
elsif completion[:type] == :close
|
|
179
|
+
elapsed = Time.now - start_time
|
|
180
|
+
if timeout && timeout > 0 && elapsed >= timeout && elapsed < (timeout + 2)
|
|
181
|
+
raise Sdk::TimeoutError,
|
|
182
|
+
'Execution timed out: operation exceeded the configured `timeout`. Provide a larger value if needed.'
|
|
183
|
+
end
|
|
184
|
+
completion_reason = :close
|
|
185
|
+
break
|
|
186
|
+
elsif completion[:type] == :error
|
|
187
|
+
unless completion[:error].message.include?('stream closed')
|
|
188
|
+
raise Sdk::Error, "WebSocket error: #{completion[:error].message}"
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
completion_reason = :close
|
|
192
|
+
break
|
|
193
|
+
end
|
|
209
194
|
end
|
|
210
195
|
|
|
211
|
-
# Close WebSocket if not already closed
|
|
212
196
|
ws.close if completion_reason != :close
|
|
213
197
|
sleep 0.05
|
|
214
198
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
module Daytona
|
|
@@ -43,6 +46,12 @@ module Daytona
|
|
|
43
46
|
# @return [Boolean, nil] Whether the Sandbox should be ephemeral
|
|
44
47
|
attr_accessor :ephemeral
|
|
45
48
|
|
|
49
|
+
# @return [String, nil] ID or name of an existing Sandbox to link the new Sandbox to. The new
|
|
50
|
+
# Sandbox will be scheduled on the same runner as the linked Sandbox so a local network can be
|
|
51
|
+
# established between them. Only supported for android-class snapshots. Linked Sandboxes must be
|
|
52
|
+
# ephemeral (auto_delete_interval=0) and cannot themselves be linked to another Sandbox.
|
|
53
|
+
attr_accessor :linked_sandbox
|
|
54
|
+
|
|
46
55
|
# Initialize CreateSandboxBaseParams
|
|
47
56
|
#
|
|
48
57
|
# @param language [Symbol, nil] Programming language for the Sandbox
|
|
@@ -58,6 +67,7 @@ module Daytona
|
|
|
58
67
|
# @param network_block_all [Boolean, nil] Whether to block all network access for the Sandbox
|
|
59
68
|
# @param network_allow_list [String, nil] Comma-separated list of allowed CIDR network addresses for the Sandbox
|
|
60
69
|
# @param ephemeral [Boolean, nil] Whether the Sandbox should be ephemeral
|
|
70
|
+
# @param linked_sandbox [String, nil] ID or name of an existing Sandbox to link the new Sandbox to
|
|
61
71
|
def initialize( # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
|
|
62
72
|
language: nil,
|
|
63
73
|
os_user: nil,
|
|
@@ -71,7 +81,8 @@ module Daytona
|
|
|
71
81
|
volumes: nil,
|
|
72
82
|
network_block_all: nil,
|
|
73
83
|
network_allow_list: nil,
|
|
74
|
-
ephemeral: nil
|
|
84
|
+
ephemeral: nil,
|
|
85
|
+
linked_sandbox: nil
|
|
75
86
|
)
|
|
76
87
|
@language = language
|
|
77
88
|
@os_user = os_user
|
|
@@ -86,6 +97,7 @@ module Daytona
|
|
|
86
97
|
@network_block_all = network_block_all
|
|
87
98
|
@network_allow_list = network_allow_list
|
|
88
99
|
@ephemeral = ephemeral
|
|
100
|
+
@linked_sandbox = linked_sandbox
|
|
89
101
|
|
|
90
102
|
# Handle ephemeral and auto_delete_interval conflict
|
|
91
103
|
handle_ephemeral_auto_delete_conflict
|
|
@@ -108,7 +120,8 @@ module Daytona
|
|
|
108
120
|
volumes:,
|
|
109
121
|
network_block_all:,
|
|
110
122
|
network_allow_list:,
|
|
111
|
-
ephemeral
|
|
123
|
+
ephemeral:,
|
|
124
|
+
linked_sandbox:
|
|
112
125
|
}.compact
|
|
113
126
|
end
|
|
114
127
|
|
data/lib/daytona/common/git.rb
CHANGED
data/lib/daytona/common/image.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
require 'digest'
|
|
@@ -261,8 +264,9 @@ module Daytona
|
|
|
261
264
|
raise Sdk::Error, "Context directory #{context_dir} does not exist" unless Dir.exist?(context_dir)
|
|
262
265
|
end
|
|
263
266
|
|
|
264
|
-
# Extract copy sources from dockerfile commands
|
|
265
|
-
extract_copy_sources
|
|
267
|
+
# Extract copy sources from dockerfile commands (class-level helper)
|
|
268
|
+
self.class.send(:extract_copy_sources, dockerfile_commands.join("\n"),
|
|
269
|
+
context_dir || '').each do |context_path, original_path|
|
|
266
270
|
archive_base_path = context_path
|
|
267
271
|
if context_dir && !original_path.start_with?(context_dir)
|
|
268
272
|
archive_base_path = context_path.delete_prefix(context_dir)
|
data/lib/daytona/common/pty.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
require 'json'
|
|
@@ -299,7 +302,7 @@ module Daytona
|
|
|
299
302
|
module WebSocketControlStatus
|
|
300
303
|
ALL = [
|
|
301
304
|
CONNECTED = 'connected',
|
|
302
|
-
|
|
305
|
+
ERROR = 'error'
|
|
303
306
|
].freeze
|
|
304
307
|
end
|
|
305
308
|
end
|
data/lib/daytona/computer_use.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
module Daytona
|
|
@@ -88,7 +91,7 @@ module Daytona
|
|
|
88
91
|
#
|
|
89
92
|
# @example
|
|
90
93
|
# result = sandbox.computer_use.mouse.drag(start_x: 50, start_y: 50, end_x: 150, end_y: 150)
|
|
91
|
-
# puts "
|
|
94
|
+
# puts "Drag ended at #{result.x}, #{result.y}"
|
|
92
95
|
def drag(start_x:, start_y:, end_x:, end_y:, button: 'left')
|
|
93
96
|
request = DaytonaToolboxApiClient::MouseDragRequest.new(start_x:, start_y:, end_x:, end_y:, button:)
|
|
94
97
|
toolbox_api.drag(request)
|
|
@@ -167,14 +170,14 @@ module Daytona
|
|
|
167
170
|
|
|
168
171
|
# Presses a key with optional modifiers.
|
|
169
172
|
#
|
|
170
|
-
# @param key [String] The key to press
|
|
171
|
-
# @param modifiers [Array<String>, nil]
|
|
173
|
+
# @param key [String] The key to press. Canonical names include 'enter', 'escape', 'tab', letters, digits, unshifted punctuation, function keys, and grammar-safe numpad names such as 'num_plus'. Named keys are case-insensitive, and common aliases such as 'Return' and 'Escape' are normalized.
|
|
174
|
+
# @param modifiers [Array<String>, nil] Canonical modifier names are 'ctrl', 'alt', 'shift', and 'cmd'. Common aliases such as 'control', 'option', 'meta', and 'win' are normalized.
|
|
172
175
|
# @return [void]
|
|
173
176
|
# @raise [Daytona::Sdk::Error] If the operation fails
|
|
174
177
|
#
|
|
175
178
|
# @example
|
|
176
179
|
# # Press Enter
|
|
177
|
-
# sandbox.computer_use.keyboard.press("
|
|
180
|
+
# sandbox.computer_use.keyboard.press("enter")
|
|
178
181
|
#
|
|
179
182
|
# # Press Ctrl+C
|
|
180
183
|
# sandbox.computer_use.keyboard.press("c", modifiers: ["ctrl"])
|
|
@@ -190,7 +193,7 @@ module Daytona
|
|
|
190
193
|
|
|
191
194
|
# Presses a hotkey combination.
|
|
192
195
|
#
|
|
193
|
-
# @param keys [String]
|
|
196
|
+
# @param keys [String] A single atomic hotkey chord (e.g., 'ctrl+c', 'alt+tab', 'cmd+shift+t', 'ctrl + c', 'shift'). Uses the same normalized key contract as #press.
|
|
194
197
|
# @return [void]
|
|
195
198
|
# @raise [Daytona::Sdk::Error] If the operation fails
|
|
196
199
|
#
|
data/lib/daytona/config.rb
CHANGED
data/lib/daytona/daytona.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
require 'json'
|
|
@@ -166,7 +169,8 @@ module Daytona
|
|
|
166
169
|
auto_delete_interval: params.auto_delete_interval,
|
|
167
170
|
volumes: params.volumes,
|
|
168
171
|
network_block_all: params.network_block_all,
|
|
169
|
-
network_allow_list: params.network_allow_list
|
|
172
|
+
network_allow_list: params.network_allow_list,
|
|
173
|
+
linked_sandbox: params.linked_sandbox
|
|
170
174
|
)
|
|
171
175
|
|
|
172
176
|
create_sandbox.snapshot = params.snapshot if params.respond_to?(:snapshot)
|
data/lib/daytona/file_system.rb
CHANGED
data/lib/daytona/git.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
module Daytona
|
|
@@ -142,7 +145,7 @@ module Daytona
|
|
|
142
145
|
response = toolbox_api.commit_changes(
|
|
143
146
|
DaytonaToolboxApiClient::GitCommitRequest.new(path:, message:, author:, email:, allow_empty:)
|
|
144
147
|
)
|
|
145
|
-
GitCommitResponse.new(sha: response.
|
|
148
|
+
GitCommitResponse.new(sha: response._hash)
|
|
146
149
|
rescue StandardError => e
|
|
147
150
|
raise Sdk::Error, "Failed to commit changes: #{e.message}"
|
|
148
151
|
end
|
data/lib/daytona/lsp_server.rb
CHANGED
data/lib/daytona/otel.rb
CHANGED
data/lib/daytona/process.rb
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# Copyright Daytona Platforms Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
1
4
|
# frozen_string_literal: true
|
|
2
5
|
|
|
3
6
|
require 'uri'
|
|
@@ -500,7 +503,10 @@ module Daytona
|
|
|
500
503
|
# puts "PTY Session #{session.id}: #{session.cols}x#{session.rows}"
|
|
501
504
|
# end
|
|
502
505
|
def list_pty_sessions
|
|
503
|
-
toolbox_api.list_pty_sessions
|
|
506
|
+
response = toolbox_api.list_pty_sessions
|
|
507
|
+
return [] if response.nil?
|
|
508
|
+
|
|
509
|
+
response.respond_to?(:sessions) ? (response.sessions || []) : response
|
|
504
510
|
end
|
|
505
511
|
|
|
506
512
|
# Gets detailed information about a specific PTY session
|
data/lib/daytona/sandbox.rb
CHANGED
data/lib/daytona/sdk/version.rb
CHANGED
data/lib/daytona/sdk.rb
CHANGED
data/lib/daytona/util.rb
CHANGED
data/lib/daytona/volume.rb
CHANGED
data/lib/daytona.rb
CHANGED
data/project.json
CHANGED
|
@@ -41,6 +41,23 @@
|
|
|
41
41
|
"command": "bundle exec rubocop"
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
|
+
"test": {
|
|
45
|
+
"executor": "nx:run-commands",
|
|
46
|
+
"cache": true,
|
|
47
|
+
"inputs": ["default", { "env": "DAYTONA_API_KEY" }, { "env": "DAYTONA_API_URL" }, { "env": "DAYTONA_JWT_TOKEN" }, { "env": "DAYTONA_ORGANIZATION_ID" }, { "env": "DAYTONA_TARGET" }],
|
|
48
|
+
"outputs": [],
|
|
49
|
+
"options": {
|
|
50
|
+
"cwd": "{projectRoot}",
|
|
51
|
+
"command": "bundle exec rspec --format documentation --tag '~e2e'"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"test:e2e": {
|
|
55
|
+
"executor": "nx:run-commands",
|
|
56
|
+
"options": {
|
|
57
|
+
"cwd": "{projectRoot}",
|
|
58
|
+
"command": "bundle exec rspec spec/e2e_spec.rb --format documentation"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
44
61
|
"format": {
|
|
45
62
|
"executor": "nx:run-commands",
|
|
46
63
|
"options": {
|
data/scripts/generate-docs.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: daytona
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.171.0.rc.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daytona Platforms Inc.
|
|
@@ -85,28 +85,28 @@ dependencies:
|
|
|
85
85
|
requirements:
|
|
86
86
|
- - '='
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: 0.
|
|
88
|
+
version: 0.171.0.rc.1
|
|
89
89
|
type: :runtime
|
|
90
90
|
prerelease: false
|
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
93
|
- - '='
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: 0.
|
|
95
|
+
version: 0.171.0.rc.1
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
97
|
name: daytona_toolbox_api_client
|
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
|
99
99
|
requirements:
|
|
100
100
|
- - '='
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: 0.
|
|
102
|
+
version: 0.171.0.rc.1
|
|
103
103
|
type: :runtime
|
|
104
104
|
prerelease: false
|
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
106
|
requirements:
|
|
107
107
|
- - '='
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: 0.
|
|
109
|
+
version: 0.171.0.rc.1
|
|
110
110
|
- !ruby/object:Gem::Dependency
|
|
111
111
|
name: dotenv
|
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -171,6 +171,7 @@ executables: []
|
|
|
171
171
|
extensions: []
|
|
172
172
|
extra_rdoc_files: []
|
|
173
173
|
files:
|
|
174
|
+
- ".rspec"
|
|
174
175
|
- ".rubocop.yml"
|
|
175
176
|
- ".ruby-version"
|
|
176
177
|
- CODE_OF_CONDUCT.md
|