@agentuity/cli 2.0.6 → 2.0.8

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 (201) hide show
  1. package/README.md +11 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +4 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
  6. package/dist/cmd/build/vite/route-discovery.js +6 -0
  7. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  8. package/dist/cmd/cloud/sandbox/fs/rm.d.ts.map +1 -1
  9. package/dist/cmd/cloud/sandbox/fs/rm.js +9 -3
  10. package/dist/cmd/cloud/sandbox/fs/rm.js.map +1 -1
  11. package/dist/cmd/cloud/sandbox/fs/rmdir.d.ts.map +1 -1
  12. package/dist/cmd/cloud/sandbox/fs/rmdir.js +9 -3
  13. package/dist/cmd/cloud/sandbox/fs/rmdir.js.map +1 -1
  14. package/dist/cmd/cloud/task/close.d.ts +3 -0
  15. package/dist/cmd/cloud/task/close.d.ts.map +1 -0
  16. package/dist/cmd/cloud/task/close.js +286 -0
  17. package/dist/cmd/cloud/task/close.js.map +1 -0
  18. package/dist/cmd/cloud/task/delete.d.ts +1 -5
  19. package/dist/cmd/cloud/task/delete.d.ts.map +1 -1
  20. package/dist/cmd/cloud/task/delete.js +15 -38
  21. package/dist/cmd/cloud/task/delete.js.map +1 -1
  22. package/dist/cmd/cloud/task/index.d.ts.map +1 -1
  23. package/dist/cmd/cloud/task/index.js +10 -0
  24. package/dist/cmd/cloud/task/index.js.map +1 -1
  25. package/dist/cmd/cloud/task/list.d.ts.map +1 -1
  26. package/dist/cmd/cloud/task/list.js +97 -3
  27. package/dist/cmd/cloud/task/list.js.map +1 -1
  28. package/dist/cmd/cloud/task/util.d.ts +10 -0
  29. package/dist/cmd/cloud/task/util.d.ts.map +1 -1
  30. package/dist/cmd/cloud/task/util.js +47 -3
  31. package/dist/cmd/cloud/task/util.js.map +1 -1
  32. package/dist/cmd/coder/archive.d.ts +2 -0
  33. package/dist/cmd/coder/archive.d.ts.map +1 -0
  34. package/dist/cmd/coder/archive.js +57 -0
  35. package/dist/cmd/coder/archive.js.map +1 -0
  36. package/dist/cmd/coder/create.d.ts +2 -0
  37. package/dist/cmd/coder/create.d.ts.map +1 -0
  38. package/dist/cmd/coder/create.js +245 -0
  39. package/dist/cmd/coder/create.js.map +1 -0
  40. package/dist/cmd/coder/delete.d.ts +2 -0
  41. package/dist/cmd/coder/delete.d.ts.map +1 -0
  42. package/dist/cmd/coder/delete.js +64 -0
  43. package/dist/cmd/coder/delete.js.map +1 -0
  44. package/dist/cmd/coder/events.d.ts +2 -0
  45. package/dist/cmd/coder/events.d.ts.map +1 -0
  46. package/dist/cmd/coder/events.js +99 -0
  47. package/dist/cmd/coder/events.js.map +1 -0
  48. package/dist/cmd/coder/extension-path.d.ts +8 -0
  49. package/dist/cmd/coder/extension-path.d.ts.map +1 -0
  50. package/dist/cmd/coder/extension-path.js +59 -0
  51. package/dist/cmd/coder/extension-path.js.map +1 -0
  52. package/dist/cmd/coder/get.d.ts +2 -0
  53. package/dist/cmd/coder/get.d.ts.map +1 -0
  54. package/dist/cmd/coder/{inspect.js → get.js} +37 -33
  55. package/dist/cmd/coder/get.js.map +1 -0
  56. package/dist/cmd/coder/index.d.ts.map +1 -1
  57. package/dist/cmd/coder/index.js +54 -4
  58. package/dist/cmd/coder/index.js.map +1 -1
  59. package/dist/cmd/coder/list.d.ts.map +1 -1
  60. package/dist/cmd/coder/list.js +25 -34
  61. package/dist/cmd/coder/list.js.map +1 -1
  62. package/dist/cmd/coder/loop.d.ts +2 -0
  63. package/dist/cmd/coder/loop.d.ts.map +1 -0
  64. package/dist/cmd/coder/loop.js +78 -0
  65. package/dist/cmd/coder/loop.js.map +1 -0
  66. package/dist/cmd/coder/participants.d.ts +2 -0
  67. package/dist/cmd/coder/participants.d.ts.map +1 -0
  68. package/dist/cmd/coder/participants.js +93 -0
  69. package/dist/cmd/coder/participants.js.map +1 -0
  70. package/dist/cmd/coder/replay.d.ts +2 -0
  71. package/dist/cmd/coder/replay.d.ts.map +1 -0
  72. package/dist/cmd/coder/replay.js +53 -0
  73. package/dist/cmd/coder/replay.js.map +1 -0
  74. package/dist/cmd/coder/resolve-repo.d.ts +27 -0
  75. package/dist/cmd/coder/resolve-repo.d.ts.map +1 -0
  76. package/dist/cmd/coder/resolve-repo.js +97 -0
  77. package/dist/cmd/coder/resolve-repo.js.map +1 -0
  78. package/dist/cmd/coder/skill/buckets.d.ts +2 -0
  79. package/dist/cmd/coder/skill/buckets.d.ts.map +1 -0
  80. package/dist/cmd/coder/skill/buckets.js +174 -0
  81. package/dist/cmd/coder/skill/buckets.js.map +1 -0
  82. package/dist/cmd/coder/skill/delete.d.ts +2 -0
  83. package/dist/cmd/coder/skill/delete.d.ts.map +1 -0
  84. package/dist/cmd/coder/skill/delete.js +64 -0
  85. package/dist/cmd/coder/skill/delete.js.map +1 -0
  86. package/dist/cmd/coder/skill/index.d.ts +2 -0
  87. package/dist/cmd/coder/skill/index.d.ts.map +1 -0
  88. package/dist/cmd/coder/skill/index.js +33 -0
  89. package/dist/cmd/coder/skill/index.js.map +1 -0
  90. package/dist/cmd/coder/skill/list.d.ts +2 -0
  91. package/dist/cmd/coder/skill/list.d.ts.map +1 -0
  92. package/dist/cmd/coder/skill/list.js +93 -0
  93. package/dist/cmd/coder/skill/list.js.map +1 -0
  94. package/dist/cmd/coder/skill/save.d.ts +2 -0
  95. package/dist/cmd/coder/skill/save.d.ts.map +1 -0
  96. package/dist/cmd/coder/skill/save.js +77 -0
  97. package/dist/cmd/coder/skill/save.js.map +1 -0
  98. package/dist/cmd/coder/start.d.ts.map +1 -1
  99. package/dist/cmd/coder/start.js +88 -117
  100. package/dist/cmd/coder/start.js.map +1 -1
  101. package/dist/cmd/coder/tui-init.d.ts +4 -1
  102. package/dist/cmd/coder/tui-init.d.ts.map +1 -1
  103. package/dist/cmd/coder/tui-init.js +9 -3
  104. package/dist/cmd/coder/tui-init.js.map +1 -1
  105. package/dist/cmd/coder/update.d.ts +2 -0
  106. package/dist/cmd/coder/update.d.ts.map +1 -0
  107. package/dist/cmd/coder/update.js +126 -0
  108. package/dist/cmd/coder/update.js.map +1 -0
  109. package/dist/cmd/coder/users.d.ts +2 -0
  110. package/dist/cmd/coder/users.d.ts.map +1 -0
  111. package/dist/cmd/coder/users.js +97 -0
  112. package/dist/cmd/coder/users.js.map +1 -0
  113. package/dist/cmd/coder/workspace/create.d.ts +2 -0
  114. package/dist/cmd/coder/workspace/create.d.ts.map +1 -0
  115. package/dist/cmd/coder/workspace/create.js +97 -0
  116. package/dist/cmd/coder/workspace/create.js.map +1 -0
  117. package/dist/cmd/coder/workspace/delete.d.ts +2 -0
  118. package/dist/cmd/coder/workspace/delete.d.ts.map +1 -0
  119. package/dist/cmd/coder/workspace/delete.js +64 -0
  120. package/dist/cmd/coder/workspace/delete.js.map +1 -0
  121. package/dist/cmd/coder/workspace/get.d.ts +2 -0
  122. package/dist/cmd/coder/workspace/get.d.ts.map +1 -0
  123. package/dist/cmd/coder/workspace/get.js +109 -0
  124. package/dist/cmd/coder/workspace/get.js.map +1 -0
  125. package/dist/cmd/coder/workspace/index.d.ts +2 -0
  126. package/dist/cmd/coder/workspace/index.d.ts.map +1 -0
  127. package/dist/cmd/coder/workspace/index.js +38 -0
  128. package/dist/cmd/coder/workspace/index.js.map +1 -0
  129. package/dist/cmd/coder/workspace/list.d.ts +2 -0
  130. package/dist/cmd/coder/workspace/list.d.ts.map +1 -0
  131. package/dist/cmd/coder/workspace/list.js +93 -0
  132. package/dist/cmd/coder/workspace/list.js.map +1 -0
  133. package/dist/cmd/dev/sync.js +5 -5
  134. package/dist/cmd/dev/sync.js.map +1 -1
  135. package/dist/coder-hub-url.d.ts +3 -0
  136. package/dist/coder-hub-url.d.ts.map +1 -0
  137. package/dist/coder-hub-url.js +32 -0
  138. package/dist/coder-hub-url.js.map +1 -0
  139. package/dist/config.d.ts +1 -0
  140. package/dist/config.d.ts.map +1 -1
  141. package/dist/config.js +14 -3
  142. package/dist/config.js.map +1 -1
  143. package/dist/internal-logger.d.ts +4 -0
  144. package/dist/internal-logger.d.ts.map +1 -1
  145. package/dist/internal-logger.js +64 -2
  146. package/dist/internal-logger.js.map +1 -1
  147. package/dist/keychain.d.ts +3 -0
  148. package/dist/keychain.d.ts.map +1 -1
  149. package/dist/keychain.js +47 -28
  150. package/dist/keychain.js.map +1 -1
  151. package/dist/types.d.ts +1 -1
  152. package/package.json +7 -6
  153. package/src/cli.ts +4 -2
  154. package/src/cmd/ai/prompt/agent.md +6 -6
  155. package/src/cmd/build/vite/route-discovery.ts +8 -0
  156. package/src/cmd/cloud/sandbox/fs/rm.ts +8 -3
  157. package/src/cmd/cloud/sandbox/fs/rmdir.ts +8 -3
  158. package/src/cmd/cloud/task/close.ts +319 -0
  159. package/src/cmd/cloud/task/delete.ts +15 -43
  160. package/src/cmd/cloud/task/index.ts +10 -0
  161. package/src/cmd/cloud/task/list.ts +111 -4
  162. package/src/cmd/cloud/task/util.ts +59 -5
  163. package/src/cmd/coder/archive.ts +59 -0
  164. package/src/cmd/coder/create.ts +268 -0
  165. package/src/cmd/coder/delete.ts +67 -0
  166. package/src/cmd/coder/events.ts +106 -0
  167. package/src/cmd/coder/extension-path.ts +71 -0
  168. package/src/cmd/coder/{inspect.ts → get.ts} +44 -45
  169. package/src/cmd/coder/index.ts +54 -4
  170. package/src/cmd/coder/list.ts +28 -65
  171. package/src/cmd/coder/loop.ts +85 -0
  172. package/src/cmd/coder/participants.ts +100 -0
  173. package/src/cmd/coder/replay.ts +58 -0
  174. package/src/cmd/coder/resolve-repo.ts +119 -0
  175. package/src/cmd/coder/skill/buckets.ts +191 -0
  176. package/src/cmd/coder/skill/delete.ts +67 -0
  177. package/src/cmd/coder/skill/index.ts +35 -0
  178. package/src/cmd/coder/skill/list.ts +97 -0
  179. package/src/cmd/coder/skill/save.ts +84 -0
  180. package/src/cmd/coder/start.ts +104 -141
  181. package/src/cmd/coder/tui-init.ts +13 -4
  182. package/src/cmd/coder/update.ts +128 -0
  183. package/src/cmd/coder/users.ts +101 -0
  184. package/src/cmd/coder/workspace/create.ts +104 -0
  185. package/src/cmd/coder/workspace/delete.ts +70 -0
  186. package/src/cmd/coder/workspace/get.ts +112 -0
  187. package/src/cmd/coder/workspace/index.ts +38 -0
  188. package/src/cmd/coder/workspace/list.ts +101 -0
  189. package/src/cmd/dev/sync.ts +5 -5
  190. package/src/coder-hub-url.ts +32 -0
  191. package/src/config.ts +17 -3
  192. package/src/internal-logger.ts +83 -2
  193. package/src/keychain.ts +68 -39
  194. package/dist/cmd/coder/hub-url.d.ts +0 -36
  195. package/dist/cmd/coder/hub-url.d.ts.map +0 -1
  196. package/dist/cmd/coder/hub-url.js +0 -106
  197. package/dist/cmd/coder/hub-url.js.map +0 -1
  198. package/dist/cmd/coder/inspect.d.ts +0 -2
  199. package/dist/cmd/coder/inspect.d.ts.map +0 -1
  200. package/dist/cmd/coder/inspect.js.map +0 -1
  201. package/src/cmd/coder/hub-url.ts +0 -111
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod';
2
+ import { CoderClient } from '@agentuity/core/coder';
3
+ import { ValidationOutputError } from '@agentuity/core';
4
+ import { createSubcommand } from '../../types';
5
+ import * as tui from '../../tui';
6
+ import { getCommand } from '../../command-prefix';
7
+ import { ErrorCode } from '../../errors';
8
+ export const replaySubcommand = createSubcommand({
9
+ name: 'replay',
10
+ description: 'Get replay data for a Coder Hub session',
11
+ tags: ['read-only', 'requires-auth'],
12
+ idempotent: true,
13
+ requires: { auth: true, org: true },
14
+ examples: [
15
+ {
16
+ command: getCommand('coder replay codesess_abc123 --json'),
17
+ description: 'Get replay data as JSON',
18
+ },
19
+ ],
20
+ schema: {
21
+ args: z.object({
22
+ sessionId: z.string().describe('Session ID to get replay data for'),
23
+ }),
24
+ options: z.object({
25
+ url: z.string().optional().describe('Coder API URL override'),
26
+ }),
27
+ },
28
+ async handler(ctx) {
29
+ const { args, opts, options } = ctx;
30
+ const client = new CoderClient({
31
+ apiKey: ctx.auth.apiKey,
32
+ url: opts?.url,
33
+ orgId: ctx.orgId,
34
+ });
35
+ try {
36
+ const replay = await client.getReplay(args.sessionId);
37
+ if (!options.json) {
38
+ tui.info('Replay data is shown as JSON because it is a complex payload.');
39
+ tui.output(JSON.stringify(replay, null, 2));
40
+ }
41
+ return replay;
42
+ }
43
+ catch (err) {
44
+ if (err instanceof ValidationOutputError) {
45
+ ctx.logger.trace('Validation response URL: %s', err.url ?? 'unknown');
46
+ ctx.logger.trace('Validation issues: %s', JSON.stringify(err.issues, null, 2));
47
+ }
48
+ const msg = err instanceof Error ? err.message : String(err);
49
+ tui.fatal(`Failed to get replay for session ${args.sessionId}: ${msg}`, ErrorCode.NETWORK_ERROR);
50
+ }
51
+ },
52
+ });
53
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/cmd/coder/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;IAChD,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,yCAAyC;IACtD,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC;IACpC,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,qCAAqC,CAAC;YAC1D,WAAW,EAAE,yBAAyB;SACtC;KACD;IACD,MAAM,EAAE;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACnE,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SAC7D,CAAC;KACF;IACD,KAAK,CAAC,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;YACvB,GAAG,EAAE,IAAI,EAAE,GAAG;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEtD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnB,GAAG,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;gBAC1E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;YAED,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;gBAC1C,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;gBACtE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,GAAG,CAAC,KAAK,CACR,oCAAoC,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,EAC5D,SAAS,CAAC,aAAa,CACvB,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { CoderClient, CoderSessionRepositoryRef } from '@agentuity/core/coder';
2
+ /**
3
+ * Parse a GitHub reference string into owner/repo/branch.
4
+ * Accepts:
5
+ * - github.com/owner/repo
6
+ * - https://github.com/owner/repo
7
+ * - https://github.com/owner/repo.git
8
+ * - owner/repo
9
+ * - owner/repo#branch
10
+ * - https://github.com/owner/repo/tree/branch
11
+ */
12
+ export declare function parseGitHubRef(input: string): {
13
+ owner: string;
14
+ repo: string;
15
+ branch?: string;
16
+ } | null;
17
+ /**
18
+ * Resolve a GitHub reference to a full repository ref by calling the Hub's GitHub APIs.
19
+ *
20
+ * Flow:
21
+ * 1. Parse the input to get owner/repo
22
+ * 2. List GitHub accounts → find the one matching the owner
23
+ * 3. List repos for that account → find the matching repo
24
+ * 4. Build full CoderSessionRepositoryRef with all metadata
25
+ */
26
+ export declare function resolveGitHubRepo(client: CoderClient, input: string, branchOverride?: string): Promise<CoderSessionRepositoryRef>;
27
+ //# sourceMappingURL=resolve-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-repo.d.ts","sourceRoot":"","sources":["../../../src/cmd/coder/resolve-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAEpF;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwCzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,CAAC,CAiDpC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Parse a GitHub reference string into owner/repo/branch.
3
+ * Accepts:
4
+ * - github.com/owner/repo
5
+ * - https://github.com/owner/repo
6
+ * - https://github.com/owner/repo.git
7
+ * - owner/repo
8
+ * - owner/repo#branch
9
+ * - https://github.com/owner/repo/tree/branch
10
+ */
11
+ export function parseGitHubRef(input) {
12
+ let clean = input.trim();
13
+ // Handle owner/repo#branch
14
+ let branch;
15
+ const hashIdx = clean.indexOf('#');
16
+ if (hashIdx > 0) {
17
+ branch = clean.slice(hashIdx + 1);
18
+ clean = clean.slice(0, hashIdx);
19
+ }
20
+ // Handle URLs
21
+ if (clean.includes('github.com')) {
22
+ try {
23
+ const url = new URL(clean.startsWith('http') ? clean : `https://${clean}`);
24
+ const parts = url.pathname
25
+ .replace(/^\//, '')
26
+ .replace(/\.git$/, '')
27
+ .split('/');
28
+ const owner = parts[0];
29
+ const repo = parts[1];
30
+ if (parts.length >= 2 && owner && repo) {
31
+ // Handle /tree/branch paths
32
+ if (parts.length >= 4 && parts[2] === 'tree') {
33
+ branch = branch || parts.slice(3).join('/');
34
+ }
35
+ return { owner, repo, branch };
36
+ }
37
+ }
38
+ catch {
39
+ // fall through
40
+ }
41
+ }
42
+ // Handle owner/repo
43
+ const slashParts = clean.replace(/\.git$/, '').split('/');
44
+ if (slashParts.length === 2 && slashParts[0] && slashParts[1]) {
45
+ return { owner: slashParts[0], repo: slashParts[1], branch };
46
+ }
47
+ return null;
48
+ }
49
+ /**
50
+ * Resolve a GitHub reference to a full repository ref by calling the Hub's GitHub APIs.
51
+ *
52
+ * Flow:
53
+ * 1. Parse the input to get owner/repo
54
+ * 2. List GitHub accounts → find the one matching the owner
55
+ * 3. List repos for that account → find the matching repo
56
+ * 4. Build full CoderSessionRepositoryRef with all metadata
57
+ */
58
+ export async function resolveGitHubRepo(client, input, branchOverride) {
59
+ const parsed = parseGitHubRef(input);
60
+ if (!parsed) {
61
+ throw new Error(`Could not parse GitHub reference: ${input}`);
62
+ }
63
+ const { owner, repo, branch: parsedBranch } = parsed;
64
+ const branch = branchOverride || parsedBranch;
65
+ // Step 1: List GitHub accounts
66
+ const accountsResponse = await client.listGitHubAccounts();
67
+ if (!accountsResponse.connected) {
68
+ throw new Error('GitHub is not connected. Please connect GitHub via the Coder web UI first.');
69
+ }
70
+ const account = accountsResponse.accounts.find((a) => a.accountName.toLowerCase() === owner.toLowerCase());
71
+ if (!account) {
72
+ const available = accountsResponse.accounts.map((a) => a.accountName).join(', ');
73
+ throw new Error(`GitHub account "${owner}" not found. Available accounts: ${available || 'none'}`);
74
+ }
75
+ // Step 2: List repos for that account
76
+ const reposResponse = await client.listGitHubRepos(account.accountId);
77
+ const repoMatch = reposResponse.repositories.find((r) => r.name.toLowerCase() === repo.toLowerCase());
78
+ if (!repoMatch) {
79
+ throw new Error(`Repository "${repo}" not found in GitHub account "${owner}".`);
80
+ }
81
+ // Step 3: Build full repo ref
82
+ return {
83
+ url: repoMatch.cloneUrl,
84
+ branch: branch || repoMatch.defaultBranch,
85
+ provider: 'github',
86
+ name: repoMatch.name,
87
+ fullName: repoMatch.fullName,
88
+ defaultBranch: repoMatch.defaultBranch,
89
+ private: repoMatch.private,
90
+ htmlUrl: repoMatch.htmlUrl,
91
+ accountId: account.accountId,
92
+ accountName: account.accountName,
93
+ accountType: account.accountType,
94
+ accountAvatarUrl: account.avatarUrl,
95
+ };
96
+ }
97
+ //# sourceMappingURL=resolve-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-repo.js","sourceRoot":"","sources":["../../../src/cmd/coder/resolve-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const bucketsSubcommand: import("../../..").SubcommandDefinition;
2
+ //# sourceMappingURL=buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/buckets.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,iBAAiB,yCAwK5B,CAAC"}
@@ -0,0 +1,174 @@
1
+ import { z } from 'zod';
2
+ import { CoderClient } from '@agentuity/core/coder';
3
+ import { ValidationOutputError } from '@agentuity/core';
4
+ import { createSubcommand } from '../../../types';
5
+ import * as tui from '../../../tui';
6
+ import { getCommand } from '../../../command-prefix';
7
+ import { ErrorCode } from '../../../errors';
8
+ function formatRelativeTime(isoDate) {
9
+ const parsed = new Date(isoDate).getTime();
10
+ if (Number.isNaN(parsed))
11
+ return 'unknown';
12
+ const diffMs = Math.max(0, Date.now() - parsed);
13
+ const seconds = Math.floor(diffMs / 1000);
14
+ if (seconds < 60)
15
+ return `${seconds}s ago`;
16
+ const minutes = Math.floor(seconds / 60);
17
+ if (minutes < 60)
18
+ return `${minutes}m ago`;
19
+ const hours = Math.floor(minutes / 60);
20
+ if (hours < 24)
21
+ return `${hours}h ago`;
22
+ const days = Math.floor(hours / 24);
23
+ return `${days}d ago`;
24
+ }
25
+ export const bucketsSubcommand = createSubcommand({
26
+ name: 'buckets',
27
+ aliases: ['bucket'],
28
+ description: 'List, create, or delete skill buckets',
29
+ tags: ['requires-auth'],
30
+ requires: { auth: true, org: true },
31
+ examples: [
32
+ {
33
+ command: getCommand('coder skill buckets'),
34
+ description: 'List skill buckets',
35
+ },
36
+ {
37
+ command: getCommand('coder skill buckets --create "My Bucket"'),
38
+ description: 'Create a new skill bucket',
39
+ },
40
+ {
41
+ command: getCommand('coder skill buckets --create "My Bucket" --description "Frontend skills"'),
42
+ description: 'Create a skill bucket with description',
43
+ },
44
+ {
45
+ command: getCommand('coder skill buckets --delete bucket_abc123'),
46
+ description: 'Delete a skill bucket',
47
+ },
48
+ {
49
+ command: getCommand('coder skill buckets --json'),
50
+ description: 'List skill buckets as JSON',
51
+ },
52
+ ],
53
+ schema: {
54
+ options: z.object({
55
+ url: z.string().optional().describe('Coder API URL override'),
56
+ create: z.string().optional().describe('Create a new bucket with this name'),
57
+ delete: z.string().optional().describe('Delete bucket by ID'),
58
+ description: z
59
+ .string()
60
+ .optional()
61
+ .describe('Description for new bucket (used with --create)'),
62
+ }),
63
+ },
64
+ async handler(ctx) {
65
+ const { opts, options } = ctx;
66
+ // Validate mutually exclusive actions
67
+ if (opts?.create && opts?.delete) {
68
+ tui.fatal('Cannot use --create and --delete together.', ErrorCode.VALIDATION_FAILED);
69
+ }
70
+ if (opts?.create && !opts.create.trim()) {
71
+ tui.fatal('--create requires a non-empty bucket name.', ErrorCode.VALIDATION_FAILED);
72
+ }
73
+ if (opts?.delete && !opts.delete.trim()) {
74
+ tui.fatal('--delete requires a non-empty bucket ID.', ErrorCode.VALIDATION_FAILED);
75
+ }
76
+ if (opts?.description && !opts?.create) {
77
+ tui.fatal('--description can only be used with --create.', ErrorCode.VALIDATION_FAILED);
78
+ }
79
+ const client = new CoderClient({
80
+ apiKey: ctx.auth.apiKey,
81
+ url: opts?.url,
82
+ orgId: ctx.orgId,
83
+ });
84
+ // Delete a bucket
85
+ if (opts?.delete) {
86
+ if (!options.json) {
87
+ const confirmed = await tui.confirm(`Delete skill bucket ${opts.delete}?`, false);
88
+ if (!confirmed) {
89
+ tui.info('Cancelled.');
90
+ return { deleted: false, id: opts.delete };
91
+ }
92
+ }
93
+ try {
94
+ await client.deleteSkillBucket(opts.delete);
95
+ }
96
+ catch (err) {
97
+ if (err instanceof ValidationOutputError) {
98
+ ctx.logger.trace('Validation response URL: %s', err.url ?? 'unknown');
99
+ ctx.logger.trace('Validation issues: %s', JSON.stringify(err.issues, null, 2));
100
+ }
101
+ const msg = err instanceof Error ? err.message : String(err);
102
+ tui.fatal(`Failed to delete skill bucket ${opts.delete}: ${msg}`, ErrorCode.NETWORK_ERROR);
103
+ }
104
+ if (options.json) {
105
+ return { deleted: true, id: opts.delete };
106
+ }
107
+ tui.success(`Skill bucket ${opts.delete} deleted.`);
108
+ return { deleted: true, id: opts.delete };
109
+ }
110
+ // Create a bucket
111
+ if (opts?.create) {
112
+ try {
113
+ const created = await client.createSkillBucket({
114
+ name: opts.create,
115
+ ...(opts?.description && { description: opts.description }),
116
+ });
117
+ if (options.json) {
118
+ return created;
119
+ }
120
+ tui.success(`Skill bucket ${created.id} created.`);
121
+ tui.newline();
122
+ tui.output(` Name: ${tui.bold(created.name)}`);
123
+ if (created.description) {
124
+ tui.output(` Desc: ${created.description}`);
125
+ }
126
+ tui.output(` Skills: ${created.skillCount}`);
127
+ return created;
128
+ }
129
+ catch (err) {
130
+ if (err instanceof ValidationOutputError) {
131
+ ctx.logger.trace('Validation response URL: %s', err.url ?? 'unknown');
132
+ ctx.logger.trace('Validation issues: %s', JSON.stringify(err.issues, null, 2));
133
+ }
134
+ const msg = err instanceof Error ? err.message : String(err);
135
+ tui.fatal(`Failed to create skill bucket: ${msg}`, ErrorCode.NETWORK_ERROR);
136
+ return;
137
+ }
138
+ }
139
+ // Default: list buckets
140
+ let buckets = [];
141
+ try {
142
+ const response = await client.listSkillBuckets();
143
+ buckets = response.buckets;
144
+ }
145
+ catch (err) {
146
+ if (err instanceof ValidationOutputError) {
147
+ ctx.logger.trace('Validation response URL: %s', err.url ?? 'unknown');
148
+ ctx.logger.trace('Validation issues: %s', JSON.stringify(err.issues, null, 2));
149
+ }
150
+ const msg = err instanceof Error ? err.message : String(err);
151
+ tui.fatal(`Failed to list Coder skill buckets: ${msg}`, ErrorCode.NETWORK_ERROR);
152
+ }
153
+ if (options.json) {
154
+ return buckets;
155
+ }
156
+ if (buckets.length === 0) {
157
+ tui.info('No Coder skill buckets found.');
158
+ return [];
159
+ }
160
+ tui.table(buckets.map((b) => ({
161
+ ID: b.id,
162
+ Name: b.name,
163
+ Skills: String(b.skillCount),
164
+ Created: formatRelativeTime(b.createdAt),
165
+ })), [
166
+ { name: 'ID', alignment: 'left' },
167
+ { name: 'Name', alignment: 'left' },
168
+ { name: 'Skills', alignment: 'right' },
169
+ { name: 'Created', alignment: 'right' },
170
+ ]);
171
+ return buckets;
172
+ },
173
+ });
174
+ //# sourceMappingURL=buckets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.js","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/buckets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const deleteSkillSubcommand: import("../../..").SubcommandDefinition;
2
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/delete.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,qBAAqB,yCA0DhC,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { z } from 'zod';
2
+ import { CoderClient } from '@agentuity/core/coder';
3
+ import { ValidationOutputError } from '@agentuity/core';
4
+ import { createSubcommand } from '../../../types';
5
+ import * as tui from '../../../tui';
6
+ import { getCommand } from '../../../command-prefix';
7
+ import { ErrorCode } from '../../../errors';
8
+ export const deleteSkillSubcommand = createSubcommand({
9
+ name: 'delete',
10
+ aliases: ['rm', 'del', 'remove'],
11
+ description: 'Delete a saved skill from your library',
12
+ tags: ['destructive', 'deletes-resource', 'requires-auth'],
13
+ requires: { auth: true, org: true },
14
+ examples: [
15
+ {
16
+ command: getCommand('coder skill delete sk_abc123'),
17
+ description: 'Delete a saved skill',
18
+ },
19
+ {
20
+ command: getCommand('coder skill delete sk_abc123 --json'),
21
+ description: 'Delete a saved skill and return JSON output',
22
+ },
23
+ ],
24
+ schema: {
25
+ args: z.object({
26
+ id: z.string().describe('Saved skill ID to delete'),
27
+ }),
28
+ options: z.object({
29
+ url: z.string().optional().describe('Coder API URL override'),
30
+ }),
31
+ },
32
+ async handler(ctx) {
33
+ const { args, opts, options } = ctx;
34
+ const client = new CoderClient({
35
+ apiKey: ctx.auth.apiKey,
36
+ url: opts?.url,
37
+ orgId: ctx.orgId,
38
+ });
39
+ if (!options.json) {
40
+ const confirmed = await tui.confirm(`Delete saved skill ${args.id}?`, false);
41
+ if (!confirmed) {
42
+ tui.info('Cancelled.');
43
+ return { deleted: false, id: args.id };
44
+ }
45
+ }
46
+ try {
47
+ await client.deleteSavedSkill(args.id);
48
+ }
49
+ catch (err) {
50
+ if (err instanceof ValidationOutputError) {
51
+ ctx.logger.trace('Validation response URL: %s', err.url ?? 'unknown');
52
+ ctx.logger.trace('Validation issues: %s', JSON.stringify(err.issues, null, 2));
53
+ }
54
+ const msg = err instanceof Error ? err.message : String(err);
55
+ tui.fatal(`Failed to delete saved skill ${args.id}: ${msg}`, ErrorCode.NETWORK_ERROR);
56
+ }
57
+ if (options.json) {
58
+ return { deleted: true, id: args.id };
59
+ }
60
+ tui.success(`Saved skill ${args.id} deleted.`);
61
+ return { deleted: true, id: args.id };
62
+ },
63
+ });
64
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const skillCommand: import("../../..").CommandDefinition;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,sCA2BvB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { createCommand } from '../../../types';
2
+ import { listSubcommand } from './list';
3
+ import { saveSkillSubcommand } from './save';
4
+ import { deleteSkillSubcommand } from './delete';
5
+ import { bucketsSubcommand } from './buckets';
6
+ import { getCommand } from '../../../command-prefix';
7
+ export const skillCommand = createCommand({
8
+ name: 'skill',
9
+ aliases: ['skills'],
10
+ description: 'Manage Coder saved skills and skill buckets',
11
+ tags: ['requires-auth'],
12
+ requires: { auth: true, org: true },
13
+ examples: [
14
+ {
15
+ command: getCommand('coder skill list'),
16
+ description: 'List saved skills',
17
+ },
18
+ {
19
+ command: getCommand('coder skill save --repo org/repo --skill-id sk_abc --name "My Skill"'),
20
+ description: 'Save a skill to your library',
21
+ },
22
+ {
23
+ command: getCommand('coder skill delete sk_abc123'),
24
+ description: 'Delete a saved skill',
25
+ },
26
+ {
27
+ command: getCommand('coder skill buckets'),
28
+ description: 'List skill buckets',
29
+ },
30
+ ],
31
+ subcommands: [listSubcommand, saveSkillSubcommand, deleteSkillSubcommand, bucketsSubcommand],
32
+ });
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,WAAW,EAAE,6CAA6C;IAC1D,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC;YACvC,WAAW,EAAE,mBAAmB;SAChC;QACD;YACC,OAAO,EAAE,UAAU,CAClB,sEAAsE,CACtE;YACD,WAAW,EAAE,8BAA8B;SAC3C;QACD;YACC,OAAO,EAAE,UAAU,CAAC,8BAA8B,CAAC;YACnD,WAAW,EAAE,sBAAsB;SACnC;QACD;YACC,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC;YAC1C,WAAW,EAAE,oBAAoB;SACjC;KACD;IACD,WAAW,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC;CAC5F,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const listSubcommand: import("../../..").SubcommandDefinition;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/list.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,cAAc,yCA0EzB,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod';
2
+ import { CoderClient, CoderSavedSkillSchema } from '@agentuity/core/coder';
3
+ import { ValidationOutputError } from '@agentuity/core';
4
+ import { createSubcommand } from '../../../types';
5
+ import * as tui from '../../../tui';
6
+ import { getCommand } from '../../../command-prefix';
7
+ import { ErrorCode } from '../../../errors';
8
+ function formatRelativeTime(isoDate) {
9
+ const parsed = new Date(isoDate).getTime();
10
+ if (Number.isNaN(parsed))
11
+ return 'unknown';
12
+ const diffMs = Math.max(0, Date.now() - parsed);
13
+ const seconds = Math.floor(diffMs / 1000);
14
+ if (seconds < 60)
15
+ return `${seconds}s ago`;
16
+ const minutes = Math.floor(seconds / 60);
17
+ if (minutes < 60)
18
+ return `${minutes}m ago`;
19
+ const hours = Math.floor(minutes / 60);
20
+ if (hours < 24)
21
+ return `${hours}h ago`;
22
+ const days = Math.floor(hours / 24);
23
+ return `${days}d ago`;
24
+ }
25
+ export const listSubcommand = createSubcommand({
26
+ name: 'list',
27
+ aliases: ['ls'],
28
+ description: 'List saved skills',
29
+ tags: ['read-only', 'fast', 'requires-auth'],
30
+ idempotent: true,
31
+ requires: { auth: true, org: true },
32
+ examples: [
33
+ {
34
+ command: getCommand('coder skill list'),
35
+ description: 'List saved skills',
36
+ },
37
+ {
38
+ command: getCommand('coder skill list --json'),
39
+ description: 'Return saved skills as JSON',
40
+ },
41
+ ],
42
+ schema: {
43
+ options: z.object({
44
+ url: z.string().optional().describe('Coder API URL override'),
45
+ }),
46
+ response: z.array(CoderSavedSkillSchema),
47
+ },
48
+ async handler(ctx) {
49
+ const { options, opts } = ctx;
50
+ const client = new CoderClient({
51
+ apiKey: ctx.auth.apiKey,
52
+ url: opts?.url,
53
+ orgId: ctx.orgId,
54
+ });
55
+ let skills = [];
56
+ try {
57
+ const response = await client.listSavedSkills();
58
+ skills = response.skills;
59
+ }
60
+ catch (err) {
61
+ if (err instanceof ValidationOutputError) {
62
+ ctx.logger.trace('Validation response URL: %s', err.url ?? 'unknown');
63
+ ctx.logger.trace('Validation issues: %s', JSON.stringify(err.issues, null, 2));
64
+ }
65
+ const msg = err instanceof Error ? err.message : String(err);
66
+ tui.fatal(`Failed to list Coder saved skills: ${msg}`, ErrorCode.NETWORK_ERROR);
67
+ }
68
+ if (options.json) {
69
+ return skills;
70
+ }
71
+ if (skills.length === 0) {
72
+ tui.info('No Coder saved skills found.');
73
+ return [];
74
+ }
75
+ tui.table(skills.map((s) => ({
76
+ ID: s.id,
77
+ Name: s.name,
78
+ Repo: s.repo,
79
+ Source: s.source,
80
+ Installs: s.installs !== undefined ? String(s.installs) : '-',
81
+ Created: formatRelativeTime(s.createdAt),
82
+ })), [
83
+ { name: 'ID', alignment: 'left' },
84
+ { name: 'Name', alignment: 'left' },
85
+ { name: 'Repo', alignment: 'left' },
86
+ { name: 'Source', alignment: 'left' },
87
+ { name: 'Installs', alignment: 'right' },
88
+ { name: 'Created', alignment: 'right' },
89
+ ]);
90
+ return skills;
91
+ },
92
+ });
93
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const saveSkillSubcommand: import("../../..").SubcommandDefinition;
2
+ //# sourceMappingURL=save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/save.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mBAAmB,yCA2E9B,CAAC"}