@agentuity/cli 0.1.40 → 0.1.42

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 (250) hide show
  1. package/bin/cli.ts +0 -2
  2. package/dist/agent-detection.d.ts.map +1 -1
  3. package/dist/agent-detection.js +11 -3
  4. package/dist/agent-detection.js.map +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +9 -5
  7. package/dist/cli.js.map +1 -1
  8. package/dist/cmd/ai/index.d.ts.map +1 -1
  9. package/dist/cmd/ai/index.js +1 -8
  10. package/dist/cmd/ai/index.js.map +1 -1
  11. package/dist/cmd/ai/prompt/version.js +1 -1
  12. package/dist/cmd/ai/prompt/version.js.map +1 -1
  13. package/dist/cmd/auth/api.d.ts.map +1 -1
  14. package/dist/cmd/auth/api.js +4 -1
  15. package/dist/cmd/auth/api.js.map +1 -1
  16. package/dist/cmd/auth/org/index.d.ts.map +1 -1
  17. package/dist/cmd/auth/org/index.js +8 -2
  18. package/dist/cmd/auth/org/index.js.map +1 -1
  19. package/dist/cmd/auth/ssh/api.js +2 -2
  20. package/dist/cmd/auth/ssh/api.js.map +1 -1
  21. package/dist/cmd/build/ast.d.ts.map +1 -1
  22. package/dist/cmd/build/ast.js +14 -13
  23. package/dist/cmd/build/ast.js.map +1 -1
  24. package/dist/cmd/build/entry-generator.d.ts.map +1 -1
  25. package/dist/cmd/build/entry-generator.js +19 -0
  26. package/dist/cmd/build/entry-generator.js.map +1 -1
  27. package/dist/cmd/build/patch/index.d.ts.map +1 -1
  28. package/dist/cmd/build/patch/index.js +3 -0
  29. package/dist/cmd/build/patch/index.js.map +1 -1
  30. package/dist/cmd/build/vite/index.d.ts +1 -0
  31. package/dist/cmd/build/vite/index.d.ts.map +1 -1
  32. package/dist/cmd/build/vite/index.js +1 -0
  33. package/dist/cmd/build/vite/index.js.map +1 -1
  34. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts +34 -0
  35. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +1 -0
  36. package/dist/cmd/build/vite/public-asset-path-plugin.js +107 -0
  37. package/dist/cmd/build/vite/public-asset-path-plugin.js.map +1 -0
  38. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  39. package/dist/cmd/build/vite/registry-generator.js +14 -5
  40. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  41. package/dist/cmd/build/vite/route-discovery.js +1 -1
  42. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  43. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  44. package/dist/cmd/build/vite/vite-asset-server-config.js +11 -2
  45. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  46. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  47. package/dist/cmd/build/vite/vite-builder.js +3 -0
  48. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  49. package/dist/cmd/canary/index.d.ts.map +1 -1
  50. package/dist/cmd/canary/index.js +9 -1
  51. package/dist/cmd/canary/index.js.map +1 -1
  52. package/dist/cmd/cloud/db/create.d.ts.map +1 -1
  53. package/dist/cmd/cloud/db/create.js +2 -2
  54. package/dist/cmd/cloud/db/create.js.map +1 -1
  55. package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
  56. package/dist/cmd/cloud/db/delete.js +2 -2
  57. package/dist/cmd/cloud/db/delete.js.map +1 -1
  58. package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
  59. package/dist/cmd/cloud/deploy-fork.js +68 -0
  60. package/dist/cmd/cloud/deploy-fork.js.map +1 -1
  61. package/dist/cmd/cloud/env/import.d.ts.map +1 -1
  62. package/dist/cmd/cloud/env/import.js +4 -1
  63. package/dist/cmd/cloud/env/import.js.map +1 -1
  64. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  65. package/dist/cmd/cloud/env/list.js +4 -1
  66. package/dist/cmd/cloud/env/list.js.map +1 -1
  67. package/dist/cmd/cloud/env/push.d.ts.map +1 -1
  68. package/dist/cmd/cloud/env/push.js +4 -1
  69. package/dist/cmd/cloud/env/push.js.map +1 -1
  70. package/dist/cmd/cloud/region/index.js +1 -1
  71. package/dist/cmd/cloud/region/index.js.map +1 -1
  72. package/dist/cmd/cloud/sandbox/snapshot/build.d.ts.map +1 -1
  73. package/dist/cmd/cloud/sandbox/snapshot/build.js +22 -10
  74. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  75. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -1
  76. package/dist/cmd/cloud/sandbox/snapshot/get.js +12 -2
  77. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  78. package/dist/cmd/cloud/storage/create.d.ts.map +1 -1
  79. package/dist/cmd/cloud/storage/create.js +2 -2
  80. package/dist/cmd/cloud/storage/create.js.map +1 -1
  81. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
  82. package/dist/cmd/cloud/storage/delete.js +2 -2
  83. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  84. package/dist/cmd/cloud/stream/get.js +7 -7
  85. package/dist/cmd/cloud/stream/get.js.map +1 -1
  86. package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
  87. package/dist/cmd/cloud/stream/list.js +9 -6
  88. package/dist/cmd/cloud/stream/list.js.map +1 -1
  89. package/dist/cmd/dev/download.d.ts.map +1 -1
  90. package/dist/cmd/dev/download.js +9 -2
  91. package/dist/cmd/dev/download.js.map +1 -1
  92. package/dist/cmd/dev/index.js +1 -1
  93. package/dist/cmd/dev/index.js.map +1 -1
  94. package/dist/cmd/git/account/add.d.ts.map +1 -1
  95. package/dist/cmd/git/account/add.js +4 -3
  96. package/dist/cmd/git/account/add.js.map +1 -1
  97. package/dist/cmd/git/link.js +2 -2
  98. package/dist/cmd/git/link.js.map +1 -1
  99. package/dist/cmd/git/list.d.ts.map +1 -1
  100. package/dist/cmd/git/list.js +3 -2
  101. package/dist/cmd/git/list.js.map +1 -1
  102. package/dist/cmd/project/auth/init.js +1 -1
  103. package/dist/cmd/project/auth/init.js.map +1 -1
  104. package/dist/cmd/project/auth/shared.d.ts.map +1 -1
  105. package/dist/cmd/project/auth/shared.js +8 -3
  106. package/dist/cmd/project/auth/shared.js.map +1 -1
  107. package/dist/cmd/project/delete.d.ts.map +1 -1
  108. package/dist/cmd/project/delete.js +3 -2
  109. package/dist/cmd/project/delete.js.map +1 -1
  110. package/dist/cmd/project/reconcile.d.ts.map +1 -1
  111. package/dist/cmd/project/reconcile.js +9 -5
  112. package/dist/cmd/project/reconcile.js.map +1 -1
  113. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  114. package/dist/cmd/project/template-flow.js +15 -5
  115. package/dist/cmd/project/template-flow.js.map +1 -1
  116. package/dist/config.d.ts.map +1 -1
  117. package/dist/config.js +3 -2
  118. package/dist/config.js.map +1 -1
  119. package/dist/domain.d.ts.map +1 -1
  120. package/dist/domain.js +4 -3
  121. package/dist/domain.js.map +1 -1
  122. package/dist/internal-logger.d.ts.map +1 -1
  123. package/dist/internal-logger.js +3 -2
  124. package/dist/internal-logger.js.map +1 -1
  125. package/dist/repl.d.ts.map +1 -1
  126. package/dist/repl.js +31 -14
  127. package/dist/repl.js.map +1 -1
  128. package/dist/schema-parser.d.ts.map +1 -1
  129. package/dist/schema-parser.js +4 -1
  130. package/dist/schema-parser.js.map +1 -1
  131. package/dist/sound.d.ts.map +1 -1
  132. package/dist/sound.js +2 -1
  133. package/dist/sound.js.map +1 -1
  134. package/dist/steps.d.ts.map +1 -1
  135. package/dist/steps.js +13 -6
  136. package/dist/steps.js.map +1 -1
  137. package/dist/terminal.js +2 -0
  138. package/dist/terminal.js.map +1 -1
  139. package/dist/tsc-output-parser.d.ts +3 -0
  140. package/dist/tsc-output-parser.d.ts.map +1 -1
  141. package/dist/tsc-output-parser.js +32 -9
  142. package/dist/tsc-output-parser.js.map +1 -1
  143. package/dist/tui/prompt.d.ts.map +1 -1
  144. package/dist/tui/prompt.js +6 -2
  145. package/dist/tui/prompt.js.map +1 -1
  146. package/dist/tui.d.ts.map +1 -1
  147. package/dist/tui.js +26 -15
  148. package/dist/tui.js.map +1 -1
  149. package/dist/typescript-errors.d.ts.map +1 -1
  150. package/dist/typescript-errors.js +5 -2
  151. package/dist/typescript-errors.js.map +1 -1
  152. package/dist/utils/date.d.ts.map +1 -1
  153. package/dist/utils/date.js +5 -1
  154. package/dist/utils/date.js.map +1 -1
  155. package/dist/utils/deps.d.ts.map +1 -1
  156. package/dist/utils/deps.js +5 -3
  157. package/dist/utils/deps.js.map +1 -1
  158. package/dist/utils/detectSubagent.js +1 -1
  159. package/dist/utils/detectSubagent.js.map +1 -1
  160. package/package.json +6 -6
  161. package/src/agent-detection.ts +12 -3
  162. package/src/cli.ts +9 -5
  163. package/src/cmd/ai/index.ts +1 -8
  164. package/src/cmd/ai/prompt/version.ts +1 -1
  165. package/src/cmd/auth/api.ts +4 -1
  166. package/src/cmd/auth/org/index.ts +8 -2
  167. package/src/cmd/auth/ssh/api.ts +2 -2
  168. package/src/cmd/build/ast.ts +14 -13
  169. package/src/cmd/build/entry-generator.ts +19 -0
  170. package/src/cmd/build/patch/index.ts +3 -0
  171. package/src/cmd/build/vite/index.ts +1 -0
  172. package/src/cmd/build/vite/public-asset-path-plugin.ts +137 -0
  173. package/src/cmd/build/vite/registry-generator.ts +14 -5
  174. package/src/cmd/build/vite/route-discovery.ts +1 -1
  175. package/src/cmd/build/vite/vite-asset-server-config.ts +13 -4
  176. package/src/cmd/build/vite/vite-builder.ts +3 -0
  177. package/src/cmd/canary/index.ts +9 -1
  178. package/src/cmd/cloud/db/create.ts +16 -17
  179. package/src/cmd/cloud/db/delete.ts +19 -20
  180. package/src/cmd/cloud/deploy-fork.ts +75 -0
  181. package/src/cmd/cloud/env/import.ts +6 -3
  182. package/src/cmd/cloud/env/list.ts +11 -9
  183. package/src/cmd/cloud/env/push.ts +6 -3
  184. package/src/cmd/cloud/region/index.ts +3 -3
  185. package/src/cmd/cloud/sandbox/snapshot/build.ts +42 -33
  186. package/src/cmd/cloud/sandbox/snapshot/get.ts +21 -15
  187. package/src/cmd/cloud/storage/create.ts +16 -17
  188. package/src/cmd/cloud/storage/delete.ts +19 -20
  189. package/src/cmd/cloud/stream/get.ts +7 -7
  190. package/src/cmd/cloud/stream/list.ts +9 -6
  191. package/src/cmd/dev/download.ts +10 -2
  192. package/src/cmd/dev/index.ts +4 -4
  193. package/src/cmd/git/account/add.ts +5 -4
  194. package/src/cmd/git/link.ts +2 -2
  195. package/src/cmd/git/list.ts +7 -6
  196. package/src/cmd/project/auth/init.ts +6 -6
  197. package/src/cmd/project/auth/shared.ts +8 -3
  198. package/src/cmd/project/delete.ts +3 -2
  199. package/src/cmd/project/reconcile.ts +9 -5
  200. package/src/cmd/project/template-flow.ts +15 -5
  201. package/src/config.ts +3 -2
  202. package/src/domain.ts +4 -3
  203. package/src/internal-logger.ts +3 -2
  204. package/src/repl.ts +27 -14
  205. package/src/schema-parser.ts +4 -1
  206. package/src/sound.ts +2 -1
  207. package/src/steps.ts +11 -6
  208. package/src/terminal.ts +2 -1
  209. package/src/tsc-output-parser.ts +61 -38
  210. package/src/tui/prompt.ts +6 -2
  211. package/src/tui.ts +26 -17
  212. package/src/typescript-errors.ts +5 -2
  213. package/src/utils/date.ts +5 -1
  214. package/src/utils/deps.ts +5 -3
  215. package/src/utils/detectSubagent.ts +1 -1
  216. package/dist/cmd/ai/cadence/index.d.ts +0 -3
  217. package/dist/cmd/ai/cadence/index.d.ts.map +0 -1
  218. package/dist/cmd/ai/cadence/index.js +0 -35
  219. package/dist/cmd/ai/cadence/index.js.map +0 -1
  220. package/dist/cmd/ai/cadence/list.d.ts +0 -3
  221. package/dist/cmd/ai/cadence/list.d.ts.map +0 -1
  222. package/dist/cmd/ai/cadence/list.js +0 -167
  223. package/dist/cmd/ai/cadence/list.js.map +0 -1
  224. package/dist/cmd/ai/cadence/pause.d.ts +0 -3
  225. package/dist/cmd/ai/cadence/pause.d.ts.map +0 -1
  226. package/dist/cmd/ai/cadence/pause.js +0 -103
  227. package/dist/cmd/ai/cadence/pause.js.map +0 -1
  228. package/dist/cmd/ai/cadence/resume.d.ts +0 -3
  229. package/dist/cmd/ai/cadence/resume.d.ts.map +0 -1
  230. package/dist/cmd/ai/cadence/resume.js +0 -106
  231. package/dist/cmd/ai/cadence/resume.js.map +0 -1
  232. package/dist/cmd/ai/cadence/status.d.ts +0 -3
  233. package/dist/cmd/ai/cadence/status.d.ts.map +0 -1
  234. package/dist/cmd/ai/cadence/status.js +0 -129
  235. package/dist/cmd/ai/cadence/status.js.map +0 -1
  236. package/dist/cmd/ai/cadence/stop.d.ts +0 -3
  237. package/dist/cmd/ai/cadence/stop.d.ts.map +0 -1
  238. package/dist/cmd/ai/cadence/stop.js +0 -107
  239. package/dist/cmd/ai/cadence/stop.js.map +0 -1
  240. package/dist/cmd/ai/cadence/util.d.ts +0 -44
  241. package/dist/cmd/ai/cadence/util.d.ts.map +0 -1
  242. package/dist/cmd/ai/cadence/util.js +0 -52
  243. package/dist/cmd/ai/cadence/util.js.map +0 -1
  244. package/src/cmd/ai/cadence/index.ts +0 -36
  245. package/src/cmd/ai/cadence/list.ts +0 -183
  246. package/src/cmd/ai/cadence/pause.ts +0 -119
  247. package/src/cmd/ai/cadence/resume.ts +0 -124
  248. package/src/cmd/ai/cadence/status.ts +0 -141
  249. package/src/cmd/ai/cadence/stop.ts +0 -124
  250. package/src/cmd/ai/cadence/util.ts +0 -86
@@ -1,124 +0,0 @@
1
- import { z } from 'zod';
2
- import { createCommand } from '../../../types';
3
- import * as tui from '../../../tui';
4
- import {
5
- createCadenceKVAdapter,
6
- CADENCE_NAMESPACE,
7
- getLoopStateKey,
8
- parseLoopState,
9
- type CadenceLoop,
10
- } from './util';
11
- import { getCommand } from '../../../command-prefix';
12
-
13
- const CadenceResumeResponseSchema = z.object({
14
- success: z.boolean(),
15
- loopId: z.string(),
16
- previousStatus: z.string().optional(),
17
- newStatus: z.string().optional(),
18
- message: z.string(),
19
- });
20
-
21
- export const resumeSubcommand = createCommand({
22
- name: 'resume',
23
- description: 'Resume a paused Cadence loop',
24
- tags: ['mutating', 'updates-resource', 'fast', 'requires-auth'],
25
- requires: { auth: true },
26
- examples: [
27
- { command: getCommand('cadence resume lp_auth_impl'), description: 'Resume a paused loop' },
28
- ],
29
- schema: {
30
- args: z.object({
31
- loopId: z.string().min(1).describe('The loop ID to resume'),
32
- }),
33
- response: CadenceResumeResponseSchema,
34
- },
35
-
36
- async handler(ctx) {
37
- const { args, options } = ctx;
38
- const kv = await createCadenceKVAdapter(ctx);
39
-
40
- const key = getLoopStateKey(args.loopId);
41
- const result = await kv.get(CADENCE_NAMESPACE, key);
42
-
43
- if (!result.exists || !result.data) {
44
- if (!options.json) {
45
- tui.error(`Loop ${args.loopId} not found.`);
46
- }
47
- return {
48
- success: false,
49
- loopId: args.loopId,
50
- message: 'Loop not found',
51
- };
52
- }
53
-
54
- let data: unknown;
55
- if (typeof result.data === 'string') {
56
- try {
57
- data = JSON.parse(result.data);
58
- } catch {
59
- if (!options.json) {
60
- tui.error(`Failed to parse loop state for ${args.loopId}`);
61
- }
62
- return {
63
- success: false,
64
- loopId: args.loopId,
65
- message: 'Failed to parse loop state',
66
- };
67
- }
68
- } else {
69
- data = result.data;
70
- }
71
-
72
- const loop = parseLoopState(data);
73
- if (!loop) {
74
- if (!options.json) {
75
- tui.error(`Invalid loop state for ${args.loopId}`);
76
- }
77
- return {
78
- success: false,
79
- loopId: args.loopId,
80
- message: 'Invalid loop state',
81
- };
82
- }
83
-
84
- if (loop.status !== 'paused') {
85
- if (!options.json) {
86
- tui.warning(`Loop ${args.loopId} is not paused (status: ${loop.status})`);
87
- }
88
- return {
89
- success: false,
90
- loopId: args.loopId,
91
- previousStatus: loop.status,
92
- message: `Cannot resume loop with status: ${loop.status}`,
93
- };
94
- }
95
-
96
- // Update status to running
97
- const updatedLoop: CadenceLoop = {
98
- ...loop,
99
- status: 'running',
100
- updatedAt: new Date().toISOString(),
101
- };
102
-
103
- await kv.set(CADENCE_NAMESPACE, key, JSON.stringify(updatedLoop), {
104
- contentType: 'application/json',
105
- });
106
-
107
- if (!options.json) {
108
- tui.success(`Resumed loop ${args.loopId}`);
109
- tui.info(
110
- 'Note: The loop will continue when the Open Code session checks for status updates.'
111
- );
112
- }
113
-
114
- return {
115
- success: true,
116
- loopId: args.loopId,
117
- previousStatus: 'paused',
118
- newStatus: 'running',
119
- message: 'Loop resumed successfully',
120
- };
121
- },
122
- });
123
-
124
- export default resumeSubcommand;
@@ -1,141 +0,0 @@
1
- import { z } from 'zod';
2
- import { createCommand } from '../../../types';
3
- import * as tui from '../../../tui';
4
- import { createCadenceKVAdapter, CADENCE_NAMESPACE, getLoopStateKey, parseLoopState } from './util';
5
- import { getCommand } from '../../../command-prefix';
6
-
7
- const CadenceStatusResponseSchema = z.object({
8
- found: z.boolean(),
9
- loop: z
10
- .object({
11
- loopId: z.string(),
12
- status: z.string(),
13
- iteration: z.number(),
14
- maxIterations: z.number(),
15
- prompt: z.string(),
16
- projectLabel: z.string().optional(),
17
- sessionId: z.string().optional(),
18
- createdAt: z.string(),
19
- updatedAt: z.string(),
20
- lastError: z.string().optional(),
21
- })
22
- .optional(),
23
- });
24
-
25
- export const statusSubcommand = createCommand({
26
- name: 'status',
27
- aliases: ['get', 'show'],
28
- description: 'Get status of a Cadence loop',
29
- tags: ['read-only', 'fast', 'requires-auth'],
30
- requires: { auth: true },
31
- examples: [
32
- { command: getCommand('cadence status lp_auth_impl'), description: 'Get loop status' },
33
- ],
34
- schema: {
35
- args: z.object({
36
- loopId: z.string().min(1).describe('The loop ID (e.g., lp_auth_impl)'),
37
- }),
38
- response: CadenceStatusResponseSchema,
39
- },
40
- idempotent: true,
41
-
42
- async handler(ctx) {
43
- const { args, options } = ctx;
44
- const kv = await createCadenceKVAdapter(ctx);
45
-
46
- const key = getLoopStateKey(args.loopId);
47
- const result = await kv.get(CADENCE_NAMESPACE, key);
48
-
49
- if (!result.exists || !result.data) {
50
- if (!options.json) {
51
- tui.warning(`Loop ${args.loopId} not found.`);
52
- }
53
- return { found: false };
54
- }
55
-
56
- let data: unknown;
57
- if (typeof result.data === 'string') {
58
- try {
59
- data = JSON.parse(result.data);
60
- } catch {
61
- if (!options.json) {
62
- tui.error(`Failed to parse loop state for ${args.loopId}`);
63
- }
64
- return { found: false };
65
- }
66
- } else {
67
- data = result.data;
68
- }
69
-
70
- const loop = parseLoopState(data);
71
- if (!loop) {
72
- if (!options.json) {
73
- tui.error(`Invalid loop state for ${args.loopId}`);
74
- }
75
- return { found: false };
76
- }
77
-
78
- if (!options.json) {
79
- console.log();
80
- tui.info(`Cadence Loop: ${tui.colorPrimary(loop.loopId)}`);
81
- console.log();
82
-
83
- const details = [
84
- ['Status', formatStatus(loop.status)],
85
- ['Iteration', `${loop.iteration} / ${loop.maxIterations}`],
86
- ['Project', loop.projectLabel ?? '-'],
87
- ['Session', loop.sessionId ?? '-'],
88
- ['Created', loop.createdAt],
89
- ['Updated', loop.updatedAt],
90
- ];
91
-
92
- if (loop.lastError) {
93
- details.push(['Last Error', tui.colorError(loop.lastError)]);
94
- }
95
-
96
- for (const [label, value] of details) {
97
- console.log(` ${tui.muted(label + ':')} ${value}`);
98
- }
99
-
100
- console.log();
101
- console.log(tui.muted('Task:'));
102
- console.log(` ${loop.prompt}`);
103
- console.log();
104
- }
105
-
106
- return {
107
- found: true,
108
- loop: {
109
- loopId: loop.loopId,
110
- status: loop.status,
111
- iteration: loop.iteration,
112
- maxIterations: loop.maxIterations,
113
- prompt: loop.prompt,
114
- projectLabel: loop.projectLabel,
115
- sessionId: loop.sessionId,
116
- createdAt: loop.createdAt,
117
- updatedAt: loop.updatedAt,
118
- lastError: loop.lastError,
119
- },
120
- };
121
- },
122
- });
123
-
124
- function formatStatus(status: string): string {
125
- switch (status) {
126
- case 'running':
127
- return tui.colorSuccess('● running');
128
- case 'paused':
129
- return tui.colorWarning('⏸ paused');
130
- case 'completed':
131
- return tui.colorSuccess('✓ completed');
132
- case 'failed':
133
- return tui.colorError('✗ failed');
134
- case 'cancelled':
135
- return tui.muted('○ cancelled');
136
- default:
137
- return status;
138
- }
139
- }
140
-
141
- export default statusSubcommand;
@@ -1,124 +0,0 @@
1
- import { z } from 'zod';
2
- import { createCommand } from '../../../types';
3
- import * as tui from '../../../tui';
4
- import {
5
- createCadenceKVAdapter,
6
- CADENCE_NAMESPACE,
7
- getLoopStateKey,
8
- parseLoopState,
9
- type CadenceLoop,
10
- } from './util';
11
- import { getCommand } from '../../../command-prefix';
12
-
13
- const CadenceStopResponseSchema = z.object({
14
- success: z.boolean(),
15
- loopId: z.string(),
16
- previousStatus: z.string().optional(),
17
- newStatus: z.string().optional(),
18
- message: z.string(),
19
- });
20
-
21
- export const stopSubcommand = createCommand({
22
- name: 'stop',
23
- aliases: ['cancel'],
24
- description: 'Stop and cancel a Cadence loop',
25
- tags: ['mutating', 'updates-resource', 'fast', 'requires-auth'],
26
- requires: { auth: true },
27
- examples: [
28
- { command: getCommand('cadence stop lp_auth_impl'), description: 'Stop and cancel a loop' },
29
- ],
30
- schema: {
31
- args: z.object({
32
- loopId: z.string().min(1).describe('The loop ID to stop'),
33
- }),
34
- response: CadenceStopResponseSchema,
35
- },
36
-
37
- async handler(ctx) {
38
- const { args, options } = ctx;
39
- const kv = await createCadenceKVAdapter(ctx);
40
-
41
- const key = getLoopStateKey(args.loopId);
42
- const result = await kv.get(CADENCE_NAMESPACE, key);
43
-
44
- if (!result.exists || !result.data) {
45
- if (!options.json) {
46
- tui.error(`Loop ${args.loopId} not found.`);
47
- }
48
- return {
49
- success: false,
50
- loopId: args.loopId,
51
- message: 'Loop not found',
52
- };
53
- }
54
-
55
- let data: unknown;
56
- if (typeof result.data === 'string') {
57
- try {
58
- data = JSON.parse(result.data);
59
- } catch {
60
- if (!options.json) {
61
- tui.error(`Failed to parse loop state for ${args.loopId}`);
62
- }
63
- return {
64
- success: false,
65
- loopId: args.loopId,
66
- message: 'Failed to parse loop state',
67
- };
68
- }
69
- } else {
70
- data = result.data;
71
- }
72
-
73
- const loop = parseLoopState(data);
74
- if (!loop) {
75
- if (!options.json) {
76
- tui.error(`Invalid loop state for ${args.loopId}`);
77
- }
78
- return {
79
- success: false,
80
- loopId: args.loopId,
81
- message: 'Invalid loop state',
82
- };
83
- }
84
-
85
- const previousStatus = loop.status;
86
-
87
- if (loop.status === 'completed' || loop.status === 'cancelled') {
88
- if (!options.json) {
89
- tui.warning(`Loop ${args.loopId} is already ${loop.status}`);
90
- }
91
- return {
92
- success: false,
93
- loopId: args.loopId,
94
- previousStatus,
95
- message: `Loop is already ${loop.status}`,
96
- };
97
- }
98
-
99
- // Update status to cancelled
100
- const updatedLoop: CadenceLoop = {
101
- ...loop,
102
- status: 'cancelled',
103
- updatedAt: new Date().toISOString(),
104
- };
105
-
106
- await kv.set(CADENCE_NAMESPACE, key, JSON.stringify(updatedLoop), {
107
- contentType: 'application/json',
108
- });
109
-
110
- if (!options.json) {
111
- tui.success(`Stopped loop ${args.loopId}`);
112
- }
113
-
114
- return {
115
- success: true,
116
- loopId: args.loopId,
117
- previousStatus,
118
- newStatus: 'cancelled',
119
- message: 'Loop cancelled successfully',
120
- };
121
- },
122
- });
123
-
124
- export default stopSubcommand;
@@ -1,86 +0,0 @@
1
- import { KeyValueStorageService, type Logger } from '@agentuity/core';
2
- import { createServerFetchAdapter, getServiceUrls } from '@agentuity/server';
3
- import { getDefaultRegion } from '../../../config';
4
- import type { AuthData, Config } from '../../../types';
5
-
6
- /** KV namespace for Cadence loop state */
7
- export const CADENCE_NAMESPACE = 'agentuity-opencode-tasks';
8
-
9
- /** Prefix for loop state keys */
10
- export const LOOP_KEY_PREFIX = 'loop:';
11
-
12
- export interface CadenceLoop {
13
- loopId: string;
14
- parentId?: string;
15
- projectLabel?: string;
16
- sessionId?: string;
17
- status: 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
18
- iteration: number;
19
- maxIterations: number;
20
- prompt: string;
21
- createdAt: string;
22
- updatedAt: string;
23
- lastError?: string;
24
- sandbox?: {
25
- mode: 'off' | 'per_iteration' | 'persistent';
26
- sandboxId?: string;
27
- };
28
- }
29
-
30
- export interface CadenceContext {
31
- logger: Logger;
32
- config: Config | null;
33
- auth: AuthData;
34
- project?: { region: string };
35
- }
36
-
37
- /**
38
- * Creates a KV storage service for Cadence operations.
39
- */
40
- export async function createCadenceKVAdapter(ctx: CadenceContext): Promise<KeyValueStorageService> {
41
- const adapter = createServerFetchAdapter(
42
- {
43
- headers: {
44
- Authorization: `Bearer ${ctx.auth.apiKey}`,
45
- },
46
- },
47
- ctx.logger
48
- );
49
-
50
- const region = ctx.project?.region || (await getDefaultRegion(ctx.config?.name, ctx.config));
51
- const urls = getServiceUrls(region);
52
- const baseUrl = urls.catalyst;
53
- return new KeyValueStorageService(baseUrl, adapter);
54
- }
55
-
56
- /**
57
- * Gets the state key for a loop.
58
- */
59
- export function getLoopStateKey(loopId: string): string {
60
- return `${LOOP_KEY_PREFIX}${loopId}:state`;
61
- }
62
-
63
- /**
64
- * Parses a loop state from KV storage.
65
- */
66
- export function parseLoopState(data: unknown): CadenceLoop | null {
67
- if (!data || typeof data !== 'object') return null;
68
-
69
- const loop = data as Record<string, unknown>;
70
- if (!loop.loopId || !loop.status || !loop.prompt) return null;
71
-
72
- return {
73
- loopId: String(loop.loopId),
74
- parentId: loop.parentId ? String(loop.parentId) : undefined,
75
- projectLabel: loop.projectLabel ? String(loop.projectLabel) : undefined,
76
- sessionId: loop.sessionId ? String(loop.sessionId) : undefined,
77
- status: loop.status as CadenceLoop['status'],
78
- iteration: Number(loop.iteration) || 1,
79
- maxIterations: Number(loop.maxIterations) || 50,
80
- prompt: String(loop.prompt),
81
- createdAt: String(loop.createdAt),
82
- updatedAt: String(loop.updatedAt),
83
- lastError: loop.lastError ? String(loop.lastError) : undefined,
84
- sandbox: loop.sandbox as CadenceLoop['sandbox'],
85
- };
86
- }