handinger 0.1.0 → 0.3.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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +35 -0
  3. data/README.md +19 -20
  4. data/SECURITY.md +4 -0
  5. data/lib/handinger/client.rb +21 -1
  6. data/lib/handinger/internal/transport/base_client.rb +1 -3
  7. data/lib/handinger/internal/type/base_model.rb +3 -3
  8. data/lib/handinger/models/create_task.rb +28 -0
  9. data/lib/handinger/models/create_worker.rb +59 -19
  10. data/lib/handinger/models/delete_task_response.rb +16 -0
  11. data/lib/handinger/models/delete_worker_response.rb +16 -0
  12. data/lib/handinger/models/task.rb +119 -0
  13. data/lib/handinger/models/task_create_params.rb +14 -0
  14. data/lib/handinger/models/task_delete_params.rb +20 -0
  15. data/lib/handinger/models/task_retrieve_params.rb +20 -0
  16. data/lib/handinger/models/task_with_turns.rb +113 -0
  17. data/lib/handinger/models/update_worker.rb +71 -0
  18. data/lib/handinger/models/worker.rb +9 -84
  19. data/lib/handinger/models/{worker_stream_updates_params.rb → worker_delete_params.rb} +2 -2
  20. data/lib/handinger/models/worker_retrieve_email_response.rb +10 -1
  21. data/lib/handinger/models/worker_retrieve_params.rb +22 -4
  22. data/lib/handinger/models/worker_template.rb +84 -0
  23. data/lib/handinger/models/{worker_continue_params.rb → worker_update_params.rb} +2 -2
  24. data/lib/handinger/models.rb +23 -5
  25. data/lib/handinger/resources/tasks.rb +98 -0
  26. data/lib/handinger/resources/workers.rb +66 -68
  27. data/lib/handinger/version.rb +1 -1
  28. data/lib/handinger.rb +13 -6
  29. data/rbi/handinger/client.rbi +5 -0
  30. data/rbi/handinger/internal/transport/base_client.rbi +2 -18
  31. data/rbi/handinger/models/create_task.rbi +40 -0
  32. data/rbi/handinger/models/create_worker.rbi +84 -26
  33. data/rbi/handinger/models/delete_task_response.rbi +23 -0
  34. data/rbi/handinger/models/delete_worker_response.rbi +23 -0
  35. data/rbi/handinger/models/task.rbi +160 -0
  36. data/rbi/handinger/models/task_create_params.rbi +27 -0
  37. data/rbi/handinger/models/task_delete_params.rbi +35 -0
  38. data/rbi/handinger/models/task_retrieve_params.rbi +35 -0
  39. data/rbi/handinger/models/task_with_turns.rbi +149 -0
  40. data/rbi/handinger/models/update_worker.rbi +112 -0
  41. data/rbi/handinger/models/worker.rbi +10 -120
  42. data/rbi/handinger/models/{worker_stream_updates_params.rbi → worker_delete_params.rbi} +2 -5
  43. data/rbi/handinger/models/worker_retrieve_email_response.rbi +20 -1
  44. data/rbi/handinger/models/worker_retrieve_params.rbi +40 -6
  45. data/rbi/handinger/models/worker_template.rbi +110 -0
  46. data/rbi/handinger/models/{worker_continue_params.rbi → worker_update_params.rbi} +2 -2
  47. data/rbi/handinger/models.rbi +23 -5
  48. data/rbi/handinger/resources/tasks.rbi +86 -0
  49. data/rbi/handinger/resources/workers.rbi +68 -43
  50. data/sig/handinger/client.rbs +2 -0
  51. data/sig/handinger/models/create_task.rbs +19 -0
  52. data/sig/handinger/models/create_worker.rbs +44 -23
  53. data/sig/handinger/models/delete_task_response.rbs +13 -0
  54. data/sig/handinger/models/delete_worker_response.rbs +13 -0
  55. data/sig/handinger/models/task.rbs +114 -0
  56. data/sig/handinger/models/task_create_params.rbs +15 -0
  57. data/sig/handinger/models/task_delete_params.rbs +23 -0
  58. data/sig/handinger/models/task_retrieve_params.rbs +23 -0
  59. data/sig/handinger/models/task_with_turns.rbs +104 -0
  60. data/sig/handinger/models/update_worker.rbs +61 -0
  61. data/sig/handinger/models/worker.rbs +7 -89
  62. data/sig/handinger/models/{worker_stream_updates_params.rbs → worker_delete_params.rbs} +2 -2
  63. data/sig/handinger/models/worker_retrieve_email_response.rbs +9 -1
  64. data/sig/handinger/models/worker_retrieve_params.rbs +21 -5
  65. data/sig/handinger/models/worker_template.rbs +76 -0
  66. data/sig/handinger/models/{worker_continue_params.rbs → worker_update_params.rbs} +2 -2
  67. data/sig/handinger/models.rbs +23 -5
  68. data/sig/handinger/resources/tasks.rbs +29 -0
  69. data/sig/handinger/resources/workers.rbs +19 -20
  70. metadata +42 -21
  71. data/lib/handinger/internal/stream.rb +0 -29
  72. data/lib/handinger/internal/type/base_stream.rb +0 -83
  73. data/lib/handinger/models/worker_retrieve_file_params.rb +0 -26
  74. data/lib/handinger/models/worker_stream_updates_response.rb +0 -7
  75. data/rbi/handinger/internal/stream.rbi +0 -20
  76. data/rbi/handinger/internal/type/base_stream.rbi +0 -75
  77. data/rbi/handinger/models/worker_retrieve_file_params.rbi +0 -46
  78. data/rbi/handinger/models/worker_stream_updates_response.rbi +0 -7
  79. data/sig/handinger/internal/stream.rbs +0 -9
  80. data/sig/handinger/internal/type/base_stream.rbs +0 -38
  81. data/sig/handinger/models/worker_retrieve_file_params.rbs +0 -28
  82. data/sig/handinger/models/worker_stream_updates_response.rbs +0 -5
@@ -2,42 +2,60 @@
2
2
 
3
3
  module Handinger
4
4
  module Resources
5
+ # Create, retrieve, and manage agent worker templates.
5
6
  class Workers
6
7
  # Manage future and recurring worker tasks.
7
8
  # @return [Handinger::Resources::Workers::Schedules]
8
9
  attr_reader :schedules
9
10
 
10
- # Create a new agent worker and start it with the supplied instruction.
11
+ # Some parameter documentations has been truncated, see
12
+ # {Handinger::Models::WorkerCreateParams} for more details.
11
13
  #
12
- # @overload create(input:, budget: nil, stream: nil, request_options: {})
14
+ # Create a new worker. The worker is a reusable agent template; tasks are runs
15
+ # against this template. Use `POST /tasks` to actually run the agent.
16
+ #
17
+ # @overload create(instructions: nil, output_schema: nil, prompt: nil, summary: nil, title: nil, visibility: nil, request_options: {})
18
+ #
19
+ # @param instructions [String] Persistent system prompt the worker uses for every task it runs.
20
+ #
21
+ # @param output_schema [Hash{Symbol=>Object}] Optional JSON Schema (Draft-07) describing the structured object the worker must
22
+ #
23
+ # @param prompt [String] Natural-language description of the worker to use for AI-generated instructions
24
+ #
25
+ # @param summary [String] Short one-line description of the worker's purpose. Auto-generated when omitted
26
+ #
27
+ # @param title [String] Optional display name. When omitted, Handinger assigns a random dog-themed name.
28
+ #
29
+ # @param visibility [Symbol, Handinger::Models::CreateWorker::Visibility] `public` (default) is visible to all org members. `private` is only visible to i
13
30
  #
14
- # @param input [String]
15
- # @param budget [Symbol, Handinger::Models::CreateWorker::Budget]
16
- # @param stream [Boolean]
17
31
  # @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
18
32
  #
19
- # @return [Handinger::Models::Worker]
33
+ # @return [Handinger::Models::WorkerTemplate]
20
34
  #
21
35
  # @see Handinger::Models::WorkerCreateParams
22
- def create(params)
36
+ def create(params = {})
23
37
  parsed, options = Handinger::WorkerCreateParams.dump_request(params)
24
38
  @client.request(
25
39
  method: :post,
26
40
  path: "api/workers",
27
41
  body: parsed,
28
- model: Handinger::Worker,
42
+ model: Handinger::WorkerTemplate,
29
43
  options: options
30
44
  )
31
45
  end
32
46
 
33
- # Retrieve the current worker state. Pass stream=true or request text/event-stream
34
- # to subscribe to updates.
47
+ # Some parameter documentations has been truncated, see
48
+ # {Handinger::Models::WorkerRetrieveParams} for more details.
49
+ #
50
+ # Retrieve the current worker state and messages from its most recent task.
51
+ # Returns a JSON worker object by default, or a server-sent event stream when
52
+ # `stream=true`.
35
53
  #
36
54
  # @overload retrieve(worker_id, stream: nil, request_options: {})
37
55
  #
38
56
  # @param worker_id [String] Worker id returned by the create worker endpoint.
39
57
  #
40
- # @param stream [Boolean] Return a server-sent event stream instead of JSON.
58
+ # @param stream [Symbol, Handinger::Models::WorkerRetrieveParams::Stream] Set to "true" to receive a server-sent event stream that replays all stored mess
41
59
  #
42
60
  # @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
43
61
  #
@@ -56,101 +74,81 @@ module Handinger
56
74
  )
57
75
  end
58
76
 
59
- # Send another instruction to an existing worker.
77
+ # Some parameter documentations has been truncated, see
78
+ # {Handinger::Models::WorkerUpdateParams} for more details.
79
+ #
80
+ # Update a worker's instructions, title, summary, visibility, or output schema.
81
+ # Only the fields you send are changed; omitted fields keep their current values.
82
+ # Only the worker creator can update a worker.
60
83
  #
61
- # @overload continue(worker_id, input:, budget: nil, stream: nil, request_options: {})
84
+ # @overload update(worker_id, instructions: nil, output_schema: nil, summary: nil, title: nil, visibility: nil, request_options: {})
62
85
  #
63
86
  # @param worker_id [String] Worker id returned by the create worker endpoint.
64
87
  #
65
- # @param input [String]
88
+ # @param instructions [String] Replaces the persistent system prompt. Subsequent tasks pick up the new instruct
66
89
  #
67
- # @param budget [Symbol, Handinger::Models::CreateWorker::Budget]
90
+ # @param output_schema [Hash{Symbol=>Object}, nil] Replace the worker's structured output schema. Pass `null` to clear it and retur
68
91
  #
69
- # @param stream [Boolean]
92
+ # @param summary [String] Replaces the worker's short one-line summary.
93
+ #
94
+ # @param title [String] New display name for the worker.
95
+ #
96
+ # @param visibility [Symbol, Handinger::Models::UpdateWorker::Visibility] Change visibility between `public` (any org member can run tasks) and `private`
70
97
  #
71
98
  # @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
72
99
  #
73
- # @return [Handinger::Models::Worker]
100
+ # @return [Handinger::Models::WorkerTemplate]
74
101
  #
75
- # @see Handinger::Models::WorkerContinueParams
76
- def continue(worker_id, params)
77
- parsed, options = Handinger::WorkerContinueParams.dump_request(params)
102
+ # @see Handinger::Models::WorkerUpdateParams
103
+ def update(worker_id, params = {})
104
+ parsed, options = Handinger::WorkerUpdateParams.dump_request(params)
78
105
  @client.request(
79
- method: :post,
106
+ method: :patch,
80
107
  path: ["api/workers/%1$s", worker_id],
81
108
  body: parsed,
82
- model: Handinger::Worker,
109
+ model: Handinger::WorkerTemplate,
83
110
  options: options
84
111
  )
85
112
  end
86
113
 
87
- # Retrieve the inbound email address for a worker.
114
+ # Permanently delete a worker template along with its tasks, turns, files,
115
+ # schedules, and integrations. This action is not reversible. Only the worker
116
+ # creator can delete a worker.
88
117
  #
89
- # @overload retrieve_email(worker_id, request_options: {})
118
+ # @overload delete(worker_id, request_options: {})
90
119
  #
91
120
  # @param worker_id [String] Worker id returned by the create worker endpoint.
92
121
  #
93
122
  # @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
94
123
  #
95
- # @return [String]
124
+ # @return [Handinger::Models::DeleteWorkerResponse]
96
125
  #
97
- # @see Handinger::Models::WorkerRetrieveEmailParams
98
- def retrieve_email(worker_id, params = {})
126
+ # @see Handinger::Models::WorkerDeleteParams
127
+ def delete(worker_id, params = {})
99
128
  @client.request(
100
- method: :get,
101
- path: ["api/workers/%1$s/email", worker_id],
102
- model: String,
129
+ method: :delete,
130
+ path: ["api/workers/%1$s", worker_id],
131
+ model: Handinger::DeleteWorkerResponse,
103
132
  options: params[:request_options]
104
133
  )
105
134
  end
106
135
 
107
- # Retrieve a file published from a worker workspace. The runtime route accepts
108
- # nested paths after /files/.
109
- #
110
- # @overload retrieve_file(file_path, worker_id:, request_options: {})
111
- #
112
- # @param file_path [String] Workspace file path after /files. URL-encode slashes for nested paths.
113
- #
114
- # @param worker_id [String] Worker id returned by the create worker endpoint.
115
- #
116
- # @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
117
- #
118
- # @return [StringIO]
119
- #
120
- # @see Handinger::Models::WorkerRetrieveFileParams
121
- def retrieve_file(file_path, params)
122
- parsed, options = Handinger::WorkerRetrieveFileParams.dump_request(params)
123
- worker_id =
124
- parsed.delete(:worker_id) do
125
- raise ArgumentError.new("missing required path argument #{_1}")
126
- end
127
- @client.request(
128
- method: :get,
129
- path: ["api/workers/%1$s/files/%2$s", worker_id, file_path],
130
- headers: {"accept" => "application/octet-stream"},
131
- model: StringIO,
132
- options: options
133
- )
134
- end
135
-
136
- # Subscribe to a worker using server-sent events.
136
+ # Retrieve the inbound email address for a worker.
137
137
  #
138
- # @overload stream_updates_streaming(worker_id, request_options: {})
138
+ # @overload retrieve_email(worker_id, request_options: {})
139
139
  #
140
140
  # @param worker_id [String] Worker id returned by the create worker endpoint.
141
141
  #
142
142
  # @param request_options [Handinger::RequestOptions, Hash{Symbol=>Object}, nil]
143
143
  #
144
- # @return [Handinger::Internal::Stream<String>]
144
+ # @return [Handinger::Models::WorkerRetrieveEmailResponse]
145
145
  #
146
- # @see Handinger::Models::WorkerStreamUpdatesParams
147
- def stream_updates_streaming(worker_id, params = {})
146
+ # @see Handinger::Models::WorkerRetrieveEmailParams
147
+ def retrieve_email(worker_id, params = {})
148
148
  @client.request(
149
149
  method: :get,
150
- path: ["api/workers/%1$s/stream", worker_id],
151
- headers: {"accept" => "text/event-stream"},
152
- stream: Handinger::Internal::Stream,
153
- model: String,
150
+ path: ["api/workers/%1$s/email", worker_id],
151
+ model: Handinger::Models::WorkerRetrieveEmailResponse,
154
152
  options: params[:request_options]
155
153
  )
156
154
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Handinger
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/handinger.rb CHANGED
@@ -44,7 +44,6 @@ require_relative "handinger/internal/type/array_of"
44
44
  require_relative "handinger/internal/type/hash_of"
45
45
  require_relative "handinger/internal/type/base_model"
46
46
  require_relative "handinger/internal/type/base_page"
47
- require_relative "handinger/internal/type/base_stream"
48
47
  require_relative "handinger/internal/type/request_parameters"
49
48
  require_relative "handinger/internal"
50
49
  require_relative "handinger/request_options"
@@ -53,14 +52,21 @@ require_relative "handinger/errors"
53
52
  require_relative "handinger/internal/transport/base_client"
54
53
  require_relative "handinger/internal/transport/pooled_net_requester"
55
54
  require_relative "handinger/client"
56
- require_relative "handinger/internal/stream"
57
55
  require_relative "handinger/models/create_worker"
56
+ require_relative "handinger/models/create_task"
57
+ require_relative "handinger/models/update_worker"
58
+ require_relative "handinger/models/delete_task_response"
59
+ require_relative "handinger/models/delete_worker_response"
60
+ require_relative "handinger/models/task"
61
+ require_relative "handinger/models/task_create_params"
62
+ require_relative "handinger/models/task_delete_params"
63
+ require_relative "handinger/models/task_retrieve_params"
64
+ require_relative "handinger/models/task_with_turns"
58
65
  require_relative "handinger/models/worker"
59
- require_relative "handinger/models/worker_continue_params"
60
66
  require_relative "handinger/models/worker_create_params"
67
+ require_relative "handinger/models/worker_delete_params"
61
68
  require_relative "handinger/models/worker_retrieve_email_params"
62
69
  require_relative "handinger/models/worker_retrieve_email_response"
63
- require_relative "handinger/models/worker_retrieve_file_params"
64
70
  require_relative "handinger/models/worker_retrieve_params"
65
71
  require_relative "handinger/models/workers/schedule_cancel_params"
66
72
  require_relative "handinger/models/workers/schedule_cancel_response"
@@ -68,8 +74,9 @@ require_relative "handinger/models/workers/schedule_create_params"
68
74
  require_relative "handinger/models/workers/schedule_list_params"
69
75
  require_relative "handinger/models/workers/schedule_list_response"
70
76
  require_relative "handinger/models/workers/worker_schedule"
71
- require_relative "handinger/models/worker_stream_updates_params"
72
- require_relative "handinger/models/worker_stream_updates_response"
77
+ require_relative "handinger/models/worker_template"
78
+ require_relative "handinger/models/worker_update_params"
73
79
  require_relative "handinger/models"
80
+ require_relative "handinger/resources/tasks"
74
81
  require_relative "handinger/resources/workers"
75
82
  require_relative "handinger/resources/workers/schedules"
@@ -13,9 +13,14 @@ module Handinger
13
13
  sig { returns(String) }
14
14
  attr_reader :api_key
15
15
 
16
+ # Create, retrieve, and manage agent worker templates.
16
17
  sig { returns(Handinger::Resources::Workers) }
17
18
  attr_reader :workers
18
19
 
20
+ # Run and inspect tasks against a worker.
21
+ sig { returns(Handinger::Resources::Tasks) }
22
+ attr_reader :tasks
23
+
19
24
  # @api private
20
25
  sig { override.returns(T::Hash[String, String]) }
21
26
  private def auth_headers
@@ -49,15 +49,7 @@ module Handinger
49
49
  ]
50
50
  ]
51
51
  ),
52
- stream:
53
- T.nilable(
54
- T::Class[
55
- Handinger::Internal::Type::BaseStream[
56
- T.anything,
57
- Handinger::Internal::Type::BaseModel
58
- ]
59
- ]
60
- ),
52
+ stream: T.nilable(T::Class[T.anything]),
61
53
  model: T.nilable(Handinger::Internal::Type::Converter::Input),
62
54
  options: T.nilable(Handinger::RequestOptions::OrHash)
63
55
  }
@@ -277,15 +269,7 @@ module Handinger
277
269
  ]
278
270
  ]
279
271
  ),
280
- stream:
281
- T.nilable(
282
- T::Class[
283
- Handinger::Internal::Type::BaseStream[
284
- T.anything,
285
- Handinger::Internal::Type::BaseModel
286
- ]
287
- ]
288
- ),
272
+ stream: T.nilable(T::Class[T.anything]),
289
273
  model: T.nilable(Handinger::Internal::Type::Converter::Input),
290
274
  options: T.nilable(Handinger::RequestOptions::OrHash)
291
275
  ).returns(T.anything)
@@ -0,0 +1,40 @@
1
+ # typed: strong
2
+
3
+ module Handinger
4
+ module Models
5
+ class CreateTask < Handinger::Models::CreateWorker
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Handinger::CreateTask, Handinger::Internal::AnyHash)
9
+ end
10
+
11
+ # Worker id the task belongs to.
12
+ sig { returns(String) }
13
+ attr_accessor :worker_id
14
+
15
+ # Optional client-provided task id. Reuse this id to add turns to an existing
16
+ # task.
17
+ sig { returns(T.nilable(String)) }
18
+ attr_reader :task_id
19
+
20
+ sig { params(task_id: String).void }
21
+ attr_writer :task_id
22
+
23
+ sig do
24
+ params(worker_id: String, task_id: String).returns(T.attached_class)
25
+ end
26
+ def self.new(
27
+ # Worker id the task belongs to.
28
+ worker_id:,
29
+ # Optional client-provided task id. Reuse this id to add turns to an existing
30
+ # task.
31
+ task_id: nil
32
+ )
33
+ end
34
+
35
+ sig { override.returns({ worker_id: String, task_id: String }) }
36
+ def to_hash
37
+ end
38
+ end
39
+ end
40
+ end
@@ -8,60 +8,118 @@ module Handinger
8
8
  T.any(Handinger::CreateWorker, Handinger::Internal::AnyHash)
9
9
  end
10
10
 
11
- sig { returns(String) }
12
- attr_accessor :input
11
+ # Persistent system prompt the worker uses for every task it runs.
12
+ sig { returns(T.nilable(String)) }
13
+ attr_reader :instructions
13
14
 
14
- sig { returns(T.nilable(Handinger::CreateWorker::Budget::OrSymbol)) }
15
- attr_reader :budget
15
+ sig { params(instructions: String).void }
16
+ attr_writer :instructions
16
17
 
17
- sig { params(budget: Handinger::CreateWorker::Budget::OrSymbol).void }
18
- attr_writer :budget
18
+ # Optional JSON Schema (Draft-07) describing the structured object the worker must
19
+ # produce. When set, every task response is validated against the schema and
20
+ # exposed as `structuredOutput`.
21
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
22
+ attr_reader :output_schema
19
23
 
20
- sig { returns(T.nilable(T::Boolean)) }
21
- attr_reader :stream
24
+ sig { params(output_schema: T::Hash[Symbol, T.anything]).void }
25
+ attr_writer :output_schema
22
26
 
23
- sig { params(stream: T::Boolean).void }
24
- attr_writer :stream
27
+ # Natural-language description of the worker to use for AI-generated instructions
28
+ # when `instructions` is omitted.
29
+ sig { returns(T.nilable(String)) }
30
+ attr_reader :prompt
31
+
32
+ sig { params(prompt: String).void }
33
+ attr_writer :prompt
34
+
35
+ # Short one-line description of the worker's purpose. Auto-generated when omitted
36
+ # and a `prompt` is provided.
37
+ sig { returns(T.nilable(String)) }
38
+ attr_reader :summary
39
+
40
+ sig { params(summary: String).void }
41
+ attr_writer :summary
42
+
43
+ # Optional display name. When omitted, Handinger assigns a random dog-themed name.
44
+ sig { returns(T.nilable(String)) }
45
+ attr_reader :title
46
+
47
+ sig { params(title: String).void }
48
+ attr_writer :title
49
+
50
+ # `public` (default) is visible to all org members. `private` is only visible to
51
+ # invited members.
52
+ sig { returns(T.nilable(Handinger::CreateWorker::Visibility::OrSymbol)) }
53
+ attr_reader :visibility
54
+
55
+ sig do
56
+ params(visibility: Handinger::CreateWorker::Visibility::OrSymbol).void
57
+ end
58
+ attr_writer :visibility
25
59
 
26
60
  sig do
27
61
  params(
28
- input: String,
29
- budget: Handinger::CreateWorker::Budget::OrSymbol,
30
- stream: T::Boolean
62
+ instructions: String,
63
+ output_schema: T::Hash[Symbol, T.anything],
64
+ prompt: String,
65
+ summary: String,
66
+ title: String,
67
+ visibility: Handinger::CreateWorker::Visibility::OrSymbol
31
68
  ).returns(T.attached_class)
32
69
  end
33
- def self.new(input:, budget: nil, stream: nil)
70
+ def self.new(
71
+ # Persistent system prompt the worker uses for every task it runs.
72
+ instructions: nil,
73
+ # Optional JSON Schema (Draft-07) describing the structured object the worker must
74
+ # produce. When set, every task response is validated against the schema and
75
+ # exposed as `structuredOutput`.
76
+ output_schema: nil,
77
+ # Natural-language description of the worker to use for AI-generated instructions
78
+ # when `instructions` is omitted.
79
+ prompt: nil,
80
+ # Short one-line description of the worker's purpose. Auto-generated when omitted
81
+ # and a `prompt` is provided.
82
+ summary: nil,
83
+ # Optional display name. When omitted, Handinger assigns a random dog-themed name.
84
+ title: nil,
85
+ # `public` (default) is visible to all org members. `private` is only visible to
86
+ # invited members.
87
+ visibility: nil
88
+ )
34
89
  end
35
90
 
36
91
  sig do
37
92
  override.returns(
38
93
  {
39
- input: String,
40
- budget: Handinger::CreateWorker::Budget::OrSymbol,
41
- stream: T::Boolean
94
+ instructions: String,
95
+ output_schema: T::Hash[Symbol, T.anything],
96
+ prompt: String,
97
+ summary: String,
98
+ title: String,
99
+ visibility: Handinger::CreateWorker::Visibility::OrSymbol
42
100
  }
43
101
  )
44
102
  end
45
103
  def to_hash
46
104
  end
47
105
 
48
- module Budget
106
+ # `public` (default) is visible to all org members. `private` is only visible to
107
+ # invited members.
108
+ module Visibility
49
109
  extend Handinger::Internal::Type::Enum
50
110
 
51
111
  TaggedSymbol =
52
- T.type_alias { T.all(Symbol, Handinger::CreateWorker::Budget) }
112
+ T.type_alias { T.all(Symbol, Handinger::CreateWorker::Visibility) }
53
113
  OrSymbol = T.type_alias { T.any(Symbol, String) }
54
114
 
55
- LOW = T.let(:low, Handinger::CreateWorker::Budget::TaggedSymbol)
56
- STANDARD =
57
- T.let(:standard, Handinger::CreateWorker::Budget::TaggedSymbol)
58
- HIGH = T.let(:high, Handinger::CreateWorker::Budget::TaggedSymbol)
59
- UNLIMITED =
60
- T.let(:unlimited, Handinger::CreateWorker::Budget::TaggedSymbol)
115
+ PUBLIC =
116
+ T.let(:public, Handinger::CreateWorker::Visibility::TaggedSymbol)
117
+ PRIVATE =
118
+ T.let(:private, Handinger::CreateWorker::Visibility::TaggedSymbol)
61
119
 
62
120
  sig do
63
121
  override.returns(
64
- T::Array[Handinger::CreateWorker::Budget::TaggedSymbol]
122
+ T::Array[Handinger::CreateWorker::Visibility::TaggedSymbol]
65
123
  )
66
124
  end
67
125
  def self.values
@@ -0,0 +1,23 @@
1
+ # typed: strong
2
+
3
+ module Handinger
4
+ module Models
5
+ class DeleteTaskResponse < Handinger::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Handinger::DeleteTaskResponse, Handinger::Internal::AnyHash)
9
+ end
10
+
11
+ sig { returns(T::Boolean) }
12
+ attr_accessor :archived
13
+
14
+ sig { params(archived: T::Boolean).returns(T.attached_class) }
15
+ def self.new(archived:)
16
+ end
17
+
18
+ sig { override.returns({ archived: T::Boolean }) }
19
+ def to_hash
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # typed: strong
2
+
3
+ module Handinger
4
+ module Models
5
+ class DeleteWorkerResponse < Handinger::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Handinger::DeleteWorkerResponse, Handinger::Internal::AnyHash)
9
+ end
10
+
11
+ sig { returns(T::Boolean) }
12
+ attr_accessor :deleted
13
+
14
+ sig { params(deleted: T::Boolean).returns(T.attached_class) }
15
+ def self.new(deleted:)
16
+ end
17
+
18
+ sig { override.returns({ deleted: T::Boolean }) }
19
+ def to_hash
20
+ end
21
+ end
22
+ end
23
+ end