@agentuity/cli 0.1.41 → 0.1.43

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 (247) hide show
  1. package/dist/agent-detection.d.ts.map +1 -1
  2. package/dist/agent-detection.js +8 -2
  3. package/dist/agent-detection.js.map +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +9 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/cmd/ai/index.d.ts.map +1 -1
  8. package/dist/cmd/ai/index.js +1 -8
  9. package/dist/cmd/ai/index.js.map +1 -1
  10. package/dist/cmd/ai/prompt/version.js +1 -1
  11. package/dist/cmd/ai/prompt/version.js.map +1 -1
  12. package/dist/cmd/auth/api.d.ts.map +1 -1
  13. package/dist/cmd/auth/api.js +4 -1
  14. package/dist/cmd/auth/api.js.map +1 -1
  15. package/dist/cmd/auth/ssh/api.js +2 -2
  16. package/dist/cmd/auth/ssh/api.js.map +1 -1
  17. package/dist/cmd/build/ast.d.ts.map +1 -1
  18. package/dist/cmd/build/ast.js +14 -13
  19. package/dist/cmd/build/ast.js.map +1 -1
  20. package/dist/cmd/build/entry-generator.d.ts.map +1 -1
  21. package/dist/cmd/build/entry-generator.js +137 -1
  22. package/dist/cmd/build/entry-generator.js.map +1 -1
  23. package/dist/cmd/build/patch/index.d.ts.map +1 -1
  24. package/dist/cmd/build/patch/index.js +3 -0
  25. package/dist/cmd/build/patch/index.js.map +1 -1
  26. package/dist/cmd/build/vite/index.d.ts +1 -0
  27. package/dist/cmd/build/vite/index.d.ts.map +1 -1
  28. package/dist/cmd/build/vite/index.js +1 -0
  29. package/dist/cmd/build/vite/index.js.map +1 -1
  30. package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
  31. package/dist/cmd/build/vite/metadata-generator.js +19 -9
  32. package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
  33. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts +46 -0
  34. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +1 -0
  35. package/dist/cmd/build/vite/public-asset-path-plugin.js +133 -0
  36. package/dist/cmd/build/vite/public-asset-path-plugin.js.map +1 -0
  37. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  38. package/dist/cmd/build/vite/registry-generator.js +14 -5
  39. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  40. package/dist/cmd/build/vite/route-discovery.js +1 -1
  41. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  42. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  43. package/dist/cmd/build/vite/vite-asset-server-config.js +17 -7
  44. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  45. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
  46. package/dist/cmd/build/vite/vite-asset-server.js +1 -1
  47. package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
  48. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  49. package/dist/cmd/build/vite/vite-builder.js +13 -9
  50. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  51. package/dist/cmd/canary/index.d.ts.map +1 -1
  52. package/dist/cmd/canary/index.js +9 -1
  53. package/dist/cmd/canary/index.js.map +1 -1
  54. package/dist/cmd/cloud/db/create.d.ts.map +1 -1
  55. package/dist/cmd/cloud/db/create.js +2 -2
  56. package/dist/cmd/cloud/db/create.js.map +1 -1
  57. package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
  58. package/dist/cmd/cloud/db/delete.js +2 -2
  59. package/dist/cmd/cloud/db/delete.js.map +1 -1
  60. package/dist/cmd/cloud/env/import.d.ts.map +1 -1
  61. package/dist/cmd/cloud/env/import.js +4 -1
  62. package/dist/cmd/cloud/env/import.js.map +1 -1
  63. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  64. package/dist/cmd/cloud/env/list.js +4 -1
  65. package/dist/cmd/cloud/env/list.js.map +1 -1
  66. package/dist/cmd/cloud/env/push.d.ts.map +1 -1
  67. package/dist/cmd/cloud/env/push.js +4 -1
  68. package/dist/cmd/cloud/env/push.js.map +1 -1
  69. package/dist/cmd/cloud/region/index.js +1 -1
  70. package/dist/cmd/cloud/region/index.js.map +1 -1
  71. package/dist/cmd/cloud/sandbox/snapshot/build.d.ts.map +1 -1
  72. package/dist/cmd/cloud/sandbox/snapshot/build.js +22 -10
  73. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  74. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -1
  75. package/dist/cmd/cloud/sandbox/snapshot/get.js +12 -2
  76. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  77. package/dist/cmd/cloud/storage/create.d.ts.map +1 -1
  78. package/dist/cmd/cloud/storage/create.js +2 -2
  79. package/dist/cmd/cloud/storage/create.js.map +1 -1
  80. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
  81. package/dist/cmd/cloud/storage/delete.js +2 -2
  82. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  83. package/dist/cmd/dev/download.d.ts.map +1 -1
  84. package/dist/cmd/dev/download.js +9 -2
  85. package/dist/cmd/dev/download.js.map +1 -1
  86. package/dist/cmd/dev/index.js +1 -1
  87. package/dist/cmd/dev/index.js.map +1 -1
  88. package/dist/cmd/git/account/add.d.ts.map +1 -1
  89. package/dist/cmd/git/account/add.js +4 -3
  90. package/dist/cmd/git/account/add.js.map +1 -1
  91. package/dist/cmd/git/link.js +2 -2
  92. package/dist/cmd/git/link.js.map +1 -1
  93. package/dist/cmd/git/list.d.ts.map +1 -1
  94. package/dist/cmd/git/list.js +3 -2
  95. package/dist/cmd/git/list.js.map +1 -1
  96. package/dist/cmd/project/auth/init.js +1 -1
  97. package/dist/cmd/project/auth/init.js.map +1 -1
  98. package/dist/cmd/project/auth/shared.d.ts.map +1 -1
  99. package/dist/cmd/project/auth/shared.js +8 -3
  100. package/dist/cmd/project/auth/shared.js.map +1 -1
  101. package/dist/cmd/project/delete.d.ts.map +1 -1
  102. package/dist/cmd/project/delete.js +3 -2
  103. package/dist/cmd/project/delete.js.map +1 -1
  104. package/dist/cmd/project/reconcile.d.ts.map +1 -1
  105. package/dist/cmd/project/reconcile.js +9 -5
  106. package/dist/cmd/project/reconcile.js.map +1 -1
  107. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  108. package/dist/cmd/project/template-flow.js +15 -5
  109. package/dist/cmd/project/template-flow.js.map +1 -1
  110. package/dist/cmd/support/report.d.ts.map +1 -1
  111. package/dist/cmd/support/report.js +58 -23
  112. package/dist/cmd/support/report.js.map +1 -1
  113. package/dist/config.d.ts.map +1 -1
  114. package/dist/config.js +3 -2
  115. package/dist/config.js.map +1 -1
  116. package/dist/domain.d.ts.map +1 -1
  117. package/dist/domain.js +4 -3
  118. package/dist/domain.js.map +1 -1
  119. package/dist/internal-logger.d.ts +7 -0
  120. package/dist/internal-logger.d.ts.map +1 -1
  121. package/dist/internal-logger.js +82 -27
  122. package/dist/internal-logger.js.map +1 -1
  123. package/dist/repl.d.ts.map +1 -1
  124. package/dist/repl.js +31 -14
  125. package/dist/repl.js.map +1 -1
  126. package/dist/schema-parser.d.ts.map +1 -1
  127. package/dist/schema-parser.js +4 -1
  128. package/dist/schema-parser.js.map +1 -1
  129. package/dist/sound.d.ts.map +1 -1
  130. package/dist/sound.js +2 -1
  131. package/dist/sound.js.map +1 -1
  132. package/dist/steps.d.ts.map +1 -1
  133. package/dist/steps.js +13 -6
  134. package/dist/steps.js.map +1 -1
  135. package/dist/terminal.js +2 -0
  136. package/dist/terminal.js.map +1 -1
  137. package/dist/tsc-output-parser.d.ts +3 -0
  138. package/dist/tsc-output-parser.d.ts.map +1 -1
  139. package/dist/tsc-output-parser.js +32 -9
  140. package/dist/tsc-output-parser.js.map +1 -1
  141. package/dist/tui/prompt.d.ts.map +1 -1
  142. package/dist/tui/prompt.js +6 -2
  143. package/dist/tui/prompt.js.map +1 -1
  144. package/dist/tui.d.ts.map +1 -1
  145. package/dist/tui.js +26 -15
  146. package/dist/tui.js.map +1 -1
  147. package/dist/typescript-errors.d.ts.map +1 -1
  148. package/dist/typescript-errors.js +5 -2
  149. package/dist/typescript-errors.js.map +1 -1
  150. package/dist/utils/date.d.ts.map +1 -1
  151. package/dist/utils/date.js +5 -1
  152. package/dist/utils/date.js.map +1 -1
  153. package/dist/utils/deps.d.ts.map +1 -1
  154. package/dist/utils/deps.js +5 -3
  155. package/dist/utils/deps.js.map +1 -1
  156. package/dist/utils/detectSubagent.js +1 -1
  157. package/dist/utils/detectSubagent.js.map +1 -1
  158. package/package.json +8 -7
  159. package/src/agent-detection.ts +9 -2
  160. package/src/cli.ts +9 -5
  161. package/src/cmd/ai/index.ts +1 -8
  162. package/src/cmd/ai/prompt/version.ts +1 -1
  163. package/src/cmd/auth/api.ts +4 -1
  164. package/src/cmd/auth/ssh/api.ts +2 -2
  165. package/src/cmd/build/ast.ts +14 -13
  166. package/src/cmd/build/entry-generator.ts +137 -1
  167. package/src/cmd/build/patch/index.ts +3 -0
  168. package/src/cmd/build/vite/index.ts +1 -0
  169. package/src/cmd/build/vite/metadata-generator.ts +20 -9
  170. package/src/cmd/build/vite/public-asset-path-plugin.ts +167 -0
  171. package/src/cmd/build/vite/registry-generator.ts +14 -5
  172. package/src/cmd/build/vite/route-discovery.ts +1 -1
  173. package/src/cmd/build/vite/vite-asset-server-config.ts +19 -9
  174. package/src/cmd/build/vite/vite-asset-server.ts +3 -1
  175. package/src/cmd/build/vite/vite-builder.ts +22 -18
  176. package/src/cmd/canary/index.ts +9 -1
  177. package/src/cmd/cloud/db/create.ts +16 -17
  178. package/src/cmd/cloud/db/delete.ts +19 -20
  179. package/src/cmd/cloud/env/import.ts +6 -3
  180. package/src/cmd/cloud/env/list.ts +11 -9
  181. package/src/cmd/cloud/env/push.ts +6 -3
  182. package/src/cmd/cloud/region/index.ts +3 -3
  183. package/src/cmd/cloud/sandbox/snapshot/build.ts +42 -33
  184. package/src/cmd/cloud/sandbox/snapshot/get.ts +21 -15
  185. package/src/cmd/cloud/storage/create.ts +16 -17
  186. package/src/cmd/cloud/storage/delete.ts +19 -20
  187. package/src/cmd/dev/download.ts +10 -2
  188. package/src/cmd/dev/index.ts +4 -4
  189. package/src/cmd/git/account/add.ts +5 -4
  190. package/src/cmd/git/link.ts +2 -2
  191. package/src/cmd/git/list.ts +7 -6
  192. package/src/cmd/project/auth/init.ts +6 -6
  193. package/src/cmd/project/auth/shared.ts +8 -3
  194. package/src/cmd/project/delete.ts +3 -2
  195. package/src/cmd/project/reconcile.ts +9 -5
  196. package/src/cmd/project/template-flow.ts +15 -5
  197. package/src/cmd/support/report.ts +82 -28
  198. package/src/config.ts +3 -2
  199. package/src/domain.ts +4 -3
  200. package/src/internal-logger.ts +91 -26
  201. package/src/repl.ts +27 -14
  202. package/src/schema-parser.ts +4 -1
  203. package/src/sound.ts +2 -1
  204. package/src/steps.ts +11 -6
  205. package/src/terminal.ts +2 -1
  206. package/src/tsc-output-parser.ts +61 -38
  207. package/src/tui/prompt.ts +6 -2
  208. package/src/tui.ts +26 -17
  209. package/src/typescript-errors.ts +5 -2
  210. package/src/utils/date.ts +5 -1
  211. package/src/utils/deps.ts +5 -3
  212. package/src/utils/detectSubagent.ts +1 -1
  213. package/dist/cmd/ai/cadence/index.d.ts +0 -3
  214. package/dist/cmd/ai/cadence/index.d.ts.map +0 -1
  215. package/dist/cmd/ai/cadence/index.js +0 -35
  216. package/dist/cmd/ai/cadence/index.js.map +0 -1
  217. package/dist/cmd/ai/cadence/list.d.ts +0 -3
  218. package/dist/cmd/ai/cadence/list.d.ts.map +0 -1
  219. package/dist/cmd/ai/cadence/list.js +0 -167
  220. package/dist/cmd/ai/cadence/list.js.map +0 -1
  221. package/dist/cmd/ai/cadence/pause.d.ts +0 -3
  222. package/dist/cmd/ai/cadence/pause.d.ts.map +0 -1
  223. package/dist/cmd/ai/cadence/pause.js +0 -103
  224. package/dist/cmd/ai/cadence/pause.js.map +0 -1
  225. package/dist/cmd/ai/cadence/resume.d.ts +0 -3
  226. package/dist/cmd/ai/cadence/resume.d.ts.map +0 -1
  227. package/dist/cmd/ai/cadence/resume.js +0 -106
  228. package/dist/cmd/ai/cadence/resume.js.map +0 -1
  229. package/dist/cmd/ai/cadence/status.d.ts +0 -3
  230. package/dist/cmd/ai/cadence/status.d.ts.map +0 -1
  231. package/dist/cmd/ai/cadence/status.js +0 -129
  232. package/dist/cmd/ai/cadence/status.js.map +0 -1
  233. package/dist/cmd/ai/cadence/stop.d.ts +0 -3
  234. package/dist/cmd/ai/cadence/stop.d.ts.map +0 -1
  235. package/dist/cmd/ai/cadence/stop.js +0 -107
  236. package/dist/cmd/ai/cadence/stop.js.map +0 -1
  237. package/dist/cmd/ai/cadence/util.d.ts +0 -44
  238. package/dist/cmd/ai/cadence/util.d.ts.map +0 -1
  239. package/dist/cmd/ai/cadence/util.js +0 -52
  240. package/dist/cmd/ai/cadence/util.js.map +0 -1
  241. package/src/cmd/ai/cadence/index.ts +0 -36
  242. package/src/cmd/ai/cadence/list.ts +0 -183
  243. package/src/cmd/ai/cadence/pause.ts +0 -119
  244. package/src/cmd/ai/cadence/resume.ts +0 -124
  245. package/src/cmd/ai/cadence/status.ts +0 -141
  246. package/src/cmd/ai/cadence/stop.ts +0 -124
  247. package/src/cmd/ai/cadence/util.ts +0 -86
@@ -1,107 +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
- const CadenceStopResponseSchema = z.object({
7
- success: z.boolean(),
8
- loopId: z.string(),
9
- previousStatus: z.string().optional(),
10
- newStatus: z.string().optional(),
11
- message: z.string(),
12
- });
13
- export const stopSubcommand = createCommand({
14
- name: 'stop',
15
- aliases: ['cancel'],
16
- description: 'Stop and cancel a Cadence loop',
17
- tags: ['mutating', 'updates-resource', 'fast', 'requires-auth'],
18
- requires: { auth: true },
19
- examples: [
20
- { command: getCommand('cadence stop lp_auth_impl'), description: 'Stop and cancel a loop' },
21
- ],
22
- schema: {
23
- args: z.object({
24
- loopId: z.string().min(1).describe('The loop ID to stop'),
25
- }),
26
- response: CadenceStopResponseSchema,
27
- },
28
- async handler(ctx) {
29
- const { args, options } = ctx;
30
- const kv = await createCadenceKVAdapter(ctx);
31
- const key = getLoopStateKey(args.loopId);
32
- const result = await kv.get(CADENCE_NAMESPACE, key);
33
- if (!result.exists || !result.data) {
34
- if (!options.json) {
35
- tui.error(`Loop ${args.loopId} not found.`);
36
- }
37
- return {
38
- success: false,
39
- loopId: args.loopId,
40
- message: 'Loop not found',
41
- };
42
- }
43
- let data;
44
- if (typeof result.data === 'string') {
45
- try {
46
- data = JSON.parse(result.data);
47
- }
48
- catch {
49
- if (!options.json) {
50
- tui.error(`Failed to parse loop state for ${args.loopId}`);
51
- }
52
- return {
53
- success: false,
54
- loopId: args.loopId,
55
- message: 'Failed to parse loop state',
56
- };
57
- }
58
- }
59
- else {
60
- data = result.data;
61
- }
62
- const loop = parseLoopState(data);
63
- if (!loop) {
64
- if (!options.json) {
65
- tui.error(`Invalid loop state for ${args.loopId}`);
66
- }
67
- return {
68
- success: false,
69
- loopId: args.loopId,
70
- message: 'Invalid loop state',
71
- };
72
- }
73
- const previousStatus = loop.status;
74
- if (loop.status === 'completed' || loop.status === 'cancelled') {
75
- if (!options.json) {
76
- tui.warning(`Loop ${args.loopId} is already ${loop.status}`);
77
- }
78
- return {
79
- success: false,
80
- loopId: args.loopId,
81
- previousStatus,
82
- message: `Loop is already ${loop.status}`,
83
- };
84
- }
85
- // Update status to cancelled
86
- const updatedLoop = {
87
- ...loop,
88
- status: 'cancelled',
89
- updatedAt: new Date().toISOString(),
90
- };
91
- await kv.set(CADENCE_NAMESPACE, key, JSON.stringify(updatedLoop), {
92
- contentType: 'application/json',
93
- });
94
- if (!options.json) {
95
- tui.success(`Stopped loop ${args.loopId}`);
96
- }
97
- return {
98
- success: true,
99
- loopId: args.loopId,
100
- previousStatus,
101
- newStatus: 'cancelled',
102
- message: 'Loop cancelled successfully',
103
- };
104
- },
105
- });
106
- export default stopSubcommand;
107
- //# sourceMappingURL=stop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../src/cmd/ai/cadence/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,cAAc,GAEd,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,WAAW,EAAE,gCAAgC;IAC7C,IAAI,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,CAAC;IAC/D,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACxB,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,2BAA2B,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE;KAC3F;IACD,MAAM,EAAE;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SACzD,CAAC;QACF,QAAQ,EAAE,yBAAyB;KACnC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAE7C,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnB,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,gBAAgB;aACzB,CAAC;QACH,CAAC;QAED,IAAI,IAAa,CAAC;QAClB,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC;gBACJ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACR,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACnB,GAAG,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,4BAA4B;iBACrC,CAAC;YACH,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACpB,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnB,GAAG,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,oBAAoB;aAC7B,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;QAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnB,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,MAAM,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,cAAc;gBACd,OAAO,EAAE,mBAAmB,IAAI,CAAC,MAAM,EAAE;aACzC,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,WAAW,GAAgB;YAChC,GAAG,IAAI;YACP,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;QAEF,MAAM,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;YACjE,WAAW,EAAE,kBAAkB;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,cAAc;YACd,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,6BAA6B;SACtC,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -1,44 +0,0 @@
1
- import { KeyValueStorageService, type Logger } from '@agentuity/core';
2
- import type { AuthData, Config } from '../../../types';
3
- /** KV namespace for Cadence loop state */
4
- export declare const CADENCE_NAMESPACE = "agentuity-opencode-tasks";
5
- /** Prefix for loop state keys */
6
- export declare const LOOP_KEY_PREFIX = "loop:";
7
- export interface CadenceLoop {
8
- loopId: string;
9
- parentId?: string;
10
- projectLabel?: string;
11
- sessionId?: string;
12
- status: 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
13
- iteration: number;
14
- maxIterations: number;
15
- prompt: string;
16
- createdAt: string;
17
- updatedAt: string;
18
- lastError?: string;
19
- sandbox?: {
20
- mode: 'off' | 'per_iteration' | 'persistent';
21
- sandboxId?: string;
22
- };
23
- }
24
- export interface CadenceContext {
25
- logger: Logger;
26
- config: Config | null;
27
- auth: AuthData;
28
- project?: {
29
- region: string;
30
- };
31
- }
32
- /**
33
- * Creates a KV storage service for Cadence operations.
34
- */
35
- export declare function createCadenceKVAdapter(ctx: CadenceContext): Promise<KeyValueStorageService>;
36
- /**
37
- * Gets the state key for a loop.
38
- */
39
- export declare function getLoopStateKey(loopId: string): string;
40
- /**
41
- * Parses a loop state from KV storage.
42
- */
43
- export declare function parseLoopState(data: unknown): CadenceLoop | null;
44
- //# sourceMappingURL=util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/cadence/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEvD,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,iCAAiC;AACjC,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACT,IAAI,EAAE,KAAK,GAAG,eAAe,GAAG,YAAY,CAAC;QAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACF;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAcjG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAoBhE"}
@@ -1,52 +0,0 @@
1
- import { KeyValueStorageService } from '@agentuity/core';
2
- import { createServerFetchAdapter, getServiceUrls } from '@agentuity/server';
3
- import { getDefaultRegion } from '../../../config';
4
- /** KV namespace for Cadence loop state */
5
- export const CADENCE_NAMESPACE = 'agentuity-opencode-tasks';
6
- /** Prefix for loop state keys */
7
- export const LOOP_KEY_PREFIX = 'loop:';
8
- /**
9
- * Creates a KV storage service for Cadence operations.
10
- */
11
- export async function createCadenceKVAdapter(ctx) {
12
- const adapter = createServerFetchAdapter({
13
- headers: {
14
- Authorization: `Bearer ${ctx.auth.apiKey}`,
15
- },
16
- }, ctx.logger);
17
- const region = ctx.project?.region || (await getDefaultRegion(ctx.config?.name, ctx.config));
18
- const urls = getServiceUrls(region);
19
- const baseUrl = urls.catalyst;
20
- return new KeyValueStorageService(baseUrl, adapter);
21
- }
22
- /**
23
- * Gets the state key for a loop.
24
- */
25
- export function getLoopStateKey(loopId) {
26
- return `${LOOP_KEY_PREFIX}${loopId}:state`;
27
- }
28
- /**
29
- * Parses a loop state from KV storage.
30
- */
31
- export function parseLoopState(data) {
32
- if (!data || typeof data !== 'object')
33
- return null;
34
- const loop = data;
35
- if (!loop.loopId || !loop.status || !loop.prompt)
36
- return null;
37
- return {
38
- loopId: String(loop.loopId),
39
- parentId: loop.parentId ? String(loop.parentId) : undefined,
40
- projectLabel: loop.projectLabel ? String(loop.projectLabel) : undefined,
41
- sessionId: loop.sessionId ? String(loop.sessionId) : undefined,
42
- status: loop.status,
43
- iteration: Number(loop.iteration) || 1,
44
- maxIterations: Number(loop.maxIterations) || 50,
45
- prompt: String(loop.prompt),
46
- createdAt: String(loop.createdAt),
47
- updatedAt: String(loop.updatedAt),
48
- lastError: loop.lastError ? String(loop.lastError) : undefined,
49
- sandbox: loop.sandbox,
50
- };
51
- }
52
- //# sourceMappingURL=util.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/cmd/ai/cadence/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAe,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE5D,iCAAiC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AA2BvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAAmB;IAC/D,MAAM,OAAO,GAAG,wBAAwB,CACvC;QACC,OAAO,EAAE;YACR,aAAa,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;SAC1C;KACD,EACD,GAAG,CAAC,MAAM,CACV,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC9B,OAAO,IAAI,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC7C,OAAO,GAAG,eAAe,GAAG,MAAM,QAAQ,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEnD,MAAM,IAAI,GAAG,IAA+B,CAAC;IAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE9D,OAAO;QACN,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3D,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9D,MAAM,EAAE,IAAI,CAAC,MAA+B;QAC5C,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACtC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QAC/C,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9D,OAAO,EAAE,IAAI,CAAC,OAAiC;KAC/C,CAAC;AACH,CAAC"}
@@ -1,36 +0,0 @@
1
- import { createCommand } from '../../../types';
2
- import { listSubcommand } from './list';
3
- import { statusSubcommand } from './status';
4
- import { pauseSubcommand } from './pause';
5
- import { resumeSubcommand } from './resume';
6
- import { stopSubcommand } from './stop';
7
- import { getCommand } from '../../../command-prefix';
8
-
9
- export const command = createCommand({
10
- name: 'cadence',
11
- description: 'Manage long-running Cadence loops for Open Code',
12
- tags: ['fast', 'requires-auth'],
13
- examples: [
14
- { command: getCommand('ai cadence list'), description: 'List all Cadence loops' },
15
- { command: getCommand('ai cadence status lp_auth_impl'), description: 'Get loop status' },
16
- { command: getCommand('ai cadence pause lp_auth_impl'), description: 'Pause a running loop' },
17
- {
18
- command: getCommand('ai cadence resume lp_auth_impl'),
19
- description: 'Resume a paused loop',
20
- },
21
- {
22
- command: getCommand('ai cadence stop lp_auth_impl'),
23
- description: 'Stop and cancel a loop',
24
- },
25
- ],
26
- subcommands: [
27
- listSubcommand,
28
- statusSubcommand,
29
- pauseSubcommand,
30
- resumeSubcommand,
31
- stopSubcommand,
32
- ],
33
- requires: { auth: true },
34
- });
35
-
36
- export default command;
@@ -1,183 +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
- LOOP_KEY_PREFIX,
8
- parseLoopState,
9
- type CadenceLoop,
10
- } from './util';
11
- import { getCommand } from '../../../command-prefix';
12
-
13
- const CadenceListResponseSchema = z.object({
14
- loops: z.array(
15
- z.object({
16
- loopId: z.string(),
17
- status: z.string(),
18
- iteration: z.number(),
19
- maxIterations: z.number(),
20
- prompt: z.string(),
21
- projectLabel: z.string().optional(),
22
- updatedAt: z.string(),
23
- })
24
- ),
25
- count: z.number(),
26
- });
27
-
28
- export const listSubcommand = createCommand({
29
- name: 'list',
30
- aliases: ['ls'],
31
- description: 'List active Cadence loops',
32
- tags: ['read-only', 'fast', 'requires-auth'],
33
- requires: { auth: true },
34
- examples: [
35
- { command: getCommand('cadence list'), description: 'List all Cadence loops' },
36
- {
37
- command: getCommand('cadence list --project github.com/org/repo'),
38
- description: 'List loops for a specific project',
39
- },
40
- ],
41
- schema: {
42
- args: z.object({
43
- project: z.string().optional().describe('Filter by project label'),
44
- }),
45
- response: CadenceListResponseSchema,
46
- },
47
- idempotent: true,
48
-
49
- async handler(ctx) {
50
- const { args, options } = ctx;
51
- const kv = await createCadenceKVAdapter(ctx);
52
-
53
- // Search for loop keys - returns Record<key, item>
54
- const searchResult = await kv.search(CADENCE_NAMESPACE, LOOP_KEY_PREFIX);
55
- const allKeys = Object.keys(searchResult);
56
- const keys = allKeys.filter((k) => k.endsWith(':state'));
57
-
58
- const loops: CadenceLoop[] = [];
59
-
60
- // Fetch each loop's state from the search result or individually
61
- for (const key of keys) {
62
- const item = searchResult[key];
63
- let data: unknown;
64
-
65
- if (item && item.value) {
66
- // Use value from search result
67
- if (typeof item.value === 'string') {
68
- try {
69
- data = JSON.parse(item.value);
70
- } catch {
71
- continue;
72
- }
73
- } else {
74
- data = item.value;
75
- }
76
- } else {
77
- // Fallback to individual get
78
- const result = await kv.get(CADENCE_NAMESPACE, key);
79
- if (!result.exists || !result.data) continue;
80
-
81
- if (typeof result.data === 'string') {
82
- try {
83
- data = JSON.parse(result.data);
84
- } catch {
85
- continue;
86
- }
87
- } else {
88
- data = result.data;
89
- }
90
- }
91
-
92
- const loop = parseLoopState(data);
93
- if (loop) {
94
- // Filter by project if specified
95
- if (args.project && loop.projectLabel !== args.project) {
96
- continue;
97
- }
98
- loops.push(loop);
99
- }
100
- }
101
-
102
- // Sort by updatedAt descending
103
- loops.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
104
-
105
- if (!options.json) {
106
- if (loops.length === 0) {
107
- tui.info('No active Cadence loops found.');
108
- } else {
109
- console.log();
110
- tui.info(`Found ${loops.length} Cadence loop(s):`);
111
- console.log();
112
-
113
- const tableData = loops.map((loop) => ({
114
- 'Loop ID': loop.loopId,
115
- Status: formatStatus(loop.status),
116
- Iteration: `${loop.iteration}/${loop.maxIterations}`,
117
- Task: truncate(loop.prompt, 40),
118
- Project: loop.projectLabel ?? '-',
119
- Updated: formatDate(loop.updatedAt),
120
- }));
121
-
122
- tui.table(tableData);
123
- }
124
- }
125
-
126
- return {
127
- loops: loops.map((loop) => ({
128
- loopId: loop.loopId,
129
- status: loop.status,
130
- iteration: loop.iteration,
131
- maxIterations: loop.maxIterations,
132
- prompt: loop.prompt,
133
- projectLabel: loop.projectLabel,
134
- updatedAt: loop.updatedAt,
135
- })),
136
- count: loops.length,
137
- };
138
- },
139
- });
140
-
141
- function formatStatus(status: string): string {
142
- switch (status) {
143
- case 'running':
144
- return tui.colorSuccess('running');
145
- case 'paused':
146
- return tui.colorWarning('paused');
147
- case 'completed':
148
- return tui.colorSuccess('completed');
149
- case 'failed':
150
- return tui.colorError('failed');
151
- case 'cancelled':
152
- return tui.muted('cancelled');
153
- default:
154
- return status;
155
- }
156
- }
157
-
158
- function truncate(str: string, maxLen: number): string {
159
- if (str.length <= maxLen) return str;
160
- return str.substring(0, maxLen - 3) + '...';
161
- }
162
-
163
- function formatDate(isoDate: string): string {
164
- try {
165
- const date = new Date(isoDate);
166
- const now = new Date();
167
- const diffMs = now.getTime() - date.getTime();
168
- const diffMins = Math.floor(diffMs / 60000);
169
-
170
- if (diffMins < 1) return 'just now';
171
- if (diffMins < 60) return `${diffMins}m ago`;
172
-
173
- const diffHours = Math.floor(diffMins / 60);
174
- if (diffHours < 24) return `${diffHours}h ago`;
175
-
176
- const diffDays = Math.floor(diffHours / 24);
177
- return `${diffDays}d ago`;
178
- } catch {
179
- return isoDate;
180
- }
181
- }
182
-
183
- export default listSubcommand;
@@ -1,119 +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 CadencePauseResponseSchema = 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 pauseSubcommand = createCommand({
22
- name: 'pause',
23
- description: 'Pause a running Cadence loop',
24
- tags: ['mutating', 'updates-resource', 'fast', 'requires-auth'],
25
- requires: { auth: true },
26
- examples: [{ command: getCommand('cadence pause lp_auth_impl'), description: 'Pause a loop' }],
27
- schema: {
28
- args: z.object({
29
- loopId: z.string().min(1).describe('The loop ID to pause'),
30
- }),
31
- response: CadencePauseResponseSchema,
32
- },
33
-
34
- async handler(ctx) {
35
- const { args, options } = ctx;
36
- const kv = await createCadenceKVAdapter(ctx);
37
-
38
- const key = getLoopStateKey(args.loopId);
39
- const result = await kv.get(CADENCE_NAMESPACE, key);
40
-
41
- if (!result.exists || !result.data) {
42
- if (!options.json) {
43
- tui.error(`Loop ${args.loopId} not found.`);
44
- }
45
- return {
46
- success: false,
47
- loopId: args.loopId,
48
- message: 'Loop not found',
49
- };
50
- }
51
-
52
- let data: unknown;
53
- if (typeof result.data === 'string') {
54
- try {
55
- data = JSON.parse(result.data);
56
- } catch {
57
- if (!options.json) {
58
- tui.error(`Failed to parse loop state for ${args.loopId}`);
59
- }
60
- return {
61
- success: false,
62
- loopId: args.loopId,
63
- message: 'Failed to parse loop state',
64
- };
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 {
76
- success: false,
77
- loopId: args.loopId,
78
- message: 'Invalid loop state',
79
- };
80
- }
81
-
82
- if (loop.status !== 'running') {
83
- if (!options.json) {
84
- tui.warning(`Loop ${args.loopId} is not running (status: ${loop.status})`);
85
- }
86
- return {
87
- success: false,
88
- loopId: args.loopId,
89
- previousStatus: loop.status,
90
- message: `Cannot pause loop with status: ${loop.status}`,
91
- };
92
- }
93
-
94
- // Update status to paused
95
- const updatedLoop: CadenceLoop = {
96
- ...loop,
97
- status: 'paused',
98
- updatedAt: new Date().toISOString(),
99
- };
100
-
101
- await kv.set(CADENCE_NAMESPACE, key, JSON.stringify(updatedLoop), {
102
- contentType: 'application/json',
103
- });
104
-
105
- if (!options.json) {
106
- tui.success(`Paused loop ${args.loopId}`);
107
- }
108
-
109
- return {
110
- success: true,
111
- loopId: args.loopId,
112
- previousStatus: 'running',
113
- newStatus: 'paused',
114
- message: 'Loop paused successfully',
115
- };
116
- },
117
- });
118
-
119
- export default pauseSubcommand;
@@ -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;