@agentuity/cli 0.1.16 → 0.1.17

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 (185) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/cmd/build/ast.d.ts.map +1 -1
  5. package/dist/cmd/build/ast.js +68 -2
  6. package/dist/cmd/build/ast.js.map +1 -1
  7. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  8. package/dist/cmd/build/vite/registry-generator.js +112 -23
  9. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  10. package/dist/cmd/build/vite/route-discovery.d.ts +4 -0
  11. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
  12. package/dist/cmd/build/vite/route-discovery.js +4 -0
  13. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  14. package/dist/cmd/cloud/env/delete.d.ts.map +1 -1
  15. package/dist/cmd/cloud/env/delete.js +8 -2
  16. package/dist/cmd/cloud/env/delete.js.map +1 -1
  17. package/dist/cmd/cloud/env/get.d.ts.map +1 -1
  18. package/dist/cmd/cloud/env/get.js +4 -1
  19. package/dist/cmd/cloud/env/get.js.map +1 -1
  20. package/dist/cmd/cloud/env/import.d.ts.map +1 -1
  21. package/dist/cmd/cloud/env/import.js +5 -8
  22. package/dist/cmd/cloud/env/import.js.map +1 -1
  23. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  24. package/dist/cmd/cloud/env/list.js +11 -6
  25. package/dist/cmd/cloud/env/list.js.map +1 -1
  26. package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
  27. package/dist/cmd/cloud/env/pull.js.map +1 -1
  28. package/dist/cmd/cloud/env/push.d.ts.map +1 -1
  29. package/dist/cmd/cloud/env/push.js +1 -7
  30. package/dist/cmd/cloud/env/push.js.map +1 -1
  31. package/dist/cmd/cloud/env/set.d.ts.map +1 -1
  32. package/dist/cmd/cloud/env/set.js +4 -1
  33. package/dist/cmd/cloud/env/set.js.map +1 -1
  34. package/dist/cmd/cloud/index.d.ts.map +1 -1
  35. package/dist/cmd/cloud/index.js +2 -0
  36. package/dist/cmd/cloud/index.js.map +1 -1
  37. package/dist/cmd/cloud/queue/ack.d.ts +3 -0
  38. package/dist/cmd/cloud/queue/ack.d.ts.map +1 -0
  39. package/dist/cmd/cloud/queue/ack.js +45 -0
  40. package/dist/cmd/cloud/queue/ack.js.map +1 -0
  41. package/dist/cmd/cloud/queue/create.d.ts +3 -0
  42. package/dist/cmd/cloud/queue/create.d.ts.map +1 -0
  43. package/dist/cmd/cloud/queue/create.js +80 -0
  44. package/dist/cmd/cloud/queue/create.js.map +1 -0
  45. package/dist/cmd/cloud/queue/delete.d.ts +3 -0
  46. package/dist/cmd/cloud/queue/delete.d.ts.map +1 -0
  47. package/dist/cmd/cloud/queue/delete.js +50 -0
  48. package/dist/cmd/cloud/queue/delete.js.map +1 -0
  49. package/dist/cmd/cloud/queue/destinations.d.ts +3 -0
  50. package/dist/cmd/cloud/queue/destinations.d.ts.map +1 -0
  51. package/dist/cmd/cloud/queue/destinations.js +232 -0
  52. package/dist/cmd/cloud/queue/destinations.js.map +1 -0
  53. package/dist/cmd/cloud/queue/dlq.d.ts +3 -0
  54. package/dist/cmd/cloud/queue/dlq.d.ts.map +1 -0
  55. package/dist/cmd/cloud/queue/dlq.js +168 -0
  56. package/dist/cmd/cloud/queue/dlq.js.map +1 -0
  57. package/dist/cmd/cloud/queue/get.d.ts +3 -0
  58. package/dist/cmd/cloud/queue/get.d.ts.map +1 -0
  59. package/dist/cmd/cloud/queue/get.js +130 -0
  60. package/dist/cmd/cloud/queue/get.js.map +1 -0
  61. package/dist/cmd/cloud/queue/index.d.ts +3 -0
  62. package/dist/cmd/cloud/queue/index.d.ts.map +1 -0
  63. package/dist/cmd/cloud/queue/index.js +65 -0
  64. package/dist/cmd/cloud/queue/index.js.map +1 -0
  65. package/dist/cmd/cloud/queue/list.d.ts +3 -0
  66. package/dist/cmd/cloud/queue/list.d.ts.map +1 -0
  67. package/dist/cmd/cloud/queue/list.js +71 -0
  68. package/dist/cmd/cloud/queue/list.js.map +1 -0
  69. package/dist/cmd/cloud/queue/messages.d.ts +3 -0
  70. package/dist/cmd/cloud/queue/messages.d.ts.map +1 -0
  71. package/dist/cmd/cloud/queue/messages.js +137 -0
  72. package/dist/cmd/cloud/queue/messages.js.map +1 -0
  73. package/dist/cmd/cloud/queue/nack.d.ts +3 -0
  74. package/dist/cmd/cloud/queue/nack.d.ts.map +1 -0
  75. package/dist/cmd/cloud/queue/nack.js +45 -0
  76. package/dist/cmd/cloud/queue/nack.js.map +1 -0
  77. package/dist/cmd/cloud/queue/pause.d.ts +3 -0
  78. package/dist/cmd/cloud/queue/pause.d.ts.map +1 -0
  79. package/dist/cmd/cloud/queue/pause.js +36 -0
  80. package/dist/cmd/cloud/queue/pause.js.map +1 -0
  81. package/dist/cmd/cloud/queue/publish.d.ts +3 -0
  82. package/dist/cmd/cloud/queue/publish.d.ts.map +1 -0
  83. package/dist/cmd/cloud/queue/publish.js +76 -0
  84. package/dist/cmd/cloud/queue/publish.js.map +1 -0
  85. package/dist/cmd/cloud/queue/receive.d.ts +3 -0
  86. package/dist/cmd/cloud/queue/receive.d.ts.map +1 -0
  87. package/dist/cmd/cloud/queue/receive.js +67 -0
  88. package/dist/cmd/cloud/queue/receive.js.map +1 -0
  89. package/dist/cmd/cloud/queue/resume.d.ts +3 -0
  90. package/dist/cmd/cloud/queue/resume.d.ts.map +1 -0
  91. package/dist/cmd/cloud/queue/resume.js +35 -0
  92. package/dist/cmd/cloud/queue/resume.js.map +1 -0
  93. package/dist/cmd/cloud/queue/sources.d.ts +3 -0
  94. package/dist/cmd/cloud/queue/sources.d.ts.map +1 -0
  95. package/dist/cmd/cloud/queue/sources.js +290 -0
  96. package/dist/cmd/cloud/queue/sources.js.map +1 -0
  97. package/dist/cmd/cloud/queue/stats.d.ts +3 -0
  98. package/dist/cmd/cloud/queue/stats.d.ts.map +1 -0
  99. package/dist/cmd/cloud/queue/stats.js +239 -0
  100. package/dist/cmd/cloud/queue/stats.js.map +1 -0
  101. package/dist/cmd/cloud/queue/util.d.ts +26 -0
  102. package/dist/cmd/cloud/queue/util.d.ts.map +1 -0
  103. package/dist/cmd/cloud/queue/util.js +19 -0
  104. package/dist/cmd/cloud/queue/util.js.map +1 -0
  105. package/dist/cmd/cloud/sandbox/snapshot/build.d.ts.map +1 -1
  106. package/dist/cmd/cloud/sandbox/snapshot/build.js +122 -28
  107. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  108. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
  109. package/dist/cmd/cloud/sandbox/snapshot/create.js +19 -7
  110. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
  111. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -1
  112. package/dist/cmd/cloud/sandbox/snapshot/get.js +16 -0
  113. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  114. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
  115. package/dist/cmd/cloud/sandbox/snapshot/list.js +4 -0
  116. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
  117. package/dist/cmd/cloud/vector/stats.d.ts.map +1 -1
  118. package/dist/cmd/cloud/vector/stats.js +8 -0
  119. package/dist/cmd/cloud/vector/stats.js.map +1 -1
  120. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  121. package/dist/cmd/project/template-flow.js.map +1 -1
  122. package/dist/env-util.d.ts +6 -1
  123. package/dist/env-util.d.ts.map +1 -1
  124. package/dist/env-util.js +16 -2
  125. package/dist/env-util.js.map +1 -1
  126. package/dist/errors.d.ts +4 -2
  127. package/dist/errors.d.ts.map +1 -1
  128. package/dist/errors.js +6 -0
  129. package/dist/errors.js.map +1 -1
  130. package/dist/schema-parser.d.ts.map +1 -1
  131. package/dist/schema-parser.js +2 -2
  132. package/dist/schema-parser.js.map +1 -1
  133. package/dist/tui/box.d.ts +4 -0
  134. package/dist/tui/box.d.ts.map +1 -1
  135. package/dist/tui/box.js +39 -0
  136. package/dist/tui/box.js.map +1 -1
  137. package/dist/tui.d.ts +11 -1
  138. package/dist/tui.d.ts.map +1 -1
  139. package/dist/tui.js +16 -8
  140. package/dist/tui.js.map +1 -1
  141. package/dist/types.d.ts.map +1 -1
  142. package/dist/types.js.map +1 -1
  143. package/package.json +6 -6
  144. package/src/cli.ts +5 -1
  145. package/src/cmd/build/ast.ts +88 -2
  146. package/src/cmd/build/vite/registry-generator.ts +120 -24
  147. package/src/cmd/build/vite/route-discovery.ts +16 -0
  148. package/src/cmd/cloud/env/delete.ts +18 -5
  149. package/src/cmd/cloud/env/get.ts +10 -3
  150. package/src/cmd/cloud/env/import.ts +10 -11
  151. package/src/cmd/cloud/env/list.ts +19 -9
  152. package/src/cmd/cloud/env/org-util.ts +1 -1
  153. package/src/cmd/cloud/env/pull.ts +9 -4
  154. package/src/cmd/cloud/env/push.ts +5 -9
  155. package/src/cmd/cloud/env/set.ts +10 -3
  156. package/src/cmd/cloud/index.ts +2 -0
  157. package/src/cmd/cloud/queue/ack.ts +50 -0
  158. package/src/cmd/cloud/queue/create.ts +91 -0
  159. package/src/cmd/cloud/queue/delete.ts +57 -0
  160. package/src/cmd/cloud/queue/destinations.ts +287 -0
  161. package/src/cmd/cloud/queue/dlq.ts +203 -0
  162. package/src/cmd/cloud/queue/get.ts +158 -0
  163. package/src/cmd/cloud/queue/index.ts +66 -0
  164. package/src/cmd/cloud/queue/list.ts +81 -0
  165. package/src/cmd/cloud/queue/messages.ts +160 -0
  166. package/src/cmd/cloud/queue/nack.ts +50 -0
  167. package/src/cmd/cloud/queue/pause.ts +41 -0
  168. package/src/cmd/cloud/queue/publish.ts +88 -0
  169. package/src/cmd/cloud/queue/receive.ts +76 -0
  170. package/src/cmd/cloud/queue/resume.ts +40 -0
  171. package/src/cmd/cloud/queue/sources.ts +352 -0
  172. package/src/cmd/cloud/queue/stats.ts +297 -0
  173. package/src/cmd/cloud/queue/util.ts +34 -0
  174. package/src/cmd/cloud/sandbox/snapshot/build.ts +146 -29
  175. package/src/cmd/cloud/sandbox/snapshot/create.ts +24 -7
  176. package/src/cmd/cloud/sandbox/snapshot/get.ts +16 -0
  177. package/src/cmd/cloud/sandbox/snapshot/list.ts +4 -0
  178. package/src/cmd/cloud/vector/stats.ts +9 -0
  179. package/src/cmd/project/template-flow.ts +1 -3
  180. package/src/env-util.ts +17 -2
  181. package/src/errors.ts +8 -0
  182. package/src/schema-parser.ts +6 -3
  183. package/src/tui/box.ts +52 -0
  184. package/src/tui.ts +28 -8
  185. package/src/types.ts +0 -1
@@ -0,0 +1,76 @@
1
+ import { z } from 'zod';
2
+ import { createCommand } from '../../../types';
3
+ import * as tui from '../../../tui';
4
+ import { createQueueAPIClient, getQueueApiOptions } from './util';
5
+ import { getCommand } from '../../../command-prefix';
6
+ import { receiveMessage, MessageSchema } from '@agentuity/server';
7
+
8
+ const ReceiveResponseSchema = z.object({
9
+ message: MessageSchema.nullable(),
10
+ });
11
+
12
+ export const receiveSubcommand = createCommand({
13
+ name: 'receive',
14
+ aliases: ['recv', 'claim'],
15
+ description: 'Receive (claim) a message from a worker queue',
16
+ tags: ['read-only', 'fast', 'requires-auth'],
17
+ requires: { auth: true },
18
+ examples: [
19
+ {
20
+ command: getCommand('cloud queue receive my-queue'),
21
+ description: 'Receive next message',
22
+ },
23
+ {
24
+ command: getCommand('cloud queue receive my-queue --timeout 60'),
25
+ description: 'Receive with 60s visibility timeout',
26
+ },
27
+ ],
28
+ schema: {
29
+ args: z.object({
30
+ queue_name: z.string().min(1).describe('Queue name'),
31
+ }),
32
+ options: z.object({
33
+ timeout: z.coerce
34
+ .number()
35
+ .default(30)
36
+ .optional()
37
+ .describe('Visibility timeout in seconds (default: 30)'),
38
+ }),
39
+ response: ReceiveResponseSchema,
40
+ },
41
+ idempotent: true,
42
+
43
+ async handler(ctx) {
44
+ const { args, options, opts } = ctx;
45
+ const client = await createQueueAPIClient(ctx);
46
+ const message = await receiveMessage(
47
+ client,
48
+ args.queue_name,
49
+ opts.timeout,
50
+ getQueueApiOptions(ctx)
51
+ );
52
+
53
+ if (!options.json) {
54
+ if (!message) {
55
+ tui.info('No messages available');
56
+ } else {
57
+ tui.success(`Received message: ${message.id}`);
58
+ tui.info(` Offset: ${message.offset}`);
59
+ tui.info(` State: ${message.state}`);
60
+ tui.info(` Delivery Attempts: ${message.delivery_attempts}`);
61
+ tui.info('');
62
+ tui.info('Payload:');
63
+ tui.json(message.payload);
64
+ if (message.metadata) {
65
+ tui.info('');
66
+ tui.info('Metadata:');
67
+ tui.json(message.metadata);
68
+ }
69
+ }
70
+ }
71
+
72
+ return { message };
73
+ },
74
+ });
75
+
76
+ export default receiveSubcommand;
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ import { createCommand } from '../../../types';
3
+ import * as tui from '../../../tui';
4
+ import { createQueueAPIClient, getQueueApiOptions } from './util';
5
+ import { getCommand } from '../../../command-prefix';
6
+ import { resumeQueue, QueueSchema } from '@agentuity/server';
7
+
8
+ export const resumeSubcommand = createCommand({
9
+ name: 'resume',
10
+ description: 'Resume message delivery for a paused queue',
11
+ tags: ['mutating', 'updates-resource', 'requires-auth'],
12
+ requires: { auth: true },
13
+ examples: [
14
+ {
15
+ command: getCommand('cloud queue resume my-queue'),
16
+ description: 'Resume a paused queue',
17
+ },
18
+ ],
19
+ schema: {
20
+ args: z.object({
21
+ name: z.string().min(1).describe('Queue name'),
22
+ }),
23
+ response: QueueSchema,
24
+ },
25
+
26
+ async handler(ctx) {
27
+ const { args, options } = ctx;
28
+ const client = await createQueueAPIClient(ctx);
29
+
30
+ const queue = await resumeQueue(client, args.name, getQueueApiOptions(ctx));
31
+
32
+ if (!options.json) {
33
+ tui.success(`Resumed queue: ${queue.name}`);
34
+ }
35
+
36
+ return queue;
37
+ },
38
+ });
39
+
40
+ export default resumeSubcommand;
@@ -0,0 +1,352 @@
1
+ import { z } from 'zod';
2
+ import { createCommand, createSubcommand } from '../../../types';
3
+ import * as tui from '../../../tui';
4
+ import { createQueueAPIClient, getQueueApiOptions } from './util';
5
+ import { getCommand } from '../../../command-prefix';
6
+ import {
7
+ createSource,
8
+ listSources,
9
+ getSource,
10
+ updateSource,
11
+ deleteSource,
12
+ SourceSchema,
13
+ SourceAlreadyExistsError,
14
+ type Source,
15
+ } from '@agentuity/server';
16
+ import { ErrorCode } from '../../../errors';
17
+
18
+ const SourcesListResponseSchema = z.object({
19
+ sources: z.array(
20
+ z.object({
21
+ id: z.string(),
22
+ name: z.string(),
23
+ auth_type: z.string(),
24
+ enabled: z.boolean(),
25
+ url: z.string(),
26
+ created_at: z.string(),
27
+ })
28
+ ),
29
+ });
30
+
31
+ const listSourcesSubcommand = createSubcommand({
32
+ name: 'list',
33
+ aliases: ['ls'],
34
+ description: 'List sources for a queue',
35
+ tags: ['read-only', 'fast', 'requires-auth'],
36
+ requires: { auth: true },
37
+ examples: [
38
+ {
39
+ command: getCommand('cloud queue sources list my-queue'),
40
+ description: 'List queue sources',
41
+ },
42
+ ],
43
+ schema: {
44
+ args: z.object({
45
+ queue_name: z.string().min(1).describe('Queue name'),
46
+ }),
47
+ response: SourcesListResponseSchema,
48
+ },
49
+ idempotent: true,
50
+
51
+ async handler(ctx) {
52
+ const { args, options } = ctx;
53
+ const client = await createQueueAPIClient(ctx);
54
+ const sources = await listSources(client, args.queue_name, getQueueApiOptions(ctx));
55
+
56
+ if (!options.json) {
57
+ if (sources.length === 0) {
58
+ tui.info('No sources configured');
59
+ } else {
60
+ const tableData = sources.map((s: Source) => ({
61
+ ID: s.id,
62
+ Name: s.name,
63
+ 'Auth Type': s.auth_type,
64
+ Enabled: s.enabled ? 'Yes' : 'No',
65
+ URL: s.url,
66
+ Created: new Date(s.created_at).toLocaleString(),
67
+ }));
68
+ tui.table(tableData, ['ID', 'Name', 'Auth Type', 'Enabled', 'URL', 'Created']);
69
+ }
70
+ }
71
+
72
+ return {
73
+ sources: sources.map((s: Source) => ({
74
+ id: s.id,
75
+ name: s.name,
76
+ auth_type: s.auth_type,
77
+ enabled: s.enabled,
78
+ url: s.url,
79
+ created_at: s.created_at,
80
+ })),
81
+ };
82
+ },
83
+ });
84
+
85
+ const createSourceSubcommand = createSubcommand({
86
+ name: 'create',
87
+ description: 'Create a source for a queue',
88
+ tags: ['mutating', 'creates-resource', 'requires-auth'],
89
+ requires: { auth: true },
90
+ examples: [
91
+ {
92
+ command: getCommand(
93
+ 'cloud queue sources create my-queue --name webhook-1 --auth-type header --auth-value "X-API-Key:secret123"'
94
+ ),
95
+ description: 'Create a source with header authentication',
96
+ },
97
+ ],
98
+ schema: {
99
+ args: z.object({
100
+ queue_name: z.string().min(1).describe('Queue name'),
101
+ }),
102
+ options: z.object({
103
+ name: z.string().min(1).describe('Source name'),
104
+ description: z.string().optional().describe('Source description'),
105
+ 'auth-type': z
106
+ .enum(['none', 'basic', 'header'])
107
+ .default('none')
108
+ .optional()
109
+ .describe('Authentication type'),
110
+ 'auth-value': z.string().optional().describe('Authentication value'),
111
+ }),
112
+ response: SourceSchema,
113
+ },
114
+
115
+ async handler(ctx) {
116
+ const { args, opts, options } = ctx;
117
+ const client = await createQueueAPIClient(ctx);
118
+
119
+ try {
120
+ const source = await createSource(
121
+ client,
122
+ args.queue_name,
123
+ {
124
+ name: opts.name,
125
+ description: opts.description,
126
+ auth_type: opts['auth-type'] || 'none',
127
+ auth_value: opts['auth-value'],
128
+ },
129
+ getQueueApiOptions(ctx)
130
+ );
131
+
132
+ if (!options.json) {
133
+ tui.success(`Created source: ${source.id}`);
134
+ console.log(` Name: ${source.name}`);
135
+ console.log(` URL: ${source.url}`);
136
+ }
137
+
138
+ return source;
139
+ } catch (error) {
140
+ if (error instanceof SourceAlreadyExistsError) {
141
+ tui.fatal(
142
+ `A source with name "${opts.name}" already exists for queue "${args.queue_name}". Use a different name or delete the existing source first.`,
143
+ ErrorCode.RESOURCE_ALREADY_EXISTS
144
+ );
145
+ }
146
+ throw error;
147
+ }
148
+ },
149
+ });
150
+
151
+ const getSourceSubcommand = createSubcommand({
152
+ name: 'get',
153
+ description: 'Get a source by ID',
154
+ tags: ['read-only', 'fast', 'requires-auth'],
155
+ requires: { auth: true },
156
+ examples: [
157
+ {
158
+ command: getCommand('cloud queue sources get my-queue qsrc_abc123'),
159
+ description: 'Get source details',
160
+ },
161
+ ],
162
+ schema: {
163
+ args: z.object({
164
+ queue_name: z.string().min(1).describe('Queue name'),
165
+ source_id: z.string().min(1).describe('Source ID'),
166
+ }),
167
+ response: SourceSchema,
168
+ },
169
+ idempotent: true,
170
+
171
+ async handler(ctx) {
172
+ const { args, options } = ctx;
173
+ const client = await createQueueAPIClient(ctx);
174
+ const source = await getSource(
175
+ client,
176
+ args.queue_name,
177
+ args.source_id,
178
+ getQueueApiOptions(ctx)
179
+ );
180
+
181
+ if (!options.json) {
182
+ console.log(`ID: ${source.id}`);
183
+ console.log(`Name: ${source.name}`);
184
+ console.log(`Description: ${source.description || '-'}`);
185
+ console.log(`Auth Type: ${source.auth_type}`);
186
+ console.log(`Enabled: ${source.enabled ? 'Yes' : 'No'}`);
187
+ console.log(`URL: ${source.url}`);
188
+ console.log('');
189
+ console.log('Stats:');
190
+ console.log(` Requests: ${source.request_count}`);
191
+ console.log(` Successes: ${source.success_count}`);
192
+ console.log(` Failures: ${source.failure_count}`);
193
+ if (source.last_request_at) {
194
+ console.log(` Last Request: ${new Date(source.last_request_at).toLocaleString()}`);
195
+ }
196
+ if (source.last_failure_error) {
197
+ console.log(` Last Error: ${source.last_failure_error}`);
198
+ }
199
+ console.log('');
200
+ console.log(`Created: ${new Date(source.created_at).toLocaleString()}`);
201
+ console.log(`Updated: ${new Date(source.updated_at).toLocaleString()}`);
202
+ }
203
+
204
+ return source;
205
+ },
206
+ });
207
+
208
+ const updateSourceSubcommand = createSubcommand({
209
+ name: 'update',
210
+ description: 'Update a source',
211
+ tags: ['mutating', 'requires-auth'],
212
+ requires: { auth: true },
213
+ examples: [
214
+ {
215
+ command: getCommand('cloud queue sources update my-queue qsrc_abc123 --disabled'),
216
+ description: 'Disable a source',
217
+ },
218
+ ],
219
+ schema: {
220
+ args: z.object({
221
+ queue_name: z.string().min(1).describe('Queue name'),
222
+ source_id: z.string().min(1).describe('Source ID'),
223
+ }),
224
+ options: z.object({
225
+ name: z.string().optional().describe('New source name'),
226
+ description: z.string().optional().describe('New description'),
227
+ 'auth-type': z
228
+ .enum(['none', 'basic', 'header'])
229
+ .optional()
230
+ .describe('Authentication type'),
231
+ 'auth-value': z.string().optional().describe('Authentication value'),
232
+ enabled: z.boolean().optional().describe('Enable the source'),
233
+ disabled: z.boolean().optional().describe('Disable the source'),
234
+ }),
235
+ response: SourceSchema,
236
+ },
237
+
238
+ async handler(ctx) {
239
+ const { args, opts, options } = ctx;
240
+ const client = await createQueueAPIClient(ctx);
241
+
242
+ const updateParams: {
243
+ name?: string;
244
+ description?: string;
245
+ auth_type?: 'none' | 'basic' | 'header';
246
+ auth_value?: string;
247
+ enabled?: boolean;
248
+ } = {};
249
+
250
+ if (opts.name) updateParams.name = opts.name;
251
+ if (opts.description) updateParams.description = opts.description;
252
+ if (opts['auth-type']) updateParams.auth_type = opts['auth-type'];
253
+ if (opts['auth-value']) updateParams.auth_value = opts['auth-value'];
254
+ if (opts.enabled && opts.disabled) {
255
+ tui.fatal(
256
+ 'Cannot specify both --enabled and --disabled flags',
257
+ ErrorCode.INVALID_ARGUMENT
258
+ );
259
+ }
260
+ if (opts.enabled) updateParams.enabled = true;
261
+ if (opts.disabled) updateParams.enabled = false;
262
+
263
+ const source = await updateSource(
264
+ client,
265
+ args.queue_name,
266
+ args.source_id,
267
+ updateParams,
268
+ getQueueApiOptions(ctx)
269
+ );
270
+
271
+ if (!options.json) {
272
+ tui.success(`Updated source: ${source.id}`);
273
+ console.log(` Name: ${source.name}`);
274
+ console.log(` Enabled: ${source.enabled ? 'Yes' : 'No'}`);
275
+ console.log(` URL: ${source.url}`);
276
+ }
277
+
278
+ return source;
279
+ },
280
+ });
281
+
282
+ const DeleteSourceResponseSchema = z.object({
283
+ success: z.boolean(),
284
+ queue_name: z.string(),
285
+ source_id: z.string(),
286
+ });
287
+
288
+ const deleteSourceSubcommand = createSubcommand({
289
+ name: 'delete',
290
+ aliases: ['rm'],
291
+ description: 'Delete a source from a queue',
292
+ tags: ['mutating', 'deletes-resource', 'requires-auth'],
293
+ requires: { auth: true },
294
+ examples: [
295
+ {
296
+ command: getCommand('cloud queue sources delete my-queue qsrc_abc123'),
297
+ description: 'Delete a source',
298
+ },
299
+ ],
300
+ schema: {
301
+ args: z.object({
302
+ queue_name: z.string().min(1).describe('Queue name'),
303
+ source_id: z.string().min(1).describe('Source ID'),
304
+ }),
305
+ response: DeleteSourceResponseSchema,
306
+ },
307
+
308
+ async handler(ctx) {
309
+ const { args, options } = ctx;
310
+ const client = await createQueueAPIClient(ctx);
311
+ await deleteSource(client, args.queue_name, args.source_id, getQueueApiOptions(ctx));
312
+
313
+ if (!options.json) {
314
+ tui.success(`Deleted source: ${args.source_id}`);
315
+ }
316
+
317
+ return {
318
+ success: true,
319
+ queue_name: args.queue_name,
320
+ source_id: args.source_id,
321
+ };
322
+ },
323
+ });
324
+
325
+ export const sourcesSubcommand = createCommand({
326
+ name: 'sources',
327
+ aliases: ['source'],
328
+ description: 'Manage queue sources (HTTP ingestion endpoints)',
329
+ tags: ['requires-auth'],
330
+ requires: { auth: true },
331
+ examples: [
332
+ {
333
+ command: getCommand('cloud queue sources list my-queue'),
334
+ description: 'List sources',
335
+ },
336
+ {
337
+ command: getCommand(
338
+ 'cloud queue sources create my-queue --name webhook-1 --auth-type header --auth-value "X-API-Key:secret"'
339
+ ),
340
+ description: 'Create a source with header authentication',
341
+ },
342
+ ],
343
+ subcommands: [
344
+ listSourcesSubcommand,
345
+ createSourceSubcommand,
346
+ getSourceSubcommand,
347
+ updateSourceSubcommand,
348
+ deleteSourceSubcommand,
349
+ ],
350
+ });
351
+
352
+ export default sourcesSubcommand;