@agentuity/cli 0.1.15 → 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 (255) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +18 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/cmd/ai/opencode/install.js +1 -1
  5. package/dist/cmd/ai/opencode/install.js.map +1 -1
  6. package/dist/cmd/build/ast.d.ts.map +1 -1
  7. package/dist/cmd/build/ast.js +68 -2
  8. package/dist/cmd/build/ast.js.map +1 -1
  9. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  10. package/dist/cmd/build/vite/registry-generator.js +112 -23
  11. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  12. package/dist/cmd/build/vite/route-discovery.d.ts +4 -0
  13. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
  14. package/dist/cmd/build/vite/route-discovery.js +4 -0
  15. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  16. package/dist/cmd/cloud/env/delete.d.ts.map +1 -1
  17. package/dist/cmd/cloud/env/delete.js +93 -34
  18. package/dist/cmd/cloud/env/delete.js.map +1 -1
  19. package/dist/cmd/cloud/env/get.d.ts.map +1 -1
  20. package/dist/cmd/cloud/env/get.js +53 -16
  21. package/dist/cmd/cloud/env/get.js.map +1 -1
  22. package/dist/cmd/cloud/env/import.d.ts.map +1 -1
  23. package/dist/cmd/cloud/env/import.js +80 -39
  24. package/dist/cmd/cloud/env/import.js.map +1 -1
  25. package/dist/cmd/cloud/env/index.d.ts.map +1 -1
  26. package/dist/cmd/cloud/env/index.js +6 -2
  27. package/dist/cmd/cloud/env/index.js.map +1 -1
  28. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  29. package/dist/cmd/cloud/env/list.js +99 -23
  30. package/dist/cmd/cloud/env/list.js.map +1 -1
  31. package/dist/cmd/cloud/env/org-util.d.ts +16 -0
  32. package/dist/cmd/cloud/env/org-util.d.ts.map +1 -0
  33. package/dist/cmd/cloud/env/org-util.js +28 -0
  34. package/dist/cmd/cloud/env/org-util.js.map +1 -0
  35. package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
  36. package/dist/cmd/cloud/env/pull.js +61 -29
  37. package/dist/cmd/cloud/env/pull.js.map +1 -1
  38. package/dist/cmd/cloud/env/push.d.ts.map +1 -1
  39. package/dist/cmd/cloud/env/push.js +70 -30
  40. package/dist/cmd/cloud/env/push.js.map +1 -1
  41. package/dist/cmd/cloud/env/set.d.ts.map +1 -1
  42. package/dist/cmd/cloud/env/set.js +72 -26
  43. package/dist/cmd/cloud/env/set.js.map +1 -1
  44. package/dist/cmd/cloud/index.d.ts.map +1 -1
  45. package/dist/cmd/cloud/index.js +2 -0
  46. package/dist/cmd/cloud/index.js.map +1 -1
  47. package/dist/cmd/cloud/keyvalue/create-namespace.js +1 -1
  48. package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -1
  49. package/dist/cmd/cloud/keyvalue/delete-namespace.js +2 -2
  50. package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
  51. package/dist/cmd/cloud/keyvalue/delete.js +1 -1
  52. package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
  53. package/dist/cmd/cloud/keyvalue/get.js +1 -1
  54. package/dist/cmd/cloud/keyvalue/get.js.map +1 -1
  55. package/dist/cmd/cloud/keyvalue/index.js +1 -1
  56. package/dist/cmd/cloud/keyvalue/index.js.map +1 -1
  57. package/dist/cmd/cloud/keyvalue/keys.js +1 -1
  58. package/dist/cmd/cloud/keyvalue/keys.js.map +1 -1
  59. package/dist/cmd/cloud/keyvalue/list-namespaces.js +1 -1
  60. package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -1
  61. package/dist/cmd/cloud/keyvalue/repl.d.ts.map +1 -1
  62. package/dist/cmd/cloud/keyvalue/repl.js +8 -5
  63. package/dist/cmd/cloud/keyvalue/repl.js.map +1 -1
  64. package/dist/cmd/cloud/keyvalue/search.js +1 -1
  65. package/dist/cmd/cloud/keyvalue/search.js.map +1 -1
  66. package/dist/cmd/cloud/keyvalue/set.js +1 -1
  67. package/dist/cmd/cloud/keyvalue/set.js.map +1 -1
  68. package/dist/cmd/cloud/keyvalue/stats.js +1 -1
  69. package/dist/cmd/cloud/keyvalue/stats.js.map +1 -1
  70. package/dist/cmd/cloud/keyvalue/util.d.ts +4 -4
  71. package/dist/cmd/cloud/keyvalue/util.d.ts.map +1 -1
  72. package/dist/cmd/cloud/keyvalue/util.js +4 -9
  73. package/dist/cmd/cloud/keyvalue/util.js.map +1 -1
  74. package/dist/cmd/cloud/queue/ack.d.ts +3 -0
  75. package/dist/cmd/cloud/queue/ack.d.ts.map +1 -0
  76. package/dist/cmd/cloud/queue/ack.js +45 -0
  77. package/dist/cmd/cloud/queue/ack.js.map +1 -0
  78. package/dist/cmd/cloud/queue/create.d.ts +3 -0
  79. package/dist/cmd/cloud/queue/create.d.ts.map +1 -0
  80. package/dist/cmd/cloud/queue/create.js +80 -0
  81. package/dist/cmd/cloud/queue/create.js.map +1 -0
  82. package/dist/cmd/cloud/queue/delete.d.ts +3 -0
  83. package/dist/cmd/cloud/queue/delete.d.ts.map +1 -0
  84. package/dist/cmd/cloud/queue/delete.js +50 -0
  85. package/dist/cmd/cloud/queue/delete.js.map +1 -0
  86. package/dist/cmd/cloud/queue/destinations.d.ts +3 -0
  87. package/dist/cmd/cloud/queue/destinations.d.ts.map +1 -0
  88. package/dist/cmd/cloud/queue/destinations.js +232 -0
  89. package/dist/cmd/cloud/queue/destinations.js.map +1 -0
  90. package/dist/cmd/cloud/queue/dlq.d.ts +3 -0
  91. package/dist/cmd/cloud/queue/dlq.d.ts.map +1 -0
  92. package/dist/cmd/cloud/queue/dlq.js +168 -0
  93. package/dist/cmd/cloud/queue/dlq.js.map +1 -0
  94. package/dist/cmd/cloud/queue/get.d.ts +3 -0
  95. package/dist/cmd/cloud/queue/get.d.ts.map +1 -0
  96. package/dist/cmd/cloud/queue/get.js +130 -0
  97. package/dist/cmd/cloud/queue/get.js.map +1 -0
  98. package/dist/cmd/cloud/queue/index.d.ts +3 -0
  99. package/dist/cmd/cloud/queue/index.d.ts.map +1 -0
  100. package/dist/cmd/cloud/queue/index.js +65 -0
  101. package/dist/cmd/cloud/queue/index.js.map +1 -0
  102. package/dist/cmd/cloud/queue/list.d.ts +3 -0
  103. package/dist/cmd/cloud/queue/list.d.ts.map +1 -0
  104. package/dist/cmd/cloud/queue/list.js +71 -0
  105. package/dist/cmd/cloud/queue/list.js.map +1 -0
  106. package/dist/cmd/cloud/queue/messages.d.ts +3 -0
  107. package/dist/cmd/cloud/queue/messages.d.ts.map +1 -0
  108. package/dist/cmd/cloud/queue/messages.js +137 -0
  109. package/dist/cmd/cloud/queue/messages.js.map +1 -0
  110. package/dist/cmd/cloud/queue/nack.d.ts +3 -0
  111. package/dist/cmd/cloud/queue/nack.d.ts.map +1 -0
  112. package/dist/cmd/cloud/queue/nack.js +45 -0
  113. package/dist/cmd/cloud/queue/nack.js.map +1 -0
  114. package/dist/cmd/cloud/queue/pause.d.ts +3 -0
  115. package/dist/cmd/cloud/queue/pause.d.ts.map +1 -0
  116. package/dist/cmd/cloud/queue/pause.js +36 -0
  117. package/dist/cmd/cloud/queue/pause.js.map +1 -0
  118. package/dist/cmd/cloud/queue/publish.d.ts +3 -0
  119. package/dist/cmd/cloud/queue/publish.d.ts.map +1 -0
  120. package/dist/cmd/cloud/queue/publish.js +76 -0
  121. package/dist/cmd/cloud/queue/publish.js.map +1 -0
  122. package/dist/cmd/cloud/queue/receive.d.ts +3 -0
  123. package/dist/cmd/cloud/queue/receive.d.ts.map +1 -0
  124. package/dist/cmd/cloud/queue/receive.js +67 -0
  125. package/dist/cmd/cloud/queue/receive.js.map +1 -0
  126. package/dist/cmd/cloud/queue/resume.d.ts +3 -0
  127. package/dist/cmd/cloud/queue/resume.d.ts.map +1 -0
  128. package/dist/cmd/cloud/queue/resume.js +35 -0
  129. package/dist/cmd/cloud/queue/resume.js.map +1 -0
  130. package/dist/cmd/cloud/queue/sources.d.ts +3 -0
  131. package/dist/cmd/cloud/queue/sources.d.ts.map +1 -0
  132. package/dist/cmd/cloud/queue/sources.js +290 -0
  133. package/dist/cmd/cloud/queue/sources.js.map +1 -0
  134. package/dist/cmd/cloud/queue/stats.d.ts +3 -0
  135. package/dist/cmd/cloud/queue/stats.d.ts.map +1 -0
  136. package/dist/cmd/cloud/queue/stats.js +239 -0
  137. package/dist/cmd/cloud/queue/stats.js.map +1 -0
  138. package/dist/cmd/cloud/queue/util.d.ts +26 -0
  139. package/dist/cmd/cloud/queue/util.d.ts.map +1 -0
  140. package/dist/cmd/cloud/queue/util.js +19 -0
  141. package/dist/cmd/cloud/queue/util.js.map +1 -0
  142. package/dist/cmd/cloud/sandbox/snapshot/build.d.ts.map +1 -1
  143. package/dist/cmd/cloud/sandbox/snapshot/build.js +122 -28
  144. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  145. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
  146. package/dist/cmd/cloud/sandbox/snapshot/create.js +19 -7
  147. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
  148. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -1
  149. package/dist/cmd/cloud/sandbox/snapshot/get.js +16 -0
  150. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  151. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
  152. package/dist/cmd/cloud/sandbox/snapshot/list.js +4 -0
  153. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
  154. package/dist/cmd/cloud/vector/stats.d.ts.map +1 -1
  155. package/dist/cmd/cloud/vector/stats.js +8 -0
  156. package/dist/cmd/cloud/vector/stats.js.map +1 -1
  157. package/dist/cmd/project/create.d.ts.map +1 -1
  158. package/dist/cmd/project/create.js +12 -0
  159. package/dist/cmd/project/create.js.map +1 -1
  160. package/dist/cmd/project/template-flow.d.ts +3 -0
  161. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  162. package/dist/cmd/project/template-flow.js +157 -68
  163. package/dist/cmd/project/template-flow.js.map +1 -1
  164. package/dist/cmd/setup/index.d.ts.map +1 -1
  165. package/dist/cmd/setup/index.js +2 -1
  166. package/dist/cmd/setup/index.js.map +1 -1
  167. package/dist/env-util.d.ts +6 -1
  168. package/dist/env-util.d.ts.map +1 -1
  169. package/dist/env-util.js +16 -2
  170. package/dist/env-util.js.map +1 -1
  171. package/dist/errors.d.ts +4 -2
  172. package/dist/errors.d.ts.map +1 -1
  173. package/dist/errors.js +6 -0
  174. package/dist/errors.js.map +1 -1
  175. package/dist/onboarding/agentPrompt.d.ts +8 -0
  176. package/dist/onboarding/agentPrompt.d.ts.map +1 -0
  177. package/dist/onboarding/agentPrompt.js +263 -0
  178. package/dist/onboarding/agentPrompt.js.map +1 -0
  179. package/dist/schema-generator.d.ts +1 -1
  180. package/dist/schema-generator.d.ts.map +1 -1
  181. package/dist/schema-parser.d.ts +1 -1
  182. package/dist/schema-parser.d.ts.map +1 -1
  183. package/dist/schema-parser.js +36 -1
  184. package/dist/schema-parser.js.map +1 -1
  185. package/dist/tui/box.d.ts +4 -0
  186. package/dist/tui/box.d.ts.map +1 -1
  187. package/dist/tui/box.js +39 -0
  188. package/dist/tui/box.js.map +1 -1
  189. package/dist/tui.d.ts +11 -1
  190. package/dist/tui.d.ts.map +1 -1
  191. package/dist/tui.js +33 -15
  192. package/dist/tui.js.map +1 -1
  193. package/dist/types.d.ts.map +1 -1
  194. package/dist/types.js.map +1 -1
  195. package/package.json +6 -6
  196. package/src/cli.ts +19 -2
  197. package/src/cmd/ai/opencode/install.ts +1 -1
  198. package/src/cmd/build/ast.ts +88 -2
  199. package/src/cmd/build/vite/registry-generator.ts +120 -24
  200. package/src/cmd/build/vite/route-discovery.ts +16 -0
  201. package/src/cmd/cloud/env/delete.ts +113 -41
  202. package/src/cmd/cloud/env/get.ts +60 -16
  203. package/src/cmd/cloud/env/import.ts +92 -44
  204. package/src/cmd/cloud/env/index.ts +6 -2
  205. package/src/cmd/cloud/env/list.ts +112 -27
  206. package/src/cmd/cloud/env/org-util.ts +37 -0
  207. package/src/cmd/cloud/env/pull.ts +72 -31
  208. package/src/cmd/cloud/env/push.ts +84 -35
  209. package/src/cmd/cloud/env/set.ts +89 -33
  210. package/src/cmd/cloud/index.ts +2 -0
  211. package/src/cmd/cloud/keyvalue/create-namespace.ts +1 -1
  212. package/src/cmd/cloud/keyvalue/delete-namespace.ts +2 -2
  213. package/src/cmd/cloud/keyvalue/delete.ts +1 -1
  214. package/src/cmd/cloud/keyvalue/get.ts +1 -1
  215. package/src/cmd/cloud/keyvalue/index.ts +1 -1
  216. package/src/cmd/cloud/keyvalue/keys.ts +1 -1
  217. package/src/cmd/cloud/keyvalue/list-namespaces.ts +1 -1
  218. package/src/cmd/cloud/keyvalue/repl.ts +8 -5
  219. package/src/cmd/cloud/keyvalue/search.ts +1 -1
  220. package/src/cmd/cloud/keyvalue/set.ts +1 -1
  221. package/src/cmd/cloud/keyvalue/stats.ts +1 -1
  222. package/src/cmd/cloud/keyvalue/util.ts +8 -17
  223. package/src/cmd/cloud/queue/ack.ts +50 -0
  224. package/src/cmd/cloud/queue/create.ts +91 -0
  225. package/src/cmd/cloud/queue/delete.ts +57 -0
  226. package/src/cmd/cloud/queue/destinations.ts +287 -0
  227. package/src/cmd/cloud/queue/dlq.ts +203 -0
  228. package/src/cmd/cloud/queue/get.ts +158 -0
  229. package/src/cmd/cloud/queue/index.ts +66 -0
  230. package/src/cmd/cloud/queue/list.ts +81 -0
  231. package/src/cmd/cloud/queue/messages.ts +160 -0
  232. package/src/cmd/cloud/queue/nack.ts +50 -0
  233. package/src/cmd/cloud/queue/pause.ts +41 -0
  234. package/src/cmd/cloud/queue/publish.ts +88 -0
  235. package/src/cmd/cloud/queue/receive.ts +76 -0
  236. package/src/cmd/cloud/queue/resume.ts +40 -0
  237. package/src/cmd/cloud/queue/sources.ts +352 -0
  238. package/src/cmd/cloud/queue/stats.ts +297 -0
  239. package/src/cmd/cloud/queue/util.ts +34 -0
  240. package/src/cmd/cloud/sandbox/snapshot/build.ts +146 -29
  241. package/src/cmd/cloud/sandbox/snapshot/create.ts +24 -7
  242. package/src/cmd/cloud/sandbox/snapshot/get.ts +16 -0
  243. package/src/cmd/cloud/sandbox/snapshot/list.ts +4 -0
  244. package/src/cmd/cloud/vector/stats.ts +9 -0
  245. package/src/cmd/project/create.ts +12 -0
  246. package/src/cmd/project/template-flow.ts +181 -69
  247. package/src/cmd/setup/index.ts +2 -1
  248. package/src/env-util.ts +17 -2
  249. package/src/errors.ts +8 -0
  250. package/src/onboarding/agentPrompt.ts +263 -0
  251. package/src/schema-generator.ts +1 -1
  252. package/src/schema-parser.ts +45 -3
  253. package/src/tui/box.ts +52 -0
  254. package/src/tui.ts +47 -17
  255. package/src/types.ts +0 -1
@@ -0,0 +1,50 @@
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 { nackMessage } from '@agentuity/server';
7
+
8
+ const NackResponseSchema = z.object({
9
+ success: z.boolean(),
10
+ queue_name: z.string(),
11
+ message_id: z.string(),
12
+ });
13
+
14
+ export const nackSubcommand = createCommand({
15
+ name: 'nack',
16
+ description: 'Negative acknowledge a message (return to queue for retry)',
17
+ tags: ['mutating', 'updates-resource', 'requires-auth'],
18
+ requires: { auth: true },
19
+ examples: [
20
+ {
21
+ command: getCommand('cloud queue nack my-queue msg-123'),
22
+ description: 'Return message to queue for retry',
23
+ },
24
+ ],
25
+ schema: {
26
+ args: z.object({
27
+ queue_name: z.string().min(1).describe('Queue name'),
28
+ message_id: z.string().min(1).describe('Message ID'),
29
+ }),
30
+ response: NackResponseSchema,
31
+ },
32
+
33
+ async handler(ctx) {
34
+ const { args, options } = ctx;
35
+ const client = await createQueueAPIClient(ctx);
36
+ await nackMessage(client, args.queue_name, args.message_id, getQueueApiOptions(ctx));
37
+
38
+ if (!options.json) {
39
+ tui.success(`Returned message to queue: ${args.message_id}`);
40
+ }
41
+
42
+ return {
43
+ success: true,
44
+ queue_name: args.queue_name,
45
+ message_id: args.message_id,
46
+ };
47
+ },
48
+ });
49
+
50
+ export default nackSubcommand;
@@ -0,0 +1,41 @@
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 { pauseQueue, QueueSchema } from '@agentuity/server';
7
+
8
+ export const pauseSubcommand = createCommand({
9
+ name: 'pause',
10
+ description: 'Pause message delivery for a queue',
11
+ tags: ['mutating', 'updates-resource', 'requires-auth'],
12
+ requires: { auth: true },
13
+ examples: [
14
+ {
15
+ command: getCommand('cloud queue pause my-queue'),
16
+ description: 'Pause a 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 pauseQueue(client, args.name, getQueueApiOptions(ctx));
31
+
32
+ if (!options.json) {
33
+ tui.success(`Paused queue: ${queue.name}`);
34
+ tui.info(` Paused at: ${queue.paused_at}`);
35
+ }
36
+
37
+ return queue;
38
+ },
39
+ });
40
+
41
+ export default pauseSubcommand;
@@ -0,0 +1,88 @@
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 { publishMessage, MessageSchema } from '@agentuity/server';
7
+ import { ErrorCode } from '../../../errors';
8
+
9
+ export const publishSubcommand = createCommand({
10
+ name: 'publish',
11
+ aliases: ['pub', 'send'],
12
+ description: 'Publish a message to a queue',
13
+ tags: ['mutating', 'creates-resource', 'requires-auth'],
14
+ requires: { auth: true },
15
+ examples: [
16
+ {
17
+ command: getCommand('cloud queue publish my-queue \'{"task":"process"}\''),
18
+ description: 'Publish a JSON message',
19
+ },
20
+ {
21
+ command: getCommand(
22
+ 'cloud queue publish my-queue \'{"task":"process"}\' --metadata \'{"priority":"high"}\''
23
+ ),
24
+ description: 'Publish with metadata',
25
+ },
26
+ {
27
+ command: getCommand('cloud queue publish my-queue "hello" --ttl 3600'),
28
+ description: 'Publish with 1h TTL',
29
+ },
30
+ ],
31
+ schema: {
32
+ args: z.object({
33
+ queue_name: z.string().min(1).describe('Queue name'),
34
+ payload: z.string().min(1).describe('Message payload (JSON)'),
35
+ }),
36
+ options: z.object({
37
+ metadata: z.string().optional().describe('Message metadata as JSON'),
38
+ partitionKey: z.string().optional().describe('Partition key for ordering'),
39
+ idempotencyKey: z.string().optional().describe('Idempotency key to prevent duplicates'),
40
+ ttl: z.coerce.number().optional().describe('Message TTL in seconds'),
41
+ }),
42
+ response: MessageSchema,
43
+ },
44
+
45
+ async handler(ctx) {
46
+ const { args, opts, options } = ctx;
47
+ const client = await createQueueAPIClient(ctx);
48
+
49
+ let payload: unknown;
50
+ try {
51
+ payload = JSON.parse(args.payload);
52
+ } catch {
53
+ tui.fatal('Invalid payload JSON', ErrorCode.INVALID_ARGUMENT);
54
+ }
55
+
56
+ let metadata: Record<string, unknown> | undefined;
57
+ if (opts.metadata) {
58
+ try {
59
+ metadata = JSON.parse(opts.metadata);
60
+ } catch {
61
+ tui.fatal('Invalid metadata JSON', ErrorCode.INVALID_ARGUMENT);
62
+ }
63
+ }
64
+
65
+ const message = await publishMessage(
66
+ client,
67
+ args.queue_name,
68
+ {
69
+ payload,
70
+ metadata,
71
+ partition_key: opts.partitionKey,
72
+ idempotency_key: opts.idempotencyKey,
73
+ ttl_seconds: opts.ttl,
74
+ },
75
+ getQueueApiOptions(ctx)
76
+ );
77
+
78
+ if (!options.json) {
79
+ tui.success(`Published message: ${message.id}`);
80
+ console.log(` Offset: ${message.offset}`);
81
+ console.log(` State: ${message.state}`);
82
+ }
83
+
84
+ return message;
85
+ },
86
+ });
87
+
88
+ export default publishSubcommand;
@@ -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;